From 15c41157569d1ab6c9236432ac801a9f1e3fe40c Mon Sep 17 00:00:00 2001
From: Damien OLIVIER <damien.olivier@univ-lehavre.fr>
Date: Sat, 21 Mar 2020 11:05:23 +0100
Subject: [PATCH] SIR VO

---
 codes/Epidemio/COVID-19/SIR-COVID19_V0.nlogo  |   665 +
 .../Epidemio/COVID-19/Web/SIR-COVID19_V0.html | 87886 ++++++++++++++++
 2 files changed, 88551 insertions(+)
 create mode 100644 codes/Epidemio/COVID-19/SIR-COVID19_V0.nlogo
 create mode 100644 codes/Epidemio/COVID-19/Web/SIR-COVID19_V0.html

diff --git a/codes/Epidemio/COVID-19/SIR-COVID19_V0.nlogo b/codes/Epidemio/COVID-19/SIR-COVID19_V0.nlogo
new file mode 100644
index 0000000..5cfbe60
--- /dev/null
+++ b/codes/Epidemio/COVID-19/SIR-COVID19_V0.nlogo
@@ -0,0 +1,665 @@
+
+
+;======================================
+; Initialisation de nos pauvres tortues
+;======================================
+
+turtles-own[
+  futur-etat
+  duree-maladie
+]
+
+
+;
+; Initialisation des tortues
+; - la couleur code l'état blanche = S, rouge = I, vert = R
+; - position aléatoire
+; - non infectée (blanche)
+to initialisation-tortues
+  create-turtles population-initiale [
+    set futur-etat white
+    set size 0.5
+    set duree-maladie 0
+    setxy random-pxcor random-pycor
+  ]
+end
+
+;
+; On tire au hasard nb-premiere-infectee tortues.
+; Leur état change donc.
+;
+to souche-infection
+  ask n-of nb-premiere-infectee turtles [
+    set futur-etat red
+  ]
+end
+
+to initialisation
+  ca
+  if (alea-fixe) [random-seed 19]
+  initialisation-tortues
+  souche-infection
+  maj-etat
+  reset-ticks
+end
+
+
+;=============================
+; La simulation, le modèle SIR
+;=============================
+
+;
+; Déplacement des tortues. On pourrait avoir un déplacement plus sophistiqué.
+;
+to bouge
+   ask turtles [
+    right random 360
+    forward pas
+  ]
+end
+
+;
+; Contamination S -> I
+; On compte le nombre de voisines infectées en fonction de la distance
+; La contamination se fait en fonction d'une probabilité
+;
+to infection-des-saines
+  ask turtles with [color = white] [
+   let nombre-de-voisines-infectees  (count other turtles with [color = red] in-radius distance-non-sociale)
+   if (random-float 1 <  1 - (((1 - proba-de-transmission) ^ nombre-de-voisines-infectees)))
+    [set futur-etat red]
+  ]
+end
+
+;
+; Les infectées sortent de la maladie, elles deviennent remise I -> R
+;
+to fin-maladie
+  ask turtles with [color = red]
+  [
+    if (duree-maladie > duree-contagion) [ set futur-etat green]
+  ]
+end
+
+
+to maj-etat
+  ask turtles [
+    set color futur-etat
+    if (color = red) [set duree-maladie duree-maladie + 1]
+  ]
+end
+
+;===========================
+; Lancement de la simulation
+;===========================
+to execute
+  let n count turtles with [color = red]
+  if (n = 0) or (n = population-initiale) [stop]
+  infection-des-saines
+  fin-maladie
+  maj-etat
+  bouge
+  tick
+end
+
+@#$#@#$#@
+GRAPHICS-WINDOW
+253
+10
+690
+448
+-1
+-1
+13.0
+1
+10
+1
+1
+1
+0
+1
+1
+1
+-16
+16
+-16
+16
+0
+0
+1
+ticks
+30.0
+
+BUTTON
+20
+30
+138
+63
+initialisation
+initialisation
+NIL
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+BUTTON
+21
+63
+138
+96
+NIL
+execute
+T
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+SLIDER
+18
+165
+251
+198
+population-initiale
+population-initiale
+0
+2000
+1000.0
+1
+1
+NIL
+HORIZONTAL
+
+SLIDER
+18
+198
+251
+231
+nb-premiere-infectee
+nb-premiere-infectee
+0
+50
+4.0
+1
+1
+NIL
+HORIZONTAL
+
+SLIDER
+19
+297
+250
+330
+pas
+pas
+0
+10
+0.8
+.1
+1
+NIL
+HORIZONTAL
+
+SLIDER
+19
+330
+250
+363
+distance-non-sociale
+distance-non-sociale
+0
+5
+1.5
+0.1
+1
+NIL
+HORIZONTAL
+
+SWITCH
+138
+30
+255
+63
+alea-fixe
+alea-fixe
+1
+1
+-1000
+
+SLIDER
+18
+231
+251
+264
+proba-de-transmission
+proba-de-transmission
+0
+1
+0.09
+0.01
+1
+%
+HORIZONTAL
+
+BUTTON
+138
+63
+255
+96
+pas à pas
+execute
+NIL
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+SLIDER
+18
+263
+251
+296
+duree-contagion
+duree-contagion
+0
+20
+10.0
+1
+1
+NIL
+HORIZONTAL
+
+PLOT
+689
+12
+1236
+447
+Évolution de l'infection
+Temps
+%
+0.0
+10.0
+0.0
+1.0
+true
+true
+"set-current-plot-pen \"Sains\"" ""
+PENS
+"Infectés" 1.0 0 -5298144 true "" "plotxy ticks 100 * (count turtles with [color = red]) / population-initiale\n"
+"Sains" 1.0 2 -16777216 true "" "plotxy ticks 100 * (count turtles with [color = white]) / population-initiale"
+"Remis" 1.0 2 -10899396 true "" "plotxy ticks 100 * (count turtles with [color = green]) / population-initiale"
+
+@#$#@#$#@
+## 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
+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
+@#$#@#$#@
+NetLogo 6.1.1
+@#$#@#$#@
+@#$#@#$#@
+@#$#@#$#@
+@#$#@#$#@
+@#$#@#$#@
+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
+@#$#@#$#@
diff --git a/codes/Epidemio/COVID-19/Web/SIR-COVID19_V0.html b/codes/Epidemio/COVID-19/Web/SIR-COVID19_V0.html
new file mode 100644
index 0000000..a1e36d4
--- /dev/null
+++ b/codes/Epidemio/COVID-19/Web/SIR-COVID19_V0.html
@@ -0,0 +1,87886 @@
+<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>.CodeMirror-hints {
+  position: absolute;
+  z-index: 10;
+  overflow: hidden;
+  list-style: none;
+
+  margin: 0;
+  padding: 2px;
+
+  -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+  -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+  box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+  border-radius: 3px;
+  border: 1px solid silver;
+
+  background: white;
+  font-size: 90%;
+  font-family: monospace;
+
+  max-height: 20em;
+  overflow-y: auto;
+}
+
+.CodeMirror-hint {
+  margin: 0;
+  padding: 0 4px;
+  border-radius: 2px;
+  white-space: pre;
+  color: black;
+  cursor: pointer;
+}
+
+li.CodeMirror-hint-active {
+  background: #08f;
+  color: white;
+}
+</style>
+    <style>/*!
+Chosen, a Select Box Enhancer for jQuery and Prototype
+by Patrick Filler for Harvest, http://getharvest.com
+
+Version 1.8.7
+Full source at https://github.com/harvesthq/chosen
+Copyright (c) 2011-2018 Harvest http://getharvest.com
+
+MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
+This file is generated by `grunt build`, do not edit it by hand.
+*/
+
+/* @group Base */
+.chosen-container {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+  font-size: 13px;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.chosen-container * {
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.chosen-container .chosen-drop {
+  position: absolute;
+  top: 100%;
+  z-index: 1010;
+  width: 100%;
+  border: 1px solid #aaa;
+  border-top: 0;
+  background: #fff;
+  -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
+          box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
+  clip: rect(0, 0, 0, 0);
+  -webkit-clip-path: inset(100% 100%);
+          clip-path: inset(100% 100%);
+}
+
+.chosen-container.chosen-with-drop .chosen-drop {
+  clip: auto;
+  -webkit-clip-path: none;
+          clip-path: none;
+}
+
+.chosen-container a {
+  cursor: pointer;
+}
+
+.chosen-container .search-choice .group-name, .chosen-container .chosen-single .group-name {
+  margin-right: 4px;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  font-weight: normal;
+  color: #999999;
+}
+
+.chosen-container .search-choice .group-name:after, .chosen-container .chosen-single .group-name:after {
+  content: ":";
+  padding-left: 2px;
+  vertical-align: top;
+}
+
+/* @end */
+/* @group Single Chosen */
+.chosen-container-single .chosen-single {
+  position: relative;
+  display: block;
+  overflow: hidden;
+  padding: 0 0 0 8px;
+  height: 25px;
+  border: 1px solid #aaa;
+  border-radius: 5px;
+  background-color: #fff;
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #fff), color-stop(50%, #f6f6f6), color-stop(52%, #eee), to(#f4f4f4));
+  background: linear-gradient(#fff 20%, #f6f6f6 50%, #eee 52%, #f4f4f4 100%);
+  background-clip: padding-box;
+  -webkit-box-shadow: 0 0 3px #fff inset, 0 1px 1px rgba(0, 0, 0, 0.1);
+          box-shadow: 0 0 3px #fff inset, 0 1px 1px rgba(0, 0, 0, 0.1);
+  color: #444;
+  text-decoration: none;
+  white-space: nowrap;
+  line-height: 24px;
+}
+
+.chosen-container-single .chosen-default {
+  color: #999;
+}
+
+.chosen-container-single .chosen-single span {
+  display: block;
+  overflow: hidden;
+  margin-right: 26px;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.chosen-container-single .chosen-single-with-deselect span {
+  margin-right: 38px;
+}
+
+.chosen-container-single .chosen-single abbr {
+  position: absolute;
+  top: 6px;
+  right: 26px;
+  display: block;
+  width: 12px;
+  height: 12px;
+  background: url("chosen-sprite.png") -42px 1px no-repeat;
+  font-size: 1px;
+}
+
+.chosen-container-single .chosen-single abbr:hover {
+  background-position: -42px -10px;
+}
+
+.chosen-container-single.chosen-disabled .chosen-single abbr:hover {
+  background-position: -42px -10px;
+}
+
+.chosen-container-single .chosen-single div {
+  position: absolute;
+  top: 0;
+  right: 0;
+  display: block;
+  width: 18px;
+  height: 100%;
+}
+
+.chosen-container-single .chosen-single div b {
+  display: block;
+  width: 100%;
+  height: 100%;
+  background: url("chosen-sprite.png") no-repeat 0px 2px;
+}
+
+.chosen-container-single .chosen-search {
+  position: relative;
+  z-index: 1010;
+  margin: 0;
+  padding: 3px 4px;
+  white-space: nowrap;
+}
+
+.chosen-container-single .chosen-search input[type="text"] {
+  margin: 1px 0;
+  padding: 4px 20px 4px 5px;
+  width: 100%;
+  height: auto;
+  outline: 0;
+  border: 1px solid #aaa;
+  background: url("chosen-sprite.png") no-repeat 100% -20px;
+  font-size: 1em;
+  font-family: sans-serif;
+  line-height: normal;
+  border-radius: 0;
+}
+
+.chosen-container-single .chosen-drop {
+  margin-top: -1px;
+  border-radius: 0 0 4px 4px;
+  background-clip: padding-box;
+}
+
+.chosen-container-single.chosen-container-single-nosearch .chosen-search {
+  position: absolute;
+  clip: rect(0, 0, 0, 0);
+  -webkit-clip-path: inset(100% 100%);
+          clip-path: inset(100% 100%);
+}
+
+/* @end */
+/* @group Results */
+.chosen-container .chosen-results {
+  color: #444;
+  position: relative;
+  overflow-x: hidden;
+  overflow-y: auto;
+  margin: 0 4px 4px 0;
+  padding: 0 0 0 4px;
+  max-height: 240px;
+  -webkit-overflow-scrolling: touch;
+}
+
+.chosen-container .chosen-results li {
+  display: none;
+  margin: 0;
+  padding: 5px 6px;
+  list-style: none;
+  line-height: 15px;
+  word-wrap: break-word;
+  -webkit-touch-callout: none;
+}
+
+.chosen-container .chosen-results li.active-result {
+  display: list-item;
+  cursor: pointer;
+}
+
+.chosen-container .chosen-results li.disabled-result {
+  display: list-item;
+  color: #ccc;
+  cursor: default;
+}
+
+.chosen-container .chosen-results li.highlighted {
+  background-color: #3875d7;
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
+  background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
+  color: #fff;
+}
+
+.chosen-container .chosen-results li.no-results {
+  color: #777;
+  display: list-item;
+  background: #f4f4f4;
+}
+
+.chosen-container .chosen-results li.group-result {
+  display: list-item;
+  font-weight: bold;
+  cursor: default;
+}
+
+.chosen-container .chosen-results li.group-option {
+  padding-left: 15px;
+}
+
+.chosen-container .chosen-results li em {
+  font-style: normal;
+  text-decoration: underline;
+}
+
+/* @end */
+/* @group Multi Chosen */
+.chosen-container-multi .chosen-choices {
+  position: relative;
+  overflow: hidden;
+  margin: 0;
+  padding: 0 5px;
+  width: 100%;
+  height: auto;
+  border: 1px solid #aaa;
+  background-color: #fff;
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(1%, #eee), color-stop(15%, #fff));
+  background-image: linear-gradient(#eee 1%, #fff 15%);
+  cursor: text;
+}
+
+.chosen-container-multi .chosen-choices li {
+  float: left;
+  list-style: none;
+}
+
+.chosen-container-multi .chosen-choices li.search-field {
+  margin: 0;
+  padding: 0;
+  white-space: nowrap;
+}
+
+.chosen-container-multi .chosen-choices li.search-field input[type="text"] {
+  margin: 1px 0;
+  padding: 0;
+  height: 25px;
+  outline: 0;
+  border: 0 !important;
+  background: transparent !important;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  color: #999;
+  font-size: 100%;
+  font-family: sans-serif;
+  line-height: normal;
+  border-radius: 0;
+  width: 25px;
+}
+
+.chosen-container-multi .chosen-choices li.search-choice {
+  position: relative;
+  margin: 3px 5px 3px 0;
+  padding: 3px 20px 3px 5px;
+  border: 1px solid #aaa;
+  max-width: 100%;
+  border-radius: 3px;
+  background-color: #eeeeee;
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), to(#eee));
+  background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
+  background-size: 100% 19px;
+  background-repeat: repeat-x;
+  background-clip: padding-box;
+  -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
+          box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
+  color: #333;
+  line-height: 13px;
+  cursor: default;
+}
+
+.chosen-container-multi .chosen-choices li.search-choice span {
+  word-wrap: break-word;
+}
+
+.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
+  position: absolute;
+  top: 4px;
+  right: 3px;
+  display: block;
+  width: 12px;
+  height: 12px;
+  background: url("chosen-sprite.png") -42px 1px no-repeat;
+  font-size: 1px;
+}
+
+.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
+  background-position: -42px -10px;
+}
+
+.chosen-container-multi .chosen-choices li.search-choice-disabled {
+  padding-right: 5px;
+  border: 1px solid #ccc;
+  background-color: #e4e4e4;
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), to(#eee));
+  background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
+  color: #666;
+}
+
+.chosen-container-multi .chosen-choices li.search-choice-focus {
+  background: #d4d4d4;
+}
+
+.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
+  background-position: -42px -10px;
+}
+
+.chosen-container-multi .chosen-results {
+  margin: 0;
+  padding: 0;
+}
+
+.chosen-container-multi .chosen-drop .result-selected {
+  display: list-item;
+  color: #ccc;
+  cursor: default;
+}
+
+/* @end */
+/* @group Active  */
+.chosen-container-active .chosen-single {
+  border: 1px solid #5897fb;
+  -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
+          box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
+}
+
+.chosen-container-active.chosen-with-drop .chosen-single {
+  border: 1px solid #aaa;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #eee), color-stop(80%, #fff));
+  background-image: linear-gradient(#eee 20%, #fff 80%);
+  -webkit-box-shadow: 0 1px 0 #fff inset;
+          box-shadow: 0 1px 0 #fff inset;
+}
+
+.chosen-container-active.chosen-with-drop .chosen-single div {
+  border-left: none;
+  background: transparent;
+}
+
+.chosen-container-active.chosen-with-drop .chosen-single div b {
+  background-position: -18px 2px;
+}
+
+.chosen-container-active .chosen-choices {
+  border: 1px solid #5897fb;
+  -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
+          box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
+}
+
+.chosen-container-active .chosen-choices li.search-field input[type="text"] {
+  color: #222 !important;
+}
+
+/* @end */
+/* @group Disabled Support */
+.chosen-disabled {
+  opacity: 0.5 !important;
+  cursor: default;
+}
+
+.chosen-disabled .chosen-single {
+  cursor: default;
+}
+
+.chosen-disabled .chosen-choices .search-choice .search-choice-close {
+  cursor: default;
+}
+
+/* @end */
+/* @group Right to Left */
+.chosen-rtl {
+  text-align: right;
+}
+
+.chosen-rtl .chosen-single {
+  overflow: visible;
+  padding: 0 8px 0 0;
+}
+
+.chosen-rtl .chosen-single span {
+  margin-right: 0;
+  margin-left: 26px;
+  direction: rtl;
+}
+
+.chosen-rtl .chosen-single-with-deselect span {
+  margin-left: 38px;
+}
+
+.chosen-rtl .chosen-single div {
+  right: auto;
+  left: 3px;
+}
+
+.chosen-rtl .chosen-single abbr {
+  right: auto;
+  left: 26px;
+}
+
+.chosen-rtl .chosen-choices li {
+  float: right;
+}
+
+.chosen-rtl .chosen-choices li.search-field input[type="text"] {
+  direction: rtl;
+}
+
+.chosen-rtl .chosen-choices li.search-choice {
+  margin: 3px 5px 3px 0;
+  padding: 3px 5px 3px 19px;
+}
+
+.chosen-rtl .chosen-choices li.search-choice .search-choice-close {
+  right: auto;
+  left: 4px;
+}
+
+.chosen-rtl.chosen-container-single .chosen-results {
+  margin: 0 0 4px 4px;
+  padding: 0 4px 0 0;
+}
+
+.chosen-rtl .chosen-results li.group-option {
+  padding-right: 15px;
+  padding-left: 0;
+}
+
+.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
+  border-right: none;
+}
+
+.chosen-rtl .chosen-search input[type="text"] {
+  padding: 4px 5px 4px 20px;
+  background: url("chosen-sprite.png") no-repeat -30px -20px;
+  direction: rtl;
+}
+
+.chosen-rtl.chosen-container-single .chosen-single div b {
+  background-position: 6px 2px;
+}
+
+.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
+  background-position: -12px 2px;
+}
+
+/* @end */
+/* @group Retina compatibility */
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) {
+  .chosen-rtl .chosen-search input[type="text"],
+  .chosen-container-single .chosen-single abbr,
+  .chosen-container-single .chosen-single div b,
+  .chosen-container-single .chosen-search input[type="text"],
+  .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
+  .chosen-container .chosen-results-scroll-down span,
+  .chosen-container .chosen-results-scroll-up span {
+    background-image: url("chosen-sprite@2x.png") !important;
+    background-size: 52px 37px !important;
+    background-repeat: no-repeat !important;
+  }
+}
+
+/* @end */
+</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.
+ */
+
+.all-but-hidden {
+  max-height: 0;
+  max-width:  0;
+  opacity:    0;
+}
+
+.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;
+  align-items: center;
+}
+</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-display-vertical {
+  display: flex;
+  flex-flow: column;
+}
+
+.netlogo-display-horizontal {
+  display: flex;
+  flex-flow: row;
+}
+
+.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;
+    -moz-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: 25px 10px;
+}
+
+.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;
+  -moz-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;
+  -moz-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 {
+    background-color: white;
+    margin-top: 0;
+}
+
+.netlogo-ugly-button {
+  color:      black;
+  text-align: center;
+  background-color: rgb(240, 240, 240);
+  border-color: rgb(238, 238, 238);
+}
+
+.netlogo-ugly-button:disabled {
+  color: rgb(150, 150, 150);
+}
+
+.netlogo-recompilation-button {
+  width: 30%;
+  margin: 12px auto;
+  font-size: 16px;
+  font-weight: bold;
+  cursor: pointer;
+}
+
+.netlogo-procedurenames-dropdown {
+  width: 30%;
+  margin: 12px auto;
+  font-size: 16px;
+  font-weight: bold;
+  cursor: pointer;
+}
+
+.netlogo-codetab-widget-list {
+  padding: 0;
+  margin: 12px 12px;
+  display: inline;
+}
+
+.netlogo-codetab-widget-listitem {
+  display: inline;
+  padding: 6px;
+}
+
+.netlogo-autocomplete-label {
+  font-size: 16px;
+}
+
+.netlogo-autocomplete-checkbox {
+  width: 14px;
+  height: 14px;
+}
+
+.netlogo-codeusage-popup {
+  position:absolute;
+  z-index: 10;
+  border:1px solid #B2B2B2;
+  background: white;
+  box-shadow: 3px 3px 2px #E9E9E9;
+  border-radius:4px;
+  max-height: 15em;
+  overflow-y: auto;
+}
+
+.netlogo-codeusage-list {
+  list-style:none;
+  margin-top:1px;
+  padding: 1px;
+  font-size:90%;
+  font-family: monospace;
+}
+
+.netlogo-codeusage-item {
+  padding: 1px;
+}
+
+.netlogo-codeusage-item:hover {
+  color: white;
+  background:#284570;
+  border-radius:2px;
+}
+
+.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 #111;
+  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;
+    color:   black;
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    padding: 0px;
+}
+
+.netlogo-button:disabled {
+  color: rgb(150, 150, 150);
+}
+
+.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;
+}
+
+.help-popup {
+  background-color: white;
+  border:           1px solid black;
+  border-radius:    5px;
+  box-shadow:       0 0 10px rgba(0,0,0,0.5);
+  font-size:        20px;
+  padding:          30px 15px;
+  position:         absolute;
+  outline:          none;
+  z-index:          200;
+}
+
+/* Credit for this keyboard table CSS goes to the fine folks at GitHub
+ * Their code is released under the MIT license. Copyright (c) 2018 GitHub Inc.
+ * https://assets-cdn.github.com/assets/github-ef9e6df593c3136722bd837c0437786d.css
+ * JAB (5/7/18)
+ */
+.help-key-table .help-keys {
+  padding-right: 10px;
+  text-align:    right;
+  white-space:   nowrap;
+}
+
+.help-key-table td {
+  font-size: 16px;
+  padding:   3px 0;
+}
+
+.help-key-table kbd {
+  background-color:    #fafbfc;
+  border-bottom-color: #c6cbd1;
+  border-radius:       3px;
+  border:              solid 1px #d1d5da;
+  box-shadow:          inset 0 -1px 0 #c6cbd1;
+  color:               #3b793a;
+  display:             inline-block;
+  font:                16px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
+  line-height:         15px;
+  padding:             3px 5px;
+  vertical-align:      middle;
+}
+
+.modal-overlay {
+  background-color: rgba(200,200,200,0.7);
+  bottom:           0;
+  left:             0;
+  position:         absolute;
+  right:            0;
+  top:              0;
+  z-index:          99;
+}
+
+.async-popup {
+  background-color: white;
+  border:           1px solid black;
+  border-radius:    5px;
+  box-shadow:       0 0 10px rgba(0,0,0,0.5);
+  min-width:        120px;
+  padding:          10px 10px 0 14px;
+  position:         absolute;
+  outline:          none;
+  z-index:          90;
+}
+
+.async-dialog-message {
+  font-size:  16px;
+  margin-top: 20px;
+  word-break: break-word;
+}
+
+.async-dialog-button-row {
+  align-items:     center;
+  display:         flex;
+  flex-direction:  row;
+  justify-content: flex-end;
+  margin:          10px 0;
+}
+
+.async-dialog-controls {
+  margin: 8px 4px 0 0;
+}
+
+.async-dialog-text-input {
+  width: 100%;
+}
+
+.h-center-flexbox {
+  align-items:     center;
+  display:         flex;
+  flex-direction:  row;
+  justify-content: center;
+}
+</style>
+    <style>/*
+ * Style for things relevant to the widget/interface editor
+ */
+
+.editor-overlay {
+  z-index: 50;
+}
+
+.editor-overlay.selected {
+  z-index: 55;
+}
+
+.netlogo-toggle-text {
+  font-size:   14px;
+  margin-top:   3px;
+  user-select: none;
+  -moz-user-select: none;
+}
+
+.netlogo-toggle-container {
+  align-items:    center;
+  color:          #4f4f4f;
+  display:        flex;
+  flex-direction: row;
+  flex:           none;
+  width:          auto;
+  margin:         0px 10px;
+}
+
+.netlogo-toggle-container.enabled:hover {
+  color:  #000000;
+  cursor: pointer;
+}
+
+.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-toggle-container.enabled:hover .netlogo-interface-unlocker {
+  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-toggle-container.enabled:hover .netlogo-interface-unlocker.interface-unlocked {
+  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;
+  -moz-user-select: none;
+}
+
+.netlogo-widget.interface-unlocked:hover, .editor-overlay:hover + .netlogo-widget.interface-unlocked {
+  box-shadow: 0 0 6px 3px rgba(15, 15, 15, .40);
+  cursor:     default;
+  z-index:    3;
+}
+
+.netlogo-widget.selected {
+  z-index: 53;
+}
+
+.netlogo-widget-container.interface-unlocked {
+  background-color: rgb(234, 255, 225);
+}
+
+.context-menu-item {
+  border-bottom: solid 1px #dfdfdf;
+  color:         #0066aa;
+  cursor:        pointer;
+  font-size:     18px;
+  padding:       5px;
+  user-select:   none;
+  -moz-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 {
+  color:         #1d1d1d;
+  margin-bottom: 10px;
+}
+
+.widget-edit-form label {
+  user-select:      none;
+  -moz-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 {
+  color:         #111111;
+  cursor:        default;
+  font-weight:   bold;
+  margin-bottom: 10px;
+  text-align:    center;
+  user-select:   none;
+  -moz-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;
+  -moz-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 {
+  color:       #4a4a4a;
+  font-size:   15px;
+  margin:      2px 0 8px 0;
+  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;
+  -moz-user-select: none;
+}
+
+.widget-resize-handle {
+  background-color: #727272;
+  height:           10px;
+  width:            10px;
+  position:         absolute;
+  z-index:          60;
+}
+
+.initial-color {
+  color: initial;
+}
+</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>
+    <!-- See Safari workaround comments in `color-input.coffee`.  -JMB January 2019 -->
+    <script>/**
+ * jscolor - JavaScript Color Picker
+ *
+ * @link    http://jscolor.com
+ * @license For open source use: GPLv3
+ *          For commercial use: JSColor Commercial License
+ * @author  Jan Odvarko
+ *
+ * See usage examples at http://jscolor.com/examples/
+ */
+
+
+"use strict";
+
+
+if (!window.jscolor) { window.jscolor = (function () {
+
+
+var jsc = {
+
+
+	register : function () {
+		jsc.attachDOMReadyEvent(jsc.init);
+		jsc.attachEvent(document, 'mousedown', jsc.onDocumentMouseDown);
+		jsc.attachEvent(document, 'touchstart', jsc.onDocumentTouchStart);
+		jsc.attachEvent(window, 'resize', jsc.onWindowResize);
+	},
+
+
+	init : function () {
+		if (jsc.jscolor.lookupClass) {
+			jsc.jscolor.installByClassName(jsc.jscolor.lookupClass);
+		}
+	},
+
+
+	tryInstallOnElements : function (elms, className) {
+		var matchClass = new RegExp('(^|\\s)(' + className + ')(\\s*(\\{[^}]*\\})|\\s|$)', 'i');
+
+		for (var i = 0; i < elms.length; i += 1) {
+			if (elms[i].type !== undefined && elms[i].type.toLowerCase() == 'color') {
+				if (jsc.isColorAttrSupported) {
+					// skip inputs of type 'color' if supported by the browser
+					continue;
+				}
+			}
+			var m;
+			if (!elms[i].jscolor && elms[i].className && (m = elms[i].className.match(matchClass))) {
+				var targetElm = elms[i];
+				var optsStr = null;
+
+				var dataOptions = jsc.getDataAttr(targetElm, 'jscolor');
+				if (dataOptions !== null) {
+					optsStr = dataOptions;
+				} else if (m[4]) {
+					optsStr = m[4];
+				}
+
+				var opts = {};
+				if (optsStr) {
+					try {
+						opts = (new Function ('return (' + optsStr + ')'))();
+					} catch(eParseError) {
+						jsc.warn('Error parsing jscolor options: ' + eParseError + ':\n' + optsStr);
+					}
+				}
+				targetElm.jscolor = new jsc.jscolor(targetElm, opts);
+			}
+		}
+	},
+
+
+	isColorAttrSupported : (function () {
+		var elm = document.createElement('input');
+		if (elm.setAttribute) {
+			elm.setAttribute('type', 'color');
+			if (elm.type.toLowerCase() == 'color') {
+				return true;
+			}
+		}
+		return false;
+	})(),
+
+
+	isCanvasSupported : (function () {
+		var elm = document.createElement('canvas');
+		return !!(elm.getContext && elm.getContext('2d'));
+	})(),
+
+
+	fetchElement : function (mixed) {
+		return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;
+	},
+
+
+	isElementType : function (elm, type) {
+		return elm.nodeName.toLowerCase() === type.toLowerCase();
+	},
+
+
+	getDataAttr : function (el, name) {
+		var attrName = 'data-' + name;
+		var attrValue = el.getAttribute(attrName);
+		if (attrValue !== null) {
+			return attrValue;
+		}
+		return null;
+	},
+
+
+	attachEvent : function (el, evnt, func) {
+		if (el.addEventListener) {
+			el.addEventListener(evnt, func, false);
+		} else if (el.attachEvent) {
+			el.attachEvent('on' + evnt, func);
+		}
+	},
+
+
+	detachEvent : function (el, evnt, func) {
+		if (el.removeEventListener) {
+			el.removeEventListener(evnt, func, false);
+		} else if (el.detachEvent) {
+			el.detachEvent('on' + evnt, func);
+		}
+	},
+
+
+	_attachedGroupEvents : {},
+
+
+	attachGroupEvent : function (groupName, el, evnt, func) {
+		if (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) {
+			jsc._attachedGroupEvents[groupName] = [];
+		}
+		jsc._attachedGroupEvents[groupName].push([el, evnt, func]);
+		jsc.attachEvent(el, evnt, func);
+	},
+
+
+	detachGroupEvents : function (groupName) {
+		if (jsc._attachedGroupEvents.hasOwnProperty(groupName)) {
+			for (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1) {
+				var evt = jsc._attachedGroupEvents[groupName][i];
+				jsc.detachEvent(evt[0], evt[1], evt[2]);
+			}
+			delete jsc._attachedGroupEvents[groupName];
+		}
+	},
+
+
+	attachDOMReadyEvent : function (func) {
+		var fired = false;
+		var fireOnce = function () {
+			if (!fired) {
+				fired = true;
+				func();
+			}
+		};
+
+		if (document.readyState === 'complete') {
+			setTimeout(fireOnce, 1); // async
+			return;
+		}
+
+		if (document.addEventListener) {
+			document.addEventListener('DOMContentLoaded', fireOnce, false);
+
+			// Fallback
+			window.addEventListener('load', fireOnce, false);
+
+		} else if (document.attachEvent) {
+			// IE
+			document.attachEvent('onreadystatechange', function () {
+				if (document.readyState === 'complete') {
+					document.detachEvent('onreadystatechange', arguments.callee);
+					fireOnce();
+				}
+			})
+
+			// Fallback
+			window.attachEvent('onload', fireOnce);
+
+			// IE7/8
+			if (document.documentElement.doScroll && window == window.top) {
+				var tryScroll = function () {
+					if (!document.body) { return; }
+					try {
+						document.documentElement.doScroll('left');
+						fireOnce();
+					} catch (e) {
+						setTimeout(tryScroll, 1);
+					}
+				};
+				tryScroll();
+			}
+		}
+	},
+
+
+	warn : function (msg) {
+		if (window.console && window.console.warn) {
+			window.console.warn(msg);
+		}
+	},
+
+
+	preventDefault : function (e) {
+		if (e.preventDefault) { e.preventDefault(); }
+		e.returnValue = false;
+	},
+
+
+	captureTarget : function (target) {
+		// IE
+		if (target.setCapture) {
+			jsc._capturedTarget = target;
+			jsc._capturedTarget.setCapture();
+		}
+	},
+
+
+	releaseTarget : function () {
+		// IE
+		if (jsc._capturedTarget) {
+			jsc._capturedTarget.releaseCapture();
+			jsc._capturedTarget = null;
+		}
+	},
+
+
+	fireEvent : function (el, evnt) {
+		if (!el) {
+			return;
+		}
+		if (document.createEvent) {
+			var ev = document.createEvent('HTMLEvents');
+			ev.initEvent(evnt, true, true);
+			el.dispatchEvent(ev);
+		} else if (document.createEventObject) {
+			var ev = document.createEventObject();
+			el.fireEvent('on' + evnt, ev);
+		} else if (el['on' + evnt]) { // alternatively use the traditional event model
+			el['on' + evnt]();
+		}
+	},
+
+
+	classNameToList : function (className) {
+		return className.replace(/^\s+|\s+$/g, '').split(/\s+/);
+	},
+
+
+	// The className parameter (str) can only contain a single class name
+	hasClass : function (elm, className) {
+		if (!className) {
+			return false;
+		}
+		return -1 != (' ' + elm.className.replace(/\s+/g, ' ') + ' ').indexOf(' ' + className + ' ');
+	},
+
+
+	// The className parameter (str) can contain multiple class names separated by whitespace
+	setClass : function (elm, className) {
+		var classList = jsc.classNameToList(className);
+		for (var i = 0; i < classList.length; i += 1) {
+			if (!jsc.hasClass(elm, classList[i])) {
+				elm.className += (elm.className ? ' ' : '') + classList[i];
+			}
+		}
+	},
+
+
+	// The className parameter (str) can contain multiple class names separated by whitespace
+	unsetClass : function (elm, className) {
+		var classList = jsc.classNameToList(className);
+		for (var i = 0; i < classList.length; i += 1) {
+			var repl = new RegExp(
+				'^\\s*' + classList[i] + '\\s*|' +
+				'\\s*' + classList[i] + '\\s*$|' +
+				'\\s+' + classList[i] + '(\\s+)',
+				'g'
+			);
+			elm.className = elm.className.replace(repl, '$1');
+		}
+	},
+
+
+	getStyle : function (elm) {
+		return window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle;
+	},
+
+
+	setStyle : (function () {
+		var helper = document.createElement('div');
+		var getSupportedProp = function (names) {
+			for (var i = 0; i < names.length; i += 1) {
+				if (names[i] in helper.style) {
+					return names[i];
+				}
+			}
+		};
+		var props = {
+			borderRadius: getSupportedProp(['borderRadius', 'MozBorderRadius', 'webkitBorderRadius']),
+			boxShadow: getSupportedProp(['boxShadow', 'MozBoxShadow', 'webkitBoxShadow'])
+		};
+		return function (elm, prop, value) {
+			switch (prop.toLowerCase()) {
+			case 'opacity':
+				var alphaOpacity = Math.round(parseFloat(value) * 100);
+				elm.style.opacity = value;
+				elm.style.filter = 'alpha(opacity=' + alphaOpacity + ')';
+				break;
+			default:
+				elm.style[props[prop]] = value;
+				break;
+			}
+		};
+	})(),
+
+
+	setBorderRadius : function (elm, value) {
+		jsc.setStyle(elm, 'borderRadius', value || '0');
+	},
+
+
+	setBoxShadow : function (elm, value) {
+		jsc.setStyle(elm, 'boxShadow', value || 'none');
+	},
+
+
+	getElementPos : function (e, relativeToViewport) {
+		var x=0, y=0;
+		var rect = e.getBoundingClientRect();
+		x = rect.left;
+		y = rect.top;
+		if (!relativeToViewport) {
+			var viewPos = jsc.getViewPos();
+			x += viewPos[0];
+			y += viewPos[1];
+		}
+		return [x, y];
+	},
+
+
+	getElementSize : function (e) {
+		return [e.offsetWidth, e.offsetHeight];
+	},
+
+
+	// get pointer's X/Y coordinates relative to viewport
+	getAbsPointerPos : function (e) {
+		if (!e) { e = window.event; }
+		var x = 0, y = 0;
+		if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {
+			// touch devices
+			x = e.changedTouches[0].clientX;
+			y = e.changedTouches[0].clientY;
+		} else if (typeof e.clientX === 'number') {
+			x = e.clientX;
+			y = e.clientY;
+		}
+		return { x: x, y: y };
+	},
+
+
+	// get pointer's X/Y coordinates relative to target element
+	getRelPointerPos : function (e) {
+		if (!e) { e = window.event; }
+		var target = e.target || e.srcElement;
+		var targetRect = target.getBoundingClientRect();
+
+		var x = 0, y = 0;
+
+		var clientX = 0, clientY = 0;
+		if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {
+			// touch devices
+			clientX = e.changedTouches[0].clientX;
+			clientY = e.changedTouches[0].clientY;
+		} else if (typeof e.clientX === 'number') {
+			clientX = e.clientX;
+			clientY = e.clientY;
+		}
+
+		x = clientX - targetRect.left;
+		y = clientY - targetRect.top;
+		return { x: x, y: y };
+	},
+
+
+	getViewPos : function () {
+		var doc = document.documentElement;
+		return [
+			(window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),
+			(window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)
+		];
+	},
+
+
+	getViewSize : function () {
+		var doc = document.documentElement;
+		return [
+			(window.innerWidth || doc.clientWidth),
+			(window.innerHeight || doc.clientHeight),
+		];
+	},
+
+
+	redrawPosition : function () {
+
+		if (jsc.picker && jsc.picker.owner) {
+			var thisObj = jsc.picker.owner;
+
+			var tp, vp;
+
+			if (thisObj.fixed) {
+				// Fixed elements are positioned relative to viewport,
+				// therefore we can ignore the scroll offset
+				tp = jsc.getElementPos(thisObj.targetElement, true); // target pos
+				vp = [0, 0]; // view pos
+			} else {
+				tp = jsc.getElementPos(thisObj.targetElement); // target pos
+				vp = jsc.getViewPos(); // view pos
+			}
+
+			var ts = jsc.getElementSize(thisObj.targetElement); // target size
+			var vs = jsc.getViewSize(); // view size
+			var ps = jsc.getPickerOuterDims(thisObj); // picker size
+			var a, b, c;
+			switch (thisObj.position.toLowerCase()) {
+				case 'left': a=1; b=0; c=-1; break;
+				case 'right':a=1; b=0; c=1; break;
+				case 'top':  a=0; b=1; c=-1; break;
+				default:     a=0; b=1; c=1; break;
+			}
+			var l = (ts[b]+ps[b])/2;
+
+			// compute picker position
+			if (!thisObj.smartPosition) {
+				var pp = [
+					tp[a],
+					tp[b]+ts[b]-l+l*c
+				];
+			} else {
+				var pp = [
+					-vp[a]+tp[a]+ps[a] > vs[a] ?
+						(-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :
+						tp[a],
+					-vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?
+						(-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :
+						(tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)
+				];
+			}
+
+			var x = pp[a];
+			var y = pp[b];
+			var positionValue = thisObj.fixed ? 'fixed' : 'absolute';
+			var contractShadow =
+				(pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) &&
+				(pp[1] + ps[1] < tp[1] + ts[1]);
+
+			jsc._drawPosition(thisObj, x, y, positionValue, contractShadow);
+		}
+	},
+
+
+	_drawPosition : function (thisObj, x, y, positionValue, contractShadow) {
+		var vShadow = contractShadow ? 0 : thisObj.shadowBlur; // px
+
+		jsc.picker.wrap.style.position = positionValue;
+		jsc.picker.wrap.style.left = x + 'px';
+		jsc.picker.wrap.style.top = y + 'px';
+
+		jsc.setBoxShadow(
+			jsc.picker.boxS,
+			thisObj.shadow ?
+				new jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) :
+				null);
+	},
+
+
+	getPickerDims : function (thisObj) {
+		var displaySlider = !!jsc.getSliderComponent(thisObj);
+		var dims = [
+			2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.width +
+				(displaySlider ? 2 * thisObj.insetWidth + jsc.getPadToSliderPadding(thisObj) + thisObj.sliderSize : 0),
+			2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.height +
+				(thisObj.closable ? 2 * thisObj.insetWidth + thisObj.padding + thisObj.buttonHeight : 0)
+		];
+		return dims;
+	},
+
+
+	getPickerOuterDims : function (thisObj) {
+		var dims = jsc.getPickerDims(thisObj);
+		return [
+			dims[0] + 2 * thisObj.borderWidth,
+			dims[1] + 2 * thisObj.borderWidth
+		];
+	},
+
+
+	getPadToSliderPadding : function (thisObj) {
+		return Math.max(thisObj.padding, 1.5 * (2 * thisObj.pointerBorderWidth + thisObj.pointerThickness));
+	},
+
+
+	getPadYComponent : function (thisObj) {
+		switch (thisObj.mode.charAt(1).toLowerCase()) {
+			case 'v': return 'v'; break;
+		}
+		return 's';
+	},
+
+
+	getSliderComponent : function (thisObj) {
+		if (thisObj.mode.length > 2) {
+			switch (thisObj.mode.charAt(2).toLowerCase()) {
+				case 's': return 's'; break;
+				case 'v': return 'v'; break;
+			}
+		}
+		return null;
+	},
+
+
+	onDocumentMouseDown : function (e) {
+		if (!e) { e = window.event; }
+		var target = e.target || e.srcElement;
+
+		if (target._jscLinkedInstance) {
+			if (target._jscLinkedInstance.showOnClick) {
+				target._jscLinkedInstance.show();
+			}
+		} else if (target._jscControlName) {
+			jsc.onControlPointerStart(e, target, target._jscControlName, 'mouse');
+		} else {
+			// Mouse is outside the picker controls -> hide the color picker!
+			if (jsc.picker && jsc.picker.owner) {
+				jsc.picker.owner.hide();
+			}
+		}
+	},
+
+
+	onDocumentTouchStart : function (e) {
+		if (!e) { e = window.event; }
+		var target = e.target || e.srcElement;
+
+		if (target._jscLinkedInstance) {
+			if (target._jscLinkedInstance.showOnClick) {
+				target._jscLinkedInstance.show();
+			}
+		} else if (target._jscControlName) {
+			jsc.onControlPointerStart(e, target, target._jscControlName, 'touch');
+		} else {
+			if (jsc.picker && jsc.picker.owner) {
+				jsc.picker.owner.hide();
+			}
+		}
+	},
+
+
+	onWindowResize : function (e) {
+		jsc.redrawPosition();
+	},
+
+
+	onParentScroll : function (e) {
+		// hide the picker when one of the parent elements is scrolled
+		if (jsc.picker && jsc.picker.owner) {
+			jsc.picker.owner.hide();
+		}
+	},
+
+
+	_pointerMoveEvent : {
+		mouse: 'mousemove',
+		touch: 'touchmove'
+	},
+	_pointerEndEvent : {
+		mouse: 'mouseup',
+		touch: 'touchend'
+	},
+
+
+	_pointerOrigin : null,
+	_capturedTarget : null,
+
+
+	onControlPointerStart : function (e, target, controlName, pointerType) {
+		var thisObj = target._jscInstance;
+
+		jsc.preventDefault(e);
+		jsc.captureTarget(target);
+
+		var registerDragEvents = function (doc, offset) {
+			jsc.attachGroupEvent('drag', doc, jsc._pointerMoveEvent[pointerType],
+				jsc.onDocumentPointerMove(e, target, controlName, pointerType, offset));
+			jsc.attachGroupEvent('drag', doc, jsc._pointerEndEvent[pointerType],
+				jsc.onDocumentPointerEnd(e, target, controlName, pointerType));
+		};
+
+		registerDragEvents(document, [0, 0]);
+
+		if (window.parent && window.frameElement) {
+			var rect = window.frameElement.getBoundingClientRect();
+			var ofs = [-rect.left, -rect.top];
+			registerDragEvents(window.parent.window.document, ofs);
+		}
+
+		var abs = jsc.getAbsPointerPos(e);
+		var rel = jsc.getRelPointerPos(e);
+		jsc._pointerOrigin = {
+			x: abs.x - rel.x,
+			y: abs.y - rel.y
+		};
+
+		switch (controlName) {
+		case 'pad':
+			// if the slider is at the bottom, move it up
+			switch (jsc.getSliderComponent(thisObj)) {
+			case 's': if (thisObj.hsv[1] === 0) { thisObj.fromHSV(null, 100, null); }; break;
+			case 'v': if (thisObj.hsv[2] === 0) { thisObj.fromHSV(null, null, 100); }; break;
+			}
+			jsc.setPad(thisObj, e, 0, 0);
+			break;
+
+		case 'sld':
+			jsc.setSld(thisObj, e, 0);
+			break;
+		}
+
+		jsc.dispatchFineChange(thisObj);
+	},
+
+
+	onDocumentPointerMove : function (e, target, controlName, pointerType, offset) {
+		return function (e) {
+			var thisObj = target._jscInstance;
+			switch (controlName) {
+			case 'pad':
+				if (!e) { e = window.event; }
+				jsc.setPad(thisObj, e, offset[0], offset[1]);
+				jsc.dispatchFineChange(thisObj);
+				break;
+
+			case 'sld':
+				if (!e) { e = window.event; }
+				jsc.setSld(thisObj, e, offset[1]);
+				jsc.dispatchFineChange(thisObj);
+				break;
+			}
+		}
+	},
+
+
+	onDocumentPointerEnd : function (e, target, controlName, pointerType) {
+		return function (e) {
+			var thisObj = target._jscInstance;
+			jsc.detachGroupEvents('drag');
+			jsc.releaseTarget();
+			// Always dispatch changes after detaching outstanding mouse handlers,
+			// in case some user interaction will occur in user's onchange callback
+			// that would intrude with current mouse events
+			jsc.dispatchChange(thisObj);
+		};
+	},
+
+
+	dispatchChange : function (thisObj) {
+		if (thisObj.valueElement) {
+			if (jsc.isElementType(thisObj.valueElement, 'input')) {
+				jsc.fireEvent(thisObj.valueElement, 'change');
+			}
+		}
+	},
+
+
+	dispatchFineChange : function (thisObj) {
+		if (thisObj.onFineChange) {
+			var callback;
+			if (typeof thisObj.onFineChange === 'string') {
+				callback = new Function (thisObj.onFineChange);
+			} else {
+				callback = thisObj.onFineChange;
+			}
+			callback.call(thisObj);
+		}
+	},
+
+
+	setPad : function (thisObj, e, ofsX, ofsY) {
+		var pointerAbs = jsc.getAbsPointerPos(e);
+		var x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.insetWidth;
+		var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;
+
+		var xVal = x * (360 / (thisObj.width - 1));
+		var yVal = 100 - (y * (100 / (thisObj.height - 1)));
+
+		switch (jsc.getPadYComponent(thisObj)) {
+		case 's': thisObj.fromHSV(xVal, yVal, null, jsc.leaveSld); break;
+		case 'v': thisObj.fromHSV(xVal, null, yVal, jsc.leaveSld); break;
+		}
+	},
+
+
+	setSld : function (thisObj, e, ofsY) {
+		var pointerAbs = jsc.getAbsPointerPos(e);
+		var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;
+
+		var yVal = 100 - (y * (100 / (thisObj.height - 1)));
+
+		switch (jsc.getSliderComponent(thisObj)) {
+		case 's': thisObj.fromHSV(null, yVal, null, jsc.leavePad); break;
+		case 'v': thisObj.fromHSV(null, null, yVal, jsc.leavePad); break;
+		}
+	},
+
+
+	_vmlNS : 'jsc_vml_',
+	_vmlCSS : 'jsc_vml_css_',
+	_vmlReady : false,
+
+
+	initVML : function () {
+		if (!jsc._vmlReady) {
+			// init VML namespace
+			var doc = document;
+			if (!doc.namespaces[jsc._vmlNS]) {
+				doc.namespaces.add(jsc._vmlNS, 'urn:schemas-microsoft-com:vml');
+			}
+			if (!doc.styleSheets[jsc._vmlCSS]) {
+				var tags = ['shape', 'shapetype', 'group', 'background', 'path', 'formulas', 'handles', 'fill', 'stroke', 'shadow', 'textbox', 'textpath', 'imagedata', 'line', 'polyline', 'curve', 'rect', 'roundrect', 'oval', 'arc', 'image'];
+				var ss = doc.createStyleSheet();
+				ss.owningElement.id = jsc._vmlCSS;
+				for (var i = 0; i < tags.length; i += 1) {
+					ss.addRule(jsc._vmlNS + '\\:' + tags[i], 'behavior:url(#default#VML);');
+				}
+			}
+			jsc._vmlReady = true;
+		}
+	},
+
+
+	createPalette : function () {
+
+		var paletteObj = {
+			elm: null,
+			draw: null
+		};
+
+		if (jsc.isCanvasSupported) {
+			// Canvas implementation for modern browsers
+
+			var canvas = document.createElement('canvas');
+			var ctx = canvas.getContext('2d');
+
+			var drawFunc = function (width, height, type) {
+				canvas.width = width;
+				canvas.height = height;
+
+				ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+				var hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0);
+				hGrad.addColorStop(0 / 6, '#F00');
+				hGrad.addColorStop(1 / 6, '#FF0');
+				hGrad.addColorStop(2 / 6, '#0F0');
+				hGrad.addColorStop(3 / 6, '#0FF');
+				hGrad.addColorStop(4 / 6, '#00F');
+				hGrad.addColorStop(5 / 6, '#F0F');
+				hGrad.addColorStop(6 / 6, '#F00');
+
+				ctx.fillStyle = hGrad;
+				ctx.fillRect(0, 0, canvas.width, canvas.height);
+
+				var vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height);
+				switch (type.toLowerCase()) {
+				case 's':
+					vGrad.addColorStop(0, 'rgba(255,255,255,0)');
+					vGrad.addColorStop(1, 'rgba(255,255,255,1)');
+					break;
+				case 'v':
+					vGrad.addColorStop(0, 'rgba(0,0,0,0)');
+					vGrad.addColorStop(1, 'rgba(0,0,0,1)');
+					break;
+				}
+				ctx.fillStyle = vGrad;
+				ctx.fillRect(0, 0, canvas.width, canvas.height);
+			};
+
+			paletteObj.elm = canvas;
+			paletteObj.draw = drawFunc;
+
+		} else {
+			// VML fallback for IE 7 and 8
+
+			jsc.initVML();
+
+			var vmlContainer = document.createElement('div');
+			vmlContainer.style.position = 'relative';
+			vmlContainer.style.overflow = 'hidden';
+
+			var hGrad = document.createElement(jsc._vmlNS + ':fill');
+			hGrad.type = 'gradient';
+			hGrad.method = 'linear';
+			hGrad.angle = '90';
+			hGrad.colors = '16.67% #F0F, 33.33% #00F, 50% #0FF, 66.67% #0F0, 83.33% #FF0'
+
+			var hRect = document.createElement(jsc._vmlNS + ':rect');
+			hRect.style.position = 'absolute';
+			hRect.style.left = -1 + 'px';
+			hRect.style.top = -1 + 'px';
+			hRect.stroked = false;
+			hRect.appendChild(hGrad);
+			vmlContainer.appendChild(hRect);
+
+			var vGrad = document.createElement(jsc._vmlNS + ':fill');
+			vGrad.type = 'gradient';
+			vGrad.method = 'linear';
+			vGrad.angle = '180';
+			vGrad.opacity = '0';
+
+			var vRect = document.createElement(jsc._vmlNS + ':rect');
+			vRect.style.position = 'absolute';
+			vRect.style.left = -1 + 'px';
+			vRect.style.top = -1 + 'px';
+			vRect.stroked = false;
+			vRect.appendChild(vGrad);
+			vmlContainer.appendChild(vRect);
+
+			var drawFunc = function (width, height, type) {
+				vmlContainer.style.width = width + 'px';
+				vmlContainer.style.height = height + 'px';
+
+				hRect.style.width =
+				vRect.style.width =
+					(width + 1) + 'px';
+				hRect.style.height =
+				vRect.style.height =
+					(height + 1) + 'px';
+
+				// Colors must be specified during every redraw, otherwise IE won't display
+				// a full gradient during a subsequential redraw
+				hGrad.color = '#F00';
+				hGrad.color2 = '#F00';
+
+				switch (type.toLowerCase()) {
+				case 's':
+					vGrad.color = vGrad.color2 = '#FFF';
+					break;
+				case 'v':
+					vGrad.color = vGrad.color2 = '#000';
+					break;
+				}
+			};
+
+			paletteObj.elm = vmlContainer;
+			paletteObj.draw = drawFunc;
+		}
+
+		return paletteObj;
+	},
+
+
+	createSliderGradient : function () {
+
+		var sliderObj = {
+			elm: null,
+			draw: null
+		};
+
+		if (jsc.isCanvasSupported) {
+			// Canvas implementation for modern browsers
+
+			var canvas = document.createElement('canvas');
+			var ctx = canvas.getContext('2d');
+
+			var drawFunc = function (width, height, color1, color2) {
+				canvas.width = width;
+				canvas.height = height;
+
+				ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+				var grad = ctx.createLinearGradient(0, 0, 0, canvas.height);
+				grad.addColorStop(0, color1);
+				grad.addColorStop(1, color2);
+
+				ctx.fillStyle = grad;
+				ctx.fillRect(0, 0, canvas.width, canvas.height);
+			};
+
+			sliderObj.elm = canvas;
+			sliderObj.draw = drawFunc;
+
+		} else {
+			// VML fallback for IE 7 and 8
+
+			jsc.initVML();
+
+			var vmlContainer = document.createElement('div');
+			vmlContainer.style.position = 'relative';
+			vmlContainer.style.overflow = 'hidden';
+
+			var grad = document.createElement(jsc._vmlNS + ':fill');
+			grad.type = 'gradient';
+			grad.method = 'linear';
+			grad.angle = '180';
+
+			var rect = document.createElement(jsc._vmlNS + ':rect');
+			rect.style.position = 'absolute';
+			rect.style.left = -1 + 'px';
+			rect.style.top = -1 + 'px';
+			rect.stroked = false;
+			rect.appendChild(grad);
+			vmlContainer.appendChild(rect);
+
+			var drawFunc = function (width, height, color1, color2) {
+				vmlContainer.style.width = width + 'px';
+				vmlContainer.style.height = height + 'px';
+
+				rect.style.width = (width + 1) + 'px';
+				rect.style.height = (height + 1) + 'px';
+
+				grad.color = color1;
+				grad.color2 = color2;
+			};
+
+			sliderObj.elm = vmlContainer;
+			sliderObj.draw = drawFunc;
+		}
+
+		return sliderObj;
+	},
+
+
+	leaveValue : 1<<0,
+	leaveStyle : 1<<1,
+	leavePad : 1<<2,
+	leaveSld : 1<<3,
+
+
+	BoxShadow : (function () {
+		var BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) {
+			this.hShadow = hShadow;
+			this.vShadow = vShadow;
+			this.blur = blur;
+			this.spread = spread;
+			this.color = color;
+			this.inset = !!inset;
+		};
+
+		BoxShadow.prototype.toString = function () {
+			var vals = [
+				Math.round(this.hShadow) + 'px',
+				Math.round(this.vShadow) + 'px',
+				Math.round(this.blur) + 'px',
+				Math.round(this.spread) + 'px',
+				this.color
+			];
+			if (this.inset) {
+				vals.push('inset');
+			}
+			return vals.join(' ');
+		};
+
+		return BoxShadow;
+	})(),
+
+
+	//
+	// Usage:
+	// var myColor = new jscolor(<targetElement> [, <options>])
+	//
+
+	jscolor : function (targetElement, options) {
+
+		// General options
+		//
+		this.value = null; // initial HEX color. To change it later, use methods fromString(), fromHSV() and fromRGB()
+		this.valueElement = targetElement; // element that will be used to display and input the color code
+		this.styleElement = targetElement; // element that will preview the picked color using CSS backgroundColor
+		this.required = true; // whether the associated text <input> can be left empty
+		this.refine = true; // whether to refine the entered color code (e.g. uppercase it and remove whitespace)
+		this.hash = false; // whether to prefix the HEX color code with # symbol
+		this.uppercase = true; // whether to uppercase the color code
+		this.onFineChange = null; // called instantly every time the color changes (value can be either a function or a string with javascript code)
+		this.activeClass = 'jscolor-active'; // class to be set to the target element when a picker window is open on it
+		this.minS = 0; // min allowed saturation (0 - 100)
+		this.maxS = 100; // max allowed saturation (0 - 100)
+		this.minV = 0; // min allowed value (brightness) (0 - 100)
+		this.maxV = 100; // max allowed value (brightness) (0 - 100)
+
+		// Accessing the picked color
+		//
+		this.hsv = [0, 0, 100]; // read-only  [0-360, 0-100, 0-100]
+		this.rgb = [255, 255, 255]; // read-only  [0-255, 0-255, 0-255]
+
+		// Color Picker options
+		//
+		this.width = 181; // width of color palette (in px)
+		this.height = 101; // height of color palette (in px)
+		this.showOnClick = true; // whether to display the color picker when user clicks on its target element
+		this.mode = 'HSV'; // HSV | HVS | HS | HV - layout of the color picker controls
+		this.position = 'bottom'; // left | right | top | bottom - position relative to the target element
+		this.smartPosition = true; // automatically change picker position when there is not enough space for it
+		this.sliderSize = 16; // px
+		this.crossSize = 8; // px
+		this.closable = false; // whether to display the Close button
+		this.closeText = 'Close';
+		this.buttonColor = '#000000'; // CSS color
+		this.buttonHeight = 18; // px
+		this.padding = 12; // px
+		this.backgroundColor = '#FFFFFF'; // CSS color
+		this.borderWidth = 1; // px
+		this.borderColor = '#BBBBBB'; // CSS color
+		this.borderRadius = 8; // px
+		this.insetWidth = 1; // px
+		this.insetColor = '#BBBBBB'; // CSS color
+		this.shadow = true; // whether to display shadow
+		this.shadowBlur = 15; // px
+		this.shadowColor = 'rgba(0,0,0,0.2)'; // CSS color
+		this.pointerColor = '#4C4C4C'; // px
+		this.pointerBorderColor = '#FFFFFF'; // px
+        this.pointerBorderWidth = 1; // px
+        this.pointerThickness = 2; // px
+		this.zIndex = 1000;
+		this.container = null; // where to append the color picker (BODY element by default)
+
+
+		for (var opt in options) {
+			if (options.hasOwnProperty(opt)) {
+				this[opt] = options[opt];
+			}
+		}
+
+
+		this.hide = function () {
+			if (isPickerOwner()) {
+				detachPicker();
+			}
+		};
+
+
+		this.show = function () {
+			drawPicker();
+		};
+
+
+		this.redraw = function () {
+			if (isPickerOwner()) {
+				drawPicker();
+			}
+		};
+
+
+		this.importColor = function () {
+			if (!this.valueElement) {
+				this.exportColor();
+			} else {
+				if (jsc.isElementType(this.valueElement, 'input')) {
+					if (!this.refine) {
+						if (!this.fromString(this.valueElement.value, jsc.leaveValue)) {
+							if (this.styleElement) {
+								this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;
+								this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;
+								this.styleElement.style.color = this.styleElement._jscOrigStyle.color;
+							}
+							this.exportColor(jsc.leaveValue | jsc.leaveStyle);
+						}
+					} else if (!this.required && /^\s*$/.test(this.valueElement.value)) {
+						this.valueElement.value = '';
+						if (this.styleElement) {
+							this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;
+							this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;
+							this.styleElement.style.color = this.styleElement._jscOrigStyle.color;
+						}
+						this.exportColor(jsc.leaveValue | jsc.leaveStyle);
+
+					} else if (this.fromString(this.valueElement.value)) {
+						// managed to import color successfully from the value -> OK, don't do anything
+					} else {
+						this.exportColor();
+					}
+				} else {
+					// not an input element -> doesn't have any value
+					this.exportColor();
+				}
+			}
+		};
+
+
+		this.exportColor = function (flags) {
+			if (!(flags & jsc.leaveValue) && this.valueElement) {
+				var value = this.toString();
+				if (this.uppercase) { value = value.toUpperCase(); }
+				if (this.hash) { value = '#' + value; }
+
+				if (jsc.isElementType(this.valueElement, 'input')) {
+					this.valueElement.value = value;
+				} else {
+					this.valueElement.innerHTML = value;
+				}
+			}
+			if (!(flags & jsc.leaveStyle)) {
+				if (this.styleElement) {
+					this.styleElement.style.backgroundImage = 'none';
+					this.styleElement.style.backgroundColor = '#' + this.toString();
+					this.styleElement.style.color = this.isLight() ? '#000' : '#FFF';
+				}
+			}
+			if (!(flags & jsc.leavePad) && isPickerOwner()) {
+				redrawPad();
+			}
+			if (!(flags & jsc.leaveSld) && isPickerOwner()) {
+				redrawSld();
+			}
+		};
+
+
+		// h: 0-360
+		// s: 0-100
+		// v: 0-100
+		//
+		this.fromHSV = function (h, s, v, flags) { // null = don't change
+			if (h !== null) {
+				if (isNaN(h)) { return false; }
+				h = Math.max(0, Math.min(360, h));
+			}
+			if (s !== null) {
+				if (isNaN(s)) { return false; }
+				s = Math.max(0, Math.min(100, this.maxS, s), this.minS);
+			}
+			if (v !== null) {
+				if (isNaN(v)) { return false; }
+				v = Math.max(0, Math.min(100, this.maxV, v), this.minV);
+			}
+
+			this.rgb = HSV_RGB(
+				h===null ? this.hsv[0] : (this.hsv[0]=h),
+				s===null ? this.hsv[1] : (this.hsv[1]=s),
+				v===null ? this.hsv[2] : (this.hsv[2]=v)
+			);
+
+			this.exportColor(flags);
+		};
+
+
+		// r: 0-255
+		// g: 0-255
+		// b: 0-255
+		//
+		this.fromRGB = function (r, g, b, flags) { // null = don't change
+			if (r !== null) {
+				if (isNaN(r)) { return false; }
+				r = Math.max(0, Math.min(255, r));
+			}
+			if (g !== null) {
+				if (isNaN(g)) { return false; }
+				g = Math.max(0, Math.min(255, g));
+			}
+			if (b !== null) {
+				if (isNaN(b)) { return false; }
+				b = Math.max(0, Math.min(255, b));
+			}
+
+			var hsv = RGB_HSV(
+				r===null ? this.rgb[0] : r,
+				g===null ? this.rgb[1] : g,
+				b===null ? this.rgb[2] : b
+			);
+			if (hsv[0] !== null) {
+				this.hsv[0] = Math.max(0, Math.min(360, hsv[0]));
+			}
+			if (hsv[2] !== 0) {
+				this.hsv[1] = hsv[1]===null ? null : Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1]));
+			}
+			this.hsv[2] = hsv[2]===null ? null : Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2]));
+
+			// update RGB according to final HSV, as some values might be trimmed
+			var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);
+			this.rgb[0] = rgb[0];
+			this.rgb[1] = rgb[1];
+			this.rgb[2] = rgb[2];
+
+			this.exportColor(flags);
+		};
+
+
+		this.fromString = function (str, flags) {
+			var m;
+			if (m = str.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i)) {
+				// HEX notation
+				//
+
+				if (m[1].length === 6) {
+					// 6-char notation
+					this.fromRGB(
+						parseInt(m[1].substr(0,2),16),
+						parseInt(m[1].substr(2,2),16),
+						parseInt(m[1].substr(4,2),16),
+						flags
+					);
+				} else {
+					// 3-char notation
+					this.fromRGB(
+						parseInt(m[1].charAt(0) + m[1].charAt(0),16),
+						parseInt(m[1].charAt(1) + m[1].charAt(1),16),
+						parseInt(m[1].charAt(2) + m[1].charAt(2),16),
+						flags
+					);
+				}
+				return true;
+
+			} else if (m = str.match(/^\W*rgba?\(([^)]*)\)\W*$/i)) {
+				var params = m[1].split(',');
+				var re = /^\s*(\d*)(\.\d+)?\s*$/;
+				var mR, mG, mB;
+				if (
+					params.length >= 3 &&
+					(mR = params[0].match(re)) &&
+					(mG = params[1].match(re)) &&
+					(mB = params[2].match(re))
+				) {
+					var r = parseFloat((mR[1] || '0') + (mR[2] || ''));
+					var g = parseFloat((mG[1] || '0') + (mG[2] || ''));
+					var b = parseFloat((mB[1] || '0') + (mB[2] || ''));
+					this.fromRGB(r, g, b, flags);
+					return true;
+				}
+			}
+			return false;
+		};
+
+
+		this.toString = function () {
+			return (
+				(0x100 | Math.round(this.rgb[0])).toString(16).substr(1) +
+				(0x100 | Math.round(this.rgb[1])).toString(16).substr(1) +
+				(0x100 | Math.round(this.rgb[2])).toString(16).substr(1)
+			);
+		};
+
+
+		this.toHEXString = function () {
+			return '#' + this.toString().toUpperCase();
+		};
+
+
+		this.toRGBString = function () {
+			return ('rgb(' +
+				Math.round(this.rgb[0]) + ',' +
+				Math.round(this.rgb[1]) + ',' +
+				Math.round(this.rgb[2]) + ')'
+			);
+		};
+
+
+		this.isLight = function () {
+			return (
+				0.213 * this.rgb[0] +
+				0.715 * this.rgb[1] +
+				0.072 * this.rgb[2] >
+				255 / 2
+			);
+		};
+
+
+		this._processParentElementsInDOM = function () {
+			if (this._linkedElementsProcessed) { return; }
+			this._linkedElementsProcessed = true;
+
+			var elm = this.targetElement;
+			do {
+				// If the target element or one of its parent nodes has fixed position,
+				// then use fixed positioning instead
+				//
+				// Note: In Firefox, getComputedStyle returns null in a hidden iframe,
+				// that's why we need to check if the returned style object is non-empty
+				var currStyle = jsc.getStyle(elm);
+				if (currStyle && currStyle.position.toLowerCase() === 'fixed') {
+					this.fixed = true;
+				}
+
+				if (elm !== this.targetElement) {
+					// Ensure to attach onParentScroll only once to each parent element
+					// (multiple targetElements can share the same parent nodes)
+					//
+					// Note: It's not just offsetParents that can be scrollable,
+					// that's why we loop through all parent nodes
+					if (!elm._jscEventsAttached) {
+						jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);
+						elm._jscEventsAttached = true;
+					}
+				}
+			} while ((elm = elm.parentNode) && !jsc.isElementType(elm, 'body'));
+		};
+
+
+		// r: 0-255
+		// g: 0-255
+		// b: 0-255
+		//
+		// returns: [ 0-360, 0-100, 0-100 ]
+		//
+		function RGB_HSV (r, g, b) {
+			r /= 255;
+			g /= 255;
+			b /= 255;
+			var n = Math.min(Math.min(r,g),b);
+			var v = Math.max(Math.max(r,g),b);
+			var m = v - n;
+			if (m === 0) { return [ null, 0, 100 * v ]; }
+			var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
+			return [
+				60 * (h===6?0:h),
+				100 * (m/v),
+				100 * v
+			];
+		}
+
+
+		// h: 0-360
+		// s: 0-100
+		// v: 0-100
+		//
+		// returns: [ 0-255, 0-255, 0-255 ]
+		//
+		function HSV_RGB (h, s, v) {
+			var u = 255 * (v / 100);
+
+			if (h === null) {
+				return [ u, u, u ];
+			}
+
+			h /= 60;
+			s /= 100;
+
+			var i = Math.floor(h);
+			var f = i%2 ? h-i : 1-(h-i);
+			var m = u * (1 - s);
+			var n = u * (1 - s * f);
+			switch (i) {
+				case 6:
+				case 0: return [u,n,m];
+				case 1: return [n,u,m];
+				case 2: return [m,u,n];
+				case 3: return [m,n,u];
+				case 4: return [n,m,u];
+				case 5: return [u,m,n];
+			}
+		}
+
+
+		function detachPicker () {
+			jsc.unsetClass(THIS.targetElement, THIS.activeClass);
+			jsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap);
+			delete jsc.picker.owner;
+		}
+
+
+		function drawPicker () {
+
+			// At this point, when drawing the picker, we know what the parent elements are
+			// and we can do all related DOM operations, such as registering events on them
+			// or checking their positioning
+			THIS._processParentElementsInDOM();
+
+			if (!jsc.picker) {
+				jsc.picker = {
+					owner: null,
+					wrap : document.createElement('div'),
+					box : document.createElement('div'),
+					boxS : document.createElement('div'), // shadow area
+					boxB : document.createElement('div'), // border
+					pad : document.createElement('div'),
+					padB : document.createElement('div'), // border
+					padM : document.createElement('div'), // mouse/touch area
+					padPal : jsc.createPalette(),
+					cross : document.createElement('div'),
+					crossBY : document.createElement('div'), // border Y
+					crossBX : document.createElement('div'), // border X
+					crossLY : document.createElement('div'), // line Y
+					crossLX : document.createElement('div'), // line X
+					sld : document.createElement('div'),
+					sldB : document.createElement('div'), // border
+					sldM : document.createElement('div'), // mouse/touch area
+					sldGrad : jsc.createSliderGradient(),
+					sldPtrS : document.createElement('div'), // slider pointer spacer
+					sldPtrIB : document.createElement('div'), // slider pointer inner border
+					sldPtrMB : document.createElement('div'), // slider pointer middle border
+					sldPtrOB : document.createElement('div'), // slider pointer outer border
+					btn : document.createElement('div'),
+					btnT : document.createElement('span') // text
+				};
+
+				jsc.picker.pad.appendChild(jsc.picker.padPal.elm);
+				jsc.picker.padB.appendChild(jsc.picker.pad);
+				jsc.picker.cross.appendChild(jsc.picker.crossBY);
+				jsc.picker.cross.appendChild(jsc.picker.crossBX);
+				jsc.picker.cross.appendChild(jsc.picker.crossLY);
+				jsc.picker.cross.appendChild(jsc.picker.crossLX);
+				jsc.picker.padB.appendChild(jsc.picker.cross);
+				jsc.picker.box.appendChild(jsc.picker.padB);
+				jsc.picker.box.appendChild(jsc.picker.padM);
+
+				jsc.picker.sld.appendChild(jsc.picker.sldGrad.elm);
+				jsc.picker.sldB.appendChild(jsc.picker.sld);
+				jsc.picker.sldB.appendChild(jsc.picker.sldPtrOB);
+				jsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB);
+				jsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB);
+				jsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS);
+				jsc.picker.box.appendChild(jsc.picker.sldB);
+				jsc.picker.box.appendChild(jsc.picker.sldM);
+
+				jsc.picker.btn.appendChild(jsc.picker.btnT);
+				jsc.picker.box.appendChild(jsc.picker.btn);
+
+				jsc.picker.boxB.appendChild(jsc.picker.box);
+				jsc.picker.wrap.appendChild(jsc.picker.boxS);
+				jsc.picker.wrap.appendChild(jsc.picker.boxB);
+			}
+
+			var p = jsc.picker;
+
+			var displaySlider = !!jsc.getSliderComponent(THIS);
+			var dims = jsc.getPickerDims(THIS);
+			var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);
+			var padToSliderPadding = jsc.getPadToSliderPadding(THIS);
+			var borderRadius = Math.min(
+				THIS.borderRadius,
+				Math.round(THIS.padding * Math.PI)); // px
+			var padCursor = 'crosshair';
+
+			// wrap
+			p.wrap.style.clear = 'both';
+			p.wrap.style.width = (dims[0] + 2 * THIS.borderWidth) + 'px';
+			p.wrap.style.height = (dims[1] + 2 * THIS.borderWidth) + 'px';
+			p.wrap.style.zIndex = THIS.zIndex;
+
+			// picker
+			p.box.style.width = dims[0] + 'px';
+			p.box.style.height = dims[1] + 'px';
+
+			p.boxS.style.position = 'absolute';
+			p.boxS.style.left = '0';
+			p.boxS.style.top = '0';
+			p.boxS.style.width = '100%';
+			p.boxS.style.height = '100%';
+			jsc.setBorderRadius(p.boxS, borderRadius + 'px');
+
+			// picker border
+			p.boxB.style.position = 'relative';
+			p.boxB.style.border = THIS.borderWidth + 'px solid';
+			p.boxB.style.borderColor = THIS.borderColor;
+			p.boxB.style.background = THIS.backgroundColor;
+			jsc.setBorderRadius(p.boxB, borderRadius + 'px');
+
+			// IE hack:
+			// If the element is transparent, IE will trigger the event on the elements under it,
+			// e.g. on Canvas or on elements with border
+			p.padM.style.background =
+			p.sldM.style.background =
+				'#FFF';
+			jsc.setStyle(p.padM, 'opacity', '0');
+			jsc.setStyle(p.sldM, 'opacity', '0');
+
+			// pad
+			p.pad.style.position = 'relative';
+			p.pad.style.width = THIS.width + 'px';
+			p.pad.style.height = THIS.height + 'px';
+
+			// pad palettes (HSV and HVS)
+			p.padPal.draw(THIS.width, THIS.height, jsc.getPadYComponent(THIS));
+
+			// pad border
+			p.padB.style.position = 'absolute';
+			p.padB.style.left = THIS.padding + 'px';
+			p.padB.style.top = THIS.padding + 'px';
+			p.padB.style.border = THIS.insetWidth + 'px solid';
+			p.padB.style.borderColor = THIS.insetColor;
+
+			// pad mouse area
+			p.padM._jscInstance = THIS;
+			p.padM._jscControlName = 'pad';
+			p.padM.style.position = 'absolute';
+			p.padM.style.left = '0';
+			p.padM.style.top = '0';
+			p.padM.style.width = (THIS.padding + 2 * THIS.insetWidth + THIS.width + padToSliderPadding / 2) + 'px';
+			p.padM.style.height = dims[1] + 'px';
+			p.padM.style.cursor = padCursor;
+
+			// pad cross
+			p.cross.style.position = 'absolute';
+			p.cross.style.left =
+			p.cross.style.top =
+				'0';
+			p.cross.style.width =
+			p.cross.style.height =
+				crossOuterSize + 'px';
+
+			// pad cross border Y and X
+			p.crossBY.style.position =
+			p.crossBX.style.position =
+				'absolute';
+			p.crossBY.style.background =
+			p.crossBX.style.background =
+				THIS.pointerBorderColor;
+			p.crossBY.style.width =
+			p.crossBX.style.height =
+				(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';
+			p.crossBY.style.height =
+			p.crossBX.style.width =
+				crossOuterSize + 'px';
+			p.crossBY.style.left =
+			p.crossBX.style.top =
+				(Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth) + 'px';
+			p.crossBY.style.top =
+			p.crossBX.style.left =
+				'0';
+
+			// pad cross line Y and X
+			p.crossLY.style.position =
+			p.crossLX.style.position =
+				'absolute';
+			p.crossLY.style.background =
+			p.crossLX.style.background =
+				THIS.pointerColor;
+			p.crossLY.style.height =
+			p.crossLX.style.width =
+				(crossOuterSize - 2 * THIS.pointerBorderWidth) + 'px';
+			p.crossLY.style.width =
+			p.crossLX.style.height =
+				THIS.pointerThickness + 'px';
+			p.crossLY.style.left =
+			p.crossLX.style.top =
+				(Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2)) + 'px';
+			p.crossLY.style.top =
+			p.crossLX.style.left =
+				THIS.pointerBorderWidth + 'px';
+
+			// slider
+			p.sld.style.overflow = 'hidden';
+			p.sld.style.width = THIS.sliderSize + 'px';
+			p.sld.style.height = THIS.height + 'px';
+
+			// slider gradient
+			p.sldGrad.draw(THIS.sliderSize, THIS.height, '#000', '#000');
+
+			// slider border
+			p.sldB.style.display = displaySlider ? 'block' : 'none';
+			p.sldB.style.position = 'absolute';
+			p.sldB.style.right = THIS.padding + 'px';
+			p.sldB.style.top = THIS.padding + 'px';
+			p.sldB.style.border = THIS.insetWidth + 'px solid';
+			p.sldB.style.borderColor = THIS.insetColor;
+
+			// slider mouse area
+			p.sldM._jscInstance = THIS;
+			p.sldM._jscControlName = 'sld';
+			p.sldM.style.display = displaySlider ? 'block' : 'none';
+			p.sldM.style.position = 'absolute';
+			p.sldM.style.right = '0';
+			p.sldM.style.top = '0';
+			p.sldM.style.width = (THIS.sliderSize + padToSliderPadding / 2 + THIS.padding + 2 * THIS.insetWidth) + 'px';
+			p.sldM.style.height = dims[1] + 'px';
+			p.sldM.style.cursor = 'default';
+
+			// slider pointer inner and outer border
+			p.sldPtrIB.style.border =
+			p.sldPtrOB.style.border =
+				THIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor;
+
+			// slider pointer outer border
+			p.sldPtrOB.style.position = 'absolute';
+			p.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';
+			p.sldPtrOB.style.top = '0';
+
+			// slider pointer middle border
+			p.sldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor;
+
+			// slider pointer spacer
+			p.sldPtrS.style.width = THIS.sliderSize + 'px';
+			p.sldPtrS.style.height = sliderPtrSpace + 'px';
+
+			// the Close button
+			function setBtnBorder () {
+				var insetColors = THIS.insetColor.split(/\s+/);
+				var outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
+				p.btn.style.borderColor = outsetColor;
+			}
+			p.btn.style.display = THIS.closable ? 'block' : 'none';
+			p.btn.style.position = 'absolute';
+			p.btn.style.left = THIS.padding + 'px';
+			p.btn.style.bottom = THIS.padding + 'px';
+			p.btn.style.padding = '0 15px';
+			p.btn.style.height = THIS.buttonHeight + 'px';
+			p.btn.style.border = THIS.insetWidth + 'px solid';
+			setBtnBorder();
+			p.btn.style.color = THIS.buttonColor;
+			p.btn.style.font = '12px sans-serif';
+			p.btn.style.textAlign = 'center';
+			try {
+				p.btn.style.cursor = 'pointer';
+			} catch(eOldIE) {
+				p.btn.style.cursor = 'hand';
+			}
+			p.btn.onmousedown = function () {
+				THIS.hide();
+			};
+			p.btnT.style.lineHeight = THIS.buttonHeight + 'px';
+			p.btnT.innerHTML = '';
+			p.btnT.appendChild(document.createTextNode(THIS.closeText));
+
+			// place pointers
+			redrawPad();
+			redrawSld();
+
+			// If we are changing the owner without first closing the picker,
+			// make sure to first deal with the old owner
+			if (jsc.picker.owner && jsc.picker.owner !== THIS) {
+				jsc.unsetClass(jsc.picker.owner.targetElement, THIS.activeClass);
+			}
+
+			// Set the new picker owner
+			jsc.picker.owner = THIS;
+
+			// The redrawPosition() method needs picker.owner to be set, that's why we call it here,
+			// after setting the owner
+			if (jsc.isElementType(container, 'body')) {
+				jsc.redrawPosition();
+			} else {
+				jsc._drawPosition(THIS, 0, 0, 'relative', false);
+			}
+
+			if (p.wrap.parentNode != container) {
+				container.appendChild(p.wrap);
+			}
+
+			jsc.setClass(THIS.targetElement, THIS.activeClass);
+		}
+
+
+		function redrawPad () {
+			// redraw the pad pointer
+			switch (jsc.getPadYComponent(THIS)) {
+			case 's': var yComponent = 1; break;
+			case 'v': var yComponent = 2; break;
+			}
+			var x = Math.round((THIS.hsv[0] / 360) * (THIS.width - 1));
+			var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));
+			var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);
+			var ofs = -Math.floor(crossOuterSize / 2);
+			jsc.picker.cross.style.left = (x + ofs) + 'px';
+			jsc.picker.cross.style.top = (y + ofs) + 'px';
+
+			// redraw the slider
+			switch (jsc.getSliderComponent(THIS)) {
+			case 's':
+				var rgb1 = HSV_RGB(THIS.hsv[0], 100, THIS.hsv[2]);
+				var rgb2 = HSV_RGB(THIS.hsv[0], 0, THIS.hsv[2]);
+				var color1 = 'rgb(' +
+					Math.round(rgb1[0]) + ',' +
+					Math.round(rgb1[1]) + ',' +
+					Math.round(rgb1[2]) + ')';
+				var color2 = 'rgb(' +
+					Math.round(rgb2[0]) + ',' +
+					Math.round(rgb2[1]) + ',' +
+					Math.round(rgb2[2]) + ')';
+				jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);
+				break;
+			case 'v':
+				var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 100);
+				var color1 = 'rgb(' +
+					Math.round(rgb[0]) + ',' +
+					Math.round(rgb[1]) + ',' +
+					Math.round(rgb[2]) + ')';
+				var color2 = '#000';
+				jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);
+				break;
+			}
+		}
+
+
+		function redrawSld () {
+			var sldComponent = jsc.getSliderComponent(THIS);
+			if (sldComponent) {
+				// redraw the slider pointer
+				switch (sldComponent) {
+				case 's': var yComponent = 1; break;
+				case 'v': var yComponent = 2; break;
+				}
+				var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));
+				jsc.picker.sldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(sliderPtrSpace / 2)) + 'px';
+			}
+		}
+
+
+		function isPickerOwner () {
+			return jsc.picker && jsc.picker.owner === THIS;
+		}
+
+
+		function blurValue () {
+			THIS.importColor();
+		}
+
+
+		// Find the target element
+		if (typeof targetElement === 'string') {
+			var id = targetElement;
+			var elm = document.getElementById(id);
+			if (elm) {
+				this.targetElement = elm;
+			} else {
+				jsc.warn('Could not find target element with ID \'' + id + '\'');
+			}
+		} else if (targetElement) {
+			this.targetElement = targetElement;
+		} else {
+			jsc.warn('Invalid target element: \'' + targetElement + '\'');
+		}
+
+		if (this.targetElement._jscLinkedInstance) {
+			jsc.warn('Cannot link jscolor twice to the same element. Skipping.');
+			return;
+		}
+		this.targetElement._jscLinkedInstance = this;
+
+		// Find the value element
+		this.valueElement = jsc.fetchElement(this.valueElement);
+		// Find the style element
+		this.styleElement = jsc.fetchElement(this.styleElement);
+
+		var THIS = this;
+		var container =
+			this.container ?
+			jsc.fetchElement(this.container) :
+			document.getElementsByTagName('body')[0];
+		var sliderPtrSpace = 3; // px
+
+		// For BUTTON elements it's important to stop them from sending the form when clicked
+		// (e.g. in Safari)
+		if (jsc.isElementType(this.targetElement, 'button')) {
+			if (this.targetElement.onclick) {
+				var origCallback = this.targetElement.onclick;
+				this.targetElement.onclick = function (evt) {
+					origCallback.call(this, evt);
+					return false;
+				};
+			} else {
+				this.targetElement.onclick = function () { return false; };
+			}
+		}
+
+		/*
+		var elm = this.targetElement;
+		do {
+			// If the target element or one of its offsetParents has fixed position,
+			// then use fixed positioning instead
+			//
+			// Note: In Firefox, getComputedStyle returns null in a hidden iframe,
+			// that's why we need to check if the returned style object is non-empty
+			var currStyle = jsc.getStyle(elm);
+			if (currStyle && currStyle.position.toLowerCase() === 'fixed') {
+				this.fixed = true;
+			}
+
+			if (elm !== this.targetElement) {
+				// attach onParentScroll so that we can recompute the picker position
+				// when one of the offsetParents is scrolled
+				if (!elm._jscEventsAttached) {
+					jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);
+					elm._jscEventsAttached = true;
+				}
+			}
+		} while ((elm = elm.offsetParent) && !jsc.isElementType(elm, 'body'));
+		*/
+
+		// valueElement
+		if (this.valueElement) {
+			if (jsc.isElementType(this.valueElement, 'input')) {
+				var updateField = function () {
+					THIS.fromString(THIS.valueElement.value, jsc.leaveValue);
+					jsc.dispatchFineChange(THIS);
+				};
+				jsc.attachEvent(this.valueElement, 'keyup', updateField);
+				jsc.attachEvent(this.valueElement, 'input', updateField);
+				jsc.attachEvent(this.valueElement, 'blur', blurValue);
+				this.valueElement.setAttribute('autocomplete', 'off');
+			}
+		}
+
+		// styleElement
+		if (this.styleElement) {
+			this.styleElement._jscOrigStyle = {
+				backgroundImage : this.styleElement.style.backgroundImage,
+				backgroundColor : this.styleElement.style.backgroundColor,
+				color : this.styleElement.style.color
+			};
+		}
+
+		if (this.value) {
+			// Try to set the color from the .value option and if unsuccessful,
+			// export the current color
+			this.fromString(this.value) || this.exportColor();
+		} else {
+			this.importColor();
+		}
+	}
+
+};
+
+
+//================================
+// Public properties and methods
+//================================
+
+
+// By default, search for all elements with class="jscolor" and install a color picker on them.
+//
+// You can change what class name will be looked for by setting the property jscolor.lookupClass
+// anywhere in your HTML document. To completely disable the automatic lookup, set it to null.
+//
+jsc.jscolor.lookupClass = 'jscolor';
+
+
+jsc.jscolor.installByClassName = function (className) {
+	var inputElms = document.getElementsByTagName('input');
+	var buttonElms = document.getElementsByTagName('button');
+
+	jsc.tryInstallOnElements(inputElms, className);
+	jsc.tryInstallOnElements(buttonElms, className);
+};
+
+
+jsc.register();
+
+
+return jsc.jscolor;
+
+
+})(); }
+</script>
+    <script>/*!
+ * jQuery JavaScript Library v3.3.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: 2018-01-20T17:24Z
+ */
+( 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 = {};
+
+var isFunction = function isFunction( obj ) {
+
+      // Support: Chrome <=57, Firefox <=52
+      // In some browsers, typeof returns "function" for HTML <object> elements
+      // (i.e., `typeof document.createElement( "object" ) === "function"`).
+      // We don't want to classify *any* DOM node as a function.
+      return typeof obj === "function" && typeof obj.nodeType !== "number";
+  };
+
+
+var isWindow = function isWindow( obj ) {
+		return obj != null && obj === obj.window;
+	};
+
+
+
+
+	var preservedScriptAttributes = {
+		type: true,
+		src: true,
+		noModule: true
+	};
+
+	function DOMEval( code, doc, node ) {
+		doc = doc || document;
+
+		var i,
+			script = doc.createElement( "script" );
+
+		script.text = code;
+		if ( node ) {
+			for ( i in preservedScriptAttributes ) {
+				if ( node[ i ] ) {
+					script[ i ] = node[ i ];
+				}
+			}
+		}
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+
+
+function toType( 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;
+}
+/* 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.3.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;
+
+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" && !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() {},
+
+	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;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		DOMEval( code );
+	},
+
+	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,
+
+	// 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 = toType( obj );
+
+	if ( isFunction( obj ) || 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 );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( 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;
+		} );
+	}
+
+	// Filtered directly for both simple and complex selectors
+	return jQuery.filter( qualifier, elements, not );
+}
+
+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 ( 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 ( 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 ( isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && toType( 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 && isFunction( ( method = value.promise ) ) ) {
+			method.call( value ).done( resolve ).fail( reject );
+
+		// Other thenables
+		} else if ( value && 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 = 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 && 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 ( 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,
+								isFunction( onProgress ) ?
+									onProgress :
+									Identity,
+								newDefer.notifyWith
+							)
+						);
+
+						// fulfilled_handlers.add( ... )
+						tuples[ 1 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onFulfilled ) ?
+									onFulfilled :
+									Identity
+							)
+						);
+
+						// rejected_handlers.add( ... )
+						tuples[ 2 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								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,
+
+					// rejected_handlers.disable
+					// fulfilled_handlers.disable
+					tuples[ 3 - i ][ 3 ].disable,
+
+					// progress_callbacks.lock
+					tuples[ 0 ][ 2 ].lock,
+
+					// progress_handlers.lock
+					tuples[ 0 ][ 3 ].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" ||
+				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 ( toType( 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 ( !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;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( all, letter ) {
+	return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+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[ camelCase( data ) ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ 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 ][ 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( camelCase );
+			} else {
+				key = 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 = 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,
+		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 ) {
+
+		// Support: Firefox <=54
+		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+		initial = initial / 2;
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		while ( maxIterations-- ) {
+
+			// Evaluate and update our best guess (doubling guesses that zero out).
+			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+			jQuery.style( elem, prop, initialInUnit + unit );
+			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+				maxIterations = 0;
+			}
+			initialInUnit = initialInUnit / scale;
+
+		}
+
+		initialInUnit = initialInUnit * 2;
+		jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+	}
+
+	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 = ( /^$|^module$|\/(?: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 ( toType( 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: 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 || Date.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 only
+	// 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,
+	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( elem ).children( "tbody" )[ 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 ) {
+	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
+		elem.type = elem.type.slice( 5 );
+	} 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 ],
+		valueIsFunction = isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( valueIsFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( valueIsFunction ) {
+				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 && ( node.type || "" ).toLowerCase()  !== "module" ) {
+
+							// 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, node );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	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 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 );
+	};
+
+var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
+
+
+
+( 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;
+		}
+
+		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
+			"margin-top:1px;padding:0;border:0";
+		div.style.cssText =
+			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"width:60%;top:1%";
+		documentElement.appendChild( container ).appendChild( div );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+
+		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
+
+		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.right = "60%";
+		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
+
+		// Support: IE 9 - 11 only
+		// Detect misreporting of content dimensions for box-sizing:border-box elements
+		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
+
+		// Support: IE 9 only
+		// Detect overflow:scroll screwiness (gh-3699)
+		div.style.position = "absolute";
+		scrollboxSizeVal = div.offsetWidth === 36 || "absolute";
+
+		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;
+	}
+
+	function roundPixelMeasures( measure ) {
+		return Math.round( parseFloat( measure ) );
+	}
+
+	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
+		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";
+
+	jQuery.extend( support, {
+		boxSizingReliable: function() {
+			computeStyleTests();
+			return boxSizingReliableVal;
+		},
+		pixelBoxStyles: function() {
+			computeStyleTests();
+			return pixelBoxStylesVal;
+		},
+		pixelPosition: function() {
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		reliableMarginLeft: function() {
+			computeStyleTests();
+			return reliableMarginLeftVal;
+		},
+		scrollboxSize: function() {
+			computeStyleTests();
+			return scrollboxSizeVal;
+		}
+	} );
+} )();
+
+
+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.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.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 boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
+	var i = dimension === "width" ? 1 : 0,
+		extra = 0,
+		delta = 0;
+
+	// Adjustment may not be necessary
+	if ( box === ( isBorderBox ? "border" : "content" ) ) {
+		return 0;
+	}
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin
+		if ( box === "margin" ) {
+			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
+		}
+
+		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
+		if ( !isBorderBox ) {
+
+			// Add padding
+			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// For "border" or "margin", add border
+			if ( box !== "padding" ) {
+				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+
+			// But still keep track of it otherwise
+			} else {
+				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+
+		// If we get here with a border-box (content + padding + border), we're seeking "content" or
+		// "padding" or "margin"
+		} else {
+
+			// For "content", subtract padding
+			if ( box === "content" ) {
+				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// For "content" or "padding", subtract border
+			if ( box !== "margin" ) {
+				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	// Account for positive content-box scroll gutter when requested by providing computedVal
+	if ( !isBorderBox && computedVal >= 0 ) {
+
+		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
+		// Assuming integer scroll gutter, subtract the rest and round down
+		delta += Math.max( 0, Math.ceil(
+			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+			computedVal -
+			delta -
+			extra -
+			0.5
+		) );
+	}
+
+	return delta;
+}
+
+function getWidthOrHeight( elem, dimension, extra ) {
+
+	// Start with computed style
+	var styles = getStyles( elem ),
+		val = curCSS( elem, dimension, styles ),
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+		valueIsBorderBox = isBorderBox;
+
+	// Support: Firefox <=54
+	// Return a confounding non-pixel value or feign ignorance, as appropriate.
+	if ( rnumnonpx.test( val ) ) {
+		if ( !extra ) {
+			return val;
+		}
+		val = "auto";
+	}
+
+	// Check for style in case a browser which returns unreliable values
+	// for getComputedStyle silently falls back to the reliable elem.style
+	valueIsBorderBox = valueIsBorderBox &&
+		( support.boxSizingReliable() || val === elem.style[ dimension ] );
+
+	// Fall back to offsetWidth/offsetHeight when value is "auto"
+	// This happens for inline elements with no explicit setting (gh-3571)
+	// Support: Android <=4.1 - 4.3 only
+	// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+	if ( val === "auto" ||
+		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) {
+
+		val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];
+
+		// offsetWidth/offsetHeight provide border-box values
+		valueIsBorderBox = true;
+	}
+
+	// Normalize "" and auto
+	val = parseFloat( val ) || 0;
+
+	// Adjust for the element's box model
+	return ( val +
+		boxModelAdjustment(
+			elem,
+			dimension,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles,
+
+			// Provide the current computed size to request scroll gutter calculation (gh-3589)
+			val
+		)
+	) + "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: {},
+
+	// 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 = 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 = 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, dimension ) {
+	jQuery.cssHooks[ dimension ] = {
+		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, dimension, extra );
+						} ) :
+						getWidthOrHeight( elem, dimension, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = getStyles( elem ),
+				isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+				subtract = extra && boxModelAdjustment(
+					elem,
+					dimension,
+					extra,
+					isBorderBox,
+					styles
+				);
+
+			// Account for unreliable border-box dimensions by comparing offset* to computed and
+			// faking a content-box to get border and padding (gh-3699)
+			if ( isBorderBox && support.scrollboxSize() === styles.position ) {
+				subtract -= Math.ceil(
+					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+					parseFloat( styles[ dimension ] ) -
+					boxModelAdjustment( elem, dimension, "border", false, styles ) -
+					0.5
+				);
+			}
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ dimension ] = value;
+				value = jQuery.css( elem, dimension );
+			}
+
+			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 ( prefix !== "margin" ) {
+		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 = Date.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 - 15
+		// Record all 3 overflow attributes because IE does not infer the shorthand
+		// from identically-valued overflowX and overflowY and Edge just mirrors
+		// the overflowX value there.
+		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 = 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 ( isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					result.stop.bind( result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( 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 ( 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 ||
+			isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !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 ( 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 = Date.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://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
+	function stripAndCollapse( value ) {
+		var tokens = value.match( rnothtmlwhite ) || [];
+		return tokens.join( " " );
+	}
+
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+function classesToArray( value ) {
+	if ( Array.isArray( value ) ) {
+		return value;
+	}
+	if ( typeof value === "string" ) {
+		return value.match( rnothtmlwhite ) || [];
+	}
+	return [];
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			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 ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			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,
+			isValidValue = type === "string" || Array.isArray( value );
+
+		if ( typeof stateVal === "boolean" && isValidValue ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( 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 ( isValidValue ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = classesToArray( value );
+
+				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, valueIsFunction,
+			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;
+		}
+
+		valueIsFunction = isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( valueIsFunction ) {
+				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
+
+
+support.focusin = "onfocusin" in window;
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	stopPropagationCallback = function( e ) {
+		e.stopPropagation();
+	};
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = lastElement = 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 && !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() ) {
+			lastElement = cur;
+			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 && isFunction( elem[ type ] ) && !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;
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.addEventListener( type, stopPropagationCallback );
+					}
+
+					elem[ type ]();
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.removeEventListener( type, stopPropagationCallback );
+					}
+
+					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 );
+		}
+	}
+} );
+
+
+// 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 = Date.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 && toType( 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 = 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 ( 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 - 15
+			// 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 and should be processed, append data to url
+			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
+				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 ( 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 ( 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 ( 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 htmlIsFunction = isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( htmlIsFunction ? 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.ontimeout =
+									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 = xhr.ontimeout = 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 = 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 && 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 ( 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 ( 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() relates an element's border box to the document origin
+	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 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 };
+		}
+
+		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
+		rect = elem.getBoundingClientRect();
+		win = elem.ownerDocument.defaultView;
+		return {
+			top: rect.top + win.pageYOffset,
+			left: rect.left + win.pageXOffset
+		};
+	},
+
+	// position() relates an element's margin box to its offset parent's padding box
+	// This corresponds to the behavior of CSS absolute positioning
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset, doc,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// position:fixed elements are offset from the viewport, which itself always has zero offset
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume position:fixed implies availability of getBoundingClientRect
+			offset = elem.getBoundingClientRect();
+
+		} else {
+			offset = this.offset();
+
+			// Account for the *real* offset parent, which can be the document or its root element
+			// when a statically positioned element is identified
+			doc = elem.ownerDocument;
+			offsetParent = elem.offsetParent || doc.documentElement;
+			while ( offsetParent &&
+				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+				jQuery.css( offsetParent, "position" ) === "static" ) {
+
+				offsetParent = offsetParent.parentNode;
+			}
+			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+
+				// Incorporate borders into its offset, since they are outside its content origin
+				parentOffset = jQuery( offsetParent ).offset();
+				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
+				parentOffset.left += jQuery.css( offsetParent, "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 ( 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 ( 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.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 );
+	}
+} );
+
+
+
+
+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 );
+	}
+} );
+
+// Bind a function to a context, optionally partially applying any
+// arguments.
+// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
+// However, it is not slated for removal any time soon
+jQuery.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 ( !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;
+};
+
+jQuery.holdReady = function( hold ) {
+	if ( hold ) {
+		jQuery.readyWait++;
+	} else {
+		jQuery.ready( true );
+	}
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+jQuery.isFunction = isFunction;
+jQuery.isWindow = isWindow;
+jQuery.camelCase = camelCase;
+jQuery.type = toType;
+
+jQuery.now = Date.now;
+
+jQuery.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 ) );
+};
+
+
+
+
+// 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>/*!
+Chosen, a Select Box Enhancer for jQuery and Prototype
+by Patrick Filler for Harvest, http://getharvest.com
+
+Version 1.8.7
+Full source at https://github.com/harvesthq/chosen
+Copyright (c) 2011-2018 Harvest http://getharvest.com
+
+MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
+This file is generated by `grunt build`, do not edit it by hand.
+*/
+
+(function() {
+  var $, AbstractChosen, Chosen, SelectParser,
+    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;
+
+  SelectParser = (function() {
+    function SelectParser() {
+      this.options_index = 0;
+      this.parsed = [];
+    }
+
+    SelectParser.prototype.add_node = function(child) {
+      if (child.nodeName.toUpperCase() === "OPTGROUP") {
+        return this.add_group(child);
+      } else {
+        return this.add_option(child);
+      }
+    };
+
+    SelectParser.prototype.add_group = function(group) {
+      var group_position, i, len, option, ref, results1;
+      group_position = this.parsed.length;
+      this.parsed.push({
+        array_index: group_position,
+        group: true,
+        label: group.label,
+        title: group.title ? group.title : void 0,
+        children: 0,
+        disabled: group.disabled,
+        classes: group.className
+      });
+      ref = group.childNodes;
+      results1 = [];
+      for (i = 0, len = ref.length; i < len; i++) {
+        option = ref[i];
+        results1.push(this.add_option(option, group_position, group.disabled));
+      }
+      return results1;
+    };
+
+    SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
+      if (option.nodeName.toUpperCase() === "OPTION") {
+        if (option.text !== "") {
+          if (group_position != null) {
+            this.parsed[group_position].children += 1;
+          }
+          this.parsed.push({
+            array_index: this.parsed.length,
+            options_index: this.options_index,
+            value: option.value,
+            text: option.text,
+            html: option.innerHTML,
+            title: option.title ? option.title : void 0,
+            selected: option.selected,
+            disabled: group_disabled === true ? group_disabled : option.disabled,
+            group_array_index: group_position,
+            group_label: group_position != null ? this.parsed[group_position].label : null,
+            classes: option.className,
+            style: option.style.cssText
+          });
+        } else {
+          this.parsed.push({
+            array_index: this.parsed.length,
+            options_index: this.options_index,
+            empty: true
+          });
+        }
+        return this.options_index += 1;
+      }
+    };
+
+    return SelectParser;
+
+  })();
+
+  SelectParser.select_to_array = function(select) {
+    var child, i, len, parser, ref;
+    parser = new SelectParser();
+    ref = select.childNodes;
+    for (i = 0, len = ref.length; i < len; i++) {
+      child = ref[i];
+      parser.add_node(child);
+    }
+    return parser.parsed;
+  };
+
+  AbstractChosen = (function() {
+    function AbstractChosen(form_field, options1) {
+      this.form_field = form_field;
+      this.options = options1 != null ? options1 : {};
+      this.label_click_handler = bind(this.label_click_handler, this);
+      if (!AbstractChosen.browser_is_supported()) {
+        return;
+      }
+      this.is_multiple = this.form_field.multiple;
+      this.set_default_text();
+      this.set_default_values();
+      this.setup();
+      this.set_up_html();
+      this.register_observers();
+      this.on_ready();
+    }
+
+    AbstractChosen.prototype.set_default_values = function() {
+      this.click_test_action = (function(_this) {
+        return function(evt) {
+          return _this.test_active_click(evt);
+        };
+      })(this);
+      this.activate_action = (function(_this) {
+        return function(evt) {
+          return _this.activate_field(evt);
+        };
+      })(this);
+      this.active_field = false;
+      this.mouse_on_container = false;
+      this.results_showing = false;
+      this.result_highlighted = null;
+      this.is_rtl = this.options.rtl || /\bchosen-rtl\b/.test(this.form_field.className);
+      this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false;
+      this.disable_search_threshold = this.options.disable_search_threshold || 0;
+      this.disable_search = this.options.disable_search || false;
+      this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;
+      this.group_search = this.options.group_search != null ? this.options.group_search : true;
+      this.search_contains = this.options.search_contains || false;
+      this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;
+      this.max_selected_options = this.options.max_selected_options || Infinity;
+      this.inherit_select_classes = this.options.inherit_select_classes || false;
+      this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
+      this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
+      this.include_group_label_in_selected = this.options.include_group_label_in_selected || false;
+      this.max_shown_results = this.options.max_shown_results || Number.POSITIVE_INFINITY;
+      this.case_sensitive_search = this.options.case_sensitive_search || false;
+      return this.hide_results_on_select = this.options.hide_results_on_select != null ? this.options.hide_results_on_select : true;
+    };
+
+    AbstractChosen.prototype.set_default_text = function() {
+      if (this.form_field.getAttribute("data-placeholder")) {
+        this.default_text = this.form_field.getAttribute("data-placeholder");
+      } else if (this.is_multiple) {
+        this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;
+      } else {
+        this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
+      }
+      this.default_text = this.escape_html(this.default_text);
+      return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
+    };
+
+    AbstractChosen.prototype.choice_label = function(item) {
+      if (this.include_group_label_in_selected && (item.group_label != null)) {
+        return "<b class='group-name'>" + (this.escape_html(item.group_label)) + "</b>" + item.html;
+      } else {
+        return item.html;
+      }
+    };
+
+    AbstractChosen.prototype.mouse_enter = function() {
+      return this.mouse_on_container = true;
+    };
+
+    AbstractChosen.prototype.mouse_leave = function() {
+      return this.mouse_on_container = false;
+    };
+
+    AbstractChosen.prototype.input_focus = function(evt) {
+      if (this.is_multiple) {
+        if (!this.active_field) {
+          return setTimeout(((function(_this) {
+            return function() {
+              return _this.container_mousedown();
+            };
+          })(this)), 50);
+        }
+      } else {
+        if (!this.active_field) {
+          return this.activate_field();
+        }
+      }
+    };
+
+    AbstractChosen.prototype.input_blur = function(evt) {
+      if (!this.mouse_on_container) {
+        this.active_field = false;
+        return setTimeout(((function(_this) {
+          return function() {
+            return _this.blur_test();
+          };
+        })(this)), 100);
+      }
+    };
+
+    AbstractChosen.prototype.label_click_handler = function(evt) {
+      if (this.is_multiple) {
+        return this.container_mousedown(evt);
+      } else {
+        return this.activate_field();
+      }
+    };
+
+    AbstractChosen.prototype.results_option_build = function(options) {
+      var content, data, data_content, i, len, ref, shown_results;
+      content = '';
+      shown_results = 0;
+      ref = this.results_data;
+      for (i = 0, len = ref.length; i < len; i++) {
+        data = ref[i];
+        data_content = '';
+        if (data.group) {
+          data_content = this.result_add_group(data);
+        } else {
+          data_content = this.result_add_option(data);
+        }
+        if (data_content !== '') {
+          shown_results++;
+          content += data_content;
+        }
+        if (options != null ? options.first : void 0) {
+          if (data.selected && this.is_multiple) {
+            this.choice_build(data);
+          } else if (data.selected && !this.is_multiple) {
+            this.single_set_selected_text(this.choice_label(data));
+          }
+        }
+        if (shown_results >= this.max_shown_results) {
+          break;
+        }
+      }
+      return content;
+    };
+
+    AbstractChosen.prototype.result_add_option = function(option) {
+      var classes, option_el;
+      if (!option.search_match) {
+        return '';
+      }
+      if (!this.include_option_in_results(option)) {
+        return '';
+      }
+      classes = [];
+      if (!option.disabled && !(option.selected && this.is_multiple)) {
+        classes.push("active-result");
+      }
+      if (option.disabled && !(option.selected && this.is_multiple)) {
+        classes.push("disabled-result");
+      }
+      if (option.selected) {
+        classes.push("result-selected");
+      }
+      if (option.group_array_index != null) {
+        classes.push("group-option");
+      }
+      if (option.classes !== "") {
+        classes.push(option.classes);
+      }
+      option_el = document.createElement("li");
+      option_el.className = classes.join(" ");
+      if (option.style) {
+        option_el.style.cssText = option.style;
+      }
+      option_el.setAttribute("data-option-array-index", option.array_index);
+      option_el.innerHTML = option.highlighted_html || option.html;
+      if (option.title) {
+        option_el.title = option.title;
+      }
+      return this.outerHTML(option_el);
+    };
+
+    AbstractChosen.prototype.result_add_group = function(group) {
+      var classes, group_el;
+      if (!(group.search_match || group.group_match)) {
+        return '';
+      }
+      if (!(group.active_options > 0)) {
+        return '';
+      }
+      classes = [];
+      classes.push("group-result");
+      if (group.classes) {
+        classes.push(group.classes);
+      }
+      group_el = document.createElement("li");
+      group_el.className = classes.join(" ");
+      group_el.innerHTML = group.highlighted_html || this.escape_html(group.label);
+      if (group.title) {
+        group_el.title = group.title;
+      }
+      return this.outerHTML(group_el);
+    };
+
+    AbstractChosen.prototype.results_update_field = function() {
+      this.set_default_text();
+      if (!this.is_multiple) {
+        this.results_reset_cleanup();
+      }
+      this.result_clear_highlight();
+      this.results_build();
+      if (this.results_showing) {
+        return this.winnow_results();
+      }
+    };
+
+    AbstractChosen.prototype.reset_single_select_options = function() {
+      var i, len, ref, result, results1;
+      ref = this.results_data;
+      results1 = [];
+      for (i = 0, len = ref.length; i < len; i++) {
+        result = ref[i];
+        if (result.selected) {
+          results1.push(result.selected = false);
+        } else {
+          results1.push(void 0);
+        }
+      }
+      return results1;
+    };
+
+    AbstractChosen.prototype.results_toggle = function() {
+      if (this.results_showing) {
+        return this.results_hide();
+      } else {
+        return this.results_show();
+      }
+    };
+
+    AbstractChosen.prototype.results_search = function(evt) {
+      if (this.results_showing) {
+        return this.winnow_results();
+      } else {
+        return this.results_show();
+      }
+    };
+
+    AbstractChosen.prototype.winnow_results = function(options) {
+      var escapedQuery, fix, i, len, option, prefix, query, ref, regex, results, results_group, search_match, startpos, suffix, text;
+      this.no_results_clear();
+      results = 0;
+      query = this.get_search_text();
+      escapedQuery = query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+      regex = this.get_search_regex(escapedQuery);
+      ref = this.results_data;
+      for (i = 0, len = ref.length; i < len; i++) {
+        option = ref[i];
+        option.search_match = false;
+        results_group = null;
+        search_match = null;
+        option.highlighted_html = '';
+        if (this.include_option_in_results(option)) {
+          if (option.group) {
+            option.group_match = false;
+            option.active_options = 0;
+          }
+          if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
+            results_group = this.results_data[option.group_array_index];
+            if (results_group.active_options === 0 && results_group.search_match) {
+              results += 1;
+            }
+            results_group.active_options += 1;
+          }
+          text = option.group ? option.label : option.text;
+          if (!(option.group && !this.group_search)) {
+            search_match = this.search_string_match(text, regex);
+            option.search_match = search_match != null;
+            if (option.search_match && !option.group) {
+              results += 1;
+            }
+            if (option.search_match) {
+              if (query.length) {
+                startpos = search_match.index;
+                prefix = text.slice(0, startpos);
+                fix = text.slice(startpos, startpos + query.length);
+                suffix = text.slice(startpos + query.length);
+                option.highlighted_html = (this.escape_html(prefix)) + "<em>" + (this.escape_html(fix)) + "</em>" + (this.escape_html(suffix));
+              }
+              if (results_group != null) {
+                results_group.group_match = true;
+              }
+            } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
+              option.search_match = true;
+            }
+          }
+        }
+      }
+      this.result_clear_highlight();
+      if (results < 1 && query.length) {
+        this.update_results_content("");
+        return this.no_results(query);
+      } else {
+        this.update_results_content(this.results_option_build());
+        if (!(options != null ? options.skip_highlight : void 0)) {
+          return this.winnow_results_set_highlight();
+        }
+      }
+    };
+
+    AbstractChosen.prototype.get_search_regex = function(escaped_search_string) {
+      var regex_flag, regex_string;
+      regex_string = this.search_contains ? escaped_search_string : "(^|\\s|\\b)" + escaped_search_string + "[^\\s]*";
+      if (!(this.enable_split_word_search || this.search_contains)) {
+        regex_string = "^" + regex_string;
+      }
+      regex_flag = this.case_sensitive_search ? "" : "i";
+      return new RegExp(regex_string, regex_flag);
+    };
+
+    AbstractChosen.prototype.search_string_match = function(search_string, regex) {
+      var match;
+      match = regex.exec(search_string);
+      if (!this.search_contains && (match != null ? match[1] : void 0)) {
+        match.index += 1;
+      }
+      return match;
+    };
+
+    AbstractChosen.prototype.choices_count = function() {
+      var i, len, option, ref;
+      if (this.selected_option_count != null) {
+        return this.selected_option_count;
+      }
+      this.selected_option_count = 0;
+      ref = this.form_field.options;
+      for (i = 0, len = ref.length; i < len; i++) {
+        option = ref[i];
+        if (option.selected) {
+          this.selected_option_count += 1;
+        }
+      }
+      return this.selected_option_count;
+    };
+
+    AbstractChosen.prototype.choices_click = function(evt) {
+      evt.preventDefault();
+      this.activate_field();
+      if (!(this.results_showing || this.is_disabled)) {
+        return this.results_show();
+      }
+    };
+
+    AbstractChosen.prototype.keydown_checker = function(evt) {
+      var ref, stroke;
+      stroke = (ref = evt.which) != null ? ref : evt.keyCode;
+      this.search_field_scale();
+      if (stroke !== 8 && this.pending_backstroke) {
+        this.clear_backstroke();
+      }
+      switch (stroke) {
+        case 8:
+          this.backstroke_length = this.get_search_field_value().length;
+          break;
+        case 9:
+          if (this.results_showing && !this.is_multiple) {
+            this.result_select(evt);
+          }
+          this.mouse_on_container = false;
+          break;
+        case 13:
+          if (this.results_showing) {
+            evt.preventDefault();
+          }
+          break;
+        case 27:
+          if (this.results_showing) {
+            evt.preventDefault();
+          }
+          break;
+        case 32:
+          if (this.disable_search) {
+            evt.preventDefault();
+          }
+          break;
+        case 38:
+          evt.preventDefault();
+          this.keyup_arrow();
+          break;
+        case 40:
+          evt.preventDefault();
+          this.keydown_arrow();
+          break;
+      }
+    };
+
+    AbstractChosen.prototype.keyup_checker = function(evt) {
+      var ref, stroke;
+      stroke = (ref = evt.which) != null ? ref : evt.keyCode;
+      this.search_field_scale();
+      switch (stroke) {
+        case 8:
+          if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
+            this.keydown_backstroke();
+          } else if (!this.pending_backstroke) {
+            this.result_clear_highlight();
+            this.results_search();
+          }
+          break;
+        case 13:
+          evt.preventDefault();
+          if (this.results_showing) {
+            this.result_select(evt);
+          }
+          break;
+        case 27:
+          if (this.results_showing) {
+            this.results_hide();
+          }
+          break;
+        case 9:
+        case 16:
+        case 17:
+        case 18:
+        case 38:
+        case 40:
+        case 91:
+          break;
+        default:
+          this.results_search();
+          break;
+      }
+    };
+
+    AbstractChosen.prototype.clipboard_event_checker = function(evt) {
+      if (this.is_disabled) {
+        return;
+      }
+      return setTimeout(((function(_this) {
+        return function() {
+          return _this.results_search();
+        };
+      })(this)), 50);
+    };
+
+    AbstractChosen.prototype.container_width = function() {
+      if (this.options.width != null) {
+        return this.options.width;
+      } else {
+        return this.form_field.offsetWidth + "px";
+      }
+    };
+
+    AbstractChosen.prototype.include_option_in_results = function(option) {
+      if (this.is_multiple && (!this.display_selected_options && option.selected)) {
+        return false;
+      }
+      if (!this.display_disabled_options && option.disabled) {
+        return false;
+      }
+      if (option.empty) {
+        return false;
+      }
+      return true;
+    };
+
+    AbstractChosen.prototype.search_results_touchstart = function(evt) {
+      this.touch_started = true;
+      return this.search_results_mouseover(evt);
+    };
+
+    AbstractChosen.prototype.search_results_touchmove = function(evt) {
+      this.touch_started = false;
+      return this.search_results_mouseout(evt);
+    };
+
+    AbstractChosen.prototype.search_results_touchend = function(evt) {
+      if (this.touch_started) {
+        return this.search_results_mouseup(evt);
+      }
+    };
+
+    AbstractChosen.prototype.outerHTML = function(element) {
+      var tmp;
+      if (element.outerHTML) {
+        return element.outerHTML;
+      }
+      tmp = document.createElement("div");
+      tmp.appendChild(element);
+      return tmp.innerHTML;
+    };
+
+    AbstractChosen.prototype.get_single_html = function() {
+      return "<a class=\"chosen-single chosen-default\">\n  <span>" + this.default_text + "</span>\n  <div><b></b></div>\n</a>\n<div class=\"chosen-drop\">\n  <div class=\"chosen-search\">\n    <input class=\"chosen-search-input\" type=\"text\" autocomplete=\"off\" />\n  </div>\n  <ul class=\"chosen-results\"></ul>\n</div>";
+    };
+
+    AbstractChosen.prototype.get_multi_html = function() {
+      return "<ul class=\"chosen-choices\">\n  <li class=\"search-field\">\n    <input class=\"chosen-search-input\" type=\"text\" autocomplete=\"off\" value=\"" + this.default_text + "\" />\n  </li>\n</ul>\n<div class=\"chosen-drop\">\n  <ul class=\"chosen-results\"></ul>\n</div>";
+    };
+
+    AbstractChosen.prototype.get_no_results_html = function(terms) {
+      return "<li class=\"no-results\">\n  " + this.results_none_found + " <span>" + (this.escape_html(terms)) + "</span>\n</li>";
+    };
+
+    AbstractChosen.browser_is_supported = function() {
+      if ("Microsoft Internet Explorer" === window.navigator.appName) {
+        return document.documentMode >= 8;
+      }
+      if (/iP(od|hone)/i.test(window.navigator.userAgent) || /IEMobile/i.test(window.navigator.userAgent) || /Windows Phone/i.test(window.navigator.userAgent) || /BlackBerry/i.test(window.navigator.userAgent) || /BB10/i.test(window.navigator.userAgent) || /Android.*Mobile/i.test(window.navigator.userAgent)) {
+        return false;
+      }
+      return true;
+    };
+
+    AbstractChosen.default_multiple_text = "Select Some Options";
+
+    AbstractChosen.default_single_text = "Select an Option";
+
+    AbstractChosen.default_no_result_text = "No results match";
+
+    return AbstractChosen;
+
+  })();
+
+  $ = jQuery;
+
+  $.fn.extend({
+    chosen: function(options) {
+      if (!AbstractChosen.browser_is_supported()) {
+        return this;
+      }
+      return this.each(function(input_field) {
+        var $this, chosen;
+        $this = $(this);
+        chosen = $this.data('chosen');
+        if (options === 'destroy') {
+          if (chosen instanceof Chosen) {
+            chosen.destroy();
+          }
+          return;
+        }
+        if (!(chosen instanceof Chosen)) {
+          $this.data('chosen', new Chosen(this, options));
+        }
+      });
+    }
+  });
+
+  Chosen = (function(superClass) {
+    extend(Chosen, superClass);
+
+    function Chosen() {
+      return Chosen.__super__.constructor.apply(this, arguments);
+    }
+
+    Chosen.prototype.setup = function() {
+      this.form_field_jq = $(this.form_field);
+      return this.current_selectedIndex = this.form_field.selectedIndex;
+    };
+
+    Chosen.prototype.set_up_html = function() {
+      var container_classes, container_props;
+      container_classes = ["chosen-container"];
+      container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
+      if (this.inherit_select_classes && this.form_field.className) {
+        container_classes.push(this.form_field.className);
+      }
+      if (this.is_rtl) {
+        container_classes.push("chosen-rtl");
+      }
+      container_props = {
+        'class': container_classes.join(' '),
+        'title': this.form_field.title
+      };
+      if (this.form_field.id.length) {
+        container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
+      }
+      this.container = $("<div />", container_props);
+      this.container.width(this.container_width());
+      if (this.is_multiple) {
+        this.container.html(this.get_multi_html());
+      } else {
+        this.container.html(this.get_single_html());
+      }
+      this.form_field_jq.hide().after(this.container);
+      this.dropdown = this.container.find('div.chosen-drop').first();
+      this.search_field = this.container.find('input').first();
+      this.search_results = this.container.find('ul.chosen-results').first();
+      this.search_field_scale();
+      this.search_no_results = this.container.find('li.no-results').first();
+      if (this.is_multiple) {
+        this.search_choices = this.container.find('ul.chosen-choices').first();
+        this.search_container = this.container.find('li.search-field').first();
+      } else {
+        this.search_container = this.container.find('div.chosen-search').first();
+        this.selected_item = this.container.find('.chosen-single').first();
+      }
+      this.results_build();
+      this.set_tab_index();
+      return this.set_label_behavior();
+    };
+
+    Chosen.prototype.on_ready = function() {
+      return this.form_field_jq.trigger("chosen:ready", {
+        chosen: this
+      });
+    };
+
+    Chosen.prototype.register_observers = function() {
+      this.container.on('touchstart.chosen', (function(_this) {
+        return function(evt) {
+          _this.container_mousedown(evt);
+        };
+      })(this));
+      this.container.on('touchend.chosen', (function(_this) {
+        return function(evt) {
+          _this.container_mouseup(evt);
+        };
+      })(this));
+      this.container.on('mousedown.chosen', (function(_this) {
+        return function(evt) {
+          _this.container_mousedown(evt);
+        };
+      })(this));
+      this.container.on('mouseup.chosen', (function(_this) {
+        return function(evt) {
+          _this.container_mouseup(evt);
+        };
+      })(this));
+      this.container.on('mouseenter.chosen', (function(_this) {
+        return function(evt) {
+          _this.mouse_enter(evt);
+        };
+      })(this));
+      this.container.on('mouseleave.chosen', (function(_this) {
+        return function(evt) {
+          _this.mouse_leave(evt);
+        };
+      })(this));
+      this.search_results.on('mouseup.chosen', (function(_this) {
+        return function(evt) {
+          _this.search_results_mouseup(evt);
+        };
+      })(this));
+      this.search_results.on('mouseover.chosen', (function(_this) {
+        return function(evt) {
+          _this.search_results_mouseover(evt);
+        };
+      })(this));
+      this.search_results.on('mouseout.chosen', (function(_this) {
+        return function(evt) {
+          _this.search_results_mouseout(evt);
+        };
+      })(this));
+      this.search_results.on('mousewheel.chosen DOMMouseScroll.chosen', (function(_this) {
+        return function(evt) {
+          _this.search_results_mousewheel(evt);
+        };
+      })(this));
+      this.search_results.on('touchstart.chosen', (function(_this) {
+        return function(evt) {
+          _this.search_results_touchstart(evt);
+        };
+      })(this));
+      this.search_results.on('touchmove.chosen', (function(_this) {
+        return function(evt) {
+          _this.search_results_touchmove(evt);
+        };
+      })(this));
+      this.search_results.on('touchend.chosen', (function(_this) {
+        return function(evt) {
+          _this.search_results_touchend(evt);
+        };
+      })(this));
+      this.form_field_jq.on("chosen:updated.chosen", (function(_this) {
+        return function(evt) {
+          _this.results_update_field(evt);
+        };
+      })(this));
+      this.form_field_jq.on("chosen:activate.chosen", (function(_this) {
+        return function(evt) {
+          _this.activate_field(evt);
+        };
+      })(this));
+      this.form_field_jq.on("chosen:open.chosen", (function(_this) {
+        return function(evt) {
+          _this.container_mousedown(evt);
+        };
+      })(this));
+      this.form_field_jq.on("chosen:close.chosen", (function(_this) {
+        return function(evt) {
+          _this.close_field(evt);
+        };
+      })(this));
+      this.search_field.on('blur.chosen', (function(_this) {
+        return function(evt) {
+          _this.input_blur(evt);
+        };
+      })(this));
+      this.search_field.on('keyup.chosen', (function(_this) {
+        return function(evt) {
+          _this.keyup_checker(evt);
+        };
+      })(this));
+      this.search_field.on('keydown.chosen', (function(_this) {
+        return function(evt) {
+          _this.keydown_checker(evt);
+        };
+      })(this));
+      this.search_field.on('focus.chosen', (function(_this) {
+        return function(evt) {
+          _this.input_focus(evt);
+        };
+      })(this));
+      this.search_field.on('cut.chosen', (function(_this) {
+        return function(evt) {
+          _this.clipboard_event_checker(evt);
+        };
+      })(this));
+      this.search_field.on('paste.chosen', (function(_this) {
+        return function(evt) {
+          _this.clipboard_event_checker(evt);
+        };
+      })(this));
+      if (this.is_multiple) {
+        return this.search_choices.on('click.chosen', (function(_this) {
+          return function(evt) {
+            _this.choices_click(evt);
+          };
+        })(this));
+      } else {
+        return this.container.on('click.chosen', function(evt) {
+          evt.preventDefault();
+        });
+      }
+    };
+
+    Chosen.prototype.destroy = function() {
+      $(this.container[0].ownerDocument).off('click.chosen', this.click_test_action);
+      if (this.form_field_label.length > 0) {
+        this.form_field_label.off('click.chosen');
+      }
+      if (this.search_field[0].tabIndex) {
+        this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
+      }
+      this.container.remove();
+      this.form_field_jq.removeData('chosen');
+      return this.form_field_jq.show();
+    };
+
+    Chosen.prototype.search_field_disabled = function() {
+      this.is_disabled = this.form_field.disabled || this.form_field_jq.parents('fieldset').is(':disabled');
+      this.container.toggleClass('chosen-disabled', this.is_disabled);
+      this.search_field[0].disabled = this.is_disabled;
+      if (!this.is_multiple) {
+        this.selected_item.off('focus.chosen', this.activate_field);
+      }
+      if (this.is_disabled) {
+        return this.close_field();
+      } else if (!this.is_multiple) {
+        return this.selected_item.on('focus.chosen', this.activate_field);
+      }
+    };
+
+    Chosen.prototype.container_mousedown = function(evt) {
+      var ref;
+      if (this.is_disabled) {
+        return;
+      }
+      if (evt && ((ref = evt.type) === 'mousedown' || ref === 'touchstart') && !this.results_showing) {
+        evt.preventDefault();
+      }
+      if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
+        if (!this.active_field) {
+          if (this.is_multiple) {
+            this.search_field.val("");
+          }
+          $(this.container[0].ownerDocument).on('click.chosen', this.click_test_action);
+          this.results_show();
+        } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
+          evt.preventDefault();
+          this.results_toggle();
+        }
+        return this.activate_field();
+      }
+    };
+
+    Chosen.prototype.container_mouseup = function(evt) {
+      if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
+        return this.results_reset(evt);
+      }
+    };
+
+    Chosen.prototype.search_results_mousewheel = function(evt) {
+      var delta;
+      if (evt.originalEvent) {
+        delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail;
+      }
+      if (delta != null) {
+        evt.preventDefault();
+        if (evt.type === 'DOMMouseScroll') {
+          delta = delta * 40;
+        }
+        return this.search_results.scrollTop(delta + this.search_results.scrollTop());
+      }
+    };
+
+    Chosen.prototype.blur_test = function(evt) {
+      if (!this.active_field && this.container.hasClass("chosen-container-active")) {
+        return this.close_field();
+      }
+    };
+
+    Chosen.prototype.close_field = function() {
+      $(this.container[0].ownerDocument).off("click.chosen", this.click_test_action);
+      this.active_field = false;
+      this.results_hide();
+      this.container.removeClass("chosen-container-active");
+      this.clear_backstroke();
+      this.show_search_field_default();
+      this.search_field_scale();
+      return this.search_field.blur();
+    };
+
+    Chosen.prototype.activate_field = function() {
+      if (this.is_disabled) {
+        return;
+      }
+      this.container.addClass("chosen-container-active");
+      this.active_field = true;
+      this.search_field.val(this.search_field.val());
+      return this.search_field.focus();
+    };
+
+    Chosen.prototype.test_active_click = function(evt) {
+      var active_container;
+      active_container = $(evt.target).closest('.chosen-container');
+      if (active_container.length && this.container[0] === active_container[0]) {
+        return this.active_field = true;
+      } else {
+        return this.close_field();
+      }
+    };
+
+    Chosen.prototype.results_build = function() {
+      this.parsing = true;
+      this.selected_option_count = null;
+      this.results_data = SelectParser.select_to_array(this.form_field);
+      if (this.is_multiple) {
+        this.search_choices.find("li.search-choice").remove();
+      } else {
+        this.single_set_selected_text();
+        if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
+          this.search_field[0].readOnly = true;
+          this.container.addClass("chosen-container-single-nosearch");
+        } else {
+          this.search_field[0].readOnly = false;
+          this.container.removeClass("chosen-container-single-nosearch");
+        }
+      }
+      this.update_results_content(this.results_option_build({
+        first: true
+      }));
+      this.search_field_disabled();
+      this.show_search_field_default();
+      this.search_field_scale();
+      return this.parsing = false;
+    };
+
+    Chosen.prototype.result_do_highlight = function(el) {
+      var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
+      if (el.length) {
+        this.result_clear_highlight();
+        this.result_highlight = el;
+        this.result_highlight.addClass("highlighted");
+        maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
+        visible_top = this.search_results.scrollTop();
+        visible_bottom = maxHeight + visible_top;
+        high_top = this.result_highlight.position().top + this.search_results.scrollTop();
+        high_bottom = high_top + this.result_highlight.outerHeight();
+        if (high_bottom >= visible_bottom) {
+          return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
+        } else if (high_top < visible_top) {
+          return this.search_results.scrollTop(high_top);
+        }
+      }
+    };
+
+    Chosen.prototype.result_clear_highlight = function() {
+      if (this.result_highlight) {
+        this.result_highlight.removeClass("highlighted");
+      }
+      return this.result_highlight = null;
+    };
+
+    Chosen.prototype.results_show = function() {
+      if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
+        this.form_field_jq.trigger("chosen:maxselected", {
+          chosen: this
+        });
+        return false;
+      }
+      this.container.addClass("chosen-with-drop");
+      this.results_showing = true;
+      this.search_field.focus();
+      this.search_field.val(this.get_search_field_value());
+      this.winnow_results();
+      return this.form_field_jq.trigger("chosen:showing_dropdown", {
+        chosen: this
+      });
+    };
+
+    Chosen.prototype.update_results_content = function(content) {
+      return this.search_results.html(content);
+    };
+
+    Chosen.prototype.results_hide = function() {
+      if (this.results_showing) {
+        this.result_clear_highlight();
+        this.container.removeClass("chosen-with-drop");
+        this.form_field_jq.trigger("chosen:hiding_dropdown", {
+          chosen: this
+        });
+      }
+      return this.results_showing = false;
+    };
+
+    Chosen.prototype.set_tab_index = function(el) {
+      var ti;
+      if (this.form_field.tabIndex) {
+        ti = this.form_field.tabIndex;
+        this.form_field.tabIndex = -1;
+        return this.search_field[0].tabIndex = ti;
+      }
+    };
+
+    Chosen.prototype.set_label_behavior = function() {
+      this.form_field_label = this.form_field_jq.parents("label");
+      if (!this.form_field_label.length && this.form_field.id.length) {
+        this.form_field_label = $("label[for='" + this.form_field.id + "']");
+      }
+      if (this.form_field_label.length > 0) {
+        return this.form_field_label.on('click.chosen', this.label_click_handler);
+      }
+    };
+
+    Chosen.prototype.show_search_field_default = function() {
+      if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
+        this.search_field.val(this.default_text);
+        return this.search_field.addClass("default");
+      } else {
+        this.search_field.val("");
+        return this.search_field.removeClass("default");
+      }
+    };
+
+    Chosen.prototype.search_results_mouseup = function(evt) {
+      var target;
+      target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
+      if (target.length) {
+        this.result_highlight = target;
+        this.result_select(evt);
+        return this.search_field.focus();
+      }
+    };
+
+    Chosen.prototype.search_results_mouseover = function(evt) {
+      var target;
+      target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
+      if (target) {
+        return this.result_do_highlight(target);
+      }
+    };
+
+    Chosen.prototype.search_results_mouseout = function(evt) {
+      if ($(evt.target).hasClass("active-result") || $(evt.target).parents('.active-result').first()) {
+        return this.result_clear_highlight();
+      }
+    };
+
+    Chosen.prototype.choice_build = function(item) {
+      var choice, close_link;
+      choice = $('<li />', {
+        "class": "search-choice"
+      }).html("<span>" + (this.choice_label(item)) + "</span>");
+      if (item.disabled) {
+        choice.addClass('search-choice-disabled');
+      } else {
+        close_link = $('<a />', {
+          "class": 'search-choice-close',
+          'data-option-array-index': item.array_index
+        });
+        close_link.on('click.chosen', (function(_this) {
+          return function(evt) {
+            return _this.choice_destroy_link_click(evt);
+          };
+        })(this));
+        choice.append(close_link);
+      }
+      return this.search_container.before(choice);
+    };
+
+    Chosen.prototype.choice_destroy_link_click = function(evt) {
+      evt.preventDefault();
+      evt.stopPropagation();
+      if (!this.is_disabled) {
+        return this.choice_destroy($(evt.target));
+      }
+    };
+
+    Chosen.prototype.choice_destroy = function(link) {
+      if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
+        if (this.active_field) {
+          this.search_field.focus();
+        } else {
+          this.show_search_field_default();
+        }
+        if (this.is_multiple && this.choices_count() > 0 && this.get_search_field_value().length < 1) {
+          this.results_hide();
+        }
+        link.parents('li').first().remove();
+        return this.search_field_scale();
+      }
+    };
+
+    Chosen.prototype.results_reset = function() {
+      this.reset_single_select_options();
+      this.form_field.options[0].selected = true;
+      this.single_set_selected_text();
+      this.show_search_field_default();
+      this.results_reset_cleanup();
+      this.trigger_form_field_change();
+      if (this.active_field) {
+        return this.results_hide();
+      }
+    };
+
+    Chosen.prototype.results_reset_cleanup = function() {
+      this.current_selectedIndex = this.form_field.selectedIndex;
+      return this.selected_item.find("abbr").remove();
+    };
+
+    Chosen.prototype.result_select = function(evt) {
+      var high, item;
+      if (this.result_highlight) {
+        high = this.result_highlight;
+        this.result_clear_highlight();
+        if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
+          this.form_field_jq.trigger("chosen:maxselected", {
+            chosen: this
+          });
+          return false;
+        }
+        if (this.is_multiple) {
+          high.removeClass("active-result");
+        } else {
+          this.reset_single_select_options();
+        }
+        high.addClass("result-selected");
+        item = this.results_data[high[0].getAttribute("data-option-array-index")];
+        item.selected = true;
+        this.form_field.options[item.options_index].selected = true;
+        this.selected_option_count = null;
+        if (this.is_multiple) {
+          this.choice_build(item);
+        } else {
+          this.single_set_selected_text(this.choice_label(item));
+        }
+        if (this.is_multiple && (!this.hide_results_on_select || (evt.metaKey || evt.ctrlKey))) {
+          if (evt.metaKey || evt.ctrlKey) {
+            this.winnow_results({
+              skip_highlight: true
+            });
+          } else {
+            this.search_field.val("");
+            this.winnow_results();
+          }
+        } else {
+          this.results_hide();
+          this.show_search_field_default();
+        }
+        if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
+          this.trigger_form_field_change({
+            selected: this.form_field.options[item.options_index].value
+          });
+        }
+        this.current_selectedIndex = this.form_field.selectedIndex;
+        evt.preventDefault();
+        return this.search_field_scale();
+      }
+    };
+
+    Chosen.prototype.single_set_selected_text = function(text) {
+      if (text == null) {
+        text = this.default_text;
+      }
+      if (text === this.default_text) {
+        this.selected_item.addClass("chosen-default");
+      } else {
+        this.single_deselect_control_build();
+        this.selected_item.removeClass("chosen-default");
+      }
+      return this.selected_item.find("span").html(text);
+    };
+
+    Chosen.prototype.result_deselect = function(pos) {
+      var result_data;
+      result_data = this.results_data[pos];
+      if (!this.form_field.options[result_data.options_index].disabled) {
+        result_data.selected = false;
+        this.form_field.options[result_data.options_index].selected = false;
+        this.selected_option_count = null;
+        this.result_clear_highlight();
+        if (this.results_showing) {
+          this.winnow_results();
+        }
+        this.trigger_form_field_change({
+          deselected: this.form_field.options[result_data.options_index].value
+        });
+        this.search_field_scale();
+        return true;
+      } else {
+        return false;
+      }
+    };
+
+    Chosen.prototype.single_deselect_control_build = function() {
+      if (!this.allow_single_deselect) {
+        return;
+      }
+      if (!this.selected_item.find("abbr").length) {
+        this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
+      }
+      return this.selected_item.addClass("chosen-single-with-deselect");
+    };
+
+    Chosen.prototype.get_search_field_value = function() {
+      return this.search_field.val();
+    };
+
+    Chosen.prototype.get_search_text = function() {
+      return $.trim(this.get_search_field_value());
+    };
+
+    Chosen.prototype.escape_html = function(text) {
+      return $('<div/>').text(text).html();
+    };
+
+    Chosen.prototype.winnow_results_set_highlight = function() {
+      var do_high, selected_results;
+      selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
+      do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
+      if (do_high != null) {
+        return this.result_do_highlight(do_high);
+      }
+    };
+
+    Chosen.prototype.no_results = function(terms) {
+      var no_results_html;
+      no_results_html = this.get_no_results_html(terms);
+      this.search_results.append(no_results_html);
+      return this.form_field_jq.trigger("chosen:no_results", {
+        chosen: this
+      });
+    };
+
+    Chosen.prototype.no_results_clear = function() {
+      return this.search_results.find(".no-results").remove();
+    };
+
+    Chosen.prototype.keydown_arrow = function() {
+      var next_sib;
+      if (this.results_showing && this.result_highlight) {
+        next_sib = this.result_highlight.nextAll("li.active-result").first();
+        if (next_sib) {
+          return this.result_do_highlight(next_sib);
+        }
+      } else {
+        return this.results_show();
+      }
+    };
+
+    Chosen.prototype.keyup_arrow = function() {
+      var prev_sibs;
+      if (!this.results_showing && !this.is_multiple) {
+        return this.results_show();
+      } else if (this.result_highlight) {
+        prev_sibs = this.result_highlight.prevAll("li.active-result");
+        if (prev_sibs.length) {
+          return this.result_do_highlight(prev_sibs.first());
+        } else {
+          if (this.choices_count() > 0) {
+            this.results_hide();
+          }
+          return this.result_clear_highlight();
+        }
+      }
+    };
+
+    Chosen.prototype.keydown_backstroke = function() {
+      var next_available_destroy;
+      if (this.pending_backstroke) {
+        this.choice_destroy(this.pending_backstroke.find("a").first());
+        return this.clear_backstroke();
+      } else {
+        next_available_destroy = this.search_container.siblings("li.search-choice").last();
+        if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
+          this.pending_backstroke = next_available_destroy;
+          if (this.single_backstroke_delete) {
+            return this.keydown_backstroke();
+          } else {
+            return this.pending_backstroke.addClass("search-choice-focus");
+          }
+        }
+      }
+    };
+
+    Chosen.prototype.clear_backstroke = function() {
+      if (this.pending_backstroke) {
+        this.pending_backstroke.removeClass("search-choice-focus");
+      }
+      return this.pending_backstroke = null;
+    };
+
+    Chosen.prototype.search_field_scale = function() {
+      var div, i, len, style, style_block, styles, width;
+      if (!this.is_multiple) {
+        return;
+      }
+      style_block = {
+        position: 'absolute',
+        left: '-1000px',
+        top: '-1000px',
+        display: 'none',
+        whiteSpace: 'pre'
+      };
+      styles = ['fontSize', 'fontStyle', 'fontWeight', 'fontFamily', 'lineHeight', 'textTransform', 'letterSpacing'];
+      for (i = 0, len = styles.length; i < len; i++) {
+        style = styles[i];
+        style_block[style] = this.search_field.css(style);
+      }
+      div = $('<div />').css(style_block);
+      div.text(this.get_search_field_value());
+      $('body').append(div);
+      width = div.width() + 25;
+      div.remove();
+      if (this.container.is(':visible')) {
+        width = Math.min(this.container.outerWidth() - 10, width);
+      }
+      return this.search_field.width(width);
+    };
+
+    Chosen.prototype.trigger_form_field_change = function(extra) {
+      this.form_field_jq.trigger("input", extra);
+      return this.form_field_jq.trigger("change", extra);
+    };
+
+    return Chosen;
+
+  })(AbstractChosen);
+
+}).call(this);
+</script>
+    <script>(function (global, factory) {
+  if (typeof define === "function" && define.amd) {
+    define([], factory);
+  } else if (typeof exports !== "undefined") {
+    factory();
+  } else {
+    var mod = {
+      exports: {}
+    };
+    factory();
+    global.FileSaver = mod.exports;
+  }
+})(this, function () {
+  "use strict";
+
+  /*
+  * FileSaver.js
+  * A saveAs() FileSaver implementation.
+  *
+  * By Eli Grey, http://eligrey.com
+  *
+  * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)
+  * source  : http://purl.eligrey.com/github/FileSaver.js
+  */
+  // The one and only way of getting global scope in all environments
+  // https://stackoverflow.com/q/3277182/1008999
+  var _global = typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : void 0;
+
+  function bom(blob, opts) {
+    if (typeof opts === 'undefined') opts = {
+      autoBom: false
+    };else if (typeof opts !== 'object') {
+      console.warn('Depricated: Expected third argument to be a object');
+      opts = {
+        autoBom: !opts
+      };
+    } // 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 (opts.autoBom && /^\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;
+  }
+
+  function download(url, name, opts) {
+    var xhr = new XMLHttpRequest();
+    xhr.open('GET', url);
+    xhr.responseType = 'blob';
+
+    xhr.onload = function () {
+      saveAs(xhr.response, name, opts);
+    };
+
+    xhr.onerror = function () {
+      console.error('could not download file');
+    };
+
+    xhr.send();
+  }
+
+  function corsEnabled(url) {
+    var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker
+
+    xhr.open('HEAD', url, false);
+    xhr.send();
+    return xhr.status >= 200 && xhr.status <= 299;
+  } // `a.click()` doesn't work for all browsers (#465)
+
+
+  function click(node) {
+    try {
+      node.dispatchEvent(new MouseEvent('click'));
+    } catch (e) {
+      var evt = document.createEvent('MouseEvents');
+      evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
+      node.dispatchEvent(evt);
+    }
+  }
+
+  var saveAs = _global.saveAs || // probably in some web worker
+  typeof window !== 'object' || window !== _global ? function saveAs() {}
+  /* noop */
+  // Use download attribute first if possible (#193 Lumia mobile)
+  : 'download' in HTMLAnchorElement.prototype ? function saveAs(blob, name, opts) {
+    var URL = _global.URL || _global.webkitURL;
+    var a = document.createElement('a');
+    name = name || blob.name || 'download';
+    a.download = name;
+    a.rel = 'noopener'; // tabnabbing
+    // TODO: detect chrome extensions & packaged apps
+    // a.target = '_blank'
+
+    if (typeof blob === 'string') {
+      // Support regular links
+      a.href = blob;
+
+      if (a.origin !== location.origin) {
+        corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = '_blank');
+      } else {
+        click(a);
+      }
+    } else {
+      // Support blobs
+      a.href = URL.createObjectURL(blob);
+      setTimeout(function () {
+        URL.revokeObjectURL(a.href);
+      }, 4E4); // 40s
+
+      setTimeout(function () {
+        click(a);
+      }, 0);
+    }
+  } // Use msSaveOrOpenBlob as a second approach
+  : 'msSaveOrOpenBlob' in navigator ? function saveAs(blob, name, opts) {
+    name = name || blob.name || 'download';
+
+    if (typeof blob === 'string') {
+      if (corsEnabled(blob)) {
+        download(blob, name, opts);
+      } else {
+        var a = document.createElement('a');
+        a.href = blob;
+        a.target = '_blank';
+        setTimeout(function () {
+          click(a);
+        });
+      }
+    } else {
+      navigator.msSaveOrOpenBlob(bom(blob, opts), name);
+    }
+  } // Fallback to using FileReader and a popup
+  : function saveAs(blob, name, opts, popup) {
+    // Open a popup immediately do go around popup blocker
+    // Mostly only avalible on user interaction and the fileReader is async so...
+    popup = popup || open('', '_blank');
+
+    if (popup) {
+      popup.document.title = popup.document.body.innerText = 'downloading...';
+    }
+
+    if (typeof blob === 'string') return download(blob, name, opts);
+    var force = blob.type === 'application/octet-stream';
+
+    var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari;
+
+    var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent);
+
+    if ((isChromeIOS || force && isSafari) && typeof FileReader === 'object') {
+      // Safari doesn't allow downloading of blob urls
+      var reader = new FileReader();
+
+      reader.onloadend = function () {
+        var url = reader.result;
+        url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;');
+        if (popup) popup.location.href = url;else location = url;
+        popup = null; // reverse-tabnabbing #460
+      };
+
+      reader.readAsDataURL(blob);
+    } else {
+      var URL = _global.URL || _global.webkitURL;
+      var url = URL.createObjectURL(blob);
+      if (popup) popup.location = url;else location.href = url;
+      popup = null; // reverse-tabnabbing #460
+
+      setTimeout(function () {
+        URL.revokeObjectURL(url);
+      }, 4E4); // 40s
+    }
+  };
+  _global.saveAs = saveAs.saveAs = saveAs;
+
+  if (typeof module !== 'undefined') {
+    module.exports = 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 v7.0.1 (2018-12-19)
+
+ (c) 2009-2018 Torstein Honsi
+
+ License: www.highcharts.com/license
+*/
+(function(O,J){"object"===typeof module&&module.exports?module.exports=O.document?J(O):J:"function"===typeof define&&define.amd?define(function(){return J(O)}):O.Highcharts=J(O)})("undefined"!==typeof window?window:this,function(O){var J=function(){var a="undefined"===typeof O?window:O,y=a.document,G=a.navigator&&a.navigator.userAgent||"",E=y&&y.createElementNS&&!!y.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,h=/(edge|msie|trident)/i.test(G)&&!a.opera,c=-1!==G.indexOf("Firefox"),
+r=-1!==G.indexOf("Chrome"),u=c&&4>parseInt(G.split("Firefox/")[1],10);return a.Highcharts?a.Highcharts.error(16,!0):{product:"Highcharts",version:"7.0.1",deg2rad:2*Math.PI/360,doc:y,hasBidiBug:u,hasTouch:y&&void 0!==y.documentElement.ontouchstart,isMS:h,isWebKit:-1!==G.indexOf("AppleWebKit"),isFirefox:c,isChrome:r,isSafari:!r&&-1!==G.indexOf("Safari"),isTouchDevice:/(Mobile|Android|Windows Phone)/.test(G),SVG_NS:"http://www.w3.org/2000/svg",chartCount:0,seriesTypes:{},symbolSizes:{},svg:E,win:a,marginNames:["plotTop",
+"marginRight","marginBottom","plotLeft"],noop:function(){},charts:[]}}();(function(a){a.timers=[];var y=a.charts,G=a.doc,E=a.win;a.error=function(h,c,r){var u=a.isNumber(h)?"Highcharts error #"+h+": www.highcharts.com/errors/"+h:h;r&&a.fireEvent(r,"displayError",{code:h});if(c)throw Error(u);E.console&&console.log(u)};a.Fx=function(a,c,r){this.options=c;this.elem=a;this.prop=r};a.Fx.prototype={dSetter:function(){var a=this.paths[0],c=this.paths[1],r=[],u=this.now,v=a.length,w;if(1===u)r=this.toD;
+else if(v===c.length&&1>u)for(;v--;)w=parseFloat(a[v]),r[v]=isNaN(w)?c[v]:u*parseFloat(c[v]-w)+w;else r=c;this.elem.attr("d",r,null,!0)},update:function(){var a=this.elem,c=this.prop,r=this.now,u=this.options.step;if(this[c+"Setter"])this[c+"Setter"]();else a.attr?a.element&&a.attr(c,r,null,!0):a.style[c]=r+this.unit;u&&u.call(a,r,this)},run:function(h,c,r){var u=this,v=u.options,w=function(a){return w.stopped?!1:u.step(a)},n=E.requestAnimationFrame||function(a){setTimeout(a,13)},g=function(){for(var d=
+0;d<a.timers.length;d++)a.timers[d]()||a.timers.splice(d--,1);a.timers.length&&n(g)};h!==c||this.elem["forceAnimate:"+this.prop]?(this.startTime=+new Date,this.start=h,this.end=c,this.unit=r,this.now=this.start,this.pos=0,w.elem=this.elem,w.prop=this.prop,w()&&1===a.timers.push(w)&&n(g)):(delete v.curAnim[this.prop],v.complete&&0===Object.keys(v.curAnim).length&&v.complete.call(this.elem))},step:function(h){var c=+new Date,r,u=this.options,v=this.elem,w=u.complete,n=u.duration,g=u.curAnim;v.attr&&
+!v.element?h=!1:h||c>=n+this.startTime?(this.now=this.end,this.pos=1,this.update(),r=g[this.prop]=!0,a.objectEach(g,function(a){!0!==a&&(r=!1)}),r&&w&&w.call(v),h=!1):(this.pos=u.easing((c-this.startTime)/n),this.now=this.start+(this.end-this.start)*this.pos,this.update(),h=!0);return h},initPath:function(h,c,r){function u(a){var b,k;for(f=a.length;f--;)b="M"===a[f]||"L"===a[f],k=/[a-zA-Z]/.test(a[f+3]),b&&k&&a.splice(f+1,0,a[f+1],a[f+2],a[f+1],a[f+2])}function v(a,l){for(;a.length<b;){a[0]=l[b-a.length];
+var k=a.slice(0,p);[].splice.apply(a,[0,0].concat(k));x&&(k=a.slice(a.length-p),[].splice.apply(a,[a.length,0].concat(k)),f--)}a[0]="M"}function w(a,f){for(var k=(b-a.length)/p;0<k&&k--;)l=a.slice().splice(a.length/t-p,p*t),l[0]=f[b-p-k*p],m&&(l[p-6]=l[p-2],l[p-5]=l[p-1]),[].splice.apply(a,[a.length/t,0].concat(l)),x&&k--}c=c||"";var n,g=h.startX,d=h.endX,m=-1<c.indexOf("C"),p=m?7:3,b,l,f;c=c.split(" ");r=r.slice();var x=h.isArea,t=x?2:1,H;m&&(u(c),u(r));if(g&&d){for(f=0;f<g.length;f++)if(g[f]===
+d[0]){n=f;break}else if(g[0]===d[d.length-g.length+f]){n=f;H=!0;break}void 0===n&&(c=[])}c.length&&a.isNumber(n)&&(b=r.length+n*t*p,H?(v(c,r),w(r,c)):(v(r,c),w(c,r)));return[c,r]},fillSetter:function(){a.Fx.prototype.strokeSetter.apply(this,arguments)},strokeSetter:function(){this.elem.attr(this.prop,a.color(this.start).tweenTo(a.color(this.end),this.pos),null,!0)}};a.merge=function(){var h,c=arguments,r,u={},v=function(c,n){"object"!==typeof c&&(c={});a.objectEach(n,function(g,d){!a.isObject(g,!0)||
+a.isClass(g)||a.isDOMElement(g)?c[d]=n[d]:c[d]=v(c[d]||{},g)});return c};!0===c[0]&&(u=c[1],c=Array.prototype.slice.call(c,2));r=c.length;for(h=0;h<r;h++)u=v(u,c[h]);return u};a.pInt=function(a,c){return parseInt(a,c||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(h,c){return!!h&&"object"===typeof h&&(!c||!a.isArray(h))};a.isDOMElement=function(h){return a.isObject(h)&&
+"number"===typeof h.nodeType};a.isClass=function(h){var c=h&&h.constructor;return!(!a.isObject(h,!0)||a.isDOMElement(h)||!c||!c.name||"Object"===c.name)};a.isNumber=function(a){return"number"===typeof a&&!isNaN(a)&&Infinity>a&&-Infinity<a};a.erase=function(a,c){for(var h=a.length;h--;)if(a[h]===c){a.splice(h,1);break}};a.defined=function(a){return void 0!==a&&null!==a};a.attr=function(h,c,r){var u;a.isString(c)?a.defined(r)?h.setAttribute(c,r):h&&h.getAttribute&&((u=h.getAttribute(c))||"class"!==
+c||(u=h.getAttribute(c+"Name"))):a.defined(c)&&a.isObject(c)&&a.objectEach(c,function(a,c){h.setAttribute(c,a)});return u};a.splat=function(h){return a.isArray(h)?h:[h]};a.syncTimeout=function(a,c,r){if(c)return setTimeout(a,c,r);a.call(0,r)};a.clearTimeout=function(h){a.defined(h)&&clearTimeout(h)};a.extend=function(a,c){var h;a||(a={});for(h in c)a[h]=c[h];return a};a.pick=function(){var a=arguments,c,r,u=a.length;for(c=0;c<u;c++)if(r=a[c],void 0!==r&&null!==r)return r};a.css=function(h,c){a.isMS&&
+!a.svg&&c&&void 0!==c.opacity&&(c.filter="alpha(opacity\x3d"+100*c.opacity+")");a.extend(h.style,c)};a.createElement=function(h,c,r,u,v){h=G.createElement(h);var w=a.css;c&&a.extend(h,c);v&&w(h,{padding:0,border:"none",margin:0});r&&w(h,r);u&&u.appendChild(h);return h};a.extendClass=function(h,c){var r=function(){};r.prototype=new h;a.extend(r.prototype,c);return r};a.pad=function(a,c,r){return Array((c||2)+1-String(a).replace("-","").length).join(r||0)+a};a.relativeLength=function(a,c,r){return/%$/.test(a)?
+c*parseFloat(a)/100+(r||0):parseFloat(a)};a.wrap=function(a,c,r){var h=a[c];a[c]=function(){var a=Array.prototype.slice.call(arguments),c=arguments,n=this;n.proceed=function(){h.apply(n,arguments.length?arguments:c)};a.unshift(h);a=r.apply(this,a);n.proceed=null;return a}};a.datePropsToTimestamps=function(h){a.objectEach(h,function(c,r){a.isObject(c)&&"function"===typeof c.getTime?h[r]=c.getTime():(a.isObject(c)||a.isArray(c))&&a.datePropsToTimestamps(c)})};a.formatSingle=function(h,c,r){var u=/\.([0-9])/,
+v=a.defaultOptions.lang;/f$/.test(h)?(r=(r=h.match(u))?r[1]:-1,null!==c&&(c=a.numberFormat(c,r,v.decimalPoint,-1<h.indexOf(",")?v.thousandsSep:""))):c=(r||a.time).dateFormat(h,c);return c};a.format=function(h,c,r){for(var u="{",v=!1,w,n,g,d,m=[],p;h;){u=h.indexOf(u);if(-1===u)break;w=h.slice(0,u);if(v){w=w.split(":");n=w.shift().split(".");d=n.length;p=c;for(g=0;g<d;g++)p&&(p=p[n[g]]);w.length&&(p=a.formatSingle(w.join(":"),p,r));m.push(p)}else m.push(w);h=h.slice(u+1);u=(v=!v)?"}":"{"}m.push(h);
+return m.join("")};a.getMagnitude=function(a){return Math.pow(10,Math.floor(Math.log(a)/Math.LN10))};a.normalizeTickInterval=function(h,c,r,u,v){var w,n=h;r=a.pick(r,1);w=h/r;c||(c=v?[1,1.2,1.5,2,2.5,3,4,5,6,8,10]:[1,2,2.5,5,10],!1===u&&(1===r?c=c.filter(function(a){return 0===a%1}):.1>=r&&(c=[1/r])));for(u=0;u<c.length&&!(n=c[u],v&&n*r>=h||!v&&w<=(c[u]+(c[u+1]||c[u]))/2);u++);return n=a.correctFloat(n*r,-Math.round(Math.log(.001)/Math.LN10))};a.stableSort=function(a,c){var h=a.length,u,v;for(v=0;v<
+h;v++)a[v].safeI=v;a.sort(function(a,n){u=c(a,n);return 0===u?a.safeI-n.safeI:u});for(v=0;v<h;v++)delete a[v].safeI};a.arrayMin=function(a){for(var c=a.length,h=a[0];c--;)a[c]<h&&(h=a[c]);return h};a.arrayMax=function(a){for(var c=a.length,h=a[0];c--;)a[c]>h&&(h=a[c]);return h};a.destroyObjectProperties=function(h,c){a.objectEach(h,function(a,u){a&&a!==c&&a.destroy&&a.destroy();delete h[u]})};a.discardElement=function(h){var c=a.garbageBin;c||(c=a.createElement("div"));h&&c.appendChild(h);c.innerHTML=
+""};a.correctFloat=function(a,c){return parseFloat(a.toPrecision(c||14))};a.setAnimation=function(h,c){c.renderer.globalAnimation=a.pick(h,c.options.chart.animation,!0)};a.animObject=function(h){return a.isObject(h)?a.merge(h):{duration:h?500:0}};a.timeUnits={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};a.numberFormat=function(h,c,r,u){h=+h||0;c=+c;var v=a.defaultOptions.lang,w=(h.toString().split(".")[1]||"").split("e")[0].length,n,g,d=h.toString().split("e");
+-1===c?c=Math.min(w,20):a.isNumber(c)?c&&d[1]&&0>d[1]&&(n=c+ +d[1],0<=n?(d[0]=(+d[0]).toExponential(n).split("e")[0],c=n):(d[0]=d[0].split(".")[0]||0,h=20>c?(d[0]*Math.pow(10,d[1])).toFixed(c):0,d[1]=0)):c=2;g=(Math.abs(d[1]?d[0]:h)+Math.pow(10,-Math.max(c,w)-1)).toFixed(c);w=String(a.pInt(g));n=3<w.length?w.length%3:0;r=a.pick(r,v.decimalPoint);u=a.pick(u,v.thousandsSep);h=(0>h?"-":"")+(n?w.substr(0,n)+u:"");h+=w.substr(n).replace(/(\d{3})(?=\d)/g,"$1"+u);c&&(h+=r+g.slice(-c));d[1]&&0!==+h&&(h+=
+"e"+d[1]);return h};Math.easeInOutSine=function(a){return-.5*(Math.cos(Math.PI*a)-1)};a.getStyle=function(h,c,r){if("width"===c)return Math.max(0,Math.min(h.offsetWidth,h.scrollWidth,h.getBoundingClientRect?Math.floor(h.getBoundingClientRect().width):Infinity)-a.getStyle(h,"padding-left")-a.getStyle(h,"padding-right"));if("height"===c)return Math.max(0,Math.min(h.offsetHeight,h.scrollHeight)-a.getStyle(h,"padding-top")-a.getStyle(h,"padding-bottom"));E.getComputedStyle||a.error(27,!0);if(h=E.getComputedStyle(h,
+void 0))h=h.getPropertyValue(c),a.pick(r,"opacity"!==c)&&(h=a.pInt(h));return h};a.inArray=function(a,c,r){return c.indexOf(a,r)};a.find=Array.prototype.find?function(a,c){return a.find(c)}:function(a,c){var h,u=a.length;for(h=0;h<u;h++)if(c(a[h],h))return a[h]};a.keys=Object.keys;a.offset=function(a){var c=G.documentElement;a=a.parentElement||a.parentNode?a.getBoundingClientRect():{top:0,left:0};return{top:a.top+(E.pageYOffset||c.scrollTop)-(c.clientTop||0),left:a.left+(E.pageXOffset||c.scrollLeft)-
+(c.clientLeft||0)}};a.stop=function(h,c){for(var r=a.timers.length;r--;)a.timers[r].elem!==h||c&&c!==a.timers[r].prop||(a.timers[r].stopped=!0)};a.objectEach=function(a,c,r){for(var h in a)a.hasOwnProperty(h)&&c.call(r||a[h],a[h],h,a)};a.objectEach({map:"map",each:"forEach",grep:"filter",reduce:"reduce",some:"some"},function(h,c){a[c]=function(a){return Array.prototype[h].apply(a,[].slice.call(arguments,1))}});a.addEvent=function(h,c,r,u){var v,w=h.addEventListener||a.addEventListenerPolyfill;v="function"===
+typeof h&&h.prototype?h.prototype.protoEvents=h.prototype.protoEvents||{}:h.hcEvents=h.hcEvents||{};a.Point&&h instanceof a.Point&&h.series&&h.series.chart&&(h.series.chart.runTrackerClick=!0);w&&w.call(h,c,r,!1);v[c]||(v[c]=[]);v[c].push(r);u&&a.isNumber(u.order)&&(r.order=u.order,v[c].sort(function(a,g){return a.order-g.order}));return function(){a.removeEvent(h,c,r)}};a.removeEvent=function(h,c,r){function u(g,d){var m=h.removeEventListener||a.removeEventListenerPolyfill;m&&m.call(h,g,d,!1)}function v(g){var d,
+m;h.nodeName&&(c?(d={},d[c]=!0):d=g,a.objectEach(d,function(a,b){if(g[b])for(m=g[b].length;m--;)u(b,g[b][m])}))}var w,n;["protoEvents","hcEvents"].forEach(function(a){var d=h[a];d&&(c?(w=d[c]||[],r?(n=w.indexOf(r),-1<n&&(w.splice(n,1),d[c]=w),u(c,r)):(v(d),d[c]=[])):(v(d),h[a]={}))})};a.fireEvent=function(h,c,r,u){var v,w,n,g,d;r=r||{};G.createEvent&&(h.dispatchEvent||h.fireEvent)?(v=G.createEvent("Events"),v.initEvent(c,!0,!0),a.extend(v,r),h.dispatchEvent?h.dispatchEvent(v):h.fireEvent(c,v)):["protoEvents",
+"hcEvents"].forEach(function(m){if(h[m])for(w=h[m][c]||[],n=w.length,r.target||a.extend(r,{preventDefault:function(){r.defaultPrevented=!0},target:h,type:c}),g=0;g<n;g++)(d=w[g])&&!1===d.call(h,r)&&r.preventDefault()});u&&!r.defaultPrevented&&u.call(h,r)};a.animate=function(h,c,r){var u,v="",w,n,g;a.isObject(r)||(g=arguments,r={duration:g[2],easing:g[3],complete:g[4]});a.isNumber(r.duration)||(r.duration=400);r.easing="function"===typeof r.easing?r.easing:Math[r.easing]||Math.easeInOutSine;r.curAnim=
+a.merge(c);a.objectEach(c,function(d,g){a.stop(h,g);n=new a.Fx(h,r,g);w=null;"d"===g?(n.paths=n.initPath(h,h.d,c.d),n.toD=c.d,u=0,w=1):h.attr?u=h.attr(g):(u=parseFloat(a.getStyle(h,g))||0,"opacity"!==g&&(v="px"));w||(w=d);w&&w.match&&w.match("px")&&(w=w.replace(/px/g,""));n.run(u,w,v)})};a.seriesType=function(h,c,r,u,v){var w=a.getOptions(),n=a.seriesTypes;w.plotOptions[h]=a.merge(w.plotOptions[c],r);n[h]=a.extendClass(n[c]||function(){},u);n[h].prototype.type=h;v&&(n[h].prototype.pointClass=a.extendClass(a.Point,
+v));return n[h]};a.uniqueKey=function(){var a=Math.random().toString(36).substring(2,9),c=0;return function(){return"highcharts-"+a+"-"+c++}}();a.isFunction=function(a){return"function"===typeof a};E.jQuery&&(E.jQuery.fn.highcharts=function(){var h=[].slice.call(arguments);if(this[0])return h[0]?(new (a[a.isString(h[0])?h.shift():"Chart"])(this[0],h[0],h[1]),this):y[a.attr(this[0],"data-highcharts-chart")]})})(J);(function(a){var y=a.isNumber,G=a.merge,E=a.pInt;a.Color=function(h){if(!(this instanceof
+a.Color))return new a.Color(h);this.init(h)};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[E(a[1]),E(a[2]),E(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[E(a[1]),E(a[2]),E(a[3]),1]}}],names:{white:"#ffffff",black:"#000000"},init:function(h){var c,r,u,v;if((this.input=h=this.names[h&&h.toLowerCase?h.toLowerCase():
+""]||h)&&h.stops)this.stops=h.stops.map(function(c){return new a.Color(c[1])});else if(h&&h.charAt&&"#"===h.charAt()&&(c=h.length,h=parseInt(h.substr(1),16),7===c?r=[(h&16711680)>>16,(h&65280)>>8,h&255,1]:4===c&&(r=[(h&3840)>>4|(h&3840)>>8,(h&240)>>4|h&240,(h&15)<<4|h&15,1])),!r)for(u=this.parsers.length;u--&&!r;)v=this.parsers[u],(c=v.regex.exec(h))&&(r=v.parse(c));this.rgba=r||[]},get:function(a){var c=this.input,h=this.rgba,u;this.stops?(u=G(c),u.stops=[].concat(u.stops),this.stops.forEach(function(c,
+h){u.stops[h]=[u.stops[h][0],c.get(a)]})):u=h&&y(h[0])?"rgb"===a||!a&&1===h[3]?"rgb("+h[0]+","+h[1]+","+h[2]+")":"a"===a?h[3]:"rgba("+h.join(",")+")":c;return u},brighten:function(a){var c,h=this.rgba;if(this.stops)this.stops.forEach(function(c){c.brighten(a)});else if(y(a)&&0!==a)for(c=0;3>c;c++)h[c]+=E(255*a),0>h[c]&&(h[c]=0),255<h[c]&&(h[c]=255);return this},setOpacity:function(a){this.rgba[3]=a;return this},tweenTo:function(a,c){var h=this.rgba,u=a.rgba;u.length&&h&&h.length?(a=1!==u[3]||1!==
+h[3],c=(a?"rgba(":"rgb(")+Math.round(u[0]+(h[0]-u[0])*(1-c))+","+Math.round(u[1]+(h[1]-u[1])*(1-c))+","+Math.round(u[2]+(h[2]-u[2])*(1-c))+(a?","+(u[3]+(h[3]-u[3])*(1-c)):"")+")"):c=a.input||"none";return c}};a.color=function(h){return new a.Color(h)}})(J);(function(a){var y,G,E=a.addEvent,h=a.animate,c=a.attr,r=a.charts,u=a.color,v=a.css,w=a.createElement,n=a.defined,g=a.deg2rad,d=a.destroyObjectProperties,m=a.doc,p=a.extend,b=a.erase,l=a.hasTouch,f=a.isArray,x=a.isFirefox,t=a.isMS,H=a.isObject,
+F=a.isString,z=a.isWebKit,k=a.merge,A=a.noop,D=a.objectEach,B=a.pick,e=a.pInt,q=a.removeEvent,L=a.splat,I=a.stop,R=a.svg,K=a.SVG_NS,M=a.symbolSizes,S=a.win;y=a.SVGElement=function(){return this};p(y.prototype,{opacity:1,SVG_NS:K,textProps:"direction fontSize fontWeight fontFamily fontStyle color lineHeight width textAlign textDecoration textOverflow textOutline cursor".split(" "),init:function(a,e){this.element="span"===e?w(e):m.createElementNS(this.SVG_NS,e);this.renderer=a},animate:function(e,q,
+b){q=a.animObject(B(q,this.renderer.globalAnimation,!0));0!==q.duration?(b&&(q.complete=b),h(this,e,q)):(this.attr(e,null,b),q.step&&q.step.call(this));return this},complexColor:function(e,q,b){var C=this.renderer,l,d,p,g,A,K,m,N,x,c,t,I=[],L;a.fireEvent(this.renderer,"complexColor",{args:arguments},function(){e.radialGradient?d="radialGradient":e.linearGradient&&(d="linearGradient");d&&(p=e[d],A=C.gradients,m=e.stops,c=b.radialReference,f(p)&&(e[d]=p={x1:p[0],y1:p[1],x2:p[2],y2:p[3],gradientUnits:"userSpaceOnUse"}),
+"radialGradient"===d&&c&&!n(p.gradientUnits)&&(g=p,p=k(p,C.getRadialAttr(c,g),{gradientUnits:"userSpaceOnUse"})),D(p,function(a,e){"id"!==e&&I.push(e,a)}),D(m,function(a){I.push(a)}),I=I.join(","),A[I]?t=A[I].attr("id"):(p.id=t=a.uniqueKey(),A[I]=K=C.createElement(d).attr(p).add(C.defs),K.radAttr=g,K.stops=[],m.forEach(function(e){0===e[1].indexOf("rgba")?(l=a.color(e[1]),N=l.get("rgb"),x=l.get("a")):(N=e[1],x=1);e=C.createElement("stop").attr({offset:e[0],"stop-color":N,"stop-opacity":x}).add(K);
+K.stops.push(e)})),L="url("+C.url+"#"+t+")",b.setAttribute(q,L),b.gradient=I,e.toString=function(){return L})})},applyTextOutline:function(e){var C=this.element,q,f,k,l,d;-1!==e.indexOf("contrast")&&(e=e.replace(/contrast/g,this.renderer.getContrast(C.style.fill)));e=e.split(" ");f=e[e.length-1];if((k=e[0])&&"none"!==k&&a.svg){this.fakeTS=!0;e=[].slice.call(C.getElementsByTagName("tspan"));this.ySetter=this.xSetter;k=k.replace(/(^[\d\.]+)(.*?)$/g,function(a,e,C){return 2*e+C});for(d=e.length;d--;)q=
+e[d],"highcharts-text-outline"===q.getAttribute("class")&&b(e,C.removeChild(q));l=C.firstChild;e.forEach(function(a,e){0===e&&(a.setAttribute("x",C.getAttribute("x")),e=C.getAttribute("y"),a.setAttribute("y",e||0),null===e&&C.setAttribute("y",0));a=a.cloneNode(1);c(a,{"class":"highcharts-text-outline",fill:f,stroke:f,"stroke-width":k,"stroke-linejoin":"round"});C.insertBefore(a,l)})}},symbolCustomAttribs:"x y width height r start end innerR anchorX anchorY rounded".split(" "),attr:function(e,q,b,
+f){var C,k=this.element,l,d=this,p,g,A=this.symbolCustomAttribs;"string"===typeof e&&void 0!==q&&(C=e,e={},e[C]=q);"string"===typeof e?d=(this[e+"Getter"]||this._defaultGetter).call(this,e,k):(D(e,function(C,q){p=!1;f||I(this,q);this.symbolName&&-1!==a.inArray(q,A)&&(l||(this.symbolAttr(e),l=!0),p=!0);!this.rotation||"x"!==q&&"y"!==q||(this.doTransform=!0);p||(g=this[q+"Setter"]||this._defaultSetter,g.call(this,C,q,k),!this.styledMode&&this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(q)&&
+this.updateShadows(q,C,g))},this),this.afterSetters());b&&b.call(this);return d},afterSetters:function(){this.doTransform&&(this.updateTransform(),this.doTransform=!1)},updateShadows:function(a,e,q){for(var C=this.shadows,b=C.length;b--;)q.call(C[b],"height"===a?Math.max(e-(C[b].cutHeight||0),0):"d"===a?this.d:e,a,C[b])},addClass:function(a,e){var C=this.attr("class")||"";-1===C.indexOf(a)&&(e||(a=(C+(C?" ":"")+a).replace("  "," ")),this.attr("class",a));return this},hasClass:function(a){return-1!==
+(this.attr("class")||"").split(" ").indexOf(a)},removeClass:function(a){return this.attr("class",(this.attr("class")||"").replace(a,""))},symbolAttr:function(a){var e=this;"x y r start end width height innerR anchorX anchorY".split(" ").forEach(function(C){e[C]=B(a[C],e[C])});e.attr({d:e.renderer.symbols[e.symbolName](e.x,e.y,e.width,e.height,e)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":"none")},crisp:function(a,e){var C;e=e||a.strokeWidth||0;C=Math.round(e)%
+2/2;a.x=Math.floor(a.x||this.x||0)+C;a.y=Math.floor(a.y||this.y||0)+C;a.width=Math.floor((a.width||this.width||0)-2*C);a.height=Math.floor((a.height||this.height||0)-2*C);n(a.strokeWidth)&&(a.strokeWidth=e);return a},css:function(a){var C=this.styles,q={},b=this.element,k,f="",l,d=!C,g=["textOutline","textOverflow","width"];a&&a.color&&(a.fill=a.color);C&&D(a,function(a,e){a!==C[e]&&(q[e]=a,d=!0)});d&&(C&&(a=p(C,q)),a&&(null===a.width||"auto"===a.width?delete this.textWidth:"text"===b.nodeName.toLowerCase()&&
+a.width&&(k=this.textWidth=e(a.width))),this.styles=a,k&&!R&&this.renderer.forExport&&delete a.width,b.namespaceURI===this.SVG_NS?(l=function(a,e){return"-"+e.toLowerCase()},D(a,function(a,e){-1===g.indexOf(e)&&(f+=e.replace(/([A-Z])/g,l)+":"+a+";")}),f&&c(b,"style",f)):v(b,a),this.added&&("text"===this.element.nodeName&&this.renderer.buildText(this),a&&a.textOutline&&this.applyTextOutline(a.textOutline)));return this},getStyle:function(a){return S.getComputedStyle(this.element||this,"").getPropertyValue(a)},
+strokeWidth:function(){if(!this.renderer.styledMode)return this["stroke-width"]||0;var a=this.getStyle("stroke-width"),q;a.indexOf("px")===a.length-2?a=e(a):(q=m.createElementNS(K,"rect"),c(q,{width:a,"stroke-width":0}),this.element.parentNode.appendChild(q),a=q.getBBox().width,q.parentNode.removeChild(q));return a},on:function(a,e){var q=this,C=q.element;l&&"click"===a?(C.ontouchstart=function(a){q.touchEventFired=Date.now();a.preventDefault();e.call(C,a)},C.onclick=function(a){(-1===S.navigator.userAgent.indexOf("Android")||
+1100<Date.now()-(q.touchEventFired||0))&&e.call(C,a)}):C["on"+a]=e;return this},setRadialReference:function(a){var e=this.renderer.gradients[this.element.gradient];this.element.radialReference=a;e&&e.radAttr&&e.animate(this.renderer.getRadialAttr(a,e.radAttr));return this},translate:function(a,e){return this.attr({translateX:a,translateY:e})},invert:function(a){this.inverted=a;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,e=this.translateY||0,q=this.scaleX,
+b=this.scaleY,f=this.inverted,k=this.rotation,l=this.matrix,d=this.element;f&&(a+=this.width,e+=this.height);a=["translate("+a+","+e+")"];n(l)&&a.push("matrix("+l.join(",")+")");f?a.push("rotate(90) scale(-1,1)"):k&&a.push("rotate("+k+" "+B(this.rotationOriginX,d.getAttribute("x"),0)+" "+B(this.rotationOriginY,d.getAttribute("y")||0)+")");(n(q)||n(b))&&a.push("scale("+B(q,1)+" "+B(b,1)+")");a.length&&d.setAttribute("transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);
+return this},align:function(a,e,q){var C,f,k,l,d={};f=this.renderer;k=f.alignedObjects;var p,g;if(a){if(this.alignOptions=a,this.alignByTranslate=e,!q||F(q))this.alignTo=C=q||"renderer",b(k,this),k.push(this),q=null}else a=this.alignOptions,e=this.alignByTranslate,C=this.alignTo;q=B(q,f[C],f);C=a.align;f=a.verticalAlign;k=(q.x||0)+(a.x||0);l=(q.y||0)+(a.y||0);"right"===C?p=1:"center"===C&&(p=2);p&&(k+=(q.width-(a.width||0))/p);d[e?"translateX":"x"]=Math.round(k);"bottom"===f?g=1:"middle"===f&&(g=
+2);g&&(l+=(q.height-(a.height||0))/g);d[e?"translateY":"y"]=Math.round(l);this[this.placed?"animate":"attr"](d);this.placed=!0;this.alignAttr=d;return this},getBBox:function(a,e){var q,C=this.renderer,b,f=this.element,k=this.styles,l,d=this.textStr,A,K=C.cache,m=C.cacheKeys,x=f.namespaceURI===this.SVG_NS,c;e=B(e,this.rotation);b=e*g;l=C.styledMode?f&&y.prototype.getStyle.call(f,"font-size"):k&&k.fontSize;n(d)&&(c=d.toString(),-1===c.indexOf("\x3c")&&(c=c.replace(/[0-9]/g,"0")),c+=["",e||0,l,this.textWidth,
+k&&k.textOverflow].join());c&&!a&&(q=K[c]);if(!q){if(x||C.forExport){try{(A=this.fakeTS&&function(a){[].forEach.call(f.querySelectorAll(".highcharts-text-outline"),function(e){e.style.display=a})})&&A("none"),q=f.getBBox?p({},f.getBBox()):{width:f.offsetWidth,height:f.offsetHeight},A&&A("")}catch(W){}if(!q||0>q.width)q={width:0,height:0}}else q=this.htmlGetBBox();C.isSVG&&(a=q.width,C=q.height,x&&(q.height=C={"11px,17":14,"13px,20":16}[k&&k.fontSize+","+Math.round(C)]||C),e&&(q.width=Math.abs(C*Math.sin(b))+
+Math.abs(a*Math.cos(b)),q.height=Math.abs(C*Math.cos(b))+Math.abs(a*Math.sin(b))));if(c&&0<q.height){for(;250<m.length;)delete K[m.shift()];K[c]||m.push(c);K[c]=q}}return q},show:function(a){return this.attr({visibility:a?"inherit":"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var e=this;e.animate({opacity:0},{duration:a||150,complete:function(){e.attr({y:-9999})}})},add:function(a){var e=this.renderer,q=this.element,C;a&&(this.parentGroup=a);this.parentInverted=
+a&&a.inverted;void 0!==this.textStr&&e.buildText(this);this.added=!0;if(!a||a.handleZ||this.zIndex)C=this.zIndexSetter();C||(a?a.element:e.box).appendChild(q);if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var e=a.parentNode;e&&e.removeChild(a)},destroy:function(){var a=this,e=a.element||{},q=a.renderer,f=q.isSVG&&"SPAN"===e.nodeName&&a.parentGroup,k=e.ownerSVGElement,l=a.clipPath;e.onclick=e.onmouseout=e.onmouseover=e.onmousemove=e.point=null;I(a);l&&k&&([].forEach.call(k.querySelectorAll("[clip-path],[CLIP-PATH]"),
+function(a){var e=a.getAttribute("clip-path"),q=l.element.id;(-1<e.indexOf("(#"+q+")")||-1<e.indexOf('("#'+q+'")'))&&a.removeAttribute("clip-path")}),a.clipPath=l.destroy());if(a.stops){for(k=0;k<a.stops.length;k++)a.stops[k]=a.stops[k].destroy();a.stops=null}a.safeRemoveChild(e);for(q.styledMode||a.destroyShadows();f&&f.div&&0===f.div.childNodes.length;)e=f.parentGroup,a.safeRemoveChild(f.div),delete f.div,f=e;a.alignTo&&b(q.alignedObjects,a);D(a,function(e,q){delete a[q]});return null},shadow:function(a,
+e,q){var b=[],f,C,k=this.element,l,d,p,g;if(!a)this.destroyShadows();else if(!this.shadows){d=B(a.width,3);p=(a.opacity||.15)/d;g=this.parentInverted?"(-1,-1)":"("+B(a.offsetX,1)+", "+B(a.offsetY,1)+")";for(f=1;f<=d;f++)C=k.cloneNode(0),l=2*d+1-2*f,c(C,{stroke:a.color||"#000000","stroke-opacity":p*f,"stroke-width":l,transform:"translate"+g,fill:"none"}),C.setAttribute("class",(C.getAttribute("class")||"")+" highcharts-shadow"),q&&(c(C,"height",Math.max(c(C,"height")-l,0)),C.cutHeight=l),e?e.element.appendChild(C):
+k.parentNode&&k.parentNode.insertBefore(C,k),b.push(C);this.shadows=b}return this},destroyShadows:function(){(this.shadows||[]).forEach(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=B(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,e,q){a&&
+a.join&&(a=a.join(" "));/(NaN| {2}|^$)/.test(a)&&(a="M 0 0");this[e]!==a&&(q.setAttribute(e,a),this[e]=a)},dashstyleSetter:function(a){var q,f=this["stroke-width"];"inherit"===f&&(f=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(q=a.length;q--;)a[q]=e(a[q])*f;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,e,q){this[e]=a;q.setAttribute(e,a)},titleSetter:function(a){var e=this.element.getElementsByTagName("title")[0];e||(e=m.createElementNS(this.SVG_NS,"title"),this.element.appendChild(e));e.firstChild&&e.removeChild(e.firstChild);e.appendChild(m.createTextNode(String(B(a),"").replace(/<[^>]*>/g,
+"").replace(/&lt;/g,"\x3c").replace(/&gt;/g,"\x3e")))},textSetter:function(a){a!==this.textStr&&(delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this))},fillSetter:function(a,e,q){"string"===typeof a?q.setAttribute(e,a):a&&this.complexColor(a,e,q)},visibilitySetter:function(a,e,q){"inherit"===a?q.removeAttribute(e):this[e]!==a&&q.setAttribute(e,a);this[e]=a},zIndexSetter:function(a,q){var f=this.renderer,b=this.parentGroup,k=(b||f).element||f.box,l,d=this.element,C,p,f=k===f.box;
+l=this.added;var g;n(a)?(d.setAttribute("data-z-index",a),a=+a,this[q]===a&&(l=!1)):n(this[q])&&d.removeAttribute("data-z-index");this[q]=a;if(l){(a=this.zIndex)&&b&&(b.handleZ=!0);q=k.childNodes;for(g=q.length-1;0<=g&&!C;g--)if(b=q[g],l=b.getAttribute("data-z-index"),p=!n(l),b!==d)if(0>a&&p&&!f&&!g)k.insertBefore(d,q[g]),C=!0;else if(e(l)<=a||p&&(!n(a)||0<=a))k.insertBefore(d,q[g+1]||null),C=!0;C||(k.insertBefore(d,q[f?3:0]||null),C=!0)}return C},_defaultSetter:function(a,e,q){q.setAttribute(e,a)}});
+y.prototype.yGetter=y.prototype.xGetter;y.prototype.translateXSetter=y.prototype.translateYSetter=y.prototype.rotationSetter=y.prototype.verticalAlignSetter=y.prototype.rotationOriginXSetter=y.prototype.rotationOriginYSetter=y.prototype.scaleXSetter=y.prototype.scaleYSetter=y.prototype.matrixSetter=function(a,e){this[e]=a;this.doTransform=!0};y.prototype["stroke-widthSetter"]=y.prototype.strokeSetter=function(a,e,q){this[e]=a;this.stroke&&this["stroke-width"]?(y.prototype.fillSetter.call(this,this.stroke,
+"stroke",q),q.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0):"stroke-width"===e&&0===a&&this.hasStroke&&(q.removeAttribute("stroke"),this.hasStroke=!1)};G=a.SVGRenderer=function(){this.init.apply(this,arguments)};p(G.prototype,{Element:y,SVG_NS:K,init:function(a,e,q,f,b,k,l){var d;d=this.createElement("svg").attr({version:"1.1","class":"highcharts-root"});l||d.css(this.getStyle(f));f=d.element;a.appendChild(f);c(a,"dir","ltr");-1===a.innerHTML.indexOf("xmlns")&&c(f,"xmlns",this.SVG_NS);
+this.isSVG=!0;this.box=f;this.boxWrapper=d;this.alignedObjects=[];this.url=(x||z)&&m.getElementsByTagName("base").length?S.location.href.split("#")[0].replace(/<[^>]*>/g,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(m.createTextNode("Created with Highcharts 7.0.1"));this.defs=this.createElement("defs").add();this.allowHTML=k;this.forExport=b;this.styledMode=l;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(e,
+q,!1);var C;x&&a.getBoundingClientRect&&(e=function(){v(a,{left:0,top:0});C=a.getBoundingClientRect();v(a,{left:Math.ceil(C.left)-C.left+"px",top:Math.ceil(C.top)-C.top+"px"})},e(),this.unSubPixelFix=E(S,"resize",e))},definition:function(a){function e(a,f){var b;L(a).forEach(function(a){var k=q.createElement(a.tagName),l={};D(a,function(a,e){"tagName"!==e&&"children"!==e&&"textContent"!==e&&(l[e]=a)});k.attr(l);k.add(f||q.defs);a.textContent&&k.element.appendChild(m.createTextNode(a.textContent));
+e(a.children||[],k);b=k});return b}var q=this;return e(a)},getStyle:function(a){return this.style=p({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();d(this.gradients||{});this.gradients=null;a&&(this.defs=a.destroy());this.unSubPixelFix&&
+this.unSubPixelFix();return this.alignedObjects=null},createElement:function(a){var e=new this.Element;e.init(this,a);return e},draw:A,getRadialAttr:function(a,e){return{cx:a[0]-a[2]/2+e.cx*a[2],cy:a[1]-a[2]/2+e.cy*a[2],r:e.r*a[2]}},truncate:function(a,e,q,f,b,k,l){var d=this,p=a.rotation,C,g=f?1:0,A=(q||f).length,K=A,c=[],x=function(a){e.firstChild&&e.removeChild(e.firstChild);a&&e.appendChild(m.createTextNode(a))},n=function(k,p){p=p||k;if(void 0===c[p])if(e.getSubStringLength)try{c[p]=b+e.getSubStringLength(0,
+f?p+1:p)}catch(X){}else d.getSpanWidth&&(x(l(q||f,k)),c[p]=b+d.getSpanWidth(a,e));return c[p]},t,I;a.rotation=0;t=n(e.textContent.length);if(I=b+t>k){for(;g<=A;)K=Math.ceil((g+A)/2),f&&(C=l(f,K)),t=n(K,C&&C.length-1),g===A?g=A+1:t>k?A=K-1:g=K;0===A?x(""):q&&A===q.length-1||x(C||l(q||f,K))}f&&f.splice(0,K);a.actualWidth=t;a.rotation=p;return I},escapes:{"\x26":"\x26amp;","\x3c":"\x26lt;","\x3e":"\x26gt;","'":"\x26#39;",'"':"\x26quot;"},buildText:function(a){var q=a.element,f=this,k=f.forExport,b=B(a.textStr,
+"").toString(),l=-1!==b.indexOf("\x3c"),d=q.childNodes,p,g=c(q,"x"),C=a.styles,A=a.textWidth,x=C&&C.lineHeight,n=C&&C.textOutline,t=C&&"ellipsis"===C.textOverflow,I=C&&"nowrap"===C.whiteSpace,L=C&&C.fontSize,z,H,h=d.length,C=A&&!a.added&&this.box,F=function(a){var b;f.styledMode||(b=/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:L||f.style.fontSize||12);return x?e(x):f.fontMetrics(b,a.getAttribute("style")?a:q).h},M=function(a,e){D(f.escapes,function(q,f){e&&-1!==e.indexOf(q)||(a=a.toString().replace(new RegExp(q,
+"g"),f))});return a},w=function(a,e){var q;q=a.indexOf("\x3c");a=a.substring(q,a.indexOf("\x3e")-q);q=a.indexOf(e+"\x3d");if(-1!==q&&(q=q+e.length+1,e=a.charAt(q),'"'===e||"'"===e))return a=a.substring(q+1),a.substring(0,a.indexOf(e))};z=[b,t,I,x,n,L,A].join();if(z!==a.textCache){for(a.textCache=z;h--;)q.removeChild(d[h]);l||n||t||A||-1!==b.indexOf(" ")?(C&&C.appendChild(q),l?(b=f.styledMode?b.replace(/<(b|strong)>/g,'\x3cspan class\x3d"highcharts-strong"\x3e').replace(/<(i|em)>/g,'\x3cspan class\x3d"highcharts-emphasized"\x3e'):
+b.replace(/<(b|strong)>/g,'\x3cspan style\x3d"font-weight:bold"\x3e').replace(/<(i|em)>/g,'\x3cspan style\x3d"font-style:italic"\x3e'),b=b.replace(/<a/g,"\x3cspan").replace(/<\/(b|strong|i|em|a)>/g,"\x3c/span\x3e").split(/<br.*?>/g)):b=[b],b=b.filter(function(a){return""!==a}),b.forEach(function(e,b){var l,d=0,C=0;e=e.replace(/^\s+|\s+$/g,"").replace(/<span/g,"|||\x3cspan").replace(/<\/span>/g,"\x3c/span\x3e|||");l=e.split("|||");l.forEach(function(e){if(""!==e||1===l.length){var x={},n=m.createElementNS(f.SVG_NS,
+"tspan"),D,B;(D=w(e,"class"))&&c(n,"class",D);if(D=w(e,"style"))D=D.replace(/(;| |^)color([ :])/,"$1fill$2"),c(n,"style",D);(B=w(e,"href"))&&!k&&(c(n,"onclick",'location.href\x3d"'+B+'"'),c(n,"class","highcharts-anchor"),f.styledMode||v(n,{cursor:"pointer"}));e=M(e.replace(/<[a-zA-Z\/](.|\n)*?>/g,"")||" ");if(" "!==e){n.appendChild(m.createTextNode(e));d?x.dx=0:b&&null!==g&&(x.x=g);c(n,x);q.appendChild(n);!d&&H&&(!R&&k&&v(n,{display:"block"}),c(n,"dy",F(n)));if(A){var z=e.replace(/([^\^])-/g,"$1- ").split(" "),
+x=!I&&(1<l.length||b||1<z.length);B=0;var h=F(n);if(t)p=f.truncate(a,n,e,void 0,0,Math.max(0,A-parseInt(L||12,10)),function(a,e){return a.substring(0,e)+"\u2026"});else if(x)for(;z.length;)z.length&&!I&&0<B&&(n=m.createElementNS(K,"tspan"),c(n,{dy:h,x:g}),D&&c(n,"style",D),n.appendChild(m.createTextNode(z.join(" ").replace(/- /g,"-"))),q.appendChild(n)),f.truncate(a,n,null,z,0===B?C:0,A,function(a,e){return z.slice(0,e).join(" ").replace(/- /g,"-")}),C=a.actualWidth,B++}d++}}});H=H||q.childNodes.length}),
+t&&p&&a.attr("title",M(a.textStr,["\x26lt;","\x26gt;"])),C&&C.removeChild(q),n&&a.applyTextOutline&&a.applyTextOutline(n)):q.appendChild(m.createTextNode(M(b)))}},getContrast:function(a){a=u(a).rgba;a[0]*=1;a[1]*=1.2;a[2]*=.5;return 459<a[0]+a[1]+a[2]?"#000000":"#FFFFFF"},button:function(a,e,q,f,b,l,d,g,A){var C=this.label(a,e,q,A,null,null,null,null,"button"),K=0,n=this.styledMode;C.attr(k({padding:8,r:2},b));if(!n){var m,x,c,I;b=k({fill:"#f7f7f7",stroke:"#cccccc","stroke-width":1,style:{color:"#333333",
+cursor:"pointer",fontWeight:"normal"}},b);m=b.style;delete b.style;l=k(b,{fill:"#e6e6e6"},l);x=l.style;delete l.style;d=k(b,{fill:"#e6ebf5",style:{color:"#000000",fontWeight:"bold"}},d);c=d.style;delete d.style;g=k(b,{style:{color:"#cccccc"}},g);I=g.style;delete g.style}E(C.element,t?"mouseover":"mouseenter",function(){3!==K&&C.setState(1)});E(C.element,t?"mouseout":"mouseleave",function(){3!==K&&C.setState(K)});C.setState=function(a){1!==a&&(C.state=K=a);C.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass("highcharts-button-"+
+["normal","hover","pressed","disabled"][a||0]);n||C.attr([b,l,d,g][a||0]).css([m,x,c,I][a||0])};n||C.attr(b).css(p({cursor:"default"},m));return C.on("click",function(a){3!==K&&f.call(C,a)})},crispLine:function(a,e){a[1]===a[4]&&(a[1]=a[4]=Math.round(a[1])-e%2/2);a[2]===a[5]&&(a[2]=a[5]=Math.round(a[2])+e%2/2);return a},path:function(a){var e=this.styledMode?{}:{fill:"none"};f(a)?e.d=a:H(a)&&p(e,a);return this.createElement("path").attr(e)},circle:function(a,e,q){a=H(a)?a:void 0===a?{}:{x:a,y:e,r:q};
+e=this.createElement("circle");e.xSetter=e.ySetter=function(a,e,q){q.setAttribute("c"+e,a)};return e.attr(a)},arc:function(a,e,q,b,f,k){H(a)?(b=a,e=b.y,q=b.r,a=b.x):b={innerR:b,start:f,end:k};a=this.symbol("arc",a,e,q,q,b);a.r=q;return a},rect:function(a,e,q,b,f,k){f=H(a)?a.r:f;var l=this.createElement("rect");a=H(a)?a:void 0===a?{}:{x:a,y:e,width:Math.max(q,0),height:Math.max(b,0)};this.styledMode||(void 0!==k&&(a.strokeWidth=k,a=l.crisp(a)),a.fill="none");f&&(a.r=f);l.rSetter=function(a,e,q){c(q,
+{rx:a,ry:a})};return l.attr(a)},setSize:function(a,e,q){var b=this.alignedObjects,f=b.length;this.width=a;this.height=e;for(this.boxWrapper.animate({width:a,height:e},{step:function(){this.attr({viewBox:"0 0 "+this.attr("width")+" "+this.attr("height")})},duration:B(q,!0)?void 0:0});f--;)b[f].align()},g:function(a){var e=this.createElement("g");return a?e.attr({"class":"highcharts-"+a}):e},image:function(a,e,q,b,f,k){var l={preserveAspectRatio:"none"},d,g=function(a,e){a.setAttributeNS?a.setAttributeNS("http://www.w3.org/1999/xlink",
+"href",e):a.setAttribute("hc-svg-href",e)},A=function(e){g(d.element,a);k.call(d,e)};1<arguments.length&&p(l,{x:e,y:q,width:b,height:f});d=this.createElement("image").attr(l);k?(g(d.element,"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw\x3d\x3d"),l=new S.Image,E(l,"load",A),l.src=a,l.complete&&A({})):g(d.element,a);return d},symbol:function(a,e,q,b,f,k){var l=this,d,g=/^url\((.*?)\)$/,A=g.test(a),K=!A&&(this.symbols[a]?a:"circle"),C=K&&this.symbols[K],x=n(e)&&C&&C.call(this.symbols,
+Math.round(e),Math.round(q),b,f,k),c,t;C?(d=this.path(x),l.styledMode||d.attr("fill","none"),p(d,{symbolName:K,x:e,y:q,width:b,height:f}),k&&p(d,k)):A&&(c=a.match(g)[1],d=this.image(c),d.imgwidth=B(M[c]&&M[c].width,k&&k.width),d.imgheight=B(M[c]&&M[c].height,k&&k.height),t=function(){d.attr({width:d.width,height:d.height})},["width","height"].forEach(function(a){d[a+"Setter"]=function(a,e){var q={},b=this["img"+e],f="width"===e?"translateX":"translateY";this[e]=a;n(b)&&(this.element&&this.element.setAttribute(e,
+b),this.alignByTranslate||(q[f]=((this[e]||0)-b)/2,this.attr(q)))}}),n(e)&&d.attr({x:e,y:q}),d.isImg=!0,n(d.imgwidth)&&n(d.imgheight)?t():(d.attr({width:0,height:0}),w("img",{onload:function(){var a=r[l.chartIndex];0===this.width&&(v(this,{position:"absolute",top:"-999em"}),m.body.appendChild(this));M[c]={width:this.width,height:this.height};d.imgwidth=this.width;d.imgheight=this.height;d.element&&t();this.parentNode&&this.parentNode.removeChild(this);l.imgCount--;if(!l.imgCount&&a&&a.onload)a.onload()},
+src:c}),this.imgCount++));return d},symbols:{circle:function(a,e,q,b){return this.arc(a+q/2,e+b/2,q/2,b/2,{start:0,end:2*Math.PI,open:!1})},square:function(a,e,q,b){return["M",a,e,"L",a+q,e,a+q,e+b,a,e+b,"Z"]},triangle:function(a,e,q,b){return["M",a+q/2,e,"L",a+q,e+b,a,e+b,"Z"]},"triangle-down":function(a,e,q,b){return["M",a,e,"L",a+q,e,a+q/2,e+b,"Z"]},diamond:function(a,e,q,b){return["M",a+q/2,e,"L",a+q,e+b/2,a+q/2,e+b,a,e+b/2,"Z"]},arc:function(a,e,q,b,f){var k=f.start,d=f.r||q,l=f.r||b||q,p=f.end-
+.001;q=f.innerR;b=B(f.open,.001>Math.abs(f.end-f.start-2*Math.PI));var g=Math.cos(k),A=Math.sin(k),K=Math.cos(p),p=Math.sin(p);f=.001>f.end-k-Math.PI?0:1;d=["M",a+d*g,e+l*A,"A",d,l,0,f,1,a+d*K,e+l*p];n(q)&&d.push(b?"M":"L",a+q*K,e+q*p,"A",q,q,0,f,0,a+q*g,e+q*A);d.push(b?"":"Z");return d},callout:function(a,e,q,b,f){var k=Math.min(f&&f.r||0,q,b),d=k+6,l=f&&f.anchorX;f=f&&f.anchorY;var p;p=["M",a+k,e,"L",a+q-k,e,"C",a+q,e,a+q,e,a+q,e+k,"L",a+q,e+b-k,"C",a+q,e+b,a+q,e+b,a+q-k,e+b,"L",a+k,e+b,"C",a,e+
+b,a,e+b,a,e+b-k,"L",a,e+k,"C",a,e,a,e,a+k,e];l&&l>q?f>e+d&&f<e+b-d?p.splice(13,3,"L",a+q,f-6,a+q+6,f,a+q,f+6,a+q,e+b-k):p.splice(13,3,"L",a+q,b/2,l,f,a+q,b/2,a+q,e+b-k):l&&0>l?f>e+d&&f<e+b-d?p.splice(33,3,"L",a,f+6,a-6,f,a,f-6,a,e+k):p.splice(33,3,"L",a,b/2,l,f,a,b/2,a,e+k):f&&f>b&&l>a+d&&l<a+q-d?p.splice(23,3,"L",l+6,e+b,l,e+b+6,l-6,e+b,a+k,e+b):f&&0>f&&l>a+d&&l<a+q-d&&p.splice(3,3,"L",l-6,e,l,e-6,l+6,e,q-k,e);return p}},clipRect:function(e,q,b,f){var k=a.uniqueKey(),l=this.createElement("clipPath").attr({id:k}).add(this.defs);
+e=this.rect(e,q,b,f,0).add(l);e.id=k;e.clipPath=l;e.count=0;return e},text:function(a,e,q,b){var f={};if(b&&(this.allowHTML||!this.forExport))return this.html(a,e,q);f.x=Math.round(e||0);q&&(f.y=Math.round(q));n(a)&&(f.text=a);a=this.createElement("text").attr(f);b||(a.xSetter=function(a,e,q){var b=q.getElementsByTagName("tspan"),f,k=q.getAttribute(e),l;for(l=0;l<b.length;l++)f=b[l],f.getAttribute(e)===k&&f.setAttribute(e,a);q.setAttribute(e,a)});return a},fontMetrics:function(a,q){a=this.styledMode?
+q&&y.prototype.getStyle.call(q,"font-size"):a||q&&q.style&&q.style.fontSize||this.style&&this.style.fontSize;a=/px/.test(a)?e(a):/em/.test(a)?parseFloat(a)*(q?this.fontMetrics(null,q.parentNode).f:16):12;q=24>a?a+3:Math.round(1.2*a);return{h:q,b:Math.round(.8*q),f:a}},rotCorr:function(a,e,q){var b=a;e&&q&&(b=Math.max(b*Math.cos(e*g),4));return{x:-a/3*Math.sin(e*g),y:b}},label:function(e,b,f,l,d,g,A,K,c){var m=this,x=m.styledMode,t=m.g("button"!==c&&"label"),I=t.text=m.text("",0,0,A).attr({zIndex:1}),
+D,L,C=0,B=3,z=0,H,h,F,M,R,w={},r,u,S=/^url\((.*?)\)$/.test(l),v=x||S,N=function(){return x?D.strokeWidth()%2/2:(r?parseInt(r,10):0)%2/2},P,T,E;c&&t.addClass("highcharts-"+c);P=function(){var a=I.element.style,e={};L=(void 0===H||void 0===h||R)&&n(I.textStr)&&I.getBBox();t.width=(H||L.width||0)+2*B+z;t.height=(h||L.height||0)+2*B;u=B+Math.min(m.fontMetrics(a&&a.fontSize,I).b,L?L.height:Infinity);v&&(D||(t.box=D=m.symbols[l]||S?m.symbol(l):m.rect(),D.addClass(("button"===c?"":"highcharts-label-box")+
+(c?" highcharts-"+c+"-box":"")),D.add(t),a=N(),e.x=a,e.y=(K?-u:0)+a),e.width=Math.round(t.width),e.height=Math.round(t.height),D.attr(p(e,w)),w={})};T=function(){var a=z+B,e;e=K?0:u;n(H)&&L&&("center"===R||"right"===R)&&(a+={center:.5,right:1}[R]*(H-L.width));if(a!==I.x||e!==I.y)I.attr("x",a),I.hasBoxWidthChanged&&(L=I.getBBox(!0),P()),void 0!==e&&I.attr("y",e);I.x=a;I.y=e};E=function(a,e){D?D.attr(a,e):w[a]=e};t.onAdd=function(){I.add(t);t.attr({text:e||0===e?e:"",x:b,y:f});D&&n(d)&&t.attr({anchorX:d,
+anchorY:g})};t.widthSetter=function(e){H=a.isNumber(e)?e:null};t.heightSetter=function(a){h=a};t["text-alignSetter"]=function(a){R=a};t.paddingSetter=function(a){n(a)&&a!==B&&(B=t.padding=a,T())};t.paddingLeftSetter=function(a){n(a)&&a!==z&&(z=a,T())};t.alignSetter=function(a){a={left:0,center:.5,right:1}[a];a!==C&&(C=a,L&&t.attr({x:F}))};t.textSetter=function(a){void 0!==a&&I.textSetter(a);P();T()};t["stroke-widthSetter"]=function(a,e){a&&(v=!0);r=this["stroke-width"]=a;E(e,a)};x?t.rSetter=function(a,
+e){E(e,a)}:t.strokeSetter=t.fillSetter=t.rSetter=function(a,e){"r"!==e&&("fill"===e&&a&&(v=!0),t[e]=a);E(e,a)};t.anchorXSetter=function(a,e){d=t.anchorX=a;E(e,Math.round(a)-N()-F)};t.anchorYSetter=function(a,e){g=t.anchorY=a;E(e,a-M)};t.xSetter=function(a){t.x=a;C&&(a-=C*((H||L.width)+2*B),t["forceAnimate:x"]=!0);F=Math.round(a);t.attr("translateX",F)};t.ySetter=function(a){M=t.y=Math.round(a);t.attr("translateY",M)};var Q=t.css;A={css:function(a){if(a){var e={};a=k(a);t.textProps.forEach(function(q){void 0!==
+a[q]&&(e[q]=a[q],delete a[q])});I.css(e);"width"in e&&P();"fontSize"in e&&(P(),T())}return Q.call(t,a)},getBBox:function(){return{width:L.width+2*B,height:L.height+2*B,x:L.x-B,y:L.y-B}},destroy:function(){q(t.element,"mouseenter");q(t.element,"mouseleave");I&&(I=I.destroy());D&&(D=D.destroy());y.prototype.destroy.call(t);t=m=P=T=E=null}};x||(A.shadow=function(a){a&&(P(),D&&D.shadow(a));return t});return p(t,A)}});a.Renderer=G})(J);(function(a){var y=a.attr,G=a.createElement,E=a.css,h=a.defined,c=
+a.extend,r=a.isFirefox,u=a.isMS,v=a.isWebKit,w=a.pick,n=a.pInt,g=a.SVGRenderer,d=a.win,m=a.wrap;c(a.SVGElement.prototype,{htmlCss:function(a){var b="SPAN"===this.element.tagName&&a&&"width"in a,l=w(b&&a.width,void 0),f;b&&(delete a.width,this.textWidth=l,f=!0);a&&"ellipsis"===a.textOverflow&&(a.whiteSpace="nowrap",a.overflow="hidden");this.styles=c(this.styles,a);E(this.element,a);f&&this.htmlUpdateTransform();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,l=this.translateX||0,f=this.translateY||0,d=this.x||0,g=this.y||0,m=this.textAlign||"left",c={left:0,center:.5,right:1}[m],z=this.styles,k=z&&z.whiteSpace;E(b,{marginLeft:l,marginTop:f});!a.styledMode&&this.shadows&&this.shadows.forEach(function(a){E(a,{marginLeft:l+1,marginTop:f+1})});this.inverted&&b.childNodes.forEach(function(e){a.invertChild(e,b)});if("SPAN"===b.tagName){var z=
+this.rotation,A=this.textWidth&&n(this.textWidth),D=[z,m,b.innerHTML,this.textWidth,this.textAlign].join(),B;(B=A!==this.oldTextWidth)&&!(B=A>this.oldTextWidth)&&((B=this.textPxLength)||(E(b,{width:"",whiteSpace:k||"nowrap"}),B=b.offsetWidth),B=B>A);B&&(/[ \-]/.test(b.textContent||b.innerText)||"ellipsis"===b.style.textOverflow)?(E(b,{width:A+"px",display:"block",whiteSpace:k||"normal"}),this.oldTextWidth=A,this.hasBoxWidthChanged=!0):this.hasBoxWidthChanged=!1;D!==this.cTT&&(k=a.fontMetrics(b.style.fontSize,
+b).b,!h(z)||z===(this.oldRotation||0)&&m===this.oldAlign||this.setSpanRotation(z,c,k),this.getSpanCorrection(!h(z)&&this.textPxLength||b.offsetWidth,k,c,z,m));E(b,{left:d+(this.xCorr||0)+"px",top:g+(this.yCorr||0)+"px"});this.cTT=D;this.oldRotation=z;this.oldAlign=m}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,l){var f={},d=this.renderer.getTransformKey();f[d]=f.transform="rotate("+a+"deg)";f[d+(r?"Origin":"-origin")]=f.transformOrigin=100*b+"% "+l+"px";E(this.element,f)},getSpanCorrection:function(a,
+b,l){this.xCorr=-a*l;this.yCorr=-b}});c(g.prototype,{getTransformKey:function(){return u&&!/Edge/.test(d.navigator.userAgent)?"-ms-transform":v?"-webkit-transform":r?"MozTransform":d.opera?"-o-transform":""},html:function(d,b,l){var f=this.createElement("span"),g=f.element,p=f.renderer,n=p.isSVG,h=function(a,b){["opacity","visibility"].forEach(function(f){m(a,f+"Setter",function(a,e,q,f){a.call(this,e,q,f);b[q]=e})});a.addedSetters=!0},z=a.charts[p.chartIndex],z=z&&z.styledMode;f.textSetter=function(a){a!==
+g.innerHTML&&delete this.bBox;this.textStr=a;g.innerHTML=w(a,"");f.doTransform=!0};n&&h(f,f.element.style);f.xSetter=f.ySetter=f.alignSetter=f.rotationSetter=function(a,b){"align"===b&&(b="textAlign");f[b]=a;f.doTransform=!0};f.afterSetters=function(){this.doTransform&&(this.htmlUpdateTransform(),this.doTransform=!1)};f.attr({text:d,x:Math.round(b),y:Math.round(l)}).css({position:"absolute"});z||f.css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});g.style.whiteSpace="nowrap";f.css=
+f.htmlCss;n&&(f.add=function(a){var b,l=p.box.parentNode,k=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)k.push(a),a=a.parentGroup;k.reverse().forEach(function(a){function e(e,q){a[q]=e;"translateX"===q?d.left=e+"px":d.top=e+"px";a.doTransform=!0}var d,g=y(a.element,"class");g&&(g={className:g});b=a.div=a.div||G("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||l);d=b.style;
+c(a,{classSetter:function(a){return function(e){this.element.setAttribute("class",e);a.className=e}}(b),on:function(){k[0].div&&f.on.apply({element:k[0].div},arguments);return a},translateXSetter:e,translateYSetter:e});a.addedSetters||h(a,d)})}}else b=l;b.appendChild(g);f.added=!0;f.alignOnAdd&&f.htmlUpdateTransform();return f});return f}})})(J);(function(a){var y=a.defined,G=a.extend,E=a.merge,h=a.pick,c=a.timeUnits,r=a.win;a.Time=function(a){this.update(a,!1)};a.Time.prototype={defaultOptions:{},
+update:function(a){var c=h(a&&a.useUTC,!0),w=this;this.options=a=E(!0,this.options||{},a);this.Date=a.Date||r.Date;this.timezoneOffset=(this.useUTC=c)&&a.timezoneOffset;this.getTimezoneOffset=this.timezoneOffsetFunction();(this.variableTimezone=!(c&&!a.getTimezoneOffset&&!a.timezone))||this.timezoneOffset?(this.get=function(a,g){var d=g.getTime(),m=d-w.getTimezoneOffset(g);g.setTime(m);a=g["getUTC"+a]();g.setTime(d);return a},this.set=function(a,g,d){var m;if("Milliseconds"===a||"Seconds"===a||"Minutes"===
+a&&0===g.getTimezoneOffset()%60)g["set"+a](d);else m=w.getTimezoneOffset(g),m=g.getTime()-m,g.setTime(m),g["setUTC"+a](d),a=w.getTimezoneOffset(g),m=g.getTime()+a,g.setTime(m)}):c?(this.get=function(a,g){return g["getUTC"+a]()},this.set=function(a,g,d){return g["setUTC"+a](d)}):(this.get=function(a,g){return g["get"+a]()},this.set=function(a,g,d){return g["set"+a](d)})},makeTime:function(c,r,w,n,g,d){var m,p,b;this.useUTC?(m=this.Date.UTC.apply(0,arguments),p=this.getTimezoneOffset(m),m+=p,b=this.getTimezoneOffset(m),
+p!==b?m+=b-p:p-36E5!==this.getTimezoneOffset(m-36E5)||a.isSafari||(m-=36E5)):m=(new this.Date(c,r,h(w,1),h(n,0),h(g,0),h(d,0))).getTime();return m},timezoneOffsetFunction:function(){var c=this,h=this.options,w=r.moment;if(!this.useUTC)return function(a){return 6E4*(new Date(a)).getTimezoneOffset()};if(h.timezone){if(w)return function(a){return 6E4*-w.tz(a,h.timezone).utcOffset()};a.error(25)}return this.useUTC&&h.getTimezoneOffset?function(a){return 6E4*h.getTimezoneOffset(a)}:function(){return 6E4*
+(c.timezoneOffset||0)}},dateFormat:function(c,h,w){if(!a.defined(h)||isNaN(h))return a.defaultOptions.lang.invalidDate||"";c=a.pick(c,"%Y-%m-%d %H:%M:%S");var n=this,g=new this.Date(h),d=this.get("Hours",g),m=this.get("Day",g),p=this.get("Date",g),b=this.get("Month",g),l=this.get("FullYear",g),f=a.defaultOptions.lang,x=f.weekdays,t=f.shortWeekdays,H=a.pad,g=a.extend({a:t?t[m]:x[m].substr(0,3),A:x[m],d:H(p),e:H(p,2," "),w:m,b:f.shortMonths[b],B:f.months[b],m:H(b+1),o:b+1,y:l.toString().substr(2,2),
+Y:l,H:H(d),k:d,I:H(d%12||12),l:d%12||12,M:H(n.get("Minutes",g)),p:12>d?"AM":"PM",P:12>d?"am":"pm",S:H(g.getSeconds()),L:H(Math.floor(h%1E3),3)},a.dateFormats);a.objectEach(g,function(a,b){for(;-1!==c.indexOf("%"+b);)c=c.replace("%"+b,"function"===typeof a?a.call(n,h):a)});return w?c.substr(0,1).toUpperCase()+c.substr(1):c},resolveDTLFormat:function(c){return a.isObject(c,!0)?c:(c=a.splat(c),{main:c[0],from:c[1],to:c[2]})},getTimeTicks:function(a,r,w,n){var g=this,d=[],m,p={},b;m=new g.Date(r);var l=
+a.unitRange,f=a.count||1,x;n=h(n,1);if(y(r)){g.set("Milliseconds",m,l>=c.second?0:f*Math.floor(g.get("Milliseconds",m)/f));l>=c.second&&g.set("Seconds",m,l>=c.minute?0:f*Math.floor(g.get("Seconds",m)/f));l>=c.minute&&g.set("Minutes",m,l>=c.hour?0:f*Math.floor(g.get("Minutes",m)/f));l>=c.hour&&g.set("Hours",m,l>=c.day?0:f*Math.floor(g.get("Hours",m)/f));l>=c.day&&g.set("Date",m,l>=c.month?1:Math.max(1,f*Math.floor(g.get("Date",m)/f)));l>=c.month&&(g.set("Month",m,l>=c.year?0:f*Math.floor(g.get("Month",
+m)/f)),b=g.get("FullYear",m));l>=c.year&&g.set("FullYear",m,b-b%f);l===c.week&&(b=g.get("Day",m),g.set("Date",m,g.get("Date",m)-b+n+(b<n?-7:0)));b=g.get("FullYear",m);n=g.get("Month",m);var t=g.get("Date",m),H=g.get("Hours",m);r=m.getTime();g.variableTimezone&&(x=w-r>4*c.month||g.getTimezoneOffset(r)!==g.getTimezoneOffset(w));r=m.getTime();for(m=1;r<w;)d.push(r),r=l===c.year?g.makeTime(b+m*f,0):l===c.month?g.makeTime(b,n+m*f):!x||l!==c.day&&l!==c.week?x&&l===c.hour&&1<f?g.makeTime(b,n,t,H+m*f):r+
+l*f:g.makeTime(b,n,t+m*f*(l===c.day?1:7)),m++;d.push(r);l<=c.hour&&1E4>d.length&&d.forEach(function(a){0===a%18E5&&"000000000"===g.dateFormat("%H%M%S%L",a)&&(p[a]="day")})}d.info=G(a,{higherRanks:p,totalRange:l*f});return d}}})(J);(function(a){var y=a.color,G=a.merge;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:{},time:a.Time.prototype.defaultOptions,chart:{styledMode:!1,borderRadius:0,colorCount:10,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",alignColumns:!0,layout:"horizontal",labelFormatter:function(){return this.name},borderColor:"#999999",borderRadius:0,navigation:{activeColor:"#003399",inactiveColor:"#cccccc"},
+itemStyle:{color:"#333333",cursor:"pointer",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,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',
+backgroundColor:y("#f7f7f7").setOpacity(.85).get(),borderWidth:1,shadow:!0,style:{color:"#333333",cursor:"default",fontSize:"12px",pointerEvents:"none",whiteSpace:"nowrap"}},credits:{enabled:!0,href:"https://www.highcharts.com?credits",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#999999",fontSize:"9px"},text:"Highcharts.com"}};a.setOptions=function(y){a.defaultOptions=G(!0,a.defaultOptions,y);a.time.update(G(a.defaultOptions.global,a.defaultOptions.time),
+!1);return a.defaultOptions};a.getOptions=function(){return a.defaultOptions};a.defaultPlotOptions=a.defaultOptions.plotOptions;a.time=new a.Time(G(a.defaultOptions.global,a.defaultOptions.time));a.dateFormat=function(y,h,c){return a.time.dateFormat(y,h,c)}})(J);(function(a){var y=a.correctFloat,G=a.defined,E=a.destroyObjectProperties,h=a.fireEvent,c=a.isNumber,r=a.merge,u=a.pick,v=a.deg2rad;a.Tick=function(a,c,g,d,m){this.axis=a;this.pos=c;this.type=g||"";this.isNewLabel=this.isNew=!0;this.parameters=
+m||{};this.tickmarkOffset=this.parameters.tickmarkOffset;this.options=this.parameters.options;g||d||this.addLabel()};a.Tick.prototype={addLabel:function(){var c=this,n=c.axis,g=n.options,d=n.chart,m=n.categories,p=n.names,b=c.pos,l=u(c.options&&c.options.labels,g.labels),f=n.tickPositions,x=b===f[0],t=b===f[f.length-1],m=this.parameters.category||(m?u(m[b],p[b],b):b),h=c.label,f=f.info,F,z,k,A;n.isDatetimeAxis&&f&&(z=d.time.resolveDTLFormat(g.dateTimeLabelFormats[!g.grid&&f.higherRanks[b]||f.unitName]),
+F=z.main);c.isFirst=x;c.isLast=t;c.formatCtx={axis:n,chart:d,isFirst:x,isLast:t,dateTimeLabelFormat:F,tickPositionInfo:f,value:n.isLog?y(n.lin2log(m)):m,pos:b};g=n.labelFormatter.call(c.formatCtx,this.formatCtx);if(A=z&&z.list)c.shortenLabel=function(){for(k=0;k<A.length;k++)if(h.attr({text:n.labelFormatter.call(a.extend(c.formatCtx,{dateTimeLabelFormat:A[k]}))}),h.getBBox().width<n.getSlotWidth(c)-2*u(l.padding,5))return;h.attr({text:""})};if(G(h))h&&h.textStr!==g&&(!h.textWidth||l.style&&l.style.width||
+h.styles.width||h.css({width:null}),h.attr({text:g}));else{if(c.label=h=G(g)&&l.enabled?d.renderer.text(g,0,0,l.useHTML).add(n.labelGroup):null)d.styledMode||h.css(r(l.style)),h.textPxLength=h.getBBox().width;c.rotation=0}},getLabelSize:function(){return this.label?this.label.getBBox()[this.axis.horiz?"height":"width"]:0},handleOverflow:function(a){var c=this.axis,g=c.options.labels,d=a.x,m=c.chart.chartWidth,p=c.chart.spacing,b=u(c.labelLeft,Math.min(c.pos,p[3])),p=u(c.labelRight,Math.max(c.isRadial?
+0:c.pos+c.len,m-p[1])),l=this.label,f=this.rotation,x={left:0,center:.5,right:1}[c.labelAlign||l.attr("align")],t=l.getBBox().width,h=c.getSlotWidth(this),F=h,z=1,k,A={};if(f||"justify"!==u(g.overflow,"justify"))0>f&&d-x*t<b?k=Math.round(d/Math.cos(f*v)-b):0<f&&d+x*t>p&&(k=Math.round((m-d)/Math.cos(f*v)));else if(m=d+(1-x)*t,d-x*t<b?F=a.x+F*(1-x)-b:m>p&&(F=p-a.x+F*x,z=-1),F=Math.min(h,F),F<h&&"center"===c.labelAlign&&(a.x+=z*(h-F-x*(h-Math.min(t,F)))),t>F||c.autoRotation&&(l.styles||{}).width)k=F;
+k&&(this.shortenLabel?this.shortenLabel():(A.width=Math.floor(k),(g.style||{}).textOverflow||(A.textOverflow="ellipsis"),l.css(A)))},getPosition:function(c,n,g,d){var m=this.axis,p=m.chart,b=d&&p.oldChartHeight||p.chartHeight;c={x:c?a.correctFloat(m.translate(n+g,null,null,d)+m.transB):m.left+m.offset+(m.opposite?(d&&p.oldChartWidth||p.chartWidth)-m.right-m.left:0),y:c?b-m.bottom+m.offset-(m.opposite?m.height:0):a.correctFloat(b-m.translate(n+g,null,null,d)-m.transB)};h(this,"afterGetPosition",{pos:c});
+return c},getLabelPosition:function(a,c,g,d,m,p,b,l){var f=this.axis,x=f.transA,t=f.reversed,n=f.staggerLines,F=f.tickRotCorr||{x:0,y:0},z=m.y,k=d||f.reserveSpaceDefault?0:-f.labelOffset*("center"===f.labelAlign?.5:1),A={};G(z)||(z=0===f.side?g.rotation?-8:-g.getBBox().height:2===f.side?F.y+8:Math.cos(g.rotation*v)*(F.y-g.getBBox(!1,0).height/2));a=a+m.x+k+F.x-(p&&d?p*x*(t?-1:1):0);c=c+z-(p&&!d?p*x*(t?1:-1):0);n&&(g=b/(l||1)%n,f.opposite&&(g=n-g-1),c+=f.labelOffset/n*g);A.x=a;A.y=Math.round(c);h(this,
+"afterGetLabelPosition",{pos:A});return A},getMarkPath:function(a,c,g,d,m,p){return p.crispLine(["M",a,c,"L",a+(m?0:-g),c+(m?g:0)],d)},renderGridLine:function(a,c,g){var d=this.axis,m=d.options,p=this.gridLine,b={},l=this.pos,f=this.type,x=u(this.tickmarkOffset,d.tickmarkOffset),t=d.chart.renderer,n=f?f+"Grid":"grid",h=m[n+"LineWidth"],z=m[n+"LineColor"],m=m[n+"LineDashStyle"];p||(d.chart.styledMode||(b.stroke=z,b["stroke-width"]=h,m&&(b.dashstyle=m)),f||(b.zIndex=1),a&&(c=0),this.gridLine=p=t.path().attr(b).addClass("highcharts-"+
+(f?f+"-":"")+"grid-line").add(d.gridGroup));if(p&&(g=d.getPlotLinePath(l+x,p.strokeWidth()*g,a,"pass")))p[a||this.isNew?"attr":"animate"]({d:g,opacity:c})},renderMark:function(a,c,g){var d=this.axis,m=d.options,p=d.chart.renderer,b=this.type,l=b?b+"Tick":"tick",f=d.tickSize(l),x=this.mark,t=!x,n=a.x;a=a.y;var h=u(m[l+"Width"],!b&&d.isXAxis?1:0),m=m[l+"Color"];f&&(d.opposite&&(f[0]=-f[0]),t&&(this.mark=x=p.path().addClass("highcharts-"+(b?b+"-":"")+"tick").add(d.axisGroup),d.chart.styledMode||x.attr({stroke:m,
+"stroke-width":h})),x[t?"attr":"animate"]({d:this.getMarkPath(n,a,f[0],x.strokeWidth()*g,d.horiz,p),opacity:c}))},renderLabel:function(a,n,g,d){var m=this.axis,p=m.horiz,b=m.options,l=this.label,f=b.labels,x=f.step,m=u(this.tickmarkOffset,m.tickmarkOffset),t=!0,h=a.x;a=a.y;l&&c(h)&&(l.xy=a=this.getLabelPosition(h,a,l,p,f,m,d,x),this.isFirst&&!this.isLast&&!u(b.showFirstLabel,1)||this.isLast&&!this.isFirst&&!u(b.showLastLabel,1)?t=!1:!p||f.step||f.rotation||n||0===g||this.handleOverflow(a),x&&d%x&&
+(t=!1),t&&c(a.y)?(a.opacity=g,l[this.isNewLabel?"attr":"animate"](a),this.isNewLabel=!1):(l.attr("y",-9999),this.isNewLabel=!0))},render:function(c,n,g){var d=this.axis,m=d.horiz,p=this.pos,b=u(this.tickmarkOffset,d.tickmarkOffset),p=this.getPosition(m,p,b,n),b=p.x,l=p.y,d=m&&b===d.pos+d.len||!m&&l===d.pos?-1:1;g=u(g,1);this.isActive=!0;this.renderGridLine(n,g,d);this.renderMark(p,g,d);this.renderLabel(p,n,g,c);this.isNew=!1;a.fireEvent(this,"afterRender")},destroy:function(){E(this,this.axis)}}})(J);
+var V=function(a){var y=a.addEvent,G=a.animObject,E=a.arrayMax,h=a.arrayMin,c=a.color,r=a.correctFloat,u=a.defaultOptions,v=a.defined,w=a.deg2rad,n=a.destroyObjectProperties,g=a.extend,d=a.fireEvent,m=a.format,p=a.getMagnitude,b=a.isArray,l=a.isNumber,f=a.isString,x=a.merge,t=a.normalizeTickInterval,H=a.objectEach,F=a.pick,z=a.removeEvent,k=a.splat,A=a.syncTimeout,D=a.Tick,B=function(){this.init.apply(this,arguments)};a.extend(B.prototype,{defaultOptions:{dateTimeLabelFormats:{millisecond:{main:"%H:%M:%S.%L",
+range:!1},second:{main:"%H:%M:%S",range:!1},minute:{main:"%H:%M",range:!1},hour:{main:"%H:%M",range:!1},day:{main:"%e. %b"},week:{main:"%e. %b"},month:{main:"%b '%y"},year:{main:"%Y"}},endOnTick:!1,labels:{enabled:!0,indentation:10,x:0,style:{color:"#666666",cursor:"default",fontSize:"11px"}},maxPadding:.01,minorTickLength:2,minorTickPosition:"outside",minPadding:.01,startOfWeek:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickmarkPlacement:"between",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,maxPadding:.05,minPadding:.05,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{allowOverlap:!1,enabled:!1,formatter:function(){return a.numberFormat(this.total,-1)},style:{color:"#000000",fontSize:"11px",fontWeight:"bold",
+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,q){var e=q.isX,b=this;b.chart=a;b.horiz=a.inverted&&!b.isZAxis?!e:e;b.isXAxis=e;b.coll=b.coll||(e?"xAxis":"yAxis");d(this,"init",{userOptions:q});b.opposite=
+q.opposite;b.side=q.side||(b.horiz?b.opposite?0:2:b.opposite?1:3);b.setOptions(q);var f=this.options,l=f.type;b.labelFormatter=f.labels.formatter||b.defaultLabelFormatter;b.userOptions=q;b.minPixelPadding=0;b.reversed=f.reversed;b.visible=!1!==f.visible;b.zoomEnabled=!1!==f.zoomEnabled;b.hasNames="category"===l||!0===f.categories;b.categories=f.categories||b.hasNames;b.names||(b.names=[],b.names.keys={});b.plotLinesAndBandsGroups={};b.isLog="logarithmic"===l;b.isDatetimeAxis="datetime"===l;b.positiveValuesOnly=
+b.isLog&&!b.allowNegativeLog;b.isLinked=v(f.linkedTo);b.ticks={};b.labelEdge=[];b.minorTicks={};b.plotLinesAndBands=[];b.alternateBands={};b.len=0;b.minRange=b.userMinRange=f.minRange||f.maxZoom;b.range=f.range;b.offset=f.offset||0;b.stacks={};b.oldStacks={};b.stacksTouched=0;b.max=null;b.min=null;b.crosshair=F(f.crosshair,k(a.options.tooltip.crosshairs)[e?0:1],!1);q=b.options.events;-1===a.axes.indexOf(b)&&(e?a.axes.splice(a.xAxis.length,0,b):a.axes.push(b),a[b.coll].push(b));b.series=b.series||
+[];a.inverted&&!b.isZAxis&&e&&void 0===b.reversed&&(b.reversed=!0);H(q,function(a,e){y(b,e,a)});b.lin2log=f.linearToLogConverter||b.lin2log;b.isLog&&(b.val2lin=b.log2lin,b.lin2val=b.lin2log);d(this,"afterInit")},setOptions:function(a){this.options=x(this.defaultOptions,"yAxis"===this.coll&&this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],x(u[this.coll],a));d(this,"afterSetOptions",{userOptions:a})},
+defaultLabelFormatter:function(){var e=this.axis,q=this.value,b=e.chart.time,f=e.categories,l=this.dateTimeLabelFormat,k=u.lang,d=k.numericSymbols,k=k.numericSymbolMagnitude||1E3,g=d&&d.length,c,p=e.options.labels.format,e=e.isLog?Math.abs(q):e.tickInterval;if(p)c=m(p,this,b);else if(f)c=q;else if(l)c=b.dateFormat(l,q);else if(g&&1E3<=e)for(;g--&&void 0===c;)b=Math.pow(k,g+1),e>=b&&0===10*q%b&&null!==d[g]&&0!==q&&(c=a.numberFormat(q/b,-1)+d[g]);void 0===c&&(c=1E4<=Math.abs(q)?a.numberFormat(q,-1):
+a.numberFormat(q,-1,void 0,""));return c},getSeriesExtremes:function(){var a=this,q=a.chart;d(this,"getSeriesExtremes",null,function(){a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();a.series.forEach(function(e){if(e.visible||!q.options.chart.ignoreHiddenSeries){var b=e.options,f=b.threshold,k;a.hasVisibleSeries=!0;a.positiveValuesOnly&&0>=f&&(f=null);if(a.isXAxis)b=e.xData,b.length&&(e=h(b),k=E(b),l(e)||e instanceof Date||(b=b.filter(l),
+e=h(b),k=E(b)),b.length&&(a.dataMin=Math.min(F(a.dataMin,b[0],e),e),a.dataMax=Math.max(F(a.dataMax,b[0],k),k)));else if(e.getExtremes(),k=e.dataMax,e=e.dataMin,v(e)&&v(k)&&(a.dataMin=Math.min(F(a.dataMin,e),e),a.dataMax=Math.max(F(a.dataMax,k),k)),v(f)&&(a.threshold=f),!b.softThreshold||a.positiveValuesOnly)a.softThreshold=!1}})});d(this,"afterGetSeriesExtremes")},translate:function(a,q,b,f,k,d){var e=this.linkedParent||this,c=1,g=0,p=f?e.oldTransA:e.transA;f=f?e.oldMin:e.min;var A=e.minPixelPadding;
+k=(e.isOrdinal||e.isBroken||e.isLog&&k)&&e.lin2val;p||(p=e.transA);b&&(c*=-1,g=e.len);e.reversed&&(c*=-1,g-=c*(e.sector||e.len));q?(a=(a*c+g-A)/p+f,k&&(a=e.lin2val(a))):(k&&(a=e.val2lin(a)),a=l(f)?c*(a-f)*p+g+c*A+(l(d)?p*d:0):void 0);return a},toPixels:function(a,q){return this.translate(a,!1,!this.horiz,null,!0)+(q?0:this.pos)},toValue:function(a,q){return this.translate(a-(q?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,q,b,f,k){var e=this.chart,d=this.left,c=this.top,g,p,A=b&&
+e.oldChartHeight||e.chartHeight,t=b&&e.oldChartWidth||e.chartWidth,m;g=this.transB;var x=function(a,e,q){if("pass"!==f&&a<e||a>q)f?a=Math.min(Math.max(e,a),q):m=!0;return a};k=F(k,this.translate(a,null,null,b));k=Math.min(Math.max(-1E5,k),1E5);a=b=Math.round(k+g);g=p=Math.round(A-k-g);l(k)?this.horiz?(g=c,p=A-this.bottom,a=b=x(a,d,d+this.width)):(a=d,b=t-this.right,g=p=x(g,c,c+this.height)):(m=!0,f=!1);return m&&!f?null:e.renderer.crispLine(["M",a,g,"L",b,p],q||1)},getLinearTickPositions:function(a,
+q,b){var e,f=r(Math.floor(q/a)*a);b=r(Math.ceil(b/a)*a);var k=[],d;r(f+a)===f&&(d=20);if(this.single)return[q];for(q=f;q<=b;){k.push(q);q=r(q+a,d);if(q===e)break;e=q}return k},getMinorTickInterval:function(){var a=this.options;return!0===a.minorTicks?F(a.minorTickInterval,"auto"):!1===a.minorTicks?null:a.minorTickInterval},getMinorTickPositions:function(){var a=this,q=a.options,b=a.tickPositions,f=a.minorTickInterval,k=[],d=a.pointRangePadding||0,l=a.min-d,d=a.max+d,g=d-l;if(g&&g/f<a.len/3)if(a.isLog)this.paddedTicks.forEach(function(e,
+q,b){q&&k.push.apply(k,a.getLogTickPositions(f,b[q-1],b[q],!0))});else if(a.isDatetimeAxis&&"auto"===this.getMinorTickInterval())k=k.concat(a.getTimeTicks(a.normalizeTimeTickInterval(f),l,d,q.startOfWeek));else for(q=l+(b[0]-l)%f;q<=d&&q!==k[0];q+=f)k.push(q);0!==k.length&&a.trimTicks(k);return k},adjustForMinRange:function(){var a=this.options,q=this.min,b=this.max,f,k,d,l,g,c,p,A;this.isXAxis&&void 0===this.minRange&&!this.isLog&&(v(a.min)||v(a.max)?this.minRange=null:(this.series.forEach(function(a){c=
+a.xData;for(l=p=a.xIncrement?1:c.length-1;0<l;l--)if(g=c[l]-c[l-1],void 0===d||g<d)d=g}),this.minRange=Math.min(5*d,this.dataMax-this.dataMin)));b-q<this.minRange&&(k=this.dataMax-this.dataMin>=this.minRange,A=this.minRange,f=(A-b+q)/2,f=[q-f,F(a.min,q-f)],k&&(f[2]=this.isLog?this.log2lin(this.dataMin):this.dataMin),q=E(f),b=[q+A,F(a.max,q+A)],k&&(b[2]=this.isLog?this.log2lin(this.dataMax):this.dataMax),b=h(b),b-q<A&&(f[0]=b-A,f[1]=F(a.min,b-A),q=E(f)));this.min=q;this.max=b},getClosest:function(){var a;
+this.categories?a=1:this.series.forEach(function(e){var q=e.closestPointRange,b=e.visible||!e.chart.options.chart.ignoreHiddenSeries;!e.noSharedTooltip&&v(q)&&b&&(a=v(a)?Math.min(a,q):q)});return a},nameToX:function(a){var e=b(this.categories),f=e?this.categories:this.names,k=a.options.x,d;a.series.requireSorting=!1;v(k)||(k=!1===this.options.uniqueNames?a.series.autoIncrement():e?f.indexOf(a.name):F(f.keys[a.name],-1));-1===k?e||(d=f.length):d=k;void 0!==d&&(this.names[d]=a.name,this.names.keys[a.name]=
+d);return d},updateNames:function(){var a=this,q=this.names;0<q.length&&(Object.keys(q.keys).forEach(function(a){delete q.keys[a]}),q.length=0,this.minRange=this.userMinRange,(this.series||[]).forEach(function(e){e.xIncrement=null;if(!e.points||e.isDirtyData)a.max=Math.max(a.max,e.xData.length-1),e.processData(),e.generatePoints();e.data.forEach(function(q,b){var f;q&&q.options&&void 0!==q.name&&(f=a.nameToX(q),void 0!==f&&f!==q.x&&(q.x=f,e.xData[b]=f))})}))},setAxisTranslation:function(a){var e=
+this,b=e.max-e.min,k=e.axisPointRange||0,l,g=0,c=0,p=e.linkedParent,A=!!e.categories,t=e.transA,m=e.isXAxis;if(m||A||k)l=e.getClosest(),p?(g=p.minPointOffset,c=p.pointRangePadding):e.series.forEach(function(a){var b=A?1:m?F(a.options.pointRange,l,0):e.axisPointRange||0;a=a.options.pointPlacement;k=Math.max(k,b);e.single||(g=Math.max(g,f(a)?0:b/2),c=Math.max(c,"on"===a?0:b))}),p=e.ordinalSlope&&l?e.ordinalSlope/l:1,e.minPointOffset=g*=p,e.pointRangePadding=c*=p,e.pointRange=Math.min(k,b),m&&(e.closestPointRange=
+l);a&&(e.oldTransA=t);e.translationSlope=e.transA=t=e.staticScale||e.len/(b+c||1);e.transB=e.horiz?e.left:e.bottom;e.minPixelPadding=t*g;d(this,"afterSetAxisTranslation")},minFromRange:function(){return this.max-this.range},setTickInterval:function(e){var b=this,f=b.chart,k=b.options,g=b.isLog,c=b.isDatetimeAxis,A=b.isXAxis,m=b.isLinked,x=k.maxPadding,n=k.minPadding,D,h=k.tickInterval,B=k.tickPixelInterval,z=b.categories,H=l(b.threshold)?b.threshold:null,w=b.softThreshold,u,y,E;c||z||m||this.getTickAmount();
+y=F(b.userMin,k.min);E=F(b.userMax,k.max);m?(b.linkedParent=f[b.coll][k.linkedTo],D=b.linkedParent.getExtremes(),b.min=F(D.min,D.dataMin),b.max=F(D.max,D.dataMax),k.type!==b.linkedParent.options.type&&a.error(11,1,f)):(!w&&v(H)&&(b.dataMin>=H?(D=H,n=0):b.dataMax<=H&&(u=H,x=0)),b.min=F(y,D,b.dataMin),b.max=F(E,u,b.dataMax));g&&(b.positiveValuesOnly&&!e&&0>=Math.min(b.min,F(b.dataMin,b.min))&&a.error(10,1,f),b.min=r(b.log2lin(b.min),15),b.max=r(b.log2lin(b.max),15));b.range&&v(b.max)&&(b.userMin=b.min=
+y=Math.max(b.dataMin,b.minFromRange()),b.userMax=E=b.max,b.range=null);d(b,"foundExtremes");b.beforePadding&&b.beforePadding();b.adjustForMinRange();!(z||b.axisPointRange||b.usePercentage||m)&&v(b.min)&&v(b.max)&&(f=b.max-b.min)&&(!v(y)&&n&&(b.min-=f*n),!v(E)&&x&&(b.max+=f*x));l(k.softMin)&&!l(b.userMin)&&(b.min=Math.min(b.min,k.softMin));l(k.softMax)&&!l(b.userMax)&&(b.max=Math.max(b.max,k.softMax));l(k.floor)&&(b.min=Math.min(Math.max(b.min,k.floor),Number.MAX_VALUE));l(k.ceiling)&&(b.max=Math.max(Math.min(b.max,
+k.ceiling),F(b.userMax,-Number.MAX_VALUE)));w&&v(b.dataMin)&&(H=H||0,!v(y)&&b.min<H&&b.dataMin>=H?b.min=H:!v(E)&&b.max>H&&b.dataMax<=H&&(b.max=H));b.tickInterval=b.min===b.max||void 0===b.min||void 0===b.max?1:m&&!h&&B===b.linkedParent.options.tickPixelInterval?h=b.linkedParent.tickInterval:F(h,this.tickAmount?(b.max-b.min)/Math.max(this.tickAmount-1,1):void 0,z?1:(b.max-b.min)*B/Math.max(b.len,B));A&&!e&&b.series.forEach(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&&!h&&(b.tickInterval=Math.max(b.pointRange,b.tickInterval));e=F(k.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);!h&&b.tickInterval<e&&(b.tickInterval=e);c||g||h||(b.tickInterval=t(b.tickInterval,null,p(b.tickInterval),F(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 e=this.options,b,f=e.tickPositions;b=this.getMinorTickInterval();var k=e.tickPositioner,l=e.startOnTick,g=e.endOnTick;this.tickmarkOffset=this.categories&&"between"===e.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval="auto"===b&&this.tickInterval?this.tickInterval/5:b;this.single=this.min===this.max&&v(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==e.allowDecimals);this.tickPositions=
+b=f&&f.slice();!b&&(!this.ordinalPositions&&(this.max-this.min)/this.tickInterval>Math.max(2*this.len,200)?(b=[this.min,this.max],a.error(19,!1,this.chart)):b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,e.units),this.min,this.max,e.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,k&&(k=k.apply(this,[this.min,this.max])))&&(this.tickPositions=b=k);this.paddedTicks=b.slice(0);this.trimTicks(b,l,g);this.isLinked||(this.single&&2>b.length&&(this.min-=.5,this.max+=.5),f||k||this.adjustTickAmount());d(this,"afterSetTickPositions")},trimTicks:function(a,b,f){var e=a[0],k=a[a.length-1],q=this.minPointOffset||0;if(!this.isLinked){if(b&&-Infinity!==e)this.min=e;else for(;this.min-q>a[0];)a.shift();if(f)this.max=k;else for(;this.max+
+q<a[a.length-1];)a.pop();0===a.length&&v(e)&&!this.options.tickPositions&&a.push((k+e)/2)}},alignToOthers:function(){var a={},b,f=this.options;!1===this.chart.options.chart.alignTicks||!1===f.alignTicks||!1===f.startOnTick||!1===f.endOnTick||this.isLog||this.chart[this.coll].forEach(function(e){var f=e.options,f=[e.horiz?f.left:f.top,f.width,f.height,f.pane].join();e.series.length&&(a[f]?b=!0:a[f]=1)});return b},getTickAmount:function(){var a=this.options,b=a.tickAmount,f=a.tickPixelInterval;!v(a.tickInterval)&&
+this.len<f&&!this.isRadial&&!this.isLog&&a.startOnTick&&a.endOnTick&&(b=2);!b&&this.alignToOthers()&&(b=Math.ceil(this.len/f)+1);4>b&&(this.finalTickAmt=b,b=5);this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,f=this.tickAmount,k=this.finalTickAmt,d=b&&b.length,l=F(this.threshold,this.softThreshold?0:null);if(this.hasData()){if(d<f){for(;b.length<f;)b.length%2||this.min===l?b.push(r(b[b.length-1]+a)):b.unshift(r(b[0]-a));this.transA*=(d-1)/(f-1);this.min=
+b[0];this.max=b[b.length-1]}else d>f&&(this.tickInterval*=2,this.setTickPositions());if(v(k)){for(a=f=b.length;a--;)(3===k&&1===a%2||2>=k&&0<a&&a<f-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;this.series.forEach(function(e){if(e.isDirtyData||e.isDirty||e.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();d(this,"afterSetScale")},setExtremes:function(a,b,f,k,l){var e=this,q=e.chart;f=F(f,!0);e.series.forEach(function(a){delete a.kdTree});l=g(l,{min:a,max:b});d(e,"setExtremes",l,function(){e.userMin=
+a;e.userMax=b;e.eventArgs=l;f&&q.redraw(k)})},zoom:function(a,b){var e=this.dataMin,f=this.dataMax,k=this.options,d=Math.min(e,F(k.min,e)),k=Math.max(f,F(k.max,f));if(a!==this.min||b!==this.max)this.allowZoomOutside||(v(e)&&(a<d&&(a=d),a>k&&(a=k)),v(f)&&(b<d&&(b=d),b>k&&(b=k))),this.displayBtn=void 0!==a||void 0!==b,this.setExtremes(a,b,!1,void 0,{trigger:"zoom"});return!0},setAxisSize:function(){var e=this.chart,b=this.options,f=b.offsets||[0,0,0,0],k=this.horiz,d=this.width=Math.round(a.relativeLength(F(b.width,
+e.plotWidth-f[3]+f[1]),e.plotWidth)),l=this.height=Math.round(a.relativeLength(F(b.height,e.plotHeight-f[0]+f[2]),e.plotHeight)),g=this.top=Math.round(a.relativeLength(F(b.top,e.plotTop+f[0]),e.plotHeight,e.plotTop)),b=this.left=Math.round(a.relativeLength(F(b.left,e.plotLeft+f[3]),e.plotWidth,e.plotLeft));this.bottom=e.chartHeight-l-g;this.right=e.chartWidth-d-b;this.len=Math.max(k?d:l,0);this.pos=k?b:g},getExtremes:function(){var a=this.isLog;return{min:a?r(this.lin2log(this.min)):this.min,max:a?
+r(this.lin2log(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var e=this.isLog,b=e?this.lin2log(this.min):this.min,e=e?this.lin2log(this.max):this.max;null===a||-Infinity===a?a=b:Infinity===a?a=e:b>a?a=b:e<a&&(a=e);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=(F(a,0)-90*this.side+720)%360;return 15<a&&165>a?"right":195<a&&345>a?"left":"center"},tickSize:function(a){var e=this.options,b=e[a+"Length"],
+f=F(e[a+"Width"],"tick"===a&&this.isXAxis?1:0);if(f&&b)return"inside"===e[a+"Position"]&&(b=-b),[b,f]},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,f=this.tickInterval,k=f,d=this.len/(((this.categories?1:0)+this.max-this.min)/f),l,g=a.rotation,c=this.labelMetrics(),p,A=Number.MAX_VALUE,
+t,m=function(a){a/=d||1;a=1<a?Math.ceil(a):1;return r(a*f)};b?(t=!a.staggerLines&&!a.step&&(v(g)?[g]:d<F(a.autoRotationLimit,80)&&a.autoRotation))&&t.forEach(function(a){var b;if(a===g||a&&-90<=a&&90>=a)p=m(Math.abs(c.h/Math.sin(w*a))),b=p+Math.abs(a/360),b<A&&(A=b,l=a,k=p)}):a.step||(k=m(c.h));this.autoRotation=t;this.labelRotation=F(l,g);return k},getSlotWidth:function(a){var b=this.chart,e=this.horiz,f=this.options.labels,k=Math.max(this.tickPositions.length-(this.categories?0:1),1),d=b.margin[3];
+return a&&a.slotWidth||e&&2>(f.step||0)&&!f.rotation&&(this.staggerLines||1)*this.len/k||!e&&(f.style&&parseInt(f.style.width,10)||d&&d-b.spacing[3]||.33*b.chartWidth)},renderUnsquish:function(){var a=this.chart,b=a.renderer,k=this.tickPositions,d=this.ticks,l=this.options.labels,g=l&&l.style||{},c=this.horiz,p=this.getSlotWidth(),A=Math.max(1,Math.round(p-2*(l.padding||5))),t={},m=this.labelMetrics(),x=l.style&&l.style.textOverflow,n,D,h=0,B;f(l.rotation)||(t.rotation=l.rotation||0);k.forEach(function(a){(a=
+d[a])&&a.label&&a.label.textPxLength>h&&(h=a.label.textPxLength)});this.maxLabelLength=h;if(this.autoRotation)h>A&&h>m.h?t.rotation=this.labelRotation:this.labelRotation=0;else if(p&&(n=A,!x))for(D="clip",A=k.length;!c&&A--;)if(B=k[A],B=d[B].label)B.styles&&"ellipsis"===B.styles.textOverflow?B.css({textOverflow:"clip"}):B.textPxLength>p&&B.css({width:p+"px"}),B.getBBox().height>this.len/k.length-(m.h-m.f)&&(B.specificTextOverflow="ellipsis");t.rotation&&(n=h>.5*a.chartHeight?.33*a.chartHeight:h,x||
+(D="ellipsis"));if(this.labelAlign=l.align||this.autoLabelAlign(this.labelRotation))t.align=this.labelAlign;k.forEach(function(a){var b=(a=d[a])&&a.label,e=g.width,f={};b&&(b.attr(t),a.shortenLabel?a.shortenLabel():n&&!e&&"nowrap"!==g.whiteSpace&&(n<b.textPxLength||"SPAN"===b.element.tagName)?(f.width=n,x||(f.textOverflow=b.specificTextOverflow||D),b.css(f)):b.styles&&b.styles.width&&!f.width&&!e&&b.css({width:null}),delete b.specificTextOverflow,a.rotation=t.rotation)},this);this.tickRotCorr=b.rotCorr(m.b,
+this.labelRotation||0,0!==this.side)},hasData:function(){return this.hasVisibleSeries||v(this.min)&&v(this.max)&&this.tickPositions&&0<this.tickPositions.length},addTitle:function(a){var b=this.chart.renderer,e=this.horiz,f=this.opposite,k=this.options.title,d,l=this.chart.styledMode;this.axisTitle||((d=k.textAlign)||(d=(e?{low:"left",middle:"center",high:"right"}:{low:f?"right":"left",middle:"center",high:f?"left":"right"})[k.align]),this.axisTitle=b.text(k.text,0,0,k.useHTML).attr({zIndex:7,rotation:k.rotation||
+0,align:d}).addClass("highcharts-axis-title"),l||this.axisTitle.css(x(k.style)),this.axisTitle.add(this.axisGroup),this.axisTitle.isNew=!0);l||k.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 D(this,a)},getOffset:function(){var a=this,b=a.chart,f=b.renderer,k=a.options,l=a.tickPositions,g=a.ticks,c=a.horiz,p=a.side,A=b.inverted&&!a.isZAxis?[1,0,3,2][p]:p,t,m,x=0,n,D=0,h=k.title,
+B=k.labels,z=0,r=b.axisOffset,b=b.clipOffset,w=[-1,1,1,-1][p],u=k.className,y=a.axisParent;t=a.hasData();a.showAxis=m=t||F(k.showEmpty,!0);a.staggerLines=a.horiz&&B.staggerLines;a.axisGroup||(a.gridGroup=f.g("grid").attr({zIndex:k.gridZIndex||1}).addClass("highcharts-"+this.coll.toLowerCase()+"-grid "+(u||"")).add(y),a.axisGroup=f.g("axis").attr({zIndex:k.zIndex||2}).addClass("highcharts-"+this.coll.toLowerCase()+" "+(u||"")).add(y),a.labelGroup=f.g("axis-labels").attr({zIndex:B.zIndex||7}).addClass("highcharts-"+
+a.coll.toLowerCase()+"-labels "+(u||"")).add(y));t||a.isLinked?(l.forEach(function(b,e){a.generateTick(b,e)}),a.renderUnsquish(),a.reserveSpaceDefault=0===p||2===p||{1:"left",3:"right"}[p]===a.labelAlign,F(B.reserveSpace,"center"===a.labelAlign?!0:null,a.reserveSpaceDefault)&&l.forEach(function(a){z=Math.max(g[a].getLabelSize(),z)}),a.staggerLines&&(z*=a.staggerLines),a.labelOffset=z*(a.opposite?-1:1)):H(g,function(a,b){a.destroy();delete g[b]});h&&h.text&&!1!==h.enabled&&(a.addTitle(m),m&&!1!==h.reserveSpace&&
+(a.titleOffset=x=a.axisTitle.getBBox()[c?"height":"width"],n=h.offset,D=v(n)?0:F(h.margin,c?5:10)));a.renderLine();a.offset=w*F(k.offset,r[p]);a.tickRotCorr=a.tickRotCorr||{x:0,y:0};f=0===p?-a.labelMetrics().h:2===p?a.tickRotCorr.y:0;D=Math.abs(z)+D;z&&(D=D-f+w*(c?F(B.y,a.tickRotCorr.y+8*w):B.x));a.axisTitleMargin=F(n,D);a.getMaxLabelDimensions&&(a.maxLabelDimensions=a.getMaxLabelDimensions(g,l));c=this.tickSize("tick");r[p]=Math.max(r[p],a.axisTitleMargin+x+w*a.offset,D,t&&l.length&&c?c[0]+w*a.offset:
+0);k=k.offset?0:2*Math.floor(a.axisLine.strokeWidth()/2);b[A]=Math.max(b[A],k);d(this,"afterGetOffset")},getLinePath:function(a){var b=this.chart,e=this.opposite,f=this.offset,k=this.horiz,d=this.left+(e?this.width:0)+f,f=b.chartHeight-this.bottom-(e?this.height:0)+f;e&&(a*=-1);return b.renderer.crispLine(["M",k?this.left:d,k?f:this.top,"L",k?b.chartWidth-this.right:d,k?f:b.chartHeight-this.bottom],a)},renderLine:function(){this.axisLine||(this.axisLine=this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup),
+this.chart.styledMode||this.axisLine.attr({stroke:this.options.lineColor,"stroke-width":this.options.lineWidth,zIndex:7}))},getTitlePosition:function(){var a=this.horiz,b=this.left,f=this.top,k=this.len,d=this.options.title,l=a?b:f,g=this.opposite,c=this.offset,p=d.x||0,A=d.y||0,t=this.axisTitle,m=this.chart.renderer.fontMetrics(d.style&&d.style.fontSize,t),t=Math.max(t.getBBox(null,0).height-m.h-1,0),k={low:l+(a?0:k),middle:l+k/2,high:l+(a?k:0)}[d.align],b=(a?f+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+
+[-t,t,m.f,-t][this.side];return{x:a?k+p:b+(g?this.width:0)+c+p,y:a?b+A-(g?this.height:0)+c:k+A}},renderMinorTick:function(a){var b=this.chart.hasRendered&&l(this.oldMin),e=this.minorTicks;e[a]||(e[a]=new D(this,a,"minor"));b&&e[a].isNew&&e[a].render(null,!0);e[a].render(null,!1,1)},renderTick:function(a,b){var e=this.isLinked,f=this.ticks,k=this.chart.hasRendered&&l(this.oldMin);if(!e||a>=this.min&&a<=this.max)f[a]||(f[a]=new D(this,a)),k&&f[a].isNew&&f[a].render(b,!0,-1),f[a].render(b)},render:function(){var b=
+this,f=b.chart,k=b.options,g=b.isLog,c=b.isLinked,p=b.tickPositions,t=b.axisTitle,m=b.ticks,x=b.minorTicks,n=b.alternateBands,h=k.stackLabels,B=k.alternateGridColor,z=b.tickmarkOffset,F=b.axisLine,r=b.showAxis,w=G(f.renderer.globalAnimation),u,v;b.labelEdge.length=0;b.overlap=!1;[m,x,n].forEach(function(a){H(a,function(a){a.isActive=!1})});if(b.hasData()||c)b.minorTickInterval&&!b.categories&&b.getMinorTickPositions().forEach(function(a){b.renderMinorTick(a)}),p.length&&(p.forEach(function(a,e){b.renderTick(a,
+e)}),z&&(0===b.min||b.single)&&(m[-1]||(m[-1]=new D(b,-1,null,!0)),m[-1].render(-1))),B&&p.forEach(function(e,k){v=void 0!==p[k+1]?p[k+1]+z:b.max-z;0===k%2&&e<b.max&&v<=b.max+(f.polar?-z:z)&&(n[e]||(n[e]=new a.PlotLineOrBand(b)),u=e+z,n[e].options={from:g?b.lin2log(u):u,to:g?b.lin2log(v):v,color:B},n[e].render(),n[e].isActive=!0)}),b._addedPlotLB||((k.plotLines||[]).concat(k.plotBands||[]).forEach(function(a){b.addPlotBandOrLine(a)}),b._addedPlotLB=!0);[m,x,n].forEach(function(a){var b,e=[],k=w.duration;
+H(a,function(a,b){a.isActive||(a.render(b,!1,0),a.isActive=!1,e.push(b))});A(function(){for(b=e.length;b--;)a[e[b]]&&!a[e[b]].isActive&&(a[e[b]].destroy(),delete a[e[b]])},a!==n&&f.hasRendered&&k?k:0)});F&&(F[F.isPlaced?"animate":"attr"]({d:this.getLinePath(F.strokeWidth())}),F.isPlaced=!0,F[r?"show":"hide"](!0));t&&r&&(k=b.getTitlePosition(),l(k.y)?(t[t.isNew?"attr":"animate"](k),t.isNew=!1):(t.attr("y",-9999),t.isNew=!0));h&&h.enabled&&b.renderStackTotals();b.isDirty=!1;d(this,"afterRender")},redraw:function(){this.visible&&
+(this.render(),this.plotLinesAndBands.forEach(function(a){a.render()}));this.series.forEach(function(a){a.isDirty=!0})},keepProps:"extKey hcEvents names series userMax userMin".split(" "),destroy:function(a){var b=this,e=b.stacks,f=b.plotLinesAndBands,k;d(this,"destroy",{keepEvents:a});a||z(b);H(e,function(a,b){n(a);e[b]=null});[b.ticks,b.minorTicks,b.alternateBands].forEach(function(a){n(a)});if(f)for(a=f.length;a--;)f[a].destroy();"stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar".split(" ").forEach(function(a){b[a]&&
+(b[a]=b[a].destroy())});for(k in b.plotLinesAndBandsGroups)b.plotLinesAndBandsGroups[k]=b.plotLinesAndBandsGroups[k].destroy();H(b,function(a,e){-1===b.keepProps.indexOf(e)&&delete b[e]})},drawCrosshair:function(a,b){var e,f=this.crosshair,k=F(f.snap,!0),l,g=this.cross;d(this,"drawCrosshair",{e:a,point:b});a||(a=this.cross&&this.cross.e);if(this.crosshair&&!1!==(v(b)||!k)){k?v(b)&&(l=F(b.crosshairPos,this.isXAxis?b.plotX:this.len-b.plotY)):l=a&&(this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos);
+v(l)&&(e=this.getPlotLinePath(b&&(this.isXAxis?b.x:F(b.stackY,b.y)),null,null,null,l)||null);if(!v(e)){this.hideCrosshair();return}k=this.categories&&!this.isRadial;g||(this.cross=g=this.chart.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-"+(k?"category ":"thin ")+f.className).attr({zIndex:F(f.zIndex,2)}).add(),this.chart.styledMode||(g.attr({stroke:f.color||(k?c("#ccd6eb").setOpacity(.25).get():"#cccccc"),"stroke-width":F(f.width,1)}).css({"pointer-events":"none"}),f.dashStyle&&
+g.attr({dashstyle:f.dashStyle})));g.show().attr({d:e});k&&!f.width&&g.attr({"stroke-width":this.transA});this.cross.e=a}else this.hideCrosshair();d(this,"afterDrawCrosshair",{e:a,point:b})},hideCrosshair:function(){this.cross&&this.cross.hide()}});return a.Axis=B}(J);(function(a){var y=a.Axis,G=a.getMagnitude,E=a.normalizeTickInterval,h=a.timeUnits;y.prototype.getTimeTicks=function(){return this.chart.time.getTimeTicks.apply(this.chart.time,arguments)};y.prototype.normalizeTimeTickInterval=function(a,
+r){var c=r||[["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]];r=c[c.length-1];var v=h[r[0]],w=r[1],n;for(n=0;n<c.length&&!(r=c[n],v=h[r[0]],w=r[1],c[n+1]&&a<=(v*w[w.length-1]+h[c[n+1][0]])/2);n++);v===h.year&&a<5*v&&(w=[1,2,5]);a=E(a/v,w,"year"===r[0]?Math.max(G(a/v),1):1);return{unitRange:v,count:a,unitName:r[0]}}})(J);(function(a){var y=a.Axis,G=a.getMagnitude,
+E=a.normalizeTickInterval,h=a.pick;y.prototype.getLogTickPositions=function(a,r,u,v){var c=this.options,n=this.len,g=[];v||(this._minorAutoInterval=null);if(.5<=a)a=Math.round(a),g=this.getLinearTickPositions(a,r,u);else if(.08<=a)for(var n=Math.floor(r),d,m,p,b,l,c=.3<a?[1,2,4]:.15<a?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];n<u+1&&!l;n++)for(m=c.length,d=0;d<m&&!l;d++)p=this.log2lin(this.lin2log(n)*c[d]),p>r&&(!v||b<=u)&&void 0!==b&&g.push(b),b>u&&(l=!0),b=p;else r=this.lin2log(r),u=this.lin2log(u),a=v?this.getMinorTickInterval():
+c.tickInterval,a=h("auto"===a?null:a,this._minorAutoInterval,c.tickPixelInterval/(v?5:1)*(u-r)/((v?n/this.tickPositions.length:n)||1)),a=E(a,null,G(a)),g=this.getLinearTickPositions(a,r,u).map(this.log2lin),v||(this._minorAutoInterval=a/5);v||(this.tickInterval=a);return g};y.prototype.log2lin=function(a){return Math.log(a)/Math.LN10};y.prototype.lin2log=function(a){return Math.pow(10,a)}})(J);(function(a,y){var G=a.arrayMax,E=a.arrayMin,h=a.defined,c=a.destroyObjectProperties,r=a.erase,u=a.merge,
+v=a.pick;a.PlotLineOrBand=function(a,c){this.axis=a;c&&(this.options=c,this.id=c.id)};a.PlotLineOrBand.prototype={render:function(){a.fireEvent(this,"render");var c=this,n=c.axis,g=n.horiz,d=c.options,m=d.label,p=c.label,b=d.to,l=d.from,f=d.value,x=h(l)&&h(b),t=h(f),H=c.svgElem,F=!H,z=[],k=d.color,A=v(d.zIndex,0),D=d.events,z={"class":"highcharts-plot-"+(x?"band ":"line ")+(d.className||"")},B={},e=n.chart.renderer,q=x?"bands":"lines";n.isLog&&(l=n.log2lin(l),b=n.log2lin(b),f=n.log2lin(f));n.chart.styledMode||
+(t?(z.stroke=k,z["stroke-width"]=d.width,d.dashStyle&&(z.dashstyle=d.dashStyle)):x&&(k&&(z.fill=k),d.borderWidth&&(z.stroke=d.borderColor,z["stroke-width"]=d.borderWidth)));B.zIndex=A;q+="-"+A;(k=n.plotLinesAndBandsGroups[q])||(n.plotLinesAndBandsGroups[q]=k=e.g("plot-"+q).attr(B).add());F&&(c.svgElem=H=e.path().attr(z).add(k));if(t)z=n.getPlotLinePath(f,H.strokeWidth());else if(x)z=n.getPlotBandPath(l,b,d);else return;F&&z&&z.length?(H.attr({d:z}),D&&a.objectEach(D,function(a,b){H.on(b,function(a){D[b].apply(c,
+[a])})})):H&&(z?(H.show(),H.animate({d:z})):(H.hide(),p&&(c.label=p=p.destroy())));m&&h(m.text)&&z&&z.length&&0<n.width&&0<n.height&&!z.isFlat?(m=u({align:g&&x&&"center",x:g?!x&&4:10,verticalAlign:!g&&x&&"middle",y:g?x?16:10:x?6:-4,rotation:g&&!x&&90},m),this.renderLabel(m,z,x,A)):p&&p.hide();return c},renderLabel:function(a,c,g,d){var m=this.label,p=this.axis.chart.renderer;m||(m={align:a.textAlign||a.align,rotation:a.rotation,"class":"highcharts-plot-"+(g?"band":"line")+"-label "+(a.className||
+"")},m.zIndex=d,this.label=m=p.text(a.text,0,0,a.useHTML).attr(m).add(),this.axis.chart.styledMode||m.css(a.style));d=c.xBounds||[c[1],c[4],g?c[6]:c[1]];c=c.yBounds||[c[2],c[5],g?c[7]:c[2]];g=E(d);p=E(c);m.align(a,!1,{x:g,y:p,width:G(d)-g,height:G(c)-p});m.show()},destroy:function(){r(this.axis.plotLinesAndBands,this);delete this.axis;c(this)}};a.extend(y.prototype,{getPlotBandPath:function(a,c){var g=this.getPlotLinePath(c,null,null,!0),d=this.getPlotLinePath(a,null,null,!0),m=[],p=this.horiz,b=
+1,l;a=a<this.min&&c<this.min||a>this.max&&c>this.max;if(d&&g)for(a&&(l=d.toString()===g.toString(),b=0),a=0;a<d.length;a+=6)p&&g[a+1]===d[a+1]?(g[a+1]+=b,g[a+4]+=b):p||g[a+2]!==d[a+2]||(g[a+2]+=b,g[a+5]+=b),m.push("M",d[a+1],d[a+2],"L",d[a+4],d[a+5],g[a+4],g[a+5],g[a+1],g[a+2],"z"),m.isFlat=l;return m},addPlotBand:function(a){return this.addPlotBandOrLine(a,"plotBands")},addPlotLine:function(a){return this.addPlotBandOrLine(a,"plotLines")},addPlotBandOrLine:function(c,n){var g=(new a.PlotLineOrBand(this,
+c)).render(),d=this.userOptions;g&&(n&&(d[n]=d[n]||[],d[n].push(c)),this.plotLinesAndBands.push(g));return g},removePlotBandOrLine:function(a){for(var c=this.plotLinesAndBands,g=this.options,d=this.userOptions,m=c.length;m--;)c[m].id===a&&c[m].destroy();[g.plotLines||[],d.plotLines||[],g.plotBands||[],d.plotBands||[]].forEach(function(d){for(m=d.length;m--;)d[m].id===a&&r(d,d[m])})},removePlotBand:function(a){this.removePlotBandOrLine(a)},removePlotLine:function(a){this.removePlotBandOrLine(a)}})})(J,
+V);(function(a){var y=a.doc,G=a.extend,E=a.format,h=a.isNumber,c=a.merge,r=a.pick,u=a.splat,v=a.syncTimeout,w=a.timeUnits;a.Tooltip=function(){this.init.apply(this,arguments)};a.Tooltip.prototype={init:function(a,c){this.chart=a;this.options=c;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.split=c.split&&!a.inverted;this.shared=c.shared||this.split;this.outside=c.outside&&!this.split},cleanSplit:function(a){this.chart.series.forEach(function(c){var d=c&&c.tt;d&&(!d.isActive||a?c.tt=d.destroy():
+d.isActive=!1)})},applyFilter:function(){var a=this.chart;a.renderer.definition({tagName:"filter",id:"drop-shadow-"+a.index,opacity:.5,children:[{tagName:"feGaussianBlur","in":"SourceAlpha",stdDeviation:1},{tagName:"feOffset",dx:1,dy:1},{tagName:"feComponentTransfer",children:[{tagName:"feFuncA",type:"linear",slope:.3}]},{tagName:"feMerge",children:[{tagName:"feMergeNode"},{tagName:"feMergeNode","in":"SourceGraphic"}]}]});a.renderer.definition({tagName:"style",textContent:".highcharts-tooltip-"+a.index+
+"{filter:url(#drop-shadow-"+a.index+")}"})},getLabel:function(){var c=this.chart.renderer,g=this.chart.styledMode,d=this.options,m;this.label||(this.outside&&(this.container=m=a.doc.createElement("div"),m.className="highcharts-tooltip-container",a.css(m,{position:"absolute",top:"1px",pointerEvents:d.style&&d.style.pointerEvents}),a.doc.body.appendChild(m),this.renderer=c=new a.Renderer(m,0,0)),this.split?this.label=c.g("tooltip"):(this.label=c.label("",0,0,d.shape||"callout",null,null,d.useHTML,null,
+"tooltip").attr({padding:d.padding,r:d.borderRadius}),g||this.label.attr({fill:d.backgroundColor,"stroke-width":d.borderWidth}).css(d.style).shadow(d.shadow)),g&&(this.applyFilter(),this.label.addClass("highcharts-tooltip-"+this.chart.index)),this.outside&&(this.label.attr({x:this.distance,y:this.distance}),this.label.xSetter=function(a){m.style.left=a+"px"},this.label.ySetter=function(a){m.style.top=a+"px"}),this.label.attr({zIndex:8}).add());return this.label},update:function(a){this.destroy();
+c(!0,this.chart.options.tooltip.userOptions,a);this.init(this.chart,c(!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());this.renderer&&(this.renderer=this.renderer.destroy(),a.discardElement(this.container));a.clearTimeout(this.hideTimer);a.clearTimeout(this.tooltipTimeout)},move:function(c,g,d,m){var p=this,b=p.now,l=!1!==p.options.animation&&!p.isHidden&&(1<Math.abs(c-b.x)||1<Math.abs(g-
+b.y)),f=p.followPointer||1<p.len;G(b,{x:l?(2*b.x+c)/3:c,y:l?(b.y+g)/2:g,anchorX:f?void 0:l?(2*b.anchorX+d)/3:d,anchorY:f?void 0:l?(b.anchorY+m)/2:m});p.getLabel().attr(b);l&&(a.clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){p&&p.move(c,g,d,m)},32))},hide:function(c){var g=this;a.clearTimeout(this.hideTimer);c=r(c,this.options.hideDelay,500);this.isHidden||(this.hideTimer=v(function(){g.getLabel()[c?"fadeOut":"hide"]();g.isHidden=!0},c))},getAnchor:function(a,c){var d=
+this.chart,g=d.pointer,p=d.inverted,b=d.plotTop,l=d.plotLeft,f=0,x=0,t,h;a=u(a);this.followPointer&&c?(void 0===c.chartX&&(c=g.normalize(c)),a=[c.chartX-d.plotLeft,c.chartY-b]):a[0].tooltipPos?a=a[0].tooltipPos:(a.forEach(function(a){t=a.series.yAxis;h=a.series.xAxis;f+=a.plotX+(!p&&h?h.left-l:0);x+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!p&&t?t.top-b:0)}),f/=a.length,x/=a.length,a=[p?d.plotWidth-x:f,this.shared&&!p&&1<a.length&&c?c.chartY-b:p?d.plotHeight-f:x]);return a.map(Math.round)},getPosition:function(a,
+c,d){var g=this.chart,p=this.distance,b={},l=g.inverted&&d.h||0,f,x=this.outside,t=x?y.documentElement.clientWidth-2*p:g.chartWidth,h=x?Math.max(y.body.scrollHeight,y.documentElement.scrollHeight,y.body.offsetHeight,y.documentElement.offsetHeight,y.documentElement.clientHeight):g.chartHeight,n=g.pointer.chartPosition,z=["y",h,c,(x?n.top-p:0)+d.plotY+g.plotTop,x?0:g.plotTop,x?h:g.plotTop+g.plotHeight],k=["x",t,a,(x?n.left-p:0)+d.plotX+g.plotLeft,x?0:g.plotLeft,x?t:g.plotLeft+g.plotWidth],A=!this.followPointer&&
+r(d.ttBelow,!g.inverted===!!d.negative),D=function(a,e,f,k,d,c){var g=f<k-p,q=k+p+f<e,t=k-p-f;k+=p;if(A&&q)b[a]=k;else if(!A&&g)b[a]=t;else if(g)b[a]=Math.min(c-f,0>t-l?t:t-l);else if(q)b[a]=Math.max(d,k+l+f>e?k:k+l);else return!1},B=function(a,e,f,k){var d;k<p||k>e-p?d=!1:b[a]=k<f/2?1:k>e-f/2?e-f-2:k-f/2;return d},e=function(a){var b=z;z=k;k=b;f=a},q=function(){!1!==D.apply(0,z)?!1!==B.apply(0,k)||f||(e(!0),q()):f?b.x=b.y=0:(e(!0),q())};(g.inverted||1<this.len)&&e();q();return b},defaultFormatter:function(a){var c=
+this.points||u(this),d;d=[a.tooltipFooterHeaderFormatter(c[0])];d=d.concat(a.bodyFormatter(c));d.push(a.tooltipFooterHeaderFormatter(c[0],!0));return d},refresh:function(c,g){var d,m=this.options,p,b=c,l,f={},x=[];d=m.formatter||this.defaultFormatter;var f=this.shared,t,h=this.chart.styledMode;m.enabled&&(a.clearTimeout(this.hideTimer),this.followPointer=u(b)[0].series.tooltipOptions.followPointer,l=this.getAnchor(b,g),g=l[0],p=l[1],!f||b.series&&b.series.noSharedTooltip?f=b.getLabelConfig():(b.forEach(function(a){a.setState("hover");
+x.push(a.getLabelConfig())}),f={x:b[0].category,y:b[0].y},f.points=x,b=b[0]),this.len=x.length,f=d.call(f,this),t=b.series,this.distance=r(t.tooltipOptions.distance,16),!1===f?this.hide():(d=this.getLabel(),this.isHidden&&d.attr({opacity:1}).show(),this.split?this.renderSplit(f,u(c)):(m.style.width&&!h||d.css({width:this.chart.spacingBox.width}),d.attr({text:f&&f.join?f.join(""):f}),d.removeClass(/highcharts-color-[\d]+/g).addClass("highcharts-color-"+r(b.colorIndex,t.colorIndex)),h||d.attr({stroke:m.borderColor||
+b.color||t.color||"#666666"}),this.updatePosition({plotX:g,plotY:p,negative:b.negative,ttBelow:b.ttBelow,h:l[2]||0})),this.isHidden=!1))},renderSplit:function(c,g){var d=this,m=[],p=this.chart,b=p.renderer,l=!0,f=this.options,x=0,t,h=this.getLabel(),n=p.plotTop;a.isString(c)&&(c=[!1,c]);c.slice(0,g.length+1).forEach(function(a,k){if(!1!==a&&""!==a){k=g[k-1]||{isHeader:!0,plotX:g[0].plotX,plotY:p.plotHeight};var c=k.series||d,D=c.tt,B=k.series||{},e="highcharts-color-"+r(k.colorIndex,B.colorIndex,
+"none");D||(D={padding:f.padding,r:f.borderRadius},p.styledMode||(D.fill=f.backgroundColor,D.stroke=f.borderColor||k.color||B.color||"#333333",D["stroke-width"]=f.borderWidth),c.tt=D=b.label(null,null,null,(k.isHeader?f.headerShape:f.shape)||"callout",null,null,f.useHTML).addClass("highcharts-tooltip-box "+e).attr(D).add(h));D.isActive=!0;D.attr({text:a});p.styledMode||D.css(f.style).shadow(f.shadow);a=D.getBBox();B=a.width+D.strokeWidth();k.isHeader?(x=a.height,p.xAxis[0].opposite&&(t=!0,n-=x),B=
+Math.max(0,Math.min(k.plotX+p.plotLeft-B/2,p.chartWidth+(p.scrollablePixels?p.scrollablePixels-p.marginRight:0)-B))):B=k.plotX+p.plotLeft-r(f.distance,16)-B;0>B&&(l=!1);a=(k.series&&k.series.yAxis&&k.series.yAxis.pos)+(k.plotY||0);a-=n;k.isHeader&&(a=t?-x:p.plotHeight+x);m.push({target:a,rank:k.isHeader?1:0,size:c.tt.getBBox().height+1,point:k,x:B,tt:D})}});this.cleanSplit();f.positioner&&m.forEach(function(a){var b=f.positioner.call(d,a.tt.getBBox().width,a.size,a.point);a.x=b.x;a.align=0;a.target=
+b.y;a.rank=r(b.rank,a.rank)});a.distribute(m,p.plotHeight+x);m.forEach(function(a){var b=a.point,d=b.series;a.tt.attr({visibility:void 0===a.pos?"hidden":"inherit",x:l||b.isHeader||f.positioner?a.x:b.plotX+p.plotLeft+r(f.distance,16),y:a.pos+n,anchorX:b.isHeader?b.plotX+p.plotLeft:b.plotX+d.xAxis.pos,anchorY:b.isHeader?p.plotTop+p.plotHeight/2:b.plotY+d.yAxis.pos})})},updatePosition:function(a){var c=this.chart,d=this.getLabel(),m=(this.options.positioner||this.getPosition).call(this,d.width,d.height,
+a),p=a.plotX+c.plotLeft;a=a.plotY+c.plotTop;var b;this.outside&&(b=(this.options.borderWidth||0)+2*this.distance,this.renderer.setSize(d.width+b,d.height+b,!1),p+=c.pointer.chartPosition.left-m.x,a+=c.pointer.chartPosition.top-m.y);this.move(Math.round(m.x),Math.round(m.y||0),p,a)},getDateFormat:function(a,c,d,m){var g=this.chart.time,b=g.dateFormat("%m-%d %H:%M:%S.%L",c),l,f,x={millisecond:15,second:12,minute:9,hour:6,day:3},t="millisecond";for(f in w){if(a===w.week&&+g.dateFormat("%w",c)===d&&"00:00:00.000"===
+b.substr(6)){f="week";break}if(w[f]>a){f=t;break}if(x[f]&&b.substr(x[f])!=="01-01 00:00:00.000".substr(x[f]))break;"week"!==f&&(t=f)}f&&(l=g.resolveDTLFormat(m[f]).main);return l},getXDateFormat:function(a,c,d){c=c.dateTimeLabelFormats;var g=d&&d.closestPointRange;return(g?this.getDateFormat(g,a.x,d.options.startOfWeek,c):c.day)||c.year},tooltipFooterHeaderFormatter:function(a,c){c=c?"footer":"header";var d=a.series,g=d.tooltipOptions,p=g.xDateFormat,b=d.xAxis,l=b&&"datetime"===b.options.type&&h(a.key),
+f=g[c+"Format"];l&&!p&&(p=this.getXDateFormat(a,g,b));l&&p&&(a.point&&a.point.tooltipDateKeys||["key"]).forEach(function(a){f=f.replace("{point."+a+"}","{point."+a+":"+p+"}")});d.chart.styledMode&&(f=this.styledModeFormat(f));return E(f,{point:a,series:d},this.chart.time)},bodyFormatter:function(a){return a.map(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"]||"")})},
+styledModeFormat:function(a){return a.replace('style\x3d"font-size: 10px"','class\x3d"highcharts-header"').replace(/style="color:{(point|series)\.color}"/g,'class\x3d"highcharts-color-{$1.colorIndex}"')}}})(J);(function(a){var y=a.addEvent,G=a.attr,E=a.charts,h=a.color,c=a.css,r=a.defined,u=a.extend,v=a.find,w=a.fireEvent,n=a.isNumber,g=a.isObject,d=a.offset,m=a.pick,p=a.splat,b=a.Tooltip;a.Pointer=function(a,b){this.init(a,b)};a.Pointer.prototype={init:function(a,f){this.options=f;this.chart=a;this.runChartClick=
+f.chart.events&&!!f.chart.events.click;this.pinchDown=[];this.lastValidTouch={};b&&(a.tooltip=new b(a,f.tooltip),this.followTouchMove=m(f.tooltip.followTouchMove,!0));this.setDOMEvents()},zoomOption:function(a){var b=this.chart,d=b.options.chart,l=d.zoomType||"",b=b.inverted;/touch/.test(a.type)&&(l=m(d.pinchType,l));this.zoomX=a=/x/.test(l);this.zoomY=l=/y/.test(l);this.zoomHor=a&&!b||l&&b;this.zoomVert=l&&!b||a&&b;this.hasZoom=a||l},normalize:function(a,b){var f;f=a.touches?a.touches.length?a.touches.item(0):
+a.changedTouches[0]:a;b||(this.chartPosition=b=d(this.chart.container));return u(a,{chartX:Math.round(f.pageX-b.left),chartY:Math.round(f.pageY-b.top)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};this.chart.axes.forEach(function(f){b[f.isXAxis?"xAxis":"yAxis"].push({axis:f,value:f.toValue(a[f.horiz?"chartX":"chartY"])})});return b},findNearestKDPoint:function(a,b,d){var f;a.forEach(function(a){var l=!(a.noSharedTooltip&&b)&&0>a.options.findNearestPointBy.indexOf("y");a=a.searchPoint(d,
+l);if((l=g(a,!0))&&!(l=!g(f,!0)))var l=f.distX-a.distX,c=f.dist-a.dist,k=(a.series.group&&a.series.group.zIndex)-(f.series.group&&f.series.group.zIndex),l=0<(0!==l&&b?l:0!==c?c:0!==k?k:f.series.index>a.series.index?-1:1);l&&(f=a)});return f},getPointFromEvent:function(a){a=a.target;for(var b;a&&!b;)b=a.point,a=a.parentNode;return b},getChartCoordinatesFromPoint:function(a,b){var f=a.series,d=f.xAxis,f=f.yAxis,l=m(a.clientX,a.plotX),c=a.shapeArgs;if(d&&f)return b?{chartX:d.len+d.pos-l,chartY:f.len+
+f.pos-a.plotY}:{chartX:l+d.pos,chartY:a.plotY+f.pos};if(c&&c.x&&c.y)return{chartX:c.x,chartY:c.y}},getHoverData:function(a,b,d,c,p,h,n){var f,l=[],t=n&&n.isBoosting;c=!(!c||!a);n=b&&!b.stickyTracking?[b]:d.filter(function(a){return a.visible&&!(!p&&a.directTouch)&&m(a.options.enableMouseTracking,!0)&&a.stickyTracking});b=(f=c?a:this.findNearestKDPoint(n,p,h))&&f.series;f&&(p&&!b.noSharedTooltip?(n=d.filter(function(a){return a.visible&&!(!p&&a.directTouch)&&m(a.options.enableMouseTracking,!0)&&!a.noSharedTooltip}),
+n.forEach(function(a){var b=v(a.points,function(a){return a.x===f.x&&!a.isNull});g(b)&&(t&&(b=a.getPoint(b)),l.push(b))})):l.push(f));return{hoverPoint:f,hoverSeries:b,hoverPoints:l}},runPointActions:function(b,f){var d=this.chart,c=d.tooltip&&d.tooltip.options.enabled?d.tooltip:void 0,l=c?c.shared:!1,g=f||d.hoverPoint,p=g&&g.series||d.hoverSeries,p=this.getHoverData(g,p,d.series,"touchmove"!==b.type&&(!!f||p&&p.directTouch&&this.isDirectTouch),l,b,{isBoosting:d.isBoosting}),k,g=p.hoverPoint;k=p.hoverPoints;
+f=(p=p.hoverSeries)&&p.tooltipOptions.followPointer;l=l&&p&&!p.noSharedTooltip;if(g&&(g!==d.hoverPoint||c&&c.isHidden)){(d.hoverPoints||[]).forEach(function(a){-1===k.indexOf(a)&&a.setState()});(k||[]).forEach(function(a){a.setState("hover")});if(d.hoverSeries!==p)p.onMouseOver();d.hoverPoint&&d.hoverPoint.firePointEvent("mouseOut");if(!g.series)return;g.firePointEvent("mouseOver");d.hoverPoints=k;d.hoverPoint=g;c&&c.refresh(l?k:g,b)}else f&&c&&!c.isHidden&&(g=c.getAnchor([{}],b),c.updatePosition({plotX:g[0],
+plotY:g[1]}));this.unDocMouseMove||(this.unDocMouseMove=y(d.container.ownerDocument,"mousemove",function(b){var f=E[a.hoverChartIndex];if(f)f.pointer.onDocumentMouseMove(b)}));d.axes.forEach(function(f){var d=m(f.crosshair.snap,!0),c=d?a.find(k,function(a){return a.series[f.coll]===f}):void 0;c||!d?f.drawCrosshair(b,c):f.hideCrosshair()})},reset:function(a,b){var f=this.chart,d=f.hoverSeries,c=f.hoverPoint,l=f.hoverPoints,g=f.tooltip,k=g&&g.shared?l:c;a&&k&&p(k).forEach(function(b){b.series.isCartesian&&
+void 0===b.plotX&&(a=!1)});if(a)g&&k&&k.length&&(g.refresh(k),g.shared&&l?l.forEach(function(a){a.setState(a.state,!0);a.series.isCartesian&&(a.series.xAxis.crosshair&&a.series.xAxis.drawCrosshair(null,a),a.series.yAxis.crosshair&&a.series.yAxis.drawCrosshair(null,a))}):c&&(c.setState(c.state,!0),f.axes.forEach(function(a){a.crosshair&&a.drawCrosshair(null,c)})));else{if(c)c.onMouseOut();l&&l.forEach(function(a){a.setState()});if(d)d.onMouseOut();g&&g.hide(b);this.unDocMouseMove&&(this.unDocMouseMove=
+this.unDocMouseMove());f.axes.forEach(function(a){a.hideCrosshair()});this.hoverX=f.hoverPoints=f.hoverPoint=null}},scaleGroups:function(a,b){var f=this.chart,d;f.series.forEach(function(c){d=a||c.getPlotBox();c.xAxis&&c.xAxis.zoomEnabled&&c.group&&(c.group.attr(d),c.markerGroup&&(c.markerGroup.attr(d),c.markerGroup.clip(b?f.clipRect:null)),c.dataLabelsGroup&&c.dataLabelsGroup.attr(d))});f.clipRect.attr(b||f.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,d=b.options.chart,c=a.chartX,l=a.chartY,g=this.zoomHor,p=this.zoomVert,k=b.plotLeft,m=b.plotTop,D=b.plotWidth,B=b.plotHeight,e,q=this.selectionMarker,n=this.mouseDownX,r=this.mouseDownY,u=d.panKey&&a[d.panKey+"Key"];q&&q.touch||(c<k?c=k:c>k+D&&(c=k+D),l<m?l=m:l>m+B&&(l=m+B),this.hasDragged=Math.sqrt(Math.pow(n-c,2)+Math.pow(r-l,2)),10<this.hasDragged&&(e=b.isInsidePlot(n-k,r-m),b.hasCartesianSeries&&
+(this.zoomX||this.zoomY)&&e&&!u&&!q&&(this.selectionMarker=q=b.renderer.rect(k,m,g?1:D,p?1:B,0).attr({"class":"highcharts-selection-marker",zIndex:7}).add(),b.styledMode||q.attr({fill:d.selectionMarkerFill||h("#335cad").setOpacity(.25).get()})),q&&g&&(c-=n,q.attr({width:Math.abs(c),x:(0<c?0:c)+n})),q&&p&&(c=l-r,q.attr({height:Math.abs(c),y:(0<c?0:c)+r})),e&&!q&&d.panning&&b.pan(a,d.panning)))},drop:function(a){var b=this,d=this.chart,l=this.hasPinched;if(this.selectionMarker){var g={originalEvent:a,
+xAxis:[],yAxis:[]},p=this.selectionMarker,m=p.attr?p.attr("x"):p.x,k=p.attr?p.attr("y"):p.y,A=p.attr?p.attr("width"):p.width,D=p.attr?p.attr("height"):p.height,h;if(this.hasDragged||l)d.axes.forEach(function(e){if(e.zoomEnabled&&r(e.min)&&(l||b[{xAxis:"zoomX",yAxis:"zoomY"}[e.coll]])){var f=e.horiz,d="touchend"===a.type?e.minPixelPadding:0,c=e.toValue((f?m:k)+d),f=e.toValue((f?m+A:k+D)-d);g[e.coll].push({axis:e,min:Math.min(c,f),max:Math.max(c,f)});h=!0}}),h&&w(d,"selection",g,function(a){d.zoom(u(a,
+l?{animation:!1}:null))});n(d.index)&&(this.selectionMarker=this.selectionMarker.destroy());l&&this.scaleGroups()}d&&n(d.index)&&(c(d.container,{cursor:d._cursor}),d.cancelClick=10<this.hasDragged,d.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[])},onContainerMouseDown:function(a){a=this.normalize(a);2!==a.button&&(this.zoomOption(a),a.preventDefault&&a.preventDefault(),this.dragStart(a))},onDocumentMouseUp:function(b){E[a.hoverChartIndex]&&E[a.hoverChartIndex].pointer.drop(b)},onDocumentMouseMove:function(a){var b=
+this.chart,d=this.chartPosition;a=this.normalize(a,d);!d||this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)||this.reset()},onContainerMouseLeave:function(b){var f=E[a.hoverChartIndex];f&&(b.relatedTarget||b.toElement)&&(f.pointer.reset(),f.pointer.chartPosition=null)},onContainerMouseMove:function(b){var f=this.chart;r(a.hoverChartIndex)&&E[a.hoverChartIndex]&&E[a.hoverChartIndex].mouseIsDown||(a.hoverChartIndex=f.index);b=this.normalize(b);b.returnValue=
+!1;"mousedown"===f.mouseIsDown&&this.drag(b);!this.inClass(b.target,"highcharts-tracker")&&!f.isInsidePlot(b.chartX-f.plotLeft,b.chartY-f.plotTop)||f.openMenu||this.runPointActions(b)},inClass:function(a,b){for(var f;a;){if(f=G(a,"class")){if(-1!==f.indexOf(b))return!0;if(-1!==f.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,d=b.hoverPoint,c=b.plotLeft,l=b.plotTop;a=this.normalize(a);b.cancelClick||(d&&this.inClass(a.target,"highcharts-tracker")?(w(d.series,"click",u(a,{point:d})),b.hoverPoint&&d.firePointEvent("click",a)):(u(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-c,a.chartY-l)&&w(b,"click",a)))},setDOMEvents:function(){var b=this,f=b.chart.container,d=f.ownerDocument;
+f.onmousedown=function(a){b.onContainerMouseDown(a)};f.onmousemove=function(a){b.onContainerMouseMove(a)};f.onclick=function(a){b.onContainerClick(a)};this.unbindContainerMouseLeave=y(f,"mouseleave",b.onContainerMouseLeave);a.unbindDocumentMouseUp||(a.unbindDocumentMouseUp=y(d,"mouseup",b.onDocumentMouseUp));a.hasTouch&&(f.ontouchstart=function(a){b.onContainerTouchStart(a)},f.ontouchmove=function(a){b.onContainerTouchMove(a)},a.unbindDocumentTouchEnd||(a.unbindDocumentTouchEnd=y(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,d){b[d]=null})}}})(J);(function(a){var y=a.charts,G=a.extend,E=a.noop,h=a.pick;G(a.Pointer.prototype,{pinchTranslate:function(a,h,u,v,w,n){this.zoomHor&&this.pinchTranslateDirection(!0,
+a,h,u,v,w,n);this.zoomVert&&this.pinchTranslateDirection(!1,a,h,u,v,w,n)},pinchTranslateDirection:function(a,h,u,v,w,n,g,d){var c=this.chart,p=a?"x":"y",b=a?"X":"Y",l="chart"+b,f=a?"width":"height",x=c["plot"+(a?"Left":"Top")],t,r,F=d||1,z=c.inverted,k=c.bounds[a?"h":"v"],A=1===h.length,D=h[0][l],B=u[0][l],e=!A&&h[1][l],q=!A&&u[1][l],L;u=function(){!A&&20<Math.abs(D-e)&&(F=d||Math.abs(B-q)/Math.abs(D-e));r=(x-B)/F+D;t=c["plot"+(a?"Width":"Height")]/F};u();h=r;h<k.min?(h=k.min,L=!0):h+t>k.max&&(h=
+k.max-t,L=!0);L?(B-=.8*(B-g[p][0]),A||(q-=.8*(q-g[p][1])),u()):g[p]=[B,q];z||(n[p]=r-x,n[f]=t);n=z?1/F:F;w[f]=t;w[p]=h;v[z?a?"scaleY":"scaleX":"scale"+b]=F;v["translate"+b]=n*x+(B-n*D)},pinch:function(a){var c=this,u=c.chart,v=c.pinchDown,w=a.touches,n=w.length,g=c.lastValidTouch,d=c.hasZoom,m=c.selectionMarker,p={},b=1===n&&(c.inClass(a.target,"highcharts-tracker")&&u.runTrackerClick||c.runChartClick),l={};1<n&&(c.initiated=!0);d&&c.initiated&&!b&&a.preventDefault();[].map.call(w,function(a){return c.normalize(a)});
+"touchstart"===a.type?([].forEach.call(w,function(a,b){v[b]={chartX:a.chartX,chartY:a.chartY}}),g.x=[v[0].chartX,v[1]&&v[1].chartX],g.y=[v[0].chartY,v[1]&&v[1].chartY],u.axes.forEach(function(a){if(a.zoomEnabled){var b=u.bounds[a.horiz?"h":"v"],f=a.minPixelPadding,d=a.toPixels(h(a.options.min,a.dataMin)),c=a.toPixels(h(a.options.max,a.dataMax)),l=Math.max(d,c);b.min=Math.min(a.pos,Math.min(d,c)-f);b.max=Math.max(a.pos+a.len,l+f)}}),c.res=!0):c.followTouchMove&&1===n?this.runPointActions(c.normalize(a)):
+v.length&&(m||(c.selectionMarker=m=G({destroy:E,touch:!0},u.plotBox)),c.pinchTranslate(v,w,p,m,l,g),c.hasPinched=d,c.scaleGroups(p,l),c.res&&(c.res=!1,this.reset(!1,0)))},touch:function(c,r){var u=this.chart,v,w;if(u.index!==a.hoverChartIndex)this.onContainerMouseLeave({relatedTarget:!0});a.hoverChartIndex=u.index;1===c.touches.length?(c=this.normalize(c),(w=u.isInsidePlot(c.chartX-u.plotLeft,c.chartY-u.plotTop))&&!u.openMenu?(r&&this.runPointActions(c),"touchmove"===c.type&&(r=this.pinchDown,v=r[0]?
+4<=Math.sqrt(Math.pow(r[0].chartX-c.chartX,2)+Math.pow(r[0].chartY-c.chartY,2)):!1),h(v,!0)&&this.pinch(c)):r&&this.reset()):2===c.touches.length&&this.pinch(c)},onContainerTouchStart:function(a){this.zoomOption(a);this.touch(a,!0)},onContainerTouchMove:function(a){this.touch(a)},onDocumentTouchEnd:function(c){y[a.hoverChartIndex]&&y[a.hoverChartIndex].pointer.drop(c)}})})(J);(function(a){var y=a.addEvent,G=a.charts,E=a.css,h=a.doc,c=a.extend,r=a.noop,u=a.Pointer,v=a.removeEvent,w=a.win,n=a.wrap;
+if(!a.hasTouch&&(w.PointerEvent||w.MSPointerEvent)){var g={},d=!!w.PointerEvent,m=function(){var b=[];b.item=function(a){return this[a]};a.objectEach(g,function(a){b.push({pageX:a.pageX,pageY:a.pageY,target:a.target})});return b},p=function(b,d,f,c){"touch"!==b.pointerType&&b.pointerType!==b.MSPOINTER_TYPE_TOUCH||!G[a.hoverChartIndex]||(c(b),c=G[a.hoverChartIndex].pointer,c[d]({type:f,target:b.currentTarget,preventDefault:r,touches:m()}))};c(u.prototype,{onContainerPointerDown:function(a){p(a,"onContainerTouchStart",
+"touchstart",function(a){g[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){p(a,"onContainerTouchMove","touchmove",function(a){g[a.pointerId]={pageX:a.pageX,pageY:a.pageY};g[a.pointerId].target||(g[a.pointerId].target=a.currentTarget)})},onDocumentPointerUp:function(a){p(a,"onDocumentTouchEnd","touchend",function(a){delete g[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,d?"pointerdown":"MSPointerDown",this.onContainerPointerDown);
+a(this.chart.container,d?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(h,d?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}});n(u.prototype,"init",function(a,d,f){a.call(this,d,f);this.hasZoom&&E(d.container,{"-ms-touch-action":"none","touch-action":"none"})});n(u.prototype,"setDOMEvents",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(y)});n(u.prototype,"destroy",function(a){this.batchMSEvents(v);a.call(this)})}})(J);(function(a){var y=a.addEvent,
+G=a.css,E=a.discardElement,h=a.defined,c=a.fireEvent,r=a.isFirefox,u=a.marginNames,v=a.merge,w=a.pick,n=a.setAnimation,g=a.stableSort,d=a.win,m=a.wrap;a.Legend=function(a,b){this.init(a,b)};a.Legend.prototype={init:function(a,b){this.chart=a;this.setOptions(b);b.enabled&&(this.render(),y(this.chart,"endResize",function(){this.legend.positionCheckboxes()}),this.proximate?this.unchartrender=y(this.chart,"render",function(){this.legend.proximatePositions();this.legend.positionItems()}):this.unchartrender&&
+this.unchartrender())},setOptions:function(a){var b=w(a.padding,8);this.options=a;this.chart.styledMode||(this.itemStyle=a.itemStyle,this.itemHiddenStyle=v(this.itemStyle,a.itemHiddenStyle));this.itemMarginTop=a.itemMarginTop||0;this.padding=b;this.initialItemY=b-5;this.symbolWidth=w(a.symbolWidth,16);this.pages=[];this.proximate="proximate"===a.layout&&!this.chart.inverted},update:function(a,b){var d=this.chart;this.setOptions(v(!0,this.options,a));this.destroy();d.isDirtyLegend=d.isDirtyBox=!0;
+w(b,!0)&&d.redraw();c(this,"afterUpdate")},colorizeItem:function(a,b){a.legendGroup[b?"removeClass":"addClass"]("highcharts-legend-item-hidden");if(!this.chart.styledMode){var d=this.options,f=a.legendItem,g=a.legendLine,p=a.legendSymbol,m=this.itemHiddenStyle.color,d=b?d.itemStyle.color:m,h=b?a.color||m:m,n=a.options&&a.options.marker,k={fill:h};f&&f.css({fill:d,color:d});g&&g.attr({stroke:h});p&&(n&&p.isMarker&&(k=a.pointAttribs(),b||(k.stroke=k.fill=m)),p.attr(k))}c(this,"afterColorizeItem",{item:a,
+visible:b})},positionItems:function(){this.allItems.forEach(this.positionItem,this);this.chart.isResizing||this.positionCheckboxes()},positionItem:function(a){var b=this.options,d=b.symbolPadding,b=!b.rtl,f=a._legendItemPos,c=f[0],f=f[1],g=a.checkbox;if((a=a.legendGroup)&&a.element)a[h(a.translateY)?"animate":"attr"]({translateX:b?c:this.legendWidth-c-2*d-4,translateY:f});g&&(g.x=c,g.y=f)},destroyItem:function(a){var b=a.checkbox;["legendItem","legendLine","legendSymbol","legendGroup"].forEach(function(b){a[b]&&
+(a[b]=a[b].destroy())});b&&E(a.checkbox)},destroy:function(){function a(a){this[a]&&(this[a]=this[a].destroy())}this.getAllItems().forEach(function(b){["legendItem","legendGroup"].forEach(a,b)});"clipRect up down pager nav box title group".split(" ").forEach(a,this);this.display=null},positionCheckboxes:function(){var a=this.group&&this.group.alignAttr,b,d=this.clipHeight||this.legendHeight,f=this.titleHeight;a&&(b=a.translateY,this.allItems.forEach(function(c){var g=c.checkbox,l;g&&(l=b+f+g.y+(this.scrollOffset||
+0)+3,G(g,{left:a.translateX+c.checkboxOffset+g.x-20+"px",top:l+"px",display:this.proximate||l>b-6&&l<b+d-6?"":"none"}))},this))},renderTitle:function(){var a=this.options,b=this.padding,d=a.title,f=0;d.text&&(this.title||(this.title=this.chart.renderer.label(d.text,b-3,b-4,null,null,null,a.useHTML,null,"legend-title").attr({zIndex:1}),this.chart.styledMode||this.title.css(d.style),this.title.add(this.group)),a=this.title.getBBox(),f=a.height,this.offsetWidth=a.width,this.contentGroup.attr({translateY:f}));
+this.titleHeight=f},setText:function(d){var b=this.options;d.legendItem.attr({text:b.labelFormat?a.format(b.labelFormat,d,this.chart.time):b.labelFormatter.call(d)})},renderItem:function(a){var b=this.chart,d=b.renderer,f=this.options,c=this.symbolWidth,g=f.symbolPadding,p=this.itemStyle,m=this.itemHiddenStyle,h="horizontal"===f.layout?w(f.itemDistance,20):0,k=!f.rtl,A=a.legendItem,D=!a.series,B=!D&&a.series.drawLegendSymbol?a.series:a,e=B.options,e=this.createCheckboxForItem&&e&&e.showCheckbox,h=
+c+g+h+(e?20:0),q=f.useHTML,n=a.options.className;A||(a.legendGroup=d.g("legend-item").addClass("highcharts-"+B.type+"-series highcharts-color-"+a.colorIndex+(n?" "+n:"")+(D?" highcharts-series-"+a.index:"")).attr({zIndex:1}).add(this.scrollGroup),a.legendItem=A=d.text("",k?c+g:-g,this.baseline||0,q),b.styledMode||A.css(v(a.visible?p:m)),A.attr({align:k?"left":"right",zIndex:2}).add(a.legendGroup),this.baseline||(this.fontMetrics=d.fontMetrics(b.styledMode?12:p.fontSize,A),this.baseline=this.fontMetrics.f+
+3+this.itemMarginTop,A.attr("y",this.baseline)),this.symbolHeight=f.symbolHeight||this.fontMetrics.f,B.drawLegendSymbol(this,a),this.setItemEvents&&this.setItemEvents(a,A,q),e&&this.createCheckboxForItem(a));this.colorizeItem(a,a.visible);!b.styledMode&&p.width||A.css({width:(f.itemWidth||f.width||b.spacingBox.width)-h});this.setText(a);b=A.getBBox();a.itemWidth=a.checkboxOffset=f.itemWidth||a.legendItemWidth||b.width+h;this.maxItemWidth=Math.max(this.maxItemWidth,a.itemWidth);this.totalItemWidth+=
+a.itemWidth;this.itemHeight=a.itemHeight=Math.round(a.legendItemHeight||b.height||this.symbolHeight)},layoutItem:function(a){var b=this.options,d=this.padding,f="horizontal"===b.layout,c=a.itemHeight,g=b.itemMarginBottom||0,p=this.itemMarginTop,m=f?w(b.itemDistance,20):0,h=b.width,k=h||this.chart.spacingBox.width-2*d-b.x,b=b.alignColumns&&this.totalItemWidth>k?this.maxItemWidth:a.itemWidth;f&&this.itemX-d+b>k&&(this.itemX=d,this.itemY+=p+this.lastLineHeight+g,this.lastLineHeight=0);this.lastItemY=
+p+this.itemY+g;this.lastLineHeight=Math.max(c,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];f?this.itemX+=b:(this.itemY+=p+c+g,this.lastLineHeight=c);this.offsetWidth=h||Math.max((f?this.itemX-d-(a.checkbox?0:m):b)+d,this.offsetWidth)},getAllItems:function(){var a=[];this.chart.series.forEach(function(b){var d=b&&b.options;b&&w(d.showInLegend,h(d.linkedTo)?!1:void 0,!0)&&(a=a.concat(b.legendItems||("point"===d.legendType?b.data:b)))});c(this,"afterGetAllItems",{allItems:a});return a},
+getAlignment:function(){var a=this.options;return this.proximate?a.align.charAt(0)+"tv":a.floating?"":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)},adjustMargins:function(a,b){var d=this.chart,f=this.options,c=this.getAlignment();c&&[/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/].forEach(function(g,l){g.test(c)&&!h(a[l])&&(d[u[l]]=Math.max(d[u[l]],d.legend[(l+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][l]*f[l%2?"x":"y"]+w(f.margin,12)+b[l]+(0===l&&void 0!==d.options.title.margin?
+d.titleOffset+d.options.title.margin:0)))})},proximatePositions:function(){var d=this.chart,b=[],c="left"===this.options.align;this.allItems.forEach(function(f){var g,l;g=c;f.xAxis&&f.points&&(f.xAxis.options.reversed&&(g=!g),g=a.find(g?f.points:f.points.slice(0).reverse(),function(b){return a.isNumber(b.plotY)}),l=f.legendGroup.getBBox().height,b.push({target:f.visible?(g?g.plotY:f.xAxis.height)-.3*l:d.plotHeight,size:l,item:f}))},this);a.distribute(b,d.plotHeight);b.forEach(function(a){a.item._legendItemPos[1]=
+d.plotTop-d.spacing[0]+a.pos})},render:function(){var a=this.chart,b=a.renderer,d=this.group,f,c,m,h=this.box,n=this.options,z=this.padding;this.itemX=z;this.itemY=this.initialItemY;this.lastItemY=this.offsetWidth=0;d||(this.group=d=b.g("legend").attr({zIndex:7}).add(),this.contentGroup=b.g().attr({zIndex:1}).add(d),this.scrollGroup=b.g().add(this.contentGroup));this.renderTitle();f=this.getAllItems();g(f,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||
+0)});n.reversed&&f.reverse();this.allItems=f;this.display=c=!!f.length;this.itemHeight=this.totalItemWidth=this.maxItemWidth=this.lastLineHeight=0;f.forEach(this.renderItem,this);f.forEach(this.layoutItem,this);f=(n.width||this.offsetWidth)+z;m=this.lastItemY+this.lastLineHeight+this.titleHeight;m=this.handleOverflow(m);m+=z;h||(this.box=h=b.rect().addClass("highcharts-legend-box").attr({r:n.borderRadius}).add(d),h.isNew=!0);a.styledMode||h.attr({stroke:n.borderColor,"stroke-width":n.borderWidth||
+0,fill:n.backgroundColor||"none"}).shadow(n.shadow);0<f&&0<m&&(h[h.isNew?"attr":"animate"](h.crisp.call({},{x:0,y:0,width:f,height:m},h.strokeWidth())),h.isNew=!1);h[c?"show":"hide"]();a.styledMode&&"none"===d.getStyle("display")&&(f=m=0);this.legendWidth=f;this.legendHeight=m;c&&(b=a.spacingBox,/(lth|ct|rth)/.test(this.getAlignment())&&(b=v(b,{y:b.y+a.titleOffset+a.options.title.margin})),d.align(v(n,{width:f,height:m,verticalAlign:this.proximate?"top":n.verticalAlign}),!0,b));this.proximate||this.positionItems()},
+handleOverflow:function(a){var b=this,d=this.chart,f=d.renderer,c=this.options,g=c.y,m=this.padding,g=d.spacingBox.height+("top"===c.verticalAlign?-g:g)-m,p=c.maxHeight,h,k=this.clipRect,A=c.navigation,D=w(A.animation,!0),n=A.arrowSize||12,e=this.nav,q=this.pages,r,u=this.allItems,v=function(a){"number"===typeof a?k.attr({height:a}):k&&(b.clipRect=k.destroy(),b.contentGroup.clip());b.contentGroup.div&&(b.contentGroup.div.style.clip=a?"rect("+m+"px,9999px,"+(m+a)+"px,0)":"auto")};"horizontal"!==c.layout||
+"middle"===c.verticalAlign||c.floating||(g/=2);p&&(g=Math.min(g,p));q.length=0;a>g&&!1!==A.enabled?(this.clipHeight=h=Math.max(g-20-this.titleHeight-m,0),this.currentPage=w(this.currentPage,1),this.fullHeight=a,u.forEach(function(a,b){var e=a._legendItemPos[1],d=Math.round(a.legendItem.getBBox().height),f=q.length;if(!f||e-q[f-1]>h&&(r||e)!==q[f-1])q.push(r||e),f++;a.pageIx=f-1;r&&(u[b-1].pageIx=f-1);b===u.length-1&&e+d-q[f-1]>h&&e!==r&&(q.push(e),a.pageIx=f);e!==r&&(r=e)}),k||(k=b.clipRect=f.clipRect(0,
+m,9999,0),b.contentGroup.clip(k)),v(h),e||(this.nav=e=f.g().attr({zIndex:1}).add(this.group),this.up=f.symbol("triangle",0,0,n,n).on("click",function(){b.scroll(-1,D)}).add(e),this.pager=f.text("",15,10).addClass("highcharts-legend-navigation"),d.styledMode||this.pager.css(A.style),this.pager.add(e),this.down=f.symbol("triangle-down",0,0,n,n).on("click",function(){b.scroll(1,D)}).add(e)),b.scroll(0),a=g):e&&(v(),this.nav=e.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a},
+scroll:function(a,b){var d=this.pages,f=d.length;a=this.currentPage+a;var c=this.clipHeight,g=this.options.navigation,m=this.pager,p=this.padding;a>f&&(a=f);0<a&&(void 0!==b&&n(b,this.chart),this.nav.attr({translateX:p,translateY:c+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({"class":1===a?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"}),m.attr({text:a+"/"+f}),this.down.attr({x:18+this.pager.getBBox().width,"class":a===f?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"}),
+this.chart.styledMode||(this.up.attr({fill:1===a?g.inactiveColor:g.activeColor}).css({cursor:1===a?"default":"pointer"}),this.down.attr({fill:a===f?g.inactiveColor:g.activeColor}).css({cursor:a===f?"default":"pointer"})),this.scrollOffset=-d[a-1]+this.initialItemY,this.scrollGroup.animate({translateY:this.scrollOffset}),this.currentPage=a,this.positionCheckboxes())}};a.LegendSymbolMixin={drawRectangle:function(a,b){var d=a.symbolHeight,f=a.options.squareSymbol;b.legendSymbol=this.chart.renderer.rect(f?
+(a.symbolWidth-d)/2:0,a.baseline-d+1,f?d:a.symbolWidth,d,w(a.options.symbolRadius,d/2)).addClass("highcharts-point").attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,d=b.marker,f=a.symbolWidth,c=a.symbolHeight,g=c/2,m=this.chart.renderer,p=this.legendGroup;a=a.baseline-Math.round(.3*a.fontMetrics.b);var h={};this.chart.styledMode||(h={"stroke-width":b.lineWidth||0},b.dashStyle&&(h.dashstyle=b.dashStyle));this.legendLine=m.path(["M",0,a,"L",f,a]).addClass("highcharts-graph").attr(h).add(p);
+d&&!1!==d.enabled&&f&&(b=Math.min(w(d.radius,g),g),0===this.symbol.indexOf("url")&&(d=v(d,{width:c,height:c}),b=0),this.legendSymbol=d=m.symbol(this.symbol,f/2-b,a-b,2*b,2*b,d).addClass("highcharts-point").add(p),d.isMarker=!0)}};(/Trident\/7\.0/.test(d.navigator.userAgent)||r)&&m(a.Legend.prototype,"positionItem",function(a,b){var d=this,f=function(){b._legendItemPos&&a.call(d,b)};f();d.bubbleLegend||setTimeout(f)})})(J);(function(a){var y=a.addEvent,G=a.animate,E=a.animObject,h=a.attr,c=a.doc,r=
+a.Axis,u=a.createElement,v=a.defaultOptions,w=a.discardElement,n=a.charts,g=a.css,d=a.defined,m=a.extend,p=a.find,b=a.fireEvent,l=a.isNumber,f=a.isObject,x=a.isString,t=a.Legend,H=a.marginNames,F=a.merge,z=a.objectEach,k=a.Pointer,A=a.pick,D=a.pInt,B=a.removeEvent,e=a.seriesTypes,q=a.splat,L=a.syncTimeout,I=a.win,R=a.Chart=function(){this.getArgs.apply(this,arguments)};a.chart=function(a,b,e){return new R(a,b,e)};m(R.prototype,{callbacks:[],getArgs:function(){var a=[].slice.call(arguments);if(x(a[0])||
+a[0].nodeName)this.renderTo=a.shift();this.init(a[0],a[1])},init:function(e,d){var f,k,c=e.series,g=e.plotOptions||{};b(this,"init",{args:arguments},function(){e.series=null;f=F(v,e);for(k in f.plotOptions)f.plotOptions[k].tooltip=g[k]&&F(g[k].tooltip)||void 0;f.tooltip.userOptions=e.chart&&e.chart.forExport&&e.tooltip.userOptions||e.tooltip;f.series=e.series=c;this.userOptions=e;var q=f.chart,l=q.events;this.margin=[];this.spacing=[];this.bounds={h:{},v:{}};this.labelCollectors=[];this.callback=
+d;this.isResizing=0;this.options=f;this.axes=[];this.series=[];this.time=e.time&&Object.keys(e.time).length?new a.Time(e.time):a.time;this.styledMode=q.styledMode;this.hasCartesianSeries=q.showAxes;var m=this;m.index=n.length;n.push(m);a.chartCount++;l&&z(l,function(a,b){y(m,b,a)});m.xAxis=[];m.yAxis=[];m.pointCount=m.colorCounter=m.symbolCounter=0;b(m,"afterInit");m.firstRender()})},initSeries:function(b){var d=this.options.chart;(d=e[b.type||d.type||d.defaultSeriesType])||a.error(17,!0,this);d=
+new d;d.init(this,b);return d},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].getName())},isInsidePlot:function(a,b,e){var d=e?b:a;a=e?a:b;return 0<=d&&d<=this.plotWidth&&0<=a&&a<=this.plotHeight},redraw:function(e){b(this,"beforeRedraw");var d=this.axes,f=this.series,k=this.pointer,c=this.legend,g=this.userOptions.legend,q=this.isDirtyLegend,l,p,A=this.hasCartesianSeries,h=this.isDirtyBox,D,t=this.renderer,n=t.isHidden(),B=[];this.setResponsive&&
+this.setResponsive(!1);a.setAnimation(e,this);n&&this.temporaryDisplay();this.layOutTitles();for(e=f.length;e--;)if(D=f[e],D.options.stacking&&(l=!0,D.isDirty)){p=!0;break}if(p)for(e=f.length;e--;)D=f[e],D.options.stacking&&(D.isDirty=!0);f.forEach(function(a){a.isDirty&&("point"===a.options.legendType?(a.updateTotals&&a.updateTotals(),q=!0):g&&(g.labelFormatter||g.labelFormat)&&(q=!0));a.isDirtyData&&b(a,"updatedData")});q&&c&&c.options.enabled&&(c.render(),this.isDirtyLegend=!1);l&&this.getStacks();
+A&&d.forEach(function(a){a.updateNames();a.updateYNames&&a.updateYNames();a.setScale()});this.getMargins();A&&(d.forEach(function(a){a.isDirty&&(h=!0)}),d.forEach(function(a){var e=a.min+","+a.max;a.extKey!==e&&(a.extKey=e,B.push(function(){b(a,"afterSetExtremes",m(a.eventArgs,a.getExtremes()));delete a.eventArgs}));(h||l)&&a.redraw()}));h&&this.drawChartBox();b(this,"predraw");f.forEach(function(a){(h||a.isDirty)&&a.visible&&a.redraw();a.isDirtyData=!1});k&&k.reset(!0);t.draw();b(this,"redraw");
+b(this,"render");n&&this.temporaryDisplay(!0);B.forEach(function(a){a.call()})},get:function(a){function b(b){return b.id===a||b.options&&b.options.id===a}var e,d=this.series,f;e=p(this.axes,b)||p(this.series,b);for(f=0;!e&&f<d.length;f++)e=p(d[f].points||[],b);return e},getAxes:function(){var a=this,e=this.options,d=e.xAxis=q(e.xAxis||{}),e=e.yAxis=q(e.yAxis||{});b(this,"getAxes");d.forEach(function(a,b){a.index=b;a.isX=!0});e.forEach(function(a,b){a.index=b});d.concat(e).forEach(function(b){new r(a,
+b)});b(this,"afterGetAxes")},getSelectedPoints:function(){var a=[];this.series.forEach(function(b){a=a.concat((b.data||[]).filter(function(a){return a.selected}))});return a},getSelectedSeries:function(){return this.series.filter(function(a){return a.selected})},setTitle:function(a,b,e){var d=this,f=d.options,k=d.styledMode,c;c=f.title=F(!k&&{style:{color:"#333333",fontSize:f.isStock?"16px":"18px"}},f.title,a);f=f.subtitle=F(!k&&{style:{color:"#666666"}},f.subtitle,b);[["title",a,c],["subtitle",b,
+f]].forEach(function(a,b){var e=a[0],f=d[e],c=a[1];a=a[2];f&&c&&(d[e]=f=f.destroy());a&&!f&&(d[e]=d.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,"class":"highcharts-"+e,zIndex:a.zIndex||4}).add(),d[e].update=function(a){d.setTitle(!b&&a,b&&a)},k||d[e].css(a.style))});d.layOutTitles(e)},layOutTitles:function(a){var b=0,e,d=this.renderer,f=this.spacingBox;["title","subtitle"].forEach(function(a){var e=this[a],k=this.options[a];a="title"===a?-3:k.verticalAlign?0:b+2;var c;e&&(this.styledMode||
+(c=k.style.fontSize),c=d.fontMetrics(c,e).b,e.css({width:(k.width||f.width+k.widthAdjust)+"px"}).align(m({y:a+c},k),!1,"spacingBox"),k.floating||k.verticalAlign||(b=Math.ceil(b+e.getBBox(k.useHTML).height)))},this);e=this.titleOffset!==b;this.titleOffset=b;!this.isDirtyBox&&e&&(this.isDirtyBox=this.isDirtyLegend=e,this.hasRendered&&A(a,!0)&&this.isDirtyBox&&this.redraw())},getChartSize:function(){var b=this.options.chart,e=b.width,b=b.height,f=this.renderTo;d(e)||(this.containerWidth=a.getStyle(f,
+"width"));d(b)||(this.containerHeight=a.getStyle(f,"height"));this.chartWidth=Math.max(0,e||this.containerWidth||600);this.chartHeight=Math.max(0,a.relativeLength(b,this.chartWidth)||(1<this.containerHeight?this.containerHeight:400))},temporaryDisplay:function(b){var e=this.renderTo;if(b)for(;e&&e.style;)e.hcOrigStyle&&(a.css(e,e.hcOrigStyle),delete e.hcOrigStyle),e.hcOrigDetached&&(c.body.removeChild(e),e.hcOrigDetached=!1),e=e.parentNode;else for(;e&&e.style;){c.body.contains(e)||e.parentNode||
+(e.hcOrigDetached=!0,c.body.appendChild(e));if("none"===a.getStyle(e,"display",!1)||e.hcOricDetached)e.hcOrigStyle={display:e.style.display,height:e.style.height,overflow:e.style.overflow},b={display:"block",overflow:"hidden"},e!==this.renderTo&&(b.height=0),a.css(e,b),e.offsetWidth||e.style.setProperty("display","block","important");e=e.parentNode;if(e===c.body)break}},setClassName:function(a){this.container.className="highcharts-container "+(a||"")},getContainer:function(){var e,d=this.options,
+f=d.chart,k,q;e=this.renderTo;var p=a.uniqueKey(),A,t;e||(this.renderTo=e=f.renderTo);x(e)&&(this.renderTo=e=c.getElementById(e));e||a.error(13,!0,this);k=D(h(e,"data-highcharts-chart"));l(k)&&n[k]&&n[k].hasRendered&&n[k].destroy();h(e,"data-highcharts-chart",this.index);e.innerHTML="";f.skipClone||e.offsetWidth||this.temporaryDisplay();this.getChartSize();k=this.chartWidth;q=this.chartHeight;g(e,{overflow:"hidden"});this.styledMode||(A=m({position:"relative",overflow:"hidden",width:k+"px",height:q+
+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},f.style));this.container=e=u("div",{id:p},A,e);this._cursor=e.style.cursor;this.renderer=new (a[f.renderer]||a.Renderer)(e,k,q,null,f.forExport,d.exporting&&d.exporting.allowHTML,this.styledMode);this.setClassName(f.className);if(this.styledMode)for(t in d.defs)this.renderer.definition(d.defs[t]);else this.renderer.setStyle(f.style);this.renderer.chartIndex=this.index;b(this,"afterGetContainer")},getMargins:function(a){var e=
+this.spacing,f=this.margin,k=this.titleOffset;this.resetMargins();k&&!d(f[0])&&(this.plotTop=Math.max(this.plotTop,k+this.options.title.margin+e[0]));this.legend&&this.legend.display&&this.legend.adjustMargins(f,e);b(this,"getMargins");a||this.getAxisMargins()},getAxisMargins:function(){var a=this,b=a.axisOffset=[0,0,0,0],e=a.margin;a.hasCartesianSeries&&a.axes.forEach(function(a){a.visible&&a.getOffset()});H.forEach(function(f,k){d(e[k])||(a[f]+=b[k])});a.setChartSize()},reflow:function(b){var e=
+this,f=e.options.chart,k=e.renderTo,g=d(f.width)&&d(f.height),q=f.width||a.getStyle(k,"width"),f=f.height||a.getStyle(k,"height"),k=b?b.target:I;if(!g&&!e.isPrinting&&q&&f&&(k===I||k===c)){if(q!==e.containerWidth||f!==e.containerHeight)a.clearTimeout(e.reflowTimeout),e.reflowTimeout=L(function(){e.container&&e.setSize(void 0,void 0,!1)},b?100:0);e.containerWidth=q;e.containerHeight=f}},setReflow:function(a){var b=this;!1===a||this.unbindReflow?!1===a&&this.unbindReflow&&(this.unbindReflow=this.unbindReflow()):
+(this.unbindReflow=y(I,"resize",function(a){b.reflow(a)}),y(this,"destroy",this.unbindReflow))},setSize:function(e,f,d){var k=this,c=k.renderer,q;k.isResizing+=1;a.setAnimation(d,k);k.oldChartHeight=k.chartHeight;k.oldChartWidth=k.chartWidth;void 0!==e&&(k.options.chart.width=e);void 0!==f&&(k.options.chart.height=f);k.getChartSize();k.styledMode||(q=c.globalAnimation,(q?G:g)(k.container,{width:k.chartWidth+"px",height:k.chartHeight+"px"},q));k.setChartSize(!0);c.setSize(k.chartWidth,k.chartHeight,
+d);k.axes.forEach(function(a){a.isDirty=!0;a.setScale()});k.isDirtyLegend=!0;k.isDirtyBox=!0;k.layOutTitles();k.getMargins();k.redraw(d);k.oldChartHeight=null;b(k,"resize");L(function(){k&&b(k,"endResize",null,function(){--k.isResizing})},E(q).duration)},setChartSize:function(a){var e=this.inverted,f=this.renderer,d=this.chartWidth,k=this.chartHeight,c=this.options.chart,g=this.spacing,q=this.clipOffset,l,m,p,A;this.plotLeft=l=Math.round(this.plotLeft);this.plotTop=m=Math.round(this.plotTop);this.plotWidth=
+p=Math.max(0,Math.round(d-l-this.marginRight));this.plotHeight=A=Math.max(0,Math.round(k-m-this.marginBottom));this.plotSizeX=e?A:p;this.plotSizeY=e?p:A;this.plotBorderWidth=c.plotBorderWidth||0;this.spacingBox=f.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:k-g[0]-g[2]};this.plotBox=f.plotBox={x:l,y:m,width:p,height:A};d=2*Math.floor(this.plotBorderWidth/2);e=Math.ceil(Math.max(d,q[3])/2);f=Math.ceil(Math.max(d,q[0])/2);this.clipBox={x:e,y:f,width:Math.floor(this.plotSizeX-Math.max(d,q[1])/
+2-e),height:Math.max(0,Math.floor(this.plotSizeY-Math.max(d,q[2])/2-f))};a||this.axes.forEach(function(a){a.setAxisSize();a.setAxisTranslation()});b(this,"afterSetChartSize",{skipAxes:a})},resetMargins:function(){b(this,"resetMargins");var a=this,e=a.options.chart;["margin","spacing"].forEach(function(b){var d=e[b],k=f(d)?d:[d,d,d,d];["Top","Right","Bottom","Left"].forEach(function(d,f){a[b][f]=A(e[b+d],k[f])})});H.forEach(function(b,e){a[b]=A(a.margin[e],a.spacing[e])});a.axisOffset=[0,0,0,0];a.clipOffset=
+[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,e=this.renderer,d=this.chartWidth,f=this.chartHeight,k=this.chartBackground,c=this.plotBackground,g=this.plotBorder,q,l=this.styledMode,m=this.plotBGImage,p=a.backgroundColor,A=a.plotBackgroundColor,h=a.plotBackgroundImage,D,t=this.plotLeft,n=this.plotTop,B=this.plotWidth,x=this.plotHeight,r=this.plotBox,z=this.clipRect,u=this.clipBox,v="animate";k||(this.chartBackground=k=e.rect().addClass("highcharts-background").add(),v="attr");if(l)q=
+D=k.strokeWidth();else{q=a.borderWidth||0;D=q+(a.shadow?8:0);p={fill:p||"none"};if(q||k["stroke-width"])p.stroke=a.borderColor,p["stroke-width"]=q;k.attr(p).shadow(a.shadow)}k[v]({x:D/2,y:D/2,width:d-D-q%2,height:f-D-q%2,r:a.borderRadius});v="animate";c||(v="attr",this.plotBackground=c=e.rect().addClass("highcharts-plot-background").add());c[v](r);l||(c.attr({fill:A||"none"}).shadow(a.plotShadow),h&&(m?m.animate(r):this.plotBGImage=e.image(h,t,n,B,x).add()));z?z.animate({width:u.width,height:u.height}):
+this.clipRect=e.clipRect(u);v="animate";g||(v="attr",this.plotBorder=g=e.rect().addClass("highcharts-plot-border").attr({zIndex:1}).add());l||g.attr({stroke:a.plotBorderColor,"stroke-width":a.plotBorderWidth||0,fill:"none"});g[v](g.crisp({x:t,y:n,width:B,height:x},-g.strokeWidth()));this.isDirtyBox=!1;b(this,"afterDrawChartBox")},propFromSeries:function(){var a=this,b=a.options.chart,d,f=a.options.series,k,c;["inverted","angular","polar"].forEach(function(g){d=e[b.type||b.defaultSeriesType];c=b[g]||
+d&&d.prototype[g];for(k=f&&f.length;!c&&k--;)(d=e[f[k].type])&&d.prototype[g]&&(c=!0);a[g]=c})},linkSeries:function(){var a=this,e=a.series;e.forEach(function(a){a.linkedSeries.length=0});e.forEach(function(b){var e=b.options.linkedTo;x(e)&&(e=":previous"===e?a.series[b.index-1]:a.get(e))&&e.linkedParent!==b&&(e.linkedSeries.push(b),b.linkedParent=e,b.visible=A(b.options.visible,e.options.visible,b.visible))});b(this,"afterLinkSeries")},renderSeries:function(){this.series.forEach(function(a){a.translate();
+a.render()})},renderLabels:function(){var a=this,b=a.options.labels;b.items&&b.items.forEach(function(e){var d=m(b.style,e.style),f=D(d.left)+a.plotLeft,k=D(d.top)+a.plotTop+12;delete d.left;delete d.top;a.renderer.text(e.html,f,k).attr({zIndex:2}).css(d).add()})},render:function(){var a=this.axes,b=this.renderer,e=this.options,d,f,k;this.setTitle();this.legend=new t(this,e.legend);this.getStacks&&this.getStacks();this.getMargins(!0);this.setChartSize();e=this.plotWidth;d=this.plotHeight=Math.max(this.plotHeight-
+21,0);a.forEach(function(a){a.setScale()});this.getAxisMargins();f=1.1<e/this.plotWidth;k=1.05<d/this.plotHeight;if(f||k)a.forEach(function(a){(a.horiz&&f||!a.horiz&&k)&&a.setTickInterval(!0)}),this.getMargins();this.drawChartBox();this.hasCartesianSeries&&a.forEach(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=F(!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&&(I.location.href=a.href)}).attr({align:a.position.align,zIndex:8}),b.styledMode||this.credits.css(a.style),this.credits.add().align(a.position),this.credits.update=function(a){b.credits=b.credits.destroy();b.addCredits(a)})},destroy:function(){var e=this,d=e.axes,f=e.series,k=e.container,
+c,g=k&&k.parentNode;b(e,"destroy");e.renderer.forExport?a.erase(n,e):n[e.index]=void 0;a.chartCount--;e.renderTo.removeAttribute("data-highcharts-chart");B(e);for(c=d.length;c--;)d[c]=d[c].destroy();this.scroller&&this.scroller.destroy&&this.scroller.destroy();for(c=f.length;c--;)f[c]=f[c].destroy();"title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer".split(" ").forEach(function(a){var b=e[a];
+b&&b.destroy&&(e[a]=b.destroy())});k&&(k.innerHTML="",B(k),g&&w(k));z(e,function(a,b){delete e[b]})},firstRender:function(){var e=this,d=e.options;if(!e.isReadyToRender||e.isReadyToRender()){e.getContainer();e.resetMargins();e.setChartSize();e.propFromSeries();e.getAxes();(a.isArray(d.series)?d.series:[]).forEach(function(a){e.initSeries(a)});e.linkSeries();b(e,"beforeRender");k&&(e.pointer=new k(e,d));e.render();if(!e.renderer.imgCount&&e.onload)e.onload();e.temporaryDisplay(!0)}},onload:function(){[this.callback].concat(this.callbacks).forEach(function(a){a&&
+void 0!==this.index&&a.apply(this,[this])},this);b(this,"load");b(this,"render");d(this.index)&&this.setReflow(this.options.chart.reflow);this.onload=null}})})(J);(function(a){var y=a.addEvent,G=a.Chart;y(G,"afterSetChartSize",function(y){var h=this.options.chart.scrollablePlotArea;(h=h&&h.minWidth)&&!this.renderer.forExport&&(this.scrollablePixels=h=Math.max(0,h-this.chartWidth))&&(this.plotWidth+=h,this.clipBox.width+=h,y.skipAxes||this.axes.forEach(function(c){1===c.side?c.getPlotLinePath=function(){var h=
+this.right,u;this.right=h-c.chart.scrollablePixels;u=a.Axis.prototype.getPlotLinePath.apply(this,arguments);this.right=h;return u}:(c.setAxisSize(),c.setAxisTranslation())}))});y(G,"render",function(){this.scrollablePixels?(this.setUpScrolling&&this.setUpScrolling(),this.applyFixed()):this.fixedDiv&&this.applyFixed()});G.prototype.setUpScrolling=function(){this.scrollingContainer=a.createElement("div",{className:"highcharts-scrolling"},{overflowX:"auto",WebkitOverflowScrolling:"touch"},this.renderTo);
+this.innerContainer=a.createElement("div",{className:"highcharts-inner-container"},null,this.scrollingContainer);this.innerContainer.appendChild(this.container);this.setUpScrolling=null};G.prototype.applyFixed=function(){var y=this.container,h,c,r=!this.fixedDiv;r&&(this.fixedDiv=a.createElement("div",{className:"highcharts-fixed"},{position:"absolute",overflow:"hidden",pointerEvents:"none",zIndex:2},null,!0),this.renderTo.insertBefore(this.fixedDiv,this.renderTo.firstChild),this.renderTo.style.overflow=
+"visible",this.fixedRenderer=h=new a.Renderer(this.fixedDiv,0,0),this.scrollableMask=h.path().attr({fill:a.color(this.options.chart.backgroundColor||"#fff").setOpacity(.85).get(),zIndex:-1}).addClass("highcharts-scrollable-mask").add(),[this.inverted?".highcharts-xaxis":".highcharts-yaxis",this.inverted?".highcharts-xaxis-labels":".highcharts-yaxis-labels",".highcharts-contextbutton",".highcharts-credits",".highcharts-legend",".highcharts-subtitle",".highcharts-title",".highcharts-legend-checkbox"].forEach(function(a){[].forEach.call(y.querySelectorAll(a),
+function(a){(a.namespaceURI===h.SVG_NS?h.box:h.box.parentNode).appendChild(a);a.style.pointerEvents="auto"})}));this.fixedRenderer.setSize(this.chartWidth,this.chartHeight);c=this.chartWidth+this.scrollablePixels;a.stop(this.container);this.container.style.width=c+"px";this.renderer.boxWrapper.attr({width:c,height:this.chartHeight,viewBox:[0,0,c,this.chartHeight].join(" ")});this.chartBackground.attr({width:c});r&&(c=this.options.chart.scrollablePlotArea,c.scrollPositionX&&(this.scrollingContainer.scrollLeft=
+this.scrollablePixels*c.scrollPositionX));r=this.axisOffset;c=this.plotTop-r[0]-1;var r=this.plotTop+this.plotHeight+r[2],u=this.plotLeft+this.plotWidth-this.scrollablePixels;this.scrollableMask.attr({d:this.scrollablePixels?["M",0,c,"L",this.plotLeft-1,c,"L",this.plotLeft-1,r,"L",0,r,"Z","M",u,c,"L",this.chartWidth,c,"L",this.chartWidth,r,"L",u,r,"Z"]:["M",0,0]})}})(J);(function(a){var y,G=a.extend,E=a.erase,h=a.fireEvent,c=a.format,r=a.isArray,u=a.isNumber,v=a.pick,w=a.uniqueKey,n=a.defined,g=a.removeEvent;
+a.Point=y=function(){};a.Point.prototype={init:function(a,c,g){var b;b=a.chart.options.chart.colorCount;var d=a.chart.styledMode;this.series=a;d||(this.color=a.color);this.applyOptions(c,g);this.id=n(this.id)?this.id:w();a.options.colorByPoint?(d||(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter],b=b.length),c=a.colorCounter,a.colorCounter++,a.colorCounter===b&&(a.colorCounter=0)):c=a.colorIndex;this.colorIndex=v(this.colorIndex,c);a.chart.pointCount++;h(this,"afterInit");
+return this},applyOptions:function(a,c){var d=this.series,b=d.options.pointValKey||d.pointValKey;a=y.prototype.optionsToObject.call(this,a);G(this,a);this.options=this.options?G(this.options,a):a;a.group&&delete this.group;a.dataLabels&&delete this.dataLabels;b&&(this.y=this[b]);this.isNull=v(this.isValid&&!this.isValid(),null===this.x||!u(this.y,!0));this.selected&&(this.state="select");"name"in this&&void 0===c&&d.xAxis&&d.xAxis.hasNames&&(this.x=d.xAxis.nameToX(this));void 0===this.x&&d&&(this.x=
+void 0===c?d.autoIncrement(this):c);return this},setNestedProperty:function(d,c,g){g.split(".").reduce(function(b,d,f,g){b[d]=g.length-1===f?c:a.isObject(b[d],!0)?b[d]:{};return b[d]},d);return d},optionsToObject:function(d){var c={},g=this.series,b=g.options.keys,l=b||g.pointArrayMap||["y"],f=l.length,h=0,t=0;if(u(d)||null===d)c[l[0]]=d;else if(r(d))for(!b&&d.length>f&&(g=typeof d[0],"string"===g?c.name=d[0]:"number"===g&&(c.x=d[0]),h++);t<f;)b&&void 0===d[h]||(0<l[t].indexOf(".")?a.Point.prototype.setNestedProperty(c,
+d[h],l[t]):c[l[t]]=d[h]),h++,t++;else"object"===typeof d&&(c=d,d.dataLabels&&(g._hasPointLabels=!0),d.marker&&(g._hasPointMarkers=!0));return c},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,c=a.zones,a=a.zoneAxis||"y",g=0,b;for(b=c[g];this[a]>=b.value;)b=c[++g];this.nonZonedColor||(this.nonZonedColor=this.color);this.color=b&&b.color&&!this.options.color?b.color:this.nonZonedColor;return b},destroy:function(){var a=this.series.chart,c=a.hoverPoints,h;a.pointCount--;c&&(this.setState(),E(c,this),c.length||(a.hoverPoints=null));if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel||this.dataLabels)g(this),this.destroyElements();
+this.legendItem&&a.legend.destroyItem(this);for(h in this)this[h]=null},destroyElements:function(){for(var a=["graphic","dataLabel","dataLabelUpper","connector","shadowGroup"],c,g=6;g--;)c=a[g],this[c]&&(this[c]=this[c].destroy());this.dataLabels&&(this.dataLabels.forEach(function(a){a.element&&a.destroy()}),delete this.dataLabels);this.connectors&&(this.connectors.forEach(function(a){a.element&&a.destroy()}),delete this.connectors)},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 d=this.series,g=d.tooltipOptions,b=v(g.valueDecimals,""),l=g.valuePrefix||"",f=g.valueSuffix||"";d.chart.styledMode&&(a=d.chart.tooltip.styledModeFormat(a));(d.pointArrayMap||["y"]).forEach(function(d){d="{point."+d;if(l||f)a=a.replace(RegExp(d+"}","g"),l+d+"}"+f);a=a.replace(RegExp(d+"}","g"),d+":,."+b+"f}")});return c(a,
+{point:this,series:this.series},d.chart.time)},firePointEvent:function(a,c,g){var b=this,d=this.series.options;(d.point.events[a]||b.options&&b.options.events&&b.options.events[a])&&this.importEvents();"click"===a&&d.allowPointSelect&&(g=function(a){b.select&&b.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});h(this,a,c,g)},visible:!0}})(J);(function(a){var y=a.addEvent,G=a.animObject,E=a.arrayMax,h=a.arrayMin,c=a.correctFloat,r=a.defaultOptions,u=a.defaultPlotOptions,v=a.defined,w=a.erase,n=a.extend,
+g=a.fireEvent,d=a.isArray,m=a.isNumber,p=a.isString,b=a.merge,l=a.objectEach,f=a.pick,x=a.removeEvent,t=a.splat,H=a.SVGElement,F=a.syncTimeout,z=a.win;a.Series=a.seriesType("line",null,{lineWidth:2,allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{lineWidth:0,lineColor:"#ffffff",enabledThreshold:2,radius:4,states:{normal:{animation:!0},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:{normal:{animation:!0},hover:{animation:{duration:50},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{}},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){g(this,"init",{options:b});var d=this,k,e=a.series,c;d.chart=a;d.options=b=d.setOptions(b);d.linkedSeries=[];d.bindAxes();n(d,{name:b.name,state:"",visible:!1!==b.visible,selected:!0===b.selected});k=b.events;l(k,function(a,b){y(d,b,a)});if(k&&k.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;d.getColor();d.getSymbol();
+d.parallelArrays.forEach(function(a){d[a+"Data"]=[]});d.setData(b.data,!1);d.isCartesian&&(a.hasCartesianSeries=!0);e.length&&(c=e[e.length-1]);d._i=f(c&&c._i,-1)+1;a.orderSeries(this.insert(e));g(this,"afterInit")},insert:function(a){var b=this.options.index,d;if(m(b)){for(d=a.length;d--;)if(b>=f(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 f(d,a.length-1)},bindAxes:function(){var b=this,d=b.options,f=b.chart,c;(b.axisTypes||[]).forEach(function(e){f[e].forEach(function(a){c=
+a.options;if(d[e]===c.index||void 0!==d[e]&&d[e]===c.id||void 0===d[e]&&0===c.index)b.insert(a.series),b[e]=a,a.isDirty=!0});b[e]||b.optionalAxis===e||a.error(18,!0,f)})},updateParallelArrays:function(a,b){var d=a.series,f=arguments,e=m(b)?function(e){var f="y"===e&&d.toYData?d.toYData(a):a[e];d[e+"Data"][b]=f}:function(a){Array.prototype[b].apply(d[a+"Data"],Array.prototype.slice.call(f,2))};d.parallelArrays.forEach(e)},autoIncrement:function(){var a=this.options,b=this.xIncrement,d,c=a.pointIntervalUnit,
+e=this.chart.time,b=f(b,a.pointStart,0);this.pointInterval=d=f(this.pointInterval,a.pointInterval,1);c&&(a=new e.Date(b),"day"===c?e.set("Date",a,e.get("Date",a)+d):"month"===c?e.set("Month",a,e.get("Month",a)+d):"year"===c&&e.set("FullYear",a,e.get("FullYear",a)+d),d=a.getTime()-b);this.xIncrement=b+d;return b},setOptions:function(a){var d=this.chart,c=d.options,k=c.plotOptions,e=(d.userOptions||{}).plotOptions||{},q=k[this.type],l=d.styledMode;this.userOptions=a;d=b(q,k.series,a);this.tooltipOptions=
+b(r.tooltip,r.plotOptions.series&&r.plotOptions.series.tooltip,r.plotOptions[this.type].tooltip,c.tooltip.userOptions,k.series&&k.series.tooltip,k[this.type].tooltip,a.tooltip);this.stickyTracking=f(a.stickyTracking,e[this.type]&&e[this.type].stickyTracking,e.series&&e.series.stickyTracking,this.tooltipOptions.shared&&!this.noSharedTooltip?!0:d.stickyTracking);null===q.marker&&delete d.marker;this.zoneAxis=d.zoneAxis;a=this.zones=(d.zones||[]).slice();!d.negativeColor&&!d.negativeFillColor||d.zones||
+(c={value:d[this.zoneAxis+"Threshold"]||d.threshold||0,className:"highcharts-negative"},l||(c.color=d.negativeColor,c.fillColor=d.negativeFillColor),a.push(c));a.length&&v(a[a.length-1].value)&&a.push(l?{}:{color:this.color,fillColor:this.fillColor});g(this,"afterSetOptions",{options:d});return d},getName:function(){return f(this.options.name,"Series "+(this.index+1))},getCyclic:function(a,b,d){var c,e=this.chart,k=this.userOptions,g=a+"Index",l=a+"Counter",m=d?d.length:f(e.options.chart[a+"Count"],
+e[a+"Count"]);b||(c=f(k[g],k["_"+g]),v(c)||(e.series.length||(e[l]=0),k["_"+g]=c=e[l]%m,e[l]+=1),d&&(b=d[c]));void 0!==c&&(this[g]=c);this[a]=b},getColor:function(){this.chart.styledMode?this.getCyclic("color"):this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color||u[this.type].color,this.chart.options.colors)},getSymbol:function(){this.getCyclic("symbol",this.options.marker.symbol,this.chart.options.symbols)},drawLegendSymbol:a.LegendSymbolMixin.drawLineMarker,
+updateData:function(b){var d=this.options,f=this.points,c=[],e,k,g,l=this.requireSorting;this.xIncrement=null;b.forEach(function(b){var k,q,h;k=a.defined(b)&&this.pointClass.prototype.optionsToObject.call({series:this},b)||{};h=k.x;if((k=k.id)||m(h))k&&(q=(q=this.chart.get(k))&&q.x),void 0===q&&m(h)&&(q=this.xData.indexOf(h,g)),-1===q||void 0===q||f[q].touched?c.push(b):b!==d.data[q]?(f[q].update(b,!1,null,!1),f[q].touched=!0,l&&(g=q+1)):f[q]&&(f[q].touched=!0),e=!0},this);if(e)for(b=f.length;b--;)k=
+f[b],k.touched||k.remove(!1),k.touched=!1;else if(b.length===f.length)b.forEach(function(a,b){f[b].update&&a!==d.data[b]&&f[b].update(a,!1,null,!1)});else return!1;c.forEach(function(a){this.addPoint(a,!1)},this);return!0},setData:function(b,c,g,l){var e=this,k=e.points,h=k&&k.length||0,A,t=e.options,n=e.chart,D=null,B=e.xAxis,x=t.turboThreshold,z=this.xData,r=this.yData,u=(A=e.pointArrayMap)&&A.length,v;b=b||[];A=b.length;c=f(c,!0);!1!==l&&A&&h&&!e.cropped&&!e.hasGroupedData&&e.visible&&!e.isSeriesBoosting&&
+(v=this.updateData(b));if(!v){e.xIncrement=null;e.colorCounter=0;this.parallelArrays.forEach(function(a){e[a+"Data"].length=0});if(x&&A>x){for(g=0;null===D&&g<A;)D=b[g],g++;if(m(D))for(g=0;g<A;g++)z[g]=this.autoIncrement(),r[g]=b[g];else if(d(D))if(u)for(g=0;g<A;g++)D=b[g],z[g]=D[0],r[g]=D.slice(1,u+1);else for(g=0;g<A;g++)D=b[g],z[g]=D[0],r[g]=D[1];else a.error(12,!1,n)}else for(g=0;g<A;g++)void 0!==b[g]&&(D={series:e},e.pointClass.prototype.applyOptions.apply(D,[b[g]]),e.updateParallelArrays(D,
+g));r&&p(r[0])&&a.error(14,!0,n);e.data=[];e.options.data=e.userOptions.data=b;for(g=h;g--;)k[g]&&k[g].destroy&&k[g].destroy();B&&(B.minRange=B.userMinRange);e.isDirty=n.isDirtyBox=!0;e.isDirtyData=!!k;g=!1}"point"===t.legendType&&(this.processData(),this.generatePoints());c&&n.redraw(g)},processData:function(b){var d=this.xData,f=this.yData,c=d.length,e;e=0;var k,g,l=this.xAxis,m,h=this.options;m=h.cropThreshold;var p=this.getExtremesFromAll||h.getExtremesFromAll,t=this.isCartesian,h=l&&l.val2lin,
+n=l&&l.isLog,x=this.requireSorting,r,z;if(t&&!this.isDirty&&!l.isDirty&&!this.yAxis.isDirty&&!b)return!1;l&&(b=l.getExtremes(),r=b.min,z=b.max);t&&this.sorted&&!p&&(!m||c>m||this.forceCrop)&&(d[c-1]<r||d[0]>z?(d=[],f=[]):this.yData&&(d[0]<r||d[c-1]>z)&&(e=this.cropData(this.xData,this.yData,r,z),d=e.xData,f=e.yData,e=e.start,k=!0));for(m=d.length||1;--m;)c=n?h(d[m])-h(d[m-1]):d[m]-d[m-1],0<c&&(void 0===g||c<g)?g=c:0>c&&x&&(a.error(15,!1,this.chart),x=!1);this.cropped=k;this.cropStart=e;this.processedXData=
+d;this.processedYData=f;this.closestPointRange=g},cropData:function(a,b,d,c,e){var k=a.length,g=0,l=k,m;e=f(e,this.cropShoulder,1);for(m=0;m<k;m++)if(a[m]>=d){g=Math.max(0,m-e);break}for(d=m;d<k;d++)if(a[d]>c){l=d+e;break}return{xData:a.slice(g,l),yData:b.slice(g,l),start:g,end:l}},generatePoints:function(){var a=this.options,b=a.data,d=this.data,f,e=this.processedXData,c=this.processedYData,g=this.pointClass,l=e.length,m=this.cropStart||0,h,p=this.hasGroupedData,a=a.keys,x,r=[],z;d||p||(d=[],d.length=
+b.length,d=this.data=d);a&&p&&(this.options.keys=!1);for(z=0;z<l;z++)h=m+z,p?(x=(new g).init(this,[e[z]].concat(t(c[z]))),x.dataGroup=this.groupMap[z],x.dataGroup.options&&(x.options=x.dataGroup.options,n(x,x.dataGroup.options))):(x=d[h])||void 0===b[h]||(d[h]=x=(new g).init(this,b[h],e[z])),x&&(x.index=h,r[z]=x);this.options.keys=a;if(d&&(l!==(f=d.length)||p))for(z=0;z<f;z++)z!==m||p||(z+=l),d[z]&&(d[z].destroyElements(),d[z].plotX=void 0);this.data=d;this.points=r},getExtremes:function(a){var b=
+this.yAxis,f=this.processedXData,c,e=[],k=0;c=this.xAxis.getExtremes();var g=c.min,l=c.max,p,t,n=this.requireSorting?1:0,x,z;a=a||this.stackedYData||this.processedYData||[];c=a.length;for(z=0;z<c;z++)if(t=f[z],x=a[z],p=(m(x,!0)||d(x))&&(!b.positiveValuesOnly||x.length||0<x),t=this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||(f[z+n]||t)>=g&&(f[z-n]||t)<=l,p&&t)if(p=x.length)for(;p--;)"number"===typeof x[p]&&(e[k++]=x[p]);else e[k++]=x;this.dataMin=h(e);this.dataMax=E(e)},translate:function(){this.processedXData||
+this.processData();this.generatePoints();var a=this.options,b=a.stacking,d=this.xAxis,l=d.categories,e=this.yAxis,q=this.points,h=q.length,p=!!this.modifyValue,t=a.pointPlacement,n="between"===t||m(t),x=a.threshold,z=a.startFromThreshold?x:0,r,u,F,H,w=Number.MAX_VALUE;"between"===t&&(t=.5);m(t)&&(t*=f(a.pointRange||d.pointRange));for(a=0;a<h;a++){var y=q[a],E=y.x,G=y.y;u=y.low;var J=b&&e.stacks[(this.negStacks&&G<(z?0:x)?"-":"")+this.stackKey],U;e.positiveValuesOnly&&null!==G&&0>=G&&(y.isNull=!0);
+y.plotX=r=c(Math.min(Math.max(-1E5,d.translate(E,0,0,0,1,t,"flags"===this.type)),1E5));b&&this.visible&&!y.isNull&&J&&J[E]&&(H=this.getStackIndicator(H,E,this.index),U=J[E],G=U.points[H.key],u=G[0],G=G[1],u===z&&H.key===J[E].base&&(u=f(m(x)&&x,e.min)),e.positiveValuesOnly&&0>=u&&(u=null),y.total=y.stackTotal=U.total,y.percentage=U.total&&y.y/U.total*100,y.stackY=G,U.setOffset(this.pointXOffset||0,this.barW||0));y.yBottom=v(u)?Math.min(Math.max(-1E5,e.translate(u,0,1,0,1)),1E5):null;p&&(G=this.modifyValue(G,
+y));y.plotY=u="number"===typeof G&&Infinity!==G?Math.min(Math.max(-1E5,e.translate(G,0,1,0,1)),1E5):void 0;y.isInside=void 0!==u&&0<=u&&u<=e.len&&0<=r&&r<=d.len;y.clientX=n?c(d.translate(E,0,0,0,1,t)):r;y.negative=y.y<(x||0);y.category=l&&void 0!==l[y.x]?l[y.x]:y.x;y.isNull||(void 0!==F&&(w=Math.min(w,Math.abs(r-F))),F=r);y.zone=this.zones.length&&y.getZone()}this.closestPointRangePx=w;g(this,"afterTranslate")},getValidPoints:function(a,b){var d=this.chart;return(a||this.points||[]).filter(function(a){return b&&
+!d.isInsidePlot(a.plotX,a.plotY,d.inverted)?!1:!a.isNull})},setClip:function(a){var b=this.chart,d=this.options,f=b.renderer,e=b.inverted,c=this.clipBox,k=c||b.clipBox,g=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,k.height,d.xAxis,d.yAxis].join(),l=b[g],m=b[g+"m"];l||(a&&(k.width=0,e&&(k.x=b.plotSizeX),b[g+"m"]=m=f.clipRect(e?b.plotSizeX+99:-99,e?-b.plotLeft:-b.plotTop,99,e?b.chartWidth:b.chartHeight)),b[g]=l=f.clipRect(k),l.count={length:0});a&&!l.count[this.index]&&(l.count[this.index]=
+!0,l.count.length+=1);!1!==d.clip&&(this.group.clip(a||c?l:b.clipRect),this.markerGroup.clip(m),this.sharedClipKey=g);a||(l.count[this.index]&&(delete l.count[this.index],--l.count.length),0===l.count.length&&g&&b[g]&&(c||(b[g]=b[g].destroy()),b[g+"m"]&&(b[g+"m"]=b[g+"m"].destroy())))},animate:function(a){var b=this.chart,d=G(this.options.animation),f;a?this.setClip(d):(f=this.sharedClipKey,(a=b[f])&&a.animate({width:b.plotSizeX,x:0},d),b[f+"m"]&&b[f+"m"].animate({width:b.plotSizeX+99,x:0},d),this.animate=
+null)},afterAnimate:function(){this.setClip();g(this,"afterAnimate");this.finishedAnimating=!0},drawPoints:function(){var a=this.points,b=this.chart,d,c,e,g,l=this.options.marker,m,h,p,t=this[this.specialGroup]||this.markerGroup;d=this.xAxis;var n,x=f(l.enabled,!d||d.isRadial?!0:null,this.closestPointRangePx>=l.enabledThreshold*l.radius);if(!1!==l.enabled||this._hasPointMarkers)for(d=0;d<a.length;d++)c=a[d],g=c.graphic,m=c.marker||{},h=!!c.marker,e=x&&void 0===m.enabled||m.enabled,p=!1!==c.isInside,
+e&&!c.isNull?(e=f(m.symbol,this.symbol),n=this.markerAttribs(c,c.selected&&"select"),g?g[p?"show":"hide"](!0).animate(n):p&&(0<n.width||c.hasImage)&&(c.graphic=g=b.renderer.symbol(e,n.x,n.y,n.width,n.height,h?m:l).add(t)),g&&!b.styledMode&&g.attr(this.pointAttribs(c,c.selected&&"select")),g&&g.addClass(c.getClassName(),!0)):g&&(c.graphic=g.destroy())},markerAttribs:function(a,b){var d=this.options.marker,c=a.marker||{},e=c.symbol||d.symbol,k=f(c.radius,d.radius);b&&(d=d.states[b],b=c.states&&c.states[b],
+k=f(b&&b.radius,d&&d.radius,k+(d&&d.radiusPlus||0)));a.hasImage=e&&0===e.indexOf("url");a.hasImage&&(k=0);a={x:Math.floor(a.plotX)-k,y:a.plotY-k};k&&(a.width=a.height=2*k);return a},pointAttribs:function(a,b){var d=this.options.marker,c=a&&a.options,e=c&&c.marker||{},k=this.color,g=c&&c.color,l=a&&a.color,c=f(e.lineWidth,d.lineWidth);a=a&&a.zone&&a.zone.color;k=g||a||l||k;a=e.fillColor||d.fillColor||k;k=e.lineColor||d.lineColor||k;b&&(d=d.states[b],b=e.states&&e.states[b]||{},c=f(b.lineWidth,d.lineWidth,
+c+f(b.lineWidthPlus,d.lineWidthPlus,0)),a=b.fillColor||d.fillColor||a,k=b.lineColor||d.lineColor||k);return{stroke:k,"stroke-width":c,fill:a}},destroy:function(){var b=this,d=b.chart,f=/AppleWebKit\/533/.test(z.navigator.userAgent),c,e,q=b.data||[],m,h;g(b,"destroy");x(b);(b.axisTypes||[]).forEach(function(a){(h=b[a])&&h.series&&(w(h.series,b),h.isDirty=h.forceRedraw=!0)});b.legendItem&&b.chart.legend.destroyItem(b);for(e=q.length;e--;)(m=q[e])&&m.destroy&&m.destroy();b.points=null;a.clearTimeout(b.animationTimeout);
+l(b,function(a,b){a instanceof H&&!a.survive&&(c=f&&"group"===b?"hide":"destroy",a[c]())});d.hoverSeries===b&&(d.hoverSeries=null);w(d.series,b);d.orderSeries();l(b,function(a,e){delete b[e]})},getGraphPath:function(a,b,d){var f=this,e=f.options,c=e.step,g,k=[],l=[],m;a=a||f.points;(g=a.reversed)&&a.reverse();(c={right:1,center:2}[c]||c&&3)&&g&&(c=4-c);!e.connectNulls||b||d||(a=this.getValidPoints(a));a.forEach(function(g,q){var h=g.plotX,p=g.plotY,t=a[q-1];(g.leftCliff||t&&t.rightCliff)&&!d&&(m=
+!0);g.isNull&&!v(b)&&0<q?m=!e.connectNulls:g.isNull&&!b?m=!0:(0===q||m?q=["M",g.plotX,g.plotY]:f.getPointSpline?q=f.getPointSpline(a,g,q):c?(q=1===c?["L",t.plotX,p]:2===c?["L",(t.plotX+h)/2,t.plotY,"L",(t.plotX+h)/2,p]:["L",h,t.plotY],q.push("L",h,p)):q=["L",h,p],l.push(g.x),c&&(l.push(g.x),2===c&&l.push(g.x)),k.push.apply(k,q),m=!1)});k.xMap=l;return f.graphPath=k},drawGraph:function(){var a=this,b=this.options,d=(this.gappedPath||this.getGraphPath).call(this),f=this.chart.styledMode,e=[["graph",
+"highcharts-graph"]];f||e[0].push(b.lineColor||this.color,b.dashStyle);e=a.getZonesGraphs(e);e.forEach(function(e,c){var g=e[0],k=a[g];k?(k.endX=a.preventGraphAnimation?null:d.xMap,k.animate({d:d})):d.length&&(a[g]=a.chart.renderer.path(d).addClass(e[1]).attr({zIndex:1}).add(a.group),f||(k={stroke:e[2],"stroke-width":b.lineWidth,fill:a.fillGraph&&a.color||"none"},e[3]?k.dashstyle=e[3]:"square"!==b.linecap&&(k["stroke-linecap"]=k["stroke-linejoin"]="round"),k=a[g].attr(k).shadow(2>c&&b.shadow)));k&&
+(k.startX=d.xMap,k.isArea=d.isArea)})},getZonesGraphs:function(a){this.zones.forEach(function(b,d){d=["zone-graph-"+d,"highcharts-graph highcharts-zone-graph-"+d+" "+(b.className||"")];this.chart.styledMode||d.push(b.color||this.color,b.dashStyle||this.options.dashStyle);a.push(d)},this);return a},applyZones:function(){var a=this,b=this.chart,d=b.renderer,c=this.zones,e,g,l=this.clips||[],m,h=this.graph,p=this.area,t=Math.max(b.chartWidth,b.chartHeight),n=this[(this.zoneAxis||"y")+"Axis"],x,z,r=b.inverted,
+u,v,F,H,w=!1;c.length&&(h||p)&&n&&void 0!==n.min&&(z=n.reversed,u=n.horiz,h&&!this.showLine&&h.hide(),p&&p.hide(),x=n.getExtremes(),c.forEach(function(c,k){e=z?u?b.plotWidth:0:u?0:n.toPixels(x.min)||0;e=Math.min(Math.max(f(g,e),0),t);g=Math.min(Math.max(Math.round(n.toPixels(f(c.value,x.max),!0)||0),0),t);w&&(e=g=n.toPixels(x.max));v=Math.abs(e-g);F=Math.min(e,g);H=Math.max(e,g);n.isXAxis?(m={x:r?H:F,y:0,width:v,height:t},u||(m.x=b.plotHeight-m.x)):(m={x:0,y:r?H:F,width:t,height:v},u&&(m.y=b.plotWidth-
+m.y));r&&d.isVML&&(m=n.isXAxis?{x:0,y:z?F:H,height:m.width,width:b.chartWidth}:{x:m.y-b.plotLeft-b.spacingBox.x,y:0,width:m.height,height:b.chartHeight});l[k]?l[k].animate(m):(l[k]=d.clipRect(m),h&&a["zone-graph-"+k].clip(l[k]),p&&a["zone-area-"+k].clip(l[k]));w=c.value>x.max;a.resetZones&&0===g&&(g=void 0)}),this.clips=l)},invertGroups:function(a){function b(){["group","markerGroup"].forEach(function(b){d[b]&&(f.renderer.isVML&&d[b].attr({width:d.yAxis.len,height:d.xAxis.len}),d[b].width=d.yAxis.len,
+d[b].height=d.xAxis.len,d[b].invert(a))})}var d=this,f=d.chart,e;d.xAxis&&(e=y(f,"resize",b),y(d,"destroy",e),b(a),d.invertGroups=b)},plotGroup:function(a,b,d,f,e){var c=this[a],g=!c;g&&(this[a]=c=this.chart.renderer.g().attr({zIndex:f||.1}).add(e));c.addClass("highcharts-"+b+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(v(this.colorIndex)?"highcharts-color-"+this.colorIndex+" ":"")+(this.options.className||"")+(c.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0);
+c.attr({visibility:d})[g?"attr":"animate"](this.getPlotBox());return c},getPlotBox:function(){var a=this.chart,b=this.xAxis,d=this.yAxis;a.inverted&&(b=d,d=this.xAxis);return{translateX:b?b.left:a.plotLeft,translateY:d?d.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,d,f=a.options,e=!!a.animate&&b.renderer.isSVG&&G(f.animation).duration,c=a.visible?"inherit":"hidden",l=f.zIndex,m=a.hasRendered,h=b.seriesGroup,p=b.inverted;d=a.plotGroup("group","series",c,l,h);a.markerGroup=
+a.plotGroup("markerGroup","markers",c,l,h);e&&a.animate(!0);d.inverted=a.isCartesian?p:!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(p);!1===f.clip||a.sharedClipKey||m||d.clip(b.clipRect);e&&a.animate();m||(a.animationTimeout=F(function(){a.afterAnimate()},e));a.isDirty=!1;a.hasRendered=!0;g(a,"afterRender")},redraw:function(){var a=this.chart,b=this.isDirty||
+this.isDirtyData,d=this.group,c=this.xAxis,e=this.yAxis;d&&(a.inverted&&d.attr({width:a.plotWidth,height:a.plotHeight}),d.animate({translateX:f(c&&c.left,a.plotLeft),translateY:f(e&&e.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree},kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var d=this.xAxis,f=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?d.len-a.chartY+d.pos:a.chartX-d.pos,plotY:e?f.len-a.chartX+f.pos:a.chartY-f.pos},b)},buildKDTree:function(){function a(d,
+e,f){var c,g;if(g=d&&d.length)return c=b.kdAxisArray[e%f],d.sort(function(a,b){return a[c]-b[c]}),g=Math.floor(g/2),{point:d[g],left:a(d.slice(0,g),e+1,f),right:a(d.slice(g+1),e+1,f)}}this.buildingKdTree=!0;var b=this,d=-1<b.options.findNearestPointBy.indexOf("y")?2:1;delete b.kdTree;F(function(){b.kdTree=a(b.getValidPoints(null,!b.directTouch),d,d);b.buildingKdTree=!1},b.options.kdNow?0:1)},searchKDTree:function(a,b){function d(a,b,k,l){var m=b.point,h=f.kdAxisArray[k%l],q,p,t=m;p=v(a[e])&&v(m[e])?
+Math.pow(a[e]-m[e],2):null;q=v(a[c])&&v(m[c])?Math.pow(a[c]-m[c],2):null;q=(p||0)+(q||0);m.dist=v(q)?Math.sqrt(q):Number.MAX_VALUE;m.distX=v(p)?Math.sqrt(p):Number.MAX_VALUE;h=a[h]-m[h];q=0>h?"left":"right";p=0>h?"right":"left";b[q]&&(q=d(a,b[q],k+1,l),t=q[g]<t[g]?q:m);b[p]&&Math.sqrt(h*h)<t[g]&&(a=d(a,b[p],k+1,l),t=a[g]<t[g]?a:t);return t}var f=this,e=this.kdAxisArray[0],c=this.kdAxisArray[1],g=b?"distX":"dist";b=-1<f.options.findNearestPointBy.indexOf("y")?2:1;this.kdTree||this.buildingKdTree||
+this.buildKDTree();if(this.kdTree)return d(a,this.kdTree,b,b)}})})(J);(function(a){var y=a.Axis,G=a.Chart,E=a.correctFloat,h=a.defined,c=a.destroyObjectProperties,r=a.format,u=a.objectEach,v=a.pick,w=a.Series;a.StackItem=function(a,c,d,m,h){var b=a.chart.inverted;this.axis=a;this.isNegative=d;this.options=c;this.x=m;this.total=null;this.points={};this.stack=h;this.rightCliff=this.leftCliff=0;this.alignOptions={align:c.align||(b?d?"left":"right":"center"),verticalAlign:c.verticalAlign||(b?"middle":
+d?"bottom":"top"),y:v(c.y,b?4:d?14:-6),x:v(c.x,b?d?-6:6:0)};this.textAlign=c.textAlign||(b?d?"right":"left":"center")};a.StackItem.prototype={destroy:function(){c(this,this.axis)},render:function(a){var c=this.axis.chart,d=this.options,m=d.format,m=m?r(m,this,c.time):d.formatter.call(this);this.label?this.label.attr({text:m,visibility:"hidden"}):this.label=c.renderer.text(m,null,null,d.useHTML).css(d.style).attr({align:this.textAlign,rotation:d.rotation,visibility:"hidden"}).add(a);this.label.labelrank=
+c.plotHeight},setOffset:function(a,c){var d=this.axis,g=d.chart,p=d.translate(d.usePercentage?100:this.total,0,0,0,1),b=d.translate(0),b=h(p)&&Math.abs(p-b);a=g.xAxis[0].translate(this.x)+a;d=h(p)&&this.getStackBox(g,this,a,p,c,b,d);(c=this.label)&&d&&(c.align(this.alignOptions,null,d),d=c.alignAttr,c[!1===this.options.crop||g.isInsidePlot(d.x,d.y)?"show":"hide"](!0))},getStackBox:function(a,c,d,m,h,b,l){var f=c.axis.reversed,g=a.inverted;a=l.height+l.pos-(g?a.plotLeft:a.plotTop);c=c.isNegative&&
+!f||!c.isNegative&&f;return{x:g?c?m:m-b:d,y:g?a-d-h:c?a-m-b:a-m,width:g?b:h,height:g?h:b}}};G.prototype.getStacks=function(){var a=this;a.yAxis.forEach(function(a){a.stacks&&a.hasVisibleSeries&&(a.oldStacks=a.stacks)});a.series.forEach(function(c){!c.options.stacking||!0!==c.visible&&!1!==a.options.chart.ignoreHiddenSeries||(c.stackKey=c.type+v(c.options.stack,""))})};y.prototype.buildStacks=function(){var a=this.series,c=v(this.options.reversedStacks,!0),d=a.length,m;if(!this.isXAxis){this.usePercentage=
+!1;for(m=d;m--;)a[c?m:d-m-1].setStackedPoints();for(m=0;m<d;m++)a[m].modifyStacks()}};y.prototype.renderStackTotals=function(){var a=this.chart,c=a.renderer,d=this.stacks,m=this.stackTotalGroup;m||(this.stackTotalGroup=m=c.g("stack-labels").attr({visibility:"visible",zIndex:6}).add());m.translate(a.plotLeft,a.plotTop);u(d,function(a){u(a,function(a){a.render(m)})})};y.prototype.resetStacks=function(){var a=this,c=a.stacks;a.isXAxis||u(c,function(d){u(d,function(c,g){c.touched<a.stacksTouched?(c.destroy(),
+delete d[g]):(c.total=null,c.cumulative=null)})})};y.prototype.cleanStacks=function(){var a;this.isXAxis||(this.oldStacks&&(a=this.stacks=this.oldStacks),u(a,function(a){u(a,function(a){a.cumulative=a.total})}))};w.prototype.setStackedPoints=function(){if(this.options.stacking&&(!0===this.visible||!1===this.chart.options.chart.ignoreHiddenSeries)){var c=this.processedXData,g=this.processedYData,d=[],m=g.length,p=this.options,b=p.threshold,l=v(p.startFromThreshold&&b,0),f=p.stack,p=p.stacking,x=this.stackKey,
+t="-"+x,r=this.negStacks,u=this.yAxis,z=u.stacks,k=u.oldStacks,A,D,B,e,q,w,y;u.stacksTouched+=1;for(q=0;q<m;q++)w=c[q],y=g[q],A=this.getStackIndicator(A,w,this.index),e=A.key,B=(D=r&&y<(l?0:b))?t:x,z[B]||(z[B]={}),z[B][w]||(k[B]&&k[B][w]?(z[B][w]=k[B][w],z[B][w].total=null):z[B][w]=new a.StackItem(u,u.options.stackLabels,D,w,f)),B=z[B][w],null!==y?(B.points[e]=B.points[this.index]=[v(B.cumulative,l)],h(B.cumulative)||(B.base=e),B.touched=u.stacksTouched,0<A.index&&!1===this.singleStacks&&(B.points[e][0]=
+B.points[this.index+","+w+",0"][0])):B.points[e]=B.points[this.index]=null,"percent"===p?(D=D?x:t,r&&z[D]&&z[D][w]?(D=z[D][w],B.total=D.total=Math.max(D.total,B.total)+Math.abs(y)||0):B.total=E(B.total+(Math.abs(y)||0))):B.total=E(B.total+(y||0)),B.cumulative=v(B.cumulative,l)+(y||0),null!==y&&(B.points[e].push(B.cumulative),d[q]=B.cumulative);"percent"===p&&(u.usePercentage=!0);this.stackedYData=d;u.oldStacks={}}};w.prototype.modifyStacks=function(){var a=this,c=a.stackKey,d=a.yAxis.stacks,m=a.processedXData,
+h,b=a.options.stacking;a[b+"Stacker"]&&[c,"-"+c].forEach(function(c){for(var f=m.length,g,l;f--;)if(g=m[f],h=a.getStackIndicator(h,g,a.index,c),l=(g=d[c]&&d[c][g])&&g.points[h.key])a[b+"Stacker"](l,g,f)})};w.prototype.percentStacker=function(a,c,d){c=c.total?100/c.total:0;a[0]=E(a[0]*c);a[1]=E(a[1]*c);this.stackedYData[d]=a[1]};w.prototype.getStackIndicator=function(a,c,d,m){!h(a)||a.x!==c||m&&a.key!==m?a={x:c,index:0,key:m}:a.index++;a.key=[d,c,a.index].join();return a}})(J);(function(a){var y=a.addEvent,
+G=a.animate,E=a.Axis,h=a.Chart,c=a.createElement,r=a.css,u=a.defined,v=a.erase,w=a.extend,n=a.fireEvent,g=a.isNumber,d=a.isObject,m=a.isArray,p=a.merge,b=a.objectEach,l=a.pick,f=a.Point,x=a.Series,t=a.seriesTypes,H=a.setAnimation,F=a.splat;a.cleanRecursively=function(c,f){var g={};b(c,function(b,k){if(d(c[k],!0)&&f[k])b=a.cleanRecursively(c[k],f[k]),Object.keys(b).length&&(g[k]=b);else if(d(c[k])||c[k]!==f[k])g[k]=c[k]});return g};w(h.prototype,{addSeries:function(a,b,d){var c,f=this;a&&(b=l(b,!0),
+n(f,"addSeries",{options:a},function(){c=f.initSeries(a);f.isDirtyLegend=!0;f.linkSeries();n(f,"afterAddSeries");b&&f.redraw(d)}));return c},addAxis:function(a,b,d,c){var f=b?"xAxis":"yAxis",e=this.options;a=p(a,{index:this[f].length,isX:b});b=new E(this,a);e[f]=F(e[f]||{});e[f].push(a);l(d,!0)&&this.redraw(c);return b},showLoading:function(a){var b=this,d=b.options,f=b.loadingDiv,g=d.loading,e=function(){f&&r(f,{left:b.plotLeft+"px",top:b.plotTop+"px",width:b.plotWidth+"px",height:b.plotHeight+"px"})};
+f||(b.loadingDiv=f=c("div",{className:"highcharts-loading highcharts-loading-hidden"},null,b.container),b.loadingSpan=c("span",{className:"highcharts-loading-inner"},null,f),y(b,"redraw",e));f.className="highcharts-loading";b.loadingSpan.innerHTML=a||d.lang.loading;b.styledMode||(r(f,w(g.style,{zIndex:10})),r(b.loadingSpan,g.labelStyle),b.loadingShown||(r(f,{opacity:0,display:""}),G(f,{opacity:g.style.opacity||.5},{duration:g.showDuration||0})));b.loadingShown=!0;e()},hideLoading:function(){var a=
+this.options,b=this.loadingDiv;b&&(b.className="highcharts-loading highcharts-loading-hidden",this.styledMode||G(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){r(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 time tooltip".split(" "),collectionsWithUpdate:"xAxis yAxis zAxis series colorAxis pane".split(" "),update:function(d,c,f,m){var k=this,e={credits:"addCredits",title:"setTitle",subtitle:"setSubtitle"},h,t,x,r=[];n(k,"update",{options:d});d=a.cleanRecursively(d,k.options);if(h=d.chart){p(!0,k.options.chart,h);"className"in h&&k.setClassName(h.className);"reflow"in h&&k.setReflow(h.reflow);if("inverted"in
+h||"polar"in h||"type"in h)k.propFromSeries(),t=!0;"alignTicks"in h&&(t=!0);b(h,function(a,b){-1!==k.propsRequireUpdateSeries.indexOf("chart."+b)&&(x=!0);-1!==k.propsRequireDirtyBox.indexOf(b)&&(k.isDirtyBox=!0)});!k.styledMode&&"style"in h&&k.renderer.setStyle(h.style)}!k.styledMode&&d.colors&&(this.options.colors=d.colors);d.plotOptions&&p(!0,this.options.plotOptions,d.plotOptions);b(d,function(a,b){if(k[b]&&"function"===typeof k[b].update)k[b].update(a,!1);else if("function"===typeof k[e[b]])k[e[b]](a);
+"chart"!==b&&-1!==k.propsRequireUpdateSeries.indexOf(b)&&(x=!0)});this.collectionsWithUpdate.forEach(function(a){var b;d[a]&&("series"===a&&(b=[],k[a].forEach(function(a,d){a.options.isInternal||b.push(l(a.options.index,d))})),F(d[a]).forEach(function(d,e){(e=u(d.id)&&k.get(d.id)||k[a][b?b[e]:e])&&e.coll===a&&(e.update(d,!1),f&&(e.touched=!0));if(!e&&f)if("series"===a)k.addSeries(d,!1).touched=!0;else if("xAxis"===a||"yAxis"===a)k.addAxis(d,"xAxis"===a,!1).touched=!0}),f&&k[a].forEach(function(a){a.touched||
+a.options.isInternal?delete a.touched:r.push(a)}))});r.forEach(function(a){a.remove&&a.remove(!1)});t&&k.axes.forEach(function(a){a.update({},!1)});x&&k.series.forEach(function(a){a.update({},!1)});d.loading&&p(!0,k.options.loading,d.loading);t=h&&h.width;h=h&&h.height;g(t)&&t!==k.chartWidth||g(h)&&h!==k.chartHeight?k.setSize(t,h,m):l(c,!0)&&k.redraw(m);n(k,"afterUpdate",{options:d})},setSubtitle:function(a){this.setTitle(void 0,a)}});w(f.prototype,{update:function(a,b,c,f){function g(){e.applyOptions(a);
+null===e.y&&h&&(e.graphic=h.destroy());d(a,!0)&&(h&&h.element&&a&&a.marker&&void 0!==a.marker.symbol&&(e.graphic=h.destroy()),a&&a.dataLabels&&e.dataLabel&&(e.dataLabel=e.dataLabel.destroy()),e.connector&&(e.connector=e.connector.destroy()));m=e.index;k.updateParallelArrays(e,m);t.data[m]=d(t.data[m],!0)||d(a,!0)?e.options:l(a,t.data[m]);k.isDirty=k.isDirtyData=!0;!k.fixedBox&&k.hasCartesianSeries&&(p.isDirtyBox=!0);"point"===t.legendType&&(p.isDirtyLegend=!0);b&&p.redraw(c)}var e=this,k=e.series,
+h=e.graphic,m,p=k.chart,t=k.options;b=l(b,!0);!1===f?g():e.firePointEvent("update",{options:a},g)},remove:function(a,b){this.series.removePoint(this.series.data.indexOf(this),a,b)}});w(x.prototype,{addPoint:function(a,b,d,c){var f=this.options,e=this.data,g=this.chart,k=this.xAxis,k=k&&k.hasNames&&k.names,h=f.data,m,p,t=this.xData,n,x;b=l(b,!0);m={series:this};this.pointClass.prototype.applyOptions.apply(m,[a]);x=m.x;n=t.length;if(this.requireSorting&&x<t[n-1])for(p=!0;n&&t[n-1]>x;)n--;this.updateParallelArrays(m,
+"splice",n,0,0);this.updateParallelArrays(m,n);k&&m.name&&(k[x]=m.name);h.splice(n,0,a);p&&(this.data.splice(n,0,null),this.processData());"point"===f.legendType&&this.generatePoints();d&&(e[0]&&e[0].remove?e[0].remove(!1):(e.shift(),this.updateParallelArrays(m,"shift"),h.shift()));this.isDirtyData=this.isDirty=!0;b&&g.redraw(c)},removePoint:function(a,b,d){var c=this,f=c.data,e=f[a],g=c.points,k=c.chart,h=function(){g&&g.length===f.length&&g.splice(a,1);f.splice(a,1);c.options.data.splice(a,1);c.updateParallelArrays(e||
+{series:c},"splice",a,1);e&&e.destroy();c.isDirty=!0;c.isDirtyData=!0;b&&k.redraw()};H(d,k);b=l(b,!0);e?e.firePointEvent("remove",null,h):h()},remove:function(a,b,d){function c(){f.destroy();f.remove=null;e.isDirtyLegend=e.isDirtyBox=!0;e.linkSeries();l(a,!0)&&e.redraw(b)}var f=this,e=f.chart;!1!==d?n(f,"remove",null,c):c()},update:function(b,d){b=a.cleanRecursively(b,this.userOptions);var c=this,f=c.chart,g=c.userOptions,e=c.oldType||c.type,k=b.type||g.type||f.options.chart.type,h=t[e].prototype,
+m,x=["group","markerGroup","dataLabelsGroup"],r=["navigatorSeries","baseSeries"],u=c.finishedAnimating&&{animation:!1},z=["data","name","turboThreshold"],v=Object.keys(b),F=0<v.length;v.forEach(function(a){-1===z.indexOf(a)&&(F=!1)});if(F)b.data&&this.setData(b.data,!1),b.name&&this.setName(b.name,!1);else{r=x.concat(r);r.forEach(function(a){r[a]=c[a];delete c[a]});b=p(g,u,{index:c.index,pointStart:l(g.pointStart,c.xData[0])},{data:c.options.data},b);c.remove(!1,null,!1);for(m in h)c[m]=void 0;t[k||
+e]?w(c,t[k||e].prototype):a.error(17,!0,f);r.forEach(function(a){c[a]=r[a]});c.init(f,b);b.zIndex!==g.zIndex&&x.forEach(function(a){c[a]&&c[a].attr({zIndex:b.zIndex})});c.oldType=e;f.linkSeries()}n(this,"afterUpdate");l(d,!0)&&f.redraw(F?void 0:!1)},setName:function(a){this.name=this.options.name=this.userOptions.name=a;this.chart.isDirtyLegend=!0}});w(E.prototype,{update:function(a,d){var c=this.chart,f=a&&a.events||{};a=p(this.userOptions,a);c.options[this.coll].indexOf&&(c.options[this.coll][c.options[this.coll].indexOf(this.userOptions)]=
+a);b(c.options[this.coll].events,function(a,b){"undefined"===typeof f[b]&&(f[b]=void 0)});this.destroy(!0);this.init(c,w(a,{events:f}));c.isDirtyBox=!0;l(d,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,d=this.coll,c=this.series,f=c.length;f--;)c[f]&&c[f].remove(!1);v(b.axes,this);v(b[d],this);m(b.options[d])?b.options[d].splice(this.options.index,1):delete b.options[d];b[d].forEach(function(a,b){a.options.index=a.userOptions.index=b});this.destroy();b.isDirtyBox=!0;l(a,!0)&&b.redraw()},
+setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}})})(J);(function(a){var y=a.color,G=a.pick,E=a.Series,h=a.seriesType;h("area","line",{softThreshold:!1,threshold:0},{singleStacks:!1,getStackPoints:function(c){var h=[],u=[],v=this.xAxis,w=this.yAxis,n=w.stacks[this.stackKey],g={},d=this.index,m=w.series,p=m.length,b,l=G(w.options.reversedStacks,!0)?1:-1,f;c=c||this.points;if(this.options.stacking){for(f=0;f<c.length;f++)c[f].leftNull=c[f].rightNull=
+null,g[c[f].x]=c[f];a.objectEach(n,function(a,b){null!==a.total&&u.push(b)});u.sort(function(a,b){return a-b});b=m.map(function(a){return a.visible});u.forEach(function(a,c){var m=0,t,x;if(g[a]&&!g[a].isNull)h.push(g[a]),[-1,1].forEach(function(k){var h=1===k?"rightNull":"leftNull",m=0,r=n[u[c+k]];if(r)for(f=d;0<=f&&f<p;)t=r.points[f],t||(f===d?g[a][h]=!0:b[f]&&(x=n[a].points[f])&&(m-=x[1]-x[0])),f+=l;g[a][1===k?"rightCliff":"leftCliff"]=m});else{for(f=d;0<=f&&f<p;){if(t=n[a].points[f]){m=t[1];break}f+=
+l}m=w.translate(m,0,1,0,1);h.push({isNull:!0,plotX:v.translate(a,0,0,0,1),x:a,plotY:m,yBottom:m})}})}return h},getGraphPath:function(a){var c=E.prototype.getGraphPath,h=this.options,v=h.stacking,w=this.yAxis,n,g,d=[],m=[],p=this.index,b,l=w.stacks[this.stackKey],f=h.threshold,x=w.getThreshold(h.threshold),t,h=h.connectNulls||"percent"===v,H=function(c,g,k){var h=a[c];c=v&&l[h.x].points[p];var t=h[k+"Null"]||0;k=h[k+"Cliff"]||0;var n,e,h=!0;k||t?(n=(t?c[0]:c[1])+k,e=c[0]+k,h=!!t):!v&&a[g]&&a[g].isNull&&
+(n=e=f);void 0!==n&&(m.push({plotX:b,plotY:null===n?x:w.getThreshold(n),isNull:h,isCliff:!0}),d.push({plotX:b,plotY:null===e?x:w.getThreshold(e),doCurve:!1}))};a=a||this.points;v&&(a=this.getStackPoints(a));for(n=0;n<a.length;n++)if(g=a[n].isNull,b=G(a[n].rectPlotX,a[n].plotX),t=G(a[n].yBottom,x),!g||h)h||H(n,n-1,"left"),g&&!v&&h||(m.push(a[n]),d.push({x:n,plotX:b,plotY:t})),h||H(n,n+1,"right");n=c.call(this,m,!0,!0);d.reversed=!0;g=c.call(this,d,!0,!0);g.length&&(g[0]="L");g=n.concat(g);c=c.call(this,
+m,!1,h);g.xMap=n.xMap;this.areaPath=g;return c},drawGraph:function(){this.areaPath=[];E.prototype.drawGraph.apply(this);var a=this,h=this.areaPath,u=this.options,v=[["area","highcharts-area",this.color,u.fillColor]];this.zones.forEach(function(c,h){v.push(["zone-area-"+h,"highcharts-area highcharts-zone-area-"+h+" "+c.className,c.color||a.color,c.fillColor||u.fillColor])});v.forEach(function(c){var n=c[0],g=a[n];g?(g.endX=a.preventGraphAnimation?null:h.xMap,g.animate({d:h})):(g={zIndex:0},a.chart.styledMode||
+(g.fill=G(c[3],y(c[2]).setOpacity(G(u.fillOpacity,.75)).get())),g=a[n]=a.chart.renderer.path(h).addClass(c[1]).attr(g).add(a.group),g.isArea=!0);g.startX=h.xMap;g.shiftUnit=u.step?2:1})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle})})(J);(function(a){var y=a.pick;a=a.seriesType;a("spline","line",{},{getPointSpline:function(a,E,h){var c=E.plotX,r=E.plotY,u=a[h-1];h=a[h+1];var v,w,n,g;if(u&&!u.isNull&&!1!==u.doCurve&&!E.isCliff&&h&&!h.isNull&&!1!==h.doCurve&&!E.isCliff){a=u.plotY;n=h.plotX;h=
+h.plotY;var d=0;v=(1.5*c+u.plotX)/2.5;w=(1.5*r+a)/2.5;n=(1.5*c+n)/2.5;g=(1.5*r+h)/2.5;n!==v&&(d=(g-w)*(n-c)/(n-v)+r-g);w+=d;g+=d;w>a&&w>r?(w=Math.max(a,r),g=2*r-w):w<a&&w<r&&(w=Math.min(a,r),g=2*r-w);g>h&&g>r?(g=Math.max(h,r),w=2*r-g):g<h&&g<r&&(g=Math.min(h,r),w=2*r-g);E.rightContX=n;E.rightContY=g}E=["C",y(u.rightContX,u.plotX),y(u.rightContY,u.plotY),y(v,c),y(w,r),c,r];u.rightContX=u.rightContY=null;return E}})})(J);(function(a){var y=a.seriesTypes.area.prototype,G=a.seriesType;G("areaspline",
+"spline",a.defaultPlotOptions.area,{getStackPoints:y.getStackPoints,getGraphPath:y.getGraphPath,drawGraph:y.drawGraph,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle})})(J);(function(a){var y=a.animObject,G=a.color,E=a.extend,h=a.defined,c=a.isNumber,r=a.merge,u=a.pick,v=a.Series,w=a.seriesType,n=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(){v.prototype.init.apply(this,arguments);var a=this,d=a.chart;d.hasRendered&&d.series.forEach(function(d){d.type===a.type&&(d.isDirty=!0)})},getColumnMetrics:function(){var a=this,d=a.options,c=a.xAxis,h=a.yAxis,b=
+c.options.reversedStacks,b=c.reversed&&!b||!c.reversed&&b,l,f={},n=0;!1===d.grouping?n=1:a.chart.series.forEach(function(b){var d=b.options,c=b.yAxis,g;b.type!==a.type||!b.visible&&a.chart.options.chart.ignoreHiddenSeries||h.len!==c.len||h.pos!==c.pos||(d.stacking?(l=b.stackKey,void 0===f[l]&&(f[l]=n++),g=f[l]):!1!==d.grouping&&(g=n++),b.columnIndex=g)});var t=Math.min(Math.abs(c.transA)*(c.ordinalSlope||d.pointRange||c.closestPointRange||c.tickInterval||1),c.len),r=t*d.groupPadding,v=(t-2*r)/(n||
+1),d=Math.min(d.maxPointWidth||c.len,u(d.pointWidth,v*(1-2*d.pointPadding)));a.columnMetrics={width:d,offset:(v-d)/2+(r+((a.columnIndex||0)+(b?1:0))*v-t/2)*(b?-1:1)};return a.columnMetrics},crispCol:function(a,d,c,h){var b=this.chart,g=this.borderWidth,f=-(g%2?.5:0),g=g%2?.5:1;b.inverted&&b.renderer.isVML&&(g+=1);this.options.crisp&&(c=Math.round(a+c)+f,a=Math.round(a)+f,c-=a);h=Math.round(d+h)+g;f=.5>=Math.abs(d)&&.5<h;d=Math.round(d)+g;h-=d;f&&h&&(--d,h+=1);return{x:a,y:d,width:c,height:h}},translate:function(){var a=
+this,d=a.chart,c=a.options,p=a.dense=2>a.closestPointRange*a.xAxis.transA,p=a.borderWidth=u(c.borderWidth,p?0:1),b=a.yAxis,l=c.threshold,f=a.translatedThreshold=b.getThreshold(l),n=u(c.minPointLength,5),t=a.getColumnMetrics(),r=t.width,F=a.barW=Math.max(r,1+2*p),z=a.pointXOffset=t.offset;d.inverted&&(f-=.5);c.pointPadding&&(F=Math.ceil(F));v.prototype.translate.apply(a);a.points.forEach(function(c){var g=u(c.yBottom,f),k=999+Math.abs(g),m=r,k=Math.min(Math.max(-k,c.plotY),b.len+k),e=c.plotX+z,q=F,
+p=Math.min(k,g),t,x=Math.max(k,g)-p;n&&Math.abs(x)<n&&(x=n,t=!b.reversed&&!c.negative||b.reversed&&c.negative,c.y===l&&a.dataMax<=l&&b.min<l&&(t=!t),p=Math.abs(p-f)>n?g-n:f-(t?n:0));h(c.options.pointWidth)&&(m=q=Math.ceil(c.options.pointWidth),e-=Math.round((m-r)/2));c.barX=e;c.pointWidth=m;c.tooltipPos=d.inverted?[b.len+b.pos-d.plotLeft-k,a.xAxis.len-e-q/2,x]:[e+q/2,k+b.pos-d.plotTop,x];c.shapeType=c.shapeType||"rect";c.shapeArgs=a.crispCol.apply(a,c.isNull?[e,f,q,0]:[e,p,q,x])})},getSymbol:a.noop,
+drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,drawGraph:function(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")},pointAttribs:function(a,d){var c=this.options,g,b=this.pointAttrToOptions||{};g=b.stroke||"borderColor";var l=b["stroke-width"]||"borderWidth",f=a&&a.color||this.color,h=a&&a[g]||c[g]||this.color||f,t=a&&a[l]||c[l]||this[l]||0,b=c.dashStyle;a&&this.zones.length&&(f=a.getZone(),f=a.options.color||f&&f.color||this.color);d&&(a=r(c.states[d],a.options.states&&
+a.options.states[d]||{}),d=a.brightness,f=a.color||void 0!==d&&G(f).brighten(a.brightness).get()||f,h=a[g]||h,t=a[l]||t,b=a.dashStyle||b);g={fill:f,stroke:h,"stroke-width":t};b&&(g.dashstyle=b);return g},drawPoints:function(){var a=this,d=this.chart,h=a.options,p=d.renderer,b=h.animationLimit||250,l;a.points.forEach(function(f){var g=f.graphic,m=g&&d.pointCount<b?"animate":"attr";if(c(f.plotY)&&null!==f.y){l=f.shapeArgs;if(g)g[m](r(l));else f.graphic=g=p[f.shapeType](l).add(f.group||a.group);h.borderRadius&&
+g.attr({r:h.borderRadius});d.styledMode||g[m](a.pointAttribs(f,f.selected&&"select")).shadow(h.shadow,null,h.stacking&&!h.borderRadius);g.addClass(f.getClassName(),!0)}else g&&(f.graphic=g.destroy())})},animate:function(a){var d=this,c=this.yAxis,g=d.options,b=this.chart.inverted,h={},f=b?"translateX":"translateY",x;n&&(a?(h.scaleY=.001,a=Math.min(c.pos+c.len,Math.max(c.pos,c.toPixels(g.threshold))),b?h.translateX=a-c.len:h.translateY=a,d.group.attr(h)):(x=d.group.attr(f),d.group.animate({scaleY:1},
+E(y(d.options.animation),{step:function(a,b){h[f]=x+b.pos*(c.pos-x);d.group.attr(h)}})),d.animate=null))},remove:function(){var a=this,d=a.chart;d.hasRendered&&d.series.forEach(function(d){d.type===a.type&&(d.isDirty=!0)});v.prototype.remove.apply(a,arguments)}})})(J);(function(a){a=a.seriesType;a("bar","column",null,{inverted:!0})})(J);(function(a){var y=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: 10px"\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&&y.prototype.drawGraph.call(this)}})})(J);(function(a){var y=a.deg2rad,G=a.isNumber,E=a.pick,h=a.relativeLength;a.CenteredSeriesMixin={getCenter:function(){var a=this.options,r=this.chart,u=2*(a.slicedOffset||0),v=r.plotWidth-2*u,
+r=r.plotHeight-2*u,w=a.center,w=[E(w[0],"50%"),E(w[1],"50%"),a.size||"100%",a.innerSize||0],n=Math.min(v,r),g,d;for(g=0;4>g;++g)d=w[g],a=2>g||2===g&&/%$/.test(d),w[g]=h(d,[v,r,n,w[2]][g])+(a?u:0);w[3]>w[2]&&(w[3]=w[2]);return w},getStartAndEndRadians:function(a,h){a=G(a)?a:0;h=G(h)&&h>a&&360>h-a?h:a+360;return{start:y*(a+-90),end:y*(h+-90)}}}})(J);(function(a){var y=a.addEvent,G=a.CenteredSeriesMixin,E=a.defined,h=a.extend,c=G.getStartAndEndRadians,r=a.noop,u=a.pick,v=a.Point,w=a.Series,n=a.seriesType,
+g=a.setAnimation;n("pie","line",{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{allowOverlap:!0,connectorPadding:5,distance:30,enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},softConnector:!0,x:0,connectorShape:"fixedOffset",crookDistance:"70%"},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}}},{isCartesian:!1,
+requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttribs:a.seriesTypes.column.prototype.pointAttribs,animate:function(a){var d=this,c=d.points,b=d.startAngleRad;a||(c.forEach(function(a){var c=a.graphic,g=a.shapeArgs;c&&(c.attr({r:a.startR||d.center[3]/2,start:b,end:b}),c.animate({r:g.r,start:g.start,end:g.end},d.options.animation))}),d.animate=null)},updateTotals:function(){var a,c=0,g=this.points,b=g.length,h,f=this.options.ignoreHiddenPoint;
+for(a=0;a<b;a++)h=g[a],c+=f&&!h.visible?0:h.isNull?0:h.y;this.total=c;for(a=0;a<b;a++)h=g[a],h.percentage=0<c&&(h.visible||!f)?h.y/c*100:0,h.total=c},generatePoints:function(){w.prototype.generatePoints.call(this);this.updateTotals()},getX:function(a,c,g){var b=this.center,d=this.radii?this.radii[g.index]:b[2]/2;return b[0]+(c?-1:1)*Math.cos(Math.asin(Math.max(Math.min((a-b[1])/(d+g.labelDistance),1),-1)))*(d+g.labelDistance)+(0<g.labelDistance?(c?-1:1)*this.options.dataLabels.padding:0)},translate:function(a){this.generatePoints();
+var d=0,g=this.options,b=g.slicedOffset,h=b+(g.borderWidth||0),f,n,t=c(g.startAngle,g.endAngle),r=this.startAngleRad=t.start,t=(this.endAngleRad=t.end)-r,v=this.points,z,k,A=g.dataLabels.distance,g=g.ignoreHiddenPoint,w,B=v.length,e;a||(this.center=a=this.getCenter());for(w=0;w<B;w++){e=v[w];e.labelDistance=u(e.options.dataLabels&&e.options.dataLabels.distance,A);this.maxLabelDistance=Math.max(this.maxLabelDistance||0,e.labelDistance);f=r+d*t;if(!g||e.visible)d+=e.percentage/100;n=r+d*t;e.shapeType=
+"arc";e.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*n)/1E3};n=(n+f)/2;n>1.5*Math.PI?n-=2*Math.PI:n<-Math.PI/2&&(n+=2*Math.PI);e.slicedTranslation={translateX:Math.round(Math.cos(n)*b),translateY:Math.round(Math.sin(n)*b)};z=Math.cos(n)*a[2]/2;k=Math.sin(n)*a[2]/2;e.tooltipPos=[a[0]+.7*z,a[1]+.7*k];e.half=n<-Math.PI/2||n>Math.PI/2?1:0;e.angle=n;f=Math.min(h,e.labelDistance/5);e.labelPosition={natural:{x:a[0]+z+Math.cos(n)*e.labelDistance,y:a[1]+k+
+Math.sin(n)*e.labelDistance},"final":{},alignment:0>e.labelDistance?"center":e.half?"right":"left",connectorPosition:{breakAt:{x:a[0]+z+Math.cos(n)*f,y:a[1]+k+Math.sin(n)*f},touchingSliceAt:{x:a[0]+z,y:a[1]+k}}}}},drawGraph:null,drawPoints:function(){var a=this,c=a.chart,g=c.renderer,b,l,f,n,t=a.options.shadow;!t||a.shadowGroup||c.styledMode||(a.shadowGroup=g.g("shadow").add(a.group));a.points.forEach(function(d){l=d.graphic;if(d.isNull)l&&(d.graphic=l.destroy());else{n=d.shapeArgs;b=d.getTranslate();
+if(!c.styledMode){var m=d.shadowGroup;t&&!m&&(m=d.shadowGroup=g.g("shadow").add(a.shadowGroup));m&&m.attr(b);f=a.pointAttribs(d,d.selected&&"select")}l?(l.setRadialReference(a.center),c.styledMode||l.attr(f),l.animate(h(n,b))):(d.graphic=l=g[d.shapeType](n).setRadialReference(a.center).attr(b).add(a.group),c.styledMode||l.attr(f).attr({"stroke-linejoin":"round"}).shadow(t,m));l.attr({visibility:d.visible?"inherit":"hidden"});l.addClass(d.getClassName())}})},searchPoint:r,sortByAngle:function(a,c){a.sort(function(a,
+b){return void 0!==a.angle&&(b.angle-a.angle)*c})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,getCenter:G.getCenter,getSymbol:r},{init:function(){v.prototype.init.apply(this,arguments);var a=this,c;a.name=u(a.name,"Slice");c=function(d){a.slice("select"===d.type)};y(a,"select",c);y(a,"unselect",c);return a},isValid:function(){return a.isNumber(this.y,!0)&&0<=this.y},setVisible:function(a,c){var d=this,b=d.series,g=b.chart,f=b.options.ignoreHiddenPoint;c=u(c,f);a!==d.visible&&(d.visible=d.options.visible=
+a=void 0===a?!d.visible:a,b.options.data[b.data.indexOf(d)]=d.options,["graphic","dataLabel","connector","shadowGroup"].forEach(function(b){if(d[b])d[b][a?"show":"hide"](!0)}),d.legendItem&&g.legend.colorizeItem(d,a),a||"hover"!==d.state||d.setState(""),f&&(b.isDirty=!0),c&&g.redraw())},slice:function(a,c,h){var b=this.series;g(h,b.chart);u(c,!0);this.sliced=this.options.sliced=E(a)?a:!this.sliced;b.options.data[b.data.indexOf(this)]=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 d=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(d.x,d.y,d.r+a,d.r+a,{innerR:this.shapeArgs.r-1,start:d.start,end:d.end})},connectorShapes:{fixedOffset:function(a,c,g){var b=c.breakAt;c=c.touchingSliceAt;return["M",a.x,a.y].concat(g.softConnector?["C",a.x+("left"===a.alignment?-5:5),a.y,2*
+b.x-c.x,2*b.y-c.y,b.x,b.y]:["L",b.x,b.y]).concat(["L",c.x,c.y])},straight:function(a,c){c=c.touchingSliceAt;return["M",a.x,a.y,"L",c.x,c.y]},crookedLine:function(d,c,g){c=c.touchingSliceAt;var b=this.series,h=b.center[0],f=b.chart.plotWidth,m=b.chart.plotLeft,b=d.alignment,t=this.shapeArgs.r;g=a.relativeLength(g.crookDistance,1);g="left"===b?h+t+(f+m-h-t)*(1-g):m+(h-t)*g;h=["L",g,d.y];if("left"===b?g>d.x||g<c.x:g<d.x||g>c.x)h=[];return["M",d.x,d.y].concat(h).concat(["L",c.x,c.y])}},getConnectorPath:function(){var a=
+this.labelPosition,c=this.series.options.dataLabels,g=c.connectorShape,b=this.connectorShapes;b[g]&&(g=b[g]);return g.call(this,{x:a.final.x,y:a.final.y,alignment:a.alignment},a.connectorPosition,c)}})})(J);(function(a){var y=a.addEvent,G=a.arrayMax,E=a.defined,h=a.extend,c=a.format,r=a.merge,u=a.noop,v=a.pick,w=a.relativeLength,n=a.Series,g=a.seriesTypes,d=a.stableSort,m=a.isArray,p=a.splat;a.distribute=function(b,c,f){function g(a,b){return a.target-b.target}var h,l=!0,m=b,p=[],k;k=0;var n=m.reducedLen||
+c;for(h=b.length;h--;)k+=b[h].size;if(k>n){d(b,function(a,b){return(b.rank||0)-(a.rank||0)});for(k=h=0;k<=n;)k+=b[h].size,h++;p=b.splice(h-1,b.length)}d(b,g);for(b=b.map(function(a){return{size:a.size,targets:[a.target],align:v(a.align,.5)}});l;){for(h=b.length;h--;)l=b[h],k=(Math.min.apply(0,l.targets)+Math.max.apply(0,l.targets))/2,l.pos=Math.min(Math.max(0,k-l.size*l.align),c-l.size);h=b.length;for(l=!1;h--;)0<h&&b[h-1].pos+b[h-1].size>b[h].pos&&(b[h-1].size+=b[h].size,b[h-1].targets=b[h-1].targets.concat(b[h].targets),
+b[h-1].align=.5,b[h-1].pos+b[h-1].size>c&&(b[h-1].pos=c-b[h-1].size),b.splice(h,1),l=!0)}m.push.apply(m,p);h=0;b.some(function(b){var d=0;if(b.targets.some(function(){m[h].pos=b.pos+d;if(Math.abs(m[h].pos-m[h].target)>f)return m.slice(0,h+1).forEach(function(a){delete a.pos}),m.reducedLen=(m.reducedLen||c)-.1*c,m.reducedLen>.1*c&&a.distribute(m,c,f),!0;d+=m[h].size;h++}))return!0});d(m,g)};n.prototype.drawDataLabels=function(){function b(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}function d(a,b){var c=[],d;if(m(a)&&!m(b))c=a.map(function(a){return r(a,b)});else if(m(b)&&!m(a))c=b.map(function(b){return r(a,b)});else if(m(a)||m(b))for(d=Math.max(a.length,b.length);d--;)c[d]=r(a[d],b[d]);else c=r(a,b);return c}var f=this,g=f.chart,h=f.options,n=h.dataLabels,u=f.points,z,k=f.hasRendered||0,A,w=v(n.defer,!!h.animation),B=g.renderer,
+n=d(d(g.options.plotOptions&&g.options.plotOptions.series&&g.options.plotOptions.series.dataLabels,g.options.plotOptions&&g.options.plotOptions[f.type]&&g.options.plotOptions[f.type].dataLabels),n);a.fireEvent(this,"drawDataLabels");if(m(n)||n.enabled||f._hasPointLabels)A=f.plotGroup("dataLabelsGroup","data-labels",w&&!k?"hidden":"visible",n.zIndex||6),w&&(A.attr({opacity:+k}),k||y(f,"afterAnimate",function(){f.visible&&A.show(!0);A[h.animation?"animate":"attr"]({opacity:1},{duration:200})})),u.forEach(function(e){z=
+p(d(n,e.dlOptions||e.options&&e.options.dataLabels));z.forEach(function(d,k){var l=d.enabled&&!e.isNull&&b(e,d),m,q,t,p,n=e.dataLabels?e.dataLabels[k]:e.dataLabel,r=e.connectors?e.connectors[k]:e.connector,u=!n;l&&(m=e.getLabelConfig(),q=d[e.formatPrefix+"Format"]||d.format,m=E(q)?c(q,m,g.time):(d[e.formatPrefix+"Formatter"]||d.formatter).call(m,d),q=d.style,t=d.rotation,g.styledMode||(q.color=v(d.color,q.color,f.color,"#000000"),"contrast"===q.color&&(e.contrastColor=B.getContrast(e.color||f.color),
+q.color=d.inside||0>v(d.distance,e.labelDistance)||h.stacking?e.contrastColor:"#000000"),h.cursor&&(q.cursor=h.cursor)),p={r:d.borderRadius||0,rotation:t,padding:d.padding,zIndex:1},g.styledMode||(p.fill=d.backgroundColor,p.stroke=d.borderColor,p["stroke-width"]=d.borderWidth),a.objectEach(p,function(a,b){void 0===a&&delete p[b]}));!n||l&&E(m)?l&&E(m)&&(n?p.text=m:(e.dataLabels=e.dataLabels||[],n=e.dataLabels[k]=t?B.text(m,0,-9999).addClass("highcharts-data-label"):B.label(m,0,-9999,d.shape,null,
+null,d.useHTML,null,"data-label"),k||(e.dataLabel=n),n.addClass(" highcharts-data-label-color-"+e.colorIndex+" "+(d.className||"")+(d.useHTML?" highcharts-tracker":""))),n.options=d,n.attr(p),g.styledMode||n.css(q).shadow(d.shadow),n.added||n.add(A),f.alignDataLabel(e,n,d,null,u)):(e.dataLabel=e.dataLabel&&e.dataLabel.destroy(),e.dataLabels&&(1===e.dataLabels.length?delete e.dataLabels:delete e.dataLabels[k]),k||delete e.dataLabel,r&&(e.connector=e.connector.destroy(),e.connectors&&(1===e.connectors.length?
+delete e.connectors:delete e.connectors[k])))})});a.fireEvent(this,"afterDrawDataLabels")};n.prototype.alignDataLabel=function(a,d,c,g,m){var b=this.chart,f=this.isCartesian&&b.inverted,l=v(a.dlBox&&a.dlBox.centerX,a.plotX,-9999),k=v(a.plotY,-9999),n=d.getBBox(),p,t=c.rotation,e=c.align,q=this.visible&&(a.series.forceDL||b.isInsidePlot(l,Math.round(k),f)||g&&b.isInsidePlot(l,f?g.x+1:g.y+g.height-1,f)),r="justify"===v(c.overflow,"justify");if(q&&(p=b.renderer.fontMetrics(b.styledMode?void 0:c.style.fontSize,
+d).b,g=h({x:f?this.yAxis.len-k:l,y:Math.round(f?this.xAxis.len-l:k),width:0,height:0},g),h(c,{width:n.width,height:n.height}),t?(r=!1,l=b.renderer.rotCorr(p,t),l={x:g.x+c.x+g.width/2+l.x,y:g.y+c.y+{top:0,middle:.5,bottom:1}[c.verticalAlign]*g.height},d[m?"attr":"animate"](l).attr({align:e}),k=(t+720)%360,k=180<k&&360>k,"left"===e?l.y-=k?n.height:0:"center"===e?(l.x-=n.width/2,l.y-=n.height/2):"right"===e&&(l.x-=n.width,l.y-=k?0:n.height),d.placed=!0,d.alignAttr=l):(d.align(c,null,g),l=d.alignAttr),
+r&&0<=g.height?a.isLabelJustified=this.justifyDataLabel(d,c,l,n,g,m):v(c.crop,!0)&&(q=b.isInsidePlot(l.x,l.y)&&b.isInsidePlot(l.x+n.width,l.y+n.height)),c.shape&&!t))d[m?"attr":"animate"]({anchorX:f?b.plotWidth-a.plotY:a.plotX,anchorY:f?b.plotHeight-a.plotX:a.plotY});q||(d.attr({y:-9999}),d.placed=!1)};n.prototype.justifyDataLabel=function(a,d,c,g,h,m){var b=this.chart,f=d.align,k=d.verticalAlign,l,n,p=a.box?0:a.padding||0;l=c.x+p;0>l&&("right"===f?d.align="left":d.x=-l,n=!0);l=c.x+g.width-p;l>b.plotWidth&&
+("left"===f?d.align="right":d.x=b.plotWidth-l,n=!0);l=c.y+p;0>l&&("bottom"===k?d.verticalAlign="top":d.y=-l,n=!0);l=c.y+g.height-p;l>b.plotHeight&&("top"===k?d.verticalAlign="bottom":d.y=b.plotHeight-l,n=!0);n&&(a.placed=!m,a.align(d,null,h));return n};g.pie&&(g.pie.prototype.dataLabelPositioners={radialDistributionY:function(a){return a.top+a.distributeBox.pos},radialDistributionX:function(a,d,c,g){return a.getX(c<d.top+2||c>d.bottom-2?g:c,d.half,d)},justify:function(a,d,c){return c[0]+(a.half?-1:
+1)*(d+a.labelDistance)},alignToPlotEdges:function(a,d,c,g){a=a.getBBox().width;return d?a+g:c-a-g},alignToConnectors:function(a,d,c,g){var b=0,f;a.forEach(function(a){f=a.dataLabel.getBBox().width;f>b&&(b=f)});return d?b+g:c-b-g}},g.pie.prototype.drawDataLabels=function(){var b=this,d=b.data,c,g=b.chart,h=b.options.dataLabels,m=h.connectorPadding,p=v(h.connectorWidth,1),r=g.plotWidth,k=g.plotHeight,u=g.plotLeft,w=Math.round(g.chartWidth/3),B,e=b.center,q=e[2]/2,y=e[1],I,J,K,M,S=[[],[]],C,N,P,T,Q=
+[0,0,0,0],O=b.dataLabelPositioners;b.visible&&(h.enabled||b._hasPointLabels)&&(d.forEach(function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&&(a.dataLabel.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),a.dataLabel.shortened=!1)}),n.prototype.drawDataLabels.apply(b),d.forEach(function(a){a.dataLabel&&(a.visible?(S[a.half].push(a),a.dataLabel._pos=null,!E(h.style.width)&&!E(a.options.dataLabels&&a.options.dataLabels.style&&a.options.dataLabels.style.width)&&a.dataLabel.getBBox().width>
+w&&(a.dataLabel.css({width:.7*w}),a.dataLabel.shortened=!0)):(a.dataLabel=a.dataLabel.destroy(),a.dataLabels&&1===a.dataLabels.length&&delete a.dataLabels))}),S.forEach(function(d,f){var l,n,p=d.length,t=[],x;if(p)for(b.sortByAngle(d,f-.5),0<b.maxLabelDistance&&(l=Math.max(0,y-q-b.maxLabelDistance),n=Math.min(y+q+b.maxLabelDistance,g.plotHeight),d.forEach(function(a){0<a.labelDistance&&a.dataLabel&&(a.top=Math.max(0,y-q-a.labelDistance),a.bottom=Math.min(y+q+a.labelDistance,g.plotHeight),x=a.dataLabel.getBBox().height||
+21,a.distributeBox={target:a.labelPosition.natural.y-a.top+x/2,size:x,rank:a.y},t.push(a.distributeBox))}),l=n+x-l,a.distribute(t,l,l/5)),T=0;T<p;T++){c=d[T];K=c.labelPosition;I=c.dataLabel;P=!1===c.visible?"hidden":"inherit";N=l=K.natural.y;t&&E(c.distributeBox)&&(void 0===c.distributeBox.pos?P="hidden":(M=c.distributeBox.size,N=O.radialDistributionY(c)));delete c.positionIndex;if(h.justify)C=O.justify(c,q,e);else switch(h.alignTo){case "connectors":C=O.alignToConnectors(d,f,r,u);break;case "plotEdges":C=
+O.alignToPlotEdges(I,f,r,u);break;default:C=O.radialDistributionX(b,c,N,l)}I._attr={visibility:P,align:K.alignment};I._pos={x:C+h.x+({left:m,right:-m}[K.alignment]||0),y:N+h.y-10};K.final.x=C;K.final.y=N;v(h.crop,!0)&&(J=I.getBBox().width,l=null,C-J<m&&1===f?(l=Math.round(J-C+m),Q[3]=Math.max(l,Q[3])):C+J>r-m&&0===f&&(l=Math.round(C+J-r+m),Q[1]=Math.max(l,Q[1])),0>N-M/2?Q[0]=Math.max(Math.round(-N+M/2),Q[0]):N+M/2>k&&(Q[2]=Math.max(Math.round(N+M/2-k),Q[2])),I.sideOverflow=l)}}),0===G(Q)||this.verifyDataLabelOverflow(Q))&&
+(this.placeDataLabels(),p&&this.points.forEach(function(a){var d;B=a.connector;if((I=a.dataLabel)&&I._pos&&a.visible&&0<a.labelDistance){P=I._attr.visibility;if(d=!B)a.connector=B=g.renderer.path().addClass("highcharts-data-label-connector  highcharts-color-"+a.colorIndex+(a.className?" "+a.className:"")).add(b.dataLabelsGroup),g.styledMode||B.attr({"stroke-width":p,stroke:h.connectorColor||a.color||"#666666"});B[d?"attr":"animate"]({d:a.getConnectorPath()});B.attr("visibility",P)}else B&&(a.connector=
+B.destroy())}))},g.pie.prototype.placeDataLabels=function(){this.points.forEach(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:(this.options.dataLabels.style||{}).textOverflow||"ellipsis"}),b.shortened=!0),b.attr(b._attr),b[b.moved?"animate":"attr"](a),b.moved=!0):b&&b.attr({y:-9999}))},this)},g.pie.prototype.alignDataLabel=u,g.pie.prototype.verifyDataLabelOverflow=function(a){var b=
+this.center,d=this.options,c=d.center,g=d.minSize||80,h,m=null!==d.size;m||(null!==c[0]?h=Math.max(b[2]-Math.max(a[1],a[3]),g):(h=Math.max(b[2]-a[1]-a[3],g),b[0]+=(a[3]-a[1])/2),null!==c[1]?h=Math.max(Math.min(h,b[2]-Math.max(a[0],a[2])),g):(h=Math.max(Math.min(h,b[2]-a[0]-a[2]),g),b[1]+=(a[0]-a[2])/2),h<b[2]?(b[2]=h,b[3]=Math.min(w(d.innerSize||0,h),h),this.translate(b),this.drawDataLabels&&this.drawDataLabels()):m=!0);return m});g.column&&(g.column.prototype.alignDataLabel=function(a,d,c,g,h){var b=
+this.chart.inverted,f=a.series,l=a.dlBox||a.shapeArgs,k=v(a.below,a.plotY>v(this.translatedThreshold,f.yAxis.len)),m=v(c.inside,!!this.options.stacking);l&&(g=r(l),0>g.y&&(g.height+=g.y,g.y=0),l=g.y+g.height-f.yAxis.len,0<l&&(g.height-=l),b&&(g={x:f.yAxis.len-g.y-g.height,y:f.xAxis.len-g.x-g.width,width:g.height,height:g.width}),m||(b?(g.x+=k?0:g.width,g.width=0):(g.y+=k?g.height:0,g.height=0)));c.align=v(c.align,!b||m?"center":k?"right":"left");c.verticalAlign=v(c.verticalAlign,b||m?"middle":k?"top":
+"bottom");n.prototype.alignDataLabel.call(this,a,d,c,g,h);a.isLabelJustified&&a.contrastColor&&d.css({color:a.contrastColor})})})(J);(function(a){var y=a.Chart,G=a.isArray,E=a.objectEach,h=a.pick,c=a.addEvent,r=a.fireEvent;c(y,"render",function(){var a=[];(this.labelCollectors||[]).forEach(function(c){a=a.concat(c())});(this.yAxis||[]).forEach(function(c){c.options.stackLabels&&!c.options.stackLabels.allowOverlap&&E(c.stacks,function(c){E(c,function(c){a.push(c.label)})})});(this.series||[]).forEach(function(c){var r=
+c.options.dataLabels;c.visible&&(!1!==r.enabled||c._hasPointLabels)&&c.points.forEach(function(c){c.visible&&(G(c.dataLabels)?c.dataLabels:c.dataLabel?[c.dataLabel]:[]).forEach(function(g){var d=g.options;g.labelrank=h(d.labelrank,c.labelrank,c.shapeArgs&&c.shapeArgs.height);d.allowOverlap||a.push(g)})})});this.hideOverlappingLabels(a)});y.prototype.hideOverlappingLabels=function(a){var c=this,h=a.length,n=c.renderer,g,d,m,p,b,l,f=function(a,b,c,d,f,g,h,l){return!(f>a+c||f+h<a||g>b+d||g+l<b)};m=function(a){var b,
+c,d,f=a.box?0:a.padding||0;d=0;if(a&&(!a.alignAttr||a.placed))return b=a.alignAttr||{x:a.attr("x"),y:a.attr("y")},c=a.parentGroup,a.width||(d=a.getBBox(),a.width=d.width,a.height=d.height,d=n.fontMetrics(null,a.element).h),{x:b.x+(c.translateX||0)+f,y:b.y+(c.translateY||0)+f-d,width:a.width-2*f,height:a.height-2*f}};for(d=0;d<h;d++)if(g=a[d])g.oldOpacity=g.opacity,g.newOpacity=1,g.absoluteBox=m(g);a.sort(function(a,b){return(b.labelrank||0)-(a.labelrank||0)});for(d=0;d<h;d++)for(l=(m=a[d])&&m.absoluteBox,
+g=d+1;g<h;++g)if(b=(p=a[g])&&p.absoluteBox,l&&b&&m!==p&&0!==m.newOpacity&&0!==p.newOpacity&&(b=f(l.x,l.y,l.width,l.height,b.x,b.y,b.width,b.height)))(m.labelrank<p.labelrank?m:p).newOpacity=0;a.forEach(function(a){var b,d;a&&(d=a.newOpacity,a.oldOpacity!==d&&(a.alignAttr&&a.placed?(d?a.show(!0):b=function(){a.hide()},a.alignAttr.opacity=d,a[a.isOld?"animate":"attr"](a.alignAttr,null,b),r(c,"afterHideOverlappingLabels")):a.attr({opacity:d})),a.isOld=!0)})}})(J);(function(a){var y=a.addEvent,G=a.Chart,
+E=a.createElement,h=a.css,c=a.defaultOptions,r=a.defaultPlotOptions,u=a.extend,v=a.fireEvent,w=a.hasTouch,n=a.isObject,g=a.Legend,d=a.merge,m=a.pick,p=a.Point,b=a.Series,l=a.seriesTypes,f=a.svg,x;x=a.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=function(a){var b=c.getPointFromEvent(a);void 0!==b&&(c.isDirectTouch=!0,b.onMouseOver(a))};a.points.forEach(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||(a.trackerGroups.forEach(function(f){if(a[f]){a[f].addClass("highcharts-tracker").on("mouseover",d).on("mouseout",function(a){c.onTrackerMouseOut(a)});if(w)a[f].on("touchstart",d);!b.styledMode&&a.options.cursor&&a[f].css(h).css({cursor:a.options.cursor})}}),a._hasTracking=!0);v(this,"afterDrawTracker")},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),g=d.length,h=a.chart,l=h.pointer,m=h.renderer,e=h.options.tooltip.snap,
+q=a.tracker,p,n=function(){if(h.hoverSeries!==a)a.onMouseOver()},r="rgba(192,192,192,"+(f?.0001:.002)+")";if(g&&!c)for(p=g+1;p--;)"M"===d[p]&&d.splice(p+1,0,d[p+1]-e,d[p+2],"L"),(p&&"M"===d[p]||p===g)&&d.splice(p,0,"L",d[p-2]+e,d[p-1]);q?q.attr({d:d}):a.graph&&(a.tracker=m.path(d).attr({visibility:a.visible?"visible":"hidden",zIndex:2}).addClass(c?"highcharts-tracker-area":"highcharts-tracker-line").add(a.group),h.styledMode||a.tracker.attr({"stroke-linejoin":"round",stroke:r,fill:c?r:"none","stroke-width":a.graph.strokeWidth()+
+(c?0:2*e)}),[a.tracker,a.markerGroup].forEach(function(a){a.addClass("highcharts-tracker").on("mouseover",n).on("mouseout",function(a){l.onTrackerMouseOut(a)});b.cursor&&!h.styledMode&&a.css({cursor:b.cursor});if(w)a.on("touchstart",n)}));v(this,"afterDrawTracker")}};l.column&&(l.column.prototype.drawTracker=x.drawTrackerPoint);l.pie&&(l.pie.prototype.drawTracker=x.drawTrackerPoint);l.scatter&&(l.scatter.prototype.drawTracker=x.drawTrackerPoint);u(g.prototype,{setItemEvents:function(a,b,c){var f=
+this,g=f.chart.renderer.boxWrapper,h="highcharts-legend-"+(a instanceof p?"point":"series")+"-active",l=f.chart.styledMode;(c?b:a.legendGroup).on("mouseover",function(){a.setState("hover");g.addClass(h);l||b.css(f.options.itemHoverStyle)}).on("mouseout",function(){f.styledMode||b.css(d(a.visible?f.itemStyle:f.itemHiddenStyle));g.removeClass(h);a.setState()}).on("click",function(b){var c=function(){a.setVisible&&a.setVisible()};g.removeClass(h);b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",
+b,c):v(a,"legendItemClick",b,c)})},createCheckboxForItem:function(a){a.checkbox=E("input",{type:"checkbox",className:"highcharts-legend-checkbox",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);y(a.checkbox,"click",function(b){v(a.series||a,"checkboxClick",{checked:b.target.checked,item:a},function(){a.select()})})}});u(G.prototype,{showResetZoom:function(){function a(){b.zoomOut()}var b=this,d=c.lang,f=b.options.chart.resetZoomButton,g=f.theme,h=
+g.states,l="chart"===f.relativeTo?null:"plotBox";v(this,"beforeShowResetZoom",null,function(){b.resetZoomButton=b.renderer.button(d.resetZoom,null,null,a,g,h&&h.hover).attr({align:f.position.align,title:d.resetZoomTitle}).addClass("highcharts-reset-zoom").add().align(f.position,!1,l)})},zoomOut:function(){v(this,"selection",{resetSelection:!0},this.zoom)},zoom:function(a){var b,c=this.pointer,d=!1,f;!a||a.resetSelection?(this.axes.forEach(function(a){b=a.zoom()}),c.initiated=!1):a.xAxis.concat(a.yAxis).forEach(function(a){var f=
+a.axis;c[f.isXAxis?"zoomX":"zoomY"]&&(b=f.zoom(a.min,a.max),f.displayBtn&&(d=!0))});f=this.resetZoomButton;d&&!f?this.showResetZoom():!d&&n(f)&&(this.resetZoomButton=f.destroy());b&&this.redraw(m(this.options.chart.animation,a&&a.animation,100>this.pointCount))},pan:function(a,b){var c=this,d=c.hoverPoints,f;d&&d.forEach(function(a){a.setState()});("xy"===b?[1,0]:[1]).forEach(function(b){b=c[b?"xAxis":"yAxis"][0];var d=b.horiz,g=a[d?"chartX":"chartY"],d=d?"mouseDownX":"mouseDownY",e=c[d],h=(b.pointRange||
+0)/2,k=b.reversed&&!c.inverted||!b.reversed&&c.inverted?-1:1,l=b.getExtremes(),m=b.toValue(e-g,!0)+h*k,k=b.toValue(e+b.len-g,!0)-h*k,p=k<m,e=p?k:m,m=p?m:k,k=Math.min(l.dataMin,h?l.min:b.toValue(b.toPixels(l.min)-b.minPixelPadding)),h=Math.max(l.dataMax,h?l.max:b.toValue(b.toPixels(l.max)+b.minPixelPadding)),p=k-e;0<p&&(m+=p,e=k);p=m-h;0<p&&(m=h,e-=p);b.series.length&&e!==l.min&&m!==l.max&&(b.setExtremes(e,m,!1,!1,{trigger:"pan"}),f=!0);c[d]=g});f&&c.redraw(!1);h(c.container,{cursor:"move"})}});u(p.prototype,
+{select:function(a,b){var c=this,d=c.series,f=d.chart;a=m(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[d.data.indexOf(c)]=c.options;c.setState(a&&"select");b||f.getSelectedPoints().forEach(function(a){a.selected&&a!==c&&(a.selected=a.options.selected=!1,d.options.data[d.data.indexOf(a)]=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");(a.hoverPoints||[]).forEach(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){y(b,c,a)});this.hasImportedEvents=!0}},setState:function(a,b){var c=Math.floor(this.plotX),d=this.plotY,f=this.series,
+g=f.options.states[a||"normal"]||{},h=r[f.type].marker&&f.options.marker,l=h&&!1===h.enabled,e=h&&h.states&&h.states[a||"normal"]||{},p=!1===e.enabled,n=f.stateMarkerGraphic,t=this.marker||{},w=f.chart,x=f.halo,y,E=h&&f.markerAttribs;a=a||"";if(!(a===this.state&&!b||this.selected&&"select"!==a||!1===g.enabled||a&&(p||l&&!1===e.enabled)||a&&t.states&&t.states[a]&&!1===t.states[a].enabled)){E&&(y=f.markerAttribs(this,a));if(this.graphic)this.state&&this.graphic.removeClass("highcharts-point-"+this.state),
+a&&this.graphic.addClass("highcharts-point-"+a),w.styledMode||this.graphic.animate(f.pointAttribs(this,a),m(w.options.chart.animation,g.animation)),y&&this.graphic.animate(y,m(w.options.chart.animation,e.animation,h.animation)),n&&n.hide();else{if(a&&e){h=t.symbol||f.symbol;n&&n.currentSymbol!==h&&(n=n.destroy());if(n)n[b?"animate":"attr"]({x:y.x,y:y.y});else h&&(f.stateMarkerGraphic=n=w.renderer.symbol(h,y.x,y.y,y.width,y.height).add(f.markerGroup),n.currentSymbol=h);!w.styledMode&&n&&n.attr(f.pointAttribs(this,
+a))}n&&(n[a&&w.isInsidePlot(c,d,w.inverted)?"show":"hide"](),n.element.point=this)}(c=g.halo)&&c.size?(x||(f.halo=x=w.renderer.path().add((this.graphic||n).parentGroup)),x.show()[b?"animate":"attr"]({d:this.haloPath(c.size)}),x.attr({"class":"highcharts-halo highcharts-color-"+m(this.colorIndex,f.colorIndex)+(this.className?" "+this.className:""),zIndex:-1}),x.point=this,w.styledMode||x.attr(u({fill:this.color||f.color,"fill-opacity":c.opacity},c.attributes))):x&&x.point&&x.point.haloPath&&x.animate({d:x.point.haloPath(0)},
+null,x.hide);this.state=a;v(this,"afterSetState")}},haloPath:function(a){return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX)-a,this.plotY-a,2*a,2*a)}});u(b.prototype,{onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&v(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&&
+v(this,"mouseOut");!c||this.stickyTracking||c.shared&&!this.noSharedTooltip||c.hide();this.setState()},setState:function(a){var b=this,c=b.options,d=b.graph,f=c.states,g=c.lineWidth,c=0;a=a||"";if(b.state!==a&&([b.group,b.markerGroup,b.dataLabelsGroup].forEach(function(c){c&&(b.state&&c.removeClass("highcharts-series-"+b.state),a&&c.addClass("highcharts-series-"+a))}),b.state=a,!(b.chart.styledMode||f[a]&&!1===f[a].enabled)&&(a&&(g=f[a].lineWidth||g+(f[a].lineWidthPlus||0)),d&&!d.dashstyle)))for(g=
+{"stroke-width":g},d.animate(g,m(f[a||"normal"]&&f[a||"normal"].animation,b.chart.options.chart.animation));b["zone-graph-"+c];)b["zone-graph-"+c].attr(g),c+=1},setVisible:function(a,b){var c=this,d=c.chart,f=c.legendItem,g,h=d.options.chart.ignoreHiddenSeries,l=c.visible;g=(c.visible=a=c.options.visible=c.userOptions.visible=void 0===a?!l:a)?"show":"hide";["group","dataLabelsGroup","markerGroup","tracker","tt"].forEach(function(a){if(c[a])c[a][g]()});if(d.hoverSeries===c||(d.hoverPoint&&d.hoverPoint.series)===
+c)c.onMouseOut();f&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&d.series.forEach(function(a){a.options.stacking&&a.visible&&(a.isDirty=!0)});c.linkedSeries.forEach(function(b){b.setVisible(a,!1)});h&&(d.isDirtyBox=!0);v(c,g);!1!==b&&d.redraw()},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=this.options.selected=void 0===a?!this.selected:a;this.checkbox&&(this.checkbox.checked=a);v(this,a?"select":"unselect")},drawTracker:x.drawTrackerGraph})})(J);
+(function(a){var y=a.Chart,G=a.isArray,E=a.isObject,h=a.pick,c=a.splat;y.prototype.setResponsive=function(c){var h=this.options.responsive,r=[],w=this.currentResponsive;h&&h.rules&&h.rules.forEach(function(g){void 0===g._id&&(g._id=a.uniqueKey());this.matchResponsiveRule(g,r,c)},this);var n=a.merge.apply(0,r.map(function(c){return a.find(h.rules,function(a){return a._id===c}).chartOptions})),r=r.toString()||void 0;r!==(w&&w.ruleIds)&&(w&&this.update(w.undoOptions,c),r?(this.currentResponsive={ruleIds:r,
+mergedOptions:n,undoOptions:this.currentOptions(n)},this.update(n,c)):this.currentResponsive=void 0)};y.prototype.matchResponsiveRule=function(a,c){var r=a.condition;(r.callback||function(){return this.chartWidth<=h(r.maxWidth,Number.MAX_VALUE)&&this.chartHeight<=h(r.maxHeight,Number.MAX_VALUE)&&this.chartWidth>=h(r.minWidth,0)&&this.chartHeight>=h(r.minHeight,0)}).call(this)&&c.push(a._id)};y.prototype.currentOptions=function(h){function r(h,n,g,d){var m;a.objectEach(h,function(a,b){if(!d&&-1<["series",
+"xAxis","yAxis"].indexOf(b))for(a=c(a),g[b]=[],m=0;m<a.length;m++)n[b][m]&&(g[b][m]={},r(a[m],n[b][m],g[b][m],d+1));else E(a)?(g[b]=G(a)?[]:{},r(a,n[b]||{},g[b],d+1)):g[b]=n[b]||null})}var v={};r(h,this.options,v,0);return v}})(J);return J});
+//# sourceMappingURL=highcharts.js.map</script>
+    <script>/*
+ Highcharts JS v7.0.1 (2018-12-19)
+ Exporting module
+
+ (c) 2010-2018 Torstein Honsi
+
+ License: www.highcharts.com/license
+*/
+(function(l){"object"===typeof module&&module.exports?module.exports=l:"function"===typeof define&&define.amd?define(function(){return l}):l("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(l){(function(g){var y=g.defaultOptions,z=g.doc,l=g.Chart,q=g.addEvent,I=g.removeEvent,C=g.fireEvent,t=g.createElement,D=g.discardElement,r=g.css,p=g.merge,u=g.pick,E=g.objectEach,x=g.extend,J=g.isTouchDevice,A=g.win,G=A.navigator.userAgent,F=g.SVGRenderer,H=g.Renderer.prototype.symbols,K=/Edge\/|Trident\/|MSIE /.test(G),
+L=/firefox/i.test(G);x(y.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"});y.navigation||(y.navigation={});p(!0,y.navigation,{buttonOptions:{theme:{},symbolSize:14,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,verticalAlign:"top",width:24}});p(!0,y.navigation,{menuStyle:{border:"1px solid #999999",background:"#ffffff",
+padding:"5px 0"},menuItemStyle:{padding:"0.5em 1em",color:"#333333",background:"none",fontSize:J?"14px":"11px",transition:"background 250ms, color 250ms"},menuItemHoverStyle:{background:"#335cad",color:"#ffffff"},buttonOptions:{symbolFill:"#666666",symbolStroke:"#666666",symbolStrokeWidth:3,theme:{padding:5}}});y.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"})}}}};g.post=function(b,a,d){var c=t("form",p({method:"post",action:b,enctype:"multipart/form-data"},d),{display:"none"},z.body);E(a,function(a,b){t("input",{type:"hidden",name:b,value:a},null,c)});c.submit();D(c)};x(l.prototype,{sanitizeSVG:function(b,a){if(a&&a.exporting&&a.exporting.allowHTML){var d=b.match(/<\/svg>(.*?$)/);d&&d[1]&&(d='\x3cforeignObject x\x3d"0" y\x3d"0" width\x3d"'+a.chart.width+'" height\x3d"'+
+a.chart.height+'"\x3e\x3cbody xmlns\x3d"http://www.w3.org/1999/xhtml"\x3e'+d[1]+"\x3c/body\x3e\x3c/foreignObject\x3e",b=b.replace("\x3c/svg\x3e",d+"\x3c/svg\x3e"))}b=b.replace(/zIndex="[^"]+"/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&&(b=this.ieSanitizeSVG(b));return b},getChartHTML:function(){this.styledMode&&this.inlineStyles();return this.container.innerHTML},getSVG:function(b){var a,d,c,w,m,h=p(this.options,b);d=t("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=h.exporting.sourceWidth||h.chart.width||/px$/.test(c)&&parseInt(c,10)||(h.isGantt?800:600);m=h.exporting.sourceHeight||h.chart.height||/px$/.test(m)&&parseInt(m,10)||400;x(h.chart,{animation:!1,renderTo:d,forExport:!0,renderer:"SVGRenderer",width:c,height:m});h.exporting.enabled=!1;delete h.data;h.series=[];this.series.forEach(function(a){w=p(a.userOptions,{animation:!1,enableMouseTracking:!1,showCheckbox:!1,visible:a.visible});w.isInternal||
+h.series.push(w)});this.axes.forEach(function(a){a.userOptions.internalKey||(a.userOptions.internalKey=g.uniqueKey())});a=new g.Chart(h,this.callback);b&&["xAxis","yAxis","series"].forEach(function(c){var d={};b[c]&&(d[c]=b[c],a.update(d))});this.axes.forEach(function(b){var c=g.find(a.axes,function(a){return a.options.internalKey===b.userOptions.internalKey}),d=b.getExtremes(),e=d.userMin,d=d.userMax;c&&(void 0!==e&&e!==c.min||void 0!==d&&d!==c.max)&&c.setExtremes(e,d,!0,!1)});c=a.getChartHTML();
+C(this,"getSVG",{chartCopy:a});c=this.sanitizeSVG(c,h);h=null;a.destroy();D(d);return c},getSVGForExport:function(b,a){var d=this.options.exporting;return this.getSVG(p({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:b&&b.sourceWidth||d.sourceWidth,sourceHeight:b&&b.sourceHeight||d.sourceHeight}}))},getFilename:function(){var b=this.userOptions.title&&this.userOptions.title.text,a=this.options.exporting.filename;if(a)return a;"string"===typeof b&&(a=b.toLowerCase().replace(/<\/?[^>]+(>|$)/g,
+"").replace(/[\s_]+/g,"-").replace(/[^a-z0-9\-]/g,"").replace(/^[\-]+/g,"").replace(/[\-]+/g,"-").substr(0,24).replace(/[\-]+$/g,""));if(!a||5>a.length)a="chart";return a},exportChart:function(b,a){a=this.getSVGForExport(b,a);b=p(this.options.exporting,b);g.post(b.url,{filename:b.filename||this.getFilename(),type:b.type,width:b.width||0,scale:b.scale,svg:a},b.formAttributes)},print:function(){function b(b){(a.fixedDiv?[a.fixedDiv,a.scrollingContainer]:[a.container]).forEach(function(a){b.appendChild(a)})}
+var a=this,d=[],c=z.body,g=c.childNodes,m=a.options.exporting.printMaxWidth,h,e;if(!a.isPrinting){a.isPrinting=!0;a.pointer.reset(null,0);C(a,"beforePrint");if(e=m&&a.chartWidth>m)h=[a.options.chart.width,void 0,!1],a.setSize(m,void 0,!1);g.forEach(function(a,b){1===a.nodeType&&(d[b]=a.style.display,a.style.display="none")});b(c);setTimeout(function(){A.focus();A.print();setTimeout(function(){b(a.renderTo);g.forEach(function(a,b){1===a.nodeType&&(a.style.display=d[b])});a.isPrinting=!1;e&&a.setSize.apply(a,
+h);C(a,"afterPrint")},1E3)},1)}},contextMenu:function(b,a,d,c,w,m,h){var e=this,n=e.options.navigation,k=e.chartWidth,v=e.chartHeight,l="cache-"+b,f=e[l],B=Math.max(w,m),p;f||(e.exportContextMenu=e[l]=f=t("div",{className:b},{position:"absolute",zIndex:1E3,padding:B+"px",pointerEvents:"auto"},e.fixedDiv||e.container),p=t("div",{className:"highcharts-menu"},null,f),e.styledMode||r(p,x({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},n.menuStyle)),
+f.hideMenu=function(){r(f,{display:"none"});h&&h.setState(0);e.openMenu=!1;g.clearTimeout(f.hideTimer)},e.exportEvents.push(q(f,"mouseleave",function(){f.hideTimer=setTimeout(f.hideMenu,500)}),q(f,"mouseenter",function(){g.clearTimeout(f.hideTimer)}),q(z,"mouseup",function(a){e.pointer.inClass(a.target,b)||f.hideMenu()}),q(f,"click",function(){e.openMenu&&f.hideMenu()})),a.forEach(function(a){"string"===typeof a&&(a=e.options.exporting.menuItemDefinitions[a]);if(g.isObject(a,!0)){var b;a.separator?
+b=t("hr",null,null,p):(b=t("div",{className:"highcharts-menu-item",onclick:function(b){b&&b.stopPropagation();f.hideMenu();a.onclick&&a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},null,p),e.styledMode||(b.onmouseover=function(){r(this,n.menuItemHoverStyle)},b.onmouseout=function(){r(this,n.menuItemStyle)},r(b,x({cursor:"pointer"},n.menuItemStyle))));e.exportDivElements.push(b)}}),e.exportDivElements.push(p,f),e.exportMenuWidth=f.offsetWidth,e.exportMenuHeight=f.offsetHeight);
+a={display:"block"};d+e.exportMenuWidth>k?a.right=k-d-w-B+"px":a.left=d-B+"px";c+m+e.exportMenuHeight>v&&"top"!==h.alignOptions.verticalAlign?a.bottom=v-c-B+"px":a.top=c+m-B+"px";r(f,a);e.openMenu=!0},addButton:function(b){var a=this,d=a.renderer,c=p(a.options.navigation.buttonOptions,b),g=c.onclick,m=c.menuItems,h,e,n=c.symbolSize||12;a.btnCount||(a.btnCount=0);a.exportDivElements||(a.exportDivElements=[],a.exportSVGElements=[]);if(!1!==c.enabled){var k=c.theme,v=k.states,l=v&&v.hover,v=v&&v.select,
+f;a.styledMode||(k.fill=u(k.fill,"#ffffff"),k.stroke=u(k.stroke,"none"));delete k.states;g?f=function(b){b&&b.stopPropagation();g.call(a,b)}:m&&(f=function(b){b&&b.stopPropagation();a.contextMenu(e.menuClassName,m,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});c.text&&c.symbol?k.paddingLeft=u(k.paddingLeft,25):c.text||x(k,{width:c.width,height:c.height,padding:0});a.styledMode||(k["stroke-linecap"]="round",k.fill=u(k.fill,"#ffffff"),k.stroke=u(k.stroke,"none"));e=d.button(c.text,0,
+0,f,k,l,v).addClass(b.className).attr({title:u(a.options.lang[c._titleKey||c.titleKey],"")});e.menuClassName=b.menuClassName||"highcharts-menu-"+a.btnCount++;c.symbol&&(h=d.symbol(c.symbol,c.symbolX-n/2,c.symbolY-n/2,n,n,{width:n,height:n}).addClass("highcharts-button-symbol").attr({zIndex:1}).add(e),a.styledMode||h.attr({stroke:c.symbolStroke,fill:c.symbolFill,"stroke-width":c.symbolStrokeWidth||1}));e.add(a.exportingGroup).align(x(c,{width:e.width,x:u(c.x,a.buttonOffset)}),!0,"spacingBox");a.buttonOffset+=
+(e.width+c.buttonSpacing)*("right"===c.align?-1:1);a.exportSVGElements.push(e,h)}},destroyExport:function(b){var a=b?b.target:this;b=a.exportSVGElements;var d=a.exportDivElements,c=a.exportEvents,l;b&&(b.forEach(function(b,c){b&&(b.onclick=b.ontouchstart=null,l="cache-"+b.menuClassName,a[l]&&delete a[l],a.exportSVGElements[c]=b.destroy())}),b.length=0);a.exportingGroup&&(a.exportingGroup.destroy(),delete a.exportingGroup);d&&(d.forEach(function(b,c){g.clearTimeout(b.hideTimer);I(b,"mouseleave");a.exportDivElements[c]=
+b.onmouseout=b.onmouseover=b.ontouchstart=b.onclick=null;D(b)}),d.length=0);c&&(c.forEach(function(a){a()}),c.length=0)}});F.prototype.inlineToAttributes="fill stroke strokeLinecap strokeLinejoin strokeWidth textAnchor x y".split(" ");F.prototype.inlineBlacklist=[/-/,/^(clipPath|cssText|d|height|width)$/,/^font$/,/[lL]ogical(Width|Height)$/,/perspective/,/TapHighlightColor/,/^transition/,/^length$/];F.prototype.unstyledElements=["clipPath","defs","desc"];l.prototype.inlineStyles=function(){function b(a){return a.replace(/([A-Z])/g,
+function(a,b){return"-"+b.toLowerCase()})}function a(d){function m(a,f){q=t=!1;if(l){for(r=l.length;r--&&!t;)t=l[r].test(f);q=!t}"transform"===f&&"none"===a&&(q=!0);for(r=g.length;r--&&!q;)q=g[r].test(f)||"function"===typeof a;q||v[f]===a&&"svg"!==d.nodeName||e[d.nodeName][f]===a||(-1!==c.indexOf(f)?d.setAttribute(b(f),a):u+=b(f)+":"+a+";")}var f,v,u="",w,q,t,r;if(1===d.nodeType&&-1===h.indexOf(d.nodeName)){f=A.getComputedStyle(d,null);v="svg"===d.nodeName?{}:A.getComputedStyle(d.parentNode,null);
+e[d.nodeName]||(n=k.getElementsByTagName("svg")[0],w=k.createElementNS(d.namespaceURI,d.nodeName),n.appendChild(w),e[d.nodeName]=p(A.getComputedStyle(w,null)),"text"===d.nodeName&&delete e.text.fill,n.removeChild(w));if(L||K)for(var x in f)m(f[x],x);else E(f,m);u&&(f=d.getAttribute("style"),d.setAttribute("style",(f?f+";":"")+u));"svg"===d.nodeName&&d.setAttribute("stroke-width","1px");"text"!==d.nodeName&&[].forEach.call(d.children||d.childNodes,a)}}var d=this.renderer,c=d.inlineToAttributes,g=d.inlineBlacklist,
+l=d.inlineWhitelist,h=d.unstyledElements,e={},n,k,d=z.createElement("iframe");r(d,{width:"1px",height:"1px",visibility:"hidden"});z.body.appendChild(d);k=d.contentWindow.document;k.open();k.write('\x3csvg xmlns\x3d"http://www.w3.org/2000/svg"\x3e\x3c/svg\x3e');k.close();a(this.container.querySelector("svg"));n.parentNode.removeChild(n)};H.menu=function(b,a,d,c){return["M",b,a+2.5,"L",b+d,a+2.5,"M",b,a+c/2+.5,"L",b+d,a+c/2+.5,"M",b,a+c-1.5,"L",b+d,a+c-1.5]};H.menuball=function(b,a,d,c){b=[];c=c/3-
+2;return b=b.concat(this.circle(d-c,a,c,c),this.circle(d-c,a+c+4,c,c),this.circle(d-c,a+2*(c+4),c,c))};l.prototype.renderExporting=function(){var b=this,a=b.options.exporting,d=a.buttons,c=b.isDirtyExporting||!b.exportSVGElements;b.buttonOffset=0;b.isDirtyExporting&&b.destroyExport();c&&!1!==a.enabled&&(b.exportEvents=[],b.exportingGroup=b.exportingGroup||b.renderer.g("exporting-group").attr({zIndex:3}).add(),E(d,function(a){b.addButton(a)}),b.isDirtyExporting=!1);q(b,"destroy",b.destroyExport)};
+q(l,"init",function(){var b=this;["exporting","navigation"].forEach(function(a){b[a]={update:function(d,c){b.isDirtyExporting=!0;p(!0,b.options[a],d);u(c,!0)&&b.redraw()}}})});l.prototype.callbacks.push(function(b){b.renderExporting();q(b,"redraw",b.renderExporting)})})(l)});
+//# sourceMappingURL=exporting.js.map</script>
+    <script>/*
+ Highcharts JS v7.0.1 (2018-12-19)
+ Exporting module
+
+ (c) 2010-2018 Torstein Honsi
+
+ License: www.highcharts.com/license
+*/
+(function(m){"object"===typeof module&&module.exports?module.exports=m:"function"===typeof define&&define.amd?define(function(){return m}):m("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(m){(function(a){a.ajax=function(f){var b=a.merge(!0,{url:!1,type:"GET",dataType:"json",success:!1,error:!1,data:!1,headers:{}},f);f={json:"application/json",xml:"application/xml",text:"text/plain",octet:"application/octet-stream"};var c=new XMLHttpRequest;if(!b.url)return!1;c.open(b.type.toUpperCase(),
+b.url,!0);c.setRequestHeader("Content-Type",f[b.dataType]||f.text);a.objectEach(b.headers,function(a,f){c.setRequestHeader(f,a)});c.onreadystatechange=function(){var a;if(4===c.readyState){if(200===c.status){a=c.responseText;if("json"===b.dataType)try{a=JSON.parse(a)}catch(v){b.error&&b.error(c,v);return}return b.success&&b.success(a)}b.error&&b.error(c,c.responseText)}};try{b.data=JSON.stringify(b.data)}catch(k){}c.send(b.data||!0)}})(m);(function(a){var f=a.win,b=f.navigator,c=f.document,k=f.URL||
+f.webkitURL||f,v=/Edge\/\d+/.test(b.userAgent);a.dataURLtoBlob=function(a){if((a=a.match(/data:([^;]*)(;base64)?,([0-9A-Za-z+/]+)/))&&3<a.length&&f.atob&&f.ArrayBuffer&&f.Uint8Array&&f.Blob&&k.createObjectURL){for(var c=f.atob(a[3]),b=new f.ArrayBuffer(c.length),b=new f.Uint8Array(b),g=0;g<b.length;++g)b[g]=c.charCodeAt(g);a=new f.Blob([b],{type:a[1]});return k.createObjectURL(a)}};a.downloadURL=function(e,k){var q=c.createElement("a"),g;if("string"===typeof e||e instanceof String||!b.msSaveOrOpenBlob){if(v||
+2E6<e.length)if(e=a.dataURLtoBlob(e),!e)throw"Failed to convert to blob";if(void 0!==q.download)q.href=e,q.download=k,c.body.appendChild(q),q.click(),c.body.removeChild(q);else try{if(g=f.open(e,"chart"),void 0===g||null===g)throw"Failed to open window";}catch(B){f.location.href=e}}else b.msSaveOrOpenBlob(e,k)}})(m);(function(a){function f(a,b){if(k.Blob&&k.navigator.msSaveOrOpenBlob)return new k.Blob(["\ufeff"+a],{type:b})}var b=a.defined,c=a.pick,k=a.win,v=k.document,e=a.seriesTypes,m=a.downloadURL;
+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",openInCloud:"Open in Highcharts Cloud",viewData:"View data table"}});a.addEvent(a.Chart,"render",function(){this.options&&this.options.exporting&&this.options.exporting.showTable&&this.viewData()});a.Chart.prototype.setUpKeyToAxis=function(){e.arearange&&
+(e.arearange.prototype.keyToAxis={low:"y",high:"y"});e.gantt&&(e.gantt.prototype.keyToAxis={start:"x",end:"x"})};a.Chart.prototype.getDataRows=function(g){var f=this.time,e=this.options.exporting&&this.options.exporting.csv||{},h,l=this.xAxis,t={},k=[],n,m=[],p=[],y,w,u,C=function(d,b,h){if(e.columnHeaderFormatter){var u=e.columnHeaderFormatter(d,b,h);if(!1!==u)return u}return d?d instanceof a.Axis?d.options.title&&d.options.title.text||(d.isDatetimeAxis?"DateTime":"Category"):g?{columnTitle:1<h?
+b:d.name,topLevelColumnTitle:d.name}:d.name+(1<h?" ("+b+")":""):"Category"},z=[];w=0;this.setUpKeyToAxis();this.series.forEach(function(d){var b=d.options.keys||d.pointArrayMap||["y"],h=b.length,u=!d.requireSorting&&{},x={},B={},n=l.indexOf(d.xAxis),k,r;b.forEach(function(a){var b=(d.keyToAxis&&d.keyToAxis[a]||a)+"Axis";x[a]=d[b]&&d[b].categories||[];B[a]=d[b]&&d[b].isDatetimeAxis});if(!1!==d.options.includeInCSVExport&&!d.options.isInternal&&!1!==d.visible){a.find(z,function(d){return d[0]===n})||
+z.push([n,w]);for(r=0;r<h;)y=C(d,b[r],b.length),p.push(y.columnTitle||y),g&&m.push(y.topLevelColumnTitle||y),r++;k={chart:d.chart,autoIncrement:d.autoIncrement,options:d.options,pointArrayMap:d.pointArrayMap};d.options.data.forEach(function(a,g){var l,p;p={series:k};d.pointClass.prototype.applyOptions.apply(p,[a]);a=p.x;l=d.data[g]&&d.data[g].name;u&&(u[a]&&(a+="|"+g),u[a]=!0);r=0;d.xAxis&&"name"!==d.exportKey||(a=l);t[a]||(t[a]=[],t[a].xValues=[]);t[a].x=p.x;t[a].name=l;for(t[a].xValues[n]=p.x;r<
+h;)g=b[r],l=p[g],t[a][w+r]=c(x[g][l],B[g]?f.dateFormat(e.dateFormat,l):null,l),r++});w+=r}});for(n in t)t.hasOwnProperty(n)&&k.push(t[n]);var x,A;n=g?[m,p]:[p];for(w=z.length;w--;)x=z[w][0],A=z[w][1],h=l[x],k.sort(function(a,b){return a.xValues[x]-b.xValues[x]}),u=C(h),n[0].splice(A,0,u),g&&n[1]&&n[1].splice(A,0,u),k.forEach(function(a){var d=a.name;h&&!b(d)&&(h.isDatetimeAxis?(a.x instanceof Date&&(a.x=a.x.getTime()),d=f.dateFormat(e.dateFormat,a.x)):d=h.categories?c(h.names[a.x],h.categories[a.x],
+a.x):a.x);a.splice(A,0,d)});n=n.concat(k);a.fireEvent(this,"exportData",{dataRows:n});return n};a.Chart.prototype.getCSV=function(a){var b="",g=this.getDataRows(),h=this.options.exporting.csv,f=c(h.decimalPoint,","!==h.itemDelimiter&&a?(1.1).toLocaleString()[1]:"."),e=c(h.itemDelimiter,","===f?";":","),k=h.lineDelimiter;g.forEach(function(a,h){for(var c,l=a.length;l--;)c=a[l],"string"===typeof c&&(c='"'+c+'"'),"number"===typeof c&&"."!==f&&(c=c.toString().replace(".",f)),a[l]=c;b+=a.join(e);h<g.length-
+1&&(b+=k)});return b};a.Chart.prototype.getTable=function(a){var b="\x3ctable\x3e",g=this.options,h=a?(1.1).toLocaleString()[1]:".",f=c(g.exporting.useMultiLevelHeaders,!0);a=this.getDataRows(f);var e=0,k=f?a.shift():null,n=a.shift(),m=function(a,b,g,f){var e=c(f,"");b="text"+(b?" "+b:"");"number"===typeof e?(e=e.toString(),","===h&&(e=e.replace(".",h)),b="number"):f||(b="empty");return"\x3c"+a+(g?" "+g:"")+' class\x3d"'+b+'"\x3e'+e+"\x3c/"+a+"\x3e"};!1!==g.exporting.tableCaption&&(b+='\x3ccaption class\x3d"highcharts-table-caption"\x3e'+
+c(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 p=0,q=a.length;p<q;++p)a[p].length>e&&(e=a[p].length);b+=function(a,b,e){var h="\x3cthead\x3e",c=0;e=e||b&&b.length;var k,d,l=0;if(d=f&&a&&b){a:if(d=a.length,b.length===d){for(;d--;)if(a[d]!==b[d]){d=!1;break a}d=!0}else d=!1;d=!d}if(d){for(h+="\x3ctr\x3e";c<
+e;++c)d=a[c],k=a[c+1],d===k?++l:l?(h+=m("th","highcharts-table-topheading",'scope\x3d"col" colspan\x3d"'+(l+1)+'"',d),l=0):(d===b[c]?g.exporting.useRowspanHeaders?(k=2,delete b[c]):(k=1,b[c]=""):k=1,h+=m("th","highcharts-table-topheading",'scope\x3d"col"'+(1<k?' valign\x3d"top" rowspan\x3d"'+k+'"':""),d));h+="\x3c/tr\x3e"}if(b){h+="\x3ctr\x3e";c=0;for(e=b.length;c<e;++c)void 0!==b[c]&&(h+=m("th",null,'scope\x3d"col"',b[c]));h+="\x3c/tr\x3e"}return h+"\x3c/thead\x3e"}(k,n,Math.max(e,n.length));b+=
+"\x3ctbody\x3e";a.forEach(function(a){b+="\x3ctr\x3e";for(var c=0;c<e;c++)b+=m(c?"td":"th",null,c?"":'scope\x3d"row"',a[c]);b+="\x3c/tr\x3e"});return b+="\x3c/tbody\x3e\x3c/table\x3e"};a.Chart.prototype.downloadCSV=function(){var a=this.getCSV(!0);m(f(a,"text/csv")||"data:text/csv,\ufeff"+encodeURIComponent(a),this.getFilename()+".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";m(f(a,"application/vnd.ms-excel")||"data:application/vnd.ms-excel;base64,"+k.btoa(unescape(encodeURIComponent(a))),this.getFilename()+".xls")};a.Chart.prototype.viewData=function(){this.dataTableDiv||(this.dataTableDiv=v.createElement("div"),this.dataTableDiv.className="highcharts-data-table",this.renderTo.parentNode.insertBefore(this.dataTableDiv,this.renderTo.nextSibling));this.dataTableDiv.innerHTML=this.getTable()};a.Chart.prototype.openInCloud=function(){function b(c){Object.keys(c).forEach(function(e){"function"===
+typeof c[e]&&delete c[e];a.isObject(c[e])&&b(c[e])})}var c,e;c=a.merge(this.userOptions);b(c);c={name:c.title&&c.title.text||"Chart title",options:c,settings:{constructor:"Chart",dataProvider:{csv:this.getCSV()}}};e=JSON.stringify(c);(function(){var a=v.createElement("form");v.body.appendChild(a);a.method="post";a.action="https://cloud-api.highcharts.com/openincloud";a.target="_blank";var b=v.createElement("input");b.type="hidden";b.name="chart";b.value=e;a.appendChild(b);a.submit();v.body.removeChild(a)})()};
+var q=a.getOptions().exporting;q&&(a.extend(q.menuItemDefinitions,{downloadCSV:{textKey:"downloadCSV",onclick:function(){this.downloadCSV()}},downloadXLS:{textKey:"downloadXLS",onclick:function(){this.downloadXLS()}},viewData:{textKey:"viewData",onclick:function(){this.viewData()}},openInCloud:{textKey:"openInCloud",onclick:function(){this.openInCloud()}}}),q.buttons.contextButton.menuItems.push("separator","downloadCSV","downloadXLS","viewData","openInCloud"));e.map&&(e.map.prototype.exportKey="name");
+e.mapbubble&&(e.mapbubble.prototype.exportKey="name");e.treemap&&(e.treemap.prototype.exportKey="name")})(m)});
+//# sourceMappingURL=export-data.js.map</script>
+    <script>/*
+	Ractive.js v0.9.9
+	Build: 45f61d837bf610970e0bd6591c98587cfd49a024
+	Date: Thu Nov 02 2017 20:19:45 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';
+
+/* istanbul ignore if */
+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;
+	};
+}
+
+function hasOwn ( obj, prop ) {
+	return Object.prototype.hasOwnProperty.call( obj, prop );
+}
+
+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 || !hasOwn( 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 ( !hasOwn( obj, key ) ) { continue; }
+		pairs.push( [ key, obj[ key ] ] );
+	}
+	return pairs;
+}
+
+var obj$1 = Object;
+
+var assign = obj$1.assign;
+
+var create = obj$1.create;
+
+var defineProperty = obj$1.defineProperty;
+
+var defineProperties = obj$1.defineProperties;
+
+var keys = obj$1.keys;
+
+var toString = Object.prototype.toString;
+
+
+var isArray = Array.isArray;
+
+function isEqual ( a, b ) {
+	if ( a === null && b === null ) {
+		return true;
+	}
+
+	if ( isObjectType( a ) || isObjectType( b ) ) {
+		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 ) {
+	return !!( thing && ( isObjectType( thing ) || isFunction( thing ) ) );
+}
+
+function isObjectType ( thing ) {
+	return typeof thing === 'object';
+}
+
+function isFunction ( thing ) {
+	return typeof thing === 'function';
+}
+
+function isString ( thing ) {
+	return typeof thing === 'string';
+}
+
+function isNumber ( thing ) {
+	return typeof thing === 'number';
+}
+
+/* istanbul ignore if */
+if (!Array.prototype.find) {
+	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 (!isFunction( callback ))
+				{ 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 (!hasOwn(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.
+/* istanbul ignore if */
+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;
+	};
+}
+
+/* istanbul ignore if */
+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;
+	};
+}
+
+/* istanbul ignore if */
+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 (isFunction( handler )) {
+							handlers.push(function (p1result) {
+								try {
+									resolve$1(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 && isFunction( promise.then )) {
+					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$1 = 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 && (isObjectType( x ) || isFunction( x ))) {
+			try {
+				then = x.then;
+			} catch (e) {
+				reject(e);
+				return;
+			}
+			if (isFunction( then )) {
+				var called;
+
+				var resolvePromise = function (y) {
+					if (called) { return; }
+					called = true;
+					resolve$1(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);
+		}
+	};
+
+}
+
+/* istanbul ignore if */
+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,
+
+	// 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 ) {
+		/* istanbul ignore next */
+		return Math.pow( pos, 3 );
+	},
+	easeOut: function easeOut ( pos ) { return ( Math.pow( ( pos - 1 ), 3 ) + 1 ); },
+	easeInOut: function easeInOut ( pos ) {
+		/* istanbul ignore next */
+		if ( ( pos /= 0.5 ) < 1 ) { return ( 0.5 * Math.pow( pos, 3 ) ); }
+		/* istanbul ignore next */
+		return ( 0.5 * ( Math.pow( ( pos - 2 ), 3 ) + 2 ) );
+	}
+};
+
+/* eslint no-console:"off" */
+var win =  typeof window !== 'undefined' ? window : null;
+var doc = win ? document : null;
+var isClient = !!doc;
+var hasConsole = ( typeof console !== 'undefined' && isFunction( console.warn ) && isFunction( console.warn.apply ) );
+
+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.9 %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.9 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://ractive.js.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 ( isObjectType( args[ args.length - 1 ] ) ) {
+			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://ractive.js.org/integrations/#" + 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;
+}
+
+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 ( !isArray( from ) || !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 = {};
+
+		var loop = function ( prop ) {
+			if ( hasOwn( from, prop ) ) {
+				if ( hasOwn( to, prop ) ) {
+					properties.push( prop );
+					interpolators[ prop ] = interpolate( from[ prop ], to[ prop ] ) || ( function () { return to[ prop ]; } );
+				}
+
+				else {
+					intermediate[ prop ] = from[ prop ];
+				}
+			}
+		};
+
+		for ( var prop in from ) loop( prop );
+
+		for ( var prop$1 in to ) {
+			if ( hasOwn( to, prop$1 ) && !hasOwn( from, 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;
+		};
+	}
+};
+
+var refPattern = /\[\s*(\*|[0-9]|[1-9][0-9]+)\s*\]/g;
+var splitPattern = /([^\\](?:\\\\)*)\./;
+var escapeKeyPattern = /\\|\./g;
+var unescapeKeyPattern = /((?:\\)+)\1|\\(\.)/g;
+
+function escapeKey ( key ) {
+	if ( isString( key ) ) {
+		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 ( isString( key ) ) {
+		return key.replace( unescapeKeyPattern, '$1$2' );
+	}
+
+	return key;
+}
+
+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 ( !isArray( a ) || !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 ( isString( x ) ) {
+		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 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;
+};
+var KeyModel__proto__ = KeyModel.prototype;
+
+KeyModel__proto__.get = function get ( shouldCapture ) {
+	if ( shouldCapture ) { capture( this ); }
+	return unescapeKey( this.value );
+};
+
+KeyModel__proto__.getKeypath = function getKeypath () {
+	return unescapeKey( this.value );
+};
+
+KeyModel__proto__.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__proto__.register = function register ( dependant ) {
+	this.deps.push( dependant );
+};
+
+KeyModel__proto__.registerLink = function registerLink ( link ) {
+	addToArray( this.links, link );
+};
+
+KeyModel__proto__.unregister = function unregister ( dependant ) {
+	removeFromArray( this.deps, dependant );
+};
+
+KeyModel__proto__.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;
+};
+var KeypathModel__proto__ = KeypathModel.prototype;
+
+KeypathModel__proto__.get = function get ( shouldCapture ) {
+	if ( shouldCapture ) { capture( this ); }
+	return this.value;
+};
+
+KeypathModel__proto__.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__proto__.getKeypath = function getKeypath () {
+	return this.value;
+};
+
+KeypathModel__proto__.handleChange = function handleChange$1 () {
+		var this$1 = this;
+
+	var keys$$1 = keys( this.children );
+	var i = keys$$1.length;
+	while ( i-- ) {
+		this$1.children[ keys$$1[i] ].handleChange();
+	}
+
+	this.deps.forEach( handleChange );
+};
+
+KeypathModel__proto__.rebindChildren = function rebindChildren ( next ) {
+		var this$1 = this;
+
+	var keys$$1 = keys( this.children );
+	var i = keys$$1.length;
+	while ( i-- ) {
+		var child = this$1.children[keys$$1[i]];
+		child.value = next.getKeypath( child.ractive );
+		child.handleChange();
+	}
+};
+
+KeypathModel__proto__.rebind = function rebind ( next, previous ) {
+		var this$1 = this;
+
+	var model = next ? next.getKeypathModel( this.ractive ) : undefined;
+
+	var keys$$1 = keys( this.children );
+	var i = keys$$1.length;
+	while ( i-- ) {
+		this$1.children[ keys$$1[i] ].rebind( next, previous, false );
+	}
+
+	i = this.deps.length;
+	while ( i-- ) {
+		this$1.deps[i].rebind( model, this$1, false );
+	}
+};
+
+KeypathModel__proto__.register = function register ( dep ) {
+	this.deps.push( dep );
+};
+
+KeypathModel__proto__.removeChild = function removeChild ( model ) {
+	if ( model.ractive ) { delete this.children[ model.ractive._guid ]; }
+};
+
+KeypathModel__proto__.teardown = function teardown () {
+		var this$1 = this;
+
+	if ( this.owner ) { this.owner.removeChild( this ); }
+
+	var keys$$1 = keys( this.children );
+	var i = keys$$1.length;
+	while ( i-- ) {
+		this$1.children[ keys$$1[i] ].teardown();
+	}
+};
+
+KeypathModel__proto__.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 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;
+	}
+};
+var ModelBase__proto__ = ModelBase.prototype;
+
+ModelBase__proto__.addShuffleTask = function addShuffleTask ( task, stage ) {
+	if ( stage === void 0 ) stage = 'early';
+ shuffleTasks[stage].push( task ); };
+ModelBase__proto__.addShuffleRegister = function addShuffleRegister ( item, stage ) {
+	if ( stage === void 0 ) stage = 'early';
+ registerQueue[stage].push({ model: this, item: item }); };
+
+ModelBase__proto__.downstreamChanged = function downstreamChanged () {};
+
+ModelBase__proto__.findMatches = function findMatches ( keys$$1 ) {
+	var len = keys$$1.length;
+
+	var existingMatches = [ this ];
+	var matches;
+	var i;
+
+	var loop = function (  ) {
+		var key = keys$$1[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__proto__.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__proto__.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__proto__.getValueChildren = function getValueChildren ( value ) {
+		var this$1 = this;
+
+	var children;
+	if ( 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 ) || isFunction( value ) ) {
+		children = keys( value ).map( function (key) { return this$1.joinKey( key ); } );
+	}
+
+	else if ( value != null ) {
+		return [];
+	}
+
+	return children;
+};
+
+ModelBase__proto__.getVirtual = function getVirtual ( shouldCapture ) {
+		var this$1 = this;
+
+	var value = this.get( shouldCapture, { virtual: false } );
+	if ( isObject( value ) ) {
+		var result = isArray( value ) ? [] : {};
+
+		var keys$$1 = keys( value );
+		var i = keys$$1.length;
+		while ( i-- ) {
+			var child = this$1.childByKey[ keys$$1[i] ];
+			if ( !child ) { result[ keys$$1[i] ] = value[ keys$$1[i] ]; }
+			else if ( child._link ) { result[ keys$$1[i] ] = child._link.getVirtual(); }
+			else { result[ keys$$1[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__proto__.has = function has ( key ) {
+	if ( this._link ) { return this._link.has( key ); }
+
+	var value = this.get();
+	if ( !value ) { return false; }
+
+	key = unescapeKey( key );
+	if ( hasOwn( 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 ( hasOwn( constructor.prototype, key ) ) { return true; }
+		constructor = constructor.constructor;
+	}
+
+	return false;
+};
+
+ModelBase__proto__.joinAll = function joinAll ( keys$$1, opts ) {
+	var model = this;
+	for ( var i = 0; i < keys$$1.length; i += 1 ) {
+		if ( opts && opts.lastLink === false && i + 1 === keys$$1.length && model.childByKey[keys$$1[i]] && model.childByKey[keys$$1[i]]._link ) { return model.childByKey[keys$$1[i]]; }
+		model = model.joinKey( keys$$1[i], opts );
+	}
+
+	return model;
+};
+
+ModelBase__proto__.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( function (d) { return d.handleChange( path ); } );
+		parent.downstreamChanged( startPath );
+		parent = parent.parent;
+	}
+};
+
+ModelBase__proto__.rebind = function rebind ( next, previous, safe ) {
+		var this$1 = this;
+
+	if ( this._link ) {
+		this._link.rebind( next, previous, false );
+	}
+
+	// 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__proto__.reference = function reference () {
+	'refs' in this ? this.refs++ : this.refs = 1;
+};
+
+ModelBase__proto__.register = function register ( dep ) {
+	this.deps.push( dep );
+};
+
+ModelBase__proto__.registerLink = function registerLink ( link ) {
+	addToArray( this.links, link );
+};
+
+ModelBase__proto__.registerPatternObserver = function registerPatternObserver ( observer ) {
+	this.patternObservers.push( observer );
+	this.register( observer );
+};
+
+ModelBase__proto__.registerTwowayBinding = function registerTwowayBinding ( binding ) {
+	this.bindings.push( binding );
+};
+
+ModelBase__proto__.unreference = function unreference () {
+	if ( 'refs' in this ) { this.refs--; }
+};
+
+ModelBase__proto__.unregister = function unregister ( dep ) {
+	removeFromArray( this.deps, dep );
+};
+
+ModelBase__proto__.unregisterLink = function unregisterLink ( link ) {
+	removeFromArray( this.links, link );
+};
+
+ModelBase__proto__.unregisterPatternObserver = function unregisterPatternObserver ( observer ) {
+	removeFromArray( this.patternObservers, observer );
+	this.unregister( observer );
+};
+
+ModelBase__proto__.unregisterTwowayBinding = function unregisterTwowayBinding ( binding ) {
+	removeFromArray( this.bindings, binding );
+};
+
+ModelBase__proto__.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 && isFunction( value ) && 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 || !isString( keypath ) ) { 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) {
+	function LinkModel ( parent, owner, target, key ) {
+		ModelBase.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 ) LinkModel.__proto__ = ModelBase;
+	var LinkModel__proto__ = LinkModel.prototype = Object.create( ModelBase && ModelBase.prototype );
+	LinkModel__proto__.constructor = LinkModel;
+
+	LinkModel__proto__.animate = function animate ( from, to, options, interpolator ) {
+		return this.target.animate( from, to, options, interpolator );
+	};
+
+	LinkModel__proto__.applyValue = function applyValue ( value ) {
+		if ( this.boundValue ) { this.boundValue = null; }
+		this.target.applyValue( value );
+	};
+
+	LinkModel__proto__.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__proto__.detach = function detach () {
+		this.relinking( Missing, false );
+	};
+
+	LinkModel__proto__.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 && this.target.parent.isRoot;
+
+		return maybeBind( this, this.target.get( false, opts ), bind$$1 );
+	};
+
+	LinkModel__proto__.getKeypath = function getKeypath ( ractive ) {
+		if ( ractive && ractive !== this.root.ractive ) { return this.target.getKeypath( ractive ); }
+
+		return ModelBase.prototype.getKeypath.call( this, ractive );
+	};
+
+	LinkModel__proto__.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__proto__.handleChange = function handleChange$2 () {
+		this.deps.forEach( handleChange );
+		this.links.forEach( handleChange );
+		this.notifyUpstream();
+	};
+
+	LinkModel__proto__.isDetached = function isDetached () { return this.virtual && this.target === Missing; };
+
+	LinkModel__proto__.joinKey = function joinKey ( key ) {
+		// TODO: handle nested links
+		if ( key === undefined || key === '' ) { return this; }
+
+		if ( !hasOwn( this.childByKey, 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__proto__.mark = function mark ( force ) {
+		this.target.mark( force );
+	};
+
+	LinkModel__proto__.marked = function marked$1 () {
+		if ( this.boundValue ) { this.boundValue = null; }
+
+		this.links.forEach( marked );
+
+		this.deps.forEach( handleChange );
+	};
+
+	LinkModel__proto__.markedAll = function markedAll$1 () {
+		this.children.forEach( markedAll );
+		this.marked();
+	};
+
+	LinkModel__proto__.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__proto__.relinked = function relinked () {
+		this.target.registerLink( this );
+		this.children.forEach( function (c) { return c.relinked(); } );
+	};
+
+	LinkModel__proto__.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__proto__.set = function set ( value ) {
+		if ( this.boundValue ) { this.boundValue = null; }
+		this.target.set( value );
+	};
+
+	LinkModel__proto__.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__proto__.source = function source () {
+		if ( this.target.source ) { return this.target.source(); }
+		else { return this.target; }
+	};
+
+	LinkModel__proto__.teardown = function teardown$2 () {
+		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();
+	}
+};
+
+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 );
+	}
+};
+var TransitionManager__proto__ = TransitionManager.prototype;
+
+TransitionManager__proto__.add = function add ( transition ) {
+	var list = transition.isIntro ? this.intros : this.outros;
+	transition.starting = true;
+	list.push( transition );
+};
+
+TransitionManager__proto__.addChild = function addChild ( child ) {
+	this.children.push( child );
+
+	this.totalChildren += 1;
+	this.outroChildren += 1;
+};
+
+TransitionManager__proto__.decrementOutros = function decrementOutros () {
+	this.outroChildren -= 1;
+	check( this );
+};
+
+TransitionManager__proto__.decrementTotal = function decrementTotal () {
+	this.totalChildren -= 1;
+	check( this );
+};
+
+TransitionManager__proto__.detachNodes = function detachNodes () {
+	this.detachQueue.forEach( detach );
+	this.children.forEach( _detachNodes );
+	this.detachQueue = [];
+};
+
+TransitionManager__proto__.ready = function ready () {
+	if ( this.detachQueue.length ) { detachImmediate( this ); }
+};
+
+TransitionManager__proto__.remove = function remove ( transition ) {
+	var list = transition.isIntro ? this.intros : this.outros;
+	removeFromArray( list, transition );
+	check( this );
+};
+
+TransitionManager__proto__.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 ( isFunction( tm.callback ) ) {
+			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 () {
+		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: [],
+			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(); }
+}
+
+// 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 ); }
+};
+var Ticker__proto__ = Ticker.prototype;
+
+Ticker__proto__.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__proto__.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
+/* istanbul ignore next */
+function prefixKeypath ( obj, prefix ) {
+	var prefixed = {};
+
+	if ( !prefix ) {
+		return obj;
+	}
+
+	prefix += '.';
+
+	for ( var key in obj ) {
+		if ( hasOwn( obj, key ) ) {
+			prefixed[ prefix + key ] = obj[ key ];
+		}
+	}
+
+	return prefixed;
+}
+
+function getPrefixer ( rootKeypath ) {
+	var rootDot;
+
+	if ( !prefixers[ rootKeypath ] ) {
+		rootDot = rootKeypath ? rootKeypath + '.' : '';
+
+		/* istanbul ignore next */
+		prefixers[ rootKeypath ] = function ( relativeKeypath, value ) {
+			var obj;
+
+			if ( isString( relativeKeypath ) ) {
+				obj = {};
+				obj[ rootDot + relativeKeypath ] = value;
+				return obj;
+			}
+
+			if ( isObjectType( relativeKeypath ) ) {
+				// 'relativeKeypath' is in fact a hash, not a keypath
+				return rootDot ? prefixKeypath( relativeKeypath, rootKeypath ) : relativeKeypath;
+			}
+		};
+	}
+
+	return prefixers[ rootKeypath ];
+}
+
+var Model = (function (ModelBase) {
+	function Model ( parent, key ) {
+		ModelBase.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 ( isArray( this.value ) ) { this.length = this.value.length; }
+				this.adapt();
+			}
+		}
+	}
+
+	if ( ModelBase ) Model.__proto__ = ModelBase;
+	var Model__proto__ = Model.prototype = Object.create( ModelBase && ModelBase.prototype );
+	Model__proto__.constructor = Model;
+
+	Model__proto__.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();
+				delete this.wrapper;
+				delete this.wrapperValue;
+
+				// 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; }
+					this.value = value;
+				}
+			} else {
+				delete this.newWrapperValue;
+				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__proto__.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__proto__.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 ( 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__proto__.createBranch = function createBranch ( key ) {
+		var branch = isNumeric( key ) ? [] : {};
+		this.applyValue( branch, false );
+
+		return branch;
+	};
+
+	Model__proto__.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__proto__.getKeypathModel = function getKeypathModel () {
+		if ( !this.keypathModel ) { this.keypathModel = new KeypathModel( this ); }
+		return this.keypathModel;
+	};
+
+	Model__proto__.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 ( !hasOwn( this.childByKey, 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__proto__.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 ( 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__proto__.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__proto__.retrieve = function retrieve () {
+		return this.parent.value ? this.parent.value[ this.key ] : undefined;
+	};
+
+	Model__proto__.set = function set ( value ) {
+		if ( this.ticker ) { this.ticker.stop(); }
+		this.applyValue( value );
+	};
+
+	Model__proto__.shuffle = function shuffle$2 ( newIndices, unsafe ) {
+		shuffle( this, newIndices, false, unsafe );
+	};
+
+	Model__proto__.source = function source () { return this; };
+
+	Model__proto__.teardown = function teardown$3 () {
+		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) {
+	function SharedModel ( value, name ) {
+		Model.call( this, null, ("@" + name) );
+		this.key = "@" + name;
+		this.value = value;
+		this.isRoot = true;
+		this.root = this;
+		this.adaptors = [];
+	}
+
+	if ( Model ) SharedModel.__proto__ = Model;
+	var SharedModel__proto__ = SharedModel.prototype = Object.create( Model && Model.prototype );
+	SharedModel__proto__.constructor = SharedModel;
+
+	SharedModel__proto__.getKeypath = function getKeypath () {
+		return this.key;
+	};
+
+	SharedModel__proto__.retrieve = function retrieve () { return this.value; };
+
+	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.up : 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$$1 = splitKeypath( ref );
+	if ( !keys$$1.length ) { return; }
+	var base = keys$$1.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$$1 );
+		}
+
+		// @index or @key referring to the nearest repeating index or key
+		else if ( base === '@index' || base === '@key' ) {
+			if ( keys$$1.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$$1 );
+		}
+
+		// @global referring to window or global
+		else if ( base === '@shared' ) {
+			return SharedModel$1.joinAll( keys$$1 );
+		}
+
+		// @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.up.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$$1 );
+		}
+
+		// @style shared model
+		else if ( base === '@style' ) {
+			return fragment.ractive.constructor._cssModel.joinAll( keys$$1 );
+		}
+
+		// 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$$1 );
+	}
+
+	// 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$$1.length ) { badReference( base ); }
+				return fragment.context.getKeyModel( fragment.key );
+			}
+
+			if ( base === fragment.parent.indexRef ) {
+				if ( keys$$1.length ) { badReference( base ); }
+				return fragment.context.getKeyModel( fragment.index );
+			}
+		}
+
+		// alias node or iteration
+		if ( fragment.aliases && hasOwn( fragment.aliases, base ) ) {
+			var model = fragment.aliases[ base ];
+
+			if ( keys$$1.length === 0 ) { return model; }
+			else if ( isFunction( model.joinAll ) ) {
+				return model.joinAll( keys$$1 );
+			}
+		}
+
+		// 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$$1 );
+			}
+
+			if ( shouldWarn ) { warnIfDebug( ("'" + ref + "' resolved but is ambiguous.") ); }
+			return fragment.context.joinKey( base ).joinAll( keys$$1 );
+		}
+
+		if ( ( fragment.componentParent || ( !fragment.parent && fragment.ractive.component ) ) && !fragment.ractive.isolated ) {
+			// ascend through component boundary
+			fragment = fragment.componentParent || fragment.ractive.component.up;
+			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$$1 );
+	}
+
+	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$$1 );
+}
+
+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( create( this.ctx ) );
+	return 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;
+
+function findParentWithContext ( fragment ) {
+	var frag = fragment;
+	while ( frag && !frag.context ) { frag = frag.parent; }
+	if ( !frag ) { return fragment && fragment.ractive.fragment; }
+	else { return frag; }
+}
+
+var keep = false;
+
+function set ( pairs, options ) {
+	var k = keep;
+
+	var deep = options && options.deep;
+	var shuffle = options && options.shuffle;
+	var promise = runloop.start();
+	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 ( !isArray( target ) || !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$$1 = splitKeypath( keypath );
+	var model = base || ractive.viewmodel;
+
+	if ( star.test( keypath ) ) {
+		return model.findMatches( keys$$1 );
+	} else {
+		if ( model === ractive.viewmodel ) {
+			// allow implicit mappings
+			if ( ractive.component && !ractive.isolated && !model.has( keys$$1[0] ) && keypath[0] !== '@' && keypath[0] && !isolated ) {
+				return [ resolveReference( ractive.fragment || new FakeFragment( ractive ), keypath ) ];
+			} else {
+				return [ model.joinAll( keys$$1 ) ];
+			}
+		} else {
+			return [ model.joinAll( keys$$1 ) ];
+		}
+	}
+}
+
+function build ( ractive, keypath, value, isolated ) {
+	var sets = [];
+
+	// set multiple keypaths in one go
+	if ( isObject( keypath ) ) {
+		var loop = function ( k ) {
+			if ( hasOwn( keypath, 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 || !isObjectType( value ) ) { return model.set( value ); }
+	if ( !isObjectType( dest ) ) { return model.set( value ); }
+
+	for ( var k in value ) {
+		if ( hasOwn( value, k ) ) {
+			deepSet( model.joinKey( k ), value[k] );
+		}
+	}
+}
+
+var comparators = {};
+function getComparator ( option ) {
+	if ( option === true ) { return null; } // use existing arrays
+	if ( isFunction( option ) ) { return option; }
+
+	if ( isString( option ) ) {
+		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 ( !isString( keypath ) || !isNumeric( d ) ) {
+		throw new Error( 'Bad arguments' );
+	}
+
+	var sets = build( ractive, keypath, d, options && options.isolated );
+
+	return set( 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 = isNumber( d ) ? d : 1;
+	var opts = isObjectType( d ) ? d : options;
+	return add( this, keypath, num, opts );
+}
+
+function immediate ( value ) {
+	var result = Promise.resolve( value );
+	defineProperty( result, 'stop', { value: noop });
+	return result;
+}
+
+var linear = easing.linear;
+
+function getOptions ( options, instance ) {
+	options = options || {};
+
+	var easing$$1;
+	if ( options.easing ) {
+		easing$$1 = isFunction( options.easing ) ?
+			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 ( isObjectType( keypath ) ) {
+		var keys$$1 = keys( keypath );
+
+		throw new Error( ("ractive.animate(...) no longer supports objects. Instead of ractive.animate({\n  " + (keys$$1.map( function (key) { return ("'" + key + "': " + (keypath[ key ])); } ).join( '\n  ' )) + "\n}, {...}), do\n\n" + (keys$$1.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;
+	var idx;
+
+	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.up = this.fragment;
+		meta.external = true;
+	} else {
+		var list;
+		if ( !( list = children.byName[ meta.target ] ) ) {
+			list = [];
+			this.set( ("@this.children.byName." + (meta.target)), list );
+		}
+		idx = options.prepend ? 0 : options.insertAt !== undefined ? options.insertAt : list.length;
+	}
+
+	child.set({
+		'@this.parent': this,
+		'@this.root': this.root
+	});
+	child.component = meta;
+	children.push( meta );
+
+	attachHook.fire( child );
+
+	var promise = runloop.start();
+
+	if ( meta.target ) {
+		unrenderChild( meta );
+		this.splice( ("@this.children.byName." + (meta.target)), idx, 0, meta );
+		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();
+
+	if ( meta.anchor ) { meta.anchor.removeChild( meta ); }
+	if ( !child.isolated ) { child.viewmodel.detached(); }
+
+	runloop.end();
+
+	children.splice( index, 1 );
+	if ( meta.target ) {
+		this.splice( ("@this.children.byName." + (meta.target)), children.byName[ meta.target ].indexOf(meta), 1 );
+		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 ( !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 && isObjectType( selector ) ) {
+		options = selector;
+		selector = '';
+	}
+
+	options = options || {};
+
+	if ( !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 ( isObjectType( selector ) ) {
+		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;
+}
+
+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.up; }
+		// 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.up ) { start = start.up; }
+
+		else { start = undefined; }
+	}
+
+	return start;
+}
+
+// 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 ( !isNumber( args[1] ) ) {
+				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 ( !isArray( array ) ) {
+			if ( array === undefined ) {
+				array = [];
+				var result$1 = arrayProto[ methodName ].apply( array, args );
+				var promise$1 = runloop.start().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().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();
+
+	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 ( isString( keypath ) ) {
+		path = splitKeypath( keypath );
+		opts = options;
+	} else {
+		opts = keypath;
+	}
+
+	return update$1( this, path ? this.viewmodel.joinAll( path ) : this.viewmodel, opts );
+}
+
+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) {
+	function ContextData ( options ) {
+		Model.call( this, null, null );
+
+		this.isRoot = true;
+		this.root = this;
+		this.value = {};
+		this.ractive = options.ractive;
+		this.adaptors = [];
+		this.context = options.context;
+	}
+
+	if ( Model ) ContextData.__proto__ = Model;
+	var ContextData__proto__ = ContextData.prototype = Object.create( Model && Model.prototype );
+	ContextData__proto__.constructor = ContextData;
+
+	ContextData__proto__.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 Context__proto__ = Context.prototype;
+
+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.handle; } );
+	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__proto__.add = function add ( keypath, d, options ) {
+	var num = isNumber( d ) ? +d : 1;
+	var opts = isObjectType( d ) ? d : options;
+	return set( 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__proto__.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__proto__.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__proto__.getParent = function getParent ( component ) {
+	var fragment = this.fragment;
+
+	if ( fragment.context ) { fragment = findParentWithContext( fragment.parent || ( component && fragment.componentParent ) ); }
+	else {
+		fragment = findParentWithContext( fragment.parent || ( component && fragment.componentParent ) );
+		if ( fragment ) { fragment = findParentWithContext( fragment.parent || ( component && fragment.componentParent ) ); }
+	}
+
+	if ( !fragment || fragment === this.fragment ) { return; }
+	else { return fragment.getContext(); }
+};
+
+Context__proto__.link = function link ( source, dest ) {
+	var there = findModel( this, source ).model;
+	var here = findModel( this, dest ).model;
+	var promise = runloop.start();
+	here.link( there, source );
+	runloop.end();
+	return promise;
+};
+
+Context__proto__.listen = function listen ( event, handler ) {
+	var el = this.element;
+	el.on( event, handler );
+	return {
+		cancel: function cancel () { el.off( event, handler ); }
+	};
+};
+
+Context__proto__.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__proto__.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__proto__.pop = function pop ( keypath ) {
+	return modelPop( findModel( this, keypath ).model, [] );
+};
+
+Context__proto__.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__proto__.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__proto__.readLink = function readLink ( keypath, options ) {
+	return this.ractive.readLink( this.resolve( keypath ), options );
+};
+
+Context__proto__.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__proto__.reverse = function reverse ( keypath ) {
+	return modelReverse( findModel( this, keypath ).model, [] );
+};
+
+Context__proto__.set = function set$2 ( keypath, value, options ) {
+	return set( build$1( this, keypath, value ), options );
+};
+
+Context__proto__.shift = function shift ( keypath ) {
+	return modelShift( findModel( this, keypath ).model, [] );
+};
+
+Context__proto__.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__proto__.sort = function sort ( keypath ) {
+	return modelSort( findModel( this, keypath ).model, [] );
+};
+
+Context__proto__.subtract = function subtract ( keypath, d, options ) {
+	var num = isNumber( d ) ? d : 1;
+	var opts = isObjectType( d ) ? d : options;
+	return set( 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__proto__.toggle = function toggle ( keypath, options ) {
+	var ref = findModel( this, keypath );
+		var model = ref.model;
+	return set( [ [ model, !model.get() ] ], options );
+};
+
+Context__proto__.unlink = function unlink ( dest ) {
+	var here = findModel( this, dest ).model;
+	var promise = runloop.start();
+	if ( here.owner && here.owner._link ) { here.owner.unlink(); }
+	runloop.end();
+	return promise;
+};
+
+Context__proto__.unlisten = function unlisten ( event, handler ) {
+	this.element.off( event, handler );
+};
+
+Context__proto__.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__proto__.update = function update ( keypath, options ) {
+	return update$1( this.ractive, findModel( this, keypath ).model, options );
+};
+
+Context__proto__.updateModel = function updateModel ( keypath, cascade ) {
+	var ref = findModel( this, keypath );
+		var model = ref.model;
+	var promise = runloop.start();
+	model.updateFromBindings( cascade );
+	runloop.end();
+	return promise;
+};
+
+// two-way binding related helpers
+Context__proto__.isBound = function isBound () {
+	var ref = this.getBindingModel( this );
+		var model = ref.model;
+	return !!model;
+};
+
+Context__proto__.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__proto__.getBinding = function getBinding () {
+	var ref = this.getBindingModel( this );
+		var model = ref.model;
+	if ( model ) { return model.get( true ); }
+};
+
+Context__proto__.getBindingModel = function getBindingModel ( ctx ) {
+	var el = ctx.element;
+	return { model: el.binding && el.binding.model, instance: el.up.ractive };
+};
+
+Context__proto__.setBinding = function setBinding ( value ) {
+	var ref = this.getBindingModel( this );
+		var model = ref.model;
+	return set( [ [ model, value ] ] );
+};
+
+Object.defineProperties( Context__proto__, 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 ( hasOwn( keypath, 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 ( !isString( path ) ) {
+		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 = create( proto );
+		assign( ctx, proto );
+	} else if ( isObjectType( args[0] ) && ( args[0] === null || 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 ( !isString( keypath ) ) { 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 ( isString( node ) && 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 ( isString( node ) ) {
+		node = this.find( node, options );
+	}
+
+	return getContext$2( node );
+}
+
+function getNodeInfo$$1 ( node, options ) {
+	if ( isString( node ) ) {
+		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 ) {
+	/* istanbul ignore next */
+	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://ractive.js.org/support/#svgs 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; }
+
+	/* istanbul ignore next */
+	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 ( isString( input ) ) {
+		// 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... and apparently phantom some?
+	/* istanbul ignore next */
+	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 || ( isNumber( value ) && isNaN( value ) ) || !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.up, 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, ( options && options.keypath ) || there );
+
+	runloop.end();
+
+	return promise;
+}
+
+function isUpstream ( check, start ) {
+	var model = start;
+	while ( model ) {
+		if ( model === check || model.owner === 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 ( isFunction( options.old ) ) {
+		this.oldContext = create( ractive );
+		this.oldFn = options.old;
+	}
+
+	if ( options.init !== false ) {
+		this.dirty = true;
+		this.dispatch();
+	} else {
+		updateOld( this );
+	}
+
+	this.dirty = false;
+};
+var Observer__proto__ = Observer.prototype;
+
+Observer__proto__.cancel = function cancel () {
+	this.cancelled = true;
+	if ( this.model ) {
+		this.model.unregister( this );
+	} else {
+		this.resolver.unbind();
+	}
+	removeFromArray( this.ractive._observers, this );
+};
+
+Observer__proto__.dispatch = function dispatch () {
+	if ( !this.cancelled ) {
+		this.callback.call( this.context, this.newValue, this.oldValue, this.keypath );
+		updateOld( this, true );
+		this.dirty = false;
+	}
+};
+
+Observer__proto__.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__proto__.rebind = function rebind ( next, previous ) {
+		var this$1 = this;
+
+	next = rebindMatch( this.keypath, next, previous );
+	if ( next === this.model ) { return false; }
+
+	if ( this.model ) { this.model.unregister( this ); }
+	if ( next ) { next.addShuffleTask( function () { return this$1.resolved( next ); } ); }
+};
+
+Observer__proto__.resolved = function resolved ( model ) {
+	this.model = model;
+
+	this.oldValue = undefined;
+	this.newValue = model.get();
+
+	model.register( this );
+};
+
+function updateOld( observer, fresh ) {
+	var next = fresh ? ( observer.model ? observer.model.get() : observer.newValue ) : observer.newValue;
+	observer.oldValue = observer.oldFn ? observer.oldFn.call( observer.oldContext, undefined, next, observer.keypath ) : next;
+}
+
+var star$1 = /\*+/g;
+
+var PatternObserver = function PatternObserver ( ractive, baseModel, keys$$1, callback, options ) {
+	var this$1 = this;
+
+	this.context = options.context || ractive;
+	this.ractive = ractive;
+	this.baseModel = baseModel;
+	this.keys = keys$$1;
+	this.callback = callback;
+
+	var pattern = keys$$1.join( '\\.' ).replace( star$1, '(.+)' );
+	var baseKeypath = this.baseKeypath = baseModel.getKeypath( ractive );
+	this.pattern = new RegExp( ("^" + (baseKeypath ? baseKeypath + '\\.' : '') + pattern + "$") );
+	this.recursive = keys$$1.length === 1 && keys$$1[0] === '**';
+	if ( this.recursive ) { this.keys = [ '*' ]; }
+	if ( options.old ) {
+		this.oldContext = create( ractive );
+		this.oldFn = options.old;
+	}
+
+	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 {
+		updateOld$1( this, this.newValues );
+	}
+
+	baseModel.registerPatternObserver( this );
+};
+var PatternObserver__proto__ = PatternObserver.prototype;
+
+PatternObserver__proto__.cancel = function cancel () {
+	this.baseModel.unregisterPatternObserver( this );
+	removeFromArray( this.ractive._observers, this );
+};
+
+PatternObserver__proto__.dispatch = function dispatch () {
+		var this$1 = this;
+
+	var newValues = this.newValues;
+	this.newValues = {};
+	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 );
+	});
+
+	updateOld$1( this, newValues, this.partial );
+
+	this.dirty = false;
+};
+
+PatternObserver__proto__.notify = function notify ( key ) {
+	this.changed.push( key );
+};
+
+PatternObserver__proto__.shuffle = function shuffle ( newIndices ) {
+		var this$1 = this;
+
+	if ( !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__proto__.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$$1) {
+					var model = this$1.baseModel.joinAll( keys$$1 );
+					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$$1) { return keys$$1.map( escapeKey ).join( '.' ); } ) :
+					this.changed.map( function (keys$$1) { return this$1.baseKeypath + '.' + keys$$1.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 updateOld$1( observer, vals, partial ) {
+	var olds = observer.oldValues;
+
+	if ( observer.oldFn ) {
+		if ( !partial ) { observer.oldValues = {}; }
+
+		keys( vals ).forEach( function (k) {
+			var args = [ olds[k], vals[k], k ];
+			var parts = observer.pattern.exec( k );
+			if ( parts ) {
+				args.push.apply( args, parts.slice( 1 ) );
+			}
+			observer.oldValues[k] = observer.oldFn.apply( observer.oldContext, args );
+		});
+	} else {
+		if ( partial ) {
+			keys( vals ).forEach( function (k) { return olds[k] = vals[k]; } );
+		} else {
+			observer.oldValues = vals;
+		}
+	}
+}
+
+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();
+	}
+};
+var ArrayObserver__proto__ = ArrayObserver.prototype;
+
+ArrayObserver__proto__.cancel = function cancel () {
+	this.model.unregister( this );
+	removeFromArray( this.ractive._observers, this );
+};
+
+ArrayObserver__proto__.dispatch = function dispatch () {
+	this.callback( this.pending );
+	this.pending = null;
+	if ( this.options.once ) { this.cancel(); }
+};
+
+ArrayObserver__proto__.handleChange = function handleChange ( path ) {
+	if ( this.pending ) {
+		// post-shuffle
+		runloop.addObserver( this, this.options.defer );
+	} else if ( !path ) {
+		// entire array changed
+		this.shuffle( this.sliced.map( negativeOne ) );
+		this.handleChange();
+	}
+};
+
+ArrayObserver__proto__.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__proto__.slice = function slice () {
+	var value = this.model.get();
+	return 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 ( isFunction( keypath ) ) {
+			map = { '': keypath };
+			opts = callback || {};
+		} else {
+			map = {};
+			map[ keypath ] = callback;
+			opts = options || {};
+		}
+	}
+
+	var silent = false;
+	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$$1 = splitKeypath( keypath );
+	var wildcardIndex = keys$$1.indexOf( '*' );
+	if ( !~wildcardIndex ) { wildcardIndex = keys$$1.indexOf( '**' ); }
+
+	options.fragment = options.fragment || ractive.fragment;
+
+	var model;
+	if ( !options.fragment ) {
+		model = ractive.viewmodel.joinKey( keys$$1[0] );
+	} else {
+		// .*.whatever relative wildcard is a special case because splitkeypath doesn't handle the leading .
+		if ( ~keys$$1[0].indexOf( '.*' ) ) {
+			model = options.fragment.findContext();
+			wildcardIndex = 0;
+			keys$$1[0] = keys$$1[0].slice( 1 );
+		} else {
+			model = wildcardIndex === 0 ? options.fragment.findContext() : resolveReference( options.fragment, keys$$1[0] );
+		}
+	}
+
+	// the model may not exist key
+	if ( !model ) { model = ractive.viewmodel.joinKey( keys$$1[0] ); }
+
+	if ( !~wildcardIndex ) {
+		model = model.joinAll( keys$$1.slice( 1 ) );
+		if ( options.array ) {
+			return new ArrayObserver( ractive, model, callback, options );
+		} else {
+			return new Observer( ractive, model, callback, options );
+		}
+	} else {
+		var double = keys$$1.indexOf( '**' );
+		if ( ~double ) {
+			if ( double + 1 !== keys$$1.length || ~keys$$1.indexOf( '*' ) ) {
+				warnOnceIfDebug( "Recursive observers may only specify a single '**' at the end of the path." );
+				return;
+			}
+		}
+
+		model = model.joinAll( keys$$1.slice( 1, wildcardIndex ) );
+
+		return new PatternObserver( ractive, model, keys$$1.slice( wildcardIndex ), callback, options );
+	}
+}
+
+var onceOptions = { init: false, once: true };
+
+function observeOnce ( keypath, callback, options ) {
+	if ( isObject( keypath ) || isFunction( keypath ) ) {
+		options = assign( callback || {}, onceOptions );
+		return this.observe( keypath, options );
+	}
+
+	options = 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 = isObjectType( eventName ) ? eventName : {};
+	// or it may be a string along with a callback
+	if ( isString( eventName ) ) { 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 ( hasOwn( map, 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 ( force ) {
+	var styleElement = style();
+
+	// Apply only seems to make sense when we're in the DOM. Server-side renders
+	// can call toCSS to get the updated CSS.
+	if ( !styleElement || ( !force && !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;
+
+	filteredStyleDefinitions.forEach( function (d) { return d.applied = true; } );
+
+	return filteredStyleDefinitions.reduce( function ( styles, style ) { return ("" + (styles ? (styles + "\n\n/* {" + (style.id) + "} */\n" + (style.styles)) : '')); }, PREFIX );
+}
+
+function style () {
+	// If we're on the browser, additional setup needed.
+	if ( doc && !styleElement ) {
+		styleElement = doc.createElement( 'style' );
+		styleElement.type = 'text/css';
+		styleElement.setAttribute( 'data-ractive-css', '' );
+
+		doc.getElementsByTagName( 'head' )[0].appendChild( styleElement );
+
+		useCssText = !!styleElement.styleSheet;
+	}
+
+	return styleElement;
+}
+
+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();
+}
+
+function setCSSData ( keypath, value, options ) {
+	var opts = isObjectType( keypath ) ? value : options;
+	var model = this._cssModel;
+
+	model.locked = true;
+	var promise = set( build( { viewmodel: model }, keypath, value, true ), opts );
+	model.locked = false;
+
+	var cascade = runloop.start();
+	this.extensions.forEach( function (e) {
+		var model = e._cssModel;
+		model.mark();
+		model.downstreamChanged( '', 1 );
+	});
+	runloop.end();
+
+	applyChanges( this, !opts || opts.apply !== false );
+
+	return promise.then( function () { return cascade; } );
+}
+
+function applyChanges ( component, apply ) {
+	var local = recomputeCSS( component );
+	var child = component.extensions.map( function (e) { return applyChanges( e, false ); } ).
+	  reduce( function ( a, c ) { return c || a; }, false );
+
+	if ( apply && ( local || child ) ) {
+		var def = component._cssDef;
+		if ( !def || ( def && def.applied ) ) { applyCSS( true ); }
+	}
+
+	return local || child;
+}
+
+function recomputeCSS ( component ) {
+	var css = component._css;
+
+	if ( !isFunction( css ) ) { return; }
+
+	var def = component._cssDef;
+	var result = evalCSS( component, css );
+	var styles = def.transform ? transformCss( result, def.id ) : result;
+
+	if ( def.styles === styles ) { return; }
+
+	def.styles = styles;
+
+	return true;
+}
+
+var CSSModel = (function (SharedModel) {
+	function CSSModel ( component ) {
+		SharedModel.call( this, component.cssData, '@style' );
+		this.component = component;
+	}
+
+	if ( SharedModel ) CSSModel.__proto__ = SharedModel;
+	var CSSModel__proto__ = CSSModel.prototype = Object.create( SharedModel && SharedModel.prototype );
+	CSSModel__proto__.constructor = CSSModel;
+
+	CSSModel__proto__.downstreamChanged = function downstreamChanged ( path, depth ) {
+		if ( this.locked ) { return; }
+
+		var component = this.component;
+
+		component.extensions.forEach( function (e) {
+			var model = e._cssModel;
+			model.mark();
+			model.downstreamChanged( path, depth || 1 );
+		});
+
+		if ( !depth ) {
+			applyChanges( component, true );
+		}
+	};
+
+	return CSSModel;
+}(SharedModel));
+
+var hasCurly = /\{/;
+var cssConfigurator = {
+	name: 'css',
+
+	// Called when creating a new component definition
+	extend: function ( Parent, proto, options, Child ) {
+		Child._cssIds = gatherIds( Parent );
+
+		defineProperty( Child, 'cssData', {
+			configurable: true,
+			value: assign( create( Parent.cssData ), options.cssData || {} )
+		});
+
+		defineProperty( Child, '_cssModel', {
+			configurable: true,
+			value: new CSSModel( Child )
+		});
+
+		if ( options.css ) { initCSS( options, Child, proto ); }
+	},
+
+	// 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 gatherIds ( start ) {
+	var cmp = start;
+	var ids = [];
+
+	while ( cmp ) {
+		if ( cmp.prototype.cssId ) { ids.push( cmp.prototype.cssId ); }
+		cmp = cmp.Parent;
+	}
+
+	return ids;
+}
+
+function evalCSS ( component, css ) {
+	var cssData = component.cssData;
+	var model = component._cssModel;
+	var data = function data ( path ) {
+		return model.joinAll( splitKeypath( path ) ).get();
+	};
+	data.__proto__ = cssData;
+
+	var result = css.call( component, data );
+	return isString( result ) ? result : '';
+}
+
+function initCSS ( options, target, proto ) {
+	var css = isString( options.css ) && !hasCurly.test( options.css ) ?
+		( getElement( options.css ) || options.css ) :
+		options.css;
+
+	var id = options.cssId || uuid();
+
+	if ( isObjectType( css ) ) {
+		css = 'textContent' in css ? css.textContent : css.innerHTML;
+	} else if ( isFunction( css ) ) {
+		target._css = options.css;
+		css = evalCSS( target, css );
+	}
+
+	var def = target._cssDef = { transform: !options.noCssTransform };
+
+	def.styles = def.transform ? transformCss( css, id ) : css;
+	def.id = proto.cssId = id;
+	target._cssIds.push( id );
+
+	addCSS( target._cssDef );
+}
+
+function validate ( data ) {
+	// Warn if userOptions.data is a non-POJO
+	if ( data && data.constructor !== Object ) {
+		if ( isFunction( data ) ) {
+			// TODO do we need to support this in the new Ractive() case?
+		} else if ( !isObjectType( data ) ) {
+			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 && isObjectType( value ) ) {
+					if ( isObject( value ) || 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 ( isFunction( result ) ) { 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 ( isFunction( result[ prop ] ) ) {
+					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 emptyData () { return {}; }
+
+function combine$1 ( parentValue, childValue ) {
+	validate( childValue );
+
+	var parentIsFn = isFunction( parentValue );
+
+	// 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 ) {
+		// this needs to be a function so that it can still inherit parent defaults
+		childValue = emptyData;
+	}
+
+	var childIsFn = isFunction( 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 ( !isObjectType( data ) ) {
+		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 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];
+		}
+	},
+
+	sp: function sp () {
+		this.matchPattern( leadingWhitespace );
+	},
+
+	remaining: function remaining () {
+		return this.str.substring( this.pos );
+	},
+
+	nextChar: function nextChar () {
+		return this.str.charAt( this.pos );
+	},
+
+	warn: function warn ( 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 = create( Parent.prototype );
+
+	for ( var key in proto ) {
+		if ( hasOwn( proto, 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.sp();
+
+	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.sp();
+
+	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+|' + keys( htmlEntities ).join( '|' ) + '));?', 'g' );
+var codePointSupport = isFunction( String.fromCodePoint );
+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
+/* istanbul ignore next */
+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.sp();
+					var expr = readExpression( parser );
+
+					if ( !expr ) { parser.error( 'Expected valid expression' ); }
+
+					parts.push({ t: BRACKETED, x: expr });
+
+					parser.sp();
+					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.sp();
+
+	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.sp();
+
+	// 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.sp();
+
+	// 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.sp();
+
+	if ( !parser.matchString( '{' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	var keyValuePairs = readKeyValuePairs( parser );
+
+	// allow whitespace between final value and '}'
+	parser.sp();
+
+	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.sp();
+
+	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|style)/;
+
+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 ] !== ']' ) {
+			if ( lastDotIndex === 0 ) {
+				reference = '.';
+				parser.pos = startPos;
+			} else {
+				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.sp();
+
+	var expr = readExpression( parser );
+
+	if ( !expr ) { parser.error( expectedExpression ); }
+
+	parser.sp();
+
+	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.sp();
+	}
+
+	// "." name
+	if ( parser.matchString( '.' ) ) {
+		parser.sp();
+
+		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.sp();
+
+		var expr = readExpression( parser );
+		if ( !expr ) { parser.error( expectedExpression ); }
+
+		parser.sp();
+
+		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.sp();
+			var expressionList = readExpressionList( parser, true );
+
+			parser.sp();
+
+			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.sp();
+
+		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.sp();
+
+			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.sp();
+
+			// 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.sp();
+
+	if ( !parser.matchString( '?' ) ) {
+		parser.pos = start;
+		return expression;
+	}
+
+	parser.sp();
+
+	var ifTrue = readExpression( parser );
+	if ( !ifTrue ) {
+		parser.error( expectedExpression );
+	}
+
+	parser.sp();
+
+	if ( !parser.matchString( ':' ) ) {
+		parser.error( 'Expected ":"' );
+	}
+
+	parser.sp();
+
+	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.sp();
+
+		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.sp();
+	} 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 ( isString( node ) ) {
+			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 && isString( node.n ) ) {
+		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 && !isString( node.k ) ) {
+		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.sp();
+
+	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.sp();
+
+	if ( !parser.matchString( '=' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	parser.sp();
+
+	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 && isString( value[0] ) ) {
+		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.sp();
+		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.sp();
+		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.sp();
+	var proxy = parser.matchPattern( proxyEvent );
+
+	if ( proxy !== undefined ) {
+		if ( quote ) {
+			parser.sp();
+			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.sp();
+	if ( !parser.matchString( '=' ) ) {
+		if ( required ) { parser.error( "Missing required directive arguments" ); }
+		return;
+	}
+	parser.sp();
+
+	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.sp();
+		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.sp();
+			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.sp();
+
+	// 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.sp();
+
+	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.sp();
+
+	alias = readAlias( parser );
+
+	if ( alias ) {
+		alias.x = refineExpression( alias.x, {} );
+		aliases.push( alias );
+
+		parser.sp();
+
+		while ( parser.matchString(',') ) {
+			alias = readAlias( parser );
+
+			if ( !alias ) {
+				parser.error( 'Expected another alias.' );
+			}
+
+			alias.x = refineExpression( alias.x, {} );
+			aliases.push( alias );
+
+			parser.sp();
+		}
+
+		return aliases;
+	}
+
+	parser.pos = start;
+	return null;
+}
+
+function readAlias( parser ) {
+	var start = parser.pos;
+
+	parser.sp();
+
+	var expr = readExpression( parser, [] );
+
+	if ( !expr ) {
+		parser.pos = start;
+		return null;
+	}
+
+	parser.sp();
+
+	if ( !parser.matchPattern( asRE ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	parser.sp();
+
+	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.sp();
+
+	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.sp();
+			if ( type !== '>' ) { aliases = parser.matchString( 'with' ); }
+		}
+	}
+
+	parser.sp();
+
+	// 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.sp();
+
+	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.sp();
+
+	if ( !parser.matchString( '/' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	parser.sp();
+
+	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( '^(' + 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.sp();
+
+	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.sp();
+
+	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 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 ( isString( item ) ) {
+			item = item.replace( leadingPattern, '' );
+
+			if ( !item ) {
+				items.shift();
+			} else {
+				items[0] = item;
+			}
+		}
+	}
+
+	if ( trailingPattern ) {
+		item = lastItem( items );
+		if ( isString( item ) ) {
+			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 ( isString( items ) ) { 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 || ( isString( previousItem ) && trailingWhitespace.test( previousItem ) ) ) {
+					removeLeadingWhitespaceInsideFragment = true;
+				}
+
+				// and vice versa
+				if ( !nextItem || ( isString( nextItem ) && 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 ( isString( items[i] ) ) {
+			if ( isString( items[i+1] ) ) {
+				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.sp();
+		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.sp();
+
+	parser.inTag = true;
+
+	// directives and attributes
+	while ( attribute = readMustache( parser ) ) {
+		if ( attribute !== false ) {
+			if ( !element.m ) { element.m = []; }
+			element.m.push( attribute );
+		}
+
+		parser.sp();
+	}
+
+	parser.inTag = false;
+
+	// allow whitespace before closing solidus
+	parser.sp();
+
+	// 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 = create( null );
+
+		do {
+			pos = parser.pos;
+			remaining = parser.remaining();
+
+			if ( !remaining ) {
+				// if this happens to be a script tag and there's no content left, it's because
+				// a closing script tag can't appear in a script
+				if ( parser.inside === 'script' ) {
+					closed = true;
+					break;
+				}
+
+				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;
+			}
+
+			else {
+				// implicit close by closing section tag. TODO clean this up
+				var tag = { open: parser.standardDelimiters[0], close: parser.standardDelimiters[1] };
+				var implicitCloseCase = [ readClosing, readElseIf, readElse ];
+				if (  implicitCloseCase.some( function (r) { return r( parser, tag ); } ) ) {
+					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.sp();
+
+	if ( !parser.matchString( name ) ) {
+		parser.pos = pos;
+		return null;
+	}
+
+	parser.sp();
+
+	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.sp();
+	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 = 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 ) {
+	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' && 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 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 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: STANDARD_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 = 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;
+
+		if ( options.attributes ) { this.inTag = true; }
+	},
+
+	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 );
+
+		if ( this.csp !== false ) {
+			var expr = {};
+			insertExpressions( result[0].t, expr );
+			if ( 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',
+	'attributes'
+];
+
+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 !isString( template );
+	},
+
+	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 functions = 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; }
+
+	keys( exp ).forEach( function ( str ) {
+		if ( functions[ str ] ) { return; }
+		functions[ str ] = exp[ str ];
+	});
+}
+
+var templateConfigurator = {
+	name: 'template',
+
+	extend: function extend ( Parent, proto, options ) {
+		// only assign if exists
+		if ( 'template' in options ) {
+			var template = options.template;
+
+			if ( isFunction ( template ) ) {
+				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 ( isFunction ( template ) ) {
+			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 ( isString ( template ) ) {
+		// 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 ( !isNumber( template.v ) ) {
+		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 || !hasOwn( existingPartials, 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;
+};
+var Registry__proto__ = Registry.prototype;
+
+Registry__proto__.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__proto__.init = function init () {
+	// noop
+};
+
+Registry__proto__.configure = function configure ( Parent, target, options ) {
+	var name = this.name;
+	var option = options[ name ];
+
+	var registry = create( Parent[name] );
+
+	for ( var key in option ) {
+		registry[ key ] = option[ key ];
+	}
+
+	target[ name ] = registry;
+};
+
+Registry__proto__.reset = function reset ( ractive ) {
+	var registry = ractive[ this.name ];
+	var changed = false;
+
+	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 isFunction( value ) ?
+			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 ( isArray( options.adaptors ) ) {
+		deprecateOption( options, 'adaptors', 'adapt' );
+	}
+}
+
+var custom = {
+	adapt: adaptConfigurator,
+	css: cssConfigurator,
+	data: dataConfigurator,
+	template: templateConfigurator
+};
+
+var defaultKeys = 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', 'cssData' ] ) );
+
+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, Child ) { return configure( 'extend', Parent, proto$$1, options, Child ); },
+	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, Child ) {
+	deprecate( options );
+
+	for ( var key in options ) {
+		if ( hasOwn( isStandardKey, 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' && isFunction( value ) ) {
+				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, Child );
+	});
+
+	adaptConfigurator[ method ]( Parent, target, options, Child );
+	templateConfigurator[ method ]( Parent, target, options, Child );
+	cssConfigurator[ method ]( Parent, target, options, Child );
+
+	extendOtherMethods( Parent.prototype, target, options );
+}
+
+var _super = /\b_super\b/;
+function extendOtherMethods ( parent, target, options ) {
+	for ( var key in options ) {
+		if ( !isBlacklisted[ key ] && hasOwn( options, key ) ) {
+			var member = options[ key ];
+
+			// if this is a method that overwrites a method, wrap it:
+			if ( isFunction( member ) ) {
+				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.up = options.up;
+	this.ractive = options.up.ractive;
+
+	this.template = options.template;
+	this.index = options.index;
+	this.type = options.template.t;
+
+	this.dirty = false;
+};
+var Item__proto__ = Item.prototype;
+
+Item__proto__.bubble = function bubble () {
+	if ( !this.dirty ) {
+		this.dirty = true;
+		this.up.bubble();
+	}
+};
+
+Item__proto__.destroyed = function destroyed () {
+	if ( this.fragment ) { this.fragment.destroyed(); }
+};
+
+Item__proto__.find = function find () {
+	return null;
+};
+
+Item__proto__.findComponent = function findComponent () {
+	return null;
+};
+
+Item__proto__.findNextNode = function findNextNode () {
+	return this.up.findNextNode( this );
+};
+
+Item__proto__.shuffled = function shuffled () {
+	if ( this.fragment ) { this.fragment.shuffled(); }
+};
+
+Item__proto__.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;
+	var ContainerItem__proto__ = ContainerItem.prototype = Object.create( Item && Item.prototype );
+	ContainerItem__proto__.constructor = ContainerItem;
+
+	ContainerItem__proto__.detach = function detach () {
+		return this.fragment ? this.fragment.detach() : createDocumentFragment();
+	};
+
+	ContainerItem__proto__.find = function find ( selector ) {
+		if ( this.fragment ) {
+			return this.fragment.find( selector );
+		}
+	};
+
+	ContainerItem__proto__.findAll = function findAll ( selector, options ) {
+		if ( this.fragment ) {
+			this.fragment.findAll( selector, options );
+		}
+	};
+
+	ContainerItem__proto__.findComponent = function findComponent ( name ) {
+		if ( this.fragment ) {
+			return this.fragment.findComponent( name );
+		}
+	};
+
+	ContainerItem__proto__.findAllComponents = function findAllComponents ( name, options ) {
+		if ( this.fragment ) {
+			this.fragment.findAllComponents( name, options );
+		}
+	};
+
+	ContainerItem__proto__.firstNode = function firstNode ( skipParent ) {
+		return this.fragment && this.fragment.firstNode( skipParent );
+	};
+
+	ContainerItem__proto__.toString = function toString ( escape ) {
+		return this.fragment ? this.fragment.toString( escape ) : '';
+	};
+
+	return ContainerItem;
+}(Item));
+
+var ComputationChild = (function (Model) {
+	function ComputationChild ( parent, key ) {
+		Model.call( this, parent, key );
+
+		this.isReadonly = !this.root.ractive.syncComputedChildren;
+		this.dirty = true;
+	}
+
+	if ( Model ) ComputationChild.__proto__ = Model;
+	var ComputationChild__proto__ = ComputationChild.prototype = Object.create( Model && Model.prototype );
+	ComputationChild__proto__.constructor = ComputationChild;
+
+	var prototypeAccessors$1 = { setRoot: {} };
+
+	prototypeAccessors$1.setRoot.get = function () { return this.parent.setRoot; };
+
+	ComputationChild__proto__.applyValue = function applyValue ( value ) {
+		Model.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__proto__.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__proto__.handleChange = function handleChange$3 () {
+		this.dirty = true;
+
+		if ( this.boundValue ) { this.boundValue = null; }
+
+		this.links.forEach( marked );
+		this.deps.forEach( handleChange );
+		this.children.forEach( handleChange );
+	};
+
+	ComputationChild__proto__.joinKey = function joinKey ( key ) {
+		if ( key === undefined || key === '' ) { return this; }
+
+		if ( !hasOwn( this.childByKey, key ) ) {
+			var child = new ComputationChild( this, key );
+			this.children.push( child );
+			this.childByKey[ key ] = child;
+		}
+
+		return this.childByKey[ key ];
+	};
+
+	Object.defineProperties( ComputationChild__proto__, prototypeAccessors$1 );
+
+	return ComputationChild;
+}(Model));
+
+/* global console */
+/* eslint no-console:"off" */
+
+var Computation = (function (Model) {
+	function Computation ( viewmodel, signature, key ) {
+		Model.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 ) Computation.__proto__ = Model;
+	var Computation__proto__ = Computation.prototype = Object.create( Model && Model.prototype );
+	Computation__proto__.constructor = Computation;
+
+	var prototypeAccessors$2 = { setRoot: {} };
+
+	prototypeAccessors$2.setRoot.get = function () {
+		if ( this.signature.setter ) { return this; }
+	};
+
+	Computation__proto__.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__proto__.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__proto__.mark = function mark () {
+		this.handleChange();
+	};
+
+	Computation__proto__.rebind = function rebind ( next, previous ) {
+		// computations will grab all of their deps again automagically
+		if ( next !== previous ) { this.handleChange(); }
+	};
+
+	Computation__proto__.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__proto__.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__proto__.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.prototype.teardown.call(this);
+	};
+
+	Object.defineProperties( Computation__proto__, prototypeAccessors$2 );
+
+	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) {
+	function ExpressionProxy ( fragment, template ) {
+		var this$1 = this;
+
+		Model.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 ) ExpressionProxy.__proto__ = Model;
+	var ExpressionProxy__proto__ = ExpressionProxy.prototype = Object.create( Model && Model.prototype );
+	ExpressionProxy__proto__.constructor = ExpressionProxy;
+
+	ExpressionProxy__proto__.bubble = function bubble ( actuallyChanged ) {
+		if ( actuallyChanged === void 0 ) actuallyChanged = true;
+
+		// refresh the keypath
+		this.keypath = undefined;
+
+		if ( actuallyChanged ) {
+			this.handleChange();
+		}
+	};
+
+	ExpressionProxy__proto__.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__proto__.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__proto__.notifyUpstream = function notifyUpstream () {};
+
+	ExpressionProxy__proto__.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__proto__.retrieve = function retrieve () {
+		return this.get();
+	};
+
+	ExpressionProxy__proto__.teardown = function teardown () {
+		var this$1 = this;
+
+		this.fragment = undefined;
+		if ( this.dependencies ) { this.dependencies.forEach( function (d) { return d.unregister( this$1 ); } ); }
+		Model.prototype.teardown.call(this);
+	};
+
+	ExpressionProxy__proto__.unreference = function unreference () {
+		Model.prototype.unreference.call(this);
+		if ( !this.deps.length && !this.refs ) { this.teardown(); }
+	};
+
+	ExpressionProxy__proto__.unregister = function unregister ( dep ) {
+		Model.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) {
+	function ReferenceExpressionChild ( parent, key ) {
+		Model.call ( this, parent, key );
+		this.dirty = true;
+	}
+
+	if ( Model ) ReferenceExpressionChild.__proto__ = Model;
+	var ReferenceExpressionChild__proto__ = ReferenceExpressionChild.prototype = Object.create( Model && Model.prototype );
+	ReferenceExpressionChild__proto__.constructor = ReferenceExpressionChild;
+
+	ReferenceExpressionChild__proto__.applyValue = function applyValue ( value ) {
+		if ( isEqual( value, this.value ) ) { return; }
+
+		var parent = this.parent;
+		var keys$$1 = [ this.key ];
+		while ( parent ) {
+			if ( parent.base ) {
+				var target = parent.model.joinAll( keys$$1 );
+				target.applyValue( value );
+				break;
+			}
+
+			keys$$1.unshift( parent.key );
+
+			parent = parent.parent;
+		}
+	};
+
+	ReferenceExpressionChild__proto__.get = function get ( shouldCapture, opts ) {
+		this.retrieve();
+		return Model.prototype.get.call( this, shouldCapture, opts );
+	};
+
+	ReferenceExpressionChild__proto__.joinKey = function joinKey ( key ) {
+		if ( key === undefined || key === '' ) { return this; }
+
+		if ( !hasOwn( this.childByKey, key ) ) {
+			var child = new ReferenceExpressionChild( this, key );
+			this.children.push( child );
+			this.childByKey[ key ] = child;
+		}
+
+		return this.childByKey[ key ];
+	};
+
+	ReferenceExpressionChild__proto__.mark = function mark () {
+		this.dirty = true;
+		Model.prototype.mark.call(this);
+	};
+
+	ReferenceExpressionChild__proto__.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 missing = { get: function get() {} };
+
+var ReferenceExpressionProxy = (function (Model) {
+	function ReferenceExpressionProxy ( fragment, template ) {
+		var this$1 = this;
+
+		Model.call( this, null, null );
+		this.dirty = true;
+		this.root = fragment.ractive.viewmodel;
+		this.template = template;
+
+		this.base = resolve( 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 || missing );
+						}
+					}
+				}
+
+				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 ( isString( template ) ) {
+				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.base.register( intermediary );
+
+		this.bubble();
+	}
+
+	if ( Model ) ReferenceExpressionProxy.__proto__ = Model;
+	var ReferenceExpressionProxy__proto__ = ReferenceExpressionProxy.prototype = Object.create( Model && Model.prototype );
+	ReferenceExpressionProxy__proto__.constructor = ReferenceExpressionProxy;
+
+	ReferenceExpressionProxy__proto__.bubble = function bubble () {
+		if ( !this.base ) { return; }
+		if ( !this.dirty ) { this.handleChange(); }
+	};
+
+	ReferenceExpressionProxy__proto__.get = function get ( shouldCapture ) {
+		if ( this.dirty ) {
+			this.bubble();
+
+			var keys$$1 = this.members.map( function (m) { return escapeKey( String( m.get() ) ); } );
+			var model = this.base.joinAll( keys$$1 );
+
+			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__proto__.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__proto__.getKeypath = function getKeypath () {
+		return this.model ? this.model.getKeypath() : '@undefined';
+	};
+
+	ReferenceExpressionProxy__proto__.handleChange = function handleChange () {
+		this.dirty = true;
+		this.mark();
+	};
+
+	ReferenceExpressionProxy__proto__.joinKey = function joinKey ( key ) {
+		if ( key === undefined || key === '' ) { return this; }
+
+		if ( !hasOwn( this.childByKey, key ) ) {
+			var child = new ReferenceExpressionChild( this, key );
+			this.children.push( child );
+			this.childByKey[ key ] = child;
+		}
+
+		return this.childByKey[ key ];
+	};
+
+	ReferenceExpressionProxy__proto__.mark = function mark$2 () {
+		if ( this.dirty ) {
+			this.deps.forEach( handleChange );
+		}
+
+		this.links.forEach( marked );
+		this.children.forEach( mark );
+	};
+
+	ReferenceExpressionProxy__proto__.rebind = function rebind () { this.handleChange(); };
+
+	ReferenceExpressionProxy__proto__.retrieve = function retrieve () {
+		return this.value;
+	};
+
+	ReferenceExpressionProxy__proto__.set = function set ( value ) {
+		this.model.set( value );
+	};
+
+	ReferenceExpressionProxy__proto__.teardown = function teardown () {
+		var this$1 = this;
+
+		if ( this.base ) {
+			this.base.unregister( this.intermediary );
+		}
+		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.intermediary ); } );
+		}
+	};
+
+	ReferenceExpressionProxy__proto__.unreference = function unreference () {
+		Model.prototype.unreference.call(this);
+		if ( !this.deps.length && !this.refs ) { this.teardown(); }
+	};
+
+	ReferenceExpressionProxy__proto__.unregister = function unregister ( dep ) {
+		Model.prototype.unregister.call( this, dep );
+		if ( !this.deps.length && !this.refs ) { this.teardown(); }
+	};
+
+	return ReferenceExpressionProxy;
+}(Model));
+
+function resolve ( 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( fragment, aliases[i].x );
+	}
+
+	for ( var k in resolved ) {
+		resolved[k].reference();
+	}
+
+	return resolved;
+}
+
+var Alias = (function (ContainerItem) {
+	function Alias ( options ) {
+		ContainerItem.call( this, options );
+
+		this.fragment = null;
+	}
+
+	if ( ContainerItem ) Alias.__proto__ = ContainerItem;
+	var Alias__proto__ = Alias.prototype = Object.create( ContainerItem && ContainerItem.prototype );
+	Alias__proto__.constructor = Alias;
+
+	Alias__proto__.bind = function bind () {
+		this.fragment = new Fragment({
+			owner: this,
+			template: this.template.f
+		});
+
+		this.fragment.aliases = resolveAliases( this.template.z, this.up );
+		this.fragment.bind();
+	};
+
+	Alias__proto__.render = function render ( target ) {
+		this.rendered = true;
+		if ( this.fragment ) { this.fragment.render( target ); }
+	};
+
+	Alias__proto__.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__proto__.unrender = function unrender ( shouldDestroy ) {
+		if ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }
+		this.rendered = false;
+	};
+
+	Alias__proto__.update = function update () {
+		if ( this.dirty ) {
+			this.dirty = false;
+			this.fragment.update();
+		}
+	};
+
+	return Alias;
+}(ContainerItem));
+
+var hyphenateCamel = function ( camelCaseStr ) {
+	return camelCaseStr.replace( /([A-Z])/g, function ( match, $1 ) {
+		return '-' + $1.toLowerCase();
+	});
+};
+
+var space = /\s+/;
+
+function readStyle ( css ) {
+	if ( !isString( css ) ) { 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 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 ( !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 ( !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$$1 = keys( props );
+	var prev = this.previous || [];
+
+	var i = 0;
+	while ( i < keys$$1.length ) {
+		if ( keys$$1[i] in style ) {
+			var safe = props[ keys$$1[i] ].replace( '!important', '' );
+			style.setProperty( keys$$1[i], safe, safe.length !== props[ keys$$1[i] ].length ? 'important' : '' );
+		}
+		i++;
+	}
+
+	// remove now-missing attrs
+	i = prev.length;
+	while ( i-- ) {
+		if ( !~keys$$1.indexOf( prev[i] ) && prev[i] in style ) { style.setProperty( prev[i], '', '' ); }
+	}
+
+	this.previous = keys$$1;
+}
+
+function updateInlineStyle ( reset ) {
+	if ( !this.style ) {
+		this.style = hyphenateCamel( this.name.substr( 6 ) );
+	}
+
+	if ( reset && this.node.style.getPropertyValue( this.style ) !== this.last ) { return; }
+
+	var value = reset ? '' : safeToStringValue( this.getValue() );
+	var safe = value.replace( '!important', '' );
+	this.node.style.setProperty( this.style, safe, safe.length !== value.length ? 'important' : '' );
+	this.last = safe;
+}
+
+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 ( !isString( this.node.className ) ) {
+			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 ( !isString( this.node.className ) ) {
+		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, isString( val ) ? val : '' );
+				} else {
+					this.node.removeAttribute( this.propertyName );
+				}
+			}
+		}
+	}
+}
+
+function updateAttribute ( reset ) {
+	if ( reset ) {
+		if ( this.node.getAttribute( this.name ) === this.value ) {
+			this.node.removeAttribute( this.name );
+		}
+	} else {
+		this.value = safeToStringValue( this.getString() );
+		this.node.setAttribute( this.name, this.value );
+	}
+}
+
+function updateNamespacedAttribute ( reset ) {
+	if ( reset ) {
+		if ( this.value === this.node.getAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ) ) ) {
+			this.node.removeAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ) );
+		}
+	} else {
+		this.value = safeToStringValue( this.getString() );
+		this.node.setAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ), this.value );
+	}
+}
+
+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; }
+
+var ConditionalAttribute = (function (Item) {
+	function ConditionalAttribute ( options ) {
+		Item.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 ) ConditionalAttribute.__proto__ = Item;
+	var ConditionalAttribute__proto__ = ConditionalAttribute.prototype = Object.create( Item && Item.prototype );
+	ConditionalAttribute__proto__.constructor = ConditionalAttribute;
+
+	ConditionalAttribute__proto__.bind = function bind () {
+		this.fragment.bind();
+	};
+
+	ConditionalAttribute__proto__.bubble = function bubble () {
+		if ( !this.dirty ) {
+			this.dirty = true;
+			this.owner.bubble();
+		}
+	};
+
+	ConditionalAttribute__proto__.destroyed = function destroyed () {
+		this.unrender();
+	};
+
+	ConditionalAttribute__proto__.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__proto__.toString = function toString () {
+		return this.fragment.toString();
+	};
+
+	ConditionalAttribute__proto__.unbind = function unbind () {
+		this.fragment.unbind();
+	};
+
+	ConditionalAttribute__proto__.unrender = function unrender () {
+		this.rendered = false;
+		this.fragment.unrender();
+	};
+
+	ConditionalAttribute__proto__.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) {
+	function Attribute ( options ) {
+		Item.call( this, options );
+
+		this.name = options.template.n;
+		this.namespace = null;
+
+		this.owner = options.owner || options.up.owner || options.element || findElement( options.up );
+		this.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.up ) );
+		this.up = options.up; // shared
+		this.ractive = this.up.ractive;
+
+		this.rendered = false;
+		this.updateDelegate = null;
+		this.fragment = null;
+
+		this.element.attributeByName[ this.name ] = this;
+
+		if ( !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 ) Attribute.__proto__ = Item;
+	var Attribute__proto__ = Attribute.prototype = Object.create( Item && Item.prototype );
+	Attribute__proto__.constructor = Attribute;
+
+	Attribute__proto__.bind = function bind () {
+		if ( this.fragment ) {
+			this.fragment.bind();
+		}
+	};
+
+	Attribute__proto__.bubble = function bubble () {
+		if ( !this.dirty ) {
+			this.up.bubble();
+			this.element.bubble();
+			this.dirty = true;
+		}
+	};
+
+	Attribute__proto__.firstNode = function firstNode () {};
+
+	Attribute__proto__.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__proto__.getValue = function getValue () {
+		attribute = true;
+		var value = this.fragment ? this.fragment.valueOf() : booleanAttributes.test( this.name ) ? true : this.value;
+		attribute = false;
+		return value;
+	};
+
+	Attribute__proto__.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__proto__.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 ? ( isString( value ) ? ((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__proto__.unbind = function unbind () {
+		if ( this.fragment ) { this.fragment.unbind(); }
+	};
+
+	Attribute__proto__.unrender = function unrender () {
+		this.updateDelegate( true );
+
+		this.rendered = false;
+	};
+
+	Attribute__proto__.update = function update () {
+		if ( this.dirty ) {
+			var binding;
+			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() );
+			} else if ( this.name === 'value' && ( binding = this.element.binding ) ) { // special case: name bound element with dynamic value
+				var attr = binding.attribute;
+				if ( attr && !attr.dirty && attr.rendered ) {
+					this.element.binding.attribute.updateDelegate();
+				}
+			}
+		}
+	};
+
+	return Attribute;
+}(Item));
+
+var BindingFlag = (function (Item) {
+	function BindingFlag ( options ) {
+		Item.call( this, options );
+
+		this.owner = options.owner || options.up.owner || findElement( options.up );
+		this.element = this.owner.attributeByName ? this.owner : findElement( options.up );
+		this.flag = options.template.v === 'l' ? 'lazy' : 'twoway';
+		this.bubbler = this.owner === this.element ? this.element : this.up;
+
+		if ( this.element.type === ELEMENT ) {
+			if ( 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 ) BindingFlag.__proto__ = Item;
+	var BindingFlag__proto__ = BindingFlag.prototype = Object.create( Item && Item.prototype );
+	BindingFlag__proto__.constructor = BindingFlag;
+
+	BindingFlag__proto__.bind = function bind () {
+		if ( this.fragment ) { this.fragment.bind(); }
+		set$1( this, this.getValue(), true );
+	};
+
+	BindingFlag__proto__.bubble = function bubble () {
+		if ( !this.dirty ) {
+			this.bubbler.bubble();
+			this.dirty = true;
+		}
+	};
+
+	BindingFlag__proto__.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__proto__.render = function render () {
+		set$1( this, this.getValue(), true );
+	};
+
+	BindingFlag__proto__.toString = function toString () { return ''; };
+
+	BindingFlag__proto__.unbind = function unbind () {
+		if ( this.fragment ) { this.fragment.unbind(); }
+
+		delete this.element[ this.flag ];
+	};
+
+	BindingFlag__proto__.unrender = function unrender () {
+		if ( this.element.rendered ) { this.element.recreateTwowayBinding(); }
+	};
+
+	BindingFlag__proto__.update = function update () {
+		if ( this.dirty ) {
+			this.dirty = false;
+			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;
+}
+
+function Comment ( options ) {
+	Item.call( this, options );
+}
+
+var proto$2 = create( Item.prototype );
+
+assign( proto$2, {
+	bind: noop,
+	unbind: noop,
+	update: noop,
+
+	detach: function detach () {
+		return detachNode( this.node );
+	},
+
+	firstNode: function firstNode () {
+		return this.node;
+	},
+
+	render: function render ( target ) {
+		this.rendered = true;
+
+		this.node = doc.createComment( this.template.c );
+		target.appendChild( this.node );
+	},
+
+	toString: function toString () {
+		return ("<!-- " + (this.template.c) + " -->");
+	},
+
+	unrender: function unrender ( shouldDestroy ) {
+		if ( this.rendered && shouldDestroy ) { this.detach(); }
+		this.rendered = false;
+	}
+});
+
+Comment.prototype = proto$2;
+
+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 RactiveModel = (function (SharedModel) {
+	function RactiveModel ( ractive ) {
+		SharedModel.call( this, ractive, '@this' );
+		this.ractive = ractive;
+	}
+
+	if ( SharedModel ) RactiveModel.__proto__ = SharedModel;
+	var RactiveModel__proto__ = RactiveModel.prototype = Object.create( SharedModel && SharedModel.prototype );
+	RactiveModel__proto__.constructor = RactiveModel;
+
+	RactiveModel__proto__.joinKey = function joinKey ( key ) {
+		var model = SharedModel.prototype.joinKey.call( this, key );
+
+		if ( ( key === 'root' || key === 'parent' ) && !model.isLink ) { return initLink( model, key ); }
+		else if ( key === 'data' ) { return this.ractive.viewmodel; }
+		else if ( key === 'cssData' ) { return this.ractive.constructor._cssModel; }
+
+		return model;
+	};
+
+	return RactiveModel;
+}(SharedModel));
+
+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( 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 RootModel = (function (Model) {
+	function RootModel ( options ) {
+		Model.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 ) RootModel.__proto__ = Model;
+	var RootModel__proto__ = RootModel.prototype = Object.create( Model && Model.prototype );
+	RootModel__proto__.constructor = RootModel;
+
+	RootModel__proto__.attached = function attached ( fragment ) {
+		attachImplicits( this, fragment );
+	};
+
+	RootModel__proto__.compute = function compute ( key, signature ) {
+		var computation = new Computation( this, signature, key );
+		this.computations[ escapeKey( key ) ] = computation;
+
+		return computation;
+	};
+
+	RootModel__proto__.createLink = function createLink ( keypath, target, targetPath, options ) {
+		var keys$$1 = splitKeypath( keypath );
+
+		var model = this;
+		while ( keys$$1.length ) {
+			var key = keys$$1.shift();
+			model = model.childByKey[ key ] || model.joinKey( key );
+		}
+
+		return model.link( target, targetPath, options );
+	};
+
+	RootModel__proto__.detached = function detached () {
+		detachImplicits( this );
+	};
+
+	RootModel__proto__.get = function get ( shouldCapture, options ) {
+		var this$1 = this;
+
+		if ( shouldCapture ) { capture( this ); }
+
+		if ( !options || options.virtual !== false ) {
+			var result = this.getVirtual();
+			var keys$$1 = keys( this.computations );
+			var i = keys$$1.length;
+			while ( i-- ) {
+				result[ keys$$1[i] ] = this$1.computations[ keys$$1[i] ].get();
+			}
+
+			return result;
+		} else {
+			return this.value;
+		}
+	};
+
+	RootModel__proto__.getKeypath = function getKeypath () {
+		return '';
+	};
+
+	RootModel__proto__.getRactiveModel = function getRactiveModel () {
+		return this.ractiveModel || ( this.ractiveModel = new RactiveModel( this.ractive ) );
+	};
+
+	RootModel__proto__.getValueChildren = function getValueChildren () {
+		var this$1 = this;
+
+		var children = Model.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__proto__.has = function has ( key ) {
+		var value = this.value;
+		var unescapedKey = unescapeKey( key );
+
+		if ( unescapedKey === '@this' || unescapedKey === '@global' || unescapedKey === '@shared' || unescapedKey === '@style' ) { return true; }
+		if ( unescapedKey[0] === '~' && unescapedKey[1] === '/' ) { unescapedKey = unescapedKey.slice( 2 ); }
+		if ( key === '' || hasOwn( 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 ( hasOwn( constructor.prototype, unescapedKey ) ) { return true; }
+			constructor = constructor.constructor;
+		}
+
+		return false;
+	};
+
+	RootModel__proto__.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; }
+			if ( key === '@style' ) { return this.getRactiveModel().joinKey( 'cssData' ); }
+			return;
+		}
+
+		if ( key[0] === '~' && key[1] === '/' ) { key = key.slice( 2 ); }
+
+		return hasOwn( this.computations, key ) ? this.computations[ key ] :
+		       Model.prototype.joinKey.call( this, key, opts );
+	};
+
+	RootModel__proto__.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__proto__.retrieve = function retrieve () {
+		return this.wrapper ? this.wrapper.get() : this.value;
+	};
+
+	RootModel__proto__.teardown = function teardown () {
+		var this$1 = this;
+
+		Model.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 ( isFunction( signature ) ) {
+		getter = bind$1( signature, ractive );
+		getterString = signature.toString();
+		getterUseStack = true;
+	}
+
+	if ( isString( signature ) ) {
+		getter = createFunctionFromString( signature, ractive );
+		getterString = signature;
+	}
+
+	if ( isObjectType( signature ) ) {
+		if ( isString( signature.get ) ) {
+			getter = createFunctionFromString( signature.get, ractive );
+			getterString = signature.get;
+		} else if ( isFunction( signature.get ) ) {
+			getter = bind$1( signature.get, ractive );
+			getterString = signature.get.toString();
+			getterUseStack = true;
+		} else {
+			fatal( '`%s` computation must have a `get()` method', key );
+		}
+
+		if ( isFunction( signature.set ) ) {
+			setter = bind$1( signature.set, ractive );
+			setterString = signature.set.toString();
+		}
+	}
+
+	return {
+		getter: getter,
+		setter: setter,
+		getterString: getterString,
+		setterString: setterString,
+		getterUseStack: getterUseStack
+	};
+}
+
+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 = ref[1];
+
+		if ( isFunction( config ) ) {
+			instance[type]( target, config );
+		} else if ( isObjectType( config ) && isFunction( config.handler ) ) {
+			instance[ config.once ? single : type ]( target, config.handler, create( config ) );
+		}
+	});
+}
+
+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 );
+
+	// set up event subscribers
+	subscribe( ractive, options, 'on' );
+
+	// if there's not a delegation setting, inherit from parent if it's not default
+	if ( !hasOwn( options, '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 ] = assign( 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 = assign( 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 ( isString( adaptor ) ) {
+			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 = 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 Component = (function (Item) {
+	function Component ( options, ComponentConstructor ) {
+		var this$1 = this;
+
+		Item.call( this, options );
+		var template = options.template;
+		this.isAnchor = template.t === ANCHOR;
+		this.type = this.isAnchor ? ANCHOR : COMPONENT; // override ELEMENT from super
+		var attrs = template.m;
+
+		var partials = template.p || {};
+		if ( !( 'content' in partials ) ) { partials.content = template.f || []; }
+		this._partials = partials; // TEMP
+
+		if ( this.isAnchor ) {
+			this.name = template.n;
+
+			this.addChild = addChild;
+			this.removeChild = removeChild;
+		} else {
+			var instance = create( ComponentConstructor.prototype );
+
+			this.instance = instance;
+			this.name = template.e;
+
+			if ( instance.el ) {
+				warnIfDebug( ("The <" + (this.name) + "> component has a default 'el' property; it has been disregarded") );
+			}
+
+			// find container
+			var fragment = options.up;
+			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.up.ractive;
+			instance.container = container || null;
+			instance.root = instance.parent.root;
+			instance.component = this;
+
+			construct( this.instance, { partials: partials });
+
+			// these can be modified during construction
+			template = this.template;
+			attrs = template.m;
+
+			// allow components that are so inclined to add programmatic mappings
+			if ( isArray( this.mappings ) ) {
+				attrs = ( attrs || [] ).concat( this.mappings );
+			} else if ( isString( this.mappings ) ) {
+				attrs = ( attrs || [] ).concat( parser.parse( this.mappings, { attributes: true } ).t );
+			}
+
+			// 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 = [];
+
+		if (attrs) {
+			var leftovers = [];
+			attrs.forEach( function (template) {
+				switch ( template.t ) {
+					case ATTRIBUTE:
+					case EVENT:
+						this$1.attributes.push( createItem({
+							owner: this$1,
+							up: this$1.up,
+							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,
+					up: this.up,
+					template: leftovers
+				}) );
+			}
+		}
+
+		this.eventHandlers = [];
+	}
+
+	if ( Item ) Component.__proto__ = Item;
+	var Component__proto__ = Component.prototype = Object.create( Item && Item.prototype );
+	Component__proto__.constructor = Component;
+
+	Component__proto__.bind = function bind$2 () {
+		if ( !this.isAnchor ) {
+			this.attributes.forEach( bind );
+
+			initialise( this.instance, {
+				partials: this._partials
+			}, {
+				cssIds: this.up.cssIds
+			});
+
+			this.eventHandlers.forEach( bind );
+
+			this.bound = true;
+		}
+	};
+
+	Component__proto__.bubble = function bubble () {
+		if ( !this.dirty ) {
+			this.dirty = true;
+			this.up.bubble();
+		}
+	};
+
+	Component__proto__.destroyed = function destroyed () {
+		if ( !this.isAnchor && this.instance.fragment ) { this.instance.fragment.destroyed(); }
+	};
+
+	Component__proto__.detach = function detach () {
+		if ( this.isAnchor ) {
+			if ( this.instance ) { return this.instance.fragment.detach(); }
+			return createDocumentFragment();
+		}
+
+		return this.instance.fragment.detach();
+	};
+
+	Component__proto__.find = function find ( selector, options ) {
+		if ( this.instance ) { return this.instance.fragment.find( selector, options ); }
+	};
+
+	Component__proto__.findAll = function findAll ( selector, options ) {
+		if ( this.instance ) { this.instance.fragment.findAll( selector, options ); }
+	};
+
+	Component__proto__.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__proto__.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__proto__.firstNode = function firstNode ( skipParent ) {
+		if ( this.instance ) { return this.instance.fragment.firstNode( skipParent ); }
+	};
+
+	Component__proto__.getContext = function getContext () {
+		var assigns = [], len = arguments.length;
+		while ( len-- ) assigns[ len ] = arguments[ len ];
+
+		assigns.unshift( this.instance );
+		return getRactiveContext.apply( null, assigns );
+	};
+
+	Component__proto__.render = function render$2 ( 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__proto__.toString = function toString () {
+		if ( this.instance ) { return this.instance.toHTML(); }
+	};
+
+	Component__proto__.unbind = function unbind$1 () {
+		if ( !this.isAnchor ) {
+			this.bound = false;
+
+			this.attributes.forEach( unbind );
+
+			teardown$1( this.instance, function () { return runloop.promise(); } );
+		}
+	};
+
+	Component__proto__.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__proto__.update = function update$2 () {
+		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.up = this.up;
+	meta.name = meta.nameOption || this.name;
+	this.name = meta.name;
+
+
+	if ( !child.isolated ) { child.viewmodel.attached( this.up ); }
+
+	// 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.up = anchor.up;
+
+	anchor.item = meta;
+	anchor.instance = meta.instance;
+	var nextNode = anchor.up.findNextNode( anchor );
+
+	if ( meta.instance.fragment.rendered ) {
+		meta.instance.unrender();
+	}
+
+	meta.partials = meta.instance.partials;
+	meta.instance.partials = assign( create( meta.partials ), meta.partials, anchor._partials );
+
+	meta.instance.fragment.unbind();
+	meta.instance.fragment.componentParent = anchor.up;
+	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.up.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.instance.fragment.componentParent = null;
+	meta.up = 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.up.owner || findElement( options.up );
+	this.element = this.owner.attributeByName ? this.owner : findElement( options.up );
+	this.up = this.owner.up;
+	this.ractive = this.owner.ractive;
+	var template = this.template = options.template;
+
+	this.name = template.n;
+
+	this.node = null;
+	this.handle = null;
+
+	this.element.decorators.push( this );
+};
+var Decorator__proto__ = Decorator.prototype;
+
+Decorator__proto__.bind = function bind () {
+	setupArgsFn( this, this.template, this.up, { register: true } );
+};
+
+Decorator__proto__.bubble = function bubble () {
+	if ( !this.dirty ) {
+		this.dirty = true;
+		this.owner.bubble();
+	}
+};
+
+Decorator__proto__.destroyed = function destroyed () {
+	if ( this.handle ) {
+		this.handle.teardown();
+		this.handle = null;
+	}
+	this.shouldDestroy = true;
+};
+
+Decorator__proto__.handleChange = function handleChange () { this.bubble(); };
+
+Decorator__proto__.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__proto__.render = function render () {
+		var this$1 = this;
+
+	this.shouldDestroy = false;
+	if ( this.handle ) { this.unrender(); }
+	runloop.scheduleTask( function () {
+		var fn = findInViewHierarchy( 'decorators', this$1.ractive, this$1.name );
+
+		if ( !fn ) {
+			warnOnce( missingPlugin( this$1.name, 'decorator' ) );
+			this$1.handle = 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.handle = fn.apply( this$1.ractive, [ this$1.node ].concat( args ) );
+
+		if ( !this$1.handle || !this$1.handle.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 );
+};
+
+Decorator__proto__.toString = function toString () { return ''; };
+
+Decorator__proto__.unbind = function unbind () {
+	teardownArgsFn( this, this.template );
+};
+
+Decorator__proto__.unrender = function unrender ( shouldDestroy ) {
+	if ( ( !shouldDestroy || this.element.rendered ) && this.handle ) {
+		this.handle.teardown();
+		this.handle = null;
+	}
+};
+
+Decorator__proto__.update = function update () {
+	var instance = this.handle;
+
+	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) {
+	function Doctype () {
+		Item.apply(this, arguments);
+	}
+
+	if ( Item ) Doctype.__proto__ = Item;
+	var Doctype__proto__ = Doctype.prototype = Object.create( Item && Item.prototype );
+	Doctype__proto__.constructor = Doctype;
+
+	Doctype__proto__.toString = function toString () {
+		return '<!DOCTYPE' + this.template.a + '>';
+	};
+
+	return Doctype;
+}(Item));
+
+var proto$3 = Doctype.prototype;
+proto$3.bind = proto$3.render = proto$3.teardown = proto$3.unbind = proto$3.unrender = proto$3.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 );
+	}
+};
+var Binding__proto__ = Binding.prototype;
+
+Binding__proto__.bind = function bind () {
+	this.model.registerTwowayBinding( this );
+};
+
+Binding__proto__.handleChange = function handleChange () {
+		var this$1 = this;
+
+	var value = this.getValue();
+	if ( this.lastVal() === value ) { return; }
+
+	runloop.start();
+	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__proto__.lastVal = function lastVal ( setting, value ) {
+	if ( setting ) { this.lastValue = value; }
+	else { return this.lastValue; }
+};
+
+Binding__proto__.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__proto__.render = function render () {
+	this.node = this.element.node;
+	this.node._ractive.binding = this;
+	this.rendered = true; // TODO is this used anywhere?
+};
+
+Binding__proto__.setFromNode = function setFromNode ( node ) {
+	this.model.set( node.value );
+};
+
+Binding__proto__.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) {
+	function CheckboxBinding ( element ) {
+		Binding.call( this, element, 'checked' );
+	}
+
+	if ( Binding ) CheckboxBinding.__proto__ = Binding;
+	var CheckboxBinding__proto__ = CheckboxBinding.prototype = Object.create( Binding && Binding.prototype );
+	CheckboxBinding__proto__.constructor = CheckboxBinding;
+
+	CheckboxBinding__proto__.render = function render () {
+		Binding.prototype.render.call(this);
+
+		this.element.on( 'change', handleDomEvent );
+
+		if ( this.node.attachEvent ) {
+			this.element.on( 'click', handleDomEvent );
+		}
+	};
+
+	CheckboxBinding__proto__.unrender = function unrender () {
+		this.element.off( 'change', handleDomEvent );
+		this.element.off( 'click', handleDomEvent );
+	};
+
+	CheckboxBinding__proto__.getInitialValue = function getInitialValue () {
+		return !!this.element.getAttribute( 'checked' );
+	};
+
+	CheckboxBinding__proto__.getValue = function getValue () {
+		return this.node.checked;
+	};
+
+	CheckboxBinding__proto__.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 = [];
+};
+var BindingGroup__proto__ = BindingGroup.prototype;
+
+BindingGroup__proto__.add = function add ( binding ) {
+	this.bindings.push( binding );
+};
+
+BindingGroup__proto__.bind = function bind () {
+	this.value = this.model.get();
+	this.model.registerTwowayBinding( this );
+	this.bound = true;
+};
+
+BindingGroup__proto__.remove = function remove ( binding ) {
+	removeFromArray( this.bindings, binding );
+	if ( !this.bindings.length ) {
+		this.unbind();
+	}
+};
+
+BindingGroup__proto__.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) {
+	function CheckboxNameBinding ( element ) {
+		Binding.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 ) CheckboxNameBinding.__proto__ = Binding;
+	var CheckboxNameBinding__proto__ = CheckboxNameBinding.prototype = Object.create( Binding && Binding.prototype );
+	CheckboxNameBinding__proto__.constructor = CheckboxNameBinding;
+
+	CheckboxNameBinding__proto__.bind = function bind () {
+		if ( !this.group.bound ) {
+			this.group.bind();
+		}
+	};
+
+	CheckboxNameBinding__proto__.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__proto__.getValue = function getValue () {
+		return this.group.value;
+	};
+
+	CheckboxNameBinding__proto__.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.prototype.handleChange.call(this);
+	};
+
+	CheckboxNameBinding__proto__.render = function render () {
+		Binding.prototype.render.call(this);
+
+		var node = this.node;
+
+		var existingValue = this.model.get();
+		var bindingValue = this.element.getAttribute( 'value' );
+
+		if ( 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__proto__.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__proto__.unbind = function unbind () {
+		this.group.remove( this );
+	};
+
+	CheckboxNameBinding__proto__.unrender = function unrender () {
+		var el = this.element;
+
+		el.off( 'change', handleDomEvent );
+		el.off( 'click', handleDomEvent );
+	};
+
+	CheckboxNameBinding__proto__.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__proto__.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) {
+	function ContentEditableBinding () {
+		Binding.apply(this, arguments);
+	}
+
+	if ( Binding ) ContentEditableBinding.__proto__ = Binding;
+	var ContentEditableBinding__proto__ = ContentEditableBinding.prototype = Object.create( Binding && Binding.prototype );
+	ContentEditableBinding__proto__.constructor = ContentEditableBinding;
+
+	ContentEditableBinding__proto__.getInitialValue = function getInitialValue () {
+		return this.element.fragment ? this.element.fragment.toString() : '';
+	};
+
+	ContentEditableBinding__proto__.getValue = function getValue () {
+		return this.element.node.innerHTML;
+	};
+
+	ContentEditableBinding__proto__.render = function render () {
+		Binding.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__proto__.setFromNode = function setFromNode ( node ) {
+		this.model.set( node.innerHTML );
+	};
+
+	ContentEditableBinding__proto__.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) {
+	function GenericBinding () {
+		Binding.apply(this, arguments);
+	}
+
+	if ( Binding ) GenericBinding.__proto__ = Binding;
+	var GenericBinding__proto__ = GenericBinding.prototype = Object.create( Binding && Binding.prototype );
+	GenericBinding__proto__.constructor = GenericBinding;
+
+	GenericBinding__proto__.getInitialValue = function getInitialValue () {
+		return '';
+	};
+
+	GenericBinding__proto__.getValue = function getValue () {
+		return this.node.value;
+	};
+
+	GenericBinding__proto__.render = function render () {
+		Binding.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__proto__.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) {
+	function FileBinding () {
+		GenericBinding.apply(this, arguments);
+	}
+
+	if ( GenericBinding ) FileBinding.__proto__ = GenericBinding;
+	var FileBinding__proto__ = FileBinding.prototype = Object.create( GenericBinding && GenericBinding.prototype );
+	FileBinding__proto__.constructor = FileBinding;
+
+	FileBinding__proto__.getInitialValue = function getInitialValue () {
+		/* istanbul ignore next */
+		return undefined;
+	};
+
+	FileBinding__proto__.getValue = function getValue () {
+		/* istanbul ignore next */
+		return this.node.files;
+	};
+
+	FileBinding__proto__.render = function render () {
+		/* istanbul ignore next */
+		this.element.lazy = false;
+		/* istanbul ignore next */
+		GenericBinding.prototype.render.call(this);
+	};
+
+	FileBinding__proto__.setFromNode = function setFromNode ( node ) {
+		/* istanbul ignore next */
+		this.model.set( node.files );
+	};
+
+	return FileBinding;
+}(GenericBinding));
+
+function getSelectedOptions ( select ) {
+	/* istanbul ignore next */
+	return select.selectedOptions
+		? toArray( select.selectedOptions )
+		: select.options
+			? toArray( select.options ).filter( function (option) { return option.selected; } )
+			: [];
+}
+
+var MultipleSelectBinding = (function (Binding) {
+	function MultipleSelectBinding () {
+		Binding.apply(this, arguments);
+	}
+
+	if ( Binding ) MultipleSelectBinding.__proto__ = Binding;
+	var MultipleSelectBinding__proto__ = MultipleSelectBinding.prototype = Object.create( Binding && Binding.prototype );
+	MultipleSelectBinding__proto__.constructor = MultipleSelectBinding;
+
+	MultipleSelectBinding__proto__.getInitialValue = function getInitialValue () {
+		return this.element.options
+			.filter( function (option) { return option.getAttribute( 'selected' ); } )
+			.map( function (option) { return option.getAttribute( 'value' ); } );
+	};
+
+	MultipleSelectBinding__proto__.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__proto__.handleChange = function handleChange () {
+		var attribute = this.attribute;
+		var previousValue = attribute.getValue();
+
+		var value = this.getValue();
+
+		if ( previousValue === undefined || !arrayContentsMatch( value, previousValue ) ) {
+			Binding.prototype.handleChange.call(this);
+		}
+
+		return this;
+	};
+
+	MultipleSelectBinding__proto__.render = function render () {
+		Binding.prototype.render.call(this);
+
+		this.element.on( 'change', handleDomEvent );
+
+		if ( this.model.get() === undefined ) {
+			// get value from DOM, if possible
+			this.handleChange();
+		}
+	};
+
+	MultipleSelectBinding__proto__.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__proto__.unrender = function unrender () {
+		this.element.off( 'change', handleDomEvent );
+	};
+
+	return MultipleSelectBinding;
+}(Binding));
+
+var NumericBinding = (function (GenericBinding) {
+	function NumericBinding () {
+		GenericBinding.apply(this, arguments);
+	}
+
+	if ( GenericBinding ) NumericBinding.__proto__ = GenericBinding;
+	var NumericBinding__proto__ = NumericBinding.prototype = Object.create( GenericBinding && GenericBinding.prototype );
+	NumericBinding__proto__.constructor = NumericBinding;
+
+	NumericBinding__proto__.getInitialValue = function getInitialValue () {
+		return undefined;
+	};
+
+	NumericBinding__proto__.getValue = function getValue () {
+		var value = parseFloat( this.node.value );
+		return isNaN( value ) ? undefined : value;
+	};
+
+	NumericBinding__proto__.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) {
+	function RadioBinding ( element ) {
+		Binding.call( this, element, 'checked' );
+
+		this.siblings = getSiblings( this.ractive._guid + this.element.getAttribute( 'name' ) );
+		this.siblings.push( this );
+	}
+
+	if ( Binding ) RadioBinding.__proto__ = Binding;
+	var RadioBinding__proto__ = RadioBinding.prototype = Object.create( Binding && Binding.prototype );
+	RadioBinding__proto__.constructor = RadioBinding;
+
+	RadioBinding__proto__.getValue = function getValue () {
+		return this.node.checked;
+	};
+
+	RadioBinding__proto__.handleChange = function handleChange () {
+		runloop.start();
+
+		this.siblings.forEach( function (binding) {
+			binding.model.set( binding.getValue() );
+		});
+
+		runloop.end();
+	};
+
+	RadioBinding__proto__.render = function render () {
+		Binding.prototype.render.call(this);
+
+		this.element.on( 'change', handleDomEvent );
+
+		if ( this.node.attachEvent ) {
+			this.element.on( 'click', handleDomEvent );
+		}
+	};
+
+	RadioBinding__proto__.setFromNode = function setFromNode ( node ) {
+		this.model.set( node.checked );
+	};
+
+	RadioBinding__proto__.unbind = function unbind () {
+		removeFromArray( this.siblings, this );
+	};
+
+	RadioBinding__proto__.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) {
+	function RadioNameBinding ( element ) {
+		Binding.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 ) RadioNameBinding.__proto__ = Binding;
+	var RadioNameBinding__proto__ = RadioNameBinding.prototype = Object.create( Binding && Binding.prototype );
+	RadioNameBinding__proto__.constructor = RadioNameBinding;
+
+	RadioNameBinding__proto__.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__proto__.getInitialValue = function getInitialValue () {
+		if ( this.element.getAttribute( 'checked' ) ) {
+			return this.element.getAttribute( 'value' );
+		}
+	};
+
+	RadioNameBinding__proto__.getValue = function getValue () {
+		return this.element.getAttribute( 'value' );
+	};
+
+	RadioNameBinding__proto__.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.prototype.handleChange.call(this);
+		}
+	};
+
+	RadioNameBinding__proto__.lastVal = function lastVal ( setting, value ) {
+		if ( !this.group ) { return; }
+		if ( setting ) { this.group.lastValue = value; }
+		else { return this.group.lastValue; }
+	};
+
+	RadioNameBinding__proto__.render = function render () {
+		Binding.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__proto__.setFromNode = function setFromNode ( node ) {
+		if ( node.checked ) {
+			this.group.model.set( this.element.getAttribute( 'value' ) );
+		}
+	};
+
+	RadioNameBinding__proto__.unbind = function unbind () {
+		this.group.remove( this );
+
+		this.model.getKeypathModel().unregister( this.nameAttributeBinding );
+	};
+
+	RadioNameBinding__proto__.unrender = function unrender () {
+		var el = this.element;
+
+		el.off( 'change', handleDomEvent );
+		el.off( 'click', handleDomEvent );
+	};
+
+	return RadioNameBinding;
+}(Binding));
+
+var SingleSelectBinding = (function (Binding) {
+	function SingleSelectBinding () {
+		Binding.apply(this, arguments);
+	}
+
+	if ( Binding ) SingleSelectBinding.__proto__ = Binding;
+	var SingleSelectBinding__proto__ = SingleSelectBinding.prototype = Object.create( Binding && Binding.prototype );
+	SingleSelectBinding__proto__.constructor = SingleSelectBinding;
+
+	SingleSelectBinding__proto__.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__proto__.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__proto__.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__proto__.render = function render () {
+		Binding.prototype.render.call(this);
+		this.element.on( 'change', handleDomEvent );
+	};
+
+	SingleSelectBinding__proto__.setFromNode = function setFromNode ( node ) {
+		var option = getSelectedOptions( node )[0];
+		this.model.set( option._ractive ? option._ractive.value : option.value );
+	};
+
+	SingleSelectBinding__proto__.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) {
+	function Element ( options ) {
+		var this$1 = this;
+
+		ContainerItem.call( this, options );
+
+		this.name = options.template.e.toLowerCase();
+
+		// find parent element
+		this.parent = findElement( this.up, 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,
+						up: this$1.up,
+						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 ( val ) { attrs.push( val ); }
+		if ( name ) { attrs.push( name ); }
+		if ( cls ) { attrs.unshift( cls ); }
+
+		if ( leftovers ) {
+			( attrs || ( this.attributes = [] ) ).push( new ConditionalAttribute({
+				owner: this,
+				up: this.up,
+				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 ) Element.__proto__ = ContainerItem;
+	var Element__proto__ = Element.prototype = Object.create( ContainerItem && ContainerItem.prototype );
+	Element__proto__.constructor = Element;
+
+	Element__proto__.bind = function bind$3 () {
+		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__proto__.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__proto__.destroyed = function destroyed$1 () {
+		var this$1 = this;
+
+		if ( this.attributes ) { this.attributes.forEach( destroyed ); }
+
+		if ( !this.up.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__proto__.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__proto__.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__proto__.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__proto__.findNextNode = function findNextNode () {
+		return null;
+	};
+
+	Element__proto__.firstNode = function firstNode () {
+		return this.node;
+	};
+
+	Element__proto__.getAttribute = function getAttribute ( name ) {
+		var attribute = this.attributeByName[ name ];
+		return attribute ? attribute.getValue() : undefined;
+	};
+
+	Element__proto__.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.up, this ); }
+		assigns.unshift( create( this.ctx ) );
+		return assign.apply( null, assigns );
+		var ref;
+	};
+
+	Element__proto__.off = function off ( event, callback, capture ) {
+		if ( capture === void 0 ) capture = false;
+
+		var delegate = this.up.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__proto__.on = function on ( event, callback, capture ) {
+		if ( capture === void 0 ) capture = false;
+
+		var delegate = this.up.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__proto__.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__proto__.render = function render$3 ( 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 ( !existing && this.node ) {
+			node = this.node;
+			target.appendChild( node );
+			existing = true;
+		}
+
+		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
+		defineProperty( node, '_ractive', {
+			value: {
+				proxy: this
+			},
+			configurable: true
+		});
+
+		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 ); }
+			}
+		}
+
+		// 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.up.cssIds ) {
+			node.setAttribute( 'data-ractive-css', this.up.cssIds.map( function (x) { return ("{" + x + "}"); } ).join( ' ' ) );
+		}
+
+		if ( this.attributes ) { this.attributes.forEach( render ); }
+		if ( this.binding ) { this.binding.render(); }
+
+		if ( !this.up.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__proto__.toString = function toString () {
+		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.up.cssIds ) {
+			attrs += " data-ractive-css=\"" + (this.up.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__proto__.unbind = function unbind$2 () {
+		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__proto__.unrender = function unrender ( 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__proto__.update = function update$3 () {
+		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.up.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 || node.correspondingUseElement; // SVG with a <use> element in certain environments
+	}
+
+	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 || node.correspondingUseElement;
+		}
+	}
+
+	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) {
+	function Form ( options ) {
+		Element.call( this, options );
+		this.formBindings = [];
+	}
+
+	if ( Element ) Form.__proto__ = Element;
+	var Form__proto__ = Form.prototype = Object.create( Element && Element.prototype );
+	Form__proto__.constructor = Form;
+
+	Form__proto__.render = function render ( target, occupants ) {
+		Element.prototype.render.call( this, target, occupants );
+		this.on( 'reset', handleReset );
+	};
+
+	Form__proto__.unrender = function unrender ( shouldDestroy ) {
+		this.off( 'reset', handleReset );
+		Element.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;
+};
+var DOMEvent__proto__ = DOMEvent.prototype;
+
+DOMEvent__proto__.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__proto__.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;
+};
+var CustomEvent__proto__ = CustomEvent.prototype;
+
+CustomEvent__proto__.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__proto__.unlisten = function unlisten () {
+	this.handler.teardown();
+};
+
+var RactiveEvent = function RactiveEvent ( component, name ) {
+	this.component = component;
+	this.name = name;
+	this.handler = null;
+};
+var RactiveEvent__proto__ = RactiveEvent.prototype;
+
+RactiveEvent__proto__.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__proto__.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.up.owner || findElement( options.up );
+	this.element = this.owner.attributeByName ? this.owner : findElement( options.up, true );
+	this.template = options.template;
+	this.up = options.up;
+	this.ractive = options.up.ractive;
+	//const delegate = this.delegate = this.ractive.delegate && options.up.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;
+};
+var EventDirective__proto__ = EventDirective.prototype;
+
+EventDirective__proto__.bind = function bind () {
+	addToArray( ( this.element.events || ( this.element.events = [] ) ), this );
+
+	setupArgsFn( this, this.template );
+	if ( !this.fn ) { this.action = this.template.f; }
+};
+
+EventDirective__proto__.destroyed = function destroyed () {
+	this.events.forEach( function (e) { return e.unlisten(); } );
+};
+
+EventDirective__proto__.fire = function fire ( event, args ) {
+		var this$1 = this;
+		if ( args === void 0 ) args = [];
+
+	var context = event instanceof Context && event.refire ? event : this.element.getContext( event );
+
+	if ( this.fn ) {
+		var values = [];
+
+		var models = resolveArgs( this, this.template, this.up, {
+			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 && isArray( result ) && isString( result[0] ) ) {
+			result = fireEvent( this.ractive, result.shift(), context, result );
+		}
+
+		ractive.event = oldEvent;
+
+		return result;
+	}
+
+	else {
+		return fireEvent( this.ractive, this.action, context, args);
+	}
+};
+
+EventDirective__proto__.handleChange = function handleChange () {};
+
+EventDirective__proto__.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__proto__.toString = function toString () { return ''; };
+
+EventDirective__proto__.unbind = function unbind () {
+	removeFromArray( this.element.events, this );
+};
+
+EventDirective__proto__.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) {
+	function Mustache ( options ) {
+		Item.call( this, options );
+
+		if ( options.owner ) { this.parent = options.owner; }
+
+		this.isStatic = !!options.template.s;
+
+		this.model = null;
+		this.dirty = false;
+	}
+
+	if ( Item ) Mustache.__proto__ = Item;
+	var Mustache__proto__ = Mustache.prototype = Object.create( Item && Item.prototype );
+	Mustache__proto__.constructor = Mustache;
+
+	Mustache__proto__.bind = function bind () {
+		// yield mustaches should resolve in container context
+		var start = this.containerFragment || this.up;
+		// try to find a model for this view
+		var model = resolve( 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__proto__.handleChange = function handleChange () {
+		this.bubble();
+	};
+
+	Mustache__proto__.rebind = function rebind ( next, previous, safe ) {
+		next = rebindMatch( this.template, next, previous, this.up );
+		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__proto__.unbind = function unbind () {
+		if ( !this.isStatic ) {
+			this.model && this.model.unregister( this );
+			this.model = undefined;
+		}
+	};
+
+	return Mustache;
+}(Item));
+
+function MustacheContainer ( options ) {
+	Mustache.call( this, options );
+}
+
+var proto$4 = MustacheContainer.prototype = Object.create( ContainerItem.prototype );
+
+assign( proto$4, Mustache.prototype, { constructor: MustacheContainer } );
+
+var Interpolator = (function (Mustache) {
+	function Interpolator () {
+		Mustache.apply(this, arguments);
+	}
+
+	if ( Mustache ) Interpolator.__proto__ = Mustache;
+	var Interpolator__proto__ = Interpolator.prototype = Object.create( Mustache && Mustache.prototype );
+	Interpolator__proto__.constructor = Interpolator;
+
+	Interpolator__proto__.bubble = function bubble () {
+		if ( this.owner ) { this.owner.bubble(); }
+		Mustache.prototype.bubble.call(this);
+	};
+
+	Interpolator__proto__.detach = function detach () {
+		return detachNode( this.node );
+	};
+
+	Interpolator__proto__.firstNode = function firstNode () {
+		return this.node;
+	};
+
+	Interpolator__proto__.getString = function getString () {
+		return this.model ? safeToStringValue( this.model.get() ) : '';
+	};
+
+	Interpolator__proto__.render = function render ( target, occupants ) {
+		if ( inAttributes() ) { return; }
+		var value = this.getString();
+
+		this.rendered = true;
+
+		progressiveText( this, target, occupants, value );
+	};
+
+	Interpolator__proto__.toString = function toString ( escape ) {
+		var string = this.getString();
+		return escape ? escapeHtml( string ) : string;
+	};
+
+	Interpolator__proto__.unrender = function unrender ( shouldDestroy ) {
+		if ( shouldDestroy ) { this.detach(); }
+		this.rendered = false;
+	};
+
+	Interpolator__proto__.update = function update () {
+		if ( this.dirty ) {
+			this.dirty = false;
+			if ( this.rendered ) {
+				this.node.data = this.getString();
+			}
+		}
+	};
+
+	Interpolator__proto__.valueOf = function valueOf () {
+		return this.model ? this.model.get() : undefined;
+	};
+
+	return Interpolator;
+}(Mustache));
+
+var Input = (function (Element) {
+	function Input () {
+		Element.apply(this, arguments);
+	}
+
+	if ( Element ) Input.__proto__ = Element;
+	var Input__proto__ = Input.prototype = Object.create( Element && Element.prototype );
+	Input__proto__.constructor = Input;
+
+	Input__proto__.render = function render ( target, occupants ) {
+		Element.prototype.render.call( this, target, occupants );
+		this.node.defaultValue = this.node.value;
+	};
+	Input__proto__.compare = function compare ( value, attrValue ) {
+		var comparator = this.getAttribute( 'value-comparator' );
+		if ( comparator ) {
+			if ( isFunction( comparator ) ) {
+				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( '^(?:' + 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.sp();
+	},
+
+	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 && ( hasOwn( parser.values, 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.sp();
+
+			if ( parser.matchString( '}' ) ) {
+				return { v: result };
+			}
+
+			var pair;
+			while ( pair = getKeyValuePair( parser ) ) {
+				result[ pair.key ] = pair.value;
+
+				parser.sp();
+
+				if ( parser.matchString( '}' ) ) {
+					return { v: result };
+				}
+
+				if ( !parser.matchString( ',' ) ) {
+					return null;
+				}
+			}
+
+			return null;
+		},
+
+		function getArray ( parser ) {
+			if ( !parser.matchString( '[' ) ) { return null; }
+
+			var result = [];
+
+			parser.sp();
+
+			if ( parser.matchString( ']' ) ) {
+				return { v: result };
+			}
+
+			var valueToken;
+			while ( valueToken = parser.read() ) {
+				result.push( valueToken.v );
+
+				parser.sp();
+
+				if ( parser.matchString( ']' ) ) {
+					return { v: result };
+				}
+
+				if ( !parser.matchString( ',' ) ) {
+					return null;
+				}
+
+				parser.sp();
+			}
+
+			return null;
+		}
+	]
+});
+
+function getKeyValuePair ( parser ) {
+	parser.sp();
+
+	var key = readKey( parser );
+
+	if ( !key ) { return null; }
+
+	var pair = { key: key };
+
+	parser.sp();
+	if ( !parser.matchString( ':' ) ) {
+		return null;
+	}
+	parser.sp();
+
+	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) {
+	function Mapping ( options ) {
+		Item.call( this, options );
+
+		this.name = options.template.n;
+
+		this.owner = options.owner || options.up.owner || options.element || findElement( options.up );
+		this.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.up ) );
+		this.up = this.element.up; // shared
+		this.ractive = this.up.ractive;
+
+		this.element.attributeByName[ this.name ] = this;
+
+		this.value = options.template.f;
+	}
+
+	if ( Item ) Mapping.__proto__ = Item;
+	var Mapping__proto__ = Mapping.prototype = Object.create( Item && Item.prototype );
+	Mapping__proto__.constructor = Mapping;
+
+	Mapping__proto__.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 ( isString( template ) ) {
+			var parsed = parseJSON( template );
+			viewmodel.joinKey( this.name ).set( parsed ? parsed.value : template );
+		}
+
+		else if ( isArray( template ) ) {
+			createMapping( this, true );
+		}
+	};
+
+	Mapping__proto__.render = function render () {};
+
+	Mapping__proto__.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__proto__.unrender = function unrender () {};
+
+	Mapping__proto__.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( item.up, 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 ( !isObjectType( val ) || 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) {
+	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.call( this, options );
+
+		this.select = findElement( this.parent || this.up, false, 'select' );
+	}
+
+	if ( Element ) Option.__proto__ = Element;
+	var Option__proto__ = Option.prototype = Object.create( Element && Element.prototype );
+	Option__proto__.constructor = Option;
+
+	Option__proto__.bind = function bind () {
+		if ( !this.select ) {
+			Element.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.prototype.bind.call(this);
+		this.select.options.push( this );
+	};
+
+	Option__proto__.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.prototype.bubble.call(this);
+	};
+
+	Option__proto__.getAttribute = function getAttribute ( name ) {
+		var attribute = this.attributeByName[ name ];
+		return attribute ? attribute.getValue() : name === 'value' && this.fragment ? this.fragment.valueOf() : undefined;
+	};
+
+	Option__proto__.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' ) && isArray( selectValue ) ) {
+			var i = selectValue.length;
+			while ( i-- ) {
+				if ( this$1.select.compare( selectValue[i], optionValue ) ) {
+					return true;
+				}
+			}
+		}
+	};
+
+	Option__proto__.render = function render ( target, occupants ) {
+		Element.prototype.render.call( this, target, occupants );
+
+		if ( !this.attributeByName.value ) {
+			this.node._ractive.value = this.getAttribute( 'value' );
+		}
+	};
+
+	Option__proto__.unbind = function unbind () {
+		Element.prototype.unbind.call(this);
+
+		if ( this.select ) {
+			removeFromArray( this.select.options, this );
+		}
+	};
+
+	return Option;
+}(Element));
+
+function getPartialTemplate ( ractive, name, up ) {
+	// If the partial in instance or view heirarchy instances, great
+	var partial = getPartialFromRegistry( ractive, name, up || {} );
+	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, up ) {
+	// if there was an instance up-hierarchy, cool
+	var partial = findParentPartial( name, up.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 ( isFunction( partial ) ) {
+		fn = partial;
+		// super partial
+		if ( fn.styleSet ) { return fn; }
+
+		fn = partial.bind( instance );
+		fn.isOwner = hasOwn( instance.partials, 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 hasOwn( ractive.partials, key )
+		? ractive
+		: findConstructor( ractive.constructor, key);
+}
+
+function findConstructor ( constructor, key ) {
+	if ( !constructor ) { return; }
+	return hasOwn( constructor.partials, key )
+		? constructor
+		: findConstructor( constructor.Parent, key );
+}
+
+function findParentPartial( name, parent ) {
+	if ( parent ) {
+		if ( parent.template && parent.template.p && !isArray( parent.template.p ) && hasOwn( parent.template.p, name ) ) {
+			return parent.template.p[name];
+		} else if ( parent.up && parent.up.owner ) {
+			return findParentPartial( name, parent.up.owner );
+		}
+	}
+}
+
+function Partial ( options ) {
+	MustacheContainer.call( this, options );
+
+	var tpl = options.template;
+
+	// yielder is a special form of partial that will later require special handling
+	if ( tpl.t === YIELDER ) {
+		this.yielder = 1;
+	}
+
+	// this is a macro partial, complete with macro constructor
+	else if ( tpl.t === ELEMENT ) {
+		// leaving this as an element will confuse up-template searches
+		this.type = PARTIAL;
+		this.macro = options.macro;
+	}
+}
+
+var proto$5 = Partial.prototype = create( MustacheContainer.prototype );
+
+assign( proto$5, {
+	constructor: Partial,
+
+	bind: function bind () {
+		var template = this.template;
+
+		if ( this.yielder ) {
+			// the container is the instance that owns this node
+			this.container = this.up.ractive;
+			this.component = this.container.component;
+			this.containerFragment = this.up;
+
+			// normal component
+			if ( this.component ) {
+				// yields skip the owning instance and go straight to the surrounding context
+				this.up = this.component.up;
+
+				// {{yield}} is equivalent to {{yield content}}
+				if ( !template.r && !template.x && !template.tx ) { this.refName = 'content'; }
+			}
+
+			// plain-ish instance that may be attached to a parent later
+			else {
+				this.fragment = new Fragment({
+					owner: this,
+					template: []
+				});
+				this.fragment.bind();
+				return;
+			}
+		}
+
+		// this is a macro/super partial
+		if ( this.macro ) {
+			this.fn = this.macro;
+		}
+
+		// this is a plain partial or yielder
+		else {
+			if ( !this.refName ) { this.refName = template.r; }
+
+			// if the refName exists as a partial, this is a plain old partial reference where no model binding will happen
+			if ( this.refName ) {
+				partialFromValue( this, this.refName );
+			}
+
+			// this is a dynamic/inline partial
+			if ( !this.partial && !this.fn ) {
+				MustacheContainer.prototype.bind.call( this );
+				if ( this.model ) { partialFromValue( this, this.model.get() ); }
+			}
+		}
+
+		if ( !this.partial && !this.fn ) {
+			warnOnceIfDebug( ("Could not find template for partial '" + (this.name) + "'") );
+		}
+
+		createFragment$1( this, this.partial || [] );
+
+		// macro/super partial
+		if ( this.fn ) { initMacro( this ); }
+
+		this.fragment.bind();
+	},
+
+	bubble: function bubble () {
+		if ( !this.dirty ) {
+			this.dirty = true;
+
+			if ( this.yielder ) {
+				this.containerFragment.bubble();
+			} else {
+				this.up.bubble();
+			}
+		}
+	},
+
+	findNextNode: function findNextNode () {
+		return ( this.containerFragment || this.up ).findNextNode( this );
+	},
+
+	handleChange: function handleChange () {
+		this.dirtyTemplate = true;
+		this.externalChange = true;
+		this.bubble();
+	},
+
+	refreshAttrs: function refreshAttrs () {
+		var this$1 = this;
+
+		keys( this._attrs ).forEach( function (k) {
+			this$1.handle.attributes[k] = this$1._attrs[k].valueOf();
+		});
+	},
+
+	resetTemplate: function resetTemplate () {
+		var this$1 = this;
+
+		if ( this.fn && this.proxy ) {
+			if ( this.externalChange ) {
+				if ( isFunction( this.proxy.teardown ) ) { this.proxy.teardown(); }
+				this.fn = this.proxy = null;
+			} else {
+				this.partial = this.fnTemplate;
+				return;
+			}
+		}
+
+		this.partial = null;
+
+		if ( this.refName ) {
+			this.partial = getPartialTemplate( this.ractive, this.refName, this.up );
+		}
+
+		if ( !this.partial && this.model ) {
+			partialFromValue( this, this.model.get() );
+		}
+
+		this.unbindAttrs();
+
+		if ( this.fn ) {
+			initMacro( this );
+			if ( isFunction( this.proxy.render ) ) { runloop.scheduleTask( function () { return this$1.proxy.render(); } ); }
+		} else if ( !this.partial ) {
+			warnOnceIfDebug( ("Could not find template for partial '" + (this.name) + "'") );
+		}
+	},
+
+	render: function render ( target, occupants ) {
+		if ( this.fn && this.fn._cssDef && !this.fn._cssDef.applied ) { applyCSS(); }
+
+		this.fragment.render( target, occupants );
+
+		if ( this.proxy && isFunction( this.proxy.render ) ) { this.proxy.render(); }
+	},
+
+	unbind: function unbind () {
+		this.fragment.unbind();
+
+		this.fragment.aliases = null;
+
+		this.unbindAttrs();
+
+		MustacheContainer.prototype.unbind.call( this );
+	},
+
+	unbindAttrs: function unbindAttrs () {
+		var this$1 = this;
+
+		if ( this._attrs ) {
+			keys( this._attrs ).forEach( function (k) {
+				this$1._attrs[k].unbind();
+			});
+		}
+	},
+
+	unrender: function unrender ( shouldDestroy ) {
+		if ( this.proxy && isFunction( this.proxy.teardown ) ) { this.proxy.teardown(); }
+
+		this.fragment.unrender( shouldDestroy );
+	},
+
+	update: function update () {
+		var proxy = this.proxy;
+		this.updating = 1;
+
+		if ( this.dirtyAttrs ) {
+			this.dirtyAttrs = false;
+			this.refreshAttrs();
+			if ( isFunction( proxy.update ) ) { proxy.update( this.handle.attributes ); }
+		}
+
+		if ( this.dirtyTemplate ) {
+			this.dirtyTemplate = false;
+			this.resetTemplate();
+
+			this.fragment.resetTemplate( this.partial || [] );
+		}
+
+		if ( this.dirty ) {
+			this.dirty = false;
+			if ( proxy && isFunction( proxy.invalidate ) ) { proxy.invalidate(); }
+			this.fragment.update();
+		}
+
+		this.externalChange = false;
+		this.updating = 0;
+	}
+});
+
+function createFragment$1 ( self, partial ) {
+	self.partial = partial;
+	contextifyTemplate( self );
+
+	var options = {
+		owner: self,
+		template: self.partial
+	};
+
+	if ( self.yielder ) { options.ractive = self.container.parent; }
+
+	if ( self.fn ) { options.cssIds = self.fn._cssIds; }
+
+	var fragment = self.fragment = new Fragment( options );
+
+	// partials may have aliases that need to be in place before binding
+	if ( self.template.z ) {
+		fragment.aliases = resolveAliases( self.template.z, self.containerFragment || self.up );
+	}
+}
+
+function contextifyTemplate ( self ) {
+	if ( self.template.c ) {
+		self.partial = [{ t: SECTION, n: SECTION_WITH, f: self.partial }];
+		assign( self.partial[0], self.template.c );
+	}
+}
+
+function partialFromValue ( self, value, okToParse ) {
+	var tpl = value;
+
+	if ( isArray( tpl ) ) {
+		self.partial = tpl;
+	} else if ( isObjectType( tpl ) ) {
+		if ( isArray( tpl.t ) ) { self.partial = tpl.t; }
+		else if ( isString( tpl.template ) ) { self.partial = parsePartial( tpl.template, tpl.template, self.ractive ).t; }
+	} else if ( isFunction( tpl ) && tpl.styleSet ) {
+		self.fn = tpl;
+		if ( self.fragment ) { self.fragment.cssIds = tpl._cssIds; }
+	} else if ( tpl != null ) {
+		tpl = getPartialTemplate( self.ractive, '' + tpl, self.containerFragment || self.up );
+		if ( tpl ) {
+			self.name = value;
+			if ( tpl.styleSet ) {
+				self.fn = tpl;
+				if ( self.fragment ) { self.fragment.cssIds = tpl._cssIds; }
+			} else { self.partial = tpl; }
+		} else if ( okToParse ) {
+			self.partial = parsePartial( '' + value, '' + value, self.ractive ).t;
+		} else {
+			self.name = value;
+		}
+	}
+
+	return self.partial;
+}
+
+function setTemplate ( template ) {
+	partialFromValue( this, template, true );
+
+	if ( !this.initing ) {
+		this.dirtyTemplate = true;
+		this.fnTemplate = this.partial;
+
+		if ( this.updating ) {
+			this.bubble();
+			runloop.promise();
+		} else {
+			var promise = runloop.start();
+
+			this.bubble();
+			runloop.end();
+
+			return promise;
+		}
+	}
+}
+
+function aliasLocal ( ref, name ) {
+	var aliases = this.fragment.aliases || ( this.fragment.aliases = {} );
+	if ( !name ) {
+		aliases[ ref ] = this._data;
+	} else {
+		aliases[ name ] = this._data.joinAll( splitKeypath( ref ) );
+	}
+}
+
+var extras = 'extra-attributes';
+
+function initMacro ( self ) {
+	var fn = self.fn;
+	var fragment = self.fragment;
+
+	// defensively copy the template in case it changes
+	var template = self.template = assign( {}, self.template );
+	var handle = self.handle = fragment.getContext({
+		proxy: self,
+		aliasLocal: aliasLocal,
+		name: self.template.e || self.name,
+		attributes: {},
+		setTemplate: setTemplate.bind( self ),
+		template: template
+	});
+
+	if ( !template.p ) { template.p = {}; }
+	template.p = handle.partials = assign( {}, template.p );
+	if ( !hasOwn( template.p, 'content' ) ) { template.p.content = template.f || []; }
+
+	if ( isArray( fn.attributes ) ) {
+		self._attrs = {};
+
+		var invalidate = function () {
+			this.dirty = true;
+			self.dirtyAttrs = true;
+			self.bubble();
+		};
+
+		if ( isArray( template.m ) ) {
+			var attrs = template.m;
+			template.p[ extras ] = template.m = attrs.filter( function (a) { return !~fn.attributes.indexOf( a.n ); } );
+			attrs.filter( function (a) { return ~fn.attributes.indexOf( a.n ); } ).forEach( function (a) {
+				var fragment = new Fragment({
+					template: a.f,
+					owner: self
+				});
+				fragment.bubble = invalidate;
+				fragment.findFirstNode = noop;
+				self._attrs[ a.n ] = fragment;
+			});
+		} else {
+			template.p[ extras ] = [];
+		}
+	} else {
+		template.p[ extras ] = template.m;
+	}
+
+	if ( self._attrs ) {
+		keys( self._attrs ).forEach( function (k) {
+			self._attrs[k].bind();
+		});
+		self.refreshAttrs();
+	}
+
+	self.initing = 1;
+	self.proxy = fn( handle, handle.attributes ) || {};
+	if ( !self.partial ) { self.partial = []; }
+	self.fnTemplate = self.partial;
+	self.initing = 0;
+
+	contextifyTemplate( self );
+	fragment.resetTemplate( self.partial );
+}
+
+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.up;
+
+	// bit of a hack, so reference resolution works without another
+	// layer of indirection
+	this.up = 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;
+};
+var RepeatedFragment__proto__ = RepeatedFragment.prototype;
+
+RepeatedFragment__proto__.bind = function bind ( context ) {
+		var this$1 = this;
+
+	this.context = context;
+	this.bound = true;
+	var value = context.get();
+
+	// {{#each array}}...
+	if ( this.isArray = 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 = keys( value ).map( function ( key, index ) {
+			return this$1.createIteration( key, index );
+		});
+	}
+
+	return this;
+};
+
+RepeatedFragment__proto__.bubble = function bubble ( index ) {
+	if  ( !this.bubbled ) { this.bubbled = []; }
+	this.bubbled.push( index );
+
+	this.owner.bubble();
+};
+
+RepeatedFragment__proto__.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__proto__.destroyed = function destroyed$2 () {
+	this.iterations.forEach( destroyed );
+};
+
+RepeatedFragment__proto__.detach = function detach () {
+	var docFrag = createDocumentFragment();
+	this.iterations.forEach( function (fragment) { return docFrag.appendChild( fragment.detach() ); } );
+	return docFrag;
+};
+
+RepeatedFragment__proto__.find = function find ( selector, options ) {
+	return findMap( this.iterations, function (i) { return i.find( selector, options ); } );
+};
+
+RepeatedFragment__proto__.findAll = function findAll ( selector, options ) {
+	return this.iterations.forEach( function (i) { return i.findAll( selector, options ); } );
+};
+
+RepeatedFragment__proto__.findAllComponents = function findAllComponents ( name, options ) {
+	return this.iterations.forEach( function (i) { return i.findAllComponents( name, options ); } );
+};
+
+RepeatedFragment__proto__.findComponent = function findComponent ( name, options ) {
+	return findMap( this.iterations, function (i) { return i.findComponent( name, options ); } );
+};
+
+RepeatedFragment__proto__.findContext = function findContext () {
+	return this.context;
+};
+
+RepeatedFragment__proto__.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__proto__.firstNode = function firstNode ( skipParent ) {
+	return this.iterations[0] ? this.iterations[0].firstNode( skipParent ) : null;
+};
+
+RepeatedFragment__proto__.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__proto__.render = function render ( 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__proto__.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__proto__.shuffled = function shuffled$1 () {
+	this.iterations.forEach( shuffled );
+};
+
+RepeatedFragment__proto__.toString = function toString ( escape ) {
+	return this.iterations ?
+		this.iterations.map( escape ? toEscapedString : toString$1 ).join( '' ) :
+		'';
+};
+
+RepeatedFragment__proto__.unbind = function unbind$3 () {
+	this.bound = false;
+	this.iterations.forEach( unbind );
+	return this;
+};
+
+RepeatedFragment__proto__.unrender = function unrender$2 ( 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__proto__.update = function update$4 () {
+		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 = 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 ) {
+		var bubbled = this.bubbled;
+		this.bubbled = [];
+		bubbled.forEach( function (i) { return this$1.iterations[i] && this$1.iterations[i].update(); } );
+	} else {
+		this.iterations.forEach( update );
+	}
+
+	// add new iterations
+	var newLength = isArray( value ) ?
+		value.length :
+		isObject( value ) ?
+			keys( value ).length :
+			0;
+
+	var docFrag;
+	var fragment;
+
+	if ( newLength > this.iterations.length ) {
+		docFrag = this.rendered ? createDocumentFragment() : null;
+		i = this.iterations.length;
+
+		if ( 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];
+			}
+
+			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__proto__.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
+	keys( removed ).forEach( function (k) { return removed[k].unbind().unrender( true ); } );
+
+	this.iterations.forEach( update );
+
+	this.pendingNewIndices = null;
+
+	this.shuffled();
+};
+
+RepeatedFragment.prototype.getContext = getContext;
+
+// 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 ||
+	       ( isArray( value ) && value.length === 0 ) ||
+		   ( isObject( value ) && keys( value ).length === 0 );
+}
+
+function getType ( value, hasIndexRef ) {
+	if ( hasIndexRef || isArray( value ) ) { return SECTION_EACH; }
+	if ( isObjectLike( value ) ) { return SECTION_IF_WITH; }
+	if ( value === undefined ) { return null; }
+	return SECTION_IF;
+}
+
+var Section = (function (MustacheContainer) {
+	function Section ( options ) {
+		MustacheContainer.call( this, options );
+
+		this.sectionType = options.template.n || null;
+		this.templateSectionType = this.sectionType;
+		this.subordinate = options.template.l === 1;
+		this.fragment = null;
+	}
+
+	if ( MustacheContainer ) Section.__proto__ = MustacheContainer;
+	var Section__proto__ = Section.prototype = Object.create( MustacheContainer && MustacheContainer.prototype );
+	Section__proto__.constructor = Section;
+
+	Section__proto__.bind = function bind () {
+		MustacheContainer.prototype.bind.call(this);
+
+		if ( this.subordinate ) {
+			this.sibling = this.up.items[ this.up.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__proto__.detach = function detach () {
+		var frag = this.fragment || this.detached;
+		return frag ? frag.detach() : MustacheContainer.prototype.detach.call(this);
+	};
+
+	Section__proto__.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__proto__.rebind = function rebind ( next, previous, safe ) {
+		if ( MustacheContainer.prototype.rebind.call( this, next, previous, safe ) ) {
+			if ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {
+				this.fragment.rebind( next );
+			}
+		}
+	};
+
+	Section__proto__.render = function render ( target, occupants ) {
+		this.rendered = true;
+		if ( this.fragment ) { this.fragment.render( target, occupants ); }
+	};
+
+	Section__proto__.shuffle = function shuffle ( newIndices ) {
+		if ( this.fragment && this.sectionType === SECTION_EACH ) {
+			this.fragment.shuffle( newIndices );
+		}
+	};
+
+	Section__proto__.unbind = function unbind () {
+		MustacheContainer.prototype.unbind.call(this);
+		if ( this.fragment ) { this.fragment.unbind(); }
+	};
+
+	Section__proto__.unrender = function unrender ( shouldDestroy ) {
+		if ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }
+		this.rendered = false;
+	};
+
+	Section__proto__.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;
+				}
+
+				if ( !this.fragment.bound ) { this.fragment.bind( this.model ); }
+				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.promise().then( function () {
+						if ( this$1.detached ) { 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.up.findNextNode( section );
+
+	if ( anchor ) {
+		var docFrag = createDocumentFragment();
+		fragment.render( docFrag );
+
+		anchor.parentNode.insertBefore( docFrag, anchor );
+	} else {
+		fragment.render( section.up.findParentNode() );
+	}
+}
+
+var Select = (function (Element) {
+	function Select ( options ) {
+		Element.call( this, options );
+		this.options = [];
+	}
+
+	if ( Element ) Select.__proto__ = Element;
+	var Select__proto__ = Select.prototype = Object.create( Element && Element.prototype );
+	Select__proto__.constructor = Select;
+
+	Select__proto__.foundNode = function foundNode ( node ) {
+		if ( this.binding ) {
+			var selectedOptions = getSelectedOptions( node );
+
+			if ( selectedOptions.length > 0 ) {
+				this.selectedOptions = selectedOptions;
+			}
+		}
+	};
+
+	Select__proto__.render = function render ( target, occupants ) {
+		Element.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__proto__.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 && 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__proto__.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__proto__.compare = function compare (optionValue, selectValue) {
+		var comparator = this.getAttribute( 'value-comparator' );
+		if ( comparator ) {
+			if ( isFunction( comparator ) ) {
+				return comparator( selectValue, optionValue );
+			}
+			if ( selectValue && optionValue ) {
+				return selectValue[comparator] == optionValue[comparator];
+			}
+		}
+		return selectValue == optionValue;
+	};
+	Select__proto__.update = function update () {
+		var dirty = this.dirty;
+		Element.prototype.update.call(this);
+		if ( dirty ) {
+			this.sync();
+		}
+	};
+
+	return Select;
+}(Element));
+
+var Textarea = (function (Input) {
+	function Textarea( options ) {
+		var template = options.template;
+
+		options.deferContent = true;
+
+		Input.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' },
+					up: this.up
+				} ) );
+			} else {
+				this.fragment = new Fragment({ owner: this, cssIds: null, template: template.f });
+			}
+		}
+	}
+
+	if ( Input ) Textarea.__proto__ = Input;
+	var Textarea__proto__ = Textarea.prototype = Object.create( Input && Input.prototype );
+	Textarea__proto__.constructor = Textarea;
+
+	Textarea__proto__.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.up.bubble(); // default behaviour
+		}
+	};
+
+	return Textarea;
+}(Input));
+
+var Text = (function (Item) {
+	function Text ( options ) {
+		Item.call( this, options );
+		this.type = TEXT;
+	}
+
+	if ( Item ) Text.__proto__ = Item;
+	var Text__proto__ = Text.prototype = Object.create( Item && Item.prototype );
+	Text__proto__.constructor = Text;
+
+	Text__proto__.detach = function detach () {
+		return detachNode( this.node );
+	};
+
+	Text__proto__.firstNode = function firstNode () {
+		return this.node;
+	};
+
+	Text__proto__.render = function render ( target, occupants ) {
+		if ( inAttributes() ) { return; }
+		this.rendered = true;
+
+		progressiveText( this, target, occupants, this.template );
+	};
+
+	Text__proto__.toString = function toString ( escape ) {
+		return escape ? escapeHtml( this.template ) : this.template;
+	};
+
+	Text__proto__.unrender = function unrender ( shouldDestroy ) {
+		if ( this.rendered && shouldDestroy ) { this.detach(); }
+		this.rendered = false;
+	};
+
+	Text__proto__.valueOf = function valueOf () {
+		return this.template;
+	};
+
+	return Text;
+}(Item));
+
+var proto$6 = Text.prototype;
+proto$6.bind = proto$6.unbind = proto$6.update = noop;
+
+var visible;
+var hidden = 'hidden';
+
+if ( doc ) {
+	var prefix$2;
+
+	/* istanbul ignore next */
+	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;
+			}
+		}
+	}
+
+	/* istanbul ignore else */
+	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 ];
+}
+
+/* istanbul ignore next */
+function onHide () {
+	visible = false;
+}
+
+/* istanbul ignore next */
+function onShow () {
+	visible = true;
+}
+
+var prefix;
+
+/* istanbul ignore next */
+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;
+			}
+
+			/* istanbul ignore next */
+			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 vendorPattern = new RegExp( '^(?:' + vendors.join( '|' ) + ')([A-Z])' );
+
+var hyphenate = function ( str ) {
+	/* istanbul ignore next */
+	if ( !str ) { return ''; } // edge case
+
+	/* istanbul ignore next */
+	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 ( isString( options.easing ) ) {
+						easing = t.ractive.easing[ options.easing ];
+
+						if ( !easing ) {
+							warnOnceIfDebug( missingPlugin( options.easing, 'easing' ) );
+							easing = linear$1;
+						}
+					} else if ( isFunction( options.easing ) ) {
+						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.up.owner || findElement( options.up );
+	this.element = this.owner.attributeByName ? this.owner : findElement( options.up );
+	this.ractive = this.owner.ractive;
+	this.template = options.template;
+	this.up = options.up;
+	this.options = options;
+	this.onComplete = [];
+};
+var Transition__proto__ = Transition.prototype;
+
+Transition__proto__.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 ( isString( style ) ) {
+		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 = 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__proto__.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 ( isFunction( this.name ) ) {
+		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__proto__.getParams = function getParams () {
+	if ( this.params ) { return this.params; }
+
+	// get expression args if supplied
+	if ( this.fn ) {
+		var values = resolveArgs( this, this.template, this.up ).map( function (model) {
+			if ( !model ) { return undefined; }
+
+			return model.get();
+		});
+		return this.fn.apply( this.ractive, values );
+	}
+};
+
+Transition__proto__.getStyle = function getStyle ( props ) {
+	var computedStyle = getComputedStyle( this.node );
+
+	if ( isString( props ) ) {
+		return computedStyle[ prefix$1( props ) ];
+	}
+
+	if ( !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__proto__.processParams = function processParams ( params, defaults ) {
+	if ( isNumber( params ) ) {
+		params = { duration: params };
+	}
+
+	else if ( isString( params ) ) {
+		if ( params === 'slow' ) {
+			params = { duration: 600 };
+		} else if ( params === 'fast' ) {
+			params = { duration: 200 };
+		} else {
+			params = { duration: 400 };
+		}
+	} else if ( !params ) {
+		params = {};
+	}
+
+	return assign( {}, defaults, params );
+};
+
+Transition__proto__.registerCompleteHandler = function registerCompleteHandler ( fn ) {
+	addToArray( this.onComplete, fn );
+};
+
+Transition__proto__.setStyle = function setStyle ( style, value ) {
+		var this$1 = this;
+
+	if ( isString( style ) ) {
+		var name = prefix$1(  style );
+		if ( !hasOwn( this.originals, 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 ( hasOwn( style, prop ) ) {
+				this$1.setStyle( prop, style[ prop ] );
+			}
+		}
+	}
+
+	return this;
+};
+
+Transition__proto__.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__proto__.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__proto__.toString = function toString () { return ''; };
+
+Transition__proto__.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__proto__.unregisterCompleteHandler = function unregisterCompleteHandler ( fn ) {
+	removeFromArray( this.onComplete, fn );
+};
+
+var proto$7 = Transition.prototype;
+proto$7.destroyed = proto$7.render = proto$7.unrender = proto$7.update = noop;
+
+function nearestProp ( prop, ractive, rendering ) {
+	var instance = ractive;
+	while ( instance ) {
+		if ( hasOwn( instance, 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 /* istanbul ignore next */ ( 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;
+
+	/* istanbul ignore if */
+	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) {
+	function Triple ( options ) {
+		Mustache.call( this, options );
+	}
+
+	if ( Mustache ) Triple.__proto__ = Mustache;
+	var Triple__proto__ = Triple.prototype = Object.create( Mustache && Mustache.prototype );
+	Triple__proto__.constructor = Triple;
+
+	Triple__proto__.detach = function detach () {
+		var docFrag = createDocumentFragment();
+		if ( this.nodes ) { this.nodes.forEach( function (node) { return docFrag.appendChild( node ); } ); }
+		return docFrag;
+	};
+
+	Triple__proto__.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__proto__.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__proto__.findComponent = function findComponent () {
+		return null;
+	};
+
+	Triple__proto__.firstNode = function firstNode () {
+		return this.rendered && this.nodes[0];
+	};
+
+	Triple__proto__.render = function render ( target, occupants, anchor ) {
+		var this$1 = this;
+
+		if ( !this.nodes ) {
+			var html = this.model ? this.model.get() : '';
+			this.nodes = insertHtml( html, target );
+		}
+
+		var nodes = this.nodes;
+
+		// 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 ) {
+				target.insertBefore( frag, anchor );
+			} else {
+				target.appendChild( frag );
+			}
+		}
+
+		this.rendered = true;
+	};
+
+	Triple__proto__.toString = function toString () {
+		var value = this.model && this.model.get();
+		value = value != null ? '' + value : '';
+
+		return inAttribute() ? decodeCharacterReferences( value ) : value;
+	};
+
+	Triple__proto__.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__proto__.update = function update () {
+		if ( this.rendered && this.dirty ) {
+			this.dirty = false;
+
+			this.unrender();
+			this.render( this.up.findParentNode(), null, this.up.findNextNode( this ) );
+		} 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 ];
+
+		// if not from Ractive.extend or a Promise, it's a function that shold return a constructor
+		if ( Component && !Component.isInstance && !Component.then ) {
+			// function option, execute and store for reset
+			var fn = Component.bind( instance );
+			fn.isOwner = hasOwn( instance.components, name );
+			Component = fn();
+
+			if ( !Component ) {
+				warnIfDebug( noRegistryFunctionReturn, name, 'component', 'component', { ractive: ractive });
+				return;
+			}
+
+			if ( isString( Component ) ) {
+				// allow string lookup
+				Component = getComponentConstructor( ractive, Component );
+			}
+
+			Component._fn = fn;
+			instance.components[ name ] = Component;
+		}
+	}
+
+	return Component;
+}
+
+function asyncProxy ( promise, options ) {
+	var partials = options.template.p || {};
+	var name = options.template.e;
+
+	var opts = assign( {}, options, {
+		template: { t: ELEMENT, e: name },
+		macro: function macro ( handle ) {
+			handle.setTemplate( partials['async-loading'] || [] );
+			promise.then( function (cmp) {
+				options.up.ractive.components[ name ] = cmp;
+				if ( partials['async-loaded'] ) {
+					handle.partials.component = [ options.template ];
+					handle.setTemplate( partials['async-loaded'] );
+				} else {
+					handle.setTemplate( [ options.template ] );
+				}
+			}, function (err) {
+				if ( partials['async-failed'] ) {
+					handle.aliasLocal( 'error', 'error' );
+					handle.set( '@local.error', err );
+					handle.setTemplate( partials['async-failed'] );
+				} else {
+					handle.setTemplate( [] );
+				}
+			});
+		}
+	});
+	return new Partial( opts );
+}
+
+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;
+constructors[ COMMENT ] = Comment;
+
+var specialElements = {
+	doctype: Doctype,
+	form: Form,
+	input: Input,
+	option: Option,
+	select: Select,
+	textarea: Textarea
+};
+
+function createItem ( options ) {
+	if ( isString( options.template ) ) {
+		return new Text( options );
+	}
+
+	var ctor;
+	var name;
+	var type = options.template.t;
+
+	if ( type === ELEMENT ) {
+		name = options.template.e;
+
+		// could be a macro partial
+		ctor = findInstance( 'partials', options.up.ractive, name );
+		if ( ctor ) {
+			ctor = ctor.partials[ name ];
+			if ( ctor.styleSet ) {
+				options.macro = ctor;
+				return new Partial( options );
+			}
+		}
+
+		// could be component or element
+		ctor = getComponentConstructor( options.up.ractive, name );
+		if ( ctor ) {
+			if ( isFunction( ctor.then ) ) {
+				return asyncProxy( ctor, options );
+			} else {
+				return new Component( options, ctor );
+			}
+		}
+
+		ctor = specialElements[ name.toLowerCase() ] || Element;
+		return new ctor( options );
+	}
+
+	var Item;
+
+	// component mappings are a special case of attribute
+	if ( type === ATTRIBUTE ) {
+		var el = options.owner;
+		if ( !el || ( el.type !== ANCHOR && el.type !== COMPONENT && el.type !== ELEMENT ) ) {
+			el = findElement( options.up );
+		}
+		options.element = el;
+
+		Item = el.type === COMPONENT || el.type === ANCHOR ? Mapping : Attribute;
+	} else {
+		Item = constructors[ type ];
+	}
+
+	if ( !Item ) { throw new Error( ("Unrecognised item type " + type) ); }
+
+	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.up;
+	this.parent = this.isRoot ? null : this.owner.up;
+	this.ractive = options.ractive || ( this.isRoot ? options.owner : this.parent.ractive );
+
+	this.componentParent = ( this.isRoot && this.ractive.component ) ? this.ractive.component.up : 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
+	if ( 'cssIds' in options ) {
+		this.cssIds = options.cssIds && options.cssIds.length && options.cssIds;
+	} else {
+		this.cssIds = this.parent ? this.parent.cssIds : null;
+	}
+
+	this.dirty = false;
+	this.dirtyValue = true; // used for attribute values
+
+	this.template = options.template || [];
+	this.createItems();
+};
+var Fragment__proto__ = Fragment.prototype;
+
+Fragment__proto__.bind = function bind$4 ( 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__proto__.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__proto__.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({ up: this$1, template: this$1.template[i], index: i });
+	}
+};
+
+Fragment__proto__.destroyed = function destroyed$3 () {
+	this.items.forEach( destroyed );
+};
+
+Fragment__proto__.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__proto__.find = function find ( selector, options ) {
+	return findMap( this.items, function (i) { return i.find( selector, options ); } );
+};
+
+Fragment__proto__.findAll = function findAll ( selector, options ) {
+	if ( this.items ) {
+		this.items.forEach( function (i) { return i.findAll && i.findAll( selector, options ); } );
+	}
+};
+
+Fragment__proto__.findComponent = function findComponent ( name, options ) {
+	return findMap( this.items, function (i) { return i.findComponent( name, options ); } );
+};
+
+Fragment__proto__.findAllComponents = function findAllComponents ( name, options ) {
+	if ( this.items ) {
+		this.items.forEach( function (i) { return i.findAllComponents && i.findAllComponents( name, options ); } );
+	}
+};
+
+Fragment__proto__.findContext = function findContext () {
+	var base = findParentWithContext( this );
+	if ( !base || !base.context ) { return this.ractive.viewmodel; }
+	else { return base.context; }
+};
+
+Fragment__proto__.findNextNode = function findNextNode ( item ) {
+		var this$1 = this;
+
+	// search for the next node going forward
+	if ( item ) {
+		var it;
+		for ( var i = item.index + 1; i < this.items.length; i++ ) {
+			it = this$1.items[i];
+			if ( !it || !it.firstNode ) { continue; }
+
+			var node = it.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.up.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__proto__.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__proto__.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__proto__.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__proto__.rebind = function rebind ( next ) {
+	this.context = next;
+};
+
+Fragment__proto__.render = function render ( 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__proto__.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__proto__.shuffled = function shuffled$2 () {
+	this.items.forEach( shuffled );
+};
+
+Fragment__proto__.toString = function toString ( escape ) {
+	return this.items.map( escape ? toEscapedString : toString$1 ).join( '' );
+};
+
+Fragment__proto__.unbind = function unbind$4 () {
+	this.context = null;
+	this.items.forEach( unbind );
+	this.bound = false;
+
+	return this;
+};
+
+Fragment__proto__.unrender = function unrender$3 ( shouldDestroy ) {
+	this.items.forEach( shouldDestroy ? unrenderAndDestroy$1 : unrender );
+	this.rendered = false;
+};
+
+Fragment__proto__.update = function update$5 () {
+	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__proto__.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 = {};
+};
+var HookQueue__proto__ = HookQueue.prototype;
+
+HookQueue__proto__.begin = function begin ( ractive ) {
+	this.inProcess[ ractive._guid ] = true;
+};
+
+HookQueue__proto__.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 ) {
+	keys( ractive.viewmodel.computations ).forEach( function (key) {
+		var computation = ractive.viewmodel.computations[ key ];
+
+		if ( hasOwn( ractive.viewmodel.value, key ) ) {
+			computation.set( ractive.viewmodel.value[ key ] );
+		}
+	});
+
+	// init config from Parent and options
+	config.init( ractive.constructor, ractive, userOptions );
+
+	configHook.fire( ractive );
+
+	initHook.begin( ractive );
+
+	var fragment = ractive.fragment = createFragment( ractive, options );
+	if ( fragment ) { fragment.bind( ractive.viewmodel ); }
+
+	initHook.end( ractive );
+
+	// general config done, set up observers
+	subscribe( ractive, userOptions, 'observe' );
+
+	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 = [].concat( ractive.constructor._cssIds || [], options.cssIds || [] );
+
+		return new Fragment({
+			owner: ractive,
+			template: ractive.template,
+			cssIds: cssIds
+		});
+	}
+}
+
+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();
+	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 ( !isObjectType( data ) ) {
+		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();
+
+	// 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 ( 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 ( isArray( item.attributes ) ) {
+				collect( item.attributes, name, true, dest );
+			}
+		}
+	});
+}
+
+var resetPartial = function ( name, partial ) {
+	var collection = [];
+	collect( this.fragment.items, name, false, collection );
+
+	var promise = runloop.start();
+
+	this.partials[ name ] = partial;
+	collection.forEach( handleChange );
+
+	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 = isObjectType( keypath ) ? value : options;
+
+	return set( 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 = isNumber( d ) ? -d : -1;
+	var opts = isObjectType( d ) ? d : options;
+	return add( this, keypath, num, opts );
+}
+
+function Ractive$toggle ( keypath, options ) {
+	if ( !isString( keypath ) ) {
+		throw new TypeError( badArguments );
+	}
+
+	return set( 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 = 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, up: owner.up, name: name, params: params });
+	transition.bind();
+
+	var promise = runloop.start();
+	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();
+
+	// 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();
+
+	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
+};
+
+defineProperty( proto, 'target', {
+	get: function get() { return this.el; }
+});
+
+function isInstance ( object ) {
+	return object && object instanceof this;
+}
+
+function styleGet ( keypath ) {
+	return this._cssModel.joinAll( splitKeypath( keypath ) ).get();
+}
+
+function sharedSet ( keypath, value, options ) {
+	var opts = isObjectType( keypath ) ? value : options;
+	var model = SharedModel$1;
+
+	return set( build( { viewmodel: model }, keypath, value, true ), opts );
+}
+
+function sharedGet ( keypath ) {
+	return SharedModel$1.joinAll( splitKeypath( keypath ) ).get();
+}
+
+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 = isFunction( Target ) && 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 = create( Parent.prototype );
+		proto.constructor = Child;
+
+		Child.prototype = proto;
+	}
+
+	// Static properties
+	defineProperties( Child, {
+		// alias prototype as defaults
+		defaults: { value: proto },
+
+		extend: { value: extend, writable: true, configurable: true },
+		extendWith: { value: extendWith, writable: true, configurable: true },
+		extensions: { value: [] },
+
+		isInstance: { value: isInstance },
+
+		Parent: { value: Parent },
+		Ractive: { value: Ractive },
+
+		styleGet: { value: styleGet.bind( Child ), configurable: true },
+		styleSet: { value: setCSSData.bind( Child ), configurable: true }
+	});
+
+	// extend configuration
+	config.extend( Parent, proto, options, Child );
+
+	// 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 ) );
+
+	Parent.extensions.push( Child );
+
+	// 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 ( isArray( options.attributes ) ) {
+			attrs = { optional: options.attributes, required: [] };
+		} else {
+			attrs = options.attributes;
+		}
+
+		// make sure the requisite keys actually store arrays
+		if ( !isArray( attrs.required ) ) { attrs.required = []; }
+		if ( !isArray( attrs.optional ) ) { attrs.optional = []; }
+
+		Child.attributes = attrs;
+	}
+
+	dataConfigurator.extend( Parent, proto, options, Child );
+
+	if ( options.computed ) {
+		proto.computed = assign( create( Parent.prototype.computed ), options.computed );
+	}
+
+	return Child;
+}
+
+defineProperties( Ractive, {
+	sharedGet: { value: sharedGet },
+	sharedSet: { value: sharedSet },
+	styleGet: { configurable: true, value: styleGet.bind( Ractive ) },
+	styleSet: { configurable: true, value: setCSSData.bind( Ractive ) }
+});
+
+function macro ( fn, opts ) {
+	if ( !isFunction( fn ) ) { throw new Error( "The macro must be a function" ); }
+
+	assign( fn, opts );
+
+	defineProperties( fn, {
+		extensions: { value: [] },
+		_cssIds: { value: [] },
+		cssData: { value: assign( create( this.cssData ), fn.cssData || {} ) },
+
+		styleGet: { value: styleGet.bind( fn ) },
+		styleSet: { value: setCSSData.bind( fn ) }
+	});
+
+	defineProperty( fn, '_cssModel', { value: new CSSModel( fn ) } );
+
+	if ( fn.css ) { initCSS( fn, fn, fn ); }
+
+	this.extensions.push( fn );
+
+	return fn;
+}
+
+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$1 = '';
+	var script = document.currentScript || /* istanbul ignore next */ document.querySelector( 'script[data-ractive-options]' );
+
+	if ( script ) { opts$1 = script.getAttribute( 'data-ractive-options' ) || ''; }
+
+	/* istanbul ignore next */
+	if ( ~opts$1.indexOf( 'ForceGlobal' ) ) { win.Ractive = Ractive; }
+} else if ( win ) {
+	warn( "Ractive already appears to be loaded while loading 0.9.9." );
+}
+
+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
+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 },
+	evalObjectString: { value: parseJSON },
+	findPlugin:       { value: findPlugin },
+	getContext:       { value: getContext$2 },
+	getCSS:           { value: getCSS },
+	getNodeInfo:      { value: getNodeInfo$1 },
+	isInstance:       { value: isInstance },
+	joinKeys:         { value: joinKeys },
+	macro:            { value: macro },
+	normaliseKeypath: { value: normalise },
+	parse:            { value: parse },
+	splitKeypath:     { value: splitKeypath$1 },
+	// sharedSet and styleSet are in _extend because circular refs
+	unescapeKey:      { value: unescapeKey },
+
+	// support
+	enhance:          { writable: true, value: false },
+	svg:              { value: svg },
+
+	// version
+	VERSION:          { value: '0.9.9' },
+
+	// plugins
+	adaptors:         { writable: true, value: {} },
+	components:       { writable: true, value: {} },
+	decorators:       { writable: true, value: {} },
+	easing:           { writable: true, value: easing },
+	events:           { writable: true, value: {} },
+	extensions:       { value: [] },
+	interpolators:    { writable: true, value: interpolators },
+	partials:         { writable: true, value: {} },
+	transitions:      { writable: true, value: {} },
+
+	// CSS variables
+	cssData:          { configurable: true, value: {} },
+
+	// access to @shared without an instance
+	sharedData:       { value: data },
+
+	// for getting the source Ractive lib from a constructor
+	Ractive:          { value: Ractive },
+
+	// to allow extending contexts
+	Context:          { value: extern.Context.prototype }
+});
+
+defineProperty( Ractive, '_cssModel', { configurable: true, value: new CSSModel( Ractive ) } );
+
+return Ractive;
+
+})));
+//# sourceMappingURL=ractive.js.map
+</script>
+    <script>!function(){return function t(e,r,n){function i(s,o){if(!r[s]){if(!e[s]){var h="function"==typeof require&&require;if(!o&&h)return h(s,!0);if(a)return a(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var u=r[s]={exports:{}};e[s][0].call(u.exports,function(t){return i(e[s][1][t]||t)},u,u.exports,t,e,r,n)}return r[s].exports}for(var a="function"==typeof require&&require,s=0;s<n.length;s++)i(n[s]);return i}}()({1:[function(t,e,r){"use strict";r.byteLength=function(t){var e=f(t),r=e[0],n=e[1];return 3*(r+n)/4-n},r.toByteArray=function(t){for(var e,r=f(t),n=r[0],s=r[1],o=new a(function(t,e,r){return 3*(e+r)/4-r}(0,n,s)),h=0,u=s>0?n-4:n,l=0;l<u;l+=4)e=i[t.charCodeAt(l)]<<18|i[t.charCodeAt(l+1)]<<12|i[t.charCodeAt(l+2)]<<6|i[t.charCodeAt(l+3)],o[h++]=e>>16&255,o[h++]=e>>8&255,o[h++]=255&e;2===s&&(e=i[t.charCodeAt(l)]<<2|i[t.charCodeAt(l+1)]>>4,o[h++]=255&e);1===s&&(e=i[t.charCodeAt(l)]<<10|i[t.charCodeAt(l+1)]<<4|i[t.charCodeAt(l+2)]>>2,o[h++]=e>>8&255,o[h++]=255&e);return o},r.fromByteArray=function(t){for(var e,r=t.length,i=r%3,a=[],s=0,o=r-i;s<o;s+=16383)a.push(u(t,s,s+16383>o?o:s+16383));1===i?(e=t[r-1],a.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],a.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return a.join("")};for(var n=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,h=s.length;o<h;++o)n[o]=s[o],i[s.charCodeAt(o)]=o;function f(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t,e,r){for(var i,a,s=[],o=e;o<r;o+=3)i=(t[o]<<16&16711680)+(t[o+1]<<8&65280)+(255&t[o+2]),s.push(n[(a=i)>>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],2:[function(t,e,r){"use strict";var n=t("base64-js"),i=t("ieee754");r.Buffer=o,r.SlowBuffer=function(t){+t!=t&&(t=0);return o.alloc(+t)},r.INSPECT_MAX_BYTES=50;var a=2147483647;function s(t){if(t>a)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return e.__proto__=o.prototype,e}function o(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return u(t)}return h(t,e,r)}function h(t,e,r){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!o.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var r=0|d(t,e),n=s(r),i=n.write(t,e);i!==r&&(n=n.slice(0,i));return n}(t,e);if(ArrayBuffer.isView(t))return l(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(Z(t,ArrayBuffer)||t&&Z(t.buffer,ArrayBuffer))return function(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('"length" is outside of buffer bounds');var n;n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r);return n.__proto__=o.prototype,n}(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return o.from(n,e,r);var i=function(t){if(o.isBuffer(t)){var e=0|c(t.length),r=s(e);return 0===r.length?r:(t.copy(r,0,0,e),r)}if(void 0!==t.length)return"number"!=typeof t.length||F(t.length)?s(0):l(t);if("Buffer"===t.type&&Array.isArray(t.data))return l(t.data)}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return o.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function f(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function u(t){return f(t),s(t<0?0:0|c(t))}function l(t){for(var e=t.length<0?0:0|c(t.length),r=s(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function c(t){if(t>=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|t}function d(t,e){if(o.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||Z(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return M(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return N(t).length;default:if(i)return n?-1:M(t).length;e=(""+e).toLowerCase(),i=!0}}function p(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function _(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),F(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=o.from(e,n)),o.isBuffer(e))return 0===e.length?-1:g(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):g(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function g(t,e,r,n,i){var a,s=1,o=t.length,h=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,o/=2,h/=2,r/=2}function f(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var u=-1;for(a=r;a<o;a++)if(f(t,a)===f(e,-1===u?0:a-u)){if(-1===u&&(u=a),a-u+1===h)return u*s}else-1!==u&&(a-=a-u),u=-1}else for(r+h>o&&(r=o-h),a=r;a>=0;a--){for(var l=!0,c=0;c<h;c++)if(f(t,a+c)!==f(e,c)){l=!1;break}if(l)return a}return-1}function w(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a=e.length;n>a/2&&(n=a/2);for(var s=0;s<n;++s){var o=parseInt(e.substr(2*s,2),16);if(F(o))return s;t[r+s]=o}return s}function b(t,e,r,n){return P(M(e,t.length-r),t,r,n)}function v(t,e,r,n){return P(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function m(t,e,r,n){return v(t,e,r,n)}function y(t,e,r,n){return P(N(e),t,r,n)}function k(t,e,r,n){return P(function(t,e){for(var r,n,i,a=[],s=0;s<t.length&&!((e-=2)<0);++s)r=t.charCodeAt(s),n=r>>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function E(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function x(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var a,s,o,h,f=t[i],u=null,l=f>239?4:f>223?3:f>191?2:1;if(i+l<=r)switch(l){case 1:f<128&&(u=f);break;case 2:128==(192&(a=t[i+1]))&&(h=(31&f)<<6|63&a)>127&&(u=h);break;case 3:a=t[i+1],s=t[i+2],128==(192&a)&&128==(192&s)&&(h=(15&f)<<12|(63&a)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:a=t[i+1],s=t[i+2],o=t[i+3],128==(192&a)&&128==(192&s)&&128==(192&o)&&(h=(15&f)<<18|(63&a)<<12|(63&s)<<6|63&o)>65535&&h<1114112&&(u=h)}null===u?(u=65533,l=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=l}return function(t){var e=t.length;if(e<=A)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=A));return r}(n)}r.kMaxLength=a,o.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}(),o.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(o.prototype,"parent",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,"offset",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),o.poolSize=8192,o.from=function(t,e,r){return h(t,e,r)},o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array,o.alloc=function(t,e,r){return function(t,e,r){return f(t),t<=0?s(t):void 0!==e?"string"==typeof r?s(t).fill(e,r):s(t).fill(e):s(t)}(t,e,r)},o.allocUnsafe=function(t){return u(t)},o.allocUnsafeSlow=function(t){return u(t)},o.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==o.prototype},o.compare=function(t,e){if(Z(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),Z(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.isBuffer(t)||!o.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},o.isEncoding=function(t){switch(String(t).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!0;default:return!1}},o.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return o.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=o.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var a=t[r];if(Z(a,Uint8Array)&&(a=o.from(a)),!o.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(n,i),i+=a.length}return n},o.byteLength=d,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)p(this,e,e+1);return this},o.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)p(this,e,e+3),p(this,e+1,e+2);return this},o.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)p(this,e,e+7),p(this,e+1,e+6),p(this,e+2,e+5),p(this,e+3,e+4);return this},o.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?x(this,0,t):function(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return U(this,e,r);case"utf8":case"utf-8":return x(this,e,r);case"ascii":return B(this,e,r);case"latin1":case"binary":return z(this,e,r);case"base64":return E(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},o.prototype.toLocaleString=o.prototype.toString,o.prototype.equals=function(t){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===o.compare(this,t)},o.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return t=this.toString("hex",0,e).replace(/(.{2})/g,"$1 ").trim(),this.length>e&&(t+=" ... "),"<Buffer "+t+">"},o.prototype.compare=function(t,e,r,n,i){if(Z(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),!o.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var a=i-n,s=r-e,h=Math.min(a,s),f=this.slice(n,i),u=t.slice(e,r),l=0;l<h;++l)if(f[l]!==u[l]){a=f[l],s=u[l];break}return a<s?-1:s<a?1:0},o.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},o.prototype.indexOf=function(t,e,r){return _(this,t,e,r,!0)},o.prototype.lastIndexOf=function(t,e,r){return _(this,t,e,r,!1)},o.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return w(this,t,e,r);case"utf8":case"utf-8":return b(this,t,e,r);case"ascii":return v(this,t,e,r);case"latin1":case"binary":return m(this,t,e,r);case"base64":return y(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,t,e,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function B(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function z(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function U(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i="",a=e;a<r;++a)i+=O(t[a]);return i}function I(t,e,r){for(var n=t.slice(e,r),i="",a=0;a<n.length;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}function C(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function S(t,e,r,n,i,a){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function T(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function L(t,e,r,n,a){return e=+e,r>>>=0,a||T(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function D(t,e,r,n,a){return e=+e,r>>>=0,a||T(t,0,r,8),i.write(t,e,r,n,52,8),r+8}o.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return n.__proto__=o.prototype,n},o.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n},o.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},o.prototype.readUInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),this[t]},o.prototype.readUInt16LE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUInt16BE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},o.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},o.prototype.readInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){t>>>=0,e||C(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(t,e){t>>>=0,e||C(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readFloatLE=function(t,e){return t>>>=0,e||C(t,4,this.length),i.read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return t>>>=0,e||C(t,4,this.length),i.read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return t>>>=0,e||C(t,8,this.length),i.read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return t>>>=0,e||C(t,8,this.length),i.read(this,t,!1,52,8)},o.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||S(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a<r&&(i*=256);)this[e+a]=t/i&255;return e+r},o.prototype.writeUIntBE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||S(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},o.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,1,255,0),this[e]=255&t,e+1},o.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},o.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);S(this,t,e,r,i-1,-i)}var a=0,s=1,o=0;for(this[e]=255&t;++a<r&&(s*=256);)t<0&&0===o&&0!==this[e+a-1]&&(o=1),this[e+a]=(t/s>>0)-o&255;return e+r},o.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);S(this,t,e,r,i-1,-i)}var a=r-1,s=1,o=0;for(this[e+a]=255&t;--a>=0&&(s*=256);)t<0&&0===o&&0!==this[e+a+1]&&(o=1),this[e+a]=(t/s>>0)-o&255;return e+r},o.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},o.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeFloatLE=function(t,e,r){return L(this,t,e,!0,r)},o.prototype.writeFloatBE=function(t,e,r){return L(this,t,e,!1,r)},o.prototype.writeDoubleLE=function(t,e,r){return D(this,t,e,!0,r)},o.prototype.writeDoubleBE=function(t,e,r){return D(this,t,e,!1,r)},o.prototype.copy=function(t,e,r,n){if(!o.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i=n-r;if(this===t&&"function"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(e,r,n);else if(this===t&&r<e&&e<n)for(var a=i-1;a>=0;--a)t[a+e]=this[a+r];else Uint8Array.prototype.set.call(t,this.subarray(r,n),e);return i},o.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!o.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var i=t.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(t=i)}}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;var a;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(a=e;a<r;++a)this[a]=t;else{var s=o.isBuffer(t)?t:o.from(t,n),h=s.length;if(0===h)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(a=0;a<r-e;++a)this[a+e]=s[a%h]}return this};var R=/[^+/0-9A-Za-z-_]/g;function O(t){return t<16?"0"+t.toString(16):t.toString(16)}function M(t,e){var r;e=e||1/0;for(var n=t.length,i=null,a=[],s=0;s<n;++s){if((r=t.charCodeAt(s))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function N(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(R,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function P(t,e,r,n){for(var i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function Z(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function F(t){return t!=t}},{"base64-js":1,ieee754:4}],3:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n,i=(n=t("iobuffer"))&&"object"==typeof n&&"default"in n?n.default:n,a=t("pako");const s=[137,80,78,71,13,10,26,10],o=[];for(let t=0;t<256;t++){var h=t;for(let t=0;t<8;t++)1&h?h=3988292384^h>>>1:h>>>=1;o[t]=h}const f=4294967295;function u(t,e){return(function(t,e,r){for(var n=t,i=0;i<r;i++)n=o[255&(n^e[i])]^n>>>8;return n}(f,t,e)^f)>>>0}const l=new Uint8Array(0),c="\0",d=new Uint16Array([255]),p=255===new Uint8Array(d.buffer)[0];class _ extends i{constructor(t,e){super(t);const{checkCrc:r=!1}=e;this._checkCrc=r,this._inflator=new a.Inflate,this._png=null,this._end=!1,this.setBigEndian()}decode(){for(this._png={text:{}},this.decodeSignature();!this._end;)this.decodeChunk();return this.decodeImage(),this._png}decodeSignature(){for(var t=0;t<s.length;t++)if(this.readUint8()!==s[t])throw new Error(`wrong PNG signature. Byte at ${t} should be ${s[t]}.`)}decodeChunk(){const t=this.readUint32(),e=this.readChars(4),r=this.offset;switch(e){case"IHDR":this.decodeIHDR();break;case"PLTE":this.decodePLTE(t);break;case"IDAT":this.decodeIDAT(t);break;case"IEND":this._end=!0;break;case"tEXt":this.decodetEXt(t);break;case"pHYs":this.decodepHYs();break;default:this.skip(t)}if(this.offset-r!==t)throw new Error(`Length mismatch while decoding chunk ${e}`);if(this._checkCrc){const r=this.readUint32(),n=t+4,i=u(new Uint8Array(this.buffer,this.byteOffset+this.offset-n-4,n),n);if(i!==r)throw new Error(`CRC mismatch for chunk ${e}. Expected ${r}, found ${i}`)}else this.skip(4)}decodeIHDR(){var t=this._png;if(t.width=this.readUint32(),t.height=this.readUint32(),t.bitDepth=this.readUint8(),t.colourType=this.readUint8(),t.compressionMethod=this.readUint8(),t.filterMethod=this.readUint8(),t.interlaceMethod=this.readUint8(),0!==this._png.compressionMethod)throw new Error("Unsupported compression method: "+t.compressionMethod)}decodePLTE(t){if(t%3!=0)throw new RangeError("PLTE field length must be a multiple of 3. Got "+t);var e=t/3;this._hasPalette=!0;for(var r=this._palette=new Array(e),n=0;n<e;n++)r[n]=[this.readUint8(),this.readUint8(),this.readUint8()]}decodeIDAT(t){this._inflator.push(new Uint8Array(this.buffer,this.offset+this.byteOffset,t),!1),this.skip(t)}decodetEXt(t){for(var e,r="";(e=this.readChar())!==c;)r+=e;this._png.text[r]=this.readChars(t-r.length-1)}decodepHYs(){const t=this.readUint32(),e=this.readUint32(),r=this.readByte();this._png.resolution=[t,e],this._png.unitSpecifier=r}decodeImage(){if(this._inflator.push(l,!0),this._inflator.err)throw new Error("Error while decompressing the data: "+this._inflator.err);var t=this._inflator.result;if(this._inflator=null,0!==this._png.filterMethod)throw new Error("Filter method "+this._png.filterMethod+" not supported");if(0!==this._png.interlaceMethod)throw new Error("Interlace method "+this._png.interlaceMethod+" not supported");this.decodeInterlaceNull(t)}decodeInterlaceNull(t){var e;switch(this._png.colourType){case 0:e=1;break;case 2:e=3;break;case 3:if(!this._hasPalette)throw new Error("Missing palette");e=1;break;case 4:e=2;break;case 6:e=4;break;default:throw new Error("Unknown colour type: "+this._png.colourType)}const r=this._png.height,n=e*this._png.bitDepth/8,i=this._png.width*n,a=new Uint8Array(this._png.height*i);for(var s,o,h,f=l,u=0,c=0;c<r;c++){switch(s=t.subarray(u+1,u+1+i),o=a.subarray(c*i,(c+1)*i),t[u]){case 0:g(s,o,i);break;case 1:w(s,o,i,n);break;case 2:b(s,o,f,i);break;case 3:v(s,o,f,i,n);break;case 4:m(s,o,f,i,n);break;default:throw new Error("Unsupported filter: "+t[u])}f=o,u+=i+1}if(this._hasPalette&&(this._png.palette=this._palette),16===this._png.bitDepth){const t=new Uint16Array(a.buffer);if(p)for(var d=0;d<t.length;d++)t[d]=(255&(h=t[d]))<<8|h>>8&255;this._png.data=t}else this._png.data=a}}function g(t,e,r){for(var n=0;n<r;n++)e[n]=t[n]}function w(t,e,r,n){for(var i=0;i<n;i++)e[i]=t[i];for(;i<r;i++)e[i]=t[i]+e[i-n]&255}function b(t,e,r,n){var i=0;if(0===r.length)for(;i<n;i++)e[i]=t[i];else for(;i<n;i++)e[i]=t[i]+r[i]&255}function v(t,e,r,n,i){var a=0;if(0===r.length){for(;a<i;a++)e[a]=t[a];for(;a<n;a++)e[a]=t[a]+(e[a-i]>>1)&255}else{for(;a<i;a++)e[a]=t[a]+(r[a]>>1)&255;for(;a<n;a++)e[a]=t[a]+(e[a-i]+r[a]>>1)&255}}function m(t,e,r,n,i){var a=0;if(0===r.length){for(;a<i;a++)e[a]=t[a];for(;a<n;a++)e[a]=t[a]+e[a-i]&255}else{for(;a<i;a++)e[a]=t[a]+r[a]&255;for(;a<n;a++)e[a]=t[a]+y(e[a-i],r[a],r[a-i])&255}}function y(t,e,r){var n=t+e-r,i=Math.abs(n-t),a=Math.abs(n-e),s=Math.abs(n-r);return i<=a&&i<=s?t:a<=s?e:r}const k={level:3};class E extends i{constructor(t,e){super(),this._checkData(t),this._zlibOptions=Object.assign({},k,e.zlib),this.setBigEndian()}encode(){return this.encodeSignature(),this.encodeIHDR(),this.encodeData(),this.encodeIEND(),this.toArray()}encodeSignature(){this.writeBytes(s)}encodeIHDR(){this.writeUint32(13),this.writeChars("IHDR"),this.writeUint32(this._png.width),this.writeUint32(this._png.height),this.writeByte(this._png.bitDepth),this.writeByte(this._png.colourType),this.writeByte(0),this.writeByte(0),this.writeByte(0),this.writeCrc(17)}encodeIEND(){this.writeUint32(0),this.writeChars("IEND"),this.writeCrc(4)}encodeIDAT(t){this.writeUint32(t.length),this.writeChars("IDAT"),this.writeBytes(t),this.writeCrc(t.length+4)}encodeData(){const{width:t,height:e,channels:r,bitDepth:n,data:s}=this._png,o=r*t,h=(new i).setBigEndian();for(var f=0,u=0;u<e;u++)if(h.writeByte(0),8===n)f=A(s,h,o,f);else{if(16!==n)throw new Error("unreachable");f=B(s,h,o,f)}const l=h.getBuffer(),c=a.deflate(l,this._zlibOptions);this.encodeIDAT(c)}_checkData(t){this._png={width:x(t.width,"width"),height:x(t.height,"height"),data:t.data};const{colourType:e,channels:r,bitDepth:n}=function(t){const{components:e=3,alpha:r=!0,bitDepth:n=8}=t;if(3!==e&&1!==e)throw new RangeError(`unsupported number of components: ${e}`);if(8!==n&&16!==n)throw new RangeError(`unsupported bit depth: ${n}`);const i=e+Number(r),a={channels:i,bitDepth:n};switch(i){case 4:a.colourType=6;break;case 3:a.colourType=2;break;case 1:a.colourType=0;break;case 2:a.colourType=4;break;default:throw new Error(`unsupported number of channels: ${i}`)}return a}(t);this._png.colourType=e,this._png.channels=r,this._png.bitDepth=n;const i=this._png.width*this._png.height*r;if(this._png.data.length!==i)throw new RangeError(`wrong data size. Found ${this._png.data.length}, expected ${i}`)}writeCrc(t){this.writeUint32(u(new Uint8Array(this.buffer,this.byteOffset+this.offset-t,t),t))}}function x(t,e){if(Number.isInteger(t)&&t>0)return t;throw new TypeError(`${e} must be a positive integer`)}function A(t,e,r,n){for(var i=0;i<r;i++)e.writeByte(t[n++]);return n}function B(t,e,r,n){for(var i=0;i<r;i++)e.writeUint16(t[n++]);return n}r.decode=function(t,e={}){return new _(t,e).decode()},r.encode=function(t,e={}){return new E(t,e).encode()}},{iobuffer:5,pako:9}],4:[function(t,e,r){r.read=function(t,e,r,n,i){var a,s,o=8*i-n-1,h=(1<<o)-1,f=h>>1,u=-7,l=r?i-1:0,c=r?-1:1,d=t[e+l];for(l+=c,a=d&(1<<-u)-1,d>>=-u,u+=o;u>0;a=256*a+t[e+l],l+=c,u-=8);for(s=a&(1<<-u)-1,a>>=-u,u+=n;u>0;s=256*s+t[e+l],l+=c,u-=8);if(0===a)a=1-f;else{if(a===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,n),a-=f}return(d?-1:1)*s*Math.pow(2,a-n)},r.write=function(t,e,r,n,i,a){var s,o,h,f=8*a-i-1,u=(1<<f)-1,l=u>>1,c=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:a-1,p=n?1:-1,_=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+l>=1?c/h:c*Math.pow(2,1-l))*h>=2&&(s++,h/=2),s+l>=u?(o=0,s=u):s+l>=1?(o=(e*h-1)*Math.pow(2,i),s+=l):(o=e*Math.pow(2,l-1)*Math.pow(2,i),s=0));i>=8;t[r+d]=255&o,d+=p,o/=256,i-=8);for(s=s<<i|o,f+=i;f>0;t[r+d]=255&s,d+=p,s/=256,f-=8);t[r+d-p]|=128*_}},{}],5:[function(t,e,r){(function(r){"use strict";const n=t("utf8"),i=8192,a=[];e.exports=class{constructor(t,e){e=e||{};var r=!1;void 0===t&&(t=i),"number"==typeof t?t=new ArrayBuffer(t):(r=!0,this._lastWrittenByte=t.byteLength);const n=e.offset?e.offset>>>0:0;let a=t.byteLength-n,s=n;t.buffer&&(t.byteLength!==t.buffer.byteLength&&(s=t.byteOffset+n),t=t.buffer),this._lastWrittenByte=r?a:0,this.buffer=t,this.length=a,this.byteLength=a,this.byteOffset=s,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,s,a),this._mark=0,this._marks=[]}available(t){return void 0===t&&(t=1),this.offset+t<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(t){return void 0===t&&(t=1),this.offset+=t,this}seek(t){return this.offset=t,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){const t=this._marks.pop();if(void 0===t)throw new Error("Mark stack empty");return this.seek(t),this}rewind(){return this.offset=0,this}ensureAvailable(t){if(void 0===t&&(t=1),!this.available(t)){const e=2*(this.offset+t),r=new Uint8Array(e);r.set(new Uint8Array(this.buffer)),this.buffer=r.buffer,this.length=this.byteLength=e,this._data=new DataView(this.buffer)}return this}readBoolean(){return 0!==this.readUint8()}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(t){void 0===t&&(t=1);for(var e=new Uint8Array(t),r=0;r<t;r++)e[r]=this.readByte();return e}readInt16(){var t=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,t}readUint16(){var t=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,t}readInt32(){var t=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,t}readUint32(){var t=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat32(){var t=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat64(){var t=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,t}readChar(){return String.fromCharCode(this.readInt8())}readChars(t){void 0===t&&(t=1),a.length=t;for(var e=0;e<t;e++)a[e]=this.readChar();return a.join("")}readUtf8(t){void 0===t&&(t=1);const e=this.readChars(t);return n.decode(e)}writeBoolean(t){return this.writeUint8(t?255:0),this}writeInt8(t){return this.ensureAvailable(1),this._data.setInt8(this.offset++,t),this._updateLastWrittenByte(),this}writeUint8(t){return this.ensureAvailable(1),this._data.setUint8(this.offset++,t),this._updateLastWrittenByte(),this}writeByte(t){return this.writeUint8(t)}writeBytes(t){this.ensureAvailable(t.length);for(var e=0;e<t.length;e++)this._data.setUint8(this.offset++,t[e]);return this._updateLastWrittenByte(),this}writeInt16(t){return this.ensureAvailable(2),this._data.setInt16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(t){return this.ensureAvailable(2),this._data.setUint16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(t){return this.ensureAvailable(4),this._data.setInt32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(t){return this.ensureAvailable(4),this._data.setUint32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(t){return this.ensureAvailable(4),this._data.setFloat32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(t){return this.ensureAvailable(8),this._data.setFloat64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(t){return this.writeUint8(t.charCodeAt(0))}writeChars(t){for(var e=0;e<t.length;e++)this.writeUint8(t.charCodeAt(e));return this}writeUtf8(t){const e=n.encode(t);return this.writeChars(e)}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this._lastWrittenByte)}getBuffer(){return void 0!==r?r.from(this.toArray()):this.toArray()}_updateLastWrittenByte(){this.offset>this._lastWrittenByte&&(this._lastWrittenByte=this.offset)}}}).call(this,t("buffer").Buffer)},{buffer:2,utf8:25}],6:[function(t,e,r){var n=t("./lib/encoder"),i=t("./lib/decoder");e.exports={encode:n,decode:i}},{"./lib/decoder":7,"./lib/encoder":8}],7:[function(t,e,r){(function(t){var r=function(){"use strict";var t=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),e=4017,r=799,n=3406,i=2276,a=1567,s=3784,o=5793,h=2896;function f(){}function u(t,e){for(var r,n,i=0,a=[],s=16;s>0&&!t[s-1];)s--;a.push({children:[],index:0});var o,h=a[0];for(r=0;r<s;r++){for(n=0;n<t[r];n++){for((h=a.pop()).children[h.index]=e[i];h.index>0;)h=a.pop();for(h.index++,a.push(h);a.length<=r;)a.push(o={children:[],index:0}),h.children[h.index]=o.children,h=o;i++}r+1<s&&(a.push(o={children:[],index:0}),h.children[h.index]=o.children,h=o)}return a[0].children}function l(e,r,n,i,a,s,o,h,f){n.precision,n.samplesPerLine,n.scanLines;var u=n.mcusPerLine,l=n.progressive,c=(n.maxH,n.maxV,r),d=0,p=0;function _(){if(p>0)return d>>--p&1;if(255==(d=e[r++])){var t=e[r++];if(t)throw new Error("unexpected marker: "+(d<<8|t).toString(16))}return p=7,d>>>7}function g(t){for(var e,r=t;null!==(e=_());){if("number"==typeof(r=r[e]))return r;if("object"!=typeof r)throw new Error("invalid huffman sequence")}return null}function w(t){for(var e=0;t>0;){var r=_();if(null===r)return;e=e<<1|r,t--}return e}function b(t){var e=w(t);return e>=1<<t-1?e:e+(-1<<t)+1}var v=0;var m,y=0;function k(t,e,r,n,i){var a=r%u,s=(r/u|0)*t.v+n,o=a*t.h+i;e(t,t.blocks[s][o])}function E(t,e,r){var n=r/t.blocksPerLine|0,i=r%t.blocksPerLine;e(t,t.blocks[n][i])}var x,A,B,z,U,I,C=i.length;I=l?0===s?0===h?function(t,e){var r=g(t.huffmanTableDC),n=0===r?0:b(r)<<f;e[0]=t.pred+=n}:function(t,e){e[0]|=_()<<f}:0===h?function(e,r){if(v>0)v--;else for(var n=s,i=o;n<=i;){var a=g(e.huffmanTableAC),h=15&a,u=a>>4;if(0!==h)r[t[n+=u]]=b(h)*(1<<f),n++;else{if(u<15){v=w(u)+(1<<u)-1;break}n+=16}}}:function(e,r){for(var n=s,i=o,a=0;n<=i;){var h=t[n],u=r[h]<0?-1:1;switch(y){case 0:var l=g(e.huffmanTableAC),c=15&l;if(a=l>>4,0===c)a<15?(v=w(a)+(1<<a),y=4):(a=16,y=1);else{if(1!==c)throw new Error("invalid ACn encoding");m=b(c),y=a?2:3}continue;case 1:case 2:r[h]?r[h]+=(_()<<f)*u:0==--a&&(y=2==y?3:0);break;case 3:r[h]?r[h]+=(_()<<f)*u:(r[h]=m<<f,y=0);break;case 4:r[h]&&(r[h]+=(_()<<f)*u)}n++}4===y&&0==--v&&(y=0)}:function(e,r){var n=g(e.huffmanTableDC),i=0===n?0:b(n);r[0]=e.pred+=i;for(var a=1;a<64;){var s=g(e.huffmanTableAC),o=15&s,h=s>>4;if(0!==o)r[t[a+=h]]=b(o),a++;else{if(h<15)break;a+=16}}};var S,T,L,D,R=0;for(T=1==C?i[0].blocksPerLine*i[0].blocksPerColumn:u*n.mcusPerColumn,a||(a=T);R<T;){for(A=0;A<C;A++)i[A].pred=0;if(v=0,1==C)for(x=i[0],U=0;U<a;U++)E(x,I,R),R++;else for(U=0;U<a;U++){for(A=0;A<C;A++)for(L=(x=i[A]).h,D=x.v,B=0;B<D;B++)for(z=0;z<L;z++)k(x,I,R,B,z);if(++R===T)break}if(p=0,(S=e[r]<<8|e[r+1])<65280)throw new Error("marker was not found");if(!(S>=65488&&S<=65495))break;r+=2}return r-c}function c(t,f){var u,l,c=[],d=f.blocksPerLine,p=f.blocksPerColumn,_=d<<3,g=new Int32Array(64),w=new Uint8Array(64);function b(t,u,l){var c,d,p,_,g,w,b,v,m,y,k=f.quantizationTable,E=l;for(y=0;y<64;y++)E[y]=t[y]*k[y];for(y=0;y<8;++y){var x=8*y;0!=E[1+x]||0!=E[2+x]||0!=E[3+x]||0!=E[4+x]||0!=E[5+x]||0!=E[6+x]||0!=E[7+x]?(c=o*E[0+x]+128>>8,d=o*E[4+x]+128>>8,p=E[2+x],_=E[6+x],g=h*(E[1+x]-E[7+x])+128>>8,v=h*(E[1+x]+E[7+x])+128>>8,w=E[3+x]<<4,b=E[5+x]<<4,m=c-d+1>>1,c=c+d+1>>1,d=m,m=p*s+_*a+128>>8,p=p*a-_*s+128>>8,_=m,m=g-b+1>>1,g=g+b+1>>1,b=m,m=v+w+1>>1,w=v-w+1>>1,v=m,m=c-_+1>>1,c=c+_+1>>1,_=m,m=d-p+1>>1,d=d+p+1>>1,p=m,m=g*i+v*n+2048>>12,g=g*n-v*i+2048>>12,v=m,m=w*r+b*e+2048>>12,w=w*e-b*r+2048>>12,b=m,E[0+x]=c+v,E[7+x]=c-v,E[1+x]=d+b,E[6+x]=d-b,E[2+x]=p+w,E[5+x]=p-w,E[3+x]=_+g,E[4+x]=_-g):(m=o*E[0+x]+512>>10,E[0+x]=m,E[1+x]=m,E[2+x]=m,E[3+x]=m,E[4+x]=m,E[5+x]=m,E[6+x]=m,E[7+x]=m)}for(y=0;y<8;++y){var A=y;0!=E[8+A]||0!=E[16+A]||0!=E[24+A]||0!=E[32+A]||0!=E[40+A]||0!=E[48+A]||0!=E[56+A]?(c=o*E[0+A]+2048>>12,d=o*E[32+A]+2048>>12,p=E[16+A],_=E[48+A],g=h*(E[8+A]-E[56+A])+2048>>12,v=h*(E[8+A]+E[56+A])+2048>>12,w=E[24+A],b=E[40+A],m=c-d+1>>1,c=c+d+1>>1,d=m,m=p*s+_*a+2048>>12,p=p*a-_*s+2048>>12,_=m,m=g-b+1>>1,g=g+b+1>>1,b=m,m=v+w+1>>1,w=v-w+1>>1,v=m,m=c-_+1>>1,c=c+_+1>>1,_=m,m=d-p+1>>1,d=d+p+1>>1,p=m,m=g*i+v*n+2048>>12,g=g*n-v*i+2048>>12,v=m,m=w*r+b*e+2048>>12,w=w*e-b*r+2048>>12,b=m,E[0+A]=c+v,E[56+A]=c-v,E[8+A]=d+b,E[48+A]=d-b,E[16+A]=p+w,E[40+A]=p-w,E[24+A]=_+g,E[32+A]=_-g):(m=o*l[y+0]+8192>>14,E[0+A]=m,E[8+A]=m,E[16+A]=m,E[24+A]=m,E[32+A]=m,E[40+A]=m,E[48+A]=m,E[56+A]=m)}for(y=0;y<64;++y){var B=128+(E[y]+8>>4);u[y]=B<0?0:B>255?255:B}}for(var v=0;v<p;v++){var m=v<<3;for(u=0;u<8;u++)c.push(new Uint8Array(_));for(var y=0;y<d;y++){b(f.blocks[v][y],w,g);var k=0,E=y<<3;for(l=0;l<8;l++){var x=c[m+l];for(u=0;u<8;u++)x[E+u]=w[k++]}}}return c}function d(t){return t<0?0:t>255?255:t}return f.prototype={load:function(t){var e=new XMLHttpRequest;e.open("GET",t,!0),e.responseType="arraybuffer",e.onload=function(){var t=new Uint8Array(e.response||e.mozResponseArrayBuffer);this.parse(t),this.onload&&this.onload()}.bind(this),e.send(null)},parse:function(e){var r=0;e.length;function n(){var t=e[r]<<8|e[r+1];return r+=2,t}function i(){var t=n(),i=e.subarray(r,r+t-2);return r+=i.length,i}function a(t){var e,r,n=0,i=0;for(r in t.components)t.components.hasOwnProperty(r)&&(n<(e=t.components[r]).h&&(n=e.h),i<e.v&&(i=e.v));var a=Math.ceil(t.samplesPerLine/8/n),s=Math.ceil(t.scanLines/8/i);for(r in t.components)if(t.components.hasOwnProperty(r)){e=t.components[r];for(var o=Math.ceil(Math.ceil(t.samplesPerLine/8)*e.h/n),h=Math.ceil(Math.ceil(t.scanLines/8)*e.v/i),f=a*e.h,u=s*e.v,l=[],c=0;c<u;c++){for(var d=[],p=0;p<f;p++)d.push(new Int32Array(64));l.push(d)}e.blocksPerLine=o,e.blocksPerColumn=h,e.blocks=l}t.maxH=n,t.maxV=i,t.mcusPerLine=a,t.mcusPerColumn=s}var s,o,h=null,f=null,d=[],p=[],_=[],g=[],w=n();if(65496!=w)throw new Error("SOI not found");for(w=n();65497!=w;){switch(w){case 65280:break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var b=i();65504===w&&74===b[0]&&70===b[1]&&73===b[2]&&70===b[3]&&0===b[4]&&(h={version:{major:b[5],minor:b[6]},densityUnits:b[7],xDensity:b[8]<<8|b[9],yDensity:b[10]<<8|b[11],thumbWidth:b[12],thumbHeight:b[13],thumbData:b.subarray(14,14+3*b[12]*b[13])}),65518===w&&65===b[0]&&100===b[1]&&111===b[2]&&98===b[3]&&101===b[4]&&0===b[5]&&(f={version:b[6],flags0:b[7]<<8|b[8],flags1:b[9]<<8|b[10],transformCode:b[11]});break;case 65499:for(var v=n()+r-2;r<v;){var m=e[r++],y=new Int32Array(64);if(m>>4==0)for(F=0;F<64;F++){y[t[F]]=e[r++]}else{if(m>>4!=1)throw new Error("DQT: invalid table spec");for(F=0;F<64;F++){y[t[F]]=n()}}d[15&m]=y}break;case 65472:case 65473:case 65474:n(),(s={}).extended=65473===w,s.progressive=65474===w,s.precision=e[r++],s.scanLines=n(),s.samplesPerLine=n(),s.components={},s.componentsOrder=[];var k,E=e[r++];for(P=0;P<E;P++){k=e[r];var x=e[r+1]>>4,A=15&e[r+1],B=e[r+2];s.componentsOrder.push(k),s.components[k]={h:x,v:A,quantizationIdx:B},r+=3}a(s),p.push(s);break;case 65476:var z=n();for(P=2;P<z;){var U=e[r++],I=new Uint8Array(16),C=0;for(F=0;F<16;F++,r++)C+=I[F]=e[r];var S=new Uint8Array(C);for(F=0;F<C;F++,r++)S[F]=e[r];P+=17+C,(U>>4==0?g:_)[15&U]=u(I,S)}break;case 65501:n(),o=n();break;case 65498:n();var T=e[r++],L=[];for(P=0;P<T;P++){j=s.components[e[r++]];var D=e[r++];j.huffmanTableDC=g[D>>4],j.huffmanTableAC=_[15&D],L.push(j)}var R=e[r++],O=e[r++],M=e[r++],N=l(e,r,s,L,o,R,O,M>>4,15&M);r+=N;break;case 65535:255!==e[r]&&r--;break;default:if(255==e[r-3]&&e[r-2]>=192&&e[r-2]<=254){r-=3;break}throw new Error("unknown JPEG marker "+w.toString(16))}w=n()}if(1!=p.length)throw new Error("only single frame JPEGs supported");for(var P=0;P<p.length;P++){var Z=p[P].components;for(var F in Z)Z[F].quantizationTable=d[Z[F].quantizationIdx],delete Z[F].quantizationIdx}this.width=s.samplesPerLine,this.height=s.scanLines,this.jfif=h,this.adobe=f,this.components=[];for(P=0;P<s.componentsOrder.length;P++){var j=s.components[s.componentsOrder[P]];this.components.push({lines:c(0,j),scaleX:j.h/s.maxH,scaleY:j.v/s.maxV})}},getData:function(t,e){var r,n,i,a,s,o,h,f,u,l,c,p,_,g,w,b,v,m,y,k,E,x=this.width/t,A=this.height/e,B=0,z=t*e*this.components.length,U=new Uint8Array(z);switch(this.components.length){case 1:for(r=this.components[0],l=0;l<e;l++)for(s=r.lines[0|l*r.scaleY*A],u=0;u<t;u++)c=s[0|u*r.scaleX*x],U[B++]=c;break;case 2:for(r=this.components[0],n=this.components[1],l=0;l<e;l++)for(s=r.lines[0|l*r.scaleY*A],o=n.lines[0|l*n.scaleY*A],u=0;u<t;u++)c=s[0|u*r.scaleX*x],U[B++]=c,c=o[0|u*n.scaleX*x],U[B++]=c;break;case 3:for(E=!0,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.colorTransform&&(E=!!this.colorTransform),r=this.components[0],n=this.components[1],i=this.components[2],l=0;l<e;l++)for(s=r.lines[0|l*r.scaleY*A],o=n.lines[0|l*n.scaleY*A],h=i.lines[0|l*i.scaleY*A],u=0;u<t;u++)E?(c=s[0|u*r.scaleX*x],p=o[0|u*n.scaleX*x],m=d(c+1.402*((_=h[0|u*i.scaleX*x])-128)),y=d(c-.3441363*(p-128)-.71413636*(_-128)),k=d(c+1.772*(p-128))):(m=s[0|u*r.scaleX*x],y=o[0|u*n.scaleX*x],k=h[0|u*i.scaleX*x]),U[B++]=m,U[B++]=y,U[B++]=k;break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";for(E=!1,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.colorTransform&&(E=!!this.colorTransform),r=this.components[0],n=this.components[1],i=this.components[2],a=this.components[3],l=0;l<e;l++)for(s=r.lines[0|l*r.scaleY*A],o=n.lines[0|l*n.scaleY*A],h=i.lines[0|l*i.scaleY*A],f=a.lines[0|l*a.scaleY*A],u=0;u<t;u++)E?(c=s[0|u*r.scaleX*x],p=o[0|u*n.scaleX*x],_=h[0|u*i.scaleX*x],g=f[0|u*a.scaleX*x],w=255-d(c+1.402*(_-128)),b=255-d(c-.3441363*(p-128)-.71413636*(_-128)),v=255-d(c+1.772*(p-128))):(w=s[0|u*r.scaleX*x],b=o[0|u*n.scaleX*x],v=h[0|u*i.scaleX*x],g=f[0|u*a.scaleX*x]),U[B++]=255-w,U[B++]=255-b,U[B++]=255-v,U[B++]=255-g;break;default:throw"Unsupported color mode"}return U},copyToImageData:function(t){var e,r,n,i,a,s,o,h,f,u=t.width,l=t.height,c=t.data,p=this.getData(u,l),_=0,g=0;switch(this.components.length){case 1:for(r=0;r<l;r++)for(e=0;e<u;e++)n=p[_++],c[g++]=n,c[g++]=n,c[g++]=n,c[g++]=255;break;case 3:for(r=0;r<l;r++)for(e=0;e<u;e++)o=p[_++],h=p[_++],f=p[_++],c[g++]=o,c[g++]=h,c[g++]=f,c[g++]=255;break;case 4:for(r=0;r<l;r++)for(e=0;e<u;e++)a=p[_++],s=p[_++],n=p[_++],o=255-d(a*(1-(i=p[_++])/255)+i),h=255-d(s*(1-i/255)+i),f=255-d(n*(1-i/255)+i),c[g++]=o,c[g++]=h,c[g++]=f,c[g++]=255;break;default:throw"Unsupported color mode"}}},f}();e.exports=function(e,n){var i=new Uint8Array(e),a=new r;a.parse(i);var s={width:a.width,height:a.height,data:n?new Uint8Array(a.width*a.height*4):new t(a.width*a.height*4)};return a.copyToImageData(s),s}}).call(this,t("buffer").Buffer)},{buffer:2}],8:[function(t,e,r){(function(t){function r(e){Math.round;var r,n,i,a,s,o=Math.floor,h=new Array(64),f=new Array(64),u=new Array(64),l=new Array(64),c=new Array(65535),d=new Array(65535),p=new Array(64),_=new Array(64),g=[],w=0,b=7,v=new Array(64),m=new Array(64),y=new Array(64),k=new Array(256),E=new Array(2048),x=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],A=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],B=[0,1,2,3,4,5,6,7,8,9,10,11],z=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],U=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],I=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],C=[0,1,2,3,4,5,6,7,8,9,10,11],S=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],T=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function L(t,e){for(var r=0,n=0,i=new Array,a=1;a<=16;a++){for(var s=1;s<=t[a];s++)i[e[n]]=[],i[e[n]][0]=r,i[e[n]][1]=a,n++,r++;r*=2}return i}function D(t){for(var e=t[0],r=t[1]-1;r>=0;)e&1<<r&&(w|=1<<b),r--,--b<0&&(255==w?(R(255),R(0)):R(w),b=7,w=0)}function R(t){g.push(t)}function O(t){R(t>>8&255),R(255&t)}function M(t,e,r,n,i){for(var a,s=i[0],o=i[240],h=function(t,e){var r,n,i,a,s,o,h,f,u,l,c=0;for(u=0;u<8;++u){r=t[c],n=t[c+1],i=t[c+2],a=t[c+3],s=t[c+4],o=t[c+5],h=t[c+6];var d=r+(f=t[c+7]),_=r-f,g=n+h,w=n-h,b=i+o,v=i-o,m=a+s,y=a-s,k=d+m,E=d-m,x=g+b,A=g-b;t[c]=k+x,t[c+4]=k-x;var B=.707106781*(A+E);t[c+2]=E+B,t[c+6]=E-B;var z=.382683433*((k=y+v)-(A=w+_)),U=.5411961*k+z,I=1.306562965*A+z,C=.707106781*(x=v+w),S=_+C,T=_-C;t[c+5]=T+U,t[c+3]=T-U,t[c+1]=S+I,t[c+7]=S-I,c+=8}for(c=0,u=0;u<8;++u){r=t[c],n=t[c+8],i=t[c+16],a=t[c+24],s=t[c+32],o=t[c+40],h=t[c+48];var L=r+(f=t[c+56]),D=r-f,R=n+h,O=n-h,M=i+o,N=i-o,P=a+s,Z=a-s,F=L+P,j=L-P,H=R+M,X=R-M;t[c]=F+H,t[c+32]=F-H;var Y=.707106781*(X+j);t[c+16]=j+Y,t[c+48]=j-Y;var W=.382683433*((F=Z+N)-(X=O+D)),q=.5411961*F+W,$=1.306562965*X+W,G=.707106781*(H=N+O),K=D+G,V=D-G;t[c+40]=V+q,t[c+24]=V-q,t[c+8]=K+$,t[c+56]=K-$,c++}for(u=0;u<64;++u)l=t[u]*e[u],p[u]=l>0?l+.5|0:l-.5|0;return p}(t,e),f=0;f<64;++f)_[x[f]]=h[f];var u=_[0]-r;r=_[0],0==u?D(n[0]):(D(n[d[a=32767+u]]),D(c[a]));for(var l=63;l>0&&0==_[l];l--);if(0==l)return D(s),r;for(var g,w=1;w<=l;){for(var b=w;0==_[w]&&w<=l;++w);var v=w-b;if(v>=16){g=v>>4;for(var m=1;m<=g;++m)D(o);v&=15}a=32767+_[w],D(i[(v<<4)+d[a]]),D(c[a]),w++}return 63!=l&&D(s),r}function N(t){if(t<=0&&(t=1),t>100&&(t=100),s!=t){(function(t){for(var e=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r<64;r++){var n=o((e[r]*t+50)/100);n<1?n=1:n>255&&(n=255),h[x[r]]=n}for(var i=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],a=0;a<64;a++){var s=o((i[a]*t+50)/100);s<1?s=1:s>255&&(s=255),f[x[a]]=s}for(var c=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],d=0,p=0;p<8;p++)for(var _=0;_<8;_++)u[d]=1/(h[x[d]]*c[p]*c[_]*8),l[d]=1/(f[x[d]]*c[p]*c[_]*8),d++})(t<50?Math.floor(5e3/t):Math.floor(200-2*t)),s=t}}this.encode=function(e,s){(new Date).getTime();s&&N(s),g=new Array,w=0,b=7,O(65496),O(65504),O(16),R(74),R(70),R(73),R(70),R(0),R(1),R(1),R(0),O(1),O(1),R(0),R(0),function(){O(65499),O(132),R(0);for(var t=0;t<64;t++)R(h[t]);R(1);for(var e=0;e<64;e++)R(f[e])}(),function(t,e){O(65472),O(17),R(8),O(e),O(t),R(3),R(1),R(17),R(0),R(2),R(17),R(1),R(3),R(17),R(1)}(e.width,e.height),function(){O(65476),O(418),R(0);for(var t=0;t<16;t++)R(A[t+1]);for(var e=0;e<=11;e++)R(B[e]);R(16);for(var r=0;r<16;r++)R(z[r+1]);for(var n=0;n<=161;n++)R(U[n]);R(1);for(var i=0;i<16;i++)R(I[i+1]);for(var a=0;a<=11;a++)R(C[a]);R(17);for(var s=0;s<16;s++)R(S[s+1]);for(var o=0;o<=161;o++)R(T[o])}(),O(65498),O(12),R(3),R(1),R(0),R(2),R(17),R(3),R(17),R(0),R(63),R(0);var o=0,c=0,d=0;w=0,b=7,this.encode.displayName="_encode_";for(var p,_,k,x,L,P,Z,F,j,H=e.data,X=e.width,Y=e.height,W=4*X,q=0;q<Y;){for(p=0;p<W;){for(P=L=W*q+p,Z=-1,F=0,j=0;j<64;j++)P=L+(F=j>>3)*W+(Z=4*(7&j)),q+F>=Y&&(P-=W*(q+1+F-Y)),p+Z>=W&&(P-=p+Z-W+4),_=H[P++],k=H[P++],x=H[P++],v[j]=(E[_]+E[k+256>>0]+E[x+512>>0]>>16)-128,m[j]=(E[_+768>>0]+E[k+1024>>0]+E[x+1280>>0]>>16)-128,y[j]=(E[_+1280>>0]+E[k+1536>>0]+E[x+1792>>0]>>16)-128;o=M(v,u,o,r,i),c=M(m,l,c,n,a),d=M(y,l,d,n,a),p+=32}q+=8}if(b>=0){var $=[];$[1]=b+1,$[0]=(1<<b+1)-1,D($)}return O(65497),new t(g)},function(){(new Date).getTime();e||(e=50),function(){for(var t=String.fromCharCode,e=0;e<256;e++)k[e]=t(e)}(),r=L(A,B),n=L(I,C),i=L(z,U),a=L(S,T),function(){for(var t=1,e=2,r=1;r<=15;r++){for(var n=t;n<e;n++)d[32767+n]=r,c[32767+n]=[],c[32767+n][1]=r,c[32767+n][0]=n;for(var i=-(e-1);i<=-t;i++)d[32767+i]=r,c[32767+i]=[],c[32767+i][1]=r,c[32767+i][0]=e-1+i;t<<=1,e<<=1}}(),function(){for(var t=0;t<256;t++)E[t]=19595*t,E[t+256>>0]=38470*t,E[t+512>>0]=7471*t+32768,E[t+768>>0]=-11059*t,E[t+1024>>0]=-21709*t,E[t+1280>>0]=32768*t+8421375,E[t+1536>>0]=-27439*t,E[t+1792>>0]=-5329*t}(),N(e),(new Date).getTime()}()}e.exports=function(t,e){void 0===e&&(e=50);return{data:new r(e).encode(t,e),width:t.width,height:t.height}}}).call(this,t("buffer").Buffer)},{buffer:2}],9:[function(t,e,r){"use strict";var n={};(0,t("./lib/utils/common").assign)(n,t("./lib/deflate"),t("./lib/inflate"),t("./lib/zlib/constants")),e.exports=n},{"./lib/deflate":10,"./lib/inflate":11,"./lib/utils/common":12,"./lib/zlib/constants":15}],10:[function(t,e,r){"use strict";var n=t("./zlib/deflate"),i=t("./utils/common"),a=t("./utils/strings"),s=t("./zlib/messages"),o=t("./zlib/zstream"),h=Object.prototype.toString,f=0,u=-1,l=0,c=8;function d(t){if(!(this instanceof d))return new d(t);this.options=i.assign({level:u,method:c,chunkSize:16384,windowBits:15,memLevel:8,strategy:l,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new o,this.strm.avail_out=0;var r=n.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==f)throw new Error(s[r]);if(e.header&&n.deflateSetHeader(this.strm,e.header),e.dictionary){var p;if(p="string"==typeof e.dictionary?a.string2buf(e.dictionary):"[object ArrayBuffer]"===h.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(r=n.deflateSetDictionary(this.strm,p))!==f)throw new Error(s[r]);this._dict_set=!0}}function p(t,e){var r=new d(e);if(r.push(t,!0),r.err)throw r.msg||s[r.err];return r.result}d.prototype.push=function(t,e){var r,s,o=this.strm,u=this.options.chunkSize;if(this.ended)return!1;s=e===~~e?e:!0===e?4:0,"string"==typeof t?o.input=a.string2buf(t):"[object ArrayBuffer]"===h.call(t)?o.input=new Uint8Array(t):o.input=t,o.next_in=0,o.avail_in=o.input.length;do{if(0===o.avail_out&&(o.output=new i.Buf8(u),o.next_out=0,o.avail_out=u),1!==(r=n.deflate(o,s))&&r!==f)return this.onEnd(r),this.ended=!0,!1;0!==o.avail_out&&(0!==o.avail_in||4!==s&&2!==s)||("string"===this.options.to?this.onData(a.buf2binstring(i.shrinkBuf(o.output,o.next_out))):this.onData(i.shrinkBuf(o.output,o.next_out)))}while((o.avail_in>0||0===o.avail_out)&&1!==r);return 4===s?(r=n.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===f):2!==s||(this.onEnd(f),o.avail_out=0,!0)},d.prototype.onData=function(t){this.chunks.push(t)},d.prototype.onEnd=function(t){t===f&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Deflate=d,r.deflate=p,r.deflateRaw=function(t,e){return(e=e||{}).raw=!0,p(t,e)},r.gzip=function(t,e){return(e=e||{}).gzip=!0,p(t,e)}},{"./utils/common":12,"./utils/strings":13,"./zlib/deflate":17,"./zlib/messages":22,"./zlib/zstream":24}],11:[function(t,e,r){"use strict";var n=t("./zlib/inflate"),i=t("./utils/common"),a=t("./utils/strings"),s=t("./zlib/constants"),o=t("./zlib/messages"),h=t("./zlib/zstream"),f=t("./zlib/gzheader"),u=Object.prototype.toString;function l(t){if(!(this instanceof l))return new l(t);this.options=i.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new h,this.strm.avail_out=0;var r=n.inflateInit2(this.strm,e.windowBits);if(r!==s.Z_OK)throw new Error(o[r]);this.header=new f,n.inflateGetHeader(this.strm,this.header)}function c(t,e){var r=new l(e);if(r.push(t,!0),r.err)throw r.msg||o[r.err];return r.result}l.prototype.push=function(t,e){var r,o,h,f,l,c,d=this.strm,p=this.options.chunkSize,_=this.options.dictionary,g=!1;if(this.ended)return!1;o=e===~~e?e:!0===e?s.Z_FINISH:s.Z_NO_FLUSH,"string"==typeof t?d.input=a.binstring2buf(t):"[object ArrayBuffer]"===u.call(t)?d.input=new Uint8Array(t):d.input=t,d.next_in=0,d.avail_in=d.input.length;do{if(0===d.avail_out&&(d.output=new i.Buf8(p),d.next_out=0,d.avail_out=p),(r=n.inflate(d,s.Z_NO_FLUSH))===s.Z_NEED_DICT&&_&&(c="string"==typeof _?a.string2buf(_):"[object ArrayBuffer]"===u.call(_)?new Uint8Array(_):_,r=n.inflateSetDictionary(this.strm,c)),r===s.Z_BUF_ERROR&&!0===g&&(r=s.Z_OK,g=!1),r!==s.Z_STREAM_END&&r!==s.Z_OK)return this.onEnd(r),this.ended=!0,!1;d.next_out&&(0!==d.avail_out&&r!==s.Z_STREAM_END&&(0!==d.avail_in||o!==s.Z_FINISH&&o!==s.Z_SYNC_FLUSH)||("string"===this.options.to?(h=a.utf8border(d.output,d.next_out),f=d.next_out-h,l=a.buf2string(d.output,h),d.next_out=f,d.avail_out=p-f,f&&i.arraySet(d.output,d.output,h,f,0),this.onData(l)):this.onData(i.shrinkBuf(d.output,d.next_out)))),0===d.avail_in&&0===d.avail_out&&(g=!0)}while((d.avail_in>0||0===d.avail_out)&&r!==s.Z_STREAM_END);return r===s.Z_STREAM_END&&(o=s.Z_FINISH),o===s.Z_FINISH?(r=n.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===s.Z_OK):o!==s.Z_SYNC_FLUSH||(this.onEnd(s.Z_OK),d.avail_out=0,!0)},l.prototype.onData=function(t){this.chunks.push(t)},l.prototype.onEnd=function(t){t===s.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Inflate=l,r.inflate=c,r.inflateRaw=function(t,e){return(e=e||{}).raw=!0,c(t,e)},r.ungzip=c},{"./utils/common":12,"./utils/strings":13,"./zlib/constants":15,"./zlib/gzheader":18,"./zlib/inflate":20,"./zlib/messages":22,"./zlib/zstream":24}],12:[function(t,e,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}r.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var r=e.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var n in r)i(r,n)&&(t[n]=r[n])}}return t},r.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var a={arraySet:function(t,e,r,n,i){if(e.subarray&&t.subarray)t.set(e.subarray(r,r+n),i);else for(var a=0;a<n;a++)t[i+a]=e[r+a]},flattenChunks:function(t){var e,r,n,i,a,s;for(n=0,e=0,r=t.length;e<r;e++)n+=t[e].length;for(s=new Uint8Array(n),i=0,e=0,r=t.length;e<r;e++)a=t[e],s.set(a,i),i+=a.length;return s}},s={arraySet:function(t,e,r,n,i){for(var a=0;a<n;a++)t[i+a]=e[r+a]},flattenChunks:function(t){return[].concat.apply([],t)}};r.setTyped=function(t){t?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,a)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],13:[function(t,e,r){"use strict";var n=t("./common"),i=!0,a=!0;try{String.fromCharCode.apply(null,[0])}catch(t){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){a=!1}for(var s=new n.Buf8(256),o=0;o<256;o++)s[o]=o>=252?6:o>=248?5:o>=240?4:o>=224?3:o>=192?2:1;function h(t,e){if(e<65537&&(t.subarray&&a||!t.subarray&&i))return String.fromCharCode.apply(null,n.shrinkBuf(t,e));for(var r="",s=0;s<e;s++)r+=String.fromCharCode(t[s]);return r}s[254]=s[254]=1,r.string2buf=function(t){var e,r,i,a,s,o=t.length,h=0;for(a=0;a<o;a++)55296==(64512&(r=t.charCodeAt(a)))&&a+1<o&&56320==(64512&(i=t.charCodeAt(a+1)))&&(r=65536+(r-55296<<10)+(i-56320),a++),h+=r<128?1:r<2048?2:r<65536?3:4;for(e=new n.Buf8(h),s=0,a=0;s<h;a++)55296==(64512&(r=t.charCodeAt(a)))&&a+1<o&&56320==(64512&(i=t.charCodeAt(a+1)))&&(r=65536+(r-55296<<10)+(i-56320),a++),r<128?e[s++]=r:r<2048?(e[s++]=192|r>>>6,e[s++]=128|63&r):r<65536?(e[s++]=224|r>>>12,e[s++]=128|r>>>6&63,e[s++]=128|63&r):(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63,e[s++]=128|r>>>6&63,e[s++]=128|63&r);return e},r.buf2binstring=function(t){return h(t,t.length)},r.binstring2buf=function(t){for(var e=new n.Buf8(t.length),r=0,i=e.length;r<i;r++)e[r]=t.charCodeAt(r);return e},r.buf2string=function(t,e){var r,n,i,a,o=e||t.length,f=new Array(2*o);for(n=0,r=0;r<o;)if((i=t[r++])<128)f[n++]=i;else if((a=s[i])>4)f[n++]=65533,r+=a-1;else{for(i&=2===a?31:3===a?15:7;a>1&&r<o;)i=i<<6|63&t[r++],a--;a>1?f[n++]=65533:i<65536?f[n++]=i:(i-=65536,f[n++]=55296|i>>10&1023,f[n++]=56320|1023&i)}return h(f,n)},r.utf8border=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;r>=0&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+s[t[r]]>e?r:e}},{"./common":12}],14:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){for(var i=65535&t|0,a=t>>>16&65535|0,s=0;0!==r;){r-=s=r>2e3?2e3:r;do{a=a+(i=i+e[n++]|0)|0}while(--s);i%=65521,a%=65521}return i|a<<16|0}},{}],15:[function(t,e,r){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],16:[function(t,e,r){"use strict";var n=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e,r,i){var a=n,s=i+r;t^=-1;for(var o=i;o<s;o++)t=t>>>8^a[255&(t^e[o])];return-1^t}},{}],17:[function(t,e,r){"use strict";var n,i=t("../utils/common"),a=t("./trees"),s=t("./adler32"),o=t("./crc32"),h=t("./messages"),f=0,u=1,l=3,c=4,d=5,p=0,_=1,g=-2,w=-3,b=-5,v=-1,m=1,y=2,k=3,E=4,x=0,A=2,B=8,z=9,U=15,I=8,C=286,S=30,T=19,L=2*C+1,D=15,R=3,O=258,M=O+R+1,N=32,P=42,Z=69,F=73,j=91,H=103,X=113,Y=666,W=1,q=2,$=3,G=4,K=3;function V(t,e){return t.msg=h[e],e}function J(t){return(t<<1)-(t>4?9:0)}function Q(t){for(var e=t.length;--e>=0;)t[e]=0}function tt(t){var e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),0!==r&&(i.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function et(t,e){a._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,tt(t.strm)}function rt(t,e){t.pending_buf[t.pending++]=e}function nt(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function it(t,e){var r,n,i=t.max_chain_length,a=t.strstart,s=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-M?t.strstart-(t.w_size-M):0,f=t.window,u=t.w_mask,l=t.prev,c=t.strstart+O,d=f[a+s-1],p=f[a+s];t.prev_length>=t.good_match&&(i>>=2),o>t.lookahead&&(o=t.lookahead);do{if(f[(r=e)+s]===p&&f[r+s-1]===d&&f[r]===f[a]&&f[++r]===f[a+1]){a+=2,r++;do{}while(f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&a<c);if(n=O-(c-a),a=c-O,n>s){if(t.match_start=e,s=n,n>=o)break;d=f[a+s-1],p=f[a+s]}}}while((e=l[e&u])>h&&0!=--i);return s<=t.lookahead?s:t.lookahead}function at(t){var e,r,n,a,h,f,u,l,c,d,p=t.w_size;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=p+(p-M)){i.arraySet(t.window,t.window,p,p,0),t.match_start-=p,t.strstart-=p,t.block_start-=p,e=r=t.hash_size;do{n=t.head[--e],t.head[e]=n>=p?n-p:0}while(--r);e=r=p;do{n=t.prev[--e],t.prev[e]=n>=p?n-p:0}while(--r);a+=p}if(0===t.strm.avail_in)break;if(f=t.strm,u=t.window,l=t.strstart+t.lookahead,c=a,d=void 0,(d=f.avail_in)>c&&(d=c),r=0===d?0:(f.avail_in-=d,i.arraySet(u,f.input,f.next_in,d,l),1===f.state.wrap?f.adler=s(f.adler,u,d,l):2===f.state.wrap&&(f.adler=o(f.adler,u,d,l)),f.next_in+=d,f.total_in+=d,d),t.lookahead+=r,t.lookahead+t.insert>=R)for(h=t.strstart-t.insert,t.ins_h=t.window[h],t.ins_h=(t.ins_h<<t.hash_shift^t.window[h+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[h+R-1])&t.hash_mask,t.prev[h&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=h,h++,t.insert--,!(t.lookahead+t.insert<R)););}while(t.lookahead<M&&0!==t.strm.avail_in)}function st(t,e){for(var r,n;;){if(t.lookahead<M){if(at(t),t.lookahead<M&&e===f)return W;if(0===t.lookahead)break}if(r=0,t.lookahead>=R&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+R-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==r&&t.strstart-r<=t.w_size-M&&(t.match_length=it(t,r)),t.match_length>=R)if(n=a._tr_tally(t,t.strstart-t.match_start,t.match_length-R),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=R){t.match_length--;do{t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+R-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else n=a._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(et(t,!1),0===t.strm.avail_out))return W}return t.insert=t.strstart<R-1?t.strstart:R-1,e===c?(et(t,!0),0===t.strm.avail_out?$:G):t.last_lit&&(et(t,!1),0===t.strm.avail_out)?W:q}function ot(t,e){for(var r,n,i;;){if(t.lookahead<M){if(at(t),t.lookahead<M&&e===f)return W;if(0===t.lookahead)break}if(r=0,t.lookahead>=R&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+R-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=R-1,0!==r&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-M&&(t.match_length=it(t,r),t.match_length<=5&&(t.strategy===m||t.match_length===R&&t.strstart-t.match_start>4096)&&(t.match_length=R-1)),t.prev_length>=R&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-R,n=a._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-R),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+R-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=R-1,t.strstart++,n&&(et(t,!1),0===t.strm.avail_out))return W}else if(t.match_available){if((n=a._tr_tally(t,0,t.window[t.strstart-1]))&&et(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return W}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=a._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<R-1?t.strstart:R-1,e===c?(et(t,!0),0===t.strm.avail_out?$:G):t.last_lit&&(et(t,!1),0===t.strm.avail_out)?W:q}function ht(t,e,r,n,i){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=n,this.func=i}function ft(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=A,(e=t.state).pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?P:X,t.adler=2===e.wrap?0:1,e.last_flush=f,a._tr_init(e),p):V(t,g)}function ut(t){var e,r=ft(t);return r===p&&((e=t.state).window_size=2*e.w_size,Q(e.head),e.max_lazy_match=n[e.level].max_lazy,e.good_match=n[e.level].good_length,e.nice_match=n[e.level].nice_length,e.max_chain_length=n[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=R-1,e.match_available=0,e.ins_h=0),r}function lt(t,e,r,n,a,s){if(!t)return g;var o=1;if(e===v&&(e=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),a<1||a>z||r!==B||n<8||n>15||e<0||e>9||s<0||s>E)return V(t,g);8===n&&(n=9);var h=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=B,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*L),this.dyn_dtree=new i.Buf16(2*(2*S+1)),this.bl_tree=new i.Buf16(2*(2*T+1)),Q(this.dyn_ltree),Q(this.dyn_dtree),Q(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(D+1),this.heap=new i.Buf16(2*C+1),Q(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*C+1),Q(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return t.state=h,h.strm=t,h.wrap=o,h.gzhead=null,h.w_bits=n,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=a+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+R-1)/R),h.window=new i.Buf8(2*h.w_size),h.head=new i.Buf16(h.hash_size),h.prev=new i.Buf16(h.w_size),h.lit_bufsize=1<<a+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new i.Buf8(h.pending_buf_size),h.d_buf=1*h.lit_bufsize,h.l_buf=3*h.lit_bufsize,h.level=e,h.strategy=s,h.method=r,ut(t)}n=[new ht(0,0,0,0,function(t,e){var r=65535;for(r>t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(at(t),0===t.lookahead&&e===f)return W;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+r;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,et(t,!1),0===t.strm.avail_out))return W;if(t.strstart-t.block_start>=t.w_size-M&&(et(t,!1),0===t.strm.avail_out))return W}return t.insert=0,e===c?(et(t,!0),0===t.strm.avail_out?$:G):(t.strstart>t.block_start&&(et(t,!1),t.strm.avail_out),W)}),new ht(4,4,8,4,st),new ht(4,5,16,8,st),new ht(4,6,32,32,st),new ht(4,4,16,16,ot),new ht(8,16,32,32,ot),new ht(8,16,128,128,ot),new ht(8,32,128,256,ot),new ht(32,128,258,1024,ot),new ht(32,258,258,4096,ot)],r.deflateInit=function(t,e){return lt(t,e,B,U,I,x)},r.deflateInit2=lt,r.deflateReset=ut,r.deflateResetKeep=ft,r.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?g:(t.state.gzhead=e,p):g},r.deflate=function(t,e){var r,i,s,h;if(!t||!t.state||e>d||e<0)return t?V(t,g):g;if(i=t.state,!t.output||!t.input&&0!==t.avail_in||i.status===Y&&e!==c)return V(t,0===t.avail_out?b:g);if(i.strm=t,r=i.last_flush,i.last_flush=e,i.status===P)if(2===i.wrap)t.adler=0,rt(i,31),rt(i,139),rt(i,8),i.gzhead?(rt(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),rt(i,255&i.gzhead.time),rt(i,i.gzhead.time>>8&255),rt(i,i.gzhead.time>>16&255),rt(i,i.gzhead.time>>24&255),rt(i,9===i.level?2:i.strategy>=y||i.level<2?4:0),rt(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(rt(i,255&i.gzhead.extra.length),rt(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=o(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=Z):(rt(i,0),rt(i,0),rt(i,0),rt(i,0),rt(i,0),rt(i,9===i.level?2:i.strategy>=y||i.level<2?4:0),rt(i,K),i.status=X);else{var w=B+(i.w_bits-8<<4)<<8;w|=(i.strategy>=y||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(w|=N),w+=31-w%31,i.status=X,nt(i,w),0!==i.strstart&&(nt(i,t.adler>>>16),nt(i,65535&t.adler)),t.adler=1}if(i.status===Z)if(i.gzhead.extra){for(s=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),tt(t),s=i.pending,i.pending!==i.pending_buf_size));)rt(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=F)}else i.status=F;if(i.status===F)if(i.gzhead.name){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),tt(t),s=i.pending,i.pending===i.pending_buf_size)){h=1;break}h=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,rt(i,h)}while(0!==h);i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),0===h&&(i.gzindex=0,i.status=j)}else i.status=j;if(i.status===j)if(i.gzhead.comment){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),tt(t),s=i.pending,i.pending===i.pending_buf_size)){h=1;break}h=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,rt(i,h)}while(0!==h);i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),0===h&&(i.status=H)}else i.status=H;if(i.status===H&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&tt(t),i.pending+2<=i.pending_buf_size&&(rt(i,255&t.adler),rt(i,t.adler>>8&255),t.adler=0,i.status=X)):i.status=X),0!==i.pending){if(tt(t),0===t.avail_out)return i.last_flush=-1,p}else if(0===t.avail_in&&J(e)<=J(r)&&e!==c)return V(t,b);if(i.status===Y&&0!==t.avail_in)return V(t,b);if(0!==t.avail_in||0!==i.lookahead||e!==f&&i.status!==Y){var v=i.strategy===y?function(t,e){for(var r;;){if(0===t.lookahead&&(at(t),0===t.lookahead)){if(e===f)return W;break}if(t.match_length=0,r=a._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(et(t,!1),0===t.strm.avail_out))return W}return t.insert=0,e===c?(et(t,!0),0===t.strm.avail_out?$:G):t.last_lit&&(et(t,!1),0===t.strm.avail_out)?W:q}(i,e):i.strategy===k?function(t,e){for(var r,n,i,s,o=t.window;;){if(t.lookahead<=O){if(at(t),t.lookahead<=O&&e===f)return W;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=R&&t.strstart>0&&(n=o[i=t.strstart-1])===o[++i]&&n===o[++i]&&n===o[++i]){s=t.strstart+O;do{}while(n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&i<s);t.match_length=O-(s-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=R?(r=a._tr_tally(t,1,t.match_length-R),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=a._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(et(t,!1),0===t.strm.avail_out))return W}return t.insert=0,e===c?(et(t,!0),0===t.strm.avail_out?$:G):t.last_lit&&(et(t,!1),0===t.strm.avail_out)?W:q}(i,e):n[i.level].func(i,e);if(v!==$&&v!==G||(i.status=Y),v===W||v===$)return 0===t.avail_out&&(i.last_flush=-1),p;if(v===q&&(e===u?a._tr_align(i):e!==d&&(a._tr_stored_block(i,0,0,!1),e===l&&(Q(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),tt(t),0===t.avail_out))return i.last_flush=-1,p}return e!==c?p:i.wrap<=0?_:(2===i.wrap?(rt(i,255&t.adler),rt(i,t.adler>>8&255),rt(i,t.adler>>16&255),rt(i,t.adler>>24&255),rt(i,255&t.total_in),rt(i,t.total_in>>8&255),rt(i,t.total_in>>16&255),rt(i,t.total_in>>24&255)):(nt(i,t.adler>>>16),nt(i,65535&t.adler)),tt(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?p:_)},r.deflateEnd=function(t){var e;return t&&t.state?(e=t.state.status)!==P&&e!==Z&&e!==F&&e!==j&&e!==H&&e!==X&&e!==Y?V(t,g):(t.state=null,e===X?V(t,w):p):g},r.deflateSetDictionary=function(t,e){var r,n,a,o,h,f,u,l,c=e.length;if(!t||!t.state)return g;if(2===(o=(r=t.state).wrap)||1===o&&r.status!==P||r.lookahead)return g;for(1===o&&(t.adler=s(t.adler,e,c,0)),r.wrap=0,c>=r.w_size&&(0===o&&(Q(r.head),r.strstart=0,r.block_start=0,r.insert=0),l=new i.Buf8(r.w_size),i.arraySet(l,e,c-r.w_size,r.w_size,0),e=l,c=r.w_size),h=t.avail_in,f=t.next_in,u=t.input,t.avail_in=c,t.next_in=0,t.input=e,at(r);r.lookahead>=R;){n=r.strstart,a=r.lookahead-(R-1);do{r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+R-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++}while(--a);r.strstart=n,r.lookahead=R-1,at(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=R-1,r.match_available=0,t.next_in=f,t.input=u,t.avail_in=h,r.wrap=o,p},r.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":12,"./adler32":14,"./crc32":16,"./messages":22,"./trees":23}],18:[function(t,e,r){"use strict";e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],19:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n,i,a,s,o,h,f,u,l,c,d,p,_,g,w,b,v,m,y,k,E,x,A,B;r=t.state,n=t.next_in,A=t.input,i=n+(t.avail_in-5),a=t.next_out,B=t.output,s=a-(e-t.avail_out),o=a+(t.avail_out-257),h=r.dmax,f=r.wsize,u=r.whave,l=r.wnext,c=r.window,d=r.hold,p=r.bits,_=r.lencode,g=r.distcode,w=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;t:do{p<15&&(d+=A[n++]<<p,p+=8,d+=A[n++]<<p,p+=8),v=_[d&w];e:for(;;){if(d>>>=m=v>>>24,p-=m,0===(m=v>>>16&255))B[a++]=65535&v;else{if(!(16&m)){if(0==(64&m)){v=_[(65535&v)+(d&(1<<m)-1)];continue e}if(32&m){r.mode=12;break t}t.msg="invalid literal/length code",r.mode=30;break t}y=65535&v,(m&=15)&&(p<m&&(d+=A[n++]<<p,p+=8),y+=d&(1<<m)-1,d>>>=m,p-=m),p<15&&(d+=A[n++]<<p,p+=8,d+=A[n++]<<p,p+=8),v=g[d&b];r:for(;;){if(d>>>=m=v>>>24,p-=m,!(16&(m=v>>>16&255))){if(0==(64&m)){v=g[(65535&v)+(d&(1<<m)-1)];continue r}t.msg="invalid distance code",r.mode=30;break t}if(k=65535&v,p<(m&=15)&&(d+=A[n++]<<p,(p+=8)<m&&(d+=A[n++]<<p,p+=8)),(k+=d&(1<<m)-1)>h){t.msg="invalid distance too far back",r.mode=30;break t}if(d>>>=m,p-=m,k>(m=a-s)){if((m=k-m)>u&&r.sane){t.msg="invalid distance too far back",r.mode=30;break t}if(E=0,x=c,0===l){if(E+=f-m,m<y){y-=m;do{B[a++]=c[E++]}while(--m);E=a-k,x=B}}else if(l<m){if(E+=f+l-m,(m-=l)<y){y-=m;do{B[a++]=c[E++]}while(--m);if(E=0,l<y){y-=m=l;do{B[a++]=c[E++]}while(--m);E=a-k,x=B}}}else if(E+=l-m,m<y){y-=m;do{B[a++]=c[E++]}while(--m);E=a-k,x=B}for(;y>2;)B[a++]=x[E++],B[a++]=x[E++],B[a++]=x[E++],y-=3;y&&(B[a++]=x[E++],y>1&&(B[a++]=x[E++]))}else{E=a-k;do{B[a++]=B[E++],B[a++]=B[E++],B[a++]=B[E++],y-=3}while(y>2);y&&(B[a++]=B[E++],y>1&&(B[a++]=B[E++]))}break}}break}}while(n<i&&a<o);n-=y=p>>3,d&=(1<<(p-=y<<3))-1,t.next_in=n,t.next_out=a,t.avail_in=n<i?i-n+5:5-(n-i),t.avail_out=a<o?o-a+257:257-(a-o),r.hold=d,r.bits=p}},{}],20:[function(t,e,r){"use strict";var n=t("../utils/common"),i=t("./adler32"),a=t("./crc32"),s=t("./inffast"),o=t("./inftrees"),h=0,f=1,u=2,l=4,c=5,d=6,p=0,_=1,g=2,w=-2,b=-3,v=-4,m=-5,y=8,k=1,E=2,x=3,A=4,B=5,z=6,U=7,I=8,C=9,S=10,T=11,L=12,D=13,R=14,O=15,M=16,N=17,P=18,Z=19,F=20,j=21,H=22,X=23,Y=24,W=25,q=26,$=27,G=28,K=29,V=30,J=31,Q=32,tt=852,et=592,rt=15;function nt(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function it(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=k,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new n.Buf32(tt),e.distcode=e.distdyn=new n.Buf32(et),e.sane=1,e.back=-1,p):w}function at(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,it(t)):w}function st(t,e){var r,n;return t&&t.state?(n=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?w:(null!==n.window&&n.wbits!==e&&(n.window=null),n.wrap=r,n.wbits=e,at(t))):w}function ot(t,e){var r,i;return t?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},t.state=i,i.window=null,(r=st(t,e))!==p&&(t.state=null),r):w}var ht,ft,ut=!0;function lt(t){if(ut){var e;for(ht=new n.Buf32(512),ft=new n.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(o(f,t.lens,0,288,ht,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;o(u,t.lens,0,32,ft,0,t.work,{bits:5}),ut=!1}t.lencode=ht,t.lenbits=9,t.distcode=ft,t.distbits=5}function ct(t,e,r,i){var a,s=t.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new n.Buf8(s.wsize)),i>=s.wsize?(n.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):((a=s.wsize-s.wnext)>i&&(a=i),n.arraySet(s.window,e,r-i,a,s.wnext),(i-=a)?(n.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=a,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=a))),0}r.inflateReset=at,r.inflateReset2=st,r.inflateResetKeep=it,r.inflateInit=function(t){return ot(t,rt)},r.inflateInit2=ot,r.inflate=function(t,e){var r,tt,et,rt,it,at,st,ot,ht,ft,ut,dt,pt,_t,gt,wt,bt,vt,mt,yt,kt,Et,xt,At,Bt=0,zt=new n.Buf8(4),Ut=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return w;(r=t.state).mode===L&&(r.mode=D),it=t.next_out,et=t.output,st=t.avail_out,rt=t.next_in,tt=t.input,at=t.avail_in,ot=r.hold,ht=r.bits,ft=at,ut=st,Et=p;t:for(;;)switch(r.mode){case k:if(0===r.wrap){r.mode=D;break}for(;ht<16;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if(2&r.wrap&&35615===ot){r.check=0,zt[0]=255&ot,zt[1]=ot>>>8&255,r.check=a(r.check,zt,2,0),ot=0,ht=0,r.mode=E;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&ot)<<8)+(ot>>8))%31){t.msg="incorrect header check",r.mode=V;break}if((15&ot)!==y){t.msg="unknown compression method",r.mode=V;break}if(ht-=4,kt=8+(15&(ot>>>=4)),0===r.wbits)r.wbits=kt;else if(kt>r.wbits){t.msg="invalid window size",r.mode=V;break}r.dmax=1<<kt,t.adler=r.check=1,r.mode=512&ot?S:L,ot=0,ht=0;break;case E:for(;ht<16;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if(r.flags=ot,(255&r.flags)!==y){t.msg="unknown compression method",r.mode=V;break}if(57344&r.flags){t.msg="unknown header flags set",r.mode=V;break}r.head&&(r.head.text=ot>>8&1),512&r.flags&&(zt[0]=255&ot,zt[1]=ot>>>8&255,r.check=a(r.check,zt,2,0)),ot=0,ht=0,r.mode=x;case x:for(;ht<32;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}r.head&&(r.head.time=ot),512&r.flags&&(zt[0]=255&ot,zt[1]=ot>>>8&255,zt[2]=ot>>>16&255,zt[3]=ot>>>24&255,r.check=a(r.check,zt,4,0)),ot=0,ht=0,r.mode=A;case A:for(;ht<16;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}r.head&&(r.head.xflags=255&ot,r.head.os=ot>>8),512&r.flags&&(zt[0]=255&ot,zt[1]=ot>>>8&255,r.check=a(r.check,zt,2,0)),ot=0,ht=0,r.mode=B;case B:if(1024&r.flags){for(;ht<16;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}r.length=ot,r.head&&(r.head.extra_len=ot),512&r.flags&&(zt[0]=255&ot,zt[1]=ot>>>8&255,r.check=a(r.check,zt,2,0)),ot=0,ht=0}else r.head&&(r.head.extra=null);r.mode=z;case z:if(1024&r.flags&&((dt=r.length)>at&&(dt=at),dt&&(r.head&&(kt=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,tt,rt,dt,kt)),512&r.flags&&(r.check=a(r.check,tt,dt,rt)),at-=dt,rt+=dt,r.length-=dt),r.length))break t;r.length=0,r.mode=U;case U:if(2048&r.flags){if(0===at)break t;dt=0;do{kt=tt[rt+dt++],r.head&&kt&&r.length<65536&&(r.head.name+=String.fromCharCode(kt))}while(kt&&dt<at);if(512&r.flags&&(r.check=a(r.check,tt,dt,rt)),at-=dt,rt+=dt,kt)break t}else r.head&&(r.head.name=null);r.length=0,r.mode=I;case I:if(4096&r.flags){if(0===at)break t;dt=0;do{kt=tt[rt+dt++],r.head&&kt&&r.length<65536&&(r.head.comment+=String.fromCharCode(kt))}while(kt&&dt<at);if(512&r.flags&&(r.check=a(r.check,tt,dt,rt)),at-=dt,rt+=dt,kt)break t}else r.head&&(r.head.comment=null);r.mode=C;case C:if(512&r.flags){for(;ht<16;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if(ot!==(65535&r.check)){t.msg="header crc mismatch",r.mode=V;break}ot=0,ht=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=L;break;case S:for(;ht<32;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}t.adler=r.check=nt(ot),ot=0,ht=0,r.mode=T;case T:if(0===r.havedict)return t.next_out=it,t.avail_out=st,t.next_in=rt,t.avail_in=at,r.hold=ot,r.bits=ht,g;t.adler=r.check=1,r.mode=L;case L:if(e===c||e===d)break t;case D:if(r.last){ot>>>=7&ht,ht-=7&ht,r.mode=$;break}for(;ht<3;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}switch(r.last=1&ot,ht-=1,3&(ot>>>=1)){case 0:r.mode=R;break;case 1:if(lt(r),r.mode=F,e===d){ot>>>=2,ht-=2;break t}break;case 2:r.mode=N;break;case 3:t.msg="invalid block type",r.mode=V}ot>>>=2,ht-=2;break;case R:for(ot>>>=7&ht,ht-=7&ht;ht<32;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if((65535&ot)!=(ot>>>16^65535)){t.msg="invalid stored block lengths",r.mode=V;break}if(r.length=65535&ot,ot=0,ht=0,r.mode=O,e===d)break t;case O:r.mode=M;case M:if(dt=r.length){if(dt>at&&(dt=at),dt>st&&(dt=st),0===dt)break t;n.arraySet(et,tt,rt,dt,it),at-=dt,rt+=dt,st-=dt,it+=dt,r.length-=dt;break}r.mode=L;break;case N:for(;ht<14;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if(r.nlen=257+(31&ot),ot>>>=5,ht-=5,r.ndist=1+(31&ot),ot>>>=5,ht-=5,r.ncode=4+(15&ot),ot>>>=4,ht-=4,r.nlen>286||r.ndist>30){t.msg="too many length or distance symbols",r.mode=V;break}r.have=0,r.mode=P;case P:for(;r.have<r.ncode;){for(;ht<3;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}r.lens[Ut[r.have++]]=7&ot,ot>>>=3,ht-=3}for(;r.have<19;)r.lens[Ut[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,xt={bits:r.lenbits},Et=o(h,r.lens,0,19,r.lencode,0,r.work,xt),r.lenbits=xt.bits,Et){t.msg="invalid code lengths set",r.mode=V;break}r.have=0,r.mode=Z;case Z:for(;r.have<r.nlen+r.ndist;){for(;wt=(Bt=r.lencode[ot&(1<<r.lenbits)-1])>>>16&255,bt=65535&Bt,!((gt=Bt>>>24)<=ht);){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if(bt<16)ot>>>=gt,ht-=gt,r.lens[r.have++]=bt;else{if(16===bt){for(At=gt+2;ht<At;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if(ot>>>=gt,ht-=gt,0===r.have){t.msg="invalid bit length repeat",r.mode=V;break}kt=r.lens[r.have-1],dt=3+(3&ot),ot>>>=2,ht-=2}else if(17===bt){for(At=gt+3;ht<At;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}ht-=gt,kt=0,dt=3+(7&(ot>>>=gt)),ot>>>=3,ht-=3}else{for(At=gt+7;ht<At;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}ht-=gt,kt=0,dt=11+(127&(ot>>>=gt)),ot>>>=7,ht-=7}if(r.have+dt>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=V;break}for(;dt--;)r.lens[r.have++]=kt}}if(r.mode===V)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=V;break}if(r.lenbits=9,xt={bits:r.lenbits},Et=o(f,r.lens,0,r.nlen,r.lencode,0,r.work,xt),r.lenbits=xt.bits,Et){t.msg="invalid literal/lengths set",r.mode=V;break}if(r.distbits=6,r.distcode=r.distdyn,xt={bits:r.distbits},Et=o(u,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,xt),r.distbits=xt.bits,Et){t.msg="invalid distances set",r.mode=V;break}if(r.mode=F,e===d)break t;case F:r.mode=j;case j:if(at>=6&&st>=258){t.next_out=it,t.avail_out=st,t.next_in=rt,t.avail_in=at,r.hold=ot,r.bits=ht,s(t,ut),it=t.next_out,et=t.output,st=t.avail_out,rt=t.next_in,tt=t.input,at=t.avail_in,ot=r.hold,ht=r.bits,r.mode===L&&(r.back=-1);break}for(r.back=0;wt=(Bt=r.lencode[ot&(1<<r.lenbits)-1])>>>16&255,bt=65535&Bt,!((gt=Bt>>>24)<=ht);){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if(wt&&0==(240&wt)){for(vt=gt,mt=wt,yt=bt;wt=(Bt=r.lencode[yt+((ot&(1<<vt+mt)-1)>>vt)])>>>16&255,bt=65535&Bt,!(vt+(gt=Bt>>>24)<=ht);){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}ot>>>=vt,ht-=vt,r.back+=vt}if(ot>>>=gt,ht-=gt,r.back+=gt,r.length=bt,0===wt){r.mode=q;break}if(32&wt){r.back=-1,r.mode=L;break}if(64&wt){t.msg="invalid literal/length code",r.mode=V;break}r.extra=15&wt,r.mode=H;case H:if(r.extra){for(At=r.extra;ht<At;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}r.length+=ot&(1<<r.extra)-1,ot>>>=r.extra,ht-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=X;case X:for(;wt=(Bt=r.distcode[ot&(1<<r.distbits)-1])>>>16&255,bt=65535&Bt,!((gt=Bt>>>24)<=ht);){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if(0==(240&wt)){for(vt=gt,mt=wt,yt=bt;wt=(Bt=r.distcode[yt+((ot&(1<<vt+mt)-1)>>vt)])>>>16&255,bt=65535&Bt,!(vt+(gt=Bt>>>24)<=ht);){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}ot>>>=vt,ht-=vt,r.back+=vt}if(ot>>>=gt,ht-=gt,r.back+=gt,64&wt){t.msg="invalid distance code",r.mode=V;break}r.offset=bt,r.extra=15&wt,r.mode=Y;case Y:if(r.extra){for(At=r.extra;ht<At;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}r.offset+=ot&(1<<r.extra)-1,ot>>>=r.extra,ht-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=V;break}r.mode=W;case W:if(0===st)break t;if(dt=ut-st,r.offset>dt){if((dt=r.offset-dt)>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=V;break}dt>r.wnext?(dt-=r.wnext,pt=r.wsize-dt):pt=r.wnext-dt,dt>r.length&&(dt=r.length),_t=r.window}else _t=et,pt=it-r.offset,dt=r.length;dt>st&&(dt=st),st-=dt,r.length-=dt;do{et[it++]=_t[pt++]}while(--dt);0===r.length&&(r.mode=j);break;case q:if(0===st)break t;et[it++]=r.length,st--,r.mode=j;break;case $:if(r.wrap){for(;ht<32;){if(0===at)break t;at--,ot|=tt[rt++]<<ht,ht+=8}if(ut-=st,t.total_out+=ut,r.total+=ut,ut&&(t.adler=r.check=r.flags?a(r.check,et,ut,it-ut):i(r.check,et,ut,it-ut)),ut=st,(r.flags?ot:nt(ot))!==r.check){t.msg="incorrect data check",r.mode=V;break}ot=0,ht=0}r.mode=G;case G:if(r.wrap&&r.flags){for(;ht<32;){if(0===at)break t;at--,ot+=tt[rt++]<<ht,ht+=8}if(ot!==(4294967295&r.total)){t.msg="incorrect length check",r.mode=V;break}ot=0,ht=0}r.mode=K;case K:Et=_;break t;case V:Et=b;break t;case J:return v;case Q:default:return w}return t.next_out=it,t.avail_out=st,t.next_in=rt,t.avail_in=at,r.hold=ot,r.bits=ht,(r.wsize||ut!==t.avail_out&&r.mode<V&&(r.mode<$||e!==l))&&ct(t,t.output,t.next_out,ut-t.avail_out)?(r.mode=J,v):(ft-=t.avail_in,ut-=t.avail_out,t.total_in+=ft,t.total_out+=ut,r.total+=ut,r.wrap&&ut&&(t.adler=r.check=r.flags?a(r.check,et,ut,t.next_out-ut):i(r.check,et,ut,t.next_out-ut)),t.data_type=r.bits+(r.last?64:0)+(r.mode===L?128:0)+(r.mode===F||r.mode===O?256:0),(0===ft&&0===ut||e===l)&&Et===p&&(Et=m),Et)},r.inflateEnd=function(t){if(!t||!t.state)return w;var e=t.state;return e.window&&(e.window=null),t.state=null,p},r.inflateGetHeader=function(t,e){var r;return t&&t.state?0==(2&(r=t.state).wrap)?w:(r.head=e,e.done=!1,p):w},r.inflateSetDictionary=function(t,e){var r,n=e.length;return t&&t.state?0!==(r=t.state).wrap&&r.mode!==T?w:r.mode===T&&i(1,e,n,0)!==r.check?b:ct(t,e,n,n)?(r.mode=J,v):(r.havedict=1,p):w},r.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":12,"./adler32":14,"./crc32":16,"./inffast":19,"./inftrees":21}],21:[function(t,e,r){"use strict";var n=t("../utils/common"),i=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],a=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],o=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(t,e,r,h,f,u,l,c){var d,p,_,g,w,b,v,m,y,k=c.bits,E=0,x=0,A=0,B=0,z=0,U=0,I=0,C=0,S=0,T=0,L=null,D=0,R=new n.Buf16(16),O=new n.Buf16(16),M=null,N=0;for(E=0;E<=15;E++)R[E]=0;for(x=0;x<h;x++)R[e[r+x]]++;for(z=k,B=15;B>=1&&0===R[B];B--);if(z>B&&(z=B),0===B)return f[u++]=20971520,f[u++]=20971520,c.bits=1,0;for(A=1;A<B&&0===R[A];A++);for(z<A&&(z=A),C=1,E=1;E<=15;E++)if(C<<=1,(C-=R[E])<0)return-1;if(C>0&&(0===t||1!==B))return-1;for(O[1]=0,E=1;E<15;E++)O[E+1]=O[E]+R[E];for(x=0;x<h;x++)0!==e[r+x]&&(l[O[e[r+x]]++]=x);if(0===t?(L=M=l,b=19):1===t?(L=i,D-=257,M=a,N-=257,b=256):(L=s,M=o,b=-1),T=0,x=0,E=A,w=u,U=z,I=0,_=-1,g=(S=1<<z)-1,1===t&&S>852||2===t&&S>592)return 1;for(;;){v=E-I,l[x]<b?(m=0,y=l[x]):l[x]>b?(m=M[N+l[x]],y=L[D+l[x]]):(m=96,y=0),d=1<<E-I,A=p=1<<U;do{f[w+(T>>I)+(p-=d)]=v<<24|m<<16|y|0}while(0!==p);for(d=1<<E-1;T&d;)d>>=1;if(0!==d?(T&=d-1,T+=d):T=0,x++,0==--R[E]){if(E===B)break;E=e[r+l[x]]}if(E>z&&(T&g)!==_){for(0===I&&(I=z),w+=A,C=1<<(U=E-I);U+I<B&&!((C-=R[U+I])<=0);)U++,C<<=1;if(S+=1<<U,1===t&&S>852||2===t&&S>592)return 1;f[_=T&g]=z<<24|U<<16|w-u|0}}return 0!==T&&(f[w+T]=E-I<<24|64<<16|0),c.bits=z,0}},{"../utils/common":12}],22:[function(t,e,r){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],23:[function(t,e,r){"use strict";var n=t("../utils/common"),i=4,a=0,s=1,o=2;function h(t){for(var e=t.length;--e>=0;)t[e]=0}var f=0,u=1,l=2,c=29,d=256,p=d+1+c,_=30,g=19,w=2*p+1,b=15,v=16,m=7,y=256,k=16,E=17,x=18,A=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],B=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],z=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],U=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],I=new Array(2*(p+2));h(I);var C=new Array(2*_);h(C);var S=new Array(512);h(S);var T=new Array(256);h(T);var L=new Array(c);h(L);var D,R,O,M=new Array(_);function N(t,e,r,n,i){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=t&&t.length}function P(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function Z(t){return t<256?S[t]:S[256+(t>>>7)]}function F(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function j(t,e,r){t.bi_valid>v-r?(t.bi_buf|=e<<t.bi_valid&65535,F(t,t.bi_buf),t.bi_buf=e>>v-t.bi_valid,t.bi_valid+=r-v):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)}function H(t,e,r){j(t,r[2*e],r[2*e+1])}function X(t,e){var r=0;do{r|=1&t,t>>>=1,r<<=1}while(--e>0);return r>>>1}function Y(t,e,r){var n,i,a=new Array(b+1),s=0;for(n=1;n<=b;n++)a[n]=s=s+r[n-1]<<1;for(i=0;i<=e;i++){var o=t[2*i+1];0!==o&&(t[2*i]=X(a[o]++,o))}}function W(t){var e;for(e=0;e<p;e++)t.dyn_ltree[2*e]=0;for(e=0;e<_;e++)t.dyn_dtree[2*e]=0;for(e=0;e<g;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*y]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function q(t){t.bi_valid>8?F(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function $(t,e,r,n){var i=2*e,a=2*r;return t[i]<t[a]||t[i]===t[a]&&n[e]<=n[r]}function G(t,e,r){for(var n=t.heap[r],i=r<<1;i<=t.heap_len&&(i<t.heap_len&&$(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!$(e,n,t.heap[i],t.depth));)t.heap[r]=t.heap[i],r=i,i<<=1;t.heap[r]=n}function K(t,e,r){var n,i,a,s,o=0;if(0!==t.last_lit)do{n=t.pending_buf[t.d_buf+2*o]<<8|t.pending_buf[t.d_buf+2*o+1],i=t.pending_buf[t.l_buf+o],o++,0===n?H(t,i,e):(H(t,(a=T[i])+d+1,e),0!==(s=A[a])&&j(t,i-=L[a],s),H(t,a=Z(--n),r),0!==(s=B[a])&&j(t,n-=M[a],s))}while(o<t.last_lit);H(t,y,e)}function V(t,e){var r,n,i,a=e.dyn_tree,s=e.stat_desc.static_tree,o=e.stat_desc.has_stree,h=e.stat_desc.elems,f=-1;for(t.heap_len=0,t.heap_max=w,r=0;r<h;r++)0!==a[2*r]?(t.heap[++t.heap_len]=f=r,t.depth[r]=0):a[2*r+1]=0;for(;t.heap_len<2;)a[2*(i=t.heap[++t.heap_len]=f<2?++f:0)]=1,t.depth[i]=0,t.opt_len--,o&&(t.static_len-=s[2*i+1]);for(e.max_code=f,r=t.heap_len>>1;r>=1;r--)G(t,a,r);i=h;do{r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],G(t,a,1),n=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=n,a[2*i]=a[2*r]+a[2*n],t.depth[i]=(t.depth[r]>=t.depth[n]?t.depth[r]:t.depth[n])+1,a[2*r+1]=a[2*n+1]=i,t.heap[1]=i++,G(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],function(t,e){var r,n,i,a,s,o,h=e.dyn_tree,f=e.max_code,u=e.stat_desc.static_tree,l=e.stat_desc.has_stree,c=e.stat_desc.extra_bits,d=e.stat_desc.extra_base,p=e.stat_desc.max_length,_=0;for(a=0;a<=b;a++)t.bl_count[a]=0;for(h[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r<w;r++)(a=h[2*h[2*(n=t.heap[r])+1]+1]+1)>p&&(a=p,_++),h[2*n+1]=a,n>f||(t.bl_count[a]++,s=0,n>=d&&(s=c[n-d]),o=h[2*n],t.opt_len+=o*(a+s),l&&(t.static_len+=o*(u[2*n+1]+s)));if(0!==_){do{for(a=p-1;0===t.bl_count[a];)a--;t.bl_count[a]--,t.bl_count[a+1]+=2,t.bl_count[p]--,_-=2}while(_>0);for(a=p;0!==a;a--)for(n=t.bl_count[a];0!==n;)(i=t.heap[--r])>f||(h[2*i+1]!==a&&(t.opt_len+=(a-h[2*i+1])*h[2*i],h[2*i+1]=a),n--)}}(t,e),Y(a,f,t.bl_count)}function J(t,e,r){var n,i,a=-1,s=e[1],o=0,h=7,f=4;for(0===s&&(h=138,f=3),e[2*(r+1)+1]=65535,n=0;n<=r;n++)i=s,s=e[2*(n+1)+1],++o<h&&i===s||(o<f?t.bl_tree[2*i]+=o:0!==i?(i!==a&&t.bl_tree[2*i]++,t.bl_tree[2*k]++):o<=10?t.bl_tree[2*E]++:t.bl_tree[2*x]++,o=0,a=i,0===s?(h=138,f=3):i===s?(h=6,f=3):(h=7,f=4))}function Q(t,e,r){var n,i,a=-1,s=e[1],o=0,h=7,f=4;for(0===s&&(h=138,f=3),n=0;n<=r;n++)if(i=s,s=e[2*(n+1)+1],!(++o<h&&i===s)){if(o<f)do{H(t,i,t.bl_tree)}while(0!=--o);else 0!==i?(i!==a&&(H(t,i,t.bl_tree),o--),H(t,k,t.bl_tree),j(t,o-3,2)):o<=10?(H(t,E,t.bl_tree),j(t,o-3,3)):(H(t,x,t.bl_tree),j(t,o-11,7));o=0,a=i,0===s?(h=138,f=3):i===s?(h=6,f=3):(h=7,f=4)}}h(M);var tt=!1;function et(t,e,r,i){j(t,(f<<1)+(i?1:0),3),function(t,e,r,i){q(t),i&&(F(t,r),F(t,~r)),n.arraySet(t.pending_buf,t.window,e,r,t.pending),t.pending+=r}(t,e,r,!0)}r._tr_init=function(t){tt||(function(){var t,e,r,n,i,a=new Array(b+1);for(r=0,n=0;n<c-1;n++)for(L[n]=r,t=0;t<1<<A[n];t++)T[r++]=n;for(T[r-1]=n,i=0,n=0;n<16;n++)for(M[n]=i,t=0;t<1<<B[n];t++)S[i++]=n;for(i>>=7;n<_;n++)for(M[n]=i<<7,t=0;t<1<<B[n]-7;t++)S[256+i++]=n;for(e=0;e<=b;e++)a[e]=0;for(t=0;t<=143;)I[2*t+1]=8,t++,a[8]++;for(;t<=255;)I[2*t+1]=9,t++,a[9]++;for(;t<=279;)I[2*t+1]=7,t++,a[7]++;for(;t<=287;)I[2*t+1]=8,t++,a[8]++;for(Y(I,p+1,a),t=0;t<_;t++)C[2*t+1]=5,C[2*t]=X(t,5);D=new N(I,A,d+1,p,b),R=new N(C,B,0,_,b),O=new N(new Array(0),z,0,g,m)}(),tt=!0),t.l_desc=new P(t.dyn_ltree,D),t.d_desc=new P(t.dyn_dtree,R),t.bl_desc=new P(t.bl_tree,O),t.bi_buf=0,t.bi_valid=0,W(t)},r._tr_stored_block=et,r._tr_flush_block=function(t,e,r,n){var h,f,c=0;t.level>0?(t.strm.data_type===o&&(t.strm.data_type=function(t){var e,r=4093624447;for(e=0;e<=31;e++,r>>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return a;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return s;for(e=32;e<d;e++)if(0!==t.dyn_ltree[2*e])return s;return a}(t)),V(t,t.l_desc),V(t,t.d_desc),c=function(t){var e;for(J(t,t.dyn_ltree,t.l_desc.max_code),J(t,t.dyn_dtree,t.d_desc.max_code),V(t,t.bl_desc),e=g-1;e>=3&&0===t.bl_tree[2*U[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),h=t.opt_len+3+7>>>3,(f=t.static_len+3+7>>>3)<=h&&(h=f)):h=f=r+5,r+4<=h&&-1!==e?et(t,e,r,n):t.strategy===i||f===h?(j(t,(u<<1)+(n?1:0),3),K(t,I,C)):(j(t,(l<<1)+(n?1:0),3),function(t,e,r,n){var i;for(j(t,e-257,5),j(t,r-1,5),j(t,n-4,4),i=0;i<n;i++)j(t,t.bl_tree[2*U[i]+1],3);Q(t,t.dyn_ltree,e-1),Q(t,t.dyn_dtree,r-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,c+1),K(t,t.dyn_ltree,t.dyn_dtree)),W(t),n&&q(t)},r._tr_tally=function(t,e,r){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(T[r]+d+1)]++,t.dyn_dtree[2*Z(e)]++),t.last_lit===t.lit_bufsize-1},r._tr_align=function(t){j(t,u<<1,3),H(t,y,I),function(t){16===t.bi_valid?(F(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{"../utils/common":12}],24:[function(t,e,r){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],25:[function(t,e,r){(function(t){!function(n){var i="object"==typeof r&&r,a="object"==typeof e&&e&&e.exports==i&&e,s="object"==typeof t&&t;s.global!==s&&s.window!==s||(n=s);var o,h,f,u=String.fromCharCode;function l(t){for(var e,r,n=[],i=0,a=t.length;i<a;)(e=t.charCodeAt(i++))>=55296&&e<=56319&&i<a?56320==(64512&(r=t.charCodeAt(i++)))?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),i--):n.push(e);return n}function c(t){if(t>=55296&&t<=57343)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function d(t,e){return u(t>>e&63|128)}function p(t){if(0==(4294967168&t))return u(t);var e="";return 0==(4294965248&t)?e=u(t>>6&31|192):0==(4294901760&t)?(c(t),e=u(t>>12&15|224),e+=d(t,6)):0==(4292870144&t)&&(e=u(t>>18&7|240),e+=d(t,12),e+=d(t,6)),e+=u(63&t|128)}function _(){if(f>=h)throw Error("Invalid byte index");var t=255&o[f];if(f++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function g(){var t,e;if(f>h)throw Error("Invalid byte index");if(f==h)return!1;if(t=255&o[f],f++,0==(128&t))return t;if(192==(224&t)){if((e=(31&t)<<6|_())>=128)return e;throw Error("Invalid continuation byte")}if(224==(240&t)){if((e=(15&t)<<12|_()<<6|_())>=2048)return c(e),e;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=(7&t)<<18|_()<<12|_()<<6|_())>=65536&&e<=1114111)return e;throw Error("Invalid UTF-8 detected")}var w={version:"2.1.2",encode:function(t){for(var e=l(t),r=e.length,n=-1,i="";++n<r;)i+=p(e[n]);return i},decode:function(t){o=l(t),h=o.length,f=0;for(var e,r=[];!1!==(e=g());)r.push(e);return function(t){for(var e,r=t.length,n=-1,i="";++n<r;)(e=t[n])>65535&&(i+=u((e-=65536)>>>10&1023|55296),e=56320|1023&e),i+=u(e);return i}(r)}};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return w});else if(i&&!i.nodeType)if(a)a.exports=w;else{var b={}.hasOwnProperty;for(var v in w)b.call(w,v)&&(i[v]=w[v])}else n.utf8=w}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],26:[function(t,e,r){(function(){var r,n,i;n=t("fast-png"),r=t("jpeg-js"),i=function(t){var e;return e=window.atob(t.slice(t.indexOf(",")+1)),new Uint8Array(new ArrayBuffer(e.length)).map(function(t,r){return e.charCodeAt(r)})},window.synchroDecoder=function(t){var e,a,s;return e=i(t),s=function(){var t,i;try{try{return n.decode(e)}catch(t){if((a=t).message.includes("wrong PNG signature"))return r.decode(e);throw a}}catch(i){return i,alert("Not a valid PNG or JPEG")}}(),new ImageData(new Uint8ClampedArray(s.data),s.width,s.height)},e.exports=synchroDecoder}).call(this)},{"fast-png":3,"jpeg-js":6}]},{},[26]);</script>
+    <script>// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+// This is CodeMirror (https://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}, sel_mouse = {origin: "*mouse"}, 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, 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) }
+
+  function collapsedSpanAround(line, ch) {
+    var sps = sawCollapsedSpans && line.markedSpans, found;
+    if (sps) { for (var i = 0; i < sps.length; ++i) {
+      var sp = sps[i];
+      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&
+          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }
+    } }
+    return found
+  }
+
+  // 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$$1, from, to, marker) {
+    var line = getLine(doc, lineNo$$1);
+    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$$1 = emitter._handlers || (emitter._handlers = {});
+      map$$1[type] = (map$$1[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$$1 = emitter._handlers, arr = map$$1 && map$$1[type];
+      if (arr) {
+        var index = indexOf(arr, f);
+        if (index > -1)
+          { map$$1[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$$1;
+    try {range$$1 = te.ownerDocument.selection.createRange();}
+    catch(e) {}
+    if (!range$$1 || range$$1.parentElement() != te) { return false }
+    return range$$1.compareEndPoints("StartToEnd", range$$1) != 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
+  }
+
+  // Known modes, by name and by MIME
+  var modes = {}, 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 = {}, 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: 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, css, attributes) {
+    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 (attributes) {
+        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class")
+          { token.setAttribute(attr, attributes[attr]); } }
+      }
+      return builder.content.appendChild(token)
+    }
+    builder.content.appendChild(content);
+  }
+
+  // Change some spaces to NBSP to prevent the browser from collapsing
+  // trailing spaces at the end of a line when rendering text (issue #1362).
+  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, css, attributes) {
+      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, css, attributes) }
+        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);
+        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, collapsed, attributes;
+    for (;;) {
+      if (nextChange == pos) { // Update current marker set
+        spanStyle = spanEndStyle = spanStartStyle = css = "";
+        attributes = null;
+        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); }
+            // support for the old title property
+            // https://github.com/codemirror/CodeMirror/pull/5673
+            if (m.title) { (attributes || (attributes = {})).title = m.title; }
+            if (m.attributes) {
+              for (var attr in m.attributes)
+                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }
+            }
+            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 : "", css, attributes);
+          }
+          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$$1, 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$$1.length; i += 3) {
+      mStart = map$$1[i];
+      mEnd = map$$1[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$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {
+        end = mEnd - mStart;
+        start = end - 1;
+        if (ch >= mEnd) { collapse = "right"; }
+      }
+      if (start != null) {
+        node = map$$1[i + 2];
+        if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
+          { collapse = bias; }
+        if (bias == "left" && start == 0)
+          { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {
+            node = map$$1[(i -= 3) + 2];
+            collapse = "left";
+          } }
+        if (bias == "right" && start == mEnd - mStart)
+          { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {
+            node = map$$1[(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 collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0));
+      if (!collapsed) { return found }
+      var rangeEnd = collapsed.find(1);
+      if (rangeEnd.line == lineN) { return rangeEnd }
+      lineObj = getLine(doc, lineN = rangeEnd.line);
+    }
+  }
+
+  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$$1, 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$$1 = 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$$1, 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$$1; box.bottom += widgetHeight$$1;
+      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$$1 <= 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$$1, ch, sticky), "line", lineObj, preparedMeasure);
+      baseX = coords.left;
+      outside = y < coords.top || y >= coords.bottom;
+    }
+
+    ch = skipExtendingChars(lineObj.text, ch, 1);
+    return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)
+  }
+
+  function coordsBidiPart(cm, lineObj, lineNo$$1, 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$$1, 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$$1, 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$$1 = doc.sel.ranges[i];
+      if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }
+      var collapsed = range$$1.empty();
+      if (collapsed || cm.options.showCursorWhenSelecting)
+        { drawSelectionCursor(cm, range$$1.head, curFragment); }
+      if (!collapsed)
+        { drawSelectionRange(cm, range$$1, 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$$1, 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$$1.from(), sTo = range$$1.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], wrapping = cm.options.lineWrapping;
+      var height = (void 0), width = 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;
+        // Check that lines don't extend past the right of the current
+        // editor width
+        if (!wrapping && cur.text.firstChild)
+          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }
+      }
+      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]); } }
+      }
+      if (width > cm.display.sizerWidth) {
+        var chWidth = Math.ceil(width / charWidth(cm.display));
+        if (chWidth > cm.display.maxLineLength) {
+          cm.display.maxLineLength = chWidth;
+          cm.display.maxLine = cur.line;
+          cm.display.maxLineChanged = true;
+        }
+      }
+    }
+  }
+
+  // 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$$1) {
+    resolveScrollToPos(cm);
+    cm.curOp.scrollToPos = range$$1;
+  }
+
+  // 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$$1 = cm.curOp.scrollToPos;
+    if (range$$1) {
+      cm.curOp.scrollToPos = null;
+      var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);
+      scrollToCoordsRange(cm, from, to, range$$1.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");
+    vert.tabIndex = horiz.tabIndex = -1;
+    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$$1 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
+          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);
+      if (elt$$1 != 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: 0,       // 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;
+    if (op) { 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$$1 = document.createRange();
+      range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);
+      range$$1.collapse(false);
+      sel.removeAllRanges();
+      sel.addRange(range$$1);
+      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);
+    }
+  }
+
+  // Since the delta values reported on mouse wheel events are
+  // unstandardized between browsers and even browser versions, and
+  // generally horribly unpredictable, this code starts by measuring
+  // the scroll effect that the first few mouse wheel events have,
+  // and, from that, detects the way it can convert deltas to pixel
+  // offsets afterwards.
+  //
+  // The reason we want to know the amount a wheel event will scroll
+  // is that it gives us a chance to update the display before the
+  // actual scrolling happens, reducing flickering.
+
+  var wheelSamples = 0, 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(cm, ranges, primIndex) {
+    var mayTouch = cm && cm.options.selectionsMayTouch;
+    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];
+      var diff = cmp(prev.to(), cur.from());
+      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 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(doc.cm, 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$$1) {
+    function spansFor(n) {return markedSpans ? markedSpans[n] : null}
+    function update(line, text, spans) {
+      updateLine(line, text, spans, estimateHeight$$1);
+      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$$1)); }
+      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$$1));
+        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) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||
+          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(doc.cm, 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(doc.cm, 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(doc.cm, 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 = 1;
+      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(doc.cm, 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) {
+      if (doc.cm) { doc.cm.curOp.updateInput = 2; }
+      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) {
+    var suppress = doc.cm && doc.cm.state.suppressEdits;
+    if (suppress && !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 if (suppress) {
+        source.push(event);
+        return
+      } 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) {
+    var assign;
+
+    if (!to) { to = from; }
+    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }
+    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() { return this.lines.length },
+
+    // Remove the n lines at offset 'at'.
+    removeInner: function(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(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(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(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() { return this.size },
+
+    removeInner: function(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(lines) {
+      var this$1 = this;
+
+      for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }
+    },
+
+    insertInner: function(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() {
+      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(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 }
+    if (!lineIsHidden(this.doc, line)) { 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
+    });
+    if (cm) { 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.startStyle || marker.endStyle || marker.css ||
+               marker.attributes || marker.title)
+        { 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$$1 = this.sel.primary(), pos;
+      if (start == null || start == "head") { pos = range$$1.head; }
+      else if (start == "anchor") { pos = range$$1.anchor; }
+      else if (start == "end" || start == "to" || start === false) { pos = range$$1.to(); }
+      else { pos = range$$1.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(this.cm, 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(this.cm, 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$$1 = sel.ranges[i];
+        changes[i] = {from: range$$1.from(), to: range$$1.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$$1 = 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$$1 == from.line && from.ch >= span.to ||
+                span.from == null && lineNo$$1 != from.line ||
+                span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&
+              (!filter || filter(span.marker)))
+            { found.push(span.marker.parent || span.marker); }
+        } }
+        ++lineNo$$1;
+      });
+      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$$1 = 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$$1;
+      });
+      return clipPos(this, Pos(lineNo$$1, 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"), editors = [];
+    for (var i = 0; i < byClass.length; i++) {
+      var cm = byClass[i].CodeMirror;
+      if (cm) { editors.push(cm); }
+    }
+    if (editors.length) { editors[0].operation(function () {
+      for (var i = 0; i < editors.length; i++) { f(editors[i]); }
+    }); }
+  }
+
+  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;
+    // Might be a text scaling operation, clear size caches.
+    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
+    d.scrollbarsClipped = false;
+    cm.setSize();
+  }
+
+  var keyNames = {
+    3: "Pause", 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", 145: "ScrollLock",
+    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$$1, handle, context) {
+    map$$1 = getKeyMap(map$$1);
+    var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];
+    if (found === false) { return "nothing" }
+    if (found === "...") { return "multi" }
+    if (found != null && handle(found)) { return "handled" }
+
+    if (map$$1.fallthrough) {
+      if (Object.prototype.toString.call(map$$1.fallthrough) != "[object Array]")
+        { return lookupKey(key, map$$1.fallthrough, handle, context) }
+      for (var i = 0; i < map$$1.fallthrough.length; i++) {
+        var result = lookupKey(key, map$$1.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 }
+    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,
+    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)
+    if (event.keyCode == 3 && event.code) { name = event.code; }
+    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, 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) { cm.display.input.onContextMenu(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(display.wrapper.ownerDocument, "mouseup", dragEnd);
+      off(display.wrapper.ownerDocument, "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 () {display.wrapper.ownerDocument.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(display.wrapper.ownerDocument, "mouseup", dragEnd);
+    on(display.wrapper.ownerDocument, "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$$1 = rangeForUnit(cm, start, behavior.unit);
+      if (behavior.extend)
+        { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }
+      else
+        { ourRange = range$$1; }
+    }
+
+    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(cm, ranges.concat([ourRange]), ourIndex),
+                   {scroll: false, origin: "*mouse"});
+    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
+      setSelection(doc, normalizeSelection(cm, 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(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
+                     {origin: "*mouse", scroll: false});
+        cm.scrollIntoView(pos);
+      } else {
+        var oldRange = ourRange;
+        var range$$1 = rangeForUnit(cm, pos, behavior.unit);
+        var anchor = oldRange.anchor, head;
+        if (cmp(range$$1.anchor, anchor) > 0) {
+          head = range$$1.head;
+          anchor = minPos(oldRange.from(), range$$1.anchor);
+        } else {
+          head = range$$1.anchor;
+          anchor = maxPos(oldRange.to(), range$$1.head);
+        }
+        var ranges$1 = startSel.ranges.slice(0);
+        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));
+        setSelection(doc, normalizeSelection(cm, 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(display.wrapper.ownerDocument, "mousemove", move);
+      off(display.wrapper.ownerDocument, "mouseup", up);
+      doc.history.lastSelOrigin = null;
+    }
+
+    var move = operation(cm, function (e) {
+      if (e.buttons === 0 || !e_button(e)) { done(e); }
+      else { extend(e); }
+    });
+    var up = operation(cm, done);
+    cm.state.selectingText = up;
+    on(display.wrapper.ownerDocument, "mousemove", move);
+    on(display.wrapper.ownerDocument, "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$$1) {
+    var anchor = range$$1.anchor;
+    var head = range$$1.head;
+    var anchorLine = getLine(cm.doc, anchor.line);
+    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }
+    var order = getOrder(anchorLine);
+    if (!order) { return range$$1 }
+    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];
+    if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }
+    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);
+    if (boundary == 0 || boundary == order.length) { return range$$1 }
+
+    // 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$$1 : 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 }
+    if (!captureRightClick) { 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("selectionsMayTouch", false);
+
+    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);
+    option("phrases", null);
+  }
+
+  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); }
+    else if (options.mode) { doc.modeOption = options.mode; }
+    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.
+    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 pasting 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 = cm.curOp.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$$1 = sel.ranges[i$1];
+      var from = range$$1.from(), to = range$$1.to();
+      if (range$$1.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 (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted)
+          { from = to = Pos(from.line, 0); }
+      }
+      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);
+    if (cm.curOp.updateInput < 2) { 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$$1 = sel.ranges[i];
+      if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }
+      var mode = cm.getModeAt(range$$1.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$$1.head.line, "smart");
+            break
+          } }
+      } else if (mode.electricInput) {
+        if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))
+          { indented = indentLine(cm, range$$1.head.line, "smart"); }
+      }
+      if (indented) { signalLater(cm, "electricInput", cm, range$$1.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$$1, bottom) {
+        this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$$1));
+      },
+      removeKeyMap: function(map$$1) {
+        var maps = this.state.keyMaps;
+        for (var i = 0; i < maps.length; ++i)
+          { if (maps[i] == map$$1 || maps[i].name == map$$1) {
+            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$$1 = ranges[i];
+          if (!range$$1.empty()) {
+            var from = range$$1.from(), to = range$$1.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$$1.head.line > end) {
+            indentLine(this$1, range$$1.head.line, how, true);
+            end = range$$1.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$$1 = this.doc.sel.primary();
+        if (start == null) { pos = range$$1.head; }
+        else if (typeof start == "object") { pos = clipPos(this.doc, start); }
+        else { pos = start ? range$$1.from() : range$$1.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$$1) {
+          if (this$1.display.shift || this$1.doc.extend || range$$1.empty())
+            { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }
+          else
+            { return dir < 0 ? range$$1.from() : range$$1.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$$1) {
+            var other = findPosH(doc, range$$1.head, dir, unit, false);
+            return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.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$$1) {
+          if (collapse)
+            { return dir < 0 ? range$$1.from() : range$$1.to() }
+          var headPos = cursorCoords(this$1, range$$1.head, "div");
+          if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }
+          goals.push(headPos.left);
+          var pos = findPosV(this$1, headPos, dir, unit);
+          if (unit == "page" && range$$1 == 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$$1, margin) {
+        if (range$$1 == null) {
+          range$$1 = {from: this.doc.sel.primary().head, to: null};
+          if (margin == null) { margin = this.options.cursorScrollMargin; }
+        } else if (typeof range$$1 == "number") {
+          range$$1 = {from: Pos(range$$1, 0), to: null};
+        } else if (range$$1.from == null) {
+          range$$1 = {from: range$$1, to: null};
+        }
+        if (!range$$1.to) { range$$1.to = range$$1.from; }
+        range$$1.margin = margin || 0;
+
+        if (range$$1.from.line != null) {
+          scrollToRange(this, range$$1);
+        } else {
+          scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.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$$1 = this.display.viewFrom;
+        this.doc.iter(lineNo$$1, 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$$1, "widget"); break } } }
+          ++lineNo$$1;
+        });
+        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
+      }),
+
+      phrase: function(phraseText) {
+        var phrases = this.options.phrases;
+        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText
+      },
+
+      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.getSelection = function () {
+    return this.cm.display.wrapper.ownerDocument.getSelection()
+  };
+
+  ContentEditableInput.prototype.showPrimarySelection = function () {
+    var sel = this.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$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;
+      end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.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 = this.getSelection();
+    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;
+    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;
+  };
+
+  ContentEditableInput.prototype.selectionInEditor = function () {
+    var sel = this.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 = this.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 = this.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 || this.composing) { 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(), extraLinebreak = false;
+    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
+    function close() {
+      if (closing) {
+        text += lineSep;
+        if (extraLinebreak) { text += lineSep; }
+        closing = extraLinebreak = false;
+      }
+    }
+    function addText(str) {
+      if (str) {
+        close();
+        text += str;
+      }
+    }
+    function walk(node) {
+      if (node.nodeType == 1) {
+        var cmText = node.getAttribute("cm-text");
+        if (cmText) {
+          addText(cmText);
+          return
+        }
+        var markerID = node.getAttribute("cm-marker"), range$$1;
+        if (markerID) {
+          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));
+          if (found.length && (range$$1 = found[0].find(0)))
+            { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }
+          return
+        }
+        if (node.getAttribute("contenteditable") == "false") { return }
+        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);
+        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }
+
+        if (isBlock) { close(); }
+        for (var i = 0; i < node.childNodes.length; i++)
+          { walk(node.childNodes[i]); }
+
+        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }
+        if (isBlock) { closing = true; }
+      } else if (node.nodeType == 3) {
+        addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
+      }
+    }
+    for (;;) {
+      walk(from);
+      if (from == to) { break }
+      from = from.nextSibling;
+      extraLinebreak = false;
+    }
+    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$$1 = i < 0 ? measure.map : maps[i];
+        for (var j = 0; j < map$$1.length; j += 3) {
+          var curNode = map$$1[j + 2];
+          if (curNode == textNode || curNode == topNode) {
+            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);
+            var ch = map$$1[j] + offset;
+            if (offset < 0 || curNode != textNode) { ch = map$$1[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;
+    this.createField(display);
+    var te = this.textarea;
+
+    display.wrapper.insertBefore(this.wrapper, 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.createField = function (_display) {
+    // Wraps and hides input textarea
+    this.wrapper = hiddenTextarea();
+    // The semihidden textarea that is focused when the editor is
+    // focused, and receives input.
+    this.textarea = this.wrapper.firstChild;
+  };
+
+  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;
+    if (input.contextMenuPending) { input.contextMenuPending(); }
+    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;
+    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();
+    input.wrapper.style.cssText = "position: static";
+    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 = rehide;
+    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() {
+      if (input.contextMenuPending != rehide) { return }
+      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);
+  CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput};
+
+  // 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.42.2";
+
+  return CodeMirror;
+
+})));
+</script>
+    <script>// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://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 noOptions = {};
+  var nonWS = /[^\s\u00a0]/;
+  var Pos = CodeMirror.Pos;
+
+  function firstNonWS(str) {
+    var found = str.search(nonWS);
+    return found == -1 ? 0 : found;
+  }
+
+  CodeMirror.commands.toggleComment = function(cm) {
+    cm.toggleComment();
+  };
+
+  CodeMirror.defineExtension("toggleComment", function(options) {
+    if (!options) options = noOptions;
+    var cm = this;
+    var minLine = Infinity, ranges = this.listSelections(), mode = null;
+    for (var i = ranges.length - 1; i >= 0; i--) {
+      var from = ranges[i].from(), to = ranges[i].to();
+      if (from.line >= minLine) continue;
+      if (to.line >= minLine) to = Pos(minLine, 0);
+      minLine = from.line;
+      if (mode == null) {
+        if (cm.uncomment(from, to, options)) mode = "un";
+        else { cm.lineComment(from, to, options); mode = "line"; }
+      } else if (mode == "un") {
+        cm.uncomment(from, to, options);
+      } else {
+        cm.lineComment(from, to, options);
+      }
+    }
+  });
+
+  // Rough heuristic to try and detect lines that are part of multi-line string
+  function probablyInsideString(cm, pos, line) {
+    return /\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\'\"\`]/.test(line)
+  }
+
+  function getMode(cm, pos) {
+    var mode = cm.getMode()
+    return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos)
+  }
+
+  CodeMirror.defineExtension("lineComment", function(from, to, options) {
+    if (!options) options = noOptions;
+    var self = this, mode = getMode(self, from);
+    var firstLine = self.getLine(from.line);
+    if (firstLine == null || probablyInsideString(self, from, firstLine)) return;
+
+    var commentString = options.lineComment || mode.lineComment;
+    if (!commentString) {
+      if (options.blockCommentStart || mode.blockCommentStart) {
+        options.fullLines = true;
+        self.blockComment(from, to, options);
+      }
+      return;
+    }
+
+    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1);
+    var pad = options.padding == null ? " " : options.padding;
+    var blankLines = options.commentBlankLines || from.line == to.line;
+
+    self.operation(function() {
+      if (options.indent) {
+        var baseString = null;
+        for (var i = from.line; i < end; ++i) {
+          var line = self.getLine(i);
+          var whitespace = line.slice(0, firstNonWS(line));
+          if (baseString == null || baseString.length > whitespace.length) {
+            baseString = whitespace;
+          }
+        }
+        for (var i = from.line; i < end; ++i) {
+          var line = self.getLine(i), cut = baseString.length;
+          if (!blankLines && !nonWS.test(line)) continue;
+          if (line.slice(0, cut) != baseString) cut = firstNonWS(line);
+          self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut));
+        }
+      } else {
+        for (var i = from.line; i < end; ++i) {
+          if (blankLines || nonWS.test(self.getLine(i)))
+            self.replaceRange(commentString + pad, Pos(i, 0));
+        }
+      }
+    });
+  });
+
+  CodeMirror.defineExtension("blockComment", function(from, to, options) {
+    if (!options) options = noOptions;
+    var self = this, mode = getMode(self, from);
+    var startString = options.blockCommentStart || mode.blockCommentStart;
+    var endString = options.blockCommentEnd || mode.blockCommentEnd;
+    if (!startString || !endString) {
+      if ((options.lineComment || mode.lineComment) && options.fullLines != false)
+        self.lineComment(from, to, options);
+      return;
+    }
+    if (/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return
+
+    var end = Math.min(to.line, self.lastLine());
+    if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end;
+
+    var pad = options.padding == null ? " " : options.padding;
+    if (from.line > end) return;
+
+    self.operation(function() {
+      if (options.fullLines != false) {
+        var lastLineHasText = nonWS.test(self.getLine(end));
+        self.replaceRange(pad + endString, Pos(end));
+        self.replaceRange(startString + pad, Pos(from.line, 0));
+        var lead = options.blockCommentLead || mode.blockCommentLead;
+        if (lead != null) for (var i = from.line + 1; i <= end; ++i)
+          if (i != end || lastLineHasText)
+            self.replaceRange(lead + pad, Pos(i, 0));
+      } else {
+        self.replaceRange(endString, to);
+        self.replaceRange(startString, from);
+      }
+    });
+  });
+
+  CodeMirror.defineExtension("uncomment", function(from, to, options) {
+    if (!options) options = noOptions;
+    var self = this, mode = getMode(self, from);
+    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end);
+
+    // Try finding line comments
+    var lineString = options.lineComment || mode.lineComment, lines = [];
+    var pad = options.padding == null ? " " : options.padding, didSomething;
+    lineComment: {
+      if (!lineString) break lineComment;
+      for (var i = start; i <= end; ++i) {
+        var line = self.getLine(i);
+        var found = line.indexOf(lineString);
+        if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;
+        if (found == -1 && nonWS.test(line)) break lineComment;
+        if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;
+        lines.push(line);
+      }
+      self.operation(function() {
+        for (var i = start; i <= end; ++i) {
+          var line = lines[i - start];
+          var pos = line.indexOf(lineString), endPos = pos + lineString.length;
+          if (pos < 0) continue;
+          if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length;
+          didSomething = true;
+          self.replaceRange("", Pos(i, pos), Pos(i, endPos));
+        }
+      });
+      if (didSomething) return true;
+    }
+
+    // Try block comments
+    var startString = options.blockCommentStart || mode.blockCommentStart;
+    var endString = options.blockCommentEnd || mode.blockCommentEnd;
+    if (!startString || !endString) return false;
+    var lead = options.blockCommentLead || mode.blockCommentLead;
+    var startLine = self.getLine(start), open = startLine.indexOf(startString)
+    if (open == -1) return false
+    var endLine = end == start ? startLine : self.getLine(end)
+    var close = endLine.indexOf(endString, end == start ? open + startString.length : 0);
+    var insideStart = Pos(start, open + 1), insideEnd = Pos(end, close + 1)
+    if (close == -1 ||
+        !/comment/.test(self.getTokenTypeAt(insideStart)) ||
+        !/comment/.test(self.getTokenTypeAt(insideEnd)) ||
+        self.getRange(insideStart, insideEnd, "\n").indexOf(endString) > -1)
+      return false;
+
+    // Avoid killing block comments completely outside the selection.
+    // Positions of the last startString before the start of the selection, and the first endString after it.
+    var lastStart = startLine.lastIndexOf(startString, from.ch);
+    var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length);
+    if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false;
+    // Positions of the first endString after the end of the selection, and the last startString before it.
+    firstEnd = endLine.indexOf(endString, to.ch);
+    var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch);
+    lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart;
+    if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false;
+
+    self.operation(function() {
+      self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),
+                        Pos(end, close + endString.length));
+      var openEnd = open + startString.length;
+      if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length;
+      self.replaceRange("", Pos(start, open), Pos(start, openEnd));
+      if (lead) for (var i = start + 1; i <= end; ++i) {
+        var line = self.getLine(i), found = line.indexOf(lead);
+        if (found == -1 || nonWS.test(line.slice(0, found))) continue;
+        var foundEnd = found + lead.length;
+        if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length;
+        self.replaceRange("", Pos(i, found), Pos(i, foundEnd));
+      }
+    });
+    return true;
+  });
+});
+</script>
+    <script>// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://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);
+    }
+    CodeMirror.addClass(wrap, 'dialog-opened');
+    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;
+        CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');
+        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;
+      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');
+      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);
+      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');
+      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: https://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: https://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 ensureFlags(regexp, flags) {
+    var current = regexpFlags(regexp), target = current
+    for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1)
+      target += flags.charAt(i)
+    return current == target ? regexp : new RegExp(regexp.source, target)
+  }
+
+  function maybeMultiline(regexp) {
+    return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source)
+  }
+
+  function searchRegexpForward(doc, regexp, start) {
+    regexp = ensureFlags(regexp, "g")
+    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 = ensureFlags(regexp, "gm")
+    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++) {
+        if (line > last) break
+        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 = ensureFlags(regexp, "g")
+    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 = ensureFlags(regexp, "gm")
+    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 = ensureFlags(query, "gm")
+      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: https://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;
+  }
+
+  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, getQueryDialog(cm), 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, getQueryDialog(cm), "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; }
+  });}
+
+
+  function getQueryDialog(cm)  {
+    return '<span class="CodeMirror-search-label">' + cm.phrase("Search:") + '</span> <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">' + cm.phrase("(Use /re/ syntax for regexp search)") + '</span>';
+  }
+  function getReplaceQueryDialog(cm) {
+    return ' <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">' + cm.phrase("(Use /re/ syntax for regexp search)") + '</span>';
+  }
+  function getReplacementQueryDialog(cm) {
+    return '<span class="CodeMirror-search-label">' + cm.phrase("With:") + '</span> <input type="text" style="width: 10em" class="CodeMirror-search-field"/>';
+  }
+  function getDoReplaceConfirm(cm) {
+    return '<span class="CodeMirror-search-label">' + cm.phrase("Replace?") + '</span> <button>' + cm.phrase("Yes") + '</button> <button>' + cm.phrase("No") + '</button> <button>' + cm.phrase("All") + '</button> <button>' + cm.phrase("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 ? cm.phrase("Replace all:") : cm.phrase("Replace:")) + '</span>';
+    dialog(cm, dialogText + getReplaceQueryDialog(cm), dialogText, query, function(query) {
+      if (!query) return;
+      query = parseQuery(query);
+      dialog(cm, getReplacementQueryDialog(cm), cm.phrase("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, getDoReplaceConfirm(cm), cm.phrase("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>// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://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 HINT_ELEMENT_CLASS        = "CodeMirror-hint";
+  var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active";
+
+  // This is the old interface, kept around for now to stay
+  // backwards-compatible.
+  CodeMirror.showHint = function(cm, getHints, options) {
+    if (!getHints) return cm.showHint(options);
+    if (options && options.async) getHints.async = true;
+    var newOpts = {hint: getHints};
+    if (options) for (var prop in options) newOpts[prop] = options[prop];
+    return cm.showHint(newOpts);
+  };
+
+  CodeMirror.defineExtension("showHint", function(options) {
+    options = parseOptions(this, this.getCursor("start"), options);
+    var selections = this.listSelections()
+    if (selections.length > 1) return;
+    // By default, don't allow completion when something is selected.
+    // A hint function can have a `supportsSelection` property to
+    // indicate that it can handle selections.
+    if (this.somethingSelected()) {
+      if (!options.hint.supportsSelection) return;
+      // Don't try with cross-line selections
+      for (var i = 0; i < selections.length; i++)
+        if (selections[i].head.line != selections[i].anchor.line) return;
+    }
+
+    if (this.state.completionActive) this.state.completionActive.close();
+    var completion = this.state.completionActive = new Completion(this, options);
+    if (!completion.options.hint) return;
+
+    CodeMirror.signal(this, "startCompletion", this);
+    completion.update(true);
+  });
+
+  CodeMirror.defineExtension("closeHint", function() {
+    if (this.state.completionActive) this.state.completionActive.close()
+  })
+
+  function Completion(cm, options) {
+    this.cm = cm;
+    this.options = options;
+    this.widget = null;
+    this.debounce = 0;
+    this.tick = 0;
+    this.startPos = this.cm.getCursor("start");
+    this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;
+
+    var self = this;
+    cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); });
+  }
+
+  var requestAnimationFrame = window.requestAnimationFrame || function(fn) {
+    return setTimeout(fn, 1000/60);
+  };
+  var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;
+
+  Completion.prototype = {
+    close: function() {
+      if (!this.active()) return;
+      this.cm.state.completionActive = null;
+      this.tick = null;
+      this.cm.off("cursorActivity", this.activityFunc);
+
+      if (this.widget && this.data) CodeMirror.signal(this.data, "close");
+      if (this.widget) this.widget.close();
+      CodeMirror.signal(this.cm, "endCompletion", this.cm);
+    },
+
+    active: function() {
+      return this.cm.state.completionActive == this;
+    },
+
+    pick: function(data, i) {
+      var completion = data.list[i];
+      if (completion.hint) completion.hint(this.cm, data, completion);
+      else this.cm.replaceRange(getText(completion), completion.from || data.from,
+                                completion.to || data.to, "complete");
+      CodeMirror.signal(data, "pick", completion);
+      this.close();
+    },
+
+    cursorActivity: function() {
+      if (this.debounce) {
+        cancelAnimationFrame(this.debounce);
+        this.debounce = 0;
+      }
+
+      var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);
+      if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||
+          pos.ch < this.startPos.ch || this.cm.somethingSelected() ||
+          (!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {
+        this.close();
+      } else {
+        var self = this;
+        this.debounce = requestAnimationFrame(function() {self.update();});
+        if (this.widget) this.widget.disable();
+      }
+    },
+
+    update: function(first) {
+      if (this.tick == null) return
+      var self = this, myTick = ++this.tick
+      fetchHints(this.options.hint, this.cm, this.options, function(data) {
+        if (self.tick == myTick) self.finishUpdate(data, first)
+      })
+    },
+
+    finishUpdate: function(data, first) {
+      if (this.data) CodeMirror.signal(this.data, "update");
+
+      var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);
+      if (this.widget) this.widget.close();
+
+      this.data = data;
+
+      if (data && data.list.length) {
+        if (picked && data.list.length == 1) {
+          this.pick(data, 0);
+        } else {
+          this.widget = new Widget(this, data);
+          CodeMirror.signal(data, "shown");
+        }
+      }
+    }
+  };
+
+  function parseOptions(cm, pos, options) {
+    var editor = cm.options.hintOptions;
+    var out = {};
+    for (var prop in defaultOptions) out[prop] = defaultOptions[prop];
+    if (editor) for (var prop in editor)
+      if (editor[prop] !== undefined) out[prop] = editor[prop];
+    if (options) for (var prop in options)
+      if (options[prop] !== undefined) out[prop] = options[prop];
+    if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)
+    return out;
+  }
+
+  function getText(completion) {
+    if (typeof completion == "string") return completion;
+    else return completion.text;
+  }
+
+  function buildKeyMap(completion, handle) {
+    var baseMap = {
+      Up: function() {handle.moveFocus(-1);},
+      Down: function() {handle.moveFocus(1);},
+      PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},
+      PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},
+      Home: function() {handle.setFocus(0);},
+      End: function() {handle.setFocus(handle.length - 1);},
+      Enter: handle.pick,
+      Tab: handle.pick,
+      Esc: handle.close
+    };
+    var custom = completion.options.customKeys;
+    var ourMap = custom ? {} : baseMap;
+    function addBinding(key, val) {
+      var bound;
+      if (typeof val != "string")
+        bound = function(cm) { return val(cm, handle); };
+      // This mechanism is deprecated
+      else if (baseMap.hasOwnProperty(val))
+        bound = baseMap[val];
+      else
+        bound = val;
+      ourMap[key] = bound;
+    }
+    if (custom)
+      for (var key in custom) if (custom.hasOwnProperty(key))
+        addBinding(key, custom[key]);
+    var extra = completion.options.extraKeys;
+    if (extra)
+      for (var key in extra) if (extra.hasOwnProperty(key))
+        addBinding(key, extra[key]);
+    return ourMap;
+  }
+
+  function getHintElement(hintsElement, el) {
+    while (el && el != hintsElement) {
+      if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el;
+      el = el.parentNode;
+    }
+  }
+
+  function Widget(completion, data) {
+    this.completion = completion;
+    this.data = data;
+    this.picked = false;
+    var widget = this, cm = completion.cm;
+    var ownerDocument = cm.getInputField().ownerDocument;
+    var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow;
+
+    var hints = this.hints = ownerDocument.createElement("ul");
+    var theme = completion.cm.options.theme;
+    hints.className = "CodeMirror-hints " + theme;
+    this.selectedHint = data.selectedHint || 0;
+
+    var completions = data.list;
+    for (var i = 0; i < completions.length; ++i) {
+      var elt = hints.appendChild(ownerDocument.createElement("li")), cur = completions[i];
+      var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS);
+      if (cur.className != null) className = cur.className + " " + className;
+      elt.className = className;
+      if (cur.render) cur.render(elt, data, cur);
+      else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur)));
+      elt.hintId = i;
+    }
+
+    var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);
+    var left = pos.left, top = pos.bottom, below = true;
+    hints.style.left = left + "px";
+    hints.style.top = top + "px";
+    // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
+    var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth);
+    var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight);
+    (completion.options.container || ownerDocument.body).appendChild(hints);
+    var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;
+    var scrolls = hints.scrollHeight > hints.clientHeight + 1
+    var startScroll = cm.getScrollInfo();
+
+    if (overlapY > 0) {
+      var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);
+      if (curTop - height > 0) { // Fits above cursor
+        hints.style.top = (top = pos.top - height) + "px";
+        below = false;
+      } else if (height > winH) {
+        hints.style.height = (winH - 5) + "px";
+        hints.style.top = (top = pos.bottom - box.top) + "px";
+        var cursor = cm.getCursor();
+        if (data.from.ch != cursor.ch) {
+          pos = cm.cursorCoords(cursor);
+          hints.style.left = (left = pos.left) + "px";
+          box = hints.getBoundingClientRect();
+        }
+      }
+    }
+    var overlapX = box.right - winW;
+    if (overlapX > 0) {
+      if (box.right - box.left > winW) {
+        hints.style.width = (winW - 5) + "px";
+        overlapX -= (box.right - box.left) - winW;
+      }
+      hints.style.left = (left = pos.left - overlapX) + "px";
+    }
+    if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling)
+      node.style.paddingRight = cm.display.nativeBarWidth + "px"
+
+    cm.addKeyMap(this.keyMap = buildKeyMap(completion, {
+      moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },
+      setFocus: function(n) { widget.changeActive(n); },
+      menuSize: function() { return widget.screenAmount(); },
+      length: completions.length,
+      close: function() { completion.close(); },
+      pick: function() { widget.pick(); },
+      data: data
+    }));
+
+    if (completion.options.closeOnUnfocus) {
+      var closingOnBlur;
+      cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });
+      cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); });
+    }
+
+    cm.on("scroll", this.onScroll = function() {
+      var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();
+      var newTop = top + startScroll.top - curScroll.top;
+      var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop);
+      if (!below) point += hints.offsetHeight;
+      if (point <= editor.top || point >= editor.bottom) return completion.close();
+      hints.style.top = newTop + "px";
+      hints.style.left = (left + startScroll.left - curScroll.left) + "px";
+    });
+
+    CodeMirror.on(hints, "dblclick", function(e) {
+      var t = getHintElement(hints, e.target || e.srcElement);
+      if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}
+    });
+
+    CodeMirror.on(hints, "click", function(e) {
+      var t = getHintElement(hints, e.target || e.srcElement);
+      if (t && t.hintId != null) {
+        widget.changeActive(t.hintId);
+        if (completion.options.completeOnSingleClick) widget.pick();
+      }
+    });
+
+    CodeMirror.on(hints, "mousedown", function() {
+      setTimeout(function(){cm.focus();}, 20);
+    });
+
+    CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]);
+    return true;
+  }
+
+  Widget.prototype = {
+    close: function() {
+      if (this.completion.widget != this) return;
+      this.completion.widget = null;
+      this.hints.parentNode.removeChild(this.hints);
+      this.completion.cm.removeKeyMap(this.keyMap);
+
+      var cm = this.completion.cm;
+      if (this.completion.options.closeOnUnfocus) {
+        cm.off("blur", this.onBlur);
+        cm.off("focus", this.onFocus);
+      }
+      cm.off("scroll", this.onScroll);
+    },
+
+    disable: function() {
+      this.completion.cm.removeKeyMap(this.keyMap);
+      var widget = this;
+      this.keyMap = {Enter: function() { widget.picked = true; }};
+      this.completion.cm.addKeyMap(this.keyMap);
+    },
+
+    pick: function() {
+      this.completion.pick(this.data, this.selectedHint);
+    },
+
+    changeActive: function(i, avoidWrap) {
+      if (i >= this.data.list.length)
+        i = avoidWrap ? this.data.list.length - 1 : 0;
+      else if (i < 0)
+        i = avoidWrap ? 0  : this.data.list.length - 1;
+      if (this.selectedHint == i) return;
+      var node = this.hints.childNodes[this.selectedHint];
+      if (node) node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, "");
+      node = this.hints.childNodes[this.selectedHint = i];
+      node.className += " " + ACTIVE_HINT_ELEMENT_CLASS;
+      if (node.offsetTop < this.hints.scrollTop)
+        this.hints.scrollTop = node.offsetTop - 3;
+      else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)
+        this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;
+      CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node);
+    },
+
+    screenAmount: function() {
+      return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;
+    }
+  };
+
+  function applicableHelpers(cm, helpers) {
+    if (!cm.somethingSelected()) return helpers
+    var result = []
+    for (var i = 0; i < helpers.length; i++)
+      if (helpers[i].supportsSelection) result.push(helpers[i])
+    return result
+  }
+
+  function fetchHints(hint, cm, options, callback) {
+    if (hint.async) {
+      hint(cm, callback, options)
+    } else {
+      var result = hint(cm, options)
+      if (result && result.then) result.then(callback)
+      else callback(result)
+    }
+  }
+
+  function resolveAutoHints(cm, pos) {
+    var helpers = cm.getHelpers(pos, "hint"), words
+    if (helpers.length) {
+      var resolved = function(cm, callback, options) {
+        var app = applicableHelpers(cm, helpers);
+        function run(i) {
+          if (i == app.length) return callback(null)
+          fetchHints(app[i], cm, options, function(result) {
+            if (result && result.list.length > 0) callback(result)
+            else run(i + 1)
+          })
+        }
+        run(0)
+      }
+      resolved.async = true
+      resolved.supportsSelection = true
+      return resolved
+    } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) {
+      return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) }
+    } else if (CodeMirror.hint.anyword) {
+      return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }
+    } else {
+      return function() {}
+    }
+  }
+
+  CodeMirror.registerHelper("hint", "auto", {
+    resolve: resolveAutoHints
+  });
+
+  CodeMirror.registerHelper("hint", "fromList", function(cm, options) {
+    var cur = cm.getCursor(), token = cm.getTokenAt(cur)
+    var term, from = CodeMirror.Pos(cur.line, token.start), to = cur
+    if (token.start < cur.ch && /\w/.test(token.string.charAt(cur.ch - token.start - 1))) {
+      term = token.string.substr(0, cur.ch - token.start)
+    } else {
+      term = ""
+      from = cur
+    }
+    var found = [];
+    for (var i = 0; i < options.words.length; i++) {
+      var word = options.words[i];
+      if (word.slice(0, term.length) == term)
+        found.push(word);
+    }
+
+    if (found.length) return {list: found, from: from, to: to};
+  });
+
+  CodeMirror.commands.autocomplete = CodeMirror.showHint;
+
+  var defaultOptions = {
+    hint: CodeMirror.hint.auto,
+    completeSingle: true,
+    alignWithWord: true,
+    closeCharacters: /[\s()\[\]{};:>,]/,
+    closeOnUnfocus: true,
+    completeOnSingleClick: true,
+    container: null,
+    customKeys: null,
+    extraKeys: null
+  };
+
+  CodeMirror.defineOption("hintOptions", null);
+});
+</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.26",globalThis:this};
+ba.Object.freeze(aaa);ba.Object.freeze(aaa.semantics);var ea=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},fa=ba.Math.fround||function(a){return+a},ga=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.ys!==d||b.$classData.xs!==a)}}function baa(a){for(var b in a)return b}function ka(a,b){return new a.LD(b)}function la(a,b){return caa(a,b,0)}function caa(a,b,d){var e=new a.LD(b[d]);if(d<b.length-1){a=a.Eu;d+=1;for(var f=e.n,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?sa(b)?pa(ta):ua(b)?pa(va):pa(wa):xa(a)?pa(ya):pa(za);case "boolean":return pa(Aa);case "undefined":return pa(Ba);default:return null===a?a.Era():Da(a)?pa(Ea):a&&a.$classData?pa(a.$classData):null}}function Fa(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 Ga(a){switch(typeof a){case "string":return Ha(Ia(),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.sa()}function Na(a,b,d){return"string"===typeof a?a.substring(b,d):a.Bw(b,d)}function Oa(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 Pa(a,b,d,e,f){a=a.n;d=d.n;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 Ga(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:Ga(a)};function sa(a){return"number"===typeof a&&a<<24>>24===a&&1/a!==1/-0}
+function ua(a){return"number"===typeof a&&a<<16>>16===a&&1/a!==1/-0}function Qa(a){return"number"===typeof a&&(a|0)===a&&1/a!==1/-0}function xa(a){return"number"===typeof a}function Ra(a){return null===a?Sa().sq:a}function Ta(){this.cz=this.LD=void 0;this.xs=this.Eu=this.m=null;this.ys=0;this.eA=null;this.$x="";this.al=this.Ux=this.Vx=void 0;this.name="";this.isRawJSType=this.isArrayClass=this.isInterface=this.isPrimitive=!1;this.isInstance=void 0}
+function Ua(a,b,d){var e=new Ta;e.m={};e.Eu=null;e.eA=a;e.$x=b;e.al=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,n){var r=new Ta,y=baa(a);k=k||function(a){return!!(a&&a.$classData&&a.$classData.m[y])};n=n||function(a,b){return!!(a&&a.$classData&&a.$classData.ys===b&&a.$classData.xs.m[y])};r.cz=h;r.m=e;r.$x="L"+d+";";r.al=n;r.name=d;r.isInterface=b;r.isRawJSType=!!f;r.isInstance=k;return r}
+function haa(a){function b(a){if("number"===typeof a){this.n=Array(a);for(var b=0;b<a;b++)this.n[b]=f}else this.n=a}var d=new Ta,e=a.eA,f="longZero"==e?Sa().sq:e;b.prototype=new l;b.prototype.constructor=b;b.prototype.qU=function(){return this.n instanceof Array?new b(this.n.slice(0)):new b(new this.n.constructor(this.n))};b.prototype.$classData=d;var e="["+a.$x,h=a.xs||a,k=a.ys+1;d.LD=b;d.cz=Va;d.m={d:1,Ld:1,h:1};d.Eu=a;d.xs=h;d.ys=k;d.eA=null;d.$x=e;d.Vx=void 0;d.Ux=void 0;d.al=void 0;d.name=e;
+d.isPrimitive=!1;d.isInterface=!1;d.isArrayClass=!0;d.isInstance=function(a){return h.al(a,k)};return d}function pa(a){if(!a.Vx){var b=new Wa;b.Ni=a;a.Vx=b}return a.Vx}function Xa(a){a.Ux||(a.Ux=haa(a));return a.Ux}Ta.prototype.getFakeInstance=function(){return this===qa?"some string":this===Aa?!1:this===ta||this===va||this===wa||this===ya||this===za?0:this===Ea?Sa().sq:this===Ba?void 0:{$classData:this}};Ta.prototype.getSuperclass=function(){return this.cz?pa(this.cz):null};
+Ta.prototype.getComponentType=function(){return this.Eu?pa(this.Eu):null};Ta.prototype.newArrayOfThisClass=function(a){for(var b=this,d=0;d<a.length;d++)b=Xa(b);return la(b,a)};var Ya=Ua(void 0,"V","void"),Za=Ua(!1,"Z","boolean"),$a=Ua(0,"C","char"),bb=Ua(0,"B","byte"),cb=Ua(0,"S","short"),db=Ua(0,"I","int"),eb=Ua("longZero","J","long"),fb=Ua(0,"F","float"),gb=Ua(0,"D","double"),ib=ja(Za);Za.al=ib;var jb=ja($a);$a.al=jb;var kb=ja(bb);bb.al=kb;var lb=ja(cb);cb.al=lb;var nb=ja(db);db.al=nb;var ob=ja(eb);
+eb.al=ob;var pb=ja(fb);fb.al=pb;var qb=ja(gb);gb.al=qb;function iaa(a,b){return m(new p,function(a,b){return function(f){return a.y(b.y(f))}}(a,b))}function rb(a,b){return m(new p,function(a,b){return function(f){return b.y(a.y(f))}}(a,b))}function jaa(a){return m(new p,function(a){return function(d){if(null!==d)return sb(a,d.ja(),d.na());throw(new q).i(d);}}(a))}function tb(a){return m(new p,function(a){return function(d){return m(new p,function(a,b){return function(d){return sb(a,b,d)}}(a,d))}}(a))}
+function kaa(a,b,d){return b.wa.Ib(d,ub(new vb,function(a){return function(b,d){return wb(a,d,b)}}(a)))}function wb(a,b,d){if(yb(b))return laa(a,b,d);if(zb(b))return maa(a,b.pe,d);if(Ab(b))return laa(a,b.Al,d);throw(new q).i(b);}function maa(a,b,d){return b.ng.Ib(d,ub(new vb,function(a){return function(b,d){return kaa(a,d,b)}}(a)))}function naa(a,b,d){return b.wa.Ib(d,ub(new vb,function(a){return function(b,d){return wb(a,d,b)}}(a)))}
+function Bb(a,b){if(yb(b))return a.Se(b);if(zb(b))return a=oaa(a,b.pe),Cb(new Db,a,b.ma,b.Tj);if(Ab(b))return a=a.Se(b.Al),Eb(new Gb,a,b.ma);throw(new q).i(b);}function oaa(a,b){var d=b.ng;a=m(new p,function(a){return function(b){return a.sf(b)}}(a));var e=t(),d=d.ya(a,e.s);return(new Hb).ht(b.Ts,d,b.xe)}function Ib(a,b){var d=b.wa;a=m(new p,function(a){return function(b){return Bb(a,b)}}(a));var e=t(),d=d.ya(a,e.s);return(new Jb).Cj(b.Gd,d,b.ma)}
+function Kb(a,b){var d=b.wa;a=m(new p,function(a){return function(b){return Bb(a,b)}}(a));var e=t(),d=d.ya(a,e.s);return(new Lb).bd(b.ye,d,b.ma)}function Mb(a,b){a=oaa(a,b.pe);return Nb(b.Gi,a,b.lA)}function paa(a,b){b.wa.ta(m(new p,function(a){return function(b){Ob(a,b)}}(a)))}function Pb(a,b){b.ng.ta(m(new p,function(a){return function(b){a.K_(b)}}(a)))}function qaa(a,b){b.wa.ta(m(new p,function(a){return function(b){Ob(a,b)}}(a)))}
+function Ob(a,b){if(yb(b))a.jH(b);else if(zb(b))Pb(a,b.pe);else if(Ab(b))a.jH(b.Al);else throw(new q).i(b);}function raa(a,b){return-1!==(a.Xd.indexOf("\x3cBREED\x3e")|0)?b.Tf:b.va}function Qb(a){var b="^"+Rb(Ia(),Rb(Ia(),a.Xd,"\\?","\\\\?"),saa(Sb()),"(.+)")+"$",b=(new Tb).c(b),d=u();a.az((new Ub).Ap(b.U,d))}
+function taa(a,b){var d=(new Vb).AE((new Xb).ha(1E8,0)),e=(new Yb).Bj(0),f=uaa(a);Zb(new $b,f,m(new p,function(){return function(a){return null!==a}}(a))).ta(m(new p,function(a,b,d,e){return function(a){if(null!==a){var f=+a.na(),h;h=Oa(+a.ja());var R=255&b>>16,da=255&h>>16;a=R+(da/2|0)|0;R=R-da|0;da=(255&b>>8)-(255&h>>8)|0;h=(255&b)-(255&h)|0;a=((ea(ea(512+a|0,R),R)>>8)+ea(da<<2,da)|0)+(ea(ea(767-a|0,h),h)>>8)|0;h=(new Xb).ha(a,a>>31);a=h.ia;h=h.oa;R=d.Ca;da=R.oa;if(h===da?(-2147483648^a)<(-2147483648^
+R.ia):h<da)d.Ca=(new Xb).ha(a,h),e.Ca=f}else throw(new q).i(a);}}(a,b,d,e)));return e.Ca}function ac(a,b,d,e){if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Dump.scala: 56");return a.cV.y((new bc).Id(b,d,e))}function vaa(a,b,d,e){a=(new cc).Nf(b,m(new p,function(a,b,d){return function(e){return ac(a,e,b,d)}}(a,d,e)));return ec(a,"["," ","]")}
+function waa(a,b,d,e,f,h,k,n,r){var y=[(new w).e("",b)];b=fc(new gc,hc());for(var E=0,Q=y.length|0;E<Q;)ic(b,y[E]),E=1+E|0;y=xaa;E=new lc;E.Pt=b.Va;E.Xh=k;E.Nv=n;E.Bs=r;E.Is=e;E.eo=h;E.pl=f;E.Fn=d;E.vw=!1;return y(a,E)}
+function yaa(a){x();for(var b=zaa(a).Da(),d=(new mc).b(),e=0;e<b;){var f=nc();pc(d,f);e=1+e|0}b=d.wb();if(a.dw.Qn){a=nc();d=z();A();e=B();A();f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,b,a,f,h,!1,"OTPL",k,k.ba(),!0)}return qc(A(),b,(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))}function Aaa(a){a.L("OTPL");Baa(a,G(rc().ri,u()));a.a=(32|a.a)<<24>>24}function sc(a){return!!(a&&a.$classData&&a.$classData.m.KK)}
+function Caa(a,b,d,e,f){var h=a.Pp.y(f.we());b=tc(b,uc(f),vc());wc();h=h.Sa();xc||(xc=(new yc).b());var h=Ac(0,h,xc),k=new Bc;d=Cc(d,a.he);k.dc=a.dc;k.he=d;k.Gi=f;k.Xh=e;Daa(k);a=Ac(wc(),h,k);Dc();a=a.zn();e=Ec();for(d=G(Fc(),u());;)if(h=a.Y().sb,null===h||h!==e){b=Gc(Dc(),a,!1,b);if(null===b)throw(new q).i(b);h=b.ja();b=b.na();d.Yj(h)}else break;b=d.Nc();e=a.Y();b=(new Hb).ht(e.wc().bb,b,!1);a=2147483647!==a.Y().wc().Ya?a.Y().wc().Ua:b.wc().Ya;return Nb(f,b,a)}
+function Eaa(a,b){a=Faa(Hc(),Ic(a),b);for(var d=Gaa(Hc(),a.dc,Cc(b.eo,a.he)),e=a.he,f=Jc(b.eo),e=Kc(e,f),f=(new Lc).Of(e),e=Mc().s,e=Nc(f,e),f=f.Dg.Wj();f.ra();){var h=f.ka();e.Ma(Caa(a,d,b.eo,b.Xh,h))}b=e.Ba().Nc();return(new w).e(b,a)}function Haa(a,b,d,e){b=b.wa;var f=t();return b.Xj(f.s).Ib(e,ub(new vb,function(a,b){return function(d,e){d=(new w).e(d,e);e=d.ub;var f=d.Fb;if(null!==f)return Oc(a,f.ja(),b,f.Gc(),e);throw(new q).i(d);}}(a,d)))}
+function Pc(a,b,d,e){b=b.wa;var f=t();return b.Xj(f.s).Ib(e,ub(new vb,function(a,b){return function(d,e){d=(new w).e(d,e);e=d.ub;var f=d.Fb;if(null!==f)return Oc(a,f.ja(),b,f.Gc(),e);throw(new q).i(d);}}(a,d)))}
+function Iaa(a,b,d,e){b=b.ng;var f=t();return b.Xj(f.s).Ib(e,ub(new vb,function(a,b){return function(d,e){e=(new w).e(d,e);d=e.ub;var f=e.Fb;if(null!==f){e=f.ja();f=Qc(b,(new Rc).hb(f.Gc()));var E=d.xk.gc(f);E.z()?E=C():(E=E.R(),E=(new H).i(Sc(E,a,e,f,d)));E.z()?(E=Tc(d.Ef,f),E=Uc(Vc(d),""+E+d.Jm.y(e.Gd)),e=Haa(a,e,f,E),d=Xc(new Zc,e.Zb,e.xk,d.Jm,e.Ef)):d=E.R();return d}throw(new q).i(e);}}(a,d)))}
+function Oc(a,b,d,e,f){if(yb(b))return d=Qc(d,(new $c).hb(e)),ad(a,b,d,f);if(zb(b)){d=Qc(d,(new bd).hb(e));if(b.Tj&&b.pe.ng.z())f=Uc(Vc(f),Tc(f.Ef,d));else if(b.Tj)e=f.xk.gc(d),e.z()?e=C():(e=e.R(),e=(new H).i(Sc(e,a,b,d,Uc(Vc(f),Tc(f.Ef,d))))),e.z()?(e=Uc(Vc(f),Tc(f.Ef,d)),a=Iaa(a,b.pe,d,e),f=Uc(Vc(a),cd(f.Ef,d))):f=e.R();else{var h=Jaa(a);e=Kaa(a);var k=f.xk.gc(d);k.z()?k=C():(k=k.R(),k=(new H).i(Sc(k,a,b,d,Uc(Vc(f),Tc(f.Ef,d)))));k.z()?(h=Uc(Vc(f),h.y(f.Ef).y(d)),a=Iaa(a,b.pe,d,h),f=Uc(Vc(a),e.y(f.Ef).y(d))):
+f=k.R()}return f}if(Ab(b))return d=Qc(d,(new dd).hb(e)),h=Jaa(a),e=Kaa(a),k=f.xk.gc(d),k.z()?k=C():(k=k.R(),k=(new H).i(Sc(k,a,b,d,Uc(Vc(f),Tc(f.Ef,d))))),k.z()?(h=Uc(Vc(f),h.y(f.Ef).y(d)),b=b.Al,k=Qc(d,(new $c).hb(0)),a=ad(a,b,k,h),f=Uc(Vc(a),e.y(f.Ef).y(d))):f=k.R(),f;throw(new q).i(b);}
+function Laa(a,b,d,e,f){ed(a);d=fd(d,"run");var h=f.tr;a=m(new p,function(a,b){return function(a){return b+'Vars["'+a.ja()+'"] \x3d '+a.na()+";"}}(a,d));var k=t(),h=h.ya(a,k.s).Ab("\n");!b&&f.ot?(f="var "+d+" \x3d ",a="if(reporterContext \x26\x26 "+d+" !\x3d\x3d undefined) { return "+d+"; }"):a=f="";b="|"+f+"Prims.runCode(\n        |  "+b+",\n        |  (function() {\n        |    let "+d+"Vars \x3d { }; for(var v in letVars) { "+d+"Vars[v] \x3d letVars[v]; }\n        |    "+h+"\n        |    return "+
+d+"Vars;\n        |  })(),\n        |  "+e.Ab(", ")+"\n        |)\n        |"+a+"\n        |";b=(new Tb).c(b);return gd(b)}function Maa(a){return"notImplemented("+hd(id(),a)+", undefined)"}function jd(a,b,d,e){throw(new kd).gt(a,b,d,e);}function ld(a){a=md().Uc(a);if(a.z())var b=!0;else b=a.R(),b=(new Tb).c(b),b=nd(b);a=b?a:C();return a.z()?"LINKS":a.R()}function Naa(a,b){od();return pd(new rd,Oaa(b)).Uc(a)}function sd(a){return td(ud(),vd(ud(),a))}
+function wd(a,b){return a.Vj(b).qV(m(new p,function(){return function(a){throw(new xd).Ea(a);}}(a)),m(new p,function(){return function(a){return a}}(a)))}var Paa=g({eu:0},!0,"sbt.testing.Fingerprint",{eu:1});function yd(a){return!!(a&&a.$classData&&a.$classData.m.IC)}var zd=g({IC:0},!0,"sbt.testing.Framework",{IC:1}),Qaa=g({JC:0},!0,"sbt.testing.Logger",{JC:1}),Ad=g({xS:0},!0,"sbt.testing.Task",{xS:1});function Bd(a){a.Gt(Raa(a))}function Cd(a){a.pw(Saa(a))}function Dd(a){a.jg(Taa(a))}
+function Ed(a){a.yg(Uaa(a))}function Fd(a){a.Gr(Vaa(a))}function Gd(a){a.wf(Waa(a))}function Hd(a,b){var d=Id();a=[Jd(Id(),a.rh(b))];b=a.length|0;var e=0,f=Kd((new Ld).Dj(d.Mr));a:for(;;){if(e!==b){d=1+e|0;f=Md(f,a[e]);e=d;continue a}return f}}function Nd(a){a.nh(Xaa(a))}function Od(a){a.ro(Yaa(a))}function Pd(a){a.so(Zaa(a))}
+function $aa(a){a.ZY((new Qd).fe(a));a.MY((new Rd).fe(a));a.LY((new Sd).fe(a));a.NY((new Td).fe(a));a.OY((new Ud).fe(a));a.PY((new Vd).fe(a));a.QY((new Wd).fe(a));a.XY((new Yd).fe(a));a.YY((new Zd).fe(a));a.TY((new $d).fe(a));a.UY((new ae).fe(a));a.VY((new be).fe(a));a.WY((new ce).fe(a));a.SY((new de).fe(a));a.RY((new ee).fe(a))}function aba(a){a.cZ((new fe).VE(a));a.dZ((new ge).VE(a))}function he(){}function l(){}l.prototype=he.prototype;he.prototype.b=function(){return this};
+he.prototype.o=function(a){return this===a};he.prototype.l=function(){var a=oa(this).tg(),b=(+(this.r()>>>0)).toString(16);return a+"@"+b};he.prototype.r=function(){return Ka(this)};he.prototype.toString=function(){return this.l()};function ie(a,b){if(a=a&&a.$classData){var d=a.ys||0;return!(d<b)&&(d>b||!a.xs.isPrimitive)}return!1}var Va=g({d:0},!1,"java.lang.Object",{d:1},void 0,void 0,function(a){return null!==a},ie);he.prototype.$classData=Va;
+function bba(a,b){b!==a&&b.Mp(m(new p,function(a){return function(b){return a.Sw(b)}}(a)),je());return a}function ke(a,b){if(a.Sw(b))return a;throw(new me).c("Promise already completed.");}
+function cba(a,b){if(ne(b))return b=null===b?0:b.W,a.iF()&&a.Ti()===b;if(sa(b))return b|=0,a.hF()&&a.fy()===b;if(ua(b))return b|=0,a.jF()&&a.Iz()===b;if(Qa(b))return b|=0,a.Ev()&&a.Ti()===b;if(Da(b)){var d=Ra(b);b=d.ia;d=d.oa;a=a.Hj();var e=a.oa;return a.ia===b&&e===d}return xa(b)?(b=+b,a.Hq()===b):"number"===typeof b?(b=+b,a.Am()===b):!1}function dba(a,b){a.cG=b;return a}function eba(a,b){return 0<=a.Pr(b)?na(Na(a.KG(),a.Pr(b),a.Vu(b))):null}
+function fba(a,b){return(new oe).Nl(a,m(new p,function(a,b){return function(f){return pe(new qe,a,b,f)}}(a,b)))}function re(a,b){return(new oe).Nl(a,m(new p,function(a,b){return function(f){f=se(b).si(f);if(te(f)||ue(f))return f;if(ve(f))return(new we).Mn(a,f.gl,f.ke);throw(new q).i(f);}}(a,b)))}function xe(a,b){return(new oe).Nl(a,m(new p,function(a,b){return function(f){return(new ye).Mn(a,b,f)}}(a,b)))}
+function ze(a,b,d){return(new oe).Nl(a,m(new p,function(a,b,d){return function(k){var n;if(k.jn.z())n=(new ye).Mn(a,"end of input",k);else if(d.Za(k.jn.Y())){n=new qe;var r=d.y(k.jn.Y());k=gba(new Ae,k.jn.$(),k.nE);n=pe(n,a,r,k)}else n=(new ye).Mn(a,b+" expected",k);return n}}(a,b,d)))}
+function hba(a,b,d){return(new oe).Nl(a,m(new p,function(a,b,d){return function(k){var n=(new Be).b(),r=(new mc).b(),y=se(b).si(k);if(te(y)){k=y.ke;pc(r,y.Vm);if(n.Pa)n=n.tb;else{if(null===n)throw(new Ce).b();n=n.Pa?n.tb:De(n,se(d))}a:for(;;)if(y=n.si(k),te(y))k=y,y=k.ke,pc(r,k.Vm),k=y;else{r=ue(y)?y:pe(new qe,a,r.wb(),k);break a}return r}if(y&&y.$classData&&y.$classData.m.aG)return y;throw(new q).i(y);}}(a,b,d)))}
+function Ee(a,b){return Fe(hba(a,b,b),I(function(a){return function(){var b=u();return fba(a,b)}}(a)))}function iba(a,b){var d=a.Qa;a=Ge(He(a,m(new p,function(a,b){return function(d){return Ie(re(a.Qa,b),m(new p,function(a,b){return function(d){return Je(a.Qa,b,d)}}(a,d)))}}(a,b))),"~");return(new Ke).Nl(d,a)}
+function jba(a){var b=(new Tb).c("");a=-1+a.Ac|0;b=Le(Me(),b.U,0,a);b=(new Tb).c(b);a=Ne().qq;a=Nc(b,a);for(var d=0,e=b.U.length|0;d<e;){var f=b.X(d),f=null===f?0:f.W;a.Ma(Oe(9===f?f:32));d=1+d|0}return"\n"+a.Ba()+"^"}function Pe(a,b){b.ta(m(new p,function(a){return function(b){return a.Mk(b)}}(a)));return a}function Kc(a,b){var d=a.of();return b.jb().Ff(d,ub(new vb,function(){return function(a,b){return a.Qd(b)}}(a)))}function Qe(a){var b=la(Xa(Va),[a.n.length]);Pa(a,0,b,0,a.n.length);return b}
+function kba(a,b,d){if(32>d)return a.Je().n[31&b];if(1024>d)return a.zb().n[31&(b>>>5|0)].n[31&b];if(32768>d)return a.Ub().n[31&(b>>>10|0)].n[31&(b>>>5|0)].n[31&b];if(1048576>d)return a.mc().n[31&(b>>>15|0)].n[31&(b>>>10|0)].n[31&(b>>>5|0)].n[31&b];if(33554432>d)return a.Bd().n[31&(b>>>20|0)].n[31&(b>>>15|0)].n[31&(b>>>10|0)].n[31&(b>>>5|0)].n[31&b];if(1073741824>d)return a.Vh().n[31&(b>>>25|0)].n[31&(b>>>20|0)].n[31&(b>>>15|0)].n[31&(b>>>10|0)].n[31&(b>>>5|0)].n[31&b];throw(new Re).b();}
+function lba(a,b,d,e){if(32<=e)if(1024>e)1===a.Lf()&&(a.qc(la(Xa(Va),[32])),a.zb().n[31&(b>>>5|0)]=a.Je(),a.mk(1+a.Lf()|0)),a.Vc(la(Xa(Va),[32]));else if(32768>e)2===a.Lf()&&(a.dd(la(Xa(Va),[32])),a.Ub().n[31&(b>>>10|0)]=a.zb(),a.mk(1+a.Lf()|0)),a.qc(a.Ub().n[31&(d>>>10|0)]),null===a.zb()&&a.qc(la(Xa(Va),[32])),a.Vc(la(Xa(Va),[32]));else if(1048576>e)3===a.Lf()&&(a.Ke(la(Xa(Va),[32])),a.mc().n[31&(b>>>15|0)]=a.Ub(),a.mk(1+a.Lf()|0)),a.dd(a.mc().n[31&(d>>>15|0)]),null===a.Ub()&&a.dd(la(Xa(Va),[32])),
+a.qc(a.Ub().n[31&(d>>>10|0)]),null===a.zb()&&a.qc(la(Xa(Va),[32])),a.Vc(la(Xa(Va),[32]));else if(33554432>e)4===a.Lf()&&(a.zh(la(Xa(Va),[32])),a.Bd().n[31&(b>>>20|0)]=a.mc(),a.mk(1+a.Lf()|0)),a.Ke(a.Bd().n[31&(d>>>20|0)]),null===a.mc()&&a.Ke(la(Xa(Va),[32])),a.dd(a.mc().n[31&(d>>>15|0)]),null===a.Ub()&&a.dd(la(Xa(Va),[32])),a.qc(a.Ub().n[31&(d>>>10|0)]),null===a.zb()&&a.qc(la(Xa(Va),[32])),a.Vc(la(Xa(Va),[32]));else if(1073741824>e)5===a.Lf()&&(a.kp(la(Xa(Va),[32])),a.Vh().n[31&(b>>>25|0)]=a.Bd(),
+a.mk(1+a.Lf()|0)),a.zh(a.Vh().n[31&(d>>>25|0)]),null===a.Bd()&&a.zh(la(Xa(Va),[32])),a.Ke(a.Bd().n[31&(d>>>20|0)]),null===a.mc()&&a.Ke(la(Xa(Va),[32])),a.dd(a.mc().n[31&(d>>>15|0)]),null===a.Ub()&&a.dd(la(Xa(Va),[32])),a.qc(a.Ub().n[31&(d>>>10|0)]),null===a.zb()&&a.qc(la(Xa(Va),[32])),a.Vc(la(Xa(Va),[32]));else throw(new Re).b();}function Se(a,b,d){var e=la(Xa(Va),[32]);Pa(a,b,e,d,32-(d>b?d:b)|0);return e}
+function mba(a,b,d){if(32<=d)if(1024>d)a.Vc(a.zb().n[31&(b>>>5|0)]);else if(32768>d)a.qc(a.Ub().n[31&(b>>>10|0)]),a.Vc(a.zb().n[31&(b>>>5|0)]);else if(1048576>d)a.dd(a.mc().n[31&(b>>>15|0)]),a.qc(a.Ub().n[31&(b>>>10|0)]),a.Vc(a.zb().n[31&(b>>>5|0)]);else if(33554432>d)a.Ke(a.Bd().n[31&(b>>>20|0)]),a.dd(a.mc().n[31&(b>>>15|0)]),a.qc(a.Ub().n[31&(b>>>10|0)]),a.Vc(a.zb().n[31&(b>>>5|0)]);else if(1073741824>d)a.zh(a.Vh().n[31&(b>>>25|0)]),a.Ke(a.Bd().n[31&(b>>>20|0)]),a.dd(a.mc().n[31&(b>>>15|0)]),a.qc(a.Ub().n[31&
+(b>>>10|0)]),a.Vc(a.zb().n[31&(b>>>5|0)]);else throw(new Re).b();}
+function nba(a,b){var d=-1+a.Lf()|0;switch(d){case 5:a.kp(Qe(a.Vh()));a.zh(Qe(a.Bd()));a.Ke(Qe(a.mc()));a.dd(Qe(a.Ub()));a.qc(Qe(a.zb()));a.Vh().n[31&(b>>>25|0)]=a.Bd();a.Bd().n[31&(b>>>20|0)]=a.mc();a.mc().n[31&(b>>>15|0)]=a.Ub();a.Ub().n[31&(b>>>10|0)]=a.zb();a.zb().n[31&(b>>>5|0)]=a.Je();break;case 4:a.zh(Qe(a.Bd()));a.Ke(Qe(a.mc()));a.dd(Qe(a.Ub()));a.qc(Qe(a.zb()));a.Bd().n[31&(b>>>20|0)]=a.mc();a.mc().n[31&(b>>>15|0)]=a.Ub();a.Ub().n[31&(b>>>10|0)]=a.zb();a.zb().n[31&(b>>>5|0)]=a.Je();break;
+case 3:a.Ke(Qe(a.mc()));a.dd(Qe(a.Ub()));a.qc(Qe(a.zb()));a.mc().n[31&(b>>>15|0)]=a.Ub();a.Ub().n[31&(b>>>10|0)]=a.zb();a.zb().n[31&(b>>>5|0)]=a.Je();break;case 2:a.dd(Qe(a.Ub()));a.qc(Qe(a.zb()));a.Ub().n[31&(b>>>10|0)]=a.zb();a.zb().n[31&(b>>>5|0)]=a.Je();break;case 1:a.qc(Qe(a.zb()));a.zb().n[31&(b>>>5|0)]=a.Je();break;case 0:break;default:throw(new q).i(d);}}function Te(a,b){var d=a.n[b];a.n[b]=null;return Qe(d)}
+function Ue(a,b,d){a.mk(d);d=-1+d|0;switch(d){case -1:break;case 0:a.Vc(b.Je());break;case 1:a.qc(b.zb());a.Vc(b.Je());break;case 2:a.dd(b.Ub());a.qc(b.zb());a.Vc(b.Je());break;case 3:a.Ke(b.mc());a.dd(b.Ub());a.qc(b.zb());a.Vc(b.Je());break;case 4:a.zh(b.Bd());a.Ke(b.mc());a.dd(b.Ub());a.qc(b.zb());a.Vc(b.Je());break;case 5:a.kp(b.Vh());a.zh(b.Bd());a.Ke(b.mc());a.dd(b.Ub());a.qc(b.zb());a.Vc(b.Je());break;default:throw(new q).i(d);}}function Ve(a){return null===a?oba():a}
+function pba(a){return a===oba()?null:a}var qba=g({Dz:0},!0,"scala.collection.mutable.HashEntry",{Dz:1});function We(){this.lz=this.hz=null}We.prototype=new l;We.prototype.constructor=We;function rba(a){var b=(new J).j([a.hz,a.lz]);a=b.qa.length|0;a=la(Xa(Xe),[a]);var d;d=0;for(b=Ye(new Ze,b,0,b.qa.length|0);b.ra();){var e=b.ka();a.n[d]=e;d=1+d|0}return a}function $e(a,b,d){a.hz=b;a.lz=d;return a}We.prototype.$classData=g({V_:0},!1,"java.math.BigInteger$QuotAndRem",{V_:1,d:1});function af(){}
+af.prototype=new l;af.prototype.constructor=af;af.prototype.b=function(){return this};function sba(a,b,d,e){a=0;var f=-1+e|0;if(!(0>=e))for(var h=0;;){var k=h,n=d.n[k];b.n[k]=n<<1|a;a=n>>>31|0;if(h===f)break;h=1+h|0}0!==a&&(b.n[e]=a)}function tba(a,b,d){a=d>>5;d&=31;var e=(b.cc+a|0)+(0===d?0:1)|0,f=la(Xa(db),[e]);bf(0,f,b.Cb,a,d);b=cf(new df,b.Wb,e,f);ef(b);return b}
+function uba(a,b,d){a=d>>5;var e=31&d;if(a>=b.cc)return 0>b.Wb?ff().Lx:ff().fk;d=b.cc-a|0;var f=la(Xa(db),[1+d|0]);vba(0,f,d,b.Cb,a,e);if(0>b.Wb){for(var h=0;h<a&&0===b.Cb.n[h];)h=1+h|0;var k=0!==b.Cb.n[h]<<(32-e|0);if(h<a||0<e&&k){for(h=0;h<d&&-1===f.n[h];)f.n[h]=0,h=1+h|0;h===d&&(d=1+d|0);a=h;f.n[a]=1+f.n[a]|0}}b=cf(new df,b.Wb,d,f);ef(b);return b}function gf(a,b){if(0===b.Wb)return 0;a=b.cc<<5;var d=b.Cb.n[-1+b.cc|0];0>b.Wb&&hf(b)===(-1+b.cc|0)&&(d=-1+d|0);return a=a-ga(d)|0}
+function vba(a,b,d,e,f,h){for(a=0;a<f;)a=1+a|0;if(0===h)Pa(e,f,b,0,d);else{var k=32-h|0;for(a=0;a<(-1+d|0);)b.n[a]=e.n[a+f|0]>>>h|0|e.n[1+(a+f|0)|0]<<k,a=1+a|0;b.n[a]=e.n[a+f|0]>>>h|0}}function bf(a,b,d,e,f){if(0===f)Pa(d,0,b,e,b.n.length-e|0);else{a=32-f|0;b.n[-1+b.n.length|0]=0;for(var h=-1+b.n.length|0;h>e;){var k=h;b.n[k]=b.n[k]|d.n[-1+(h-e|0)|0]>>>a|0;b.n[-1+h|0]=d.n[-1+(h-e|0)|0]<<f;h=-1+h|0}}d=-1+e|0;if(!(0>=e))for(e=0;;){b.n[e]=0;if(e===d)break;e=1+e|0}}
+af.prototype.$classData=g({W_:0},!1,"java.math.BitLevel$",{W_:1,d:1});var jf=void 0;function kf(){jf||(jf=(new af).b());return jf}function lf(){this.wH=this.LH=null}lf.prototype=new l;lf.prototype.constructor=lf;
+lf.prototype.b=function(){mf=this;var a=(new J).j([-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.qa.length|0,b=la(Xa(db),[b]),d;d=0;for(a=Ye(new Ze,a,0,a.qa.length|0);a.ra();){var e=a.ka();b.n[d]=e|0;d=1+d|0}this.LH=b;a=(new J).j([-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.qa.length|0;b=la(Xa(db),[b]);d=0;for(a=Ye(new Ze,a,0,a.qa.length|0);a.ra();)e=a.ka(),b.n[d]=e|0,d=1+d|0;this.wH=b;return this};
+function wba(a,b,d){if(0===b.ia&&0===b.oa)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.oa;var e;e="";var f=18;if(a){var h=b.ia;b=b.oa;b=(new Xb).ha(-h|0,0!==h?~b:-b|0)}for(var h=b.ia,k=b.oa;;){b=h;var n=k,k=Sa(),h=nf(k,h,n,10,0),k=k.Sb,f=-1+f|0,n=k,r=h,y=r>>>16|0,r=ea(10,65535&r),y=ea(10,y),y=r+(y<<16)|0;ea(10,
+n);e=""+(b-y|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="0"+e;if(f===d)break;f=1+f|0}e="0."+e}else 0!==d&&(d=""+b,0<b&&(d="+"+d),d="E"+d,e=1<(18-f|0)?e.substring(0,1)+"."+e.substring(1)+d:""+e+d);return a?"-"+e:e}}
+function of(a,b){a=b.Wb;var d=b.cc,e=b.Cb;if(0===a)return"0";if(1===d)return b=(+(e.n[0]>>>0)).toString(10),0>a?"-"+b:b;b="";var f=la(Xa(db),[d]);Pa(e,0,f,0,d);do{for(var h=0,e=-1+d|0;0<=e;){var k=h,h=f.n[e],n=pf(Sa(),h,k,1E9,0);f.n[e]=n;var k=n>>31,r=65535&n,n=n>>>16|0,y=ea(51712,r),r=ea(15258,r),E=ea(51712,n),y=y+((r+E|0)<<16)|0;ea(1E9,k);ea(15258,n);h=h-y|0;e=-1+e|0}e=""+h;for(b="000000000".substring(e.length|0)+e+b;0!==d&&0===f.n[-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?"-"+b:b}lf.prototype.$classData=g({X_:0},!1,"java.math.Conversion$",{X_:1,d:1});var mf=void 0;function qf(){mf||(mf=(new lf).b());return mf}function rf(){}rf.prototype=new l;rf.prototype.constructor=rf;rf.prototype.b=function(){return this};
+function xba(a,b,d,e,f,h,k){a=la(Xa(db),[1+f|0]);var n=la(Xa(db),[1+k|0]),r=ga(h.n[-1+k|0]);0!==r?(bf(kf(),n,h,0,r),bf(kf(),a,e,0,r)):(Pa(e,0,a,0,f),Pa(h,0,n,0,k));e=n.n[-1+k|0];for(d=-1+d|0;0<=d;){if(a.n[f]===e)h=-1;else{var y=a.n[f],E=a.n[-1+f|0];h=Sa();var Q=pf(h,E,y,e,0),y=h.Sb;h=Q;var R=65535&Q,Q=Q>>>16|0,da=65535&e,ma=e>>>16|0,ra=ea(R,da),da=ea(Q,da),R=ea(R,ma),R=ra+((da+R|0)<<16)|0;ea(y,e);ea(Q,ma);E=E-R|0;if(0!==h)a:for(h=1+h|0;;){Q=h=-1+h|0;ma=n.n[-2+k|0];y=65535&Q;Q=Q>>>16|0;ra=65535&ma;
+ma=ma>>>16|0;R=ea(y,ra);ra=ea(Q,ra);da=ea(y,ma);y=R+((ra+da|0)<<16)|0;R=(R>>>16|0)+da|0;R=(ea(Q,ma)+(R>>>16|0)|0)+(((65535&R)+ra|0)>>>16|0)|0;ma=E;Q=a.n[-2+f|0];ra=E+e|0;if(0===((-2147483648^ra)<(-2147483648^E)?1:0)&&(E=ra,R^=-2147483648,ma^=-2147483648,R===ma?(-2147483648^y)>(-2147483648^Q):R>ma))continue a;break}}if(E=0!==h){sf();var E=a,y=f-k|0,ma=n,Q=k,R=h,Ca;Ca=0;var ab;ab=0;ra=-1+Q|0;if(!(0>=Q))for(da=0;;){var hb=da;tf();var mb=ma.n[hb],Wb=65535&mb,mb=mb>>>16|0,zc=65535&R,xb=R>>>16|0,Wc=ea(Wb,
+zc),zc=ea(mb,zc),dc=ea(Wb,xb),Wb=Wc+((zc+dc|0)<<16)|0,Wc=(Wc>>>16|0)+dc|0,xb=(ea(mb,xb)+(Wc>>>16|0)|0)+(((65535&Wc)+zc|0)>>>16|0)|0,mb=Wb+Ca|0;Ca=(-2147483648^mb)<(-2147483648^Wb)?1+xb|0:xb;xb=E.n[y+hb|0];mb=xb-mb|0;xb=(-2147483648^mb)>(-2147483648^xb)?-1:0;Wb=ab;ab=Wb>>31;Wb=mb+Wb|0;ab=(-2147483648^Wb)<(-2147483648^mb)?1+(xb+ab|0)|0:xb+ab|0;E.n[y+hb|0]=Wb;if(da===ra)break;da=1+da|0}R=E.n[y+Q|0];ma=R-Ca|0;R=(-2147483648^ma)>(-2147483648^R)?-1:0;da=ab;ra=da>>31;da=ma+da|0;E.n[y+Q|0]=da;E=0!==((-2147483648^
+da)<(-2147483648^ma)?1+(R+ra|0)|0:R+ra|0)}if(E&&(h=-1+h|0,da=ra=0,E=-1+k|0,!(0>=k)))for(y=0;;){Q=y;R=a.n[(f-k|0)+Q|0];ma=R+n.n[Q]|0;R=(-2147483648^ma)<(-2147483648^R)?1:0;ma=ra+ma|0;R=(-2147483648^ma)<(-2147483648^ra)?1+(da+R|0)|0:da+R|0;ra=ma;da=R;a.n[(f-k|0)+Q|0]=ra;ra=da;da=0;if(y===E)break;y=1+y|0}null!==b&&(b.n[d]=h);f=-1+f|0;d=-1+d|0}return 0!==r?(vba(kf(),n,k,a,0,r),n):(Pa(a,0,n,0,k),a)}
+function yba(a,b,d,e,f){a=0;for(e=-1+e|0;0<=e;){var h=a;a=d.n[e];var k=Sa(),h=pf(k,a,h,f,0),k=k.Sb,n=65535&h,r=h>>>16|0,y=65535&f,E=f>>>16|0,Q=ea(n,y),y=ea(r,y),n=ea(n,E),Q=Q+((y+n|0)<<16)|0;ea(k,f);ea(r,E);a=a-Q|0;b.n[e]=h;e=-1+e|0}return a}rf.prototype.$classData=g({Y_:0},!1,"java.math.Division$",{Y_:1,d:1});var uf=void 0;function sf(){uf||(uf=(new rf).b());return uf}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(Xa(db),[b]),h=0,k=0;h<e;){var n=a.n[h],r=n-d.n[h]|0,n=(-2147483648^r)>(-2147483648^n)?-1:0,y=k,k=y>>31,y=r+y|0,r=(-2147483648^y)<(-2147483648^r)?1+(n+k|0)|0:n+k|0;f.n[h]=y;k=r;h=1+h|0}for(;h<b;)d=a.n[h],r=k,e=r>>31,r=d+r|0,d=(-2147483648^r)<(-2147483648^d)?1+e|0:e,f.n[h]=r,k=d,h=1+h|0;return f}function xf(a,b,d,e){for(a=-1+e|0;0<=a&&b.n[a]===d.n[a];)a=-1+a|0;return 0>a?0:(-2147483648^b.n[a])<(-2147483648^d.n[a])?-1:1}
+function yf(a,b,d,e){var f=la(Xa(db),[1+b|0]),h=1,k=a.n[0],n=k+d.n[0]|0;f.n[0]=n;k=(-2147483648^n)<(-2147483648^k)?1:0;if(b>=e){for(;h<e;){var r=a.n[h],n=r+d.n[h]|0,r=(-2147483648^n)<(-2147483648^r)?1:0,k=n+k|0,n=(-2147483648^k)<(-2147483648^n)?1+r|0:r;f.n[h]=k;k=n;h=1+h|0}for(;h<b;)d=a.n[h],e=d+k|0,d=(-2147483648^e)<(-2147483648^d)?1:0,f.n[h]=e,k=d,h=1+h|0}else{for(;h<b;)r=a.n[h],n=r+d.n[h]|0,r=(-2147483648^n)<(-2147483648^r)?1:0,k=n+k|0,n=(-2147483648^k)<(-2147483648^n)?1+r|0:r,f.n[h]=k,k=n,h=1+
+h|0;for(;h<e;)a=d.n[h],b=a+k|0,a=(-2147483648^b)<(-2147483648^a)?1:0,f.n[h]=b,k=a,h=1+h|0}0!==k&&(f.n[h]=k);return f}
+function zf(a,b,d){a=b.Wb;var e=d.Wb,f=b.cc,h=d.cc;if(0===a)return d;if(0===e)return b;if(2===(f+h|0)){b=b.Cb.n[0];d=d.Cb.n[0];if(a===e){e=b+d|0;d=(-2147483648^e)<(-2147483648^b)?1:0;if(0===d)return(new df).ha(a,e);Af();return cf(new df,a,2,Bf(0,e,(new J).j([d])))}e=ff();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 Xb).ha(a,d))}if(a===e)e=f>=h?yf(b.Cb,f,d.Cb,h):yf(d.Cb,h,b.Cb,f);else{var k=f!==h?f>h?1:-1:xf(0,b.Cb,d.Cb,
+f);if(0===k)return ff().fk;1===k?e=wf(b.Cb,f,d.Cb,h):(d=wf(d.Cb,h,b.Cb,f),a=e,e=d)}a=cf(new df,a|0,e.n.length,e);ef(a);return a}
+function Df(a,b,d){var e=b.Wb;a=d.Wb;var f=b.cc,h=d.cc;if(0===a)return b;if(0===e)return zba(d);if(2===(f+h|0))return b=b.Cb.n[0],f=0,d=d.Cb.n[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=ff(),e=b,b=f,f=h,d=e-d|0,Cf(a,(new Xb).ha(d,(-2147483648^d)>(-2147483648^e)?-1+(b-f|0)|0:b-f|0));var k=f!==h?f>h?1:-1:xf(Ef(),b.Cb,d.Cb,f);if(e===a&&0===k)return ff().fk;-1===k?(d=e===a?wf(d.Cb,h,b.Cb,f):yf(d.Cb,h,b.Cb,f),a=-a|0):(d=e===a?wf(b.Cb,f,d.Cb,h):yf(b.Cb,f,d.Cb,h),a=
+e);a=cf(new df,a|0,d.n.length,d);ef(a);return a}vf.prototype.$classData=g({Z_:0},!1,"java.math.Elementary$",{Z_:1,d:1});var Gf=void 0;function Ef(){Gf||(Gf=(new vf).b());return Gf}function Hf(){this.ei=0;this.zr=null}Hf.prototype=new l;Hf.prototype.constructor=Hf;Hf.prototype.o=function(a){return a&&a.$classData&&a.$classData.m.oI?this.ei===a.ei?this.zr===a.zr:!1:!1};Hf.prototype.l=function(){return"precision\x3d"+this.ei+" roundingMode\x3d"+this.zr};Hf.prototype.r=function(){return this.ei<<3|this.zr.qH};
+Hf.prototype.$classData=g({oI:0},!1,"java.math.MathContext",{oI:1,d:1});function If(){this.IH=null}If.prototype=new l;If.prototype.constructor=If;If.prototype.b=function(){Jf=this;Kf();var a=Lf().sx,b=new Hf;b.ei=34;b.zr=a;this.IH=b;Kf();Lf();Kf();Lf();Kf();Lf();return this};If.prototype.$classData=g({$_:0},!1,"java.math.MathContext$",{$_:1,d:1});var Jf=void 0;function Kf(){Jf||(Jf=(new If).b());return Jf}function Mf(){this.Lo=this.Mo=this.jD=null}Mf.prototype=new l;Mf.prototype.constructor=Mf;
+Mf.prototype.b=function(){Nf=this;this.jD=Aba(10,10);Aba(14,5);this.Mo=la(Xa(Xe),[32]);this.Lo=la(Xa(Xe),[32]);var a,b;a=1;for(var d=b=0;;){var e=d;if(18>=e){tf().Lo.n[e]=Cf(ff(),(new Xb).ha(a,b));var f=tf().Mo,h=ff(),k=a,n=b;f.n[e]=Cf(h,(new Xb).ha(0===(32&e)?k<<e:0,0===(32&e)?(k>>>1|0)>>>(31-e|0)|0|n<<e:k<<e));e=a;a=e>>>16|0;e=ea(5,65535&e);f=ea(5,a);a=e+(f<<16)|0;e=(e>>>16|0)+f|0;b=ea(5,b)+(e>>>16|0)|0}else tf().Lo.n[e]=Of(tf().Lo.n[-1+e|0],tf().Lo.n[1]),tf().Mo.n[e]=Of(tf().Mo.n[-1+e|0],ff().rq);
+if(31===d)break;d=1+d|0}return this};
+function Bba(a,b,d){var e,f=-1+b|0;if(!(0>=b))for(var h=0;;){var k=h;e=0;var n=1+k|0,r=-1+b|0;if(!(n>=b))for(;;){var y=n;tf();var E=a.n[k],Q=a.n[y],R=d.n[k+y|0],da=65535&E,E=E>>>16|0,ma=65535&Q,Q=Q>>>16|0,ra=ea(da,ma),ma=ea(E,ma),Ca=ea(da,Q),da=ra+((ma+Ca|0)<<16)|0,ra=(ra>>>16|0)+Ca|0,E=(ea(E,Q)+(ra>>>16|0)|0)+(((65535&ra)+ma|0)>>>16|0)|0,R=da+R|0,E=(-2147483648^R)<(-2147483648^da)?1+E|0:E;e=R+e|0;R=(-2147483648^e)<(-2147483648^R)?1+E|0:E;d.n[k+y|0]=e;e=R;if(n===r)break;n=1+n|0}d.n[k+b|0]=e;if(h===
+f)break;h=1+h|0}sba(kf(),d,d,b<<1);for(h=f=e=0;f<b;)n=a.n[f],y=a.n[f],r=d.n[h],k=e,e=65535&n,n=n>>>16|0,E=65535&y,y=y>>>16|0,R=ea(e,E),E=ea(n,E),Q=ea(e,y),e=R+((E+Q|0)<<16)|0,R=(R>>>16|0)+Q|0,n=(ea(n,y)+(R>>>16|0)|0)+(((65535&R)+E|0)>>>16|0)|0,r=e+r|0,n=(-2147483648^r)<(-2147483648^e)?1+n|0:n,k=r+k|0,r=(-2147483648^k)<(-2147483648^r)?1+n|0:n,d.n[h]=k,h=1+h|0,k=r+d.n[h]|0,r=(-2147483648^k)<(-2147483648^r)?1:0,d.n[h]=k,e=r,f=1+f|0,h=1+h|0;return d}
+function Aba(a,b){var d;d=[];if(0<a){var e=1,f=1,h=e;for(d.push(null===h?0:h);f<a;)e=ea(e|0,b),f=1+f|0,h=e,d.push(null===h?0:h)}return ka(Xa(db),d)}
+function Pf(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.Wb!==f.Wb?-1:1;if(2===b){e=d.Cb.n[0];b=f.Cb.n[0];d=65535&e;var e=e>>>16|0,k=65535&b;b=b>>>16|0;var f=ea(d,k),k=ea(e,k),n=ea(d,b);d=f+((k+n|0)<<16)|0;f=(f>>>16|0)+n|0;e=(ea(e,b)+(f>>>16|0)|0)+(((65535&f)+k|0)>>>16|0)|0;0===e?a=(new df).ha(a,d):(Af(),a=cf(new df,a,2,Bf(0,d,(new J).j([e]))))}else{d=d.Cb;f=f.Cb;k=la(Xa(db),[b]);if(0!==h&&0!==e)if(1===h)k.n[e]=Qf(0,k,f,e,d.n[0]);else if(1===e)k.n[h]=
+Qf(0,k,d,h,f.n[0]);else if(d===f&&h===e)Bba(d,h,k);else if(n=-1+h|0,!(0>=h))for(h=0;;){var r=h,y;y=0;var E=d.n[r],Q=-1+e|0;if(!(0>=e))for(var R=0;;){var da=R;tf();var ma=f.n[da],ra=k.n[r+da|0],Ca=65535&E,ab=E>>>16|0,hb=65535&ma,ma=ma>>>16|0,mb=ea(Ca,hb),hb=ea(ab,hb),Wb=ea(Ca,ma),Ca=mb+((hb+Wb|0)<<16)|0,mb=(mb>>>16|0)+Wb|0,ab=(ea(ab,ma)+(mb>>>16|0)|0)+(((65535&mb)+hb|0)>>>16|0)|0,ra=Ca+ra|0,ab=(-2147483648^ra)<(-2147483648^Ca)?1+ab|0:ab;y=ra+y|0;ra=(-2147483648^y)<(-2147483648^ra)?1+ab|0:ab;k.n[r+
+da|0]=y;y=ra;if(R===Q)break;R=1+R|0}k.n[r+e|0]=y;if(h===n)break;h=1+h|0}a=cf(new df,a,b,k);ef(a)}return a}e=(-2&d.cc)<<4;k=Rf(d,e);n=Rf(f,e);b=Sf(k,e);h=Df(Ef(),d,b);b=Sf(n,e);f=Df(Ef(),f,b);d=Pf(a,k,n);b=Pf(a,h,f);a=Pf(a,Df(Ef(),k,h),Df(Ef(),f,n));f=d;a=zf(Ef(),a,f);a=zf(Ef(),a,b);a=Sf(a,e);e=d=Sf(d,e<<1);a=zf(Ef(),e,a);return zf(Ef(),a,b)}
+function Qf(a,b,d,e,f){var h;h=0;a=-1+e|0;if(!(0>=e))for(e=0;;){var k=e;tf();var n=d.n[k],r=65535&n,n=n>>>16|0,y=65535&f,E=f>>>16|0,Q=ea(r,y),y=ea(n,y),R=ea(r,E),r=Q+((y+R|0)<<16)|0,Q=(Q>>>16|0)+R|0,n=(ea(n,E)+(Q>>>16|0)|0)+(((65535&Q)+y|0)>>>16|0)|0;h=r+h|0;n=(-2147483648^h)<(-2147483648^r)?1+n|0:n;b.n[k]=h;h=n;if(e===a)break;e=1+e|0}return h}
+function Cba(a,b){var d=a.Wb,e=a.cc;a=a.Cb;if(0===d)return ff().fk;if(1===e){e=a.n[0];a=65535&e;var e=e>>>16|0,f=65535&b;b=b>>>16|0;var h=ea(a,f),f=ea(e,f),k=ea(a,b);a=h+((f+k|0)<<16)|0;h=(h>>>16|0)+k|0;b=(ea(e,b)+(h>>>16|0)|0)+(((65535&h)+f|0)>>>16|0)|0;if(0===b)return(new df).ha(d,a);Af();return cf(new df,d,2,Bf(0,a,(new J).j([b])))}h=1+e|0;f=la(Xa(db),[h]);f.n[e]=Qf(0,f,a,e,b);d=cf(new df,d,h,f);ef(d);return d}
+function Tf(a,b){var d=a.Mo.n.length,e=d>>31,f=b.oa;if(f===e?(-2147483648^b.ia)<(-2147483648^d):f<e)return a.Mo.n[b.ia];d=b.oa;if(0===d?-2147483598>=(-2147483648^b.ia):0>d)return Uf(ff().rq,b.ia);d=b.oa;if(0===d?-1>=(-2147483648^b.ia):0>d)return Sf(Uf(a.Lo.n[1],b.ia),b.ia);for(var h=Uf(a.Lo.n[1],2147483647),d=h,f=b.oa,k=-2147483647+b.ia|0,e=k,k=1>(-2147483648^k)?f:-1+f|0,f=Vf(Sa(),b.ia,b.oa,2147483647,0);;){var n=e,r=k;if(0===r?-1<(-2147483648^n):0<r)d=Of(d,h),e=-2147483647+e|0,k=1>(-2147483648^e)?
+k:-1+k|0;else break}d=Of(d,Uf(a.Lo.n[1],f));d=Sf(d,2147483647);a=b.oa;e=b=-2147483647+b.ia|0;for(k=1>(-2147483648^b)?a:-1+a|0;;)if(b=e,a=k,0===a?-1<(-2147483648^b):0<a)d=Sf(d,2147483647),b=k,a=-2147483647+e|0,b=1>(-2147483648^a)?b:-1+b|0,e=a,k=b;else break;return Sf(d,f)}Mf.prototype.$classData=g({a0:0},!1,"java.math.Multiplication$",{a0:1,d:1});var Nf=void 0;function tf(){Nf||(Nf=(new Mf).b());return Nf}function Wf(){this.Aj=this.nX=null;this.a=0}Wf.prototype=new l;Wf.prototype.constructor=Wf;
+Wf.prototype.b=function(){Xf=this;this.nX="\x3cBREEDS?\x3e";this.a=(1|this.a)<<24>>24;x();var a=[(new Yf).Cd("CREATE-ORDERED-\x3cBREEDS\x3e",Zf(),"_createorderedturtles"),(new Yf).Cd("CREATE-\x3cBREEDS\x3e",Zf(),"_createturtles"),(new Yf).Cd("HATCH-\x3cBREEDS\x3e",Zf(),"_hatch"),(new Yf).Cd("SPROUT-\x3cBREEDS\x3e",Zf(),"_sprout"),(new Yf).Cd("\x3cBREEDS\x3e",$f(),"_breed"),(new Yf).Cd("\x3cBREEDS\x3e-AT",$f(),"etc._breedat"),(new Yf).Cd("\x3cBREEDS\x3e-HERE",$f(),"etc._breedhere"),(new Yf).Cd("\x3cBREEDS\x3e-ON",
+$f(),"etc._breedon"),(new Yf).Cd("\x3cBREED\x3e",$f(),"etc._breedsingular"),(new Yf).Cd("IS-\x3cBREED\x3e?",$f(),"etc._isbreed"),(new ag).Cd("CREATE-\x3cBREEDS\x3e-FROM",Zf(),"etc._createlinksfrom"),(new ag).Cd("CREATE-\x3cBREED\x3e-FROM",Zf(),"etc._createlinkfrom"),(new ag).Cd("CREATE-\x3cBREEDS\x3e-TO",Zf(),"etc._createlinksto"),(new bg).Cd("CREATE-\x3cBREEDS\x3e-WITH",Zf(),"etc._createlinkswith"),(new ag).Cd("CREATE-\x3cBREED\x3e-TO",Zf(),"etc._createlinkto"),(new bg).Cd("CREATE-\x3cBREED\x3e-WITH",
+Zf(),"etc._createlinkwith"),(new cg).Cd("IN-\x3cBREED\x3e-FROM",$f(),"etc._inlinkfrom"),(new cg).Cd("IN-\x3cBREED\x3e-NEIGHBOR?",$f(),"etc._inlinkneighbor"),(new cg).Cd("IN-\x3cBREED\x3e-NEIGHBORS",$f(),"etc._inlinkneighbors"),(new cg).Cd("IS-\x3cBREED\x3e?",$f(),"etc._isbreed"),(new cg).Cd("\x3cBREEDS\x3e",$f(),"etc._linkbreed"),(new cg).Cd("\x3cBREED\x3e",$f(),"etc._linkbreedsingular"),(new cg).Cd("\x3cBREED\x3e-NEIGHBOR?",$f(),"etc._linkneighbor"),(new cg).Cd("\x3cBREED\x3e-NEIGHBORS",$f(),"etc._linkneighbors"),
+(new cg).Cd("\x3cBREED\x3e-WITH",$f(),"etc._linkwith"),(new cg).Cd("MY-IN-\x3cBREEDS\x3e",$f(),"etc._myinlinks"),(new cg).Cd("MY-\x3cBREEDS\x3e",$f(),"etc._mylinks"),(new cg).Cd("MY-OUT-\x3cBREEDS\x3e",$f(),"etc._myoutlinks"),(new cg).Cd("OUT-\x3cBREED\x3e-NEIGHBOR?",$f(),"etc._outlinkneighbor"),(new cg).Cd("OUT-\x3cBREED\x3e-NEIGHBORS",$f(),"etc._outlinkneighbors"),(new cg).Cd("OUT-\x3cBREED\x3e-TO",$f(),"etc._outlinkto")],a=(new J).j(a),b=x().s;this.Aj=K(a,b);this.a=(2|this.a)<<24>>24;return this};
+function Dba(a,b,d){return Rb(Ia(),Rb(Ia(),d.Xd,"\x3cBREEDS\x3e",b.$l.va),"\x3cBREED\x3e",b.Tf.va)}function dg(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/BreedIdentifierHandler.scala: 16");return a.Aj}function Eba(a,b,d){return b.$g&&b.Zg?(new eg).iv(a,d):b.$g?(new gg).iv(a,d):(new hg).iv(a,d)}
+function saa(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/BreedIdentifierHandler.scala: 14");return a.nX}function Fba(a,b){var d=dg(a);a=Gba(a,b,$f()).gk(m(new p,function(a,b){return function(a){return Dba(Sb(),b,a)}}(a,b)));b=x();return d.lc(a,b.s)}
+function Gba(a,b,d){return Eba(d,b,m(new p,function(){return function(a){var b=Sb(),b="^"+saa(b)+"$";if(null===a)throw(new Ce).b();var d=ig(),b=jg(d,b);return!Hba(kg(new lg,b,a,La(a)))}}(a)))}function Iba(a,b){var d=dg(a);a=Gba(a,b,Zf()).gk(m(new p,function(a,b){return function(a){return Dba(Sb(),b,a)}}(a,b)));b=x();return d.lc(a,b.s)}
+function Jba(a,b,d){return dg(a).Oc().zj(m(new p,function(a,b,d){return function(a){var e=b.W,e=mg(a.$y(),e);if(e.z())r=!1;else if(null!==e.R())var r=e.R(),r=0===ng(r,1);else r=!1;if(r){var e=e.R().X(0),r=(new Lc).Of(a.ey(d)),y=new og;if(null===a)throw pg(qg(),null);y.Qa=a;y.mr=e;a=rg(r,y)}else a=C();return a.wb()}}(a,b,d)),(sg(),(new tg).b())).Lg()}Wf.prototype.$classData=g({k0:0},!1,"org.nlogo.core.BreedIdentifierHandler$",{k0:1,d:1});var Xf=void 0;
+function Sb(){Xf||(Xf=(new Wf).b());return Xf}function ug(){}ug.prototype=new l;ug.prototype.constructor=ug;ug.prototype.b=function(){return this};function Kba(a,b){if(vg(b))return(new wg).c(b);if("number"===typeof b)return(new xg).ZE(b);if("boolean"===typeof b)return(new yg).qv(b);if(zg(b))return Lba(b);throw pg(qg(),(new Ag).c("Invalid chooser option "+b));}ug.prototype.$classData=g({p0:0},!1,"org.nlogo.core.Chooseable$",{p0:1,d:1});var Bg=void 0;function Mba(){Bg||(Bg=(new ug).b());return Bg}
+function Ig(){this.DH=null;this.RT=this.xH=0;this.EH=null;this.a=0}Ig.prototype=new l;Ig.prototype.constructor=Ig;
+Ig.prototype.b=function(){Jg=this;var a=(new J).j("gray red orange brown yellow green lime turquoise cyan sky blue violet magenta pink black white".split(" ")),b=a.qa.length|0,b=la(Xa(qa),[b]),d;d=0;for(a=Ye(new Ze,a,0,a.qa.length|0);a.ra();){var e=a.ka();b.n[d]=e;d=1+d|0}this.DH=b;this.a=(1|this.a)<<24>>24;this.xH=0;this.a=(2|this.a)<<24>>24;this.RT=9.9;this.a=(4|this.a)<<24>>24;if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/ColorConstants.scala: 16");
+b=[5,15,25,35,45,55,65,75,85,95,105,115,125,135,this.xH,Nba(this)];a=(new J).j(b);b=a.qa.length|0;b=la(Xa(gb),[b]);d=0;for(a=Ye(new Ze,a,0,a.qa.length|0);a.ra();)e=a.ka(),b.n[d]=+e,d=1+d|0;this.EH=b;this.a=(8|this.a)<<24>>24;return this};function Nba(a){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/ColorConstants.scala: 17");return a.RT}
+function Oba(){var a=Kg();if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/ColorConstants.scala: 8");return a.DH}function Pba(a,b){if(0===(8&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/ColorConstants.scala: 19");return a.EH.n[b]}Ig.prototype.$classData=g({t0:0},!1,"org.nlogo.core.ColorConstants$",{t0:1,d:1});var Jg=void 0;function Kg(){Jg||(Jg=(new Ig).b());return Jg}
+var Rba=function Qba(b,d){if(vg(d))return'"'+Lg(Mg(),d)+'"';if("boolean"===typeof d)return d?"true":"false";if(Ng(d)){b=function(b){return function(d){return Qba(b,d)}}(b);var e=x().s;if(e===x().s)if(d===u())b=u();else{var e=d.Y(),f=e=Og(new Pg,b(e),u());for(d=d.$();d!==u();){var h=d.Y(),h=Og(new Pg,b(h),u()),f=f.Ka=h;d=d.$()}b=e}else{for(e=Nc(d,e);!d.z();)f=d.Y(),e.Ma(b(f)),d=d.$();b=e.Ba()}return b.Qc("["," ","]")}if(zg(d)){e=x().s;d=K(d,e);b=function(b){return function(d){return Qba(b,d)}}(b);
+e=x().s;if(e===x().s)if(d===u())b=u();else{e=d.Y();f=e=Og(new Pg,b(e),u());for(d=d.$();d!==u();)h=d.Y(),h=Og(new Pg,b(h),u()),f=f.Ka=h,d=d.$();b=e}else{for(e=Nc(d,e);!d.z();)f=d.Y(),e.Ma(b(f)),d=d.$();b=e.Ba()}return b.Qc("["," ","]")}if(null!==d)return na(d);throw(new q).i(d);};function Qg(){this.f=null}Qg.prototype=new l;Qg.prototype.constructor=Qg;Qg.prototype.Wf=function(a){this.f=a;return this};Qg.prototype.$classData=g({C0:0},!1,"org.nlogo.core.ErrorSource",{C0:1,d:1});function Rg(){}
+Rg.prototype=new l;Rg.prototype.constructor=Rg;Rg.prototype.b=function(){return this};function Sg(a,b,d,e){throw(new kd).gt(a,b,d,e);}Rg.prototype.$classData=g({D0:0},!1,"org.nlogo.core.Fail$",{D0:1,d:1});var Sba=void 0;function Tg(){Sba||(Sba=(new Rg).b())}function Ug(){this.lT=null;this.a=!1}Ug.prototype=new l;Ug.prototype.constructor=Ug;Ug.prototype.b=function(){Vg=this;this.lT=Wg(Xg(),u());this.a=!0;return this};
+function Yg(){var a;Vg||(Vg=(new Ug).b());a=Vg;if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/FrontEndInterface.scala: 12");return a.lT}Ug.prototype.$classData=g({E0:0},!1,"org.nlogo.core.FrontEndInterface$",{E0:1,d:1});var Vg=void 0;function Zg(){this.np=null;this.a=this.xa=!1}Zg.prototype=new l;Zg.prototype.constructor=Zg;Zg.prototype.b=function(){return this};
+function $g(){var a;ah||(ah=(new Zg).b());a=ah;if(!a.xa&&!a.xa){for(var b=[(new w).e("org.nlogo.prim.etc.$common.noAngleGreaterThan360","{0} cannot take an angle greater than 360."),(new w).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 w).e("org.nlogo.prim.etc.$common.negativeIndex","{0} isn''t greater than or equal to zero."),(new w).e("org.nlogo.prim._report.mustImmediatelyBeUsedInToReport",
+"{0} must be immediately inside a TO-REPORT."),(new w).e("org.nlogo.prim.$common.agentKind.link","a link"),(new w).e("compiler.LetVariable.notDefined","Nothing named {0} has been defined."),(new w).e("org.nlogo.prim.etc._setDefaultShape.notADefinedTurtleShape",'"{0}" is not a currently defined turtle shape.'),(new w).e("org.nlogo.workspace.DefaultFileManager.canOnlyDeleteFiles","You can only delete files."),(new w).e("org.nlogo.prim.etc.$common.divByZero","Division by zero."),(new w).e("org.nlogo.prim.etc.$common.emptyList",
+"List is empty."),(new w).e("org.nlogo.prim._returnreport.reportNotCalledInReportProcedure","Reached end of reporter procedure without REPORT being called."),(new w).e("org.nlogo.prim._mean.cantFindMeanOfNonNumbers","Can''t find the mean of a list that contains non-numbers : {0} is a {1}."),(new w).e("org.nlogo.prim.etc._sublist.endIsLessThanStart","{0} is less than {1}."),(new w).e("org.nlogo.prim.etc._randomNormal.secondInputNotNegative","random-normal''s second input can''t be negative."),(new w).e("org.nlogo.prim.etc.$common.cantTakeLogarithmOf",
+"Can''t take logarithm of {0}."),(new w).e("org.nlogo.prim.etc._layoutcircle.patchesImmovable","Patches are immovable."),(new w).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 w).e("org.nlogo.prim.$common.paramOutOfBounds","{0} is not in the range 0.0 to 1.0"),(new w).e("org.nlogo.prim.etc.$common.notThatManyAgentsExist","Requested {0} random agents from a set of only {1} agents."),
+(new w).e("org.nlogo.prim.etc._foreach.listsMustBeSameLength","All the list arguments to FOREACH must be the same length."),(new w).e("org.nlogo.$common.tooBigForInt","{0} is too large to be represented exactly as an integer in NetLogo."),(new w).e("org.nlogo.prim.etc._sqrt.squareRootIsImaginary","The square root of {0} is an imaginary number."),(new w).e("org.nlogo.agent.Agent.cantSetUnknownVariable","Unknown variable {0}."),(new w).e("org.nlogo.prim._min.cantFindMinOfListWithNoNumbers","Can''t find the minimum of a list with no numbers: {0}"),
+(new w).e("compiler.StructureParser.includeNotFound","Could not find {0}"),(new w).e("compiler.SetVisitor.notSettable","This isn''t something you can use \"set\" on."),(new w).e("org.nlogo.prim.$common.onlyObserverCanAskAllTurtles","Only the observer can ASK the set of all turtles."),(new w).e("org.nlogo.agent.Protractor.noHeadingFromAgentToSelf","No heading is defined from an agent to itself."),(new w).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 w).e("org.nlogo.prim.$common.agentKind.turtle","a turtle"),(new w).e("org.nlogo.prim.etc._exportoutput.emptyPath","Can''t export to empty pathname."),(new w).e("org.nlogo.agent.Agent.wrongTypeOnSetError","can''t set {0} variable {1} to non-{2} {3}"),(new w).e("org.nlogo.prim.$common.expectedBooleanValue","{0} expected a true/false value from {1}, but got {2} instead."),(new w).e("org.nlogo.agent.Protractor.noHeadingFromPointToSelf","No heading is defined from a point ({0},{1}) to that same point."),
+(new w).e("org.nlogo.workspace.DefaultFileManager.noOpenFile","No file has been opened."),(new w).e("org.nlogo.prim.etc.$common.noNegativeRadius","{0} cannot take a negative radius."),(new w).e("org.nlogo.prim.etc._standarddeviation.needListGreaterThanOneItem","Can''t find the standard deviation of a list without at least two numbers: {0}"),(new w).e("org.nlogo.agent.Agent.rgbListSizeError.3or4","An rgb list must contain 3 or 4 numbers 0-255"),(new w).e("org.nlogo.prim._report.canOnlyUseInToReport",
+"{0} can only be used inside TO-REPORT."),(new w).e("org.nlogo.agent.Turtle.cantAccessLinkWithoutSpecifyingLink","A turtle can''t access a link variable without specifying which link."),(new w).e("org.nlogo.prim.etc._log.notAValidBase","{0} isn''t a valid base for a logarithm."),(new w).e("org.nlogo.prim.etc.$common.tickCounterNotStarted","The tick counter has not been started yet. Use RESET-TICKS."),(new w).e("org.nlogo.prim.etc.$common.expectedLastInputToBeLinkBreed","Expected the last input to be a link breed."),
+(new w).e("org.nlogo.agent.ChooserConstraint.invalidValue","Value must be one of: {0}"),(new w).e("compiler.TaskVisitor.notDefined","This special variable isn''t defined here."),(new w).e("org.nlogo.agent.Agent.rgbListSizeError.3","An rgb list must contain 3 numbers 0-255"),(new w).e("org.nlogo.prim.$common.invalidAgentKind.simple","this code can''t be run by {0}"),(new w).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 w).e("org.nlogo.agent.Patch.cantSetTurtleWithoutSpecifyingTurtle","A patch can''t set a turtle variable without specifying which turtle."),(new w).e("org.nlogo.prim.etc._sublist.endIsGreaterThanListSize","{0} is greater than the length of the input list ({1})."),(new w).e("org.nlogo.prim.etc._stop.notAllowedInsideToReport","{0} is not allowed inside TO-REPORT."),(new w).e("org.nlogo.prim.etc.$common.indexExceedsStringSize","Can''t find element {0} of the string {1}, which is only of length {2}."),
+(new w).e("org.nlogo.agent.Agent.rgbValueError","RGB values must be 0-255"),(new w).e("org.nlogo.prim.etc.$common.emptyStringInput","{0} got an empty string as input."),(new w).e("org.nlogo.prim.$common.noSumOfListWithNonNumbers","Can''t find the sum of a list that contains non-numbers {0} is a {1}."),(new w).e("compiler.LocalsVisitor.notDefined","Nothing named {0} has been defined."),(new w).e("org.nlogo.prim.lambda.missingInputs","anonymous procedure expected {0} inputs, but only got {1}"),(new w).e("org.nlogo.prim.etc._linkheading.noLinkHeadingWithSameEndpoints",
+"There is no heading of a link whose endpoints are in the same position."),(new w).e("org.nlogo.prim.etc._setDefaultShape.notADefinedLinkShape",'"{0}" is not a currently defined link shape.'),(new w).e("org.nlogo.prim.etc._runresult.failedToReportResult","Failed to report a result."),(new w).e("org.nlogo.agent.ImportPatchColors.unsupportedImageFormat","The following file is not in a supported image format: {0}"),(new w).e("org.nlogo.agent.Turtle.cantSetBreedToNonBreedAgentSet","You can''t set BREED to a non-breed agentset."),
+(new w).e("org.nlogo.agent.Agent.breedDoesNotOwnVariable","{0} breed does not own variable {1}"),(new w).e("org.nlogo.prim.etc.$common.expectedTurtleOrPatchButGotLink","Expected a turtle or a patch but got a link."),(new w).e("org.nlogo.agent.Patch.pcolorNotADouble","Pcolor is not a double."),(new w).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 w).e("org.nlogo.prim.etc._median.emptyList",
+"Can''t find the median of a list with no numbers: {0}"),(new w).e("org.nlogo.prim.$common.invalidAgentKind.alternative","this code can''t be run by {0}, only {1}"),(new w).e("org.nlogo.agent.Link.cantSetBreedToNonLinkBreedAgentSet","You can''t set BREED to a non-link-breed agentset."),(new w).e("org.nlogo.agent.Patch.cantAccessTurtleOrLinkWithoutSpecifyingAgent","A patch can''t access a turtle or link variable without specifying which agent."),(new w).e("org.nlogo.prim.etc._randomgamma.noNegativeInputs",
+"Both inputs to {0} must be positive."),(new w).e("org.nlogo.prim.etc._otherend.onlyLinkCanGetTurtleEnd","Only a link can get the OTHER-END from a turtle."),(new w).e("org.nlogo.prim.etc._atpoints.invalidListOfPoints","Invalid list of points: {0}"),(new w).e("compiler.StructureConverter.noBreed",'There is no breed "{0}"'),(new w).e("org.nlogo.prim.etc._sublist.startIsLessThanZero","{0} is less than zero."),(new w).e("org.nlogo.prim.etc.$common.requestMoreItemsThanInList","Requested {0} random items from a list of length {1}."),
+(new w).e("org.nlogo.prim.etc.atan.bothInputsCannotBeZero","atan is undefined when both inputs are zero."),(new w).e("org.nlogo.agent.Link.cantHaveBreededAndUnbreededLinks","You cannot have both breeded and unbreeded links in the same world."),(new w).e("org.nlogo.prim.etc.$common.emptyString","String is empty."),(new w).e("org.nlogo.prim.$common.agentKind.observer","the observer"),(new w).e("org.nlogo.prim.etc._myself.noAgentMyself","There is no agent for MYSELF to refer to."),(new w).e("org.nlogo.prim._askconcurrent.onlyObserverCanAskAllTurtles",
+"only the observer can ASK the set of all turtles"),(new w).e("org.nlogo.prim.etc.median.cantFindMedianOfListWithNoNumbers","Can''t find the median of a list with no numbers: {0}."),(new w).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 w).e("org.nlogo.agent.Patch.cantChangePatchCoordinates","You can''t change a patch''s coordinates."),(new w).e("org.nlogo.prim.etc._resizeworld.worldMustIncludeOrigin",
+"You must include the point (0, 0) in the world."),(new w).e("org.nlogo.prim.etc.$common.noNegativeNumber","{0} cannot take a negative number."),(new w).e("org.nlogo.prim.etc.$common.emptyListInput","{0} got an empty list as input."),(new w).e("org.nlogo.prim.$common.turtleCantLinkToSelf","A turtle cannot link to itself."),(new w).e("org.nlogo.prim._max.cantFindMaxOfListWithNoNumbers","Can''t find the maximum of a list with no numbers: {0}"),(new w).e("org.nlogo.workspace.DefaultFileManager.cannotDeleteNonExistantFile",
+"You cannot delete a non-existent file."),(new w).e("org.nlogo.prim.etc._range.zeroStep","The step-size for range must be non-zero."),(new w).e("org.nlogo.prim.etc._mean.cantFindMeanOfListWithNoNumbers","Can''t find the mean of a list with no numbers: {0}."),(new w).e("org.nlogo.agent.Patch.cantAccessTurtleWithoutSpecifyingTurtle","A patch can''t access a turtle variable without specifying which turtle."),(new w).e("org.nlogo.prim.etc.$common.syntaxError","Syntax Error: {0}"),(new w).e("fileformat.invalidversion",
+'Invalid NetLogo file. Expected "{0}" formatted model to have version compatible with {1}, but this model had version {2}'),(new w).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 w).e("org.nlogo.prim.lambda.missingInput","anonymous procedure expected 1 input, but only got 0"),(new w).e("org.nlogo.prim.etc._tickadvance.noNegativeTickAdvances",
+"Cannot advance the tick counter by a negative amount."),(new w).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 w).e("org.nlogo.prim._reduce.emptyListInvalidInput","The list argument to 'reduce' must not be empty."),(new w).e("org.nlogo.prim.etc.$common.noNegativeAngle","{0} cannot take a negative angle."),(new w).e("org.nlogo.$common.thatAgentIsDead",
+"That {0} is dead."),(new w).e("org.nlogo.agent.BooleanConstraint.bool","Value must be a boolean."),(new w).e("org.nlogo.agent.Agent.notADoubleVariable","{0} is not a double variable."),(new w).e("org.nlogo.prim.etc._setdefaultshape.cantSetDefaultShapeOfPatch","Cannot set the default shape of patches, because patches do not have shapes."),(new w).e("org.nlogo.agent.Turtle.cantChangeWho","You can''t change a turtle''s ID number."),(new w).e("org.nlogo.prim.$common.onlyObserverCanAskAllPatches","Only the observer can ASK the set of all patches."),
+(new w).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 w).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 w).e("org.nlogo.agent.Topology.cantMoveTurtleBeyondWorldEdge","Cannot move turtle beyond the world''s edge."),
+(new w).e("org.nlogo.prim.etc._substring.endIsGreaterThanListSize","{0} is too big for {1}, which is only of length {2}."),(new w).e("org.nlogo.prim.$common.withExpectedBooleanValue","WITH expected a true/false value from {0}, but got {1} instead."),(new w).e("org.nlogo.prim.etc.$common.indexExceedsListSize","Can''t find element {0} of the list {1}, which is only of length {2}."),(new w).e("org.nlogo.prim.$common.agentKind.patch","a patch"),(new w).e("org.nlogo.agent.Patch.cantAccessLinkVarWithoutSpecifyingLink",
+"A patch can''t access a link variable without specifying which link."),(new w).e("org.nlogo.agent.Turtle.patchBeyondLimits","Cannot get patch beyond limits of current world."),(new w).e("org.nlogo.prim.etc._otherend.onlyTurtleCanGetLinkEnd","Only a turtle can get the OTHER-END of a link."),(new w).e("org.nlogo.agent.Agent.shapeUndefined",'"{0}" is not a currently defined shape.'),(new w).e("org.nlogo.prim.etc._variance.listMustHaveMoreThanOneNumber","Can''t find the variance of a list without at least two numbers: {0}."),
+(new w).e("org.nlogo.prim.etc.$common.firstInputCantBeNegative","First input to {0} can''t be negative."),(new w).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 w).e("compiler.CarefullyVisitor.badNesting","{0} cannot be used outside of CAREFULLY."),(new w).e("org.nlogo.plot.noPlotSelected","There is no current plot. Please select a current plot using the set-current-plot command."),
+(new w).e("org.nlogo.agent.Agent.cantMoveToLink","You can''t move-to a link."),(new w).e("org.nlogo.prim.etc._otherend.incorrectLink","{0} is not linked by {1}."),(new w).e("org.nlogo.prim.etc._setdefaultshape.canOnlySetDefaultShapeOfEntireBreed","Can only set the default shape of all turtles , all links, or an entire breed.")],d=fc(new gc,hc()),e=0,f=b.length|0;e<f;)ic(d,b[e]),e=1+e|0;b=new bh;b.Dm=d.Va;a.np=b;a.xa=!0}return a.np}Zg.prototype.$classData=g({G0:0},!1,"org.nlogo.core.I18N$",{G0:1,d:1});
+var ah=void 0;function bh(){this.Dm=null}bh.prototype=new l;bh.prototype.constructor=bh;bh.prototype.$classData=g({H0:0},!1,"org.nlogo.core.I18N$BundleKind",{H0:1,d:1});function ch(a){return a.H().Zb.toUpperCase()}function L(a){a.K(null);a.L(a.G().g);a.N(a.G().p)}function dh(a,b){var d=a.H();b.K(eh(d,b,d.Zb,d.sb));b.L(a.M());return b}function fh(){this.HW=null;this.a=!1}fh.prototype=new l;fh.prototype.constructor=fh;
+fh.prototype.b=function(){gh=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=hh();else{for(var b=ih(new rh,hh()),d=0,e=a.length|0;d<e;)sh(b,a[d]),d=1+d|0;a=b.Va}this.HW=a;this.a=!0;return this};fh.prototype.$classData=g({I0:0},!1,"org.nlogo.core.Keywords$",{I0:1,d:1});var gh=void 0;function th(){}th.prototype=new l;th.prototype.constructor=th;th.prototype.b=function(){return this};
+th.prototype.$classData=g({R0:0},!1,"org.nlogo.core.Nobody$",{R0:1,d:1});var uh=void 0;function vh(){uh||(uh=(new th).b());return uh}function wh(){this.hX=this.aI=this.fI=this.eI=null;this.a=0}wh.prototype=new l;wh.prototype.constructor=wh;
+wh.prototype.b=function(){xh=this;this.eI="Number too large";this.a=(1|this.a)<<24>>24;this.fI="is too large to be represented exactly as an integer in NetLogo";this.a=(2|this.a)<<24>>24;this.aI="Illegal number format";this.a=(4|this.a)<<24>>24;this.hX=(new Ub).Ap("^-?[0-9]*(\\.[0-9]*)?([Ee]-?[0-9]+)?$",(new J).j([]));this.a=(8|this.a)<<24>>24;return this};
+function yh(a,b){try{var d=(new Tb).c(b).U.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=zh(Ah(),f);else h=!1}else h=!1;if(h){var k=Bh(Ch(),b);if(Infinity===k||-Infinity===k){rc();if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/core/NumberParser.scala: 12");return(new Dh).i(a.eI)}for(var n=(new Tb).c(".eE"),d=0;;){if(d<(n.U.length|
+0))var r=n.X(d),y=null===r?0:r.W,E=(new Tb).c(b),Q=!1===Eh(E,Oe(y));else Q=!1;if(Q)d=1+d|0;else break}if(d!==(n.U.length|0))return rc(),(new Fh).i(k);var R=Tba(Gh(),b),da=R.ia,ma=R.oa;if((2097152===ma?0!==da:2097152<ma)||-2097152>ma){rc();var ra=b+" "+Uba(a);return(new Dh).i(ra)}rc();return(new Fh).i(k)}rc();return(new Dh).i("Illegal number format")}catch(Ca){if(Ca&&Ca.$classData&&Ca.$classData.m.pF){if(0===(8&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/core/NumberParser.scala: 21");
+k=kg(new lg,a.hX.aw,b,La(b));if((Hh(k)?(new H).i(Ih(k)):C()).ba())return rc(),a=b+" "+Uba(a),(new Dh).i(a);rc();if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/core/NumberParser.scala: 15");return(new Dh).i(a.aI)}throw Ca;}}function Uba(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/core/NumberParser.scala: 13");return a.fI}
+wh.prototype.$classData=g({S0:0},!1,"org.nlogo.core.NumberParser$",{S0:1,d:1});var xh=void 0;function Jh(){xh||(xh=(new wh).b());return xh}function Oh(){this.a=0}Oh.prototype=new l;Oh.prototype.constructor=Oh;Oh.prototype.b=function(){Ph=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};Oh.prototype.$classData=g({X0:0},!1,"org.nlogo.core.PlotPenInterface$",{X0:1,d:1});var Ph=void 0;function Qh(){}
+Qh.prototype=new l;Qh.prototype.constructor=Qh;Qh.prototype.b=function(){return this};Qh.prototype.ac=function(a){return(new H).i((new bc).Id(a.ye,a.wa,a.ma))};Qh.prototype.$classData=g({a1:0},!1,"org.nlogo.core.ReporterApp$",{a1:1,d:1});var Rh=void 0;function Sh(){Rh||(Rh=(new Qh).b());return Rh}function Th(){}Th.prototype=new l;Th.prototype.constructor=Th;Th.prototype.b=function(){return this};function Uh(a,b){return(new H).i((new w).e(b.Al,b.ma))}
+Th.prototype.$classData=g({b1:0},!1,"org.nlogo.core.ReporterBlock$",{b1:1,d:1});var Vh=void 0;function Wh(){Vh||(Vh=(new Th).b());return Vh}function Xh(){this.Vk=null;this.a=!1}Xh.prototype=new l;Xh.prototype.constructor=Xh;
+Xh.prototype.b=function(){Yh=this;var a=G(t(),(new J).j([0,1])),b=G(t(),(new J).j([1,0])),d=G(t(),(new J).j([2,2])),e=G(t(),(new J).j([4,4])),f=t(),a=[a,b,d,e,G(f,(new J).j([4,4,2,2]))];if(0===(a.length|0))a=hh();else{b=ih(new rh,hh());d=0;for(e=a.length|0;d<e;)sh(b,a[d]),d=1+d|0;a=b.Va}this.Vk=a;this.a=!0;return this};function Vba(){var a;Yh||(Yh=(new Xh).b());a=Yh;if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Shape.scala: 60");return a.Vk}
+Xh.prototype.$classData=g({d1:0},!1,"org.nlogo.core.Shape$LinkLine$",{d1:1,d:1});var Yh=void 0;function Wba(a){var b=a.fz();a=m(new p,function(){return function(a){return a.Gc()}}(a));var d=t();return b.ya(a,d.s)}function Xba(a){var b=a.fz();a=m(new p,function(){return function(a){return a.ni()}}(a));var d=t();return b.ya(a,d.s)}function Zh(){this.a=0}Zh.prototype=new l;Zh.prototype.constructor=Zh;Zh.prototype.b=function(){return this};
+function Yba(a,b){var d=t(),e=b.we(),f=b.kk,h=b.BF(),k=m(new p,function(){return function(a){$h();var b=a.kF()?"1":"0",d=t(),b=[a.lH(),b],d=G(d,(new J).j(b));a=a.QD();b=t();return d.$c(a,b.s).Ab(" ")}}(a)),n=t();a=[e,f,h.ya(k,n.s).Ab("\n"),Zba(a,b.yE())];return G(d,(new J).j(a)).Ab("\n")}function ai(a){return""+(a.uq<<24|a.wr<<16|a.Kq<<8|a.zq)}
+function $ba(a,b){if(b&&b.$classData&&b.$classData.m.IA){var d=t();b=["Circle",ai(b.Db),b.Il(),b.jc,b.Kk,b.Lk,b.TD()];return G(d,(new J).j(b)).Ab(" ")}if(b&&b.$classData&&b.$classData.m.JA)return d=t(),b=["Line",ai(b.Db),b.jc,b.zw().ni(),b.zw().Gc(),b.Uu().ni(),b.Uu().Gc()],G(d,(new J).j(b)).Ab(" ");if(b&&b.$classData&&b.$classData.m.KA){d=G(t(),(new J).j(["Polygon",ai(b.Db),b.Il(),b.jc]));b=b.fz();a=m(new p,function(){return function(a){return G(t(),(new J).j([a.ni(),a.Gc()]))}}(a));var e=t();b=
+b.zj(a,e.s);a=t();return d.$c(b,a.s).Ab(" ")}if(b&&b.$classData&&b.$classData.m.LA)return d=t(),b=["Rectangle",ai(b.Db),b.Il(),b.jc,b.Ww().ni(),b.Ww().Gc(),b.Pv().ni(),b.Pv().Gc()],G(d,(new J).j(b)).Ab(" ");throw(new q).i(b);}
+function aca(a,b){try{var d=!1,e=null,f=(new Tb).c(b),h=bi(f,32),k=x().s.Tg(),n=h.n.length;switch(n){case -1:break;default:k.oc(n)}k.Xb((new ci).$h(h));var r=k.Ba();if(di(r)){var d=!0,e=r,y=e.Ka;if("Circle"===e.Eb&&di(y)){var E=y.Eb,Q=y.Ka;if(di(Q)){var R=Q.Eb,da=Q.Ka;if(di(da)){var ma=da.Eb,ra=da.Ka;if(di(ra)){var Ca=ra.Eb,ab=ra.Ka;if(di(ab)){var hb=ab.Eb,mb=ab.Ka;if(di(mb)){var Wb=mb.Eb,zc=mb.Ka;if(u().o(zc)){var xb=(new Tb).c(E),Wc=ei(),dc=fi(gi(Wc,xb.U,10)),le=(new Tb).c(R),qd=hi(le.U),bj=(new Tb).c(ma),
+Cg=hi(bj.U),jh=(new Tb).c(Ca),ti=gi(ei(),jh.U,10),Dg=(new Tb).c(hb),cj=gi(ei(),Dg.U,10),Eg=(new Tb).c(Wb),Kh=ei();return(new ii).EE(dc,qd,Cg,ti,cj,gi(Kh,Eg.U,10))}}}}}}}}if(d){var Xd=e.Ka;if("Line"===e.Eb&&di(Xd)){var hk=Xd.Eb,dj=Xd.Ka;if(di(dj)){var ik=dj.Eb,fg=dj.Ka;if(di(fg)){var ej=fg.Eb,ui=fg.Ka;if(di(ui)){var oc=ui.Eb,Fb=ui.Ka;if(di(Fb)){var Yc=Fb.Eb,Ma=Fb.Ka;if(di(Ma)){var jc=Ma.Eb,kc=Ma.Ka;if(u().o(kc)){var Hl=(new Tb).c(hk),Fg=ei(),Il=fi(gi(Fg,Hl.U,10)),jk=(new Tb).c(ik),Jl=hi(jk.U),Kl=(new Tb).c(ej),
+kk=gi(ei(),Kl.U,10),Ll=(new Tb).c(oc),lk=ei(),mk=(new ji).ha(kk,gi(lk,Ll.U,10)),nk=(new Tb).c(Yc),ok=gi(ei(),nk.U,10),Ml=(new Tb).c(jc),Nl=ei();return bca(new ki,Il,Jl,mk,(new ji).ha(ok,gi(Nl,Ml.U,10)))}}}}}}}}if(d){var fj=e.Ka;if("Rectangle"===e.Eb&&di(fj)){var vi=fj.Eb,Lh=fj.Ka;if(di(Lh)){var gj=Lh.Eb,wi=Lh.Ka;if(di(wi)){var Ol=wi.Eb,xi=wi.Ka;if(di(xi)){var Pl=xi.Eb,yi=xi.Ka;if(di(yi)){var Ql=yi.Eb,zi=yi.Ka;if(di(zi)){var pk=zi.Eb,hj=zi.Ka;if(di(hj)){var qk=hj.Eb,Rl=hj.Ka;if(u().o(Rl)){var ij=(new Tb).c(vi),
+Sl=ei(),Tl=fi(gi(Sl,ij.U,10)),Ul=(new Tb).c(gj),Vl=hi(Ul.U),Wl=(new Tb).c(Ol),jj=hi(Wl.U),kh=(new Tb).c(Pl),rk=gi(ei(),kh.U,10),sk=(new Tb).c(Ql),lh=ei(),mh=(new ji).ha(rk,gi(lh,sk.U,10)),tk=(new Tb).c(pk),uk=gi(ei(),tk.U,10),vk=(new Tb).c(qk),Gg=ei();return cca(new li,Tl,Vl,jj,mh,(new ji).ha(uk,gi(Gg,vk.U,10)))}}}}}}}}}if(d){var Mh=e.Ka;if("Polygon"===e.Eb&&di(Mh)){var nh=Mh.Eb,oh=Mh.Ka;if(di(oh)){var Ff=oh.Eb,ph=oh.Ka;if(di(ph)){for(var wk=ph.Eb,kj=dca(ph.Ka),xk=(new cc).Nf(kj,m(new p,function(){return function(a){var b=
+mi(a,0),b=(new Tb).c(b),b=gi(ei(),b.U,10);a=mi(a,1);a=(new Tb).c(a);var d=ei();return(new ji).ha(b,gi(d,a.U,10))}}(a))),Hg=null,Hg=G(t(),u());xk.ra();){var qh=xk.ka(),Nh=(new w).e(Hg,qh);a:{var lj=Nh.ub,mj=Nh.Fb;if(null!==mj){var Zw=mj.ni(),$w=mj.Gc();if(0<lj.sa())var ax=lj.Y(),OG=(new ji).ha(Zw,$w),bx=null!==ax&&Fa(ax,OG);else bx=!1;if(bx){var PG=(new ji).ha(Zw,$w),ur=t(),Hg=lj.Tc(PG,ur.s);break a}}var QG=Nh.ub,xn=Nh.Fb;if(null!==xn)var cx=(new ji).ha(xn.ni(),xn.Gc()),RG=t(),Hg=QG.Tc(cx,RG.s);else throw(new q).i(Nh);
+}}var SG=Hg.Qf(),vr=(new Tb).c(nh),TG=ei(),UG=fi(gi(TG,vr.U,10)),VG=(new Tb).c(Ff),dx=hi(VG.U),wr=(new Tb).c(wk);return eca(new ni,UG,dx,hi(wr.U),SG)}}}}throw(new me).c("Invalid shape format in file: "+b);}catch(wn){if(wn&&wn.$classData&&wn.$classData.m.Ui)throw(new me).c("Invalid shape format in file: "+b);throw wn;}}function fca(a,b){a=m(new p,function(){return function(a){return Yba($h(),a)}}(a));var d=t();return b.ya(a,d.s).Ab("\n\n")}
+function gca(a,b){var d=function(){return function(a){return hca($h(),a)}}(a);x();var e=[u()],e=(new J).j(e),f=x().s;a=b.Ib(K(e,f),ub(new vb,function(){return function(a,b){a=(new w).e(a,b);b=a.ub;var d=a.Fb;if(null!==d&&""===d)return a=u(),Og(new Pg,a,b);var e=a.ub;b=a.Fb;if(di(e)&&(d=e.Eb,e=e.Ka,null!==b))return a=x().s,a=oi(d,b,a),Og(new Pg,a,e);throw(new q).i(a);}}(a))).Ib(u(),ub(new vb,function(){return function(a,b){if(di(a)){var d=a.Eb,e=a.Ka;if(u().o(b))return a=x(),d=d.Tc("",a.s),Og(new Pg,
+d,e)}return Og(new Pg,b,a)}}(a))).hg(m(new p,function(){return function(a){return nd(a)}}(a)));b=x().s;if(b===x().s){if(a===u())return u();b=a.Y();e=b=Og(new Pg,d(b),u());for(a=a.$();a!==u();)f=a.Y(),f=Og(new Pg,d(f),u()),e=e.Ka=f,a=a.$();return b}for(b=Nc(a,b);!a.z();)e=a.Y(),b.Ma(d(e)),a=a.$();return b.Ba()}
+function ica(a,b){var d=function(){return function(a){return jca($h(),a)}}(a);x();var e=[u()],e=(new J).j(e),f=x().s;a=b.Ib(K(e,f),ub(new vb,function(){return function(a,b){a=(new w).e(a,b);b=a.ub;var d=a.Fb;if(null!==d&&""===d)return a=u(),Og(new Pg,a,b);var e=a.ub;b=a.Fb;if(di(e)&&(d=e.Eb,e=e.Ka,null!==b))return a=x().s,a=oi(d,b,a),Og(new Pg,a,e);throw(new q).i(a);}}(a))).Ib(u(),ub(new vb,function(){return function(a,b){if(di(a)){var d=a.Eb,e=a.Ka;if(u().o(b))return a=x(),d=d.Tc("",a.s),Og(new Pg,
+d,e)}return Og(new Pg,b,a)}}(a))).hg(m(new p,function(){return function(a){return nd(a)}}(a)));b=x().s;if(b===x().s){if(a===u())return u();b=a.Y();e=b=Og(new Pg,d(b),u());for(a=a.$();a!==u();)f=a.Y(),f=Og(new Pg,d(f),u()),e=e.Ka=f,a=a.$();return b}for(b=Nc(a,b);!a.z();)e=a.Y(),b.Ma(d(e)),a=a.$();return b.Ba()}
+function hca(a,b){if(di(b)){var d=b.Eb,e=b.Ka;if(di(e)){var f=e.Eb,h=e.Ka;if(di(h)){var e=h.Eb,k=h.Ka;if(di(k)){var h=k.Eb,n=k.Ka;if(di(n))return k=n.Eb,b=n.Ka,f=(new Tb).c(f),f=Bh(Ch(),f.U),e=G(t(),(new J).j([e,h,k])),h=m(new p,function(){return function(a){return kca($h(),a)}}(a)),k=t(),lca(new pi,d,f,e.ya(h,k.s),jca(a,b))}}}}throw(new me).c("Invalid link shape: "+ec(b,"","\n",""));}function fi(a){return mca(new qi,255&a>>16,255&a>>8,255&a,255)}
+function kca(a,b){var d=!1,e=null,f=(new Tb).c(b),f=bi(f,32),h=x().s.Tg(),k=f.n.length;switch(k){case -1:break;default:h.oc(k)}h.Xb((new ci).$h(f));f=h.Ba();if(di(f)&&(d=!0,e=f,h=e.Eb,k=e.Ka,di(k))){f=k.Ka;if("1"===k.Eb){k=Vba();Ne();var n=function(){return function(a){a=(new Tb).c(a).U;return fa(Bh(Ch(),a))}}(a),r=x().s;if(r===x().s)if(f===u())n=u();else{for(var r=f.Y(),y=r=Og(new Pg,n(r),u()),E=f.$();E!==u();)var Q=E.Y(),Q=Og(new Pg,n(Q),u()),y=y.Ka=Q,E=E.$();n=r}else{r=Nc(f,r);for(y=f;!y.z();)E=
+y.Y(),r.Ma(n(E)),y=y.$();n=r.Ba()}k=k.ab(nca(n.Ce(ri())))}else k=!1;if(k){b=(new Tb).c(h);b=Bh(Ch(),b.U);e=function(){return function(a){a=(new Tb).c(a).U;return fa(Bh(Ch(),a))}}(a);a=x().s;if(a===x().s)if(f===u())e=u();else{a=f.Y();d=a=Og(new Pg,e(a),u());for(f=f.$();f!==u();)h=f.Y(),h=Og(new Pg,e(h),u()),d=d.Ka=h,f=f.$();e=a}else{for(a=Nc(f,a);!f.z();)d=f.Y(),a.Ma(e(d)),f=f.$();e=a.Ba()}return(new si).hv(b,!0,e)}}if(d&&(f=e.Eb,a=e.Ka,di(a)&&"1"===a.Eb))return b=(new Tb).c(f),b=Bh(Ch(),b.U),e=t(),
+(new si).hv(b,!0,G(e,(new J).j([1,0])));if(d&&(f=e.Eb,e=e.Ka,di(e)&&"0"===e.Eb))return b=(new Tb).c(f),b=Bh(Ch(),b.U),e=t(),(new si).hv(b,!1,G(e,(new J).j([0,1])));throw(new me).c("Invalid link line: "+b);}function Zba(a,b){var d=t(),e=[b.we(),b.UF(),b.pk],d=G(d,(new J).j(e));b=b.Ah;a=m(new p,function(){return function(a){return $ba($h(),a)}}(a));e=t();a=b.ya(a,e.s);b=t();return d.$c(a,b.s).Ab("\n")}
+function oca(a,b){a=m(new p,function(){return function(a){return Zba($h(),a)}}(a));var d=t();return b.ya(a,d.s).Ab("\n\n")}
+function jca(a,b){if(di(b)){var d=b.Eb,e=b.Ka;if(di(e)){var f=e.Eb,h=e.Ka;if(di(h)){e=h.Ka;b=(new Tb).c(h.Eb);b=gi(ei(),b.U,10);a=function(){return function(a){return aca($h(),a)}}(a);h=x().s;if(h===x().s)if(e===u())a=u();else{for(var h=e.Y(),k=h=Og(new Pg,a(h),u()),e=e.$();e!==u();)var n=e.Y(),n=Og(new Pg,a(n),u()),k=k.Ka=n,e=e.$();a=h}else{for(h=Nc(e,h);!e.z();)k=e.Y(),h.Ma(a(k)),e=e.$();a=h.Ba()}return(new Ai).XE(d,"true"===f,b,a)}}}throw(new me).c("Invalid vector shape:\n "+ec(b,"","\n",""));
+}Zh.prototype.$classData=g({f1:0},!1,"org.nlogo.core.ShapeParser$",{f1:1,d:1});var Bi=void 0;function $h(){Bi||(Bi=(new Zh).b());return Bi}function Ci(){this.$T=null;this.a=!1}Ci.prototype=new l;Ci.prototype.constructor=Ci;
+Ci.prototype.b=function(){Di=this;for(var a=Ei(),a=(new w).e(a,"__observercode"),b=Fi(),b=(new w).e(b,"__turtlecode"),d=Gi(),d=(new w).e(d,"__patchcode"),e=Hi(),a=[a,b,d,(new w).e(e,"__linkcode")],b=fc(new gc,hc()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.$T=b.Va;this.a=!0;return this};Ci.prototype.$classData=g({g1:0},!1,"org.nlogo.core.SourceWrapping$",{g1:1,d:1});var Di=void 0;function pca(){Di||(Di=(new Ci).b());return Di}function Ii(){}Ii.prototype=new l;Ii.prototype.constructor=Ii;
+Ii.prototype.b=function(){return this};function Ji(a,b){return(new H).i((new bc).Id(b.Gd,b.wa,b.ma))}Ii.prototype.$classData=g({i1:0},!1,"org.nlogo.core.Statement$",{i1:1,d:1});var Ki=void 0;function Li(){Ki||(Ki=(new Ii).b());return Ki}function Mi(){}Mi.prototype=new l;Mi.prototype.constructor=Mi;Mi.prototype.b=function(){return this};
+function Lg(a,b){a=(new Tb).c(b);b=Ne().qq.gf(a.U);for(var d=0,e=a.U.length|0;d<e;){var f=a.X(d),f=null===f?0:f.W;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 Tb).c(f).U;b.Xb((new Ni).c(f));d=1+d|0}return b.Ba()}
+function Oi(a,b){for(var d=(new Tb).c(b),e=d.U.length|0,f=0;;){if(f<e)var h=d.X(f),h=92!==(null===h?0:h.W);else h=!1;if(h)f=1+f|0;else break}e=Pi(d,f);if(null===e)throw(new q).i(e);d=e.ja();e=e.na();if(2>((new Tb).c(e).U.length|0))return b;b=qca(65535&(e.charCodeAt(1)|0));b=Oe(b);e=(new Tb).c(e);f=e.U.length|0;return""+d+b+Oi(a,Le(Me(),e.U,2,f))}
+function qca(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 Re).c("invalid escape sequence: \\"+Oe(a));}}Mi.prototype.$classData=g({j1:0},!1,"org.nlogo.core.StringEscaper$",{j1:1,d:1});var Qi=void 0;function Mg(){Qi||(Qi=(new Mi).b());return Qi}function Ri(){}Ri.prototype=new l;Ri.prototype.constructor=Ri;Ri.prototype.b=function(){return this};
+function rca(a,b){var d=Si();b=b-(b&d)|0;d=Ti();0!==(b&d)?(d=Ti(),b=b-(b&d)|0,d="variable"):(b&Ui())===Ui()?(d=Ui(),b=b-(b&d)|0,d="list or block"):(b&nc())===nc()?(d=nc(),b=b-(b&d)|0,d="anything"):(b&Vi(A()))===Vi(A())?(d=Vi(A())|Wi(A()),b=b-(b&d)|0,d="agent"):(d=M(A()),0!==(b&d)?(d=M(A()),b=b-(b&d)|0,d="number"):(d=Xi(A()),0!==(b&d)?(d=Xi(A()),b=b-(b&d)|0,d="TRUE/FALSE"):(d=Yi(A()),0!==(b&d)?(d=Yi(A()),b=b-(b&d)|0,d="string"):(d=Zi(A()),0!==(b&d)?(d=Zi(A()),b=b-(b&d)|0,d="list"):(b&$i(A()))===$i(A())?
+(d=$i(A()),b=b-(b&d)|0,d="agentset"):(d=aj(A()),0!==(b&d)?(d=aj(A()),b=b-(b&d)|0,d="turtle agentset"):(d=nj(A()),0!==(b&d)?(d=nj(A()),b=b-(b&d)|0,d="patch agentset"):(d=oj(A()),0!==(b&d)?(d=oj(A()),b=b-(b&d)|0,d="link agentset"):(d=pj(A()),0!==(b&d)?(d=pj(A())|Wi(A()),b=b-(b&d)|0,d="turtle"):(d=qj(A()),0!==(b&d)?(d=qj(A())|Wi(A()),b=b-(b&d)|0,d="patch"):(d=rj(A()),0!==(b&d)?(d=rj(A())|Wi(A()),b=b-(b&d)|0,d="link"):(d=sj(A()),0!==(b&d)?(d=sj(A()),b=b-(b&d)|0,d="anonymous reporter"):(d=tj(A()),0!==
+(b&d)?(d=tj(A()),b=b-(b&d)|0,d="anonymous command"):(d=Wi(A()),0!==(b&d)?(d=Wi(A()),b=b-(b&d)|0,d="NOBODY"):(d=uj(A()),0!==(b&d)?(d=uj(A()),b=b-(b&d)|0,d="command block"):(b&vj(A()))===vj(A())?(d=vj(A()),b=b-(b&d)|0,d="reporter block"):(d=wj(A()),0!==(b&d)?(d=vj(A()),b=b-(b&d)|0,d="different kind of block"):(d=xj(A()),0!==(b&d)?(d=xj(A()),b=b-(b&d)|0,d="TRUE/FALSE block"):(d=yj(A()),0!==(b&d)?(d=yj(A()),b=b-(b&d)|0,d="number block"):(d=zj(),0!==(b&d)?(d=zj(),b=b-(b&d)|0,d="code block"):(d=Aj(),0!==
+(b&d)?(d=Aj(),b=b-(b&d)|0,d="variable"):d="(none)")))))))))))))))))));var e=b;return 0===e?d:Bj()===e?d+" (optional)":d+" or "+rca(a,b)}function Cj(a,b){a=rca(a,b);if("NOBODY"!==a&&"anything"!==a)a:switch(b=(new Tb).c(a),b=Dj(b),b=null===b?0:b.W,sca(Ah(),b)){case 65:case 69:case 73:case 79:case 85:a="an "+a;break a;default:a="a "+a}return a}Ri.prototype.$classData=g({I1:0},!1,"org.nlogo.core.TypeNames$",{I1:1,d:1});var Ej=void 0;function Fj(){Ej||(Ej=(new Ri).b());return Ej}
+function Gj(){this.CT=null;this.a=!1}Gj.prototype=new l;Gj.prototype.constructor=Gj;Gj.prototype.b=function(){this.CT="@#$#@#$#@";this.a=!0;return this};function tca(){var a=Hj();return m(new p,function(){return function(a){return a}}(a))}
+function uca(a,b){a=Ij();var d=Wg(Ne().qi,u()),e=tca(),f;f=G(rc().ri,u());var h;h=G(rc().ri,u());var k=vca(),n=wca;Ne();b=null!==b?(new Ni).c(b):null;b=n(k,b);for(b=(new Jj).sv(b);Kj(b).ra();)k=b.Rm(),n=Lj(Hj()),0<=(k.length|0)&&k.substring(0,n.length|0)===n?(f=f.yc(h,(Mj(),Nj().pc)),h=G(rc().ri,u())):h=h.yc(k,(Mj(),Nj().pc));f=f.yc(h,(Mj(),Nj().pc));G(rc().ri,u());if(12!==f.sa())throw pg(qg(),(new Ag).c("Models must have 12 sections, this had "+f.sa()));var r,y,E,Q,R;rc();k=(new H).i(f);if(null!==
+k.Q&&0===k.Q.vb(12)){var da=k.Q.X(0),ma=k.Q.X(1);f=k.Q.X(2);n=k.Q.X(3);h=k.Q.X(4);b=k.Q.X(5);var ra=k.Q.X(6);r=k.Q.X(7);y=k.Q.X(8);E=k.Q.X(9);Q=k.Q.X(10);R=k.Q.X(11);k=ra}else throw(new q).i(f);b;k;r;y;k=E;Q;R;b=ica($h(),n);k=gca($h(),k);n=ec(da,"","\n","");y=Oj();E=x().s;r=new Pj;Q=K(ma,E);E=G(rc().ri,u());for(ma=G(rc().ri,u());!Q.z();){da=Q.Y();R=(new Tb).c(da);if(nd(R))ma=ma.yc(da,(Mj(),Nj().pc));else{da=Qj(ma);for(R=!0;R&&da.oi;){R=da.ka();if(null===R)throw(new Ce).b();R=""===R}R||(da=Oj(),R=
+x().s,E=E.yc(xca(da,K(ma,R),a,d,e),(Mj(),Nj().pc)));ma=G(rc().ri,u())}Q=Q.$()}Q=Qj(ma);for(da=!0;da&&Q.oi;){da=Q.ka();if(null===da)throw(new Ce).b();da=""===da}da||(Q=x().s,E=E.yc(xca(y,K(ma,Q),a,d,e),(Mj(),Nj().pc)));a=E;d=x().s;a=K(a,d);return Rj(r,n,a,ec(f,"","\n",""),h.Y(),b.wb(),k.wb(),G(t(),u()))}
+function yca(a,b){return b.je+("\n"+Lj(a))+"\n"+zca(Oj(),b.Kc)+("\n"+Lj(a))+"\n"+b.nf+("\n"+Lj(a))+"\n"+oca($h(),b.th)+("\n"+Lj(a))+"\n"+b.mi+("\n"+Lj(a))+"\n"+Lj(a)+"\n"+Lj(a)+"\n"+Lj(a)+"\n"+Lj(a)+"\n"+fca($h(),b.ah)+("\n"+Lj(a))+"\n"+("\n"+Lj(a))+"\n"}function Lj(a){if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/model/ModelReader.scala: 9");return a.CT}Gj.prototype.$classData=g({R1:0},!1,"org.nlogo.core.model.ModelReader$",{R1:1,d:1});
+var Sj=void 0;function Hj(){Sj||(Sj=(new Gj).b());return Sj}function Tj(){}Tj.prototype=new l;Tj.prototype.constructor=Tj;Tj.prototype.b=function(){return this};
+function Aca(a){var b="";for(;;){var d=a;if(null===d)throw(new Ce).b();if(""===d)return(new w).e(b,a);d=(new Tb).c(a);d=Dj(d);if(34===(null===d?0:d.W))return a=(new Tb).c(a),a=Uj(a),(new w).e(b,a.trim());d=(new Tb).c(a);d=Le(Me(),d.U,0,2);null!==d&&'\\"'===d?(a=(new Tb).c(a),d=a.U.length|0,a=Le(Me(),a.U,2,d),b+='"'):(d=(new Tb).c(a),d=Uj(d),a=(new Tb).c(a),b=""+b+na(Dj(a)),a=d)}}
+function Vj(a,b){var d=(new Tb).c(b),d=Wj(d);if(Xj(d)&&(d=d.Q,34===(null===d?0:d.W))){b=(new Tb).c(b);d=Aca(Uj(b));if(null===d)throw(new q).i(d);b=d.ja();a=Vj(a,d.na());return Og(new Pg,b,a)}return u()}function Yj(a){return""+Oe(34)+a+Oe(34)}Tj.prototype.$classData=g({U1:0},!1,"org.nlogo.core.model.PenReader$",{U1:1,d:1});var Zj=void 0;function ak(){Zj||(Zj=(new Tj).b());return Zj}function bk(){this.PU=null;this.a=!1}bk.prototype=new l;bk.prototype.constructor=bk;
+bk.prototype.b=function(){ck=this;dk||(dk=(new ek).b());var a=(new w).e("BUTTON",dk);fk||(fk=(new gk).b());var b=(new w).e("SLIDER",fk);yk||(yk=(new zk).b());var d=(new w).e("GRAPHICS-WINDOW",yk);Ak||(Ak=(new Bk).b());var e=(new w).e("MONITOR",Ak);Ck||(Ck=(new Dk).b());var f=(new w).e("SWITCH",Ck);Ek||(Ek=(new Fk).b());var h=(new w).e("PLOT",Ek);Gk||(Gk=(new Hk).b());var k=(new w).e("CHOOSER",Gk);Ik||(Ik=(new Jk).b());var n=(new w).e("OUTPUT",Ik);Kk||(Kk=(new Lk).b());var r=(new w).e("TEXTBOX",Kk);
+Mk||(Mk=(new Nk).b());a=[a,b,d,e,f,h,k,n,r,(new w).e("INPUTBOX",Mk)];b=fc(new gc,hc());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.PU=b.Va;this.a=!0;return this};function xca(a,b,d,e,f){a=Bca(a).Nk(e);a=(new Lc).Of(a).Dg.Wj();a:{for(;a.ra();)if(e=a.ka(),e.fH(b)){a=(new H).i(e);break a}a=C()}if(Xj(a))return a.Q.DX(b,d).zm(f);if(C()===a)throw pg(qg(),(new Ag).c("Dimensions provided don't match the NetLogo file reader\nCouldn't find corresponding reader for "+b.Y()));throw(new q).i(a);}
+function zca(a,b){a=m(new p,function(){return function(a){var b=Oj(),d=(Oj(),Wg(Ne().qi,u())),b=Bca(b).Nk(d),d=(new Lc).Of(b);Mc();Mc();Ok();b=(new mc).b();for(d=d.Dg.Wj();d.ra();){var k=d.ka(),n;n=k.xm();var r=a;n=null!==r&&(Pk(n.Od(),r)||sa(r)&&Qk(n.Od(),pa(bb))||ua(r)&&Qk(n.Od(),pa(cb))||ne(r)&&Qk(n.Od(),pa($a))||Qa(r)&&Qk(n.Od(),pa(db))||Da(r)&&Qk(n.Od(),pa(eb))||xa(r)&&Qk(n.Od(),pa(fb))||"number"===typeof r&&Qk(n.Od(),pa(gb))||"boolean"===typeof r&&Qk(n.Od(),pa(Za))||void 0===r&&Qk(n.Od(),pa(Ya)))?
+(new H).i(r):C();n.z()?k=C():(n=n.R(),k=(new H).i(k.rV(n)));k=k.wb();Rk(b,k)}b=b.wb();b=Wj(b);if(b.z())throw(new Sk).c("Widget type is not supported: "+oa(a).tg());return b.R()}}(a));var d=t();return b.ya(a,d.s).Ab("\n\n")}function Bca(a){if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/model/WidgetReader.scala: 107");return a.PU}bk.prototype.$classData=g({$1:0},!1,"org.nlogo.core.model.WidgetReader$",{$1:1,d:1});var ck=void 0;
+function Oj(){ck||(ck=(new bk).b());return ck}function Tk(){this.a=0}Tk.prototype=new l;Tk.prototype.constructor=Tk;Tk.prototype.b=function(){return this};Tk.prototype.$classData=g({b2:0},!1,"org.nlogo.core.prim.Lambda$",{b2:1,d:1});var Cca=void 0;function Uk(){this.CV=this.SU=this.DV=null;this.a=0}Uk.prototype=new l;Uk.prototype.constructor=Uk;
+Uk.prototype.b=function(){Vk=this;this.DV="_.?\x3d*!\x3c\x3e:#+/%$^'\x26-";this.a=(1|this.a)<<24>>24;this.SU="0123456789";this.a=(2|this.a)<<24>>24;var a=[(new N).P(65498,65500,1),(new N).P(65490,65495,1),(new N).P(65482,65487,1),(new N).P(65474,65479,1),(new N).P(65382,65470,1),(new N).P(65345,65370,1),(new N).P(65313,65338,1),(new N).P(65142,65276,1),(new N).P(65136,65140,1),(new N).P(65008,65019,1),(new N).P(64914,64967,1),(new N).P(64848,64911,1),(new N).P(64467,64829,1),(new N).P(64326,64433,
+1),(new N).P(64323,64324,1),(new N).P(64320,64321,1),(new N).P(64318,64318,1),(new N).P(64312,64316,1),(new N).P(64298,64310,1),(new N).P(64287,64296,1),(new N).P(64285,64285,1),(new N).P(64275,64279,1),(new N).P(64256,64262,1),(new N).P(64112,64217,1),(new N).P(63744,64109,1),(new N).P(55243,55291,1),(new N).P(55216,55238,1),(new N).P(44032,55203,1),(new N).P(43968,44002,1),(new N).P(43816,43822,1),(new N).P(43808,43814,1),(new N).P(43793,43798,1),(new N).P(43785,43790,1),(new N).P(43777,43782,1),
+(new N).P(43762,43764,1),(new N).P(43744,43754,1),(new N).P(43739,43741,1),(new N).P(43714,43714,1),(new N).P(43712,43712,1),(new N).P(43705,43709,1),(new N).P(43701,43702,1),(new N).P(43697,43697,1),(new N).P(43648,43695,1),(new N).P(43642,43642,1),(new N).P(43616,43638,1),(new N).P(43588,43595,1),(new N).P(43584,43586,1),(new N).P(43520,43560,1),(new N).P(43471,43471,1),(new N).P(43396,43442,1),(new N).P(43360,43388,1),(new N).P(43312,43334,1),(new N).P(43274,43301,1),(new N).P(43259,43259,1),(new N).P(43250,
+43255,1),(new N).P(43138,43187,1),(new N).P(43072,43123,1),(new N).P(43020,43042,1),(new N).P(43015,43018,1),(new N).P(43011,43013,1),(new N).P(43E3,43009,1),(new N).P(42912,42922,1),(new N).P(42896,42899,1),(new N).P(42891,42894,1),(new N).P(42786,42888,1),(new N).P(42775,42783,1),(new N).P(42656,42725,1),(new N).P(42623,42647,1),(new N).P(42560,42606,1),(new N).P(42538,42539,1),(new N).P(42512,42527,1),(new N).P(42240,42508,1),(new N).P(42192,42237,1),(new N).P(40960,42124,1),(new N).P(19968,40908,
+1),(new N).P(13312,19893,1),(new N).P(12784,12799,1),(new N).P(12704,12730,1),(new N).P(12593,12686,1),(new N).P(12549,12589,1),(new N).P(12540,12543,1),(new N).P(12449,12538,1),(new N).P(12445,12447,1),(new N).P(12353,12438,1),(new N).P(12347,12348,1),(new N).P(12337,12341,1),(new N).P(12293,12294,1),(new N).P(11823,11823,1),(new N).P(11736,11742,1),(new N).P(11728,11734,1),(new N).P(11720,11726,1),(new N).P(11712,11718,1),(new N).P(11704,11710,1),(new N).P(11696,11702,1),(new N).P(11688,11694,1),
+(new N).P(11680,11686,1),(new N).P(11648,11670,1),(new N).P(11631,11631,1),(new N).P(11568,11623,1),(new N).P(11565,11565,1),(new N).P(11559,11559,1),(new N).P(11520,11557,1),(new N).P(11506,11507,1),(new N).P(11499,11502,1),(new N).P(11360,11492,1),(new N).P(11312,11358,1),(new N).P(11264,11310,1),(new N).P(8579,8580,1),(new N).P(8526,8526,1),(new N).P(8517,8521,1),(new N).P(8508,8511,1),(new N).P(8495,8505,1),(new N).P(8490,8493,1),(new N).P(8488,8488,1),(new N).P(8486,8486,1),(new N).P(8484,8484,
+1),(new N).P(8473,8477,1),(new N).P(8469,8469,1),(new N).P(8458,8467,1),(new N).P(8455,8455,1),(new N).P(8450,8450,1),(new N).P(8336,8348,1),(new N).P(8319,8319,1),(new N).P(8305,8305,1),(new N).P(8182,8188,1),(new N).P(8178,8180,1),(new N).P(8160,8172,1),(new N).P(8150,8155,1),(new N).P(8144,8147,1),(new N).P(8134,8140,1),(new N).P(8130,8132,1),(new N).P(8126,8126,1),(new N).P(8118,8124,1),(new N).P(8064,8116,1),(new N).P(8031,8061,1),(new N).P(8029,8029,1),(new N).P(8027,8027,1),(new N).P(8025,
+8025,1),(new N).P(8016,8023,1),(new N).P(8008,8013,1),(new N).P(7968,8005,1),(new N).P(7960,7965,1),(new N).P(7680,7957,1),(new N).P(7424,7615,1),(new N).P(7413,7414,1),(new N).P(7406,7409,1),(new N).P(7401,7404,1),(new N).P(7258,7293,1),(new N).P(7245,7247,1),(new N).P(7168,7203,1),(new N).P(7098,7141,1),(new N).P(7086,7087,1),(new N).P(7043,7072,1),(new N).P(6981,6987,1),(new N).P(6917,6963,1),(new N).P(6823,6823,1),(new N).P(6688,6740,1),(new N).P(6656,6678,1),(new N).P(6593,6599,1),(new N).P(6528,
+6571,1),(new N).P(6512,6516,1),(new N).P(6480,6509,1),(new N).P(6400,6428,1),(new N).P(6320,6389,1),(new N).P(6314,6314,1),(new N).P(6272,6312,1),(new N).P(6176,6263,1),(new N).P(6108,6108,1),(new N).P(6103,6103,1),(new N).P(6016,6067,1),(new N).P(5998,6E3,1),(new N).P(5984,5996,1),(new N).P(5952,5969,1),(new N).P(5920,5937,1),(new N).P(5902,5905,1),(new N).P(5888,5900,1),(new N).P(5792,5866,1),(new N).P(5761,5786,1),(new N).P(5743,5759,1),(new N).P(5121,5740,1),(new N).P(5024,5108,1),(new N).P(4992,
+5007,1),(new N).P(4888,4954,1),(new N).P(4882,4885,1),(new N).P(4824,4880,1),(new N).P(4808,4822,1),(new N).P(4802,4805,1),(new N).P(4800,4800,1),(new N).P(4792,4798,1),(new N).P(4786,4789,1),(new N).P(4752,4784,1),(new N).P(4746,4749,1),(new N).P(4704,4744,1),(new N).P(4698,4701,1),(new N).P(4696,4696,1),(new N).P(4688,4694,1),(new N).P(4682,4685,1),(new N).P(4348,4680,1),(new N).P(4304,4346,1),(new N).P(4301,4301,1),(new N).P(4295,4295,1),(new N).P(4256,4293,1),(new N).P(4238,4238,1),(new N).P(4213,
+4225,1),(new N).P(4206,4208,1),(new N).P(4197,4198,1),(new N).P(4193,4193,1),(new N).P(4186,4189,1),(new N).P(4176,4181,1),(new N).P(4159,4159,1),(new N).P(4096,4138,1),(new N).P(3976,3980,1),(new N).P(3913,3948,1),(new N).P(3904,3911,1),(new N).P(3840,3840,1),(new N).P(3804,3807,1),(new N).P(3782,3782,1),(new N).P(3776,3780,1),(new N).P(3773,3773,1),(new N).P(3762,3763,1),(new N).P(3757,3760,1),(new N).P(3754,3755,1),(new N).P(3751,3751,1),(new N).P(3749,3749,1),(new N).P(3745,3747,1),(new N).P(3737,
+3743,1),(new N).P(3732,3735,1),(new N).P(3725,3725,1),(new N).P(3722,3722,1),(new N).P(3719,3720,1),(new N).P(3716,3716,1),(new N).P(3713,3714,1),(new N).P(3648,3654,1),(new N).P(3634,3635,1),(new N).P(3585,3632,1),(new N).P(3520,3526,1),(new N).P(3517,3517,1),(new N).P(3507,3515,1),(new N).P(3482,3505,1),(new N).P(3461,3478,1),(new N).P(3450,3455,1),(new N).P(3424,3425,1),(new N).P(3406,3406,1),(new N).P(3389,3389,1),(new N).P(3346,3386,1),(new N).P(3342,3344,1),(new N).P(3333,3340,1),(new N).P(3313,
+3314,1),(new N).P(3296,3297,1),(new N).P(3294,3294,1),(new N).P(3261,3261,1),(new N).P(3253,3257,1),(new N).P(3242,3251,1),(new N).P(3218,3240,1),(new N).P(3214,3216,1),(new N).P(3205,3212,1),(new N).P(3168,3169,1),(new N).P(3160,3161,1),(new N).P(3133,3133,1),(new N).P(3125,3129,1),(new N).P(3114,3123,1),(new N).P(3090,3112,1),(new N).P(3086,3088,1),(new N).P(3077,3084,1),(new N).P(3024,3024,1),(new N).P(2990,3001,1),(new N).P(2984,2986,1),(new N).P(2979,2980,1),(new N).P(2974,2975,1),(new N).P(2972,
+2972,1),(new N).P(2969,2970,1),(new N).P(2962,2965,1),(new N).P(2958,2960,1),(new N).P(2949,2954,1),(new N).P(2947,2947,1),(new N).P(2929,2929,1),(new N).P(2911,2913,1),(new N).P(2908,2909,1),(new N).P(2877,2877,1),(new N).P(2869,2873,1),(new N).P(2866,2867,1),(new N).P(2858,2864,1),(new N).P(2835,2856,1),(new N).P(2831,2832,1),(new N).P(2821,2828,1),(new N).P(2784,2785,1),(new N).P(2768,2768,1),(new N).P(2749,2749,1),(new N).P(2741,2745,1),(new N).P(2738,2739,1),(new N).P(2730,2736,1),(new N).P(2707,
+2728,1),(new N).P(2703,2705,1),(new N).P(2693,2701,1),(new N).P(2674,2676,1),(new N).P(2654,2654,1),(new N).P(2649,2652,1),(new N).P(2616,2617,1),(new N).P(2613,2614,1),(new N).P(2610,2611,1),(new N).P(2602,2608,1),(new N).P(2579,2600,1),(new N).P(2575,2576,1),(new N).P(2565,2570,1),(new N).P(2544,2545,1),(new N).P(2527,2529,1),(new N).P(2524,2525,1),(new N).P(2510,2510,1),(new N).P(2493,2493,1),(new N).P(2486,2489,1),(new N).P(2482,2482,1),(new N).P(2474,2480,1),(new N).P(2451,2472,1),(new N).P(2447,
+2448,1),(new N).P(2437,2444,1),(new N).P(2425,2431,1),(new N).P(2417,2423,1),(new N).P(2392,2401,1),(new N).P(2384,2384,1),(new N).P(2365,2365,1),(new N).P(2308,2361,1),(new N).P(2210,2220,1),(new N).P(2208,2208,1),(new N).P(2112,2136,1),(new N).P(2088,2088,1),(new N).P(2084,2084,1),(new N).P(2074,2074,1),(new N).P(2048,2069,1),(new N).P(2042,2042,1),(new N).P(2036,2037,1),(new N).P(1994,2026,1),(new N).P(1969,1969,1),(new N).P(1869,1957,1),(new N).P(1810,1839,1),(new N).P(1808,1808,1),(new N).P(1791,
+1791,1),(new N).P(1786,1788,1),(new N).P(1774,1775,1),(new N).P(1765,1766,1),(new N).P(1749,1749,1),(new N).P(1649,1747,1),(new N).P(1646,1647,1),(new N).P(1568,1610,1),(new N).P(1520,1522,1),(new N).P(1488,1514,1),(new N).P(1377,1415,1),(new N).P(1369,1369,1),(new N).P(1329,1366,1),(new N).P(1162,1319,1),(new N).P(1015,1153,1),(new N).P(931,1013,1),(new N).P(910,929,1),(new N).P(908,908,1),(new N).P(904,906,1),(new N).P(902,902,1),(new N).P(890,893,1),(new N).P(886,887,1),(new N).P(880,884,1),(new N).P(750,
+750,1),(new N).P(748,748,1),(new N).P(736,740,1),(new N).P(710,721,1),(new N).P(248,705,1),(new N).P(216,246,1),(new N).P(192,214,1),(new N).P(186,186,1),(new N).P(181,181,1),(new N).P(170,170,1),(new N).P(97,122,1),(new N).P(65,90,1)];if(0===(a.length|0))a=hh();else{for(var b=ih(new rh,hh()),d=0,e=a.length|0;d<e;)sh(b,a[d]),d=1+d|0;a=b.Va}b=G(Wk(),u());a=Xk(a,b,ub(new vb,function(){return function(a,b){var d=Yk(),d=Zk(d);b=K(b,d);return $k(a,b)}}(this)));if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/lex/Charset.scala: 9");
+b=(new Tb).c(this.SU);Ne();for(var d=Nc(b,new al),e=0,f=b.U.length|0;e<f;){var h=b.X(e);d.Ma(null===h?0:h.W);e=1+e|0}b=d.Ba().md();if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/lex/Charset.scala: 8");d=(new Tb).c(this.DV);Ne();e=Nc(d,new al);f=0;for(h=d.U.length|0;f<h;){var k=d.X(f);e.Ma(null===k?0:k.W);f=1+f|0}this.CV=a.wl(b.wl(e.Ba().md()));this.a=(4|this.a)<<24>>24;return this};
+function Dca(){var a;Vk||(Vk=(new Uk).b());a=Vk;if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/lex/Charset.scala: 11");return a.CV}Uk.prototype.$classData=g({k2:0},!1,"org.nlogo.lex.Charset$",{k2:1,d:1});var Vk=void 0;function bl(){this.a=!1}bl.prototype=new l;bl.prototype.constructor=bl;function Eca(a,b){return m(new p,function(a,b){return function(a){return b.y(Oe(null===a?0:a.W))?cl():dl()}}(a,b))}bl.prototype.b=function(){return this};
+function el(a,b){return fl(a,b,ub(new vb,function(){return function(a,b){a:for(b=null===b?0:b.W;;){var f=a.Y().y(Oe(b));if(f===dl()&&a.$().Ye())a=a.$();else{a=f===dl()?(new w).e(G(t(),u()),dl()):(new w).e(a,f);break a}}return a}}(a)))}function Fca(a,b){return fl(a,!1,ub(new vb,function(a,b){return function(a,d){d=null===d?0:d.W;return a?(new w).e(!0,dl()):(new w).e(!0,b.y(Oe(d)))}}(a,b)))}
+function gl(a,b){return fl(a,b,ub(new vb,function(a){return function(b,f){f=null===f?0:f.W;if(b.z())return(new w).e(b,dl());f=m(new p,function(a,b){return function(a){return a.y(Oe(b))}}(a,f));var h=t();f=b.ya(f,h.s);h=t();b=b.Te(f,h.s).hg(m(new p,function(){return function(a){a=a.na();var b=cl();return null!==a&&Fa(a,b)}}(a)));var h=m(new p,function(){return function(a){return a.ja()}}(a)),k=t();b=b.ya(h,k.s);return(new w).e(b,f.zk(ub(new vb,function(){return function(a,b){return a.KF(b)}}(a))))}}(a)))}
+function hl(a,b){return Fca(a,m(new p,function(a,b){return function(a){return b.y(Oe(null===a?0:a.W))?cl():il()}}(a,b)))}function fl(a,b,d){b=(new jl).i(b);return m(new p,function(a,b,d){return function(a){a=sb(b,d.Ca,Oe(null===a?0:a.W));if(null===a)throw(new q).i(a);var e=a.na();d.Ca=a.ja();return e}}(a,d,b))}function Gca(a,b){b=[hl(a,b),m(new p,function(a,b){return function(a){return b.y(Oe(null===a?0:a.W))?cl():dl()}}(a,b))];return el(a,(new J).j(b))}
+bl.prototype.$classData=g({n2:0},!1,"org.nlogo.lex.LexOperations$",{n2:1,d:1});var kl=void 0;function ll(){kl||(kl=(new bl).b());return kl}function ml(){}ml.prototype=new l;ml.prototype.constructor=ml;ml.prototype.b=function(){return this};function nl(a){var b;ol||(ol=(new ml).b());b=ol;return fl(ll(),!1,ub(new vb,function(a,b){return function(a,d){d=null===d?0:d.W;return a?(new w).e(!0,dl()):(new w).e(!0,d===b?cl():il())}}(b,a)))}
+ml.prototype.$classData=g({o2:0},!1,"org.nlogo.lex.LexOperations$PrefixConversions$",{o2:1,d:1});var ol=void 0;function pl(){this.NX=null;this.a=!1}pl.prototype=new l;pl.prototype.constructor=pl;function Hca(){}Hca.prototype=pl.prototype;
+pl.prototype.b=function(){ql||(ql=(new rl).b());var a=(new w).e(",",ql),b=Ica(),b=(new w).e("{",b);sl||(sl=(new tl).b());for(var d=(new w).e("}",sl),e=ul(),e=(new w).e("(",e),f=vl(),f=(new w).e(")",f),h=wl(),h=(new w).e("[",h),k=xl(),a=[a,b,d,e,f,h,(new w).e("]",k)],b=fc(new gc,hc()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.NX=b.Va;this.a=!0;return this};
+function Jca(a){return(new w).e(hl(ll(),m(new p,function(a){return function(d){var e=null===d?0:d.W;d=Kca(a);e=ba.String.fromCharCode(e);return d.ab(e)}}(a))),m(new p,function(a){return function(d){var e=Kca(a).gc(d);if(e.z())return C();e=e.R();return(new H).i((new bc).Id(d,e,null))}}(a)))}
+function Lca(a){return(new w).e(Gca(ll(),m(new p,function(){return function(a){a=null===a?0:a.W;return Dca().ab(a)}}(a))),m(new p,function(){return function(a){return(new H).i((new bc).Id(a,yl(),a.toUpperCase()))}}(a)))}function Mca(a){var b=ll(),d=[nl(59),Eca(ll(),m(new p,function(){return function(a){a=null===a?0:a.W;return 13!==a&&10!==a}}(a)))];return(new w).e(el(b,(new J).j(d)),m(new p,function(){return function(a){return(new H).i((new bc).Id(a,zl(),null))}}(a)))}
+pl.prototype.yD=function(a){return a.ra()?(a=Nca(this).Ib((new w).e(C(),a),ub(new vb,function(){return function(a,d){d=(new w).e(a,d);var e=d.ub;a=d.Fb;if(null!==e){var f=e.ja(),e=e.na();if(Xj(f)&&(f=f.Q,null!==a))return(new w).e((new H).i(f),e)}a=d.ub;e=d.Fb;if(null!==a&&(f=a.ja(),a=a.na(),C()===f&&null!==e)){f=e.na();d=a.Kp;e=e.ja();Al(a.Tk);b:{var h=(new Bl).b();c:for(;;){var k=Oca(a);if(Xj(k)&&(k=k.Q,k=null===k?0:k.W,e.y(Oe(k)).mx())){h=Cl(h,k);continue c}e=h.Bb.Yb;break b}}a.Tk.xr();k=e.length|
+0;h=a.Tk;k=(new Xb).ha(k,k>>31);h.no.xw(k);Dl(h,El(h)-k.ia|0);a.Kp=a.Kp+(e.length|0)|0;e=(new w).e(e,a);if(null===e)throw(new q).i(e);h=e.ja();e=e.na();if(""===h)f=C();else if(f=f.y(h),f.z())f=C();else{f=f.R();if(null===f)throw(new q).i(f);f=(new H).i((new w).e(Fl(new Gl,f.Oa,f.fb,f.Gf,Xl(new Yl,d,e.Kp,a.bb)),a))}f.z()?(a.Tk.xr(),a.Kp=d,d=C()):d=f;d.z()?d=C():(d=d.R(),d=(new H).i((new w).e((new H).i(d.ja()),d.na())));return d.z()?(new w).e(C(),a):d.R()}throw(new q).i(d);}}(this))),(new w).e(a.ja().R(),
+a.na())):(new w).e(Zl(),a)};function Pca(a){return(new w).e(Fca(ll(),m(new p,function(){return function(){return cl()}}(a))),m(new p,function(){return function(a){return(new H).i((new bc).Id(a,$l(),"This non-standard character is not allowed."))}}(a)))}
+function Qca(a){var b=ll(),d=ll(),e=hl(ll(),m(new p,function(){return function(a){a=null===a?0:a.W;return zh(Ah(),a)}}(a))),f=ll(),h=ll(),k=[nl(46),nl(45)],h=gl(h,(new J).j(k)),k=ll(),n=hl(ll(),m(new p,function(){return function(a){a=null===a?0:a.W;return zh(Ah(),a)}}(a))),r=ll(),y=[nl(46),hl(ll(),m(new p,function(){return function(a){a=null===a?0:a.W;return zh(Ah(),a)}}(a)))],n=[n,el(r,(new J).j(y))],h=[h,gl(k,(new J).j(n))],e=[e,el(f,(new J).j(h))],d=[gl(d,(new J).j(e)),Eca(ll(),m(new p,function(){return function(a){a=
+null===a?0:a.W;return Dca().ab(a)}}(a)))];return(new w).e(el(b,(new J).j(d)),m(new p,function(){return function(a){a:{for(var b=(new Tb).c(a),d=0;;){if(d<(b.U.length|0))var e=b.X(d),e=null===e?0:e.W,e=!1===zh(Ah(),e);else e=!1;if(e)d=1+d|0;else break}if(d!==(b.U.length|0)){b=yh(Jh(),a);if(am(b)){b=b.Q;a=(new H).i((new bc).Id(a,$l(),b));break a}if(bm(b)){b=b.Q;a=(new H).i((new bc).Id(a,cm(),b));break a}throw(new q).i(b);}a=C()}return a}}(a)))}
+function Rca(a){var b=ll(),d=[nl(34),Sca(a),nl(34)];return(new w).e(el(b,(new J).j(d)),m(new p,function(){return function(a){var b;var d=(new Tb).c(a),d=dm(d,1),d=(new Tb).c(d),k=d.U.length|0,n=0,r=!1;b:for(;;){if(n!==k){var y=1+n|0,n=d.X(n),n=null===n?0:n.W,r=!(!0===!!r&&92===n)&&92===n,n=y;continue b}break}d=!!r;try{if(1===(a.length|0))var E=!0;else var Q=(new Tb).c(a),R=em(Q),E=34!==(null===R?0:R.W);if(E||d)b=(new H).i((new bc).Id(""+a,$l(),"Closing double quote is missing"));else{var da=Mg(),
+ma=(new Tb).c(a),ra=ma.U.length|0,Ca=Le(Me(),ma.U,1,ra),ab=(new Tb).c(Ca),hb=Oi(da,dm(ab,1));b=(new H).i((new bc).Id(""+a,cm(),hb))}}catch(mb){if(mb&&mb.$classData&&mb.$classData.m.Ui)b=(new H).i((new bc).Id(""+a,$l(),"Illegal character after backslash"));else throw mb;}return b}}(a)))}
+function Sca(a){return fl(ll(),(new H).i(Oe(34)),ub(new vb,function(){return function(a,d){d=null===d?0:d.W;if(Xj(a)){var e=a.Q;if(92===(null===e?0:e.W)&&34===d)return(new w).e((new H).i(Oe(34)),cl())}return Xj(a)&&(a=a.Q,92===(null===a?0:a.W)&&92===d)?(new w).e(C(),cl()):34===d?(new w).e((new H).i(Oe(34)),dl()):10===d?(new w).e(C(),il()):(new w).e((new H).i(Oe(d)),cl())}}(a)))}
+function Kca(a){if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/TokenLexer.scala: 12");return a.NX}function Nca(a){var b=t();a=[Tca(a),Jca(a),Mca(a),Qca(a),Rca(a),Lca(a),Pca(a)];return G(b,(new J).j(a))}
+function Tca(a){var b=Uca(a),d=ll(),e=ll(),f=[nl(125),nl(10),nl(13)],e=[b,gl(e,(new J).j(f))];return(new w).e(el(d,(new J).j(e)),m(new p,function(){return function(a){var b=(new Tb).c(a),b=Le(Me(),b.U,0,2);if(null===b||"{{"!==b)a=C();else if(b=(new Tb).c(a),b=em(b),10===(null===b?0:b.W)?b=!0:(b=(new Tb).c(a),b=em(b),b=13===(null===b?0:b.W)),b)a=(new H).i((new bc).Id("",$l(),"End of line reached unexpectedly"));else{var b=(new Tb).c(a),d=C(),e=b.U.length|0,f=0,E=0,Q=d;b:for(;;){if(f!==e){d=1+f|0;f=
+b.X(f);f=null===f?0:f.W;E|=0;c:{if(Xj(Q)){var R=Q.Q;if(123===(null===R?0:R.W)&&123===f){E=1+E|0;Q=f=C();break c}}if(Xj(Q)&&(Q=Q.Q,125===(null===Q?0:Q.W)&&125===f)){E=-1+E|0;Q=f=C();break c}Q=f=(new H).i(Oe(f))}f=d;continue b}break}a=0<(E|0)?(new H).i((new bc).Id("",$l(),"End of file reached unexpectedly")):(new H).i((new bc).Id(a,Vca(),a))}return a}}(a,b)))}function fm(){}fm.prototype=new l;fm.prototype.constructor=fm;fm.prototype.b=function(){return this};
+function Wca(a,b){Xca||(Xca=(new gm).b());if((a=(new hm).c(a))&&a.$classData&&a.$classData.m.kI)b=(new im).OV(a,0,b);else{var d=new im;im.prototype.OV.call(d,Yca(a),0,b);b=d}return b}fm.prototype.$classData=g({t2:0},!1,"org.nlogo.lex.WrapStringInput$",{t2:1,d:1});var Zca=void 0;function gm(){}gm.prototype=new l;gm.prototype.constructor=gm;gm.prototype.b=function(){return this};gm.prototype.$classData=g({u2:0},!1,"org.nlogo.lex.WrappedInput$",{u2:1,d:1});var Xca=void 0;function jm(){this.RD=null}
+jm.prototype=new l;jm.prototype.constructor=jm;function $ca(a){var b=ada(a);a.RD.ta(m(new p,function(a){return function(b){var d=km(a,"OTPL");Pb(d,b.pe);b.Gi.L(d.g)}}(a)));var d=ada(a);(null===d?null===b:d.o(b))||$ca(a)}function ada(a){var b=a.RD;a=m(new p,function(){return function(a){return a.Gi.M()}}(a));var d=t();return b.ya(a,d.s).wb()}jm.prototype.Ea=function(a){this.RD=a;return this};jm.prototype.$classData=g({v2:0},!1,"org.nlogo.parse.AgentTypeChecker",{v2:1,d:1});function lm(){}
+lm.prototype=new l;lm.prototype.constructor=lm;lm.prototype.b=function(){return this};
+function bda(a,b,d){for(;;){var e=b.Y(),f=(new mm).Wf(e).Hi.sb,h=xl();if(null!==f&&f===h)return(new bc).Id((new nm).Ea(a),b.$().$(),d);cda((new mm).Wf(e),d)?dda(om(),pm(d,e.Zb.toUpperCase()),e):("-\x3e"===(new mm).Wf(e).Hi.Zb?f=!0:(f=e.sb,h=$f(),f=!(null!==f&&f===h)),f?(Tg(),e=e.ma,Sg("Expected a variable name here",e.Ua,e.Ya,e.bb)):(f=t(),a=a.yc(e,f.s),b=b.$(),f=t(),e=[e.Zb.toUpperCase()],d=e=tc(d,G(f,(new J).j(e)),qm())))}}
+function eda(a,b){var d=a.Y();if(rm((new mm).Wf(d)))d=(new H).i(bda(G(t(),u()),a.$(),b));else if(d=a.Y(),"-\x3e"===(new mm).Wf(d).Hi.Zb)d=(new H).i((new bc).Id((new sm).ud(!0),a.$(),b));else if(rm((new mm).Wf(d)))d=C();else if(cda((new mm).Wf(d),b))var e=t(),d=fda(G(e,(new J).j([d])),a.$(),b);else{a=a.$();var e=t(),f=[d.Zb.toUpperCase()];b=tc(b,G(e,(new J).j(f)),qm());e=a.Y();if("-\x3e"===(new mm).Wf(e).Hi.Zb)e=d.sb,f=yl(),null!==e&&e===f||tm(d.W)||gda(d.W)?d=(new H).i((new bc).Id((new um).Wf(d),
+a.$(),b)):(Tg(),d=d.ma,Sg("Expected a variable name here",d.Ua,d.Ya,d.bb),d=void 0);else{var f=e.sb,h=wl();null!==f&&f===h?d=C():(f=t(),d=fda(G(f,(new J).j([d,e])),a.$(),b))}}return d}
+function hda(a){var b=0;a:for(;;){var d=vm(rc().kn,a);if(!d.z()){var e=d.R().ja(),d=d.R().na();if(null!==e&&(e=e.sb,wl()===e)){b=1+b|0;a=d;continue a}}d=vm(rc().kn,a);if(!d.z()&&(e=d.R().ja(),d=d.R().na(),null!==e&&(e=e.sb,xl()===e))){b=-1+b|0;a=d;continue a}d=vm(rc().kn,a);if(!d.z()&&(d=d.R().ja(),null!==d&&"-\x3e"===d.Zb&&1===b))return!0;d=vm(rc().kn,a);if(!d.z()){a=d.R().na();continue a}t();b=(new H).i(a);if(null!==b.Q&&0===b.Q.vb(0))return!1;throw(new q).i(a);}}
+function ida(a,b,d){if(hda(b)){var e=b.Lg();if(e.z())e=!1;else var e=e.R().sb,f=wl(),e=null!==e&&e===f}else e=!1;e?(e=b.Wn(),e.z()?e=!1:(e=e.R().sb,f=xl(),e=null!==e&&e===f)):e=!1;if(e){b=b.de(1).ce(1);d=eda(b,d);if(d.z())return C();e=d.R();if(null!==e)d=e.Oa,b=e.fb,e=e.Gf,a=m(new p,function(a,b){return function(a){if(null!==a){var d=a.Zb,e=a.sb,f=a.W;if($f()===e&&tm(f)&&b.Rk().ab(a.Zb.toUpperCase()))return eh(a,(new wm).WE(d.toUpperCase(),!1),a.Zb,a.sb)}return a}}(a,d)),f=t(),a=b.ya(a,f.s),a=(new bc).Id(d,
+a,e);else throw(new q).i(e);return(new H).i(a)}return C()}function fda(a,b,d){for(;;){var e=b.Y();if("-\x3e"===(new mm).Wf(e).Hi.Zb)if(1<a.sa()){Tg();var f=a.Y().wc().Ua,h=a.nd();Sg("An anonymous procedures of two or more arguments must enclose its argument list in brackets",f,h.wc().Ya,e.ma.bb)}else e=a.Y(),dda(om(),pm(d,e.Zb.toUpperCase()),e);else{if(rm((new mm).Wf(e)))return C();f=t();a=a.yc(e,f.s);b=b.$()}}}lm.prototype.$classData=g({A2:0},!1,"org.nlogo.parse.ArrowLambdaScoper$",{A2:1,d:1});
+var xm=void 0;function mm(){this.Hi=null}mm.prototype=new l;mm.prototype.constructor=mm;function cda(a,b){return ym(b,a.Hi.Zb.toUpperCase())?!gda(a.Hi.W):!1}mm.prototype.Wf=function(a){this.Hi=a;return this};function rm(a){a=a.Hi.sb;var b=wl();return null!==a&&a===b}mm.prototype.$classData=g({B2:0},!1,"org.nlogo.parse.ArrowLambdaScoper$RichToken$1",{B2:1,d:1});function zm(){this.DU=this.wX=this.tU=null;this.a=0}zm.prototype=new l;zm.prototype.constructor=zm;
+zm.prototype.b=function(){Am=this;for(var a=Oba(),b=null,b=[],d=a.n.length,e=0;e<d;){var f=(new w).e(a.n[e],e);b.push(f);e=1+e|0}a=ka(Xa(Bm),b);a=Zb(new $b,(new Cm).$h(a),m(new p,function(){return function(a){return null!==a}}(this)));b=m(new p,function(){return function(a){if(null!==a){var b=a.Gc();a=a.ja().toUpperCase();b=Pba(Kg(),b);return(new w).e(a,b)}throw(new q).i(a);}}(this));d=(new Dm).Mg(pa(Bm));a.da.ta(m(new p,function(a,b,d){return function(e){return a.Yl.y(e)?d.Ma(b.y(e)):void 0}}(a,
+b,d)));a=d.Ba();b=fc(new gc,hc());d=0;for(e=a.n.length;d<e;)ic(b,a.n[d]),d=1+d|0;a=b.Va;b=Kg();d=Oba();e=d.n.length;for(f=0;;){if(f<e)var h=d.n[f],h=!Em(Fm(),"gray",h);else h=!1;if(h)f=1+f|0;else break}e=f;b=Pba(b,e>=d.n.length?-1:e);this.tU=a.Zj((new w).e("GREY",b));this.a=(1|this.a)<<24>>24;a=(new w).e("FALSE",!1);b=(new w).e("TRUE",!0);d=vh();a=[a,b,(new w).e("NOBODY",d),(new w).e("E",2.718281828459045),(new w).e("PI",3.141592653589793)];b=fc(new gc,hc());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=
+1+d|0;this.wX=b.Va;this.a=(2|this.a)<<24>>24;if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/Constants.scala: 13");this.DU=this.wX.Nk(jda(this));this.a=(4|this.a)<<24>>24;return this};function jda(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/Constants.scala: 10");return a.tU}
+zm.prototype.$s=function(a){if(0===(4&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/Constants.scala: 20");return this.DU.gc(a.toUpperCase())};zm.prototype.$classData=g({K2:0},!1,"org.nlogo.parse.Constants$",{K2:1,d:1});var Am=void 0;function Gm(){}Gm.prototype=new l;Gm.prototype.constructor=Gm;Gm.prototype.b=function(){return this};Gm.prototype.$classData=g({N2:0},!1,"org.nlogo.parse.DelayedBlock$",{N2:1,d:1});var kda=void 0;
+function Hm(){this.hT=0;this.kT=this.jT=this.iT=this.dI=this.XH=this.VH=this.UH=this.WH=null;this.a=0}Hm.prototype=new l;Hm.prototype.constructor=Hm;
+function lda(a,b,d,e,f,h){var k=G(Fc(),u()),n=Im(b),r=-1+n|0;if(!(0>=n))for(n=0;;){var y=n,E=Dc(),Q=b.Na,R=-1+Jm(b.Na)|0;k.Yj(Km(E,b,f,d,e,mi(Q,y<R?y:R)|0,h));if(n===r)break;n=1+n|0}Lm(b)&&(r=f.Y().sb,n=wl(),null!==r&&r===n?d=Km(a,b,f,d,e,Mm(b.Na)|0,h):(a=f.Y().wc().bb,b=k.Wn(),b.z()?b=C():(b=b.R(),b=(new H).i(b.wc().Ya)),d=(b.z()?d.Ya:b.R())|0,d=Cb(new Db,(new Hb).c(a),Xl(new Yl,d,d,a),!0)),k.Yj(d));return k.Nc()}
+Hm.prototype.b=function(){Nm=this;this.hT=-1;this.a|=1;this.WH="Expected command.";this.a|=2;this.UH="Expected closing bracket.";this.a|=4;this.VH="Expected a closing parenthesis here.";this.a|=8;this.XH="Expected reporter.";this.a|=16;this.dI="To use a non-default number of inputs, you need to put parentheses around this.";this.a|=32;this.iT="No closing bracket for this open bracket.";this.a|=64;this.jT="No closing parenthesis for this open parenthesis.";this.a|=128;this.kT="Missing input on the left.";
+this.a|=256;return this};function mda(a,b){if(null===a)throw(new Ce).b();return a.Pa?a.tb:De(a,1<Im(b)?"inputs":"input")}
+function nda(a,b,d,e,f,h){if(d&&Om(b)){d=e.wc();var k=ch(e.Hy());a:{var n=b.Na,r=G(t(),u());for(;;){var y=f.Y();if(null!==y){var E=y.sb;if(vl()===E){f=r;break a}}if(null!==y&&(E=y.sb,y=y.W,$f()===E&&y&&y.$classData&&y.$classData.m.aa&&(n.Y()|0)!==sj(A())&&Pm(y.G()))){Tg();if(r.Da()!==Qm(b)){f=Dc();if(0===(32&f.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ExpressionParser.scala: 702");Sg(f.dI,d.Ua,d.Ya,d.bb)}f=r;break a}y=Km(a,b,f,d,k,n.Y()|0,h);
+n=n.$().Ye()?n.$():n;E=t();r=r.yc(y,E.s)}}}else d=e.wc(),f=lda(a,b,d,ch(e.Hy()),f,h);d=e.wc();return oda(a,b,f,d,ch(e.Hy()),h)}
+function pda(a,b,d,e){var f=b.Qz().$().Sa().zn(),h=!Rm(A(),d,Zi(A()));if(Rm(A(),d,zj())){if(b&&b.$classData&&b.$classData.m.XQ)a=b.sD;else{if(!(b&&b.$classData&&b.$classData.m.WQ))throw(new q).i(b);a=b.Qz()}d=a.ce(2);e=G(t(),u());a:for(;;){if(d.z())e.z()||(d=e.Y().sb,e=ul(),null!==d&&d===e&&(Tg(),d=b.Qz().nd().wc(),Sg("Expected close paren here",d.Ua,d.Ya,d.bb)));else{f=d.Y().sb;h=wl();null!==f&&f===h?(f=d.$(),d=d.Y(),h=t(),e=e.Tc(d,h.s),d=f):(f=d.Y().sb,h=ul(),null!==f&&f===h?(f=d.$(),d=d.Y(),h=
+t(),e=e.Tc(d,h.s),d=f):(f=d.Y().sb,h=xl(),null!==f&&f===h?(e.z()?f=!1:(f=e.Y().sb,h=ul(),f=null!==f&&f===h),f&&(Tg(),f=d.Y().wc(),Sg("Expected close paren before close bracket here",f.Ua,f.Ya,f.bb)),e.z()?f=!0:(f=e.Y().sb,h=wl(),f=!(null!==f&&f===h)),f&&(Tg(),f=d.Y().wc(),Sg("Closing bracket has no matching open bracket here",f.Ua,f.Ya,f.bb)),d=d.$(),e=e.$()):(f=d.Y().sb,h=vl(),null!==f&&f===h?(e.z()?f=!1:(f=e.Y().sb,h=wl(),f=null!==f&&f===h),f&&(Tg(),f=d.Y().wc(),Sg("Expected close bracket before close paren here",
+f.Ua,f.Ya,f.bb)),e.z()?f=!0:(f=e.Y().sb,h=ul(),f=!(null!==f&&f===h)),f&&(Tg(),f=d.Y().wc(),Sg("Closing paren has no matching open paren here",f.Ua,f.Ya,f.bb)),d=d.$(),e=e.$()):d=d.$())));continue a}break}d=(new Sm).Ea(a.$().ce(2));d.K(a.Y());e=a.Y().wc().Ua;b=b.wc().Ya;a=a.Y();return Tm(new Lb,d,Xl(new Yl,e,b,a.wc().bb))}if(b.bF()&&!b.zv())return qda(a,b.Fe,f,b);if(b.bF()&&b.zv())return rda(b.Fe,f,b);if(Rm(A(),d,vj(A()))){a=sda(a,d,e,f,b);if(null===a)throw(new q).i(a);d=a.na();return Eb(new Gb,a.ja(),
+Xl(new Yl,b.ch.ma.Ua,d.ma.Ya,d.ma.bb))}if(Rm(A(),d,uj(A()))){a=tda(f,e,b);if(null===a)throw(new q).i(a);d=a.na();return Um(Xl(new Yl,b.ch.ma.Ua,d.ma.Ya,d.ma.bb),a.ja(),!1)}if(Rm(A(),d,sj(A()))&&!b.zv()&&h)return qda(a,(new sm).ud(!1),f,b);if(Rm(A(),d,tj(A()))&&b.zv()&&h)return rda((new sm).ud(!1),f,b);if(Rm(A(),d,Zi(A()))){d=uda(vda(new Vm,Wm()),b.ch,f);if(null===d)throw(new q).i(d);a=d.na();d=(new Xm).i(d.ja());e=cm();d.K(Fl(new Gl,"",e,null,Xl(new Yl,b.ch.ma.Ua,a.ma.Ya,a.ma.bb)));return Tm(new Lb,
+d,Xl(new Yl,b.ch.ma.Ua,a.ma.Ya,a.ma.bb))}Tg();a="Expected "+Cj(Fj(),d)+" here, rather than a list or block.";b=b.wc();Sg(a,b.Ua,b.Ya,b.bb)}function Ym(a,b,d){return b.Pa?b.tb:wda(a,b,d)}
+function xda(a,b,d){var e=b.W;if(!e.G().As)throw(new Zm).Wf(b);d=yda(a,Qm(e.G()),e.H(),d);if(null===d)throw(new q).i(d);a=d.ja();d=d.na();if(Lm(e.G())){var f=Cb(new Db,(new Hb).c(b.ma.bb),b.ma,!0),h=t();d=d.yc(f,h.s)}a=(new $m).kv((new an).Ea(a));a.K(b);e=(new Jb).Cj(e,d,b.ma);d=b.ma;f=t();e=Um(d,G(f,(new J).j([e])),!0);d=t();return(new Lb).bd(a,G(d,(new J).j([e])),b.ma)}
+function zda(a,b,d,e,f,h){var k=b.Y(),n=f===(sj(A())|tj(A())),r=n||f===sj(A()),y=n||f===tj(A()),E=k.sb;if(ul()===E){d=k.ma.bb;n=b.ka();Ne();r=n.sb;y=ul();bn(0,null!==r&&r===y);r=Ada(Dc(),b,!0,f,h);Tg();f=b.Y().sb;y=Zf();null!==f&&f===y&&(f=cn(),k=k.ma,Sg(f,k.Ua,k.Ya,k.bb));k=b.ka();Tg();f=k.sb;y=Ec();null!==f&&f===y&&(f=cn(),y=n.ma,Sg(f,y.Ua,y.Ya,y.bb));Tg();f=k.sb;y=vl();if(null===f||f!==y)f=Bda(),y=k.ma,Sg(f,y.Ua,y.Ya,y.bb);k=r.Au(Xl(new Yl,n.ma.Ua,k.ma.Ya,d))}else if(wl()===E)k=Cda(a,k,b,h);else if($f()!==
+E&&Zf()!==E||!Rm(A(),f,Aj()))if($f()===E||cm()===E){b.ka();y=k.sb;if(cm()===y)f=(new Xm).i(k.W),f.K(k),f=(new w).e(f.G(),Tm(new Lb,f,k.ma));else if($f()!==y&&dn(en(),"unexpected token type: "+k.sb),y=k.W,fn(y)||tm(y))if(f===Aj())f=(new w).e(y.G(),Tm(new Lb,y,k.ma));else{Dda||(Dda=(new gn).b());f=Eda(y,k,h);if(f.z())f=C();else{f=f.R();if(null===f)throw(new q).i(f);f=f.ja();f=(new H).i((new w).e(f.G(),Tm(new Lb,f,k.ma)))}if(f.z()){Tg();var y=$g(),Q=[k.Zb.toUpperCase()],E=y.Dm.Zh("compiler.LetVariable.notDefined",
+I(function(a,b){return function(){throw(new Re).c("coding error, bad translation key: "+b+" for Errors");}}(y,"compiler.LetVariable.notDefined"))),R=Q.length|0;if(0>=R)var da=0;else y=R>>31,da=(0===y?-1<(-2147483648^R):0<y)?-1:R;t();hn();var y=[],ma=0,ra=Q.length|0;0>da&&jn(kn(),0,R,1,!1);for(ra=ra<da?ra:da;ma<ra;){var Ca=Q[ma],ab=ma;0>da&&jn(kn(),0,R,1,!1);if(0>ab||ab>=da)throw(new O).c(""+ab);Ca=(new w).e(Ca,ab);y.push(Ca);ma=1+ma|0}Q=y.length|0;R=0;da=E;a:for(;;){if(R!==Q){E=1+R|0;da=(new w).e(da,
+y[R]);b:{R=da.ub;ra=da.Fb;if(null!==ra&&(ma=ra.ja(),ra=ra.Gc(),vg(ma))){da=ma;da=Rb(Ia(),R,"\\{"+ra+"\\}",da);break b}throw(new q).i(da);}R=E;continue a}break}k=k.ma;Sg(da,k.Ua,k.Ya,k.bb)}f=f.R()}else if(!Pm(y.G())||r)f=(new w).e(y.G(),Tm(new Lb,y,k.ma));else{if(!ln(y)||!d)throw(new mn).Wf(k);f=(new nn).b();f.K(k);f=(new w).e(f.G(),Tm(new Lb,f,k.ma))}if(null===f)throw(new q).i(f);k=f.ja();f=f.na();k=r&&!d&&!Fda(f.ye)&&(n||0<Qm(k))?Gda(a,f,f.ye,h):Hda(f,nda(a,k,d,f,b,h))}else{if(Zf()!==E||!y)throw(new Zm).Wf(k);
+b.ka();k=xda(a,k,h)}else b.ka(),d=(new on).b(),eh(k,d,k.Zb,k.sb),k=Tm(new Lb,d,k.ma);return Ida(a,k,b,e,h)}function qda(a,b,d,e){d=sda(a,nc(),e.fr,d,e);if(null===d)throw(new q).i(d);a=d.ja();d=d.na();b=(new pn).kv(b);b.K(e.ch);a=G(t(),(new J).j([a]));return(new Lb).bd(b,a,Xl(new Yl,e.ch.ma.Ua,d.ma.Ya,e.wc().bb))}
+function Km(a,b,d,e,f,h,k){try{return zda(a,d,!1,b.Op,h,k)}catch(n){if(d=qn(qg(),n),null!==d)if(d&&d.$classData&&d.$classData.m.kC||d&&d.$classData&&d.$classData.m.lC)Tg(),a=rn(a,b,f,!0),Sg(a,e.Ua,e.Ya,e.bb);else throw pg(qg(),d);else throw n;}}
+function Gc(a,b,d,e){var f=b.Y(),h=f.sb;if(ul()===h){f=f.ma.bb;a=b.ka();Ne();d=a.sb;h=ul();bn(0,null!==d&&d===h);e=Gc(Dc(),b,!0,e);b=b.ka();Tg();d=b.sb;h=Ec();null!==d&&d===h&&(d=cn(),h=a.ma,Sg(d,h.Ua,h.Ya,h.bb));Tg();d=b.sb;h=vl();if(null===d||d!==h)d=Bda(),h=b.ma,Sg(d,h.Ua,h.Ya,h.bb);e=(new w).e(e,Xl(new Yl,a.ma.Ua,b.ma.Ya,f));b=e.ub;f=e.Fb;if(null!==b)e=b.na(),b=b.ja();else throw(new q).i(e);return(new w).e((new Jb).Cj(b.Gd,b.wa,f),e)}if(Zf()===h){b.ka();var h=f.W,k=b.Y().sb,n=Ec(),k=null===k||
+k!==n?(new H).i(b.Y()):C();Jda||(Jda=(new sn).b());k=Kda(h,k,e);if(k.z())k=C();else{k=k.R();if(null===k)throw(new q).i(k);n=k.na();k=(new H).i((new w).e(Lda(k.ja(),f.ma),n))}e=k.z()?(new w).e(Lda(h,f.ma),e):k.R();if(null===e)throw(new q).i(e);f=e.ja();e=e.na();b=nda(a,h.G(),d,f,b,e);return(new w).e(Mda(f,b),e)}b=f.W;if(!fn(b)&&!tm(b)||ym(e,f.Zb.toUpperCase()))Tg(),b=Nda(a),f=f.ma,Sg(b,f.Ua,f.Ya,f.bb);else{Tg();b=$g();a=[f.Zb.toUpperCase()];e=b.Dm.Zh("compiler.LetVariable.notDefined",I(function(a,
+b){return function(){throw(new Re).c("coding error, bad translation key: "+b+" for Errors");}}(b,"compiler.LetVariable.notDefined")));d=a.length|0;0>=d?h=0:(b=d>>31,h=(0===b?-1<(-2147483648^d):0<b)?-1:d);t();hn();b=[];k=0;n=a.length|0;0>h&&jn(kn(),0,d,1,!1);for(n=n<h?n:h;k<n;){var r=a[k],y=k;0>h&&jn(kn(),0,d,1,!1);if(0>y||y>=h)throw(new O).c(""+y);r=(new w).e(r,y);b.push(r);k=1+k|0}a=b.length|0;d=0;h=e;a:for(;;){if(d!==a){e=1+d|0;h=(new w).e(h,b[d]);b:{d=h.ub;n=h.Fb;if(null!==n&&(k=n.ja(),n=n.Gc(),
+vg(k))){h=k;h=Rb(Ia(),d,"\\{"+n+"\\}",h);break b}throw(new q).i(h);}d=e;continue a}break}f=f.ma;Sg(h,f.Ua,f.Ya,f.bb)}}function Fda(a){if(Rm(A(),a.G().Wa,zj()|Aj()))return!0;for(a=a.G().Na;!a.z();){var b=a.Y()|0;if(Rm(A(),b,zj()|Aj()))return!0;a=a.$()}return!1}
+function wda(a,b,d){if(null===b)throw(new Ce).b();if(b.Pa)return b.tb;d=d.Na;a=function(){return function(a){a|=0;Ia();a=Cj(Fj(),a);if(null===a)throw(new Ce).b();var b=jg(ig(),"anything");a=kg(new lg,b,a,a.length|0);tn(a);Hh(a)?(b=(new un).b(),vn(a,b,"any input"),yn(a,b),a=b.l()):a=a.Ep;return a}}(a);var e=x().s;if(e===x().s)if(d===u())a=u();else{var e=d.Y(),f=e=Og(new Pg,a(e),u());for(d=d.$();d!==u();){var h=d.Y(),h=Og(new Pg,a(h),u()),f=f.Ka=h;d=d.$()}a=e}else{for(e=Nc(d,e);!d.z();)f=d.Y(),e.Ma(a(f)),
+d=d.$();a=e.Ba()}return De(b,a)}
+function Cda(a,b,d,e){a:{var f=(new zn).Bp((new An).Mg(pa(Oda))),h=0;for(;;){var k=d.ka(),n=k.sb,r=wl();if(null!==n&&n===r)f=f.Yj(k),h=1+h|0;else if(n=k.sb,r=xl(),null!==n&&n===r){if(1===h){a=f.Yj(k).Nc();break a}f=f.Yj(k);h=-1+h|0}else n=k.sb,r=Ec(),null===n||n!==r?f=f.Yj(k):(Tg(),k=Bn(a),n=b.ma,Sg(k,n.Ua,n.Ya,n.bb))}}a=a.Nc();kda||(kda=(new Gm).b());a:{a=a.$();xm||(xm=(new lm).b());d=xm;f=t();d=ida(d,a.Tc(b,f.s),e);if(Xj(d)&&(f=d.Q,null!==f)){e=f.Oa;d=f.fb;f=f.Gf;h=a.nd();k=t();k=a.Tc(b,k.s);n=
+Zl();r=t();a=new Cn;k=k.yc(n,r.s);Cn.prototype.PV.call(a,b,e,d,h,k,f,Xl(new Yl,b.ma.Ua,h.ma.Ya,b.ma.bb));b=a;break a}if(C()===d)d=new Dn,f=a.Wn(),f.z()?f=C():(f=f.R(),f=(new H).i(f.ma.Ya)),f=(f.z()?b.ma.Ya:f.R())|0,Dn.prototype.QV.call(d,b,a,e,Xl(new Yl,b.ma.Ua,f,b.ma.bb)),b=d;else throw(new q).i(d);}return b}function Um(a,b,d){b=(new Hb).Ap(a.bb,b);return Cb(new Db,b,a,d)}
+function Ada(a,b,d,e,f){try{if(0===(1&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ExpressionParser.scala: 23");return zda(a,b,d,a.hT,e,f)}catch(h){if(h&&h.$classData&&h.$classData.m.kC)Tg(),a=Pda(a),b=h.Pw.ma,Sg(a,b.Ua,b.Ya,b.bb);else if(h&&h.$classData&&h.$classData.m.lC){Tg();if(0===(16&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ExpressionParser.scala: 701");b=h.Pw.ma;Sg(a.XH,b.Ua,b.Ya,
+b.bb)}else throw h;}}function Nda(a){if(0===(2&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ExpressionParser.scala: 698");return a.WH}function En(a,b,d,e,f){a=d&&d.$classData&&d.$classData.m.gR?pda(a,d,b,f):d;Tg();Rm(A(),b,a.oo())||(d=0===(b&Ti())&&0!==(a.oo()&~Ti())?a.oo()&~Ti():a.oo(),b=e+" expected this input to be "+Cj(Fj(),b)+", but got "+Cj(Fj(),d)+" instead",e=a.wc(),Sg(b,e.Ua,e.Ya,e.bb));return a}
+function cn(){var a=Dc();if(0===(128&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ExpressionParser.scala: 705");return a.jT}function tda(a,b,d){for(var e=xl(),f=G(Fc(),u());;){var h=a.Y().sb;if(null===h||h!==e){Tg();var k=a.Y().sb,n=Ec(),h=d.ch;null!==k&&k===n&&(k=Bn(Dc()),h=h.ma,Sg(k,h.Ua,h.Ya,h.bb));b=Gc(Dc(),a,!1,b);if(null===b)throw(new q).i(b);h=b.ja();b=b.na();f.Yj(h)}else break}d=f.Nc();return(new w).e(d,a.ka())}
+function rn(a,b,d,e){var f=(new Be).b(),h=(new Be).b(),k=(new Be).b(),n=(new Be).b(),r;if(r=e&&Om(b))r=b.ut,r=0===((r.z()?Fn(b):r.R())|0);if(r)k=d+" expected "+Im(b)+" "+(f.Pa?f.tb:mda(f,b))+" on the right or any number of inputs when surrounded by parentheses";else if(e){if(h.Pa)h=h.tb;else{if(null===h)throw(new Ce).b();h=h.Pa?h.tb:De(h,Om(b)?" at least":"")}d=d+" expected"+h+" "+Im(b)+" "+(f.Pa?f.tb:mda(f,b));if(k.Pa)k=k.tb;else{if(null===k)throw(new Ce).b();k=k.Pa?k.tb:De(k,Pm(b)?" on the right":
+"")}k=d+k}else k=d+" expected "+Cj(Fj(),b.Wa)+" on the left";if(e){a:{for(e=Ym(a,n,b);!e.z();){if("any input"!==e.Y()){e=!1;break a}e=e.$()}e=!0}if(e)return k+".";e=Ym(a,n,b);if(1===Jm(e))return a=Ym(a,n,b),k+", "+ec(a,"","","")+".";e=Ym(a,n,b);e=Gn(e,1).Ab(", ");a=Ym(a,n,b);return k+", "+e+" and "+Mm(a)+"."}return k}function Bda(){var a=Dc();if(0===(8&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ExpressionParser.scala: 700");return a.VH}
+function yda(a,b,d,e){var f=1>b,h=null,h=(new w).e(G(t(),u()),e);if(!f)for(e=1;;){h=(new w).e(h,e);f=h.ub;if(null!==f){var h=f.ja(),k=Qda(f.na());if(null===k)throw(new q).i(k);var f=k.ja(),k=k.na(),n=t(),h=(new w).e(h.yc(f,n.s),k)}else throw(new q).i(h);if(e===b)break;e=1+e|0}b=h;if(null===b)throw(new q).i(b);b=b.ja();a=m(new p,function(a,b){return function(a){a=(new wm).WE(a,!0);a.K(b);return Tm(new Lb,a,Xl(new Yl,b.ma.Ua,b.ma.Ya,b.ma.bb))}}(a,d));d=t();a=b.ya(a,d.s);return(new w).e(b,a)}
+function sda(a,b,d,e,f){a=En(a,nc(),Ada(a,e,!1,b,d),null,d);e=e.ka();Tg();b=e.sb;d=Ec();f=f.ch;null!==b&&b===d&&(b=Bn(Dc()),f=f.ma,Sg(b,f.Ua,f.Ya,f.bb));Tg();f=e.sb;b=xl();if(null===f||f!==b){f=Dc();if(0===(4&f.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ExpressionParser.scala: 699");b=e.ma;Sg(f.UH,b.Ua,b.Ya,b.bb)}return(new w).e(a,e)}
+function oda(a,b,d,e,f,h){Hn||(Hn=(new In).b());var k=G(Hn,d),n=0;if(Pm(b)){n=b.Wa;Tg();if(!(1<=d.Da())){var r=rn(Dc(),b,f,!1);Sg(r,e.Ua,e.Ya,e.bb)}k.Bf(0,En(a,n,d.X(0),f,h));n=1}for(var r=0,y=b.Na;;){if(r<Jm(y)){A();var E=Si(),E=!Rm(0,E,mi(y,r)|0)}else E=!1;if(E){r===(-1+Jm(y)|0)&&d.Da()===(-1+Jm(y)|0)?(A(),E=Bj(),E=Rm(0,E,mi(y,r)|0)):E=!1;if(E)return G(Jn(),k);Tg();d.Da()>n||(E=rn(Dc(),b,f,!0),Sg(E,e.Ua,e.Ya,e.bb));k.Bf(n,En(a,mi(y,r)|0,d.X(n),f,h));r=1+r|0;n=1+n|0}else break}if(r<Jm(y)){for(var E=
+-1+d.Da()|0,Q=-1+Jm(y)|0;;){if(0<=Q){A();var R=Si(),R=!Rm(0,R,mi(y,Q)|0)}else R=!1;if(R)Tg(),d.Da()>E&&-1<E||(R=rn(Dc(),b,f,!0),Sg(R,e.Ua,e.Ya,e.bb)),k.Bf(E,En(a,mi(y,Q)|0,d.X(E),f,h)),Q=-1+Q|0,E=-1+E|0;else break}for(;n<=E;)k.Bf(n,En(a,mi(y,r)|0,d.X(n),f,h)),n=1+n|0}return G(Jn(),k)}
+function rda(a,b,d){b=tda(b,d.fr,d);if(null===b)throw(new q).i(b);var e=b.ja();b=b.na();a=(new $m).kv(a);a.K(d.ch);e=Um(Xl(new Yl,d.ch.ma.Ua,b.ma.Ya,d.wc().bb),e,!1);e=G(t(),(new J).j([e]));return(new Lb).bd(a,e,Xl(new Yl,d.ch.ma.Ua,b.ma.Ya,d.wc().bb))}
+function Ida(a,b,d,e,f){var h=b;for(b=!1;!b;){var k=d.Y(),n=k.sb,r=$f();if(null!==n&&n===r)if(n=k.W,r=n.G(),Pm(r)&&(r.Op>e||r.pt&&r.Op===e)){d.ka();Tg();if(null===h){var y=Pda(Dc()),E=k.ma;Sg(y,E.Ua,E.Ya,E.bb)}k=Xl(new Yl,h.wc().Ua,k.ma.Ya,k.ma.bb);y=lda(a,r,k,ch(n),d,f);E=t();h=oda(a,r,y.Tc(h,E.s),k,ch(n),f);r=h.nd().wc().Ya;h=(new Lb).bd(n,h,Xl(new Yl,k.Ua,r,k.bb))}else b=!0;else b=!0}return h}
+function Gda(a,b,d,e){e=yda(a,Qm(d.G()),d.H(),e);if(null===e)throw(new q).i(e);a=e.na();e=(new pn).kv((new an).Ea(e.ja()));e.K(d.H());var f=t();b=[Hda(b,a)];return(new Lb).bd(e,G(f,(new J).j(b)),d.H().ma)}function Pda(a){if(0===(256&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ExpressionParser.scala: 706");return a.kT}
+function Bn(a){if(0===(64&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ExpressionParser.scala: 704");return a.iT}Hm.prototype.$classData=g({O2:0},!1,"org.nlogo.parse.ExpressionParser$",{O2:1,d:1});var Nm=void 0;function Dc(){Nm||(Nm=(new Hm).b());return Nm}function Kn(){}Kn.prototype=new l;Kn.prototype.constructor=Kn;Kn.prototype.b=function(){return this};
+function Ln(a,b){var d=!1,e=null;return Mn(b)&&(d=!0,e=b,a=e.W,zg(a))?(b=Nn(),ac(b,a,!0,!1)):d?e.H().Zb:On(b)||Pn(b)&&b.Tj?"":b.H().Zb}function Rda(a,b,d){return Xc(new Zc,"",b,m(new p,function(){return function(a){return Ln(Qn(),a)}}(a)),d)}function Sda(){var a=Qn();m(new p,function(){return function(a){return Ln(Qn(),a)}}(a))}Kn.prototype.$classData=g({R2:0},!1,"org.nlogo.parse.Formatter$",{R2:1,d:1});var Rn=void 0;function Qn(){Rn||(Rn=(new Kn).b());return Rn}function Sn(){this.pu=null}
+Sn.prototype=new l;Sn.prototype.constructor=Sn;function Vc(a){var b=new Sn;b.pu=a;return b}function Uc(a,b){return Xc(new Zc,""+a.pu.Zb+b,a.pu.xk,a.pu.Jm,a.pu.Ef)}Sn.prototype.$classData=g({S2:0},!1,"org.nlogo.parse.Formatter$RichFormat",{S2:1,d:1});function Tda(){var a=t(),b=(new Tn).b(),d=(new Un).b(),e=(new Vn).b();return G(a,(new J).j([b,d,e,new Wn]))}
+function xaa(a,b){b=Eaa(a,b);if(null===b)throw(new q).i(b);var d=b.ja();b=b.na();var d=Tda().Ib(d,ub(new vb,function(a){return function(b,d){d=m(new p,function(a,b){return function(a){return b.ef(a)}}(a,d));var e=t();return b.ya(d,e.s)}}(a))),e=(new Xn).b();d.ta(m(new p,function(a,b){return function(a){Pb(b,a.pe)}}(a,e)));$ca((new jm).Ea(d));e=(new Yn).b();a=m(new p,function(a,b){return function(a){return b.ef(a)}}(a,e));e=t();a=d.ya(a,e.s);return(new w).e(a,b)}function sn(){}sn.prototype=new l;
+sn.prototype.constructor=sn;sn.prototype.b=function(){return this};
+function Kda(a,b,d){var e=!1,f=null;if(Zn(a)){var e=!0,f=a,h=f.ed;if(C()===h){e=!1;h=null;if(Xj(b)&&(e=!0,h=b,a=h.Q,null!==a)){b=a.Zb;var k=a.sb;if($f()===k)return b=b.toUpperCase(),e=(new $n).c(b),h=d.$s(b),h.z()||(h=h.R(),Tg(),h="There is already a "+ao(om(),h)+" called "+b,a=a.ma,Sg(h,a.Ua,a.Ya,a.bb)),(new H).i((new w).e(Uda(f,e),Vda(d,b,(new bo).ft(e))))}e&&(d=h.Q,Tg(),d=d.ma,Sg("Expected variable name here",d.Ua,d.Ya,d.bb));return C()}}return e&&(f=f.ed,Xj(f))?(f=f.Q,(new H).i((new w).e(a,Vda(d,
+f.va.toUpperCase(),(new bo).ft(f))))):C()}sn.prototype.$classData=g({X2:0},!1,"org.nlogo.parse.LetScope$",{X2:1,d:1});var Jda=void 0;function gn(){}gn.prototype=new l;gn.prototype.constructor=gn;gn.prototype.b=function(){return this};function Eda(a,b,d){if(tm(a)){a=d.$s(b.Zb.toUpperCase());b=(new co).Wf(b);a.z()?a=C():(b=pd(new rd,b),a=a.R(),a=b.Uc(a));if(a.z())return C();a=a.R();return(new H).i((new w).e(a,d))}return C()}
+gn.prototype.$classData=g({Y2:0},!1,"org.nlogo.parse.LetVariableScope$",{Y2:1,d:1});var Dda=void 0;function Vm(){this.QH=this.OH=this.NH=this.MH=this.nda=null;this.a=0}Vm.prototype=new l;Vm.prototype.constructor=Vm;
+function uda(a,b,d){for(var e=Wda(eo(),u()),f=C();!f.ba();){var h=d.ka(),k=h.sb;if(xl()===k)f=(new H).i(h);else if(Ec()===k){Tg();h=a;if(0===(32&h.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/LiteralParser.scala: 25");k=b.ma;Sg(h.QH,k.Ua,k.Ya,k.bb)}else e=fo(e,go(a,h,d))}return(new w).e(e,f.R())}
+function go(a,b,d){var e=b.sb;if(Vca()===e)Tg(),a=Xda(),b=b.ma,Sg(a,b.Ua,b.Ya,b.bb);else{if(cm()===e)return b.W;if(wl()===e){a=uda(a,b,d);if(null===a)throw(new q).i(a);return a.ja()}if(Ica()===e)Tg(),b=d.ka(),a=Xda(),b=b.wc(),Sg(a,b.Ua,b.Ya,b.bb);else{if(ul()===e){b=go(a,d.ka(),d);d=d.ka();Tg();var e=d.sb,f=vl();if(null===e||e!==f){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/LiteralParser.scala: 20");d=d.ma;Sg(a.MH,d.Ua,d.Ya,
+d.bb)}return b}if(zl()===e)return go(a,d.ka(),d);Tg();if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/LiteralParser.scala: 21");b=b.ma;Sg(a.NH,b.Ua,b.Ya,b.bb)}}}
+function vda(a,b){a.nda=b;a.MH="Expected a closing parenthesis.";a.a=(1|a.a)<<24>>24;a.NH="Expected a literal value.";a.a=(2|a.a)<<24>>24;a.a=(4|a.a)<<24>>24;a.OH="Extra characters after literal.";a.a=(8|a.a)<<24>>24;a.a=(16|a.a)<<24>>24;a.QH="No closing bracket for this open bracket.";a.a=(32|a.a)<<24>>24;return a}Vm.prototype.$classData=g({a3:0},!1,"org.nlogo.parse.LiteralParser",{a3:1,d:1});function ho(){this.a=!1}ho.prototype=new l;ho.prototype.constructor=ho;
+function Yda(a,b,d){var e=b.gp;if(io(e)){var f=Iba(Sb(),e).Jl(m(new p,function(a,b){return function(a){return ym(b,a.toUpperCase())}}(a,d)),!1),h=m(new p,function(){return function(a){return(new w).e(a,jo())}}(a)),k=t(),f=f.ya(h,k.s),h=Fba(Sb(),e).Jl(m(new p,function(a,b){return function(a){return ym(b,a.toUpperCase())}}(a,d)),!1),k=m(new p,function(){return function(a){return(new w).e(a,ko())}}(a)),n=t(),h=h.ya(k,n.s),k=t();f.$c(h,k.s).ta(m(new p,function(a,b,d,e){return function(a){if(null!==a){a=
+a.ja();Tg();lo();var f=pm(d,a.toUpperCase()),f=ao(om(),f),h=e.Yk.f.ma;Sg("Defining a breed ["+b.$l.va+" "+b.Tf.va+"] redefines "+a+", a "+f,h.Ua,h.Ya,h.bb)}else throw(new q).i(a);}}(a,e,d,b)))}}ho.prototype.b=function(){return this};
+function Zda(a,b,d){Tg();var e=d.Yk.va;if(!(e=a.toLowerCase()!==(null===e?null:e.toLowerCase()))){if(a=!!(b&&b.$classData&&b.$classData.m.rn))a=d.zo,a=mo()===b&&no(a)||no(b)&&mo()===a?!0:oo()===b&&po(a)||po(b)&&oo()===a?!0:po(b)&&po(a)||no(b)&&no(a);e=a}a=d.Yk.f;e||(lo(),d=d.Yk.va,b="There is already a "+ao(om(),b)+" called "+d,d=a.ma,Sg(b,d.Ua,d.Ya,d.bb))}
+function $da(a,b){var d=b.Sa();return(new qo).Nf(d,m(new p,function(a,b){return function(d){var k=b.Fo(m(new p,function(a,b){return function(a){return b!==a}}(a,d)));d=m(new p,function(a,b){return function(a){return(new w).e(b,a)}}(a,d));var n=t();return k.ya(d,n.s)}}(a,b)))}function aea(a,b){Tg();a=b.f;"-\x3e"===b.va&&(b=a.ma,Sg("-\x3e can only be used to create anonymous procedures",b.Ua,b.Ya,b.bb))}
+function bea(a,b){return b.Ib(cea(),ub(new vb,function(){return function(a,b){return io(b)?tc(tc(a,Iba(Sb(),b),jo()),Fba(Sb(),b),ko()):a}}(a)))}function dea(a,b){if(ro(a)&&ro(b)){var d=a.Og,e=b.Og;if(null===d?null===e:d.o(e))return(new H).i((new w).e(a.Og.va,b.Og.f))}return so(a)&&so(b)?(new H).i((new w).e("EXTENSIONS",b.f)):to(a)&&to(b)?(new H).i((new w).e("INCLUDES",b.f)):C()}function eea(a,b){return"Redeclaration of "+b}
+function fea(a,b){b.Fo(m(new p,function(){return function(a){return uo(a)}}(a))).ta(m(new p,function(a){return function(b){if(uo(b))b=b.Nn,b.ta(m(new p,function(a,b){return function(d){aea(lo(),d);Tg();var e=1===b.ND(m(new p,function(a,b){return function(a){return a.va===b.va}}(a,d))),f=d.f;e||(d=gea(lo(),d),f=f.ma,Sg(d,f.Ua,f.Ya,f.bb))}}(a,b)));else throw(new q).i(b);}}(a)));b=$da(a,b);for(b=(new vo).Nf(b,m(new p,function(){return function(a){return null!==a}}(a)));b.ra();){var d=b.ka();if(null!==
+d){var d=dea(d.ja(),d.na()),e=hea(new wo,d,m(new p,function(){return function(a){return null!==a}}(a))),d=e.da,e=e.Yl,d=d.z()||e.y(d.R())?d:C();if(!d.z())if(e=d.R(),null!==e)d=e.ja(),e=e.na(),Tg(),d=eea(lo(),d),e=e.ma,Sg(d,e.Ua,e.Ya,e.bb);else throw(new q).i(e);}else throw(new q).i(d);}}function gea(a,b){return"There is already a local variable called "+b.va+" here"}
+function iea(a,b){b=b.Ib(G(t(),u()),ub(new vb,function(a){return function(b,f){if(ro(f)){var h=f.ag,k=f.Og.va.toUpperCase();if("TURTLES-OWN"===k)f=m(new p,function(a,b){return function(a){return xo(new yo,b,a,mo(),!0)}}(a,f)),k=t(),f=h.ya(f,k.s);else if("PATCHES-OWN"===k)f=m(new p,function(a,b){return function(a){return xo(new yo,b,a,zo(),!0)}}(a,f)),k=t(),f=h.ya(f,k.s);else if("LINKS-OWN"===k)f=m(new p,function(a,b){return function(a){return xo(new yo,b,a,oo(),!0)}}(a,f)),k=t(),f=h.ya(f,k.s);else if("GLOBALS"===
+k)f=m(new p,function(a,b){return function(a){return xo(new yo,b,a,Ao(),!0)}}(a,f)),k=t(),f=h.ya(f,k.s);else{var k=(new Tb).c(k),k=jea(k),n=b.rk(m(new p,function(a,b){return function(a){return a.Yk.va===b}}(a,k)));n.z()?f=C():(n=n.R().zo,Bo()===n?(f=m(new p,function(a,b,d){return function(a){return xo(new yo,b,a,(new Co).c(d),!0)}}(a,f,k)),k=t(),f=h.ya(f,k.s)):Do()===n?(f=m(new p,function(a,b,d){return function(a){return xo(new yo,b,a,(new Eo).c(d),!0)}}(a,f,k)),k=t(),f=h.ya(f,k.s)):f=G(t(),u()),f=
+(new H).i(f));f=f.z()?G(t(),u()):f.R()}h=t();return b.$c(f,h.s)}if(uo(f))return k=f.Nn,h=xo(new yo,f,f.va,Fo(),!0),f=m(new p,function(a,b){return function(a){return xo(new yo,b,a,vc(),!1)}}(a,f)),n=t(),f=k.ya(f,n.s),k=t(),f=f.Tc(h,k.s),h=t(),f.$c(b,h.s);if(io(f)){h=f.$l;k=f.Tf;if(f.$g)var n=Bo(),r=Go();else n=Do(),r=Ho();f=G(t(),(new J).j([xo(new yo,f,h,n,!0),xo(new yo,f,k,r,!0)]));h=t();return b.$c(f,h.s)}return b}}(a)));a=m(new p,function(){return function(a){return a.zo}}(a));Io||(Io=(new Jo).b());
+return Ko(b,a,Io)}
+function kea(a,b,d){for(var e=iea(a,b),f=e.Sa(),f=(new vo).Nf(f,m(new p,function(){return function(a){return null!==a&&io(a.gp)?!0:!1}}(a)));f.ra();){var h=f.ka();if(null!==h&&io(h.gp))Yda(lo(),h,d);else throw(new q).i(h);}b=lea(d,bea(a,b));for(d=e.Sa();d.ra();)f=d.ka(),aea(lo(),f.Yk),b.Fo(m(new p,function(){return function(a){return null!==a}}(a))).ta(m(new p,function(a,b){return function(a){if(null!==a)Zda(a.ja(),a.na(),b);else throw(new q).i(a);}}(a,f)));b=e.Sa();for(b=(new vo).Nf(b,m(new p,function(){return function(a){return a.nt}}(a)));b.ra();)d=
+b.ka(),e.Fo(m(new p,function(a,b){return function(a){return a!==b}}(a,d))).ta(m(new p,function(a,b){return function(a){Zda(b.Yk.va,b.zo,a)}}(a,d)))}ho.prototype.$classData=g({l3:0},!1,"org.nlogo.parse.StructureChecker$",{l3:1,d:1});var Lo=void 0;function lo(){Lo||(Lo=(new ho).b());return Lo}function Mo(){}Mo.prototype=new l;Mo.prototype.constructor=Mo;Mo.prototype.b=function(){return this};
+function mea(a){var b=No,d=gba(new Ae,a.Oc(),m(new p,function(){return function(a){return a.ma.Ua}}(b))),b=(new Oo).b(),d=nea(b).si(d);if(te(d))return a=d.Vm,rc(),(new Fh).i(a);var e=oea(pea(b),d);if(!e.z())return b=e.R().ja(),d=e.R().na(),a=d.jn.z()?a.ra()?a.ka():Zl():d.jn.Y(),rc(),a=(new w).e(b,a),(new Dh).i(a);throw(new q).i(d);}Mo.prototype.$classData=g({n3:0},!1,"org.nlogo.parse.StructureCombinators$",{n3:1,d:1});var No=void 0;function Po(){}Po.prototype=new l;Po.prototype.constructor=Po;
+Po.prototype.b=function(){return this};function qea(a,b,d){var e=Jc(b),e=Qo(e);d=b.Ut(d.va,d);b=Xg();a=m(new p,function(a,b){return function(a){return(new w).e(a,b.y(a))}}(a,d));d=t();a=Wg(b,e.ya(a,d.s).Nc());Ne();b=Jc(a);bn(0,e.Ze(Qo(b)));return a}function rea(a,b,d){return sea(a,tea(a,b,d),d)}
+function uea(a,b,d,e,f){var h=Jc(b.rg),k=Jc(b.Yf);if($k(h,k).ab(d)){if(b.Yf.ab(d))return f=b.Yf,d=b.Yf.y(d),f=qea(a,f,Ro(d.va,d.Tf,e,d.$g,d.Zg)),So(b.uk,b.Ik,b.jj,b.Ij,b.Xi,b.rg,f,b.Jg);f=b.rg;d=b.rg.y(d);f=qea(a,f,Ro(d.va,d.Tf,e,d.$g,d.Zg));return So(b.uk,b.Ik,b.jj,b.Ij,b.Xi,f,b.Yf,b.Jg)}b=$g();e=[d];a=b.Dm.Zh("compiler.StructureConverter.noBreed",I(function(a,b){return function(){throw(new Re).c("coding error, bad translation key: "+b+" for Errors");}}(b,"compiler.StructureConverter.noBreed")));
+d=e.length|0;0>=d?h=0:(b=d>>31,h=(0===b?-1<(-2147483648^d):0<b)?-1:d);t();hn();b=[];var k=0,n=e.length|0;0>h&&jn(kn(),0,d,1,!1);for(n=n<h?n:h;k<n;){var r=e[k],y=k;0>h&&jn(kn(),0,d,1,!1);if(0>y||y>=h)throw(new O).c(""+y);r=(new w).e(r,y);b.push(r);k=1+k|0}e=b.length|0;d=0;h=a;a:for(;;){if(d!==e){a=1+d|0;h=(new w).e(h,b[d]);b:{d=h.ub;n=h.Fb;if(null!==n&&(k=n.ja(),n=n.Gc(),vg(k))){h=k;h=Rb(Ia(),d,"\\{"+n+"\\}",h);break b}throw(new q).i(h);}d=a;continue a}break}throw(new kd).gt(h,f.ma.Ua,f.ma.Ya,f.ma.bb);
+}
+function vea(a,b,d,e,f){var h=(new To).b(),k=t(),h=b.lc(h,k.s).Ys(Ne().ml);d=(new Uo).La(d);k=t();k=b.lc(d,k.s);k.ta(m(new p,function(){return function(a){a=a.ja();a.a=(32|a.a)<<24>>24}}(a,f)));f=rea(a,e.dc,b);d=e.he;var n=m(new p,function(){return function(a){if(null!==a){a=a.ja();var b=a.we();return(new w).e(b,a)}throw(new q).i(a);}}(a)),r=t();d=Cc(d,k.ya(n,r.s));n=e.Pp;a=m(new p,function(){return function(a){if(null!==a){var b=a.na();a=a.ja().we();return(new w).e(a,b)}throw(new q).i(a);}}(a));r=
+t();a=n.Nk(k.ya(a,r.s));k=e.Fm;n=t();h=k.$c(h,n.s);k=e.et;e=e.Fq;n=(new Vo).b();r=t();b=b.lc(n,r.s).Ys(Ne().ml);n=t();return Wo(new Xo,f,d,a,h,k,e.$c(b,n.s))}function tea(a,b,d){return d.Ib(b,ub(new vb,function(){return function(a,b){if(io(b)){var d=b.$g,k=b.Zg,n=b.$l.va;b=b.Tf.va;var r=G(t(),u()),k=Ro(n,b,r,d,k);if(d)return d=a.Yf.Ut(k.va,k),So(a.uk,a.Ik,a.jj,a.Ij,a.Xi,a.rg,d,a.Jg);d=a.rg.Ut(k.va,k);return So(a.uk,a.Ik,a.jj,a.Ij,a.Xi,d,a.Yf,a.Jg)}return a}}(a)))}
+function sea(a,b,d){return d.Ib(b,ub(new vb,function(a){return function(b,d){if(ro(d)){var k=d.Og,n=d.ag;if(null!==k&&"GLOBALS"===k.va){d=b.Ik;var k=m(new p,function(){return function(a){return a.va}}(a)),r=t(),n=n.ya(k,r.s),k=t();d=d.$c(n,k.s);return So(b.uk,d,b.jj,b.Ij,b.Xi,b.rg,b.Yf,b.Jg)}}if(ro(d)&&(k=d.Og,n=d.ag,null!==k&&"TURTLES-OWN"===k.va))return d=b.jj,k=m(new p,function(){return function(a){a=a.va;var b=nc();return(new w).e(a,b)}}(a)),r=t(),d=Cc(d,n.ya(k,r.s)),So(b.uk,b.Ik,d,b.Ij,b.Xi,
+b.rg,b.Yf,b.Jg);if(ro(d)&&(k=d.Og,n=d.ag,null!==k&&"PATCHES-OWN"===k.va))return d=b.Ij,k=m(new p,function(){return function(a){a=a.va;var b=nc();return(new w).e(a,b)}}(a)),r=t(),d=Cc(d,n.ya(k,r.s)),So(b.uk,b.Ik,b.jj,d,b.Xi,b.rg,b.Yf,b.Jg);if(ro(d)&&(k=d.Og,n=d.ag,null!==k&&"LINKS-OWN"===k.va))return d=b.Xi,k=m(new p,function(){return function(a){a=a.va;var b=nc();return(new w).e(a,b)}}(a)),r=t(),d=Cc(d,n.ya(k,r.s)),So(b.uk,b.Ik,b.jj,b.Ij,d,b.rg,b.Yf,b.Jg);if(ro(d)&&(n=d.Og,d=d.ag,null!==n)){var r=
+n.va,n=n.f,k=Yo(),r=(new Tb).c(r),r=jea(r),y=m(new p,function(){return function(a){return a.va}}(a)),E=t();return uea(k,b,r,d.ya(y,E.s),n)}return b}}(a)))}Po.prototype.$classData=g({u3:0},!1,"org.nlogo.parse.StructureConverter$",{u3:1,d:1});var Zo=void 0;function Yo(){Zo||(Zo=(new Po).b());return Zo}function $o(){this.Fn=null;this.pl=!1}$o.prototype=new l;$o.prototype.constructor=$o;
+function wea(a,b,d){No||(No=(new Mo).b());b=mea(b);if(bm(b))return b=b.Q,fea(lo(),b),kea(lo(),b,Gaa(Hc(),d.dc,d.he)),vea(Yo(),b,a.Fn,a.pl?Wo(new Xo,d.dc,(ap(),Yg()),(ap(),Wg(Ne().qi,u())),(ap(),G(t(),u())),(ap(),G(t(),u())),(ap(),G(t(),u()))):d,a.pl);am(b)&&(d=b.Q,null!==d&&(a=d.ja(),d=d.na(),Tg(),d=d.ma,Sg(a,d.Ua,d.Ya,d.bb)));throw(new q).i(b);}function xea(a,b,d){a.Fn=b;a.pl=d;return a}$o.prototype.$classData=g({y3:0},!1,"org.nlogo.parse.StructureParser",{y3:1,d:1});
+function bp(){this.bI=null;this.a=!1}bp.prototype=new l;bp.prototype.constructor=bp;
+function Gaa(a,b,d){var e=cea(),f=yea(cp(b.Jg)),e=tc(e,Jc(f),dp()),f=zea(cp(b.Jg)),e=tc(tc(tc(tc(e,Jc(f),ep()),fp(b),Ao()),gp(b),mo()),Aea(b),zo()),f=hp(b);a=tc(e,f.Jl(m(new p,function(a,b){return function(a){return gp(b).ab(a)}}(a,b)),!0),oo());f=(new Lc).Of(b.rg);e=Mc().s;e=Nc(f,e);for(f=f.Dg.Wj();f.ra();){var h=f.ka();e.Ma(h.Tf)}a=tc(tc(a,e.Ba(),Ho()),Jc(b.rg),Do());f=(new Lc).Of(b.Yf);e=Mc().s;e=Nc(f,e);for(f=f.Dg.Wj();f.ra();)h=f.ka(),e.Ma(h.Tf);d=tc(tc(tc(a,e.Ba(),Go()),Jc(b.Yf),Bo()),Jc(d),
+Fo());a=(new Lc).Of(b.rg);b=null;b=d;for(d=a.Dg.Wj();d.ra();)a=d.ka(),b=a.$g?tc(b,a.Xl,(new Co).c(a.va)):tc(b,a.Xl,(new Eo).c(a.va));return b}bp.prototype.b=function(){this.bI="Included files must end with .nls";this.a=!0;return this};function Bea(){var a=Hc();if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/StructureParser.scala: 27");return a.bI}
+function Cea(a,b,d,e,f,h){b=ip(b,e,f);a=(new vo).Nf(b,m(new p,function(){return function(a){a=a.sb;var b=zl();return!(null!==a&&a===b)}}(a)));b=jp();a=(new cc).Nf(a,b);return wea(d,a,h)}function Dea(){var a=Hc();return ub(new vb,function(){return function(){return C()}}(a))}
+function Faa(a,b,d){var e=Dea();b=function(a,b,d,e){return function(){var r=xea(new $o,b.Fn,b.pl),y=b.Pt,E=Wo(new Xo,b.Is,b.eo,(ap(),Wg(Ne().qi,u())),(ap(),G(t(),u())),(ap(),G(t(),u())),(ap(),G(t(),u()))),y=Xk(y,E,ub(new vb,function(a,b,d){return function(a,e){var f=(new w).e(a,e);a=f.ub;e=f.Fb;if(null!==e)return f=e.ja(),e=e.na(),Cea(Hc(),b,d,e,f,a);throw(new q).i(f);}}(a,d,r)));if(b.pl)return y;rc();return(new kp).Nf(Eea(new lp,y,m(new p,function(a,b,d,e,f){return function(a){var h=a.Fm.Y().W;Tg();
+var k=mp(Ia(),h,".nls"),n=a.Fm.Y();k||(k=Bea(),n=n.wc(),Sg(k,n.Ua,n.Ya,n.bb));n=sb(b,d.Bs,h);if(Xj(n)&&(k=n.Q,null!==k)){var n=k.ja(),k=k.na(),r=Hc(),y=a.Fm.$(),E=a.et,Q=t(),h=E.yc(h,Q.s);return Cea(r,e,f,k,n,Wo(new Xo,a.dc,a.he,a.Pp,y,h,a.Fq))}if(C()===n){Tg();k=$g();r=[h];k=k.Dm.Zh("compiler.StructureParser.includeNotFound",I(function(a,b){return function(){throw(new Re).c("coding error, bad translation key: "+b+" for Errors");}}(k,"compiler.StructureParser.includeNotFound")));y=r.length|0;0>=y?
+E=0:(h=y>>31,E=(0===h?-1<(-2147483648^y):0<h)?-1:y);t();hn();var h=[],Q=0,dc=r.length|0;0>E&&jn(kn(),0,y,1,!1);for(dc=dc<E?dc:E;Q<dc;){var le=r[Q],qd=Q;0>E&&jn(kn(),0,y,1,!1);if(0>qd||qd>=E)throw(new O).c(""+qd);le=(new w).e(le,qd);h.push(le);Q=1+Q|0}r=h.length|0;y=0;E=k;a:for(;;){if(y!==r){k=1+y|0;E=(new w).e(E,h[y]);b:{y=E.ub;dc=E.Fb;if(null!==dc&&(Q=dc.ja(),dc=dc.Gc(),vg(Q))){E=Q;E=Rb(Ia(),y,"\\{"+dc+"\\}",E);break b}throw(new q).i(E);}y=k;continue a}h=E;break}a=a.Fm.Y().wc();Sg(h,a.Ua,a.Ya,a.bb)}throw(new q).i(n);
+}}(a,e,b,d,r))),m(new p,function(){return function(a){return a.Fm.Ye()}}(a))).ka()}}(a,d,b,e);if(d.pl)return b();np(d.Xh).ym();b=b();b.Fq.ta(m(new p,function(a,b){return function(a){var d=a.Zb.toLowerCase();Fea(b.Xh,d,(new Qg).Wf(a))}}(a,d)));return b}bp.prototype.$classData=g({z3:0},!1,"org.nlogo.parse.StructureParser$",{z3:1,d:1});var op=void 0;function Hc(){op||(op=(new bp).b());return op}function pp(){}pp.prototype=new l;pp.prototype.constructor=pp;pp.prototype.b=function(){return this};
+function cea(){Gea||(Gea=(new pp).b());return qp(new rp,Wg(sp(),u()),0)}pp.prototype.$classData=g({A3:0},!1,"org.nlogo.parse.SymbolTable$",{A3:1,d:1});var Gea=void 0;function tp(){this.a=0}tp.prototype=new l;tp.prototype.constructor=tp;tp.prototype.b=function(){return this};
+function ao(a,b){if(Ao()===b)return"global variable";if(mo()===b)return"turtle variable";if(zo()===b)return"patch variable";if(oo()===b)return"link variable";if(Do()===b)return"breed";if(Ho()===b)return"singular breed name";if(Bo()===b)return"link breed";if(Go()===b)return"singular link breed name";if(no(b)||po(b))return b.la+"-OWN variable";if(Fo()===b)return"procedure";if(dp()===b)return"primitive command";if(ep()===b)return"primitive reporter";if(jo()===b)return"breed command";if(ko()===b)return"breed reporter";
+if(up(b)||qm()===b||vc()===b)return"local variable here";throw(new q).i(b);}function dda(a,b,d){Tg();a="There is already a "+ao(om(),b)+" called "+d.Zb.toUpperCase();d=d.ma;Sg(a,d.Ua,d.Ya,d.bb)}tp.prototype.$classData=g({B3:0},!1,"org.nlogo.parse.SymbolType$",{B3:1,d:1});var vp=void 0;function om(){vp||(vp=(new tp).b());return vp}function wp(){}wp.prototype=new l;wp.prototype.constructor=wp;wp.prototype.b=function(){return this};
+function Ac(a,b,d){a=new xp;var e=new yp;e.zi=b;e.v_=d;e.OG=d.WV();e.a=!0;return zp(a,e)}wp.prototype.$classData=g({T3:0},!1,"org.nlogo.parse.TransformableTokenStream$",{T3:1,d:1});var Ap=void 0;function wc(){Ap||(Ap=(new wp).b());return Ap}function Bp(){}Bp.prototype=new l;Bp.prototype.constructor=Bp;Bp.prototype.b=function(){return this};
+function Hea(a,b,d,e,f){var h=m(new p,function(a,b){return function(a){return Iea(b,a)}}(a,e)),k=t();b=b.ya(h,k.s);a=m(new p,function(a,b){return function(a){return Jea(b,a)}}(a,e));e=t();d=d.ya(a,e.s);return Cp(new Dp,f.$f,f.je,f.nf,f.Kc,b,d)}
+function Kea(a,b){b=Ep(a,b,Fp());if(P(b)){b=b.ga;b=Gp().iz().y(b);if(!P(b)){if(!Hp(b))throw(new q).i(b);b=(new Ip).i(Jp(b.fc))}if(P(b)){b=b.ga;var d=(new Kp).i(yca(Hj(),b.Oz()))}else{if(!Hp(b))throw(new q).i(b);d=b}}else{if(!Hp(b))throw(new q).i(b);d=b}b=ud();if(P(d))a=d;else{if(!Hp(d))throw(new q).i(d);var e=d.fc;a=function(){return function(a){return a}}(a);Lp();var d=a(e.Ic),f=Mp(e.Sc),e=Np().Wd;a:for(;;){if(Op(f)){var h=f,f=h.ld,e=(new Pp).Vb(a(h.gd),e);continue a}if(!Qp(f))throw(new q).i(f);
+break}a=(new Ip).i((new Rp).Vb(d,e))}d=Sp();return vd(b,Tp(d,a).rf())}
+function Lea(a,b){b=Ep(a,b,Fp());if(P(b)){b=b.ga;b=Up().iz().y(b);if(!P(b)){if(!Hp(b))throw(new q).i(b);b=(new Ip).i(Jp(b.fc))}if(P(b)){b=b.ga;Vp();(new Wp).b();try{var d=Mea(Xp(),b.Oz(),Yp(),Zp());if(P(d))var e=d;else{if(!Hp(d))throw(new q).i(d);var f=d.fc,h=function(){return function(a){return a}}(a);Lp();var k=h(f.Ic),n=Mp(f.Sc),r=Np().Wd,y;a:for(;;){d=n;if(Op(d)){var E=d.ld,Q=(new Pp).Vb(h(d.gd),r),n=E,r=Q;continue a}if(!Qp(d))throw(new q).i(d);y=r;break}e=(new Ip).i((new Rp).Vb(k,y))}if(P(e))var R=
+e;else{if(!Hp(e))throw(new q).i(e);var da=e.fc,ma=function(){return function(a){if($p(a))return aq(a);if(null!==a)return(new bq).Dd(a);throw(new q).i(a);}}(a);Lp();var ra=ma(da.Ic),Ca=Mp(da.Sc),ab=Np().Wd,hb;a:for(;;){e=Ca;if(Op(e)){var mb=e.ld,Wb=(new Pp).Vb(ma(e.gd),ab),Ca=mb,ab=Wb;continue a}if(!Qp(e))throw(new q).i(e);hb=ab;break}R=(new Ip).i((new Rp).Vb(ra,hb))}if(P(R))var zc=R.ga,xb=cq(dq(),zc),Wc=(new Kp).i(Hea(a,Nea(b),Oea(b),zc,xb));else if(Hp(R))Wc=R;else throw(new q).i(R);var dc=(new Kp).i(Wc)}catch(le){if(R=
+qn(qg(),le),null!==R)if(Pk(pa(eq),R))dc=(new Ip).i(R);else throw pg(qg(),R);else throw le;}if(P(dc))R=dc.ga;else{if(!Hp(dc))throw(new q).i(dc);R=dc.fc;fq();R=(new bq).Dd(R);R=gq(Vp(),R)}if(P(R))R=(new Kp).i(R.ga);else if(!Hp(R))throw(new q).i(R);}else{if(!Hp(b))throw(new q).i(b);R=b}}else{if(!Hp(b))throw(new q).i(b);R=b}if(P(R))return R;if(Hp(R)){ma=R.fc;a=function(){return function(a){return a}}(a);Lp();R=a(ma.Ic);ra=Mp(ma.Sc);ma=Np().Wd;a:for(;;){if(Op(ra)){Ca=ra;ra=Ca.ld;ma=(new Pp).Vb(a(Ca.gd),
+ma);continue a}if(!Qp(ra))throw(new q).i(ra);break}return(new Ip).i((new Rp).Vb(R,ma))}throw(new q).i(R);}function Ep(a,b,d){b=hq(ud(),b);d=d.Ta(b);if(P(d))return d;if(Hp(d)){b=d.fc;a=function(){return function(a){return(new iq).c(a)}}(a);Lp();d=a(b.Ic);var e=Mp(b.Sc);b=Np().Wd;a:for(;;){if(Op(e)){var f=e,e=f.ld;b=(new Pp).Vb(a(f.gd),b);continue a}if(!Qp(e))throw(new q).i(e);break}return(new Ip).i((new Rp).Vb(d,b))}throw(new q).i(d);}
+function Pea(a,b){var d=ud();jq();var e=Qea(a);Vp();(new Wp).b();try{var f=Rea(Xp(),b);if(P(f))var h=f;else{if(!Hp(f))throw(new q).i(f);var k=f.fc,n=function(){return function(a){if($p(a))return aq(a);if(null!==a)return(new bq).Dd(a);throw(new q).i(a);}}(a);Lp();var r=n(k.Ic),y=Mp(k.Sc),E=Np().Wd,Q;a:for(;;){a=y;if(Op(a)){var R=a.ld,da=(new Pp).Vb(n(a.gd),E),y=R,E=da;continue a}if(!Qp(a))throw(new q).i(a);Q=E;break}h=(new Ip).i((new Rp).Vb(r,Q))}if(P(h))var ma=h.ga,ra=(new Kp).i(sb(e,ma,cq(dq(),ma)));
+else if(Hp(h))ra=h;else throw(new q).i(h);var Ca=(new Kp).i(ra)}catch(ab){if(e=qn(qg(),ab),null!==e)if(Pk(pa(eq),e))Ca=(new Ip).i(e);else throw pg(qg(),e);else throw ab;}if(P(Ca))e=Ca.ga;else{if(!Hp(Ca))throw(new q).i(Ca);e=Ca.fc;fq();e=(new bq).Dd(e);e=gq(Vp(),e)}return vd(d,kq(0,e).rf())}function Qea(a){return ub(new vb,function(){return function(a,d){return d}}(a))}
+function Sea(a,b,d){var e=lq(mq());d=Ep(a,d,Tea());if(Hp(d))fq(),d=(new iq).c("commands must be an Array of "+nq(pa(qa))),d=gq(Vp(),d);else if(!P(d))throw(new q).i(d);if(P(d)){d=d.ga.Va;var e=m(new p,function(a,b){return function(a){a=b.Ta(a);if(Hp(a))return(new Ip).i(Jp(a.fc));if(P(a)){a=a.ga;x();a=(new J).j([a]);var d=x().s;return(new Kp).i(K(a,d))}throw(new q).i(a);}}(a,e)),f=t(),e=d.ya(e,f.s);fq();x();d=u();e=e.Ib(oq().y(d),ub(new vb,function(a){return function(b,d){d=function(a,b){return function(){return b}}(a,
+d);var e=pq();(new qq).nv(e);e=Lp();(new rq).Zq(e);if(Hp(b)){e=b.fc;d=d();if(Hp(d))return(new Ip).i(sq(e,d.fc));if(P(d))return b;throw(new q).i(d);}if(P(b)){b=b.ga;d=d();if(Hp(d))return d;if(P(d))return(new Kp).i(tq(d.ga,b));throw(new q).i(d);}throw(new q).i(b);}}(a)));if(!P(e)){if(!Hp(e))throw(new q).i(e);f=e.fc;e=function(){return function(a){return a}}(a);Lp();d=e(f.Ic);var h=Mp(f.Sc),f=Np().Wd;a:for(;;){if(Op(h)){var k=h,h=k.ld,f=(new Pp).Vb(e(k.gd),f);continue a}if(!Qp(h))throw(new q).i(h);break}e=
+(new Ip).i((new Rp).Vb(d,f))}}else{if(!Hp(d))throw(new q).i(d);e=d}if(!P(e)){if(!Hp(e))throw(new q).i(e);f=e.fc;e=function(){return function(a){return a}}(a);Lp();d=e(f.Ic);h=Mp(f.Sc);f=Np().Wd;a:for(;;){if(Op(h)){k=h;h=k.ld;f=(new Pp).Vb(e(k.gd),f);continue a}if(!Qp(h))throw(new q).i(h);break}e=(new Ip).i((new Rp).Vb(d,f))}if(P(e)){e=e.ga;d=G(t(),u());Vp();(new Wp).b();try{var n=Rea(Xp(),b);if(P(n))var r=n;else{if(!Hp(n))throw(new q).i(n);var y=n.fc,E=function(){return function(a){if($p(a))return aq(a);
+if(null!==a)return(new bq).Dd(a);throw(new q).i(a);}}(a);Lp();var Q=E(y.Ic),R=Mp(y.Sc),da=Np().Wd,ma;a:for(;;){b=R;if(Op(b)){var ra=b.ld,Ca=(new Pp).Vb(E(b.gd),da),R=ra,da=Ca;continue a}if(!Qp(b))throw(new q).i(b);ma=da;break}r=(new Ip).i((new Rp).Vb(Q,ma))}if(P(r))var ab=r.ga,hb=cq(dq(),ab),mb=(new Kp).i(Hea(a,e,d,ab,hb));else if(Hp(r))mb=r;else throw(new q).i(r);var Wb=(new Kp).i(mb)}catch(zc){if(a=qn(qg(),zc),null!==a)if(Pk(pa(eq),a))Wb=(new Ip).i(a);else throw pg(qg(),a);else throw zc;}if(P(Wb))a=
+Wb.ga;else{if(!Hp(Wb))throw(new q).i(Wb);a=Wb.fc;fq();a=(new bq).Dd(a);a=gq(Vp(),a)}if(P(a))a=(new Kp).i(a.ga);else if(!Hp(a))throw(new q).i(a);}else{if(!Hp(e))throw(new q).i(e);a=e}return vd(ud(),kq(jq(),a).rf())}Bp.prototype.isReporter=function(a,b){b=Lea(this,b).Ow();b=b.z()?C():b.R().$f.Ow();b.z()?b=C():(b=b.R(),b=(new H).i(b.Cu));b.z()?a=C():(b=b.R(),a=(new H).i(Uea(Ij(),a,b.dc,b.he)));return!(a.z()||!a.R())};Bp.prototype.exportNlogo=function(a){return Kea(this,a)};
+Bp.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 Pea(this,a);case 1:return Sea(this,a,e[0]);default:throw"No matching overload";}};Bp.prototype.fromModel=function(a){a=Lea(this,a);return vd(ud(),kq(jq(),a).rf())};Bp.prototype.$classData=g({U3:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler",{U3:1,d:1});function uq(){this.a=0}uq.prototype=new l;uq.prototype.constructor=uq;uq.prototype.b=function(){return this};
+function kq(a,b){if(P(b))a=b.ga;else{if(!Hp(b))throw(new q).i(b);a=b.fc;a=Cp(new Dp,(fq(),Vea().y(a)),"","",G(t(),u()),G(t(),u()),G(t(),u()))}vq||(vq=(new wq).b());return Tp(vq,a)}uq.prototype.$classData=g({V3:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$",{V3:1,d:1});var xq=void 0;function jq(){xq||(xq=(new uq).b());return xq}function yq(a,b,d,e,f){a=ed(a);b=b.wa.X(1);return zq(a,b,d,e,f)}
+function Aq(a,b,d,e,f){b=b.wa;var h=new Bq;if(null===a)throw pg(qg(),null);h.Qa=a;h.BU=d;h.yU=e;h.LX=f;a=t();return b.lc(h,a.s)}
+function Wea(a,b,d,e,f){var h=b.Gd;od();var k=(new Cq).b(),n=pd(new rd,k).Uc(h);if(!n.z()){var r=n.R();if(null===r)throw(new Ce).b();return""===r?"":r+";"}od();var y=(new Dq).b(),E=pd(new rd,y).Uc(h);if(!E.z())return E.R()+"("+Aq(a,b,d,e,f).Ab(", ")+");";if(h&&h.$classData&&h.$classData.m.UA){var Q;var R=b.wa.X(0).ye;if(Eq(R)){ed(a);var da=R.ed.va,ma=Fq(Gq(),da);Q=ma+" \x3d "+yq(a,b,d,e,f)+"; letVars['"+ma+"'] \x3d "+ma+";"}else if(Hq(R)){ed(a);var ra=R.va;Q=Fq(Gq(),ra)+" \x3d "+yq(a,b,d,e,f)+";"}else if(Pn(R)){ed(a);
+var Ca=R.va;Q=Fq(Gq(),Ca)+" \x3d "+yq(a,b,d,e,f)+";"}else{null===a.Tx&&null===a.Tx&&(a.Tx=(new Iq).JE(a));var ab=a.Tx.dH(R);if(ab.z()){var hb=b.Gd.H();jd('This isn\'t something you can use "set" on.',hb.ma.Ua,hb.ma.Ya,hb.ma.bb);Q=void 0}else Q=ab.R().y(yq(a,b,d,e,f))}return Q}if(h&&h.$classData&&h.$classData.m.IB){var mb=ed(a),Wb=b.wa.X(0),zc=Jq(mb,Wb,!0,!1,d,e,f),xb="|while (true) {\n        |"+Kq(id(),zc)+"\n        |};",Wc=(new Tb).c(xb);return gd(Wc)}if(h&&h.$classData&&h.$classData.m.TA){var dc=
+ed(a),le=b.wa.X(0),qd=zq(dc,le,d,e,f),bj=ed(a),Cg=b.wa.X(1),jh=Jq(bj,Cg,!0,!1,d,e,f);ed(a);var ti=b.Gd.H(),Dg=fd(ti,"index");ed(a);var cj=b.Gd.H(),Eg=fd(cj,"repeatcount"),Kh="|for (let "+Dg+" \x3d 0, "+Eg+" \x3d StrictMath.floor("+qd+"); "+Dg+" \x3c "+Eg+"; "+Dg+"++){\n        |"+Kq(id(),jh)+"\n        |}",Xd=(new Tb).c(Kh);return gd(Xd)}if(h&&h.$classData&&h.$classData.m.bC){var hk=ed(a),dj=b.wa.X(0),ik=zq(hk,dj,d,e,f),fg=ed(a),ej=b.wa.X(1),ui=Jq(fg,ej,!0,!1,d,e,f),oc="|while ("+ik+") {\n        |"+
+Kq(id(),ui)+"\n        |}",Fb=(new Tb).c(oc);return gd(Fb)}if(h&&h.$classData&&h.$classData.m.vB){var Yc=ed(a),Ma=b.wa.X(0),jc=zq(Yc,Ma,d,e,f),kc=ed(a),Hl=b.wa.X(1),Fg=Jq(kc,Hl,!0,!1,d,e,f),Il="|if ("+jc+") {\n        |"+Kq(id(),Fg)+"\n        |}",jk=(new Tb).c(Il);return gd(jk)}if(h&&h.$classData&&h.$classData.m.wB)return Xea(a,b,d,e,f);if(h&&h.$classData&&h.$classData.m.PA){var Jl=ed(a),Kl=b.wa.X(0),kk=zq(Jl,Kl,d,e,f),Ll=ed(a),lk=b.wa.X(1),mk=Lq(Ll,lk,!1,d,e,f);return Mq(kk,!0,mk)}if(Nq(h)){ed(a);
+var nk=b.Gd.H(),ok=fd(nk,"error"),Ml=ed(a),Nl=b.wa.X(0),fj=Jq(Ml,Nl,!0,!1,d,e,f);Ia();var vi=ed(a),Lh=b.wa.X(1),gj=Jq(vi,Lh,!0,!1,d,e,f),wi=Yea(h),Ol=S(),xi=Rb(0,gj,"_error_"+T(Ol,wi),ok),Pl="\n       |try {\n       |"+Kq(id(),fj)+"\n       |} catch ("+ok+") {\n       |"+Kq(id(),xi)+"\n       |}\n     ",yi=(new Tb).c(Pl);return gd(yi)}if(Oq(h))return Zea(a,b,!1,d,e,f);if(Pq(h))return Zea(a,b,!0,d,e,f);if(h&&h.$classData&&h.$classData.m.uC)return $ea(a,b,!1,d,e,f);if(h&&h.$classData&&h.$classData.m.tC)return $ea(a,
+b,!0,d,e,f);if(Qq(h)){var Ql=ed(a),zi=b.wa.X(0),pk=zq(Ql,zi,d,e,f),hj=ed(a),qk=b.wa.X(1),Rl=Lq(hj,qk,!1,d,e,f),ij=b.Gd.la,Sl=(new Tb).c(ij),Tl=nd(Sl)?ij:"TURTLES",Ul="SelfManager.self().sprout("+pk+", "+hd(id(),Tl)+")";return Mq(Ul,!0,Rl)}if(h&&h.$classData&&h.$classData.m.zC){var Vl=ed(a),Wl=b.wa.X(0),jj=zq(Vl,Wl,d,e,f),kh=b.Gd;if(!(kh&&kh.$classData&&kh.$classData.m.zC))throw(new Re).c("How did you get here with class of type "+oa(kh).tg());var rk=kh.la,sk=(new Tb).c(rk),lh=nd(sk)?rk:"TURTLES";
+return"SelfManager.self().sprout("+jj+", "+hd(id(),lh)+");"}if(h&&h.$classData&&h.$classData.m.gB)return Rq(a,b,"createLinkFrom",h.la,d,e,f);if(h&&h.$classData&&h.$classData.m.hB)return Rq(a,b,"createLinksFrom",h.la,d,e,f);if(h&&h.$classData&&h.$classData.m.kB)return Rq(a,b,"createLinkTo",h.la,d,e,f);if(h&&h.$classData&&h.$classData.m.iB)return Rq(a,b,"createLinksTo",h.la,d,e,f);if(h&&h.$classData&&h.$classData.m.lB)return Rq(a,b,"createLinkWith",h.la,d,e,f);if(h&&h.$classData&&h.$classData.m.jB)return Rq(a,
+b,"createLinksWith",h.la,d,e,f);if(h&&h.$classData&&h.$classData.m.rB){var mh=ed(a),tk=b.wa.X(0),uk=zq(mh,tk,d,e,f),vk=ed(a),Gg=b.wa.X(1),Mh=Jq(vk,Gg,!0,!1,d,e,f),nh,oh=ed(a),Ff;if(!oh.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Compiler.scala: 47");Ff=oh.sX;if(null===Ff)throw(new q).i(Ff);var ph=Ff.ni(),wk=Ff.na();Sq(oh,(new w).e(1+ph|0,wk));nh=wk+"_"+ph;var kj='|if (Prims.isThrottleTimeElapsed("'+nh+'", workspace.selfManager.self(), '+uk+
+')) {\n        |  Prims.resetThrottleTimerFor("'+nh+'", workspace.selfManager.self());\n        |'+Kq(id(),Mh)+"\n        |}",xk=(new Tb).c(kj);return gd(xk)}if(h&&h.$classData&&h.$classData.m.qB)return"throw new Error("+Tq(a,0,b,d,e,f)+");";if(Uq(h)){var Hg=h.la,qh=ed(a),Nh=b.wa.X(0),lj=zq(qh,Nh,d,e,f),mj=ed(a),Zw=b.wa.X(1),$w=Lq(mj,Zw,!1,d,e,f),ax="SelfManager.self().hatch("+lj+", "+hd(id(),Hg)+")";return Mq(ax,!0,$w)}if(h&&h.$classData&&h.$classData.m.BR){var OG=h.la,bx=ed(a),PG=b.wa.X(0);return"SelfManager.self().hatch("+
+zq(bx,PG,d,e,f)+", "+hd(id(),OG)+");"}if(h&&h.$classData&&h.$classData.m.QA)return"SelfManager.self().fd(-("+Tq(a,0,b,d,e,f)+"));";if(h&&h.$classData&&h.$classData.m.CB)return"SelfManager.self().right(-("+Tq(a,0,b,d,e,f)+"));";if(h&&h.$classData&&h.$classData.m.mB)return"world.topology.diffuse("+hd(id(),Vq(b))+", "+Tq(a,1,b,d,e,f)+", false)";if(h&&h.$classData&&h.$classData.m.nB)return"world.topology.diffuse("+hd(id(),Vq(b))+", "+Tq(a,1,b,d,e,f)+", true)";if(h&&h.$classData&&h.$classData.m.$B)return"Prims.uphill("+
+hd(id(),Vq(b))+")";if(h&&h.$classData&&h.$classData.m.aC)return"Prims.uphill4("+hd(id(),Vq(b))+")";if(h&&h.$classData&&h.$classData.m.oB)return"Prims.downhill("+hd(id(),Vq(b))+")";if(h&&h.$classData&&h.$classData.m.pB)return"Prims.downhill4("+hd(id(),Vq(b))+")";if(h&&h.$classData&&h.$classData.m.XB)return"BreedManager.setDefaultShape("+Tq(a,0,b,d,e,f)+".getSpecialName(), "+Tq(a,1,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.uB)return"SelfManager.self().setVariable('hidden?', true)";if(h&&h.$classData&&
+h.$classData.m.YB)return"SelfManager.self().setVariable('hidden?', false)";if(Wq(h)){var ur;var QG=Aq(a,b,d,e,f),xn='procedures["'+h.fi.we()+'"]('+QG.Ab(",")+");",cx=d.yt,RG=afa();if(null!==cx&&cx===RG&&1===e.Wo){ed(a);var SG=h.H(),vr=fd(SG,"maybestop"),TG=(new Tb).c("|let "+vr+" \x3d "+xn+"\n          |if ("+vr+" instanceof Exception.StopInterrupt) { return "+vr+"; }");ur=gd(TG)}else ur=xn;return ur}if(Xq(h)){var UG='|if(!reporterContext) { throw new Error("REPORT can only be used inside TO-REPORT.") } else {\n            |  return '+
+Tq(a,0,b,d,e,f)+"\n            |}",VG=(new Tb).c(UG);return gd(VG)}if(h&&h.$classData&&h.$classData.m.yB)return Tq(a,0,b,d,e,f)+";";if(Zn(h)){var dx=h.ed;if(dx.z())var wr=C();else{var wn=dx.R();ed(a);var Z7=wn.va,NG=Fq(Gq(),Z7),wr=(new H).i("let "+NG+" \x3d "+Tq(a,0,b,d,e,f)+"; letVars['"+NG+"'] \x3d "+NG+";")}return wr.z()?"":wr.R()}if(h&&h.$classData&&h.$classData.m.cC){var E9=ed(a),F9=b.wa.X(0);return"workspace.rng.withClone(function() { "+Jq(E9,F9,!0,!1,d,e,f)+" })"}if(Yq(h)){var H9=h.H(),I9=
+Aq(a,b,d,e,f);return Laa(a,!1,H9,I9,f)}if(h&&h.$classData&&h.$classData.m.tB){var J9=Aq(a,b,d,e,f).Xe().Ab(", ");ed(a);var K9=h.H(),hI=fd(K9,"foreach"),L9=-1+b.wa.Da()|0;return"var "+hI+" \x3d Tasks.forEach("+Tq(a,L9,b,d,e,f)+", "+J9+"); if(reporterContext \x26\x26 "+hI+" !\x3d\x3d undefined) { return "+hI+"; }"}if(Zq(h)){var N9=(new Tb).c("_extern\\(([^:]+):([^)]+)\\)"),O9=u(),P9=(new Ub).Ap(N9.U,O9),b1=h.l();var Wr=mg(P9,b1);if(Wr.z())iI=!1;else if(null!==Wr.R())var Q9=Wr.R(),iI=0===ng(Q9,2);else iI=
+!1;if(iI)var R9=Wr.R().X(0),S9=Wr.R().X(1);else throw(new q).i(b1);var T9=R9,U9=S9;return"Extensions["+hd(id(),T9)+"].prims["+hd(id(),U9)+"]("+Aq(a,b,d,e,f).Ab(", ")+");"}if(d.up){var V9=oa(b.Gd).tg(),c1=(new Tb).c(V9),W9=c1.U.length|0,X9=Le(Me(),c1.U,1,W9);return Maa(X9)+";"}var Y9="unimplemented primitive: "+b.Gd.H().Zb,jI=b.Gd.H();jd(Y9,jI.ma.Ua,jI.ma.Ya,jI.ma.bb)}
+function Vq(a){var b=a.wa.X(0).ye;if($q(b))return ch(b).toLowerCase();b="unknown reference: "+oa(b).tg();a=a.Gd.H();jd(b,a.ma.Ua,a.ma.Ya,a.ma.bb)}
+function Xea(a,b,d,e,f){var h=bfa(x(),-1+b.wa.sa()|0),k=function(a,b,d,e,f){return function(h){var k=h|0;h=b.wa.X(k);if(!yb(h)&&!Ab(h)){var n=h.wc().Ua,r=h.wc().Ya,y=h.wc().bb;jd("IFELSE expected a reporter here but got a block.",n,r,y)}k=b.wa.X(1+k|0);zb(k)||(n=k.wc().Ua,r=k.wc().Ya,y=k.wc().bb,jd("IFELSE expected a command block here but got a TRUE/FALSE.",n,r,y));n=ed(a);h=zq(n,h,d,e,f);n=ed(a);k=Jq(n,k,!0,!1,d,e,f);h="|if ("+h+") {\n            |"+Kq(id(),k)+"\n            |}";h=(new Tb).c(h);
+return gd(h)}}(a,b,d,e,f),n=x().s;if(n===x().s)if(h===u())k=u();else{for(var n=h.Y(),r=n=Og(new Pg,k(n),u()),h=h.$();h!==u();)var y=h.Y(),y=Og(new Pg,k(y),u()),r=r.Ka=y,h=h.$();k=n}else{for(n=Nc(h,n);!h.z();)r=h.Y(),n.Ma(k(r)),h=h.$();k=n.Ba()}0===(b.wa.sa()%2|0)?d="":(a=ed(a),b=b.wa.X(-1+b.wa.sa()|0),d=Jq(a,b,!0,!1,d,e,f),d="|else {\n            |"+Kq(id(),d)+"\n            |}",d=(new Tb).c(d),d=gd(d));d="|"+ec(k,""," else ","")+"\n          |"+d;d=(new Tb).c(d);return gd(d)}
+function Tq(a,b,d,e,f,h){a=ed(a);b=d.wa.X(b);return zq(a,b,e,f,h)}function $ea(a,b,d,e,f,h){a=ed(a);var k=b.wa.X(0);e=zq(a,k,e,f,h);d=d?"createOrderedTurtles":"createTurtles";b=b.Gd;if(!(b&&b.$classData&&b.$classData.m.uC||b&&b.$classData&&b.$classData.m.tC))throw(new Re).c("How did you get here with class of type "+oa(b).tg());b=b.la;return"world.turtleManager."+d+"("+e+", "+hd(id(),b)+");"}
+function Rq(a,b,d,e,f,h,k){var n=ed(a),r=b.wa.X(0),r=zq(n,r,f,h,k),n=b.wa.X(1).pe.ng.Ye();a=ed(a);b=b.wa.X(1);f=Lq(a,b,!1,f,h,k);d="LinkPrims."+d+"("+r+", "+hd(id(),ld(e))+")";return Mq(d,n,f)}
+function Zea(a,b,d,e,f,h){var k=ed(a),n=b.wa.X(0),k=zq(k,n,e,f,h);d=d?"createOrderedTurtles":"createTurtles";n=b.Gd;if(!Oq(n)&&!Pq(n))throw(new Re).c("How did you get here with class of type "+oa(n).tg());n=n.la;a=ed(a);b=b.wa.X(1);e=Lq(a,b,!1,e,f,h);f="world.turtleManager."+d+"("+k+", "+hd(id(),n)+")";return Mq(f,!0,e)}function Mq(a,b,d){return a+".ask("+d+", "+b+");"}function ar(){}ar.prototype=new l;ar.prototype.constructor=ar;ar.prototype.b=function(){return this};
+function cfa(a,b){var d=br(cr(),(new dr).Bh(b),"returnType"),e=er(),d=d.Vj(e).xq(),d=d.z()?"unit":d.R(),e="unit"!==d,f=fr(cr(),(new dr).Bh(b),"argTypes"),h=dfa(),f=wd(f,h).W;a=m(new p,function(){return function(a){gr();var b=br(cr(),(new dr).Bh(a),"type"),d=er();if((b=hr(b,d))&&b.$classData&&b.$classData.m.EC)b=er(),a=ir(wd(a,b));else if(b&&b.$classData&&b.$classData.m.GC){var b=b.W,d=br(cr(),(new dr).Bh(a),"isRepeatable"),e=jr(),d=d.Vj(e).xq(),d=!(d.z()||!d.R());a=br(cr(),(new dr).Bh(a),"isOptional");
+e=jr();a=a.Vj(e).xq();a=!(a.z()||!a.R());b=ir(b);d=d?Si():0;a=a?Bj():0;a|=b|d}else throw(new q).i(b);return a}}(a));h=Nj().pc;f=kr(f,a,h);a=ir(d);d=br(cr(),(new dr).Bh(b),"defaultArgCount");h=efa();d=d.Vj(h).xq();if(e){e=br(cr(),(new dr).Bh(b),"isInfix");h=jr();e=e.Vj(h).xq();(e.z()?0:e.R())?(e=f.Y(),f=f.$()):e=B();var e=e|0,h=br(cr(),(new dr).Bh(b),"precedenceOffset"),k=efa(),h=h.Vj(k).xq(),h=(h.z()?0:h.R())|0,h=z()+h|0;a=ffa(e,f,a,h,d)}else a=gfa(f,d);d=fr(cr(),(new dr).Bh(b),"name");e=er();d=wd(d,
+e);b=fr(cr(),(new dr).Bh(b),"actionName");e=er();return hfa(new lr,a,d,wd(b,e))}
+function ir(a){if("agentset"===a)return $i(A());if("agent"===a)return Vi(A());if("booleanblock"===a)return xj(A());if("boolean"===a)return Xi(A());if("bracketed"===a)return Ui();if("codeblock"===a)return zj();if("commandblock"===a)return uj(A());if("command"===a)return tj(A());if("linkset"===a)return oj(A());if("link"===a)return rj(A());if("list"===a)return Zi(A());if("nobody"===a)return Wi(A());if("numberblock"===a)return yj(A());if("number"===a)return M(A());if("optional"===a)return Bj();if("otherblock"===
+a)return wj(A());if("patchset"===a)return nj(A());if("patch"===a)return qj(A());if("readable"===a)return mr();if("reference"===a)return Ti();if("repeatable"===a)return Si();if("reporterblock"===a)return vj(A());if("reporter"===a)return sj(A());if("string"===a)return Yi(A());if("symbol"===a)return Aj();if("turtleset"===a)return aj(A());if("turtle"===a)return pj(A());if("wildcard"===a)return nc();if("unit"===a)return B();throw pg(qg(),(new nr).c("Unknown type given in extension: "+a));}
+ar.prototype.$classData=g({w4:0},!1,"org.nlogo.tortoise.compiler.CreateExtension$",{w4:1,d:1});var or=void 0;function gr(){or||(or=(new ar).b());return or}
+function ifa(a){a="|try {\n        |  var reporterContext \x3d true;\n        |  var letVars \x3d { };\n        |"+Kq(id(),a)+'\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        |}';a=(new Tb).c(a);return gd(a)}
+function jfa(a){a="|try {\n        |  var reporterContext \x3d false;\n        |  var letVars \x3d { };\n        |"+Kq(id(),a)+"\n        |} catch (e) {\n        |  if (e instanceof Exception.StopInterrupt) {\n        |    return e;\n        |  } else {\n        |    throw e;\n        |  }\n        |}";a=(new Tb).c(a);return gd(a)}
+var Jq=function kfa(b,d,e,f,h,k,n){var r=(new pr).yp(1+k.Wo|0,k.Bc);if(zb(d))return kfa(b,d.pe,!0,!1,h,r,n);if(!(d&&d.$classData&&d.$classData.m.MA))throw(new q).i(d);k=d.ng;h=m(new p,function(b,d,e,f){return function(h){var k=b.xa?b.gz:lfa(b);return Wea(k,h,d,e,f)}}(b,h,r,n));n=t();b=k.ya(h,n.s).hg(m(new p,function(){return function(b){b=(new Tb).c(b);return nd(b)}}(b))).Ab("\n");return f||e&&d.xe?jfa(b):b};
+function Lq(a,b,d,e,f,h){a=d?"return "+zq(a,b,e,f,h)+";":Jq(a,b,!0,!1,e,f,h);b=G(t(),u());return qr(id(),b,a)}var nfa=function mfa(b,d){if(zg(d)){id();var e=Nj().pc,e=Nc(d,e);for(d=Qj(d.xc);d.oi;){var f=d.ka();e.Ma(mfa(b,f))}return rr(0,e.Ba()," ")}if(vh()===d)return"Nobody";b=Nn();return ac(b,d,!0,!1)};function fd(a,b){return"_"+b+"_"+a.ma.Ua+"_"+a.ma.Ya}
+var zq=function ofa(b,d,e,f,h){f=(new pr).yp(1+f.Wo|0,f.Bc);if(Ab(d))return ofa(b,d.Al,e,f,h);if(!yb(d))throw(new q).i(d);b=b.xa?b.gz:lfa(b);return pfa(b,d,e,f,h)};function sr(){this.gI=this.BT=this.cI=null;this.a=0}sr.prototype=new l;sr.prototype.constructor=sr;
+sr.prototype.b=function(){tr=this;for(var a=[(new w).e("!","_exclamation_"),(new w).e("#","_pound_"),(new w).e("\\$","_dollar_"),(new w).e("%","_percent_"),(new w).e("\\^","_caret_"),(new w).e("\\\x26","_ampersand_"),(new w).e("\\*","_asterisk_"),(new w).e("\x3c","_lessthan_"),(new w).e("\x3e","_greaterthan_"),(new w).e("/","_slash_"),(new w).e("\\.","_dot_"),(new w).e("\\?","_p"),(new w).e("\x3d","_eq"),(new w).e("\\+","_plus_"),(new w).e(":","_colon_"),(new w).e("'","_prime_")],b=fc(new gc,hc()),
+d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.cI=b.Va;this.a=(1|this.a)<<24>>24;this.BT=G(t(),(new J).j("^(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.gI=G(t(),(new J).j("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 qfa(a){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/JSIdentProvider.scala: 55");return a.gI}
+function rfa(a,b){return sfa(a).Ib(b,ub(new vb,function(){return function(a,b){b=(new Tb).c(b);var f=u(),f=(new Ub).Ap(b.U,f),h=f.IY;b=new xr;b.JG=a;b.mda=h;b.Km=kg(new lg,f.aw,a,La(a));b.bo=0;a=new yr;if(null===b)throw pg(qg(),null);a.Qa=b;for(a.dG=(new un).b();a.ra();)b=tfa(a),b=eba(b,1)+"_"+eba(b,2),vn(a.Qa.Km,a.dG,b);b=(new un).YE(a.dG);yn(a.Qa.Km,b);return b.l()}}(a)))}
+function ufa(a,b){var d=vfa(a);return Xk(d,b,ub(new vb,function(){return function(a,b){var d=(new w).e(a,b);a=d.ub;b=d.Fb;if(null!==b)return d=b.ja(),b=b.na(),Rb(Ia(),a,d,b);throw(new q).i(d);}}(a)))}function vfa(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/JSIdentProvider.scala: 26");return a.cI}function wfa(a,b){return qfa(a).Ib(b,ub(new vb,function(){return function(a,b){return a!==b?a:"_"+a+"_"}}(a)))}
+function Fq(a,b){return rb(m(new p,function(){return function(a){Gq();a=a.toLowerCase();a=(new Tb).c(a);a=bi(a,45);var b;b=[];for(var f=0,h=a.n.length;f<h;){var k=(new Tb).c(a.n[f]),k=xfa(k);b.push(null===k?null:k);f=1+f|0}a=ka(Xa(qa),b);b=(new Bl).b();f=!0;zr(b,"");h=0;for(k=a.n.length;h<k;){var n=a.n[h];f?(Ar(b,n),f=!1):(zr(b,""),Ar(b,n));h=1+h|0}zr(b,"");a=b.Bb.Yb;b=(new Tb).c(a);b=Dj(b);b=null===b?0:b.W;b=yfa(Ah(),b);b=Oe(b);a=(new Tb).c(a);return""+b+Uj(a)}}(a)),m(new p,function(){return function(a){return ufa(Gq(),
+a)}}(a))).za(m(new p,function(){return function(a){return wfa(Gq(),a)}}(a))).za(m(new p,function(){return function(a){return rfa(Gq(),a)}}(a))).y(b)}function sfa(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/JSIdentProvider.scala: 45");return a.BT}sr.prototype.$classData=g({D4:0},!1,"org.nlogo.tortoise.compiler.JSIdentProvider$",{D4:1,d:1});var tr=void 0;function Gq(){tr||(tr=(new sr).b());return tr}
+function Br(){this.Ah=null;this.xa=0}Br.prototype=new l;Br.prototype.constructor=Br;function zfa(a,b){b=Cr(b.eh);var d=m(new p,function(){return function(a){return(new w).e(a.ja(),Afa(a.na()))}}(a)),e=t();b=b.ya(d,e.s);a=a.Ah;d=t();return(new Br).Ea(b.$c(a,d.s))}Br.prototype.Ea=function(a){this.Ah=a;return this};Br.prototype.XG=function(){var a=this.Ah,b=m(new p,function(){return function(a){return a.na().WX(a.ja())}}(this)),d=t();return a.ya(b,d.s).Qc("{",",","}")};
+Br.prototype.$classData=g({E4:0},!1,"org.nlogo.tortoise.compiler.JavascriptObject",{E4:1,d:1});function Dr(){}Dr.prototype=new l;Dr.prototype.constructor=Dr;Dr.prototype.b=function(){return this};function rr(a,b,d){return b.Ye()?b.Qc("[",","+d,"]"):"[]"}function Bfa(a,b){a=(new Tb).c(b).U.split("\\").join("\\\\");a=(new Tb).c(a).U.split("\n").join("\\n");a=(new Tb).c(a).U.split('"').join('\\"');return(new Tb).c(a).U.split("'").join("\\'")}
+function Er(a,b){var d=(new Tb).c(b);return nd(d)?(b="return "+b+";",d=G(t(),u()),qr(a,d,b)):qr(a,G(t(),u()),"")}function qr(a,b,d){b=b.Qc("(",", ",")");if(0===(d.length|0))return"function"+b+" {}";var e=(new Tb).c(d),e=Cfa(e);if(2>Fr(e)&&100>(d.length|0))return"function"+b+" { "+d+" }";a="|function"+b+" {\n          |"+Kq(a,d)+"\n          |}";a=(new Tb).c(a);return gd(a)}function hd(a,b){return""+Oe(34)+b+Oe(34)}
+function Kq(a,b){b=(new Tb).c(b);b=Cfa(b);a=(new cc).Nf(b,m(new p,function(){return function(a){return"  "+a}}(a)));return ec(a,"","\n","")}function Gr(a,b){var d=(new Tb).c(b);return nd(d)?(b+=";",d=G(t(),u()),qr(a,d,b)):qr(a,G(t(),u()),"")}function Hr(a){return"NIL"!==a?(new Tb).c(a).U.split("'").join("\\'"):""}Dr.prototype.$classData=g({G4:0},!1,"org.nlogo.tortoise.compiler.JsOps$",{G4:1,d:1});var Ir=void 0;function id(){Ir||(Ir=(new Dr).b());return Ir}function Jr(){}Jr.prototype=new l;
+Jr.prototype.constructor=Jr;Jr.prototype.b=function(){return this};
+function Dfa(a,b,d,e,f){b=hq(ud(),b);b=Fp().Ta(b);if(!P(b)){if(!Hp(b))throw(new q).i(b);var h=b.fc;b=function(){return function(a){return(new iq).c(a)}}(a);Lp();var k=b(h.Ic),n=Mp(h.Sc),h=Np().Wd;a:for(;;){if(Op(n)){var r=n,n=r.ld,h=(new Pp).Vb(b(r.gd),h);continue a}if(!Qp(n))throw(new q).i(n);break}b=(new Ip).i((new Rp).Vb(k,h))}if(P(b)){b=b.ga;b=Up().iz().y(b);if(!P(b)){if(!Hp(b))throw(new q).i(b);b=(new Ip).i(Jp(b.fc))}if(P(b))b=(new Kp).i(b.ga);else if(!Hp(b))throw(new q).i(b);}else if(!Hp(b))throw(new q).i(b);
+if(!P(b)){if(Hp(b)){e=b.fc;Efa();a=function(){return function(a){return a}}(a);Lp();d=a(e.Ic);f=Mp(e.Sc);e=Np().Wd;a:for(;;){if(Op(f)){var y=f;f=y.ld;e=(new Pp).Vb(a(y.gd),e);continue a}if(!Qp(f))throw(new q).i(f);break}a=(new Rp).Vb(d,e);d=Lp().HF;a=Ffa(a,d);a=a.Yt.Hk(a.vc);throw(new Kr).c(ec(a,"","\n",""));}throw(new q).i(b);}b=b.ga;try{y=Gfa(Yp(),Hfa(Ifa(),b,e,f,d),Zp())}catch(E){a=qn(qg(),E);if(Lr(a))throw(new Kr).c(a.Vf());throw E;}a=y.Fs.Jl(m(new p,function(){return function(a){if(null!==a)return a.na().ab("__run");
+throw(new q).i(a);}}(a)),!1);switch(a.Da()){case 1:return a.Y().ja();case 0:throw(new Kr).c("The compiler did not return a procedure for the run primitive, but it also did not throw an error.");default:throw(new Kr).c("The compiler returned multiple procedures with the same name for the run primitive.");}}function Hfa(a,b,d,e,f){return Jfa(d?b.je+"\nto-report __run ["+e+"] report ("+f+"\n)end":b.je+"\nto __run ["+e+"] "+f+"\nend",b.nf,b.mi,b.Kc,b.vj,b.Kj,b.th,b.ah).Oz()}
+Jr.prototype.compileRunString=function(a,b,d,e){return Dfa(this,a,b,!!d,e)};Jr.prototype.stringToJSValue=function(a){var b;try{var d=(new Mr).b(),e=Kfa(Ij(),a);b=d.gb(e,od().ZD)}catch(f){a=qn(qg(),f);if(Lr(a))throw(new Kr).c(a.Vf());throw f;}return b};Jr.prototype.$classData=g({H4:0},!1,"org.nlogo.tortoise.compiler.LiteralConverter$",{H4:1,d:1});var Nr=void 0;function Ifa(){Nr||(Nr=(new Jr).b());return Nr}function Or(){}Or.prototype=new l;Or.prototype.constructor=Or;Or.prototype.b=function(){return this};
+Or.prototype.l=function(){return"nobody"};Or.prototype.toString=function(){return"nobody"};Or.prototype.getBreedName=function(){return"nobody"};Or.prototype.isDead=function(){return!0};Object.defineProperty(Or.prototype,"id",{get:function(){return-1},configurable:!0});Or.prototype.ask=function(){};Or.prototype.$classData=g({L4:0},!1,"org.nlogo.tortoise.compiler.Nobody$",{L4:1,d:1});var Pr=void 0;function Lfa(){Pr||(Pr=(new Or).b());return Pr}function Qr(){this.a=0}Qr.prototype=new l;
+Qr.prototype.constructor=Qr;Qr.prototype.b=function(){return this};
+function Mfa(a,b){return rb(m(new p,function(){return function(a){Rr||(Rr=(new Sr).b());return Mb(Rr,a)}}(a)),m(new p,function(){return function(a){Tr||(Tr=(new Ur).b());return Mb(Tr,a)}}(a))).za(m(new p,function(){return function(a){Vr||(Vr=(new Xr).b());return Mb(Vr,a)}}(a))).za(m(new p,function(){return function(a){Yr||(Yr=(new Zr).b());return Mb(Yr,a)}}(a))).za(m(new p,function(){return function(a){$r||($r=(new as).b());return Mb($r,a)}}(a))).za(m(new p,function(){return function(a){bs||(bs=(new cs).b());
+return Mb(bs,a)}}(a))).za(m(new p,function(){return function(a){ds||(ds=(new es).b());return Mb(ds,a)}}(a))).za(m(new p,function(){return function(a){fs||(fs=(new gs).b());return Mb(fs,a)}}(a))).za(m(new p,function(){return function(a){hs||(hs=(new is).b());return Mb(hs,a)}}(a))).za(m(new p,function(){return function(a){js||(js=(new ks).b());return Mb(js,a)}}(a))).za(m(new p,function(){return function(a){ls||(ls=(new ms).b());return Mb(ls,a)}}(a))).za(m(new p,function(){return function(a){ns||(ns=
+(new os).b());return Mb(ns,a)}}(a))).za(m(new p,function(){return function(a){ps||(ps=(new qs).b());return Mb(ps,a)}}(a))).za(m(new p,function(){return function(a){rs||(rs=(new ss).b());return Mb(rs,a)}}(a))).za(m(new p,function(){return function(a){ts||(ts=(new us).b());return Mb(ts,a)}}(a))).za(m(new p,function(){return function(a){vs||(vs=(new ws).b());return Mb(vs,a)}}(a))).za(m(new p,function(){return function(a){xs||(xs=(new ys).b());return Mb(xs,a)}}(a))).za(m(new p,function(){return function(a){zs||
+(zs=(new As).b());return Mb(zs,a)}}(a))).za(m(new p,function(){return function(a){Bs||(Bs=(new Cs).b());return Mb(Bs,a)}}(a))).za(m(new p,function(){return function(a){Ds||(Ds=(new Es).b());return Mb(Ds,a)}}(a))).za(m(new p,function(){return function(a){Fs||(Fs=(new Gs).b());return Mb(Fs,a)}}(a))).za(m(new p,function(){return function(a){Hs||(Hs=(new Is).b());return Mb(Hs,a)}}(a))).y(b)}Qr.prototype.$classData=g({M4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$",{M4:1,d:1});var Js=void 0;
+function Nfa(){Js||(Js=(new Qr).b());return Js}function Ks(){}Ks.prototype=new l;Ks.prototype.constructor=Ks;Ks.prototype.b=function(){return this};
+Ks.prototype.ac=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(Ls(d)&&(t(),d=(new H).i(b),null!==d.Q&&0===d.Q.vb(2)&&(b=d.Q.X(0),d=d.Q.X(1),yb(b)&&(b=Sh().ac(b),!b.z()&&(b=b.R().Oa,$q(b)&&yb(d))))))return(new H).i((new w).e(b,d))}d=Sh().ac(a);return!d.z()&&(a=d.R().Oa,d=d.R().fb,Ls(a)&&(t(),d=(new H).i(d),null!==d.Q&&0===d.Q.vb(2)&&(a=d.Q.X(0),d=d.Q.X(1),yb(a)&&yb(d)&&(d=Sh().ac(d),!d.z()&&(d=d.R().Oa,$q(d))))))?(new H).i((new w).e(d,a)):C()};
+Ks.prototype.$classData=g({j5:0},!1,"org.nlogo.tortoise.compiler.Optimizer$WithTransformer$PatchVarEqualExpression$",{j5:1,d:1});var Ms=void 0;function Ns(){this.a=0}Ns.prototype=new l;Ns.prototype.constructor=Ns;Ns.prototype.b=function(){return this};
+function Ofa(a,b){var d=(new Os).b(),e=t();b=b.lc(d,e.s);a=m(new p,function(){return function(a){var b=new Ps;b.Cl=a;a=b.Cl.gq;if(P(a))a=a.ga,b=Pfa(b,a.hk,a.ik,a.Es);else{if(!Hp(a))throw(new q).i(a);b=Qfa(b,a.fc)}return b}}(a));d=t();a=b.ya(a,d.s);b=(new Qs).b();d=t();b=a.lc(b,d.s);d=(new Rs).b();e=t();d=a.lc(d,e.s).Ys(Ne().ml);a=rr(id(),b," ");d=d.z()?"":Rfa(Ss(),d.Ab(", "));b=t();var e=(new Ts).Kd("PenBundle","engine/plot/pen"),f=(new Ts).Kd("Plot","engine/plot/plot"),h=(new Ts).Kd("PlotOps","engine/plot/plotops"),
+k=Sfa(0,"modelConfig.plotOps","{}"),n=t(),k=(new Us).$k("modelPlotOps",k,G(n,(new J).j(["modelConfig"]))),n=t();a=[e,f,h,k,(new Vs).$k("modelConfig.plots","modelConfig.plots \x3d "+a+";"+d,G(n,(new J).j(["PenBundle","Plot","PlotOps","modelConfig","modelPlotOps"])))];return G(b,(new J).j(a))}function Rfa(a,b){return'modelConfig.dialog.notify("Error: '+b+'");'}function Sfa(a,b,d){return"(typeof "+b+' !\x3d\x3d "undefined" \x26\x26 '+b+" !\x3d\x3d null) ? "+b+" : "+d}
+Ns.prototype.$classData=g({k5:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$",{k5:1,d:1});var Ws=void 0;function Ss(){Ws||(Ws=(new Ns).b());return Ws}function Ps(){this.Cl=null}Ps.prototype=new l;Ps.prototype.constructor=Ps;function Tfa(a,b){a=function(){return function(a){return a.Vf()}}(a);Lp();var d=a(b.Ic),e=Mp(b.Sc);b=Np().Wd;a:for(;;){if(Op(e)){var f=e,e=f.ld;b=(new Pp).Vb(a(f.gd),b);continue a}if(!Qp(e))throw(new q).i(e);break}return(new Xs).Ea(Ys((new Rp).Vb(d,b)).wb())}
+function Qfa(a,b){a=function(){return function(a){return a.Vf()}}(a);Lp();var d=a(b.Ic),e=Mp(b.Sc);b=Np().Wd;a:for(;;){if(Op(e)){var f=e,e=f.ld;b=(new Pp).Vb(a(f.gd),b);continue a}if(!Qp(e))throw(new q).i(e);break}return(new Xs).Ea(Ys((new Rp).Vb(d,b)).wb())}
+function Pfa(a,b,d,e){var f=Gr(id(),""),h=Er(id(),f),f="new PlotOps("+f+", "+f+", "+f+", "+h+", "+h+", "+h+", "+h+")",h=m(new p,function(a){return function(b){var d=b.St;if(P(d)){b=b.xt;d=d.ga;Zs||(Zs=(new $s).b());var e;e=Zs;var f=b.Db,h=uaa(e).gc(f);e=+(h.z()?taa(e,f):h.R());switch(b.Sl){case 0:f="Line";break;case 1:f="Bar";break;case 2:f="Point";break;default:f="Line"}e="new PenBundle.State("+e+", "+b.Ol+", "+("PenBundle.DisplayMode."+f)+")";b=G(t(),(new J).j(["'"+b.cb+"'","plotOps.makePenOps",
+"false",e,d.hk,d.ik]));b=(new at).c("new PenBundle.Pen("+b.Ab(", ")+")")}else{if(!Hp(d))throw(new q).i(d);b=Tfa(a,d.fc)}return b}}(a)),k=t();e=e.ya(h,k.s);var h=(new Qs).b(),k=t(),h=e.lc(h,k.s),k=(new Rs).b(),n=t(),k=e.lc(k,n.s).Ys(Ne().ml);e=rr(id(),h,"\n");h=k.z()?"":Rfa(Ss(),k.Ab(", "));k=t();id();id();n=a.Cl.lj.Go;n=hd(0,Hr(n.z()?"":n.R()));id();id();var r=a.Cl.lj.Io,r=hd(0,Hr(r.z()?"":r.R())),k=G(k,(new J).j(["name","pens","plotOps",n,r,a.Cl.lj.Xn,a.Cl.lj.yn,a.Cl.lj.nj,a.Cl.lj.mj,a.Cl.lj.pj,
+a.Cl.lj.oj,"setup","update"])).Ab(", ");a="|var name    \x3d '"+a.Cl.pU+"';\n            |var plotOps \x3d "+Sfa(Ss(),"modelPlotOps[name]",f)+";\n            |var pens    \x3d "+e+";"+h+"\n            |var setup   \x3d "+b+";\n            |var update  \x3d "+d+";\n            |return new Plot("+k+");";a=(new Tb).c(a);a=gd(a);b=G(t(),u());return(new at).c("("+qr(id(),b,a)+")()")}Ps.prototype.$classData=g({p5:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$RichCompiledPlot",{p5:1,d:1});
+function bt(){this.FU=null;this.a=!1}bt.prototype=new l;bt.prototype.constructor=bt;bt.prototype.b=function(){this.FU="";this.a=!0;return this};function Ufa(){var a;ct||(ct=(new bt).b());a=ct;if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/Polyfills.scala: 6");return a.FU}bt.prototype.$classData=g({q5:0},!1,"org.nlogo.tortoise.compiler.Polyfills$",{q5:1,d:1});var ct=void 0;function dt(){this.wU=this.zU=this.Aj=null}dt.prototype=new l;
+dt.prototype.constructor=dt;function Vfa(a,b,d,e){a.Aj=b;a.zU=d;a.wU=e;return a}
+function Wfa(a,b,d,e){var f=d.Np?Mfa(Nfa(),b):b;b=f.Gi.we();var h=Fq(Gq(),b);Sq(a.Aj,(new w).e(0,h));var k=uc(f.Gi);Mj();for(var n=Nj().pc,n=Nc(k,n),k=Qj(k);k.oi;){var r=k.ka();n.Ma((new w).e(r,Fq(Gq(),r)))}n=n.Ba();n=Xfa(new et,!0,n);f.Gi.dw.Qn?(d=Jq(a.Aj,f.pe,!1,!1,d,e,n),d=ifa(d)):d=Jq(a.Aj,f.pe,!0,!0,d,e,n);e=id();f=n.tr;a=m(new p,function(){return function(a){return a.na()}}(a));n=t();a="("+qr(e,f.ya(a,n.s),d)+")";d=t();return(new w).e(a,G(d,(new J).j([h,b])).Oi())}
+function Yfa(a,b){a=m(new p,function(a){return function(b){return Wfa(a,b,a.zU,a.wU)}}(a));var d=t();return b.ya(a,d.s)}dt.prototype.$classData=g({v5:0},!1,"org.nlogo.tortoise.compiler.ProcedureCompiler",{v5:1,d:1});function ft(){}ft.prototype=new l;ft.prototype.constructor=ft;ft.prototype.b=function(){return this};
+function Zfa(a,b){a=m(new p,function(a){return function(b){if(null!==b){var d=b.ja();b=b.na();var k=m(new p,function(){return function(a){return'procs["'+a+'"] \x3d temp;'}}(a)),n=t();return b.ya(k,n.s).Qc("temp \x3d "+d+";\n","\n","")}throw(new q).i(b);}}(a));var d=t();b="|var procs \x3d {};\n          |var temp \x3d undefined;\n          |"+b.ya(a,d.s).Ab("\n")+"\n          |return procs;";b=(new Tb).c(b);b=gd(b);a=G(t(),u());return"("+qr(id(),a,b)+")()"}
+function $fa(a){var b=gt,d=t();a=Zfa(b,a);b=t();a=[(new Us).$k("procedures",a,G(b,(new J).j(["workspace","world"])))];return G(d,(new J).j(a))}ft.prototype.$classData=g({w5:0},!1,"org.nlogo.tortoise.compiler.ProcedureCompiler$",{w5:1,d:1});var gt=void 0;function ht(a,b,d,e,f){b=b.wa;var h=new it;if(null===a)throw pg(qg(),null);h.Qa=a;h.AU=d;h.xU=e;h.KX=f;a=t();return b.lc(h,a.s)}
+function aga(a){t();var b=(new H).i(a);if(null!==b.Q&&0===b.Q.vb(1))return"Prims.rangeUnary("+b.Q.X(0)+")";t();b=(new H).i(a);if(null!==b.Q&&0===b.Q.vb(2))return a=b.Q.X(0),b=b.Q.X(1),"Prims.rangeBinary("+a+", "+b+")";t();var d=(new H).i(a);if(null!==d.Q&&0===d.Q.vb(3))return a=d.Q.X(0),b=d.Q.X(1),d=d.Q.X(2),"Prims.rangeTernary("+a+", "+b+", "+d+")";throw(new Re).c("range expects at most three arguments");}function bga(a){return"SelfManager.self()._optimalNSum4("+hd(id(),a)+")"}
+function jt(a,b,d,e,f,h){a=ed(a);b=d.wa.X(b);return zq(a,b,e,f,h)}function cga(a){return"SelfManager.self()._optimalNSum("+hd(id(),a)+")"}function dga(a,b,d,e,f){var h=ed(a),k=b.wa.X(1),h=zq(h,k,d,e,f);a=ed(a);b=b.wa.X(0);d=Lq(a,b,!0,d,e,f);return h+".projectionBy("+d+")"}
+function pfa(a,b,d,e,f){var h=b.ye;od();var k=(new kt).b(),n=pd(new rd,k).Uc(h);if(!n.z())return n.R();od();var r=(new lt).b(),y=pd(new rd,r).Uc(h);if(!y.z()){var E=y.R();return"("+jt(a,0,b,d,e,f)+" "+E+" "+jt(a,1,b,d,e,f)+")"}od();var Q=(new mt).b(),R=pd(new rd,Q).Uc(h);if(!R.z())return R.R()+"("+ht(a,b,d,e,f).Ab(", ")+")";od();var da=(new nt).b(),ma=pd(new rd,da).Uc(h);if(!ma.z()){var ra=ma.R();return"NLType("+jt(a,0,b,d,e,f)+")."+ra}var Ca=ega(a).dH(h);if(!Ca.z())return Ca.R();if(Mn(h)){var ab=
+ed(a);return nfa(ab,h.W)}if(Eq(h)){ed(a);var hb=h.ed.va;return Fq(Gq(),hb)}if(Hq(h)){ed(a);var mb=h.va;return Fq(Gq(),mb)}if(Pn(h)){ed(a);var Wb=h.va;return Fq(Gq(),Wb)}if(ot(h))return'procedures["'+h.fi.we()+'"]('+ht(a,b,d,e,f).Ab(",")+")";if(h&&h.$classData&&h.$classData.m.VA)return" -("+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.SA)return"!"+jt(a,0,b,d,e,f);if(pt(h))return jt(a,0,b,d,e,f)+".size()";if(qt(h))return"!"+jt(a,0,b,d,e,f)+".isEmpty()";if(h&&h.$classData&&h.$classData.m.WA){var zc=
+ht(a,b,d,e,f),xb=t(),Wc=zc.Tc("''",xb.s),dc=m(new p,function(){return function(a){return"workspace.dump("+a+")"}}(a)),le=t();return Wc.ya(dc,le.s).Qc("("," + ",")")}if(rt(h))return dga(a,b,d,e,f);if(h&&h.$classData&&h.$classData.m.xB)return fga(a,b.wa,d,e,f);if(h&&h.$classData&&h.$classData.m.VB)return jt(a,1,b,d,e,f)+".reduce("+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.sB)return jt(a,1,b,d,e,f)+".filter("+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.QB)return"Tasks.nValues("+
+jt(a,0,b,d,e,f)+", "+jt(a,1,b,d,e,f)+")";if(st(h)){var qd=h.ed;if(Xj(qd)){var bj=qd.Q;return"_error_"+T(S(),bj)+".message"}}if(tt(h)){var Cg=jt(a,0,b,d,e,f),jh=ed(a),ti=b.wa.X(1);return Cg+".agentFilter("+Lq(jh,ti,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.JB){var Dg=jt(a,1,b,d,e,f),cj=jt(a,0,b,d,e,f),Eg=ed(a),Kh=b.wa.X(2);return Dg+".maxNOf("+cj+", "+Lq(Eg,Kh,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.KB){var Xd=jt(a,0,b,d,e,f),hk=ed(a),dj=b.wa.X(1);return Xd+".maxOneOf("+Lq(hk,dj,!0,
+d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.LB){var ik=jt(a,1,b,d,e,f),fg=jt(a,0,b,d,e,f),ej=ed(a),ui=b.wa.X(2);return ik+".minNOf("+fg+", "+Lq(ej,ui,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.MB){var oc=jt(a,0,b,d,e,f),Fb=ed(a),Yc=b.wa.X(1);return oc+".minOneOf("+Lq(Fb,Yc,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.aB){var Ma=jt(a,0,b,d,e,f),jc=ed(a),kc=b.wa.X(1);return Ma+".agentAll("+Lq(jc,kc,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.dC){var Hl=jt(a,0,b,d,e,f),Fg=ed(a),Il=b.wa.X(1);
+return Hl+".maxesBy("+Lq(Fg,Il,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.eC){var jk=jt(a,0,b,d,e,f),Jl=ed(a),Kl=b.wa.X(1);return jk+".minsBy("+Lq(Jl,Kl,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.bB)return jt(a,0,b,d,e,f)+".atPoints("+jt(a,1,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.ZB){var kk=jt(a,1,b,d,e,f),Ll=ed(a),lk=b.wa.X(0);return kk+".sortOn("+Lq(Ll,lk,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.CR)return cga(h.tl);if(h&&h.$classData&&h.$classData.m.DR)return bga(h.tl);
+if(h&&h.$classData&&h.$classData.m.AR){var mk=jt(a,0,b,d,e,f),nk=ed(a),ok=b.wa.X(1);return mk+"._optimalCountOtherWith("+Lq(nk,ok,!0,d,e,f)+")"}if(ut(h)){var Ml=jt(a,0,b,d,e,f),Nl=ed(a),fj=b.wa.X(1);return Ml+"._optimalOtherWith("+Lq(Nl,fj,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.yR){var vi=jt(a,0,b,d,e,f),Lh=ed(a),gj=b.wa.X(1);return vi+"._optimalAnyOtherWith("+Lq(Lh,gj,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.ER){var wi=jt(a,0,b,d,e,f),Ol=ed(a),xi=b.wa.X(1);return wi+"._optimalOneOfWith("+
+Lq(Ol,xi,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.zR){var Pl=jt(a,0,b,d,e,f),yi=ed(a),Ql=b.wa.X(1);return Pl+"._optimalAnyWith("+Lq(yi,Ql,!0,d,e,f)+")"}if(h&&h.$classData&&h.$classData.m.HR)return"SelfManager.self()._optimalPatchHereInternal()";if(h&&h.$classData&&h.$classData.m.JR)return"SelfManager.self()._optimalPatchNorth()";if(h&&h.$classData&&h.$classData.m.GR)return"SelfManager.self()._optimalPatchEast()";if(h&&h.$classData&&h.$classData.m.MR)return"SelfManager.self()._optimalPatchSouth()";
+if(h&&h.$classData&&h.$classData.m.OR)return"SelfManager.self()._optimalPatchWest()";if(h&&h.$classData&&h.$classData.m.IR)return"SelfManager.self()._optimalPatchNorthEast()";if(h&&h.$classData&&h.$classData.m.LR)return"SelfManager.self()._optimalPatchSouthEast()";if(h&&h.$classData&&h.$classData.m.NR)return"SelfManager.self()._optimalPatchSouthWest()";if(h&&h.$classData&&h.$classData.m.KR)return"SelfManager.self()._optimalPatchNorthWest()";if(h&&h.$classData&&h.$classData.m.RA)return"world.turtleManager.turtlesOfBreed("+
+hd(id(),h.la)+")";if(h&&h.$classData&&h.$classData.m.fB)return"world.turtleManager.getTurtleOfBreed("+hd(id(),h.la)+", "+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.DB)return"world.linkManager.linksOfBreed("+hd(id(),h.la)+")";if(h&&h.$classData&&h.$classData.m.EB)return"world.linkManager.getLink("+jt(a,0,b,d,e,f)+", "+jt(a,1,b,d,e,f)+", "+hd(id(),h.la)+")";if(h&&h.$classData&&h.$classData.m.cB)return"SelfManager.self().breedAt("+hd(id(),h.la)+", "+jt(a,0,b,d,e,f)+", "+jt(a,1,b,d,e,f)+")";
+if(h&&h.$classData&&h.$classData.m.dB)return"SelfManager.self().breedHere("+hd(id(),h.la)+")";if(h&&h.$classData&&h.$classData.m.eB)return"Prims.breedOn("+hd(id(),h.la)+", "+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.zB)return"LinkPrims.inLinkFrom("+hd(id(),ld(h.la))+", "+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.AB)return"LinkPrims.isInLinkNeighbor("+hd(id(),ld(h.la))+", "+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.BB)return"LinkPrims.inLinkNeighbors("+hd(id(),
+ld(h.la))+")";if(h&&h.$classData&&h.$classData.m.FB)return"LinkPrims.isLinkNeighbor("+hd(id(),ld(h.la))+", "+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.GB)return"LinkPrims.linkNeighbors("+hd(id(),ld(h.la))+")";if(h&&h.$classData&&h.$classData.m.HB)return"LinkPrims.linkWith("+hd(id(),ld(h.la))+", "+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.NB)return"LinkPrims.myInLinks("+hd(id(),ld(h.la))+")";if(h&&h.$classData&&h.$classData.m.OB)return"LinkPrims.myLinks("+hd(id(),ld(h.la))+
+")";if(h&&h.$classData&&h.$classData.m.PB)return"LinkPrims.myOutLinks("+hd(id(),ld(h.la))+")";if(h&&h.$classData&&h.$classData.m.RB)return"LinkPrims.isOutLinkNeighbor("+hd(id(),ld(h.la))+", "+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.SB)return"LinkPrims.outLinkNeighbors("+hd(id(),ld(h.la))+")";if(h&&h.$classData&&h.$classData.m.TB)return"LinkPrims.outLinkTo("+hd(id(),ld(h.la))+", "+jt(a,0,b,d,e,f)+")";if(h&&h.$classData&&h.$classData.m.WB){var zi=h.H(),pk=ht(a,b,d,e,f);return Laa(a,!0,
+zi,pk,f)}if(vt(h)){var hj=b.wa.X(0),qk=h.Fe.Rk(),Rl=ed(a),ij=m(new p,function(){return function(a){return Fq(Gq(),a)}}(a,Rl)),Sl=t(),Tl=qk.ya(ij,Sl.s);return"Tasks.reporterTask("+gga(a,hj,!0,Tl,h.Bc,d,e,f)+")"}if(On(h)){var Ul=b.wa.X(0),Vl=h.Fe.Rk(),Wl=ed(a),jj=m(new p,function(){return function(a){return Fq(Gq(),a)}}(a,Wl)),kh=t(),rk=Vl.ya(jj,kh.s);return"Tasks.commandTask("+gga(a,Ul,!1,rk,h.Bc,d,e,f)+")"}if(wt(h)){var sk=(new Tb).c("_externreport\\(([^:]+):([^)]+)\\)"),lh=u(),mh=(new Ub).Ap(sk.U,
+lh),tk=h.l();var uk,vk,Gg=mg(mh,tk);if(Gg.z())nh=!1;else if(null!==Gg.R())var Mh=Gg.R(),nh=0===ng(Mh,2);else nh=!1;if(nh){var oh=Gg.R().X(0),Ff=Gg.R().X(1);uk=oh;vk=Ff}else throw(new q).i(tk);var ph=uk,wk=vk;return"Extensions["+hd(id(),ph)+"].prims["+hd(id(),wk)+"]("+ht(a,b,d,e,f).Ab(", ")+")"}if(h&&h.$classData&&h.$classData.m.UB){var kj=ht(a,b,d,e,f);return aga(kj)}if(d.up){var xk=oa(b.ye).tg(),Hg=(new Tb).c(xk),qh=Hg.U.length|0,Nh=Le(Me(),Hg.U,1,qh);return Maa(Nh)}var lj="unimplemented primitive: "+
+b.ye.H().Zb,mj=b.ye.H();jd(lj,mj.ma.Ua,mj.ma.Ya,mj.ma.bb)}function gga(a,b,d,e,f,h,k,n){a=ed(a);b=d?"return "+zq(a,b,h,k,n)+";":Jq(a,b,!0,!1,h,k,n);d=1!==e.sa()?"s":"";0<e.sa()?(b="if (arguments.length \x3c "+e.sa()+') {\n          |  throw new Error("anonymous procedure expected '+e.sa()+" input"+d+', but only got " + arguments.length);\n          |}\n          |'+b,b=(new Tb).c(b)):b=(new Tb).c(""+b);b=gd(b);e=qr(id(),e,b)+", ";id();f=f.z()?"":f.R();f=hd(0,Bfa(0,f));return e+f}
+var fga=function hga(b,d,e,f,h){if(0===d.sa())return"Prims.ifElseValueMissingElse()";if(1===d.sa())return b=ed(b),d=d.X(0),zq(b,d,e,f,h);var k=ed(b),n=d.X(0),k=zq(k,n,e,f,h),n=ed(b),r=d.X(1),n=zq(n,r,e,f,h);d=d.de(2);return"(Prims.ifElseValueBooleanCheck("+k+") ? "+n+" : "+hga(b,d,e,f,h)+")"};function xt(){this.lX=this.$f=this.Kc=this.dc=null}xt.prototype=new l;xt.prototype.constructor=xt;
+function iga(a){var b=t(),d=(new Us).$k("turtleShapes",jga(kga(new yt,Fi(),lga(zt(),a.$f.th))),G(t(),u())),e=(new Us).$k("linkShapes",jga(kga(new yt,Hi(),lga(zt(),a.$f.ah))),G(t(),u())),f=t(),h=t(),k=[mga(a)],h=G(h,(new J).j(k)),k=nga(a),n=t(),r=["'"+Bfa(id(),a.$f.je)+"'"],n=G(n,(new J).j(r)),r=t();id();var y=a.Kc,E=m(new p,function(){return function(a){a=oga(a).rf();return sd(a)}}(a)),Q=t(),y=[rr(0,y.ya(E,Q.s)," ")],r=G(r,(new J).j(y)),y=t();a=[h,k,n,r,G(y,(new J).j(['tortoise_require("extensions/all").dumpers()'])),
+pga(a)];f=G(f,(new J).j(a));a=t();f=(new At).tv(f,G(a,(new J).j(["turtleShapes","linkShapes"])));a=Bt("BreedManager");var h=Bt("ImportExportPrims"),k=Bt("InspectionPrims"),n=Bt("LayoutManager"),r=Bt("LinkPrims"),y=Bt("ListPrims"),E=Bt("MousePrims"),Q=Bt("OutputPrims"),R=Bt("plotManager"),da=Bt("Prims"),ma=Bt("PrintPrims"),ra=Bt("SelfPrims"),Ca=Bt("SelfManager"),ab=Bt("UserDialogPrims"),hb=Bt("Updater"),mb=Bt("world"),Wb=(new Ts).Kd("Exception","util/exception"),zc=(new Ts).Kd("NLMath","util/nlmath"),
+xb=(new Ts).Kd("notImplemented","util/notimplemented"),Wc=(new Ts).Kd("ColorModel","engine/core/colormodel"),dc=(new Ts).Kd("Link","engine/core/link"),le=(new Ts).Kd("LinkSet","engine/core/linkset"),qd=(new Ts).Kd("PatchSet","engine/core/patchset"),bj=(new Ts).Kd("Turtle","engine/core/turtle"),Cg=(new Ts).Kd("TurtleSet","engine/core/turtleset"),jh=(new Ts).Kd("NLType","engine/core/typechecker"),ti=(new Ts).Kd("Tasks","engine/prim/tasks"),Dg=(new Ts).Kd("AgentModel","agentmodel"),cj=(new Ts).Kd("Meta",
+"meta"),Eg=(new Ts).Kd("Random","shim/random"),Kh=(new Ts).Kd("StrictMath","shim/strictmath"),Xd=t(),d=[d,e,f,a,h,k,n,r,y,E,Q,R,da,ma,ra,Ca,ab,hb,mb,Wb,zc,xb,Wc,dc,le,qd,bj,Cg,jh,ti,Dg,cj,Eg,Kh,qga(new Ct,G(Xd,(new J).j(["workspace"])))];return G(b,(new J).j(d))}
+function nga(a){var b=hp(a.dc),d=Dt(Ne(),rga()),d=Et(b,d),b=gp(a.dc),e=Dt(Ne(),sga()),b=Et(b,e);id();var e=m(new p,function(){return function(a){return a.toLowerCase()}}(a)),f=t(),d=d.ya(e,f.s),e=m(new p,function(){return function(a){return hd(id(),a)}}(a)),f=t(),d=rr(0,d.ya(e,f.s)," ");id();e=m(new p,function(){return function(a){return a.toLowerCase()}}(a));f=t();b=b.ya(e,f.s);a=m(new p,function(){return function(a){return hd(id(),a)}}(a));e=t();a=rr(0,b.ya(a,e.s)," ");return G(t(),(new J).j([a,
+d]))}function Bt(a){var b=(new Tb).c(a),b=Dj(b),b=null===b?0:b.W,b=yfa(Ah(),b),b=Oe(b),d=(new Tb).c(a),b=""+b+Uj(d),d=t();return(new Us).$k(a,"workspace."+b,G(d,(new J).j(["workspace"])))}function jga(a){var b=Jc(a.Kr);return nd(b)?tga(Ft(),a):"{}"}function uga(a,b,d,e){var f=new xt;f.dc=a;f.Kc=b;f.$f=d;f.lX=e;return f}
+function pga(a){var b=Aea(a.dc),d=Dt(Ne(),vga()),b=Et(b,d);id();var d=fp(a.dc),e=m(new p,function(){return function(a){return a.toLowerCase()}}(a)),f=t(),d=d.ya(e,f.s),e=m(new p,function(){return function(a){return hd(id(),a)}}(a)),f=t(),d=rr(0,d.ya(e,f.s)," ");id();var e=a.dc.uk,f=m(new p,function(){return function(a){return a.toLowerCase()}}(a)),h=t(),e=e.ya(f,h.s),f=m(new p,function(){return function(a){return hd(id(),a)}}(a)),h=t(),e=rr(0,e.ya(f,h.s)," ");id();f=m(new p,function(){return function(a){return a.toLowerCase()}}(a));
+h=t();b=b.ya(f,h.s);f=m(new p,function(){return function(a){return hd(id(),a)}}(a));h=t();f=rr(0,b.ya(f,h.s)," ");h=wga(a.$f);b=t();d=[d,e,f,xga(h),yga(h),zga(h),Aga(h),Bga(h),Cga(h),Dga(h),"turtleShapes","linkShapes",a.lX];b=G(b,(new J).j(d));a=m(new p,function(){return function(a){return na(a)}}(a));d=t();return b.ya(a,d.s)}
+function mga(a){var b=(new Lc).Of(a.dc.rg),d=(new Lc).Of(a.dc.Yf),e=Mc().s,b=Gt(b,d,e);a=m(new p,function(a){return function(b){var d=hd(id(),b.va),e=hd(id(),b.Tf.toLowerCase());id();var r=b.Xl,y=m(new p,function(){return function(a){return a.toLowerCase()}}(a)),E=t(),r=r.ya(y,E.s),y=m(new p,function(){return function(a){return hd(id(),a)}}(a)),E=t(),r=rr(0,r.ya(y,E.s)," ");return"{ name: "+d+", singular: "+e+", varNames: "+r+(b.$g?", isDirected: "+b.Zg:"")+" }"}}(a));d=Mc();a=b.ya(a,d.s).Nc();return rr(id(),
+a," ")}xt.prototype.$classData=g({C5:0},!1,"org.nlogo.tortoise.compiler.RuntimeInit",{C5:1,d:1});function Ht(){}Ht.prototype=new l;Ht.prototype.constructor=Ht;
+function Ega(a,b){var d=m(new p,function(){return function(a){return a.mo()}}(a)),e=t(),d=b.ya(d,e.s),e=t(),d=d.Te(b,e.s).De(Ne().ml),e=m(new p,function(a){return function(b){var d=b.Ms();b=m(new p,function(a,b){return function(a){var d=b.mo();return(new w).e(a,d)}}(a,b));var e=t();return d.ya(b,e.s)}}(a)),f=t();b=b.zj(e,f.s).md();var e=Jc(d),f=m(new p,function(){return function(a){return It(a).Mf.na()}}(a)),h=Yk(),h=Zk(h),f=kr(b,f,h),e=Kc(e,f),f=t();b=Fga(a,G(f,(new J).j([e])),b);a=m(new p,function(a,
+b){return function(a){var d=Yk(),d=Zk(d);a=kr(a,b,d).Nc();d=(new Jt).b();return Gga(a,d)}}(a,d));d=t();return b.zj(a,d.s)}Ht.prototype.b=function(){return this};function Hga(a,b){var d=m(new p,function(){return function(a){return a.mo()}}(a)),e=t(),d=b.ya(d,e.s);a=m(new p,function(){return function(a){return a.Ms()}}(a));e=t();b=b.zj(a,e.s).md();d=d.md();return Kc(b,d)}
+function Iga(a,b){var d=Hga(a,b);if(d.z())return b=Ega(a,b),a=m(new p,function(){return function(a){return a.Nw()}}(a)),d=t(),b.ya(a,d.s).Qc("","\n","\n");throw(new Re).c("Please provide the following dependencies: "+ec(d,"",", ",""));}
+function Fga(a,b,d){for(;;)if(nd(d)){var e=Kt(d,m(new p,function(a,b){return function(a){return b.nd().ab(It(a).Mf.ja())}}(a,b)));if(null===e)throw(new q).i(e);var f=e.ja(),e=e.na(),h=m(new p,function(){return function(a){return It(a).Mf.na()}}(a)),k=Yk(),k=Zk(k),f=kr(f,h,k),h=m(new p,function(){return function(a){return It(a).Mf.na()}}(a)),k=Yk(),k=Zk(k),f=f.qj(kr(e,h,k));if(nd(f))d=t(),b=b.yc(f,d.s),d=e;else throw e=d,a=m(new p,function(){return function(a){return"from "+a.na()+" to "+a.ja()}}(a)),
+b=Yk(),b=Zk(b),a=kr(e,a,b).Ab(",\n"),(new Re).c("unable to satisfy dependencies: "+a);}else return b}Ht.prototype.$classData=g({L5:0},!1,"org.nlogo.tortoise.compiler.TortoiseLoader$",{L5:1,d:1});var Lt=void 0;function Mt(){this.Mf=null}Mt.prototype=new l;Mt.prototype.constructor=Mt;function It(a){var b=new Mt;b.Mf=a;return b}Mt.prototype.$classData=g({M5:0},!1,"org.nlogo.tortoise.compiler.TortoiseLoader$RichEdge$1",{M5:1,d:1});function Nt(){this.JD=this.ID=null}Nt.prototype=new l;
+Nt.prototype.constructor=Nt;
+function Jga(a,b){if(Ot(b)){id();var d=b.cb,d=Hr(d.z()?"":d.R()),e=t(),f=[(new w).e("setup",b.Bg),(new w).e("update",b.Cg)],e=G(e,(new J).j(f)),f=m(new p,function(a,b){return function(d){if(null!==d){var e=d.ja();d=d.na();Pt();d=Kga(a,d,b,C());return Qt(Rt(d),"plot",b,e)}throw(new q).i(d);}}(a,d)),h=t(),f=e.ya(f,h.s);t();e=(new H).i(f);if(null!==e.Q&&0===e.Q.vb(2))f=e.Q.X(0),e=e.Q.X(1);else throw(new q).i(f);Vp();var h=Lp(),h=(new rq).Zq(h),h=St(h),k=(new Kp).i(ub(new vb,function(a,b,d){return function(e,
+f){var h=b.ko,k=function(a,b){return function(d){return Lga(a,b,d)}}(a,d),n=x().s;if(n===x().s)if(h===u())k=u();else{for(var n=h.Y(),r=n=Og(new Pg,k(n),u()),h=h.$();h!==u();)var hb=h.Y(),hb=Og(new Pg,k(hb),u()),r=r.Ka=hb,h=h.$();k=n}else{for(n=Nc(h,n);!h.z();)r=h.Y(),n.Ma(k(r)),h=h.$();k=n.Ba()}return(new Tt).$k(e,f,k)}}(a,b,d))),h=a=h.In,k=(new w).e(f,(new Kp).i(tb(k.ga)));a:{var n=k.ub,r=k.Fb;if(P(n)&&(n=n.ga,P(r))){f=(new Kp).i(r.ga.y(n));break a}r=k.ub;n=k.Fb;if(Hp(r)&&P(n))f=r;else if(r=k.Fb,
+P(k.ub)&&Hp(r))f=r;else{n=k.ub;r=k.Fb;if(Hp(n)&&(n=n.fc,Hp(r))){f=(new Ip).i(h.sc(r.fc,I(function(a,b){return function(){return b}}(f,n))));break a}throw(new q).i(k);}}f=(new w).e(e,f);a:{k=f.ub;h=f.Fb;if(P(k)&&(k=k.ga,P(h))){e=(new Kp).i(h.ga.y(k));break a}h=f.ub;k=f.Fb;if(Hp(h)&&P(k))e=h;else if(h=f.Fb,P(f.ub)&&Hp(h))e=h;else{k=f.ub;h=f.Fb;if(Hp(k)&&(k=k.fc,Hp(h))){e=(new Ip).i(a.sc(h.fc,I(function(a,b){return function(){return b}}(e,k))));break a}throw(new q).i(f);}}return Mga(b,d,e)}if(Ut(b))return(new Vt).jv(b,
+Nga(a,b));if(Wt(b))return(new Vt).jv(b,Oga(a,b));if(Xt(b))return(new Vt).jv(b,Pga(a,b));fq();d=Qga();return(new Vt).jv(b,oq().y(d))}
+function Pga(a,b){var d=t(),e=(new w).e("min",b.ao),f=(new w).e("max",b.Lm),e=[e,f,(new w).e("step",b.en)],d=G(d,(new J).j(e));b=jaa(ub(new vb,function(a,b){return function(d,e){Pt();e=a.JD.y(e);var f=b.cb;return Qt(Rt(e),"slider",f.z()?b.Wt():f.R(),d)}}(a,b)));e=t();b=d.ya(b,e.s);t();d=(new H).i(b);if(null!==d.Q&&0===d.Q.vb(3))f=d.Q.X(0),b=d.Q.X(1),e=d.Q.X(2);else throw(new q).i(b);d=b;b=e;Vp();var e=Lp(),e=(new rq).Zq(e),e=St(e),h=I(function(a,b){return function(){return b}}(a,f)),f=(new Kp).i(ub(new vb,
+function(a,b){return function(a,d){var e=a.ja();a=a.na();return(0,b.Qi)(e,a,d)}}(e,Yt(function(){return function(a,b,d){var e=new Zt;e.Ds=a;e.Cs=b;e.Hs=d;return e}}(a)))));a=e.In;var k=(new Kp).i(ub(new vb,function(){return function(a,b){return(new w).e(a,b)}}(e))),d=Rga(d,I(function(a,b,d){return function(){return a.Jf(b,I(function(a,b){return function(){return a.hd(b,m(new p,function(){return function(a){return tb(a)}}(a)))}}(a,d)))}}(e,h,k)),e.In),e=e.In,f=(new w).e(d,(new Kp).i(tb(f.ga)));a:{k=
+f.ub;h=f.Fb;if(P(k)&&(k=k.ga,P(h))){d=(new Kp).i(h.ga.y(k));break a}h=f.ub;k=f.Fb;if(Hp(h)&&P(k))d=h;else if(h=f.Fb,P(f.ub)&&Hp(h))d=h;else{k=f.ub;h=f.Fb;if(Hp(k)&&(k=k.fc,Hp(h))){d=(new Ip).i(e.sc(h.fc,I(function(a,b){return function(){return b}}(d,k))));break a}throw(new q).i(f);}}d=(new w).e(b,d);f=d.ub;e=d.Fb;if(P(f)&&(f=f.ga,P(e)))return(new Kp).i(e.ga.y(f));e=d.ub;f=d.Fb;if(Hp(e)&&P(f))return e;e=d.Fb;if(P(d.ub)&&Hp(e))return e;f=d.ub;e=d.Fb;if(Hp(f)&&(f=f.fc,Hp(e)))return(new Ip).i(a.sc(e.fc,
+I(function(a,b){return function(){return b}}(b,f))));throw(new q).i(d);}
+function Lga(a,b,d){var e=t(),f=[(new w).e("setup",d.Bg),(new w).e("update",d.Cg)],e=G(e,(new J).j(f));b=m(new p,function(a,b,d){return function(e){if(null!==e){var f=e.ja();e=e.na();Pt();e=Kga(a,e,b,md().Uc(d.cb));e=Rt(e);var h=md().Uc(d.cb);return Qt(e,"pen",h.z()?"":h.R(),f)}throw(new q).i(e);}}(a,b,d));f=t();e=e.ya(b,f.s);t();b=(new H).i(e);if(null!==b.Q&&0===b.Q.vb(2))e=b.Q.X(0),b=b.Q.X(1);else throw(new q).i(e);Vp();var f=Lp(),f=(new rq).Zq(f),f=St(f),h=(new Kp).i(ub(new vb,function(){return function(a,
+b){return(new $t).Kd(a,b)}}(a))),f=a=f.In,h=(new w).e(e,(new Kp).i(tb(h.ga)));a:{var k=h.ub,n=h.Fb;if(P(k)&&(k=k.ga,P(n))){e=(new Kp).i(n.ga.y(k));break a}n=h.ub;k=h.Fb;if(Hp(n)&&P(k))e=n;else if(n=h.Fb,P(h.ub)&&Hp(n))e=n;else{k=h.ub;n=h.Fb;if(Hp(k)&&(k=k.fc,Hp(n))){e=(new Ip).i(f.sc(n.fc,I(function(a,b){return function(){return b}}(e,k))));break a}throw(new q).i(h);}}e=(new w).e(b,e);a:{h=e.ub;f=e.Fb;if(P(h)&&(h=h.ga,P(f))){b=(new Kp).i(f.ga.y(h));break a}f=e.ub;h=e.Fb;if(Hp(f)&&P(h))b=f;else if(f=
+e.Fb,P(e.ub)&&Hp(f))b=f;else{h=e.ub;f=e.Fb;if(Hp(h)&&(h=h.fc,Hp(f))){b=(new Ip).i(a.sc(f.fc,I(function(a,b){return function(){return b}}(b,h))));break a}throw(new q).i(e);}}return Sga(d,b)}Nt.prototype.Gl=function(a){throw(new Re).c("This type of agent cannot be asked: "+a);};
+function Nga(a,b){Pt();var d=a.ID,e=b.An.l().toUpperCase(),f=b.Bc;a=d.y(Tga(a,e,f.z()?"":f.R()).split("\\n").join("\n").split("\\\\").join("\\").split('\\"').join('"'));a=Rt(a);d=b.cb;b=d.z()?b.Bc:d;b=Qt(a,"button",b.z()?"":b.R(),"source");if(P(b))return(new Kp).i((new au).c(b.ga));if(Hp(b))return b;throw(new q).i(b);}
+function Kga(a,b,d,e){e.z()?e=C():(e=e.R(),e=(new H).i("'"+e+"'"));e=e.z()?"undefined":e.R();var f=b.trim();if(null===f)throw(new Ce).b();if(""===f)return fq(),d=Gr(id(),""),oq().y(d);a=a.ID.y(b);if(P(a))a=a.ga,a=(new Kp).i(Gr(id(),a));else if(!Hp(a))throw(new q).i(a);if(P(a))d="plotManager.withTemporaryContext('"+d+"', "+e+")("+a.ga+")",d=(new Kp).i(Er(id(),d));else{if(!Hp(a))throw(new q).i(a);d=a}if(P(d))return d="workspace.rng.withClone("+d.ga+")",(new Kp).i(Er(id(),d));if(Hp(d))return d;throw(new q).i(d);
+}
+function Tga(a,b,d){for(var e=(new w).e("OBSERVER",m(new p,function(){return function(a){return a}}(a))),f=(new w).e("TURTLE",m(new p,function(){return function(a){return"ask turtles [ "+a+" ]"}}(a))),h=(new w).e("PATCH",m(new p,function(){return function(a){return"ask patches [ "+a+" ]"}}(a))),e=[e,f,h,(new w).e("LINK",m(new p,function(){return function(a){return"ask links [ "+a+" ]"}}(a)))],f=fc(new gc,hc()),h=0,k=e.length|0;h<k;)ic(f,e[h]),h=1+h|0;return f.Va.Zh(b,I(function(a,b){return function(){a.Gl(b)}}(a,b))).y(d)}
+function Uga(a,b){b=b.Jl(m(new p,function(){return function(a){return Ot(a)}}(a)),!1);a=Vga(b,m(new p,function(){return function(a){if(Ot(a))return a.cb;throw(new q).i(a);}}(a))).hg(m(new p,function(){return function(a){return 1<a.na().Da()}}(a)));if(nd(a)){a=Jc(a);a="Having multiple plots with same display name is not supported. Duplicate names detected: "+ec(a,"",", ","");b=Zl().ma.Ua;var d=Zl().ma.Ya,e=Zl();throw(new kd).gt(a,b,d,e.ma.bb);}}
+function Oga(a,b){Pt();var d=b.Bc;a=a.JD.y(d.z()?"":d.R());a=Rt(a);d=b.cb;b=d.z()?b.Bc:d;b=Qt(a,"monitor",b.z()?"":b.R(),"reporter");if(P(b))return(new Kp).i((new au).c(b.ga));if(Hp(b))return b;throw(new q).i(b);}function Wga(a,b){var d=new Nt;d.ID=a;d.JD=b;return d}function Xga(a,b){Uga(a,b);a=m(new p,function(a){return function(b){return Jga(a,b)}}(a));var d=t();return b.ya(a,d.s)}Nt.prototype.$classData=g({Y5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompiler",{Y5:1,d:1});
+function bu(){this.d_=this.XW=null;this.a=0}bu.prototype=new l;bu.prototype.constructor=bu;bu.prototype.b=function(){cu=this;for(var a=[(new w).e("compiledSource","reporter")],b=fc(new gc,hc()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.XW=b.Va;this.a=(1|this.a)<<24>>24;a=[(new w).e("compiledMin","getMin"),(new w).e("compiledMax","getMax"),(new w).e("compiledStep","getStep")];b=fc(new gc,hc());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.d_=b.Va;this.a=(2|this.a)<<24>>24;return this};
+function Yga(a,b){id();a=m(new p,function(){return function(a){return Zga(Pt(),a).XG()}}(a));var d=t();return rr(0,b.ya(a,d.s),"\n")}
+function Zga(a,b){var d=zfa((new Br).Ea(u()),oga(b).rf());if(null!==b){var e=b.gq;if(Wt(b.lj)&&P(e)&&(e=e.ga,du(e)))return a=ub(new vb,function(){return function(a,b){Pt();var d=Pt();if(0===(1&d.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/WidgetCompiler.scala: 141");return $ga(d.XW,a,b)}}(a)),e.KD().Ib(d,a)}return null!==b&&(e=b.gq,Xt(b.lj)&&P(e)&&(b=e.ga,eu(b)))?(a=ub(new vb,function(){return function(a,b){Pt();var d=Pt();if(0===(2&
+d.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/WidgetCompiler.scala: 144");return $ga(d.d_,a,b)}}(a)),b.KD().Ib(d,a)):d}function $ga(a,b,d){if(null!==d){var e=d.na();a=a.y(d.ja());d=G(t(),u());var f=t(),e=(new fu).tv(d,G(f,(new J).j(["return "+e+";"]))),e=(new w).e(a,e);b=b.Ah;a=t();return(new Br).Ea(b.Tc(e,a.s))}throw(new q).i(d);}bu.prototype.$classData=g({Z5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompiler$",{Z5:1,d:1});var cu=void 0;
+function Pt(){cu||(cu=(new bu).b());return cu}function gu(){this.G_=null}gu.prototype=new l;gu.prototype.constructor=gu;function Qt(a,b,d,e){b=b+" '"+d+"' - "+b+"."+e;d=a.G_;if(P(d))return d;if(Hp(d)){d=d.fc;a=function(a,b){return function(a){return(new nr).c(b+": "+a.Vf())}}(a,b);Lp();b=a(d.Ic);e=Mp(d.Sc);d=Np().Wd;a:for(;;){if(Op(e)){var f=e;e=f.ld;d=(new Pp).Vb(a(f.gd),d);continue a}if(!Qp(e))throw(new q).i(e);break}return(new Ip).i((new Rp).Vb(b,d))}throw(new q).i(d);}
+function Rt(a){var b=new gu;b.G_=a;return b}gu.prototype.$classData=g({$5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompiler$ValidationContextualizer",{$5:1,d:1});function hu(){}hu.prototype=new l;hu.prototype.constructor=hu;hu.prototype.b=function(){return this};hu.prototype.$classData=g({a6:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$",{a6:1,d:1});var iu=void 0;function ju(){this.gw=null;this.xa=!1;this.a=0}ju.prototype=new l;ju.prototype.constructor=ju;ju.prototype.b=function(){return this};
+ju.prototype.QF=function(){if(!this.xa&&!this.xa){var a=(new Be).b();if(a.Pa)a=a.tb;else{if(null===a)throw(new Ce).b();a=a.Pa?a.tb:De(a,(new ku).b())}var a=(new w).e("line",a),b=(new Be).b();if(b.Pa)b=b.tb;else{if(null===b)throw(new Ce).b();b=b.Pa?b.tb:De(b,(new lu).b())}var b=(new w).e("circle",b),d=(new Be).b();if(d.Pa)d=d.tb;else{if(null===d)throw(new Ce).b();d=d.Pa?d.tb:De(d,(new mu).b())}var d=(new w).e("rectangle",d),e=(new Be).b();if(e.Pa)e=e.tb;else{if(null===e)throw(new Ce).b();e=e.Pa?e.tb:
+De(e,(new nu).b())}a=[a,b,d,(new w).e("polygon",e)];b=fc(new gc,hc());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.gw=b.Va;this.xa=!0}return this.gw};ju.prototype.$classData=g({g6:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$",{g6:1,d:1});var ou=void 0;function pu(a){return(new qu).bc(Cc(a.Gq().eh,a.yq().eh))}function aha(){var a=u();return(new qu).bc(Wg(Xg(),a))}function ru(){}ru.prototype=new l;ru.prototype.constructor=ru;ru.prototype.b=function(){return this};
+function td(a,b){return ba.JSON.stringify(b)}
+function hq(a,b){var d=(new w).e(b,typeof b);if(null===d.ub)return su();a=d.Fb;if("undefined"===a||"function"===a)return su();a=d.ub;if("number"===d.Fb)return b=+a,tu(uu(),b)?(new vu).hb(Oa(b)):(new wu).Bj(b);a=d.ub;if("string"===d.Fb)return(new xu).c(a);a=d.ub;if("boolean"===d.Fb)return(new yu).ud(!!a);a=d.ub;var e=d.Fb;if(a instanceof ba.Array&&"object"===e&&ba.Array.isArray(a)){b=[];d=0;for(e=a.length|0;d<e;){var f=a[d],f=hq(ud(),f);b.push(f);d=1+d|0}a=x().s.Tg();d=b.length|0;switch(d){case -1:break;
+default:a.oc(d)}a.Xb((new J).j(b));return(new zu).Ea(a.Ba())}if("object"===d.Fb){d=ba.Object.keys(b);Mc();hn();a=[];e=0;for(f=d.length|0;e<f;){var h=d[e];ud();if(!Au().Zm.call(b,h))throw(new Bu).c("key not found: "+h);var k=hq(0,b[h]),h=(new w).e(h,k);a.push(h);e=1+e|0}b=fc(new gc,Cu());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;return(new qu).bc(b.Va)}throw(new q).i(d);}
+function vd(a,b){if(su()===b)return null;if(Du(b))return b.zi;if(Eu(b))return b.Dl;if(Fu(b))return b.Lc;if(Gu(b))return b.tm;if(Hu(b)){b=b.Va;a=m(new p,function(){return function(a){return vd(ud(),a)}}(a));var d=t();a=b.ya(a,d.s);b=bha();if(Iu(a))return a.bf;if(Ju(a))return a.qa;d=[];a.ta(m(new p,function(a,b){return function(a){return b.push(a)|0}}(b,d)));return d}if(Ku(b))return d=b.eh,Lu||(Lu=(new Mu).b()),b=Lu,a=(new Nu).Fy(d,m(new p,function(){return function(a){return vd(ud(),a)}}(a))),cha(b,
+Cr(a));throw(new q).i(b);}ru.prototype.$classData=g({n6:0},!1,"org.nlogo.tortoise.compiler.json.JsonLibrary$",{n6:1,d:1});var Ou=void 0;function ud(){Ou||(Ou=(new ru).b());return Ou}function dha(a,b){fq();a="could not convert "+nq(a)+" to "+nq(b);return gq(Vp(),a)}
+function Pu(a,b,d){d=(new Qu).La(d);Ru();d=d.eZ;if(Xj(d))b=(new Kp).i(d.Q);else{if(C()!==d)throw(new q).i(d);Lp();b="could not find key "+b;d=[];var e=Np().Wd,f=d.length|0;a:for(;;){if(0!==f){e=(new Pp).Vb(d[-1+f|0],e);f=-1+f|0;continue a}break}b=(new Ip).i((new Rp).Vb(b,e))}if(P(b))return a.Ta(b.ga);if(Hp(b))return b;throw(new q).i(b);}function Su(){this.KY=this.QW=this.iW=null;this.a=0}Su.prototype=new l;Su.prototype.constructor=Su;
+Su.prototype.b=function(){Tu=this;this.iW=(new Uu).b();this.a=(1|this.a)<<24>>24;this.QW=(new Vu).b();this.a=(2|this.a)<<24>>24;this.KY=(new Wu).b();this.a=(4|this.a)<<24>>24;return this};function eha(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonSerializer.scala: 99");return a.QW}
+function fha(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonSerializer.scala: 90");return a.iW}function Xu(a,b){return fha(a).Ul(eha(a)).Ul(gha(a)).gb(b,m(new p,function(){return function(){return(new xu).c("XXX IMPLEMENT ME")}}(a)))}
+function gha(a){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonSerializer.scala: 108");return a.KY}function tga(a,b){return rb(m(new p,function(){return function(a){return Xu(Ft(),a)}}(a)),m(new p,function(){return function(a){return vd(ud(),a)}}(a))).za(m(new p,function(){return function(a){return td(ud(),a)}}(a))).y(b)}Su.prototype.$classData=g({p6:0},!1,"org.nlogo.tortoise.compiler.json.JsonSerializer$",{p6:1,d:1});
+var Tu=void 0;function Ft(){Tu||(Tu=(new Su).b());return Tu}function Yu(a,b){return(new H).i(a.zc(b))}function Zu(){this.MW=this.J_=null;this.a=0}Zu.prototype=new l;Zu.prototype.constructor=Zu;Zu.prototype.b=function(){$u=this;this.J_=(new av).b();this.a=(16|this.a)<<24>>24;this.MW=(new bv).b();this.a=(32|this.a)<<24>>24;return this};function hha(a,b,d){return Ku(d)?(a=d.eh,b=(new xu).c(b),(new qu).bc(a.mn((new w).e("name",b)))):d}
+function iha(a){if(null===a)throw(new Ce).b();return a.Pa?a.tb:De(a,(new cv).b())}function dv(a,b){if(Ku(b))return a=(new Be).b(),(a.Pa?a.tb:jha(a)).Ra(b);fq();b="Expected shape as json object, got "+b;return gq(Vp(),b)}function jha(a){if(null===a)throw(new Ce).b();return a.Pa?a.tb:De(a,(new ev).b())}function kha(a,b){if(b&&b.$classData&&b.$classData.m.RI)return lha(new fv,b);if(b&&b.$classData&&b.$classData.m.PI)return mha(b);throw(new q).i(b);}
+function nha(a,b){if(Ku(b)){var d=b.eh;b=Ok().s;b=Nc(d,b);d=gv(d);for(d=hv(d);d.ra();){var e=d.ka();if(null===e)throw(new q).i(e);var f=e.ja(),e=e.na();b.Ma(hha(iv(),f,e))}return a.Ta((new zu).Ea(b.Ba().Nc()))}return a.Ta(b)}Zu.prototype.$classData=g({J6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$",{J6:1,d:1});var $u=void 0;function iv(){$u||($u=(new Zu).b());return $u}function jv(){this.va=null}jv.prototype=new l;jv.prototype.constructor=jv;
+jv.prototype.c=function(a){this.va=a;return this};jv.prototype.$classData=g({W6:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsField",{W6:1,d:1});function kv(){this.gw=null;this.a=0}kv.prototype=new l;kv.prototype.constructor=kv;
+kv.prototype.b=function(){lv=this;var a=(new Be).b();if(a.Pa)a=a.tb;else{if(null===a)throw(new Ce).b();a=a.Pa?a.tb:De(a,(new mv).b())}var a=(new w).e("button",a),b=(new Be).b();if(b.Pa)b=b.tb;else{if(null===b)throw(new Ce).b();b=b.Pa?b.tb:De(b,(new nv).b())}var b=(new w).e("chooser",b),d=(new Be).b();if(d.Pa)d=d.tb;else{if(null===d)throw(new Ce).b();d=d.Pa?d.tb:De(d,(new ov).b())}var d=(new w).e("inputBox",d),e=(new Be).b();if(e.Pa)e=e.tb;else{if(null===e)throw(new Ce).b();e=e.Pa?e.tb:De(e,(new pv).b())}var e=
+(new w).e("monitor",e),f=(new Be).b();if(f.Pa)f=f.tb;else{if(null===f)throw(new Ce).b();f=f.Pa?f.tb:De(f,(new qv).b())}var f=(new w).e("output",f),h=(new Be).b();if(h.Pa)h=h.tb;else{if(null===h)throw(new Ce).b();h=h.Pa?h.tb:De(h,(new rv).b())}var h=(new w).e("plot",h),k=(new Be).b();if(k.Pa)k=k.tb;else{if(null===k)throw(new Ce).b();k=k.Pa?k.tb:De(k,(new sv).b())}var k=(new w).e("slider",k),n=(new Be).b();if(n.Pa)n=n.tb;else{if(null===n)throw(new Ce).b();n=n.Pa?n.tb:De(n,(new tv).b())}var n=(new w).e("switch",
+n),r=(new Be).b();if(r.Pa)r=r.tb;else{if(null===r)throw(new Ce).b();r=r.Pa?r.tb:De(r,(new uv).b())}var r=(new w).e("textBox",r),y=(new Be).b();if(y.Pa)y=y.tb;else{if(null===y)throw(new Ce).b();y=y.Pa?y.tb:De(y,(new vv).b())}a=[a,b,d,e,f,h,k,n,r,(new w).e("view",y)];b=fc(new gc,hc());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.gw=b.Va;this.a|=1024;return this};
+kv.prototype.QF=function(){if(0===(1024&this.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/WidgetRead.scala: 178");return this.gw};kv.prototype.$classData=g({Z6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$",{Z6:1,d:1});var lv=void 0;function wv(){this.Hu=this.tX=null}wv.prototype=new l;wv.prototype.constructor=wv;
+wv.prototype.b=function(){xv=this;var a=[yv().rA,yv().qx];if(0===(a.length|0))a=hh();else{for(var b=ih(new rh,hh()),d=0,e=a.length|0;d<e;)sh(b,a[d]),d=1+d|0;a=b.Va}this.tX=a;a=(new zv).b();this.Hu=oha(a);return this};wv.prototype.$classData=g({m8:0},!1,"org.scalajs.testinterface.HTMLRunner$EventCounter$",{m8:1,d:1});var xv=void 0;function Av(){xv||(xv=(new wv).b());return xv}function Bv(){this.LF=null;this.kA=!1;this.MF=this.io=this.uX=this.Wv=this.Xv=null}Bv.prototype=new l;
+Bv.prototype.constructor=Bv;function pha(a,b,d){b.ta(m(new p,function(a,b){return function(a){a.YZ(!!b.checked)}}(a,d)));return!0}function qha(a,b,d){var e=b.ee(m(new p,function(){return function(a){return a.Fz()}}(a)));a=!e&&b.Le(m(new p,function(){return function(a){return a.Fz()}}(a)));(d.indeterminate=a)||(d.checked=e);return!0}function Cv(a){return a?"success":"error"}
+function rha(a){a=Dv(a.io.Ug,"","warn");Ev(Fv(),a,"There are new excluded tests in your project. You may wish to ");Gv(Fv(),a,"?","Run all");Ev(Fv(),a," to rediscover all available tests.")}function sha(a,b,d){return function(a,b,d){return function(){return pha(a,b,d)}}(a,b,d)}
+function Hv(a){var b=Av().Hu.I_().og(Iv())|0,b=Jv((new Kv).Ea((new J).j(["Total: ",""])),(new J).j([b])),d;d=yv().hs.qU();var e;e=[];for(var f=0,h=d.n.length;f<h;){var k=d.n[f],k=Jv((new Kv).Ea((new J).j(["",": ",""])),(new J).j([k,Av().Hu.y(k)]));e.push(null===k?null:k);f=1+f|0}e=ka(Xa(qa),e);f=e.n.length;d=1+f|0;d=la(Xa(qa),[d]);d.n[0]=b;Lv(Af(),e,0,d,1,f);b=(new Bl).b();e=!0;zr(b,"");f=0;for(h=d.n.length;f<h;)k=d.n[f],e?(Ar(b,k),e=!1):(zr(b,", "),Ar(b,k)),f=1+f|0;zr(b,"");b=b.Bb.Yb;a.io.OD.textContent=
+a.kA?b:"Running... "+b}function tha(a,b){b=(new Mv).mv(a,b);a.Xv.Yj(b);return b}function uha(a,b,d){return function(a,b,d){return function(){return qha(a,b,d)}}(a,b,d)}
+function vha(a,b){var d=new Bv;d.LF=a;d.kA=!1;Fc();d.Xv=(new J).b();Fc();d.Wv=(new J).b();var e=ba.document.body;d.uX=Nv(Fv(),e,"","","div");var e=new Ov,f=a.Da();if(null===d)throw pg(qg(),null);e.da=d;0===f?b=Jv((new Kv).Ea((new J).j(["Total Test Suites: ",""])),(new J).j([b])):(f=b-f|0,b=Jv((new Kv).Ea((new J).j(["Selected Test Suites "," (Total: ",")"])),(new J).j([f,b])));e.Ug=(new Pv).mv(d,b);Qv(e.Ug);e.Ug.ui.onclick=sha(d,d.Xv,e.Ug.ui);e.OD=Dv(e.Ug,"","info");e.A_=uha(d,d.Xv,e.Ug.ui);d.io=e;
+d.MF=a.Ye()?wha(d):d.io;Hv(d);return d}Bv.prototype.WD=function(a){this.kA=!0;a.iE().ta(m(new p,function(a){return function(d){Dv(a.io.Ug,"Test framework crashed during execution:","error");var e=a.io;d=d.l();return Dv(e.Ug,d,"error")}}(this)));this.io.my(!!a.sE(I(function(){return function(){return!1}}(this))));Hv(this)};Bv.prototype.$classData=g({o8:0},!1,"org.scalajs.testinterface.HTMLRunner$UI",{o8:1,d:1});function Rv(){}Rv.prototype=new l;Rv.prototype.constructor=Rv;Rv.prototype.b=function(){return this};
+function xha(a,b,d){a=Nv(Fv(),b,"","","input");a.setAttribute("type","checkbox");a.checked=d;return a}function Nv(a,b,d,e,f){a=ba.document.createElement(f);f=(new Tb).c(d);nd(f)&&(a.className=d);d=(new Tb).c(e);nd(d)&&(a.textContent=e);b.appendChild(a);return a}function Ev(a,b,d){a=ba.document.createTextNode(d);b.appendChild(a);return a}function Gv(a,b,d,e){a=Nv(Fv(),b,"",e,"a");a.setAttribute("href",d);return a}
+Rv.prototype.$classData=g({w8:0},!1,"org.scalajs.testinterface.HTMLRunner$dom$RichElement$",{w8:1,d:1});var Sv=void 0;function Fv(){Sv||(Sv=(new Rv).b());return Sv}function Tv(){}Tv.prototype=new l;Tv.prototype.constructor=Tv;Tv.prototype.b=function(){return this};
+function yha(a,b){b=(new Uv).j(b);b=Ye(new Ze,b,0,b.bf.length|0);a=zha(Vv(b).ya(m(new p,function(){return function(a){var b;b=Wv().vv.gc(a);var f=(new Xv).b();b.z()?b=C():(f=pd(new rd,f),b=b.R(),b=f.Uc(b));if(b.z()){var h=aa.exportsNamespace;a=(new Tb).c(a);a=bi(a,46);b=a.n.length;f=0;a:for(;;){if(f!==b){var k=a.n[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:yd(a)?a:void 0;a=void 0===a?C():(new H).i(a)}else a=b;return a}}(a)),
+(sg(),(new tg).b())),m(new p,function(){return function(a){return a.wb()}}(a)));return Wj(a)}
+function Aha(){var a;Bha||(Bha=(new Tv).b());a=Bha;for(var b=ba.definedTests,d=[],e=0,f=b.length|0;e<f;){var h=b[e],h=Cha(Zv(),h);d.push(h);e=1+e|0}e=ba.testFrameworkNames;b=[];f=0;for(h=e.length|0;f<h;){var k=yha(a,e[f]).wb();if(null!==k)a:for(;;){if(nd(k)){var n=k.Y();b.push(n);k=k.$();continue a}break}else for(;!k.z();)n=k.Y(),b.push(n),k=k.$();f=1+f|0}e=x().s.Tg();f=b.length|0;switch(f){case -1:break;default:e.oc(f)}e.Xb((new J).j(b));b=e.Ba();a=function(a,b){return function(a){for(var d=Dha(),
+e=[],f=0,h=b.length|0;f<h;){for(var k=b[f],n=k,r=0;;){var hb;if(hb=r<d.n.length){hb=d.n[r];var mb=n.hq;hb=!1===(Eha(hb)&&Eha(mb)?hb.Cv()===mb.Cv()&&hb.Ew()===mb.Ew():Fha(hb)&&Fha(mb)?hb.hr===mb.hr&&hb.Yx===mb.Yx:!1)}if(hb)r=1+r|0;else break}r!==d.n.length!==!1&&e.push(k);f=1+f|0}return(new w).e(a,(new J).j(e))}}(a,d);d=x().s;if(d===x().s){if(b===u())return u();d=b.Y();e=d=Og(new Pg,a(d),u());for(b=b.$();b!==u();)f=b.Y(),f=Og(new Pg,a(f),u()),e=e.Ka=f,b=b.$();return d}for(d=Nc(b,d);!b.z();)e=b.Y(),
+d.Ma(a(e)),b=b.$();return d.Ba()}Tv.prototype.$classData=g({x8:0},!1,"org.scalajs.testinterface.TestDetector$",{x8:1,d:1});var Bha=void 0;function $v(){}$v.prototype=new l;$v.prototype.constructor=$v;$v.prototype.b=function(){return this};
+function Gha(a,b){var d=Wv().OW.gc(a+"$");if(d.z()){if(b&&b.$classData&&b.$classData.m.nS)b=b.cX;else throw(new Re).c("Need a ScalaJSClassLoader.");a:{a=(new Tb).c(a);a=bi(a,46);var d=a.n.length,e=0;for(;;){if(e===d)break a;b=b[a.n[e]];e=1+e|0}}b=b()}else b=d.R().Pra();return b}$v.prototype.$classData=g({A8:0},!1,"org.scalajs.testinterface.TestUtils$",{A8:1,d:1});var Hha=void 0;function aw(){this.bv=null}aw.prototype=new l;aw.prototype.constructor=aw;function Iha(){}Iha.prototype=aw.prototype;
+function Jha(a){ba.scalajsCom.init(function(a){return function(d){Kha(a,d)}}(a))}function bw(a){var b=!1,d=null;a:{if(cw(a)&&(b=!0,d=a,void 0===d.Q)){ba.scalajsCom.send("ok:");break a}if(b)ba.scalajsCom.send("ok:"+d.Q);else if(dw(a))a=a.Xk,a=ba.JSON.stringify(ew(fw(),a)),ba.scalajsCom.send("fail:"+a);else throw(new q).i(a);}}aw.prototype.c=function(a){this.bv=Lha(Mha(),a);return this};
+function Nha(a){var b=gw(),d;d=[];for(var e=0,f=a.n.length;e<f;){var h=a.n[e],k=h.Iw,k=ba.JSON.stringify(Oha(Zv(),k)),h=Oha(Zv(),h.Iw),n=gw(),r,y=u();r=Jm(y);r=la(Xa(qa),[r]);var E;E=0;for(y=hv(y);y.ra();){var Q=y.ka();r.n[E]=Q;E=1+E|0}k={serializedTask:k,taskDef:h,tags:hw(n,iw(Ne(),r))};d.push(null===k?null:k);e=1+e|0}a=ka(Xa(Pha),d);return hw(b,iw(Ne(),a))}
+function Kha(a,b){var d=Qha(Ia(),b,58),e=-1===d?b:b.substring(0,d);try{a.AV(e,I(function(a,b,d,e){return function(){if(-1===d)throw(new Re).c(Jv((new Kv).Ea((new J).j([""," needs args"])),(new J).j([e])));return b.substring(1+d|0)}}(a,b,d,e)))}catch(f){if(a=qn(qg(),f),null!==a){b=jw(kw(),a);if(b.z())throw pg(qg(),a);a=b.R();a=ba.JSON.stringify(ew(fw(),a));ba.scalajsCom.send("bad:"+a)}else throw f;}}aw.prototype.init=function(){Jha(this)};function lw(){}lw.prototype=new l;
+lw.prototype.constructor=lw;lw.prototype.b=function(){return this};lw.prototype.$classData=g({C8:0},!1,"org.scalajs.testinterface.internal.EventSerializer$",{C8:1,d:1});var Rha=void 0;function mw(){}mw.prototype=new l;mw.prototype.constructor=mw;mw.prototype.b=function(){return this};
+function Sha(a,b){if(Fha(b))return{fpType:"AnnotatedFingerprint",isModule:b.hr,annotationName:b.Yx};if(Eha(b))return{fpType:"SubclassFingerprint",isModule:b.Cv(),superclassName:b.Ew(),requireNoArgConstructor:b.TF()};throw(new Re).c(Jv((new Kv).Ea((new J).j(["Unknown Fingerprint type: ",""])),(new J).j([oa(b)])));}mw.prototype.$classData=g({D8:0},!1,"org.scalajs.testinterface.internal.FingerprintSerializer$",{D8:1,d:1});var Tha=void 0;function nw(){Tha||(Tha=(new mw).b());return Tha}
+function ow(){}ow.prototype=new l;ow.prototype.constructor=ow;ow.prototype.b=function(){return this};ow.prototype.$classData=g({G8:0},!1,"org.scalajs.testinterface.internal.FrameworkDetector$",{G8:1,d:1});var Uha=void 0;function pw(){}pw.prototype=new l;pw.prototype.constructor=pw;pw.prototype.b=function(){return this};
+function Lha(a,b){a=Wv().vv.gc(b);if(a.z()){a=aa.exportsNamespace;b=(new Tb).c(b);b=bi(b,46);var d=b.n.length,e=0;a:for(;;){if(e!==d){a=a[b.n[e]];e=1+e|0;continue a}break}return new a}return Vha(a.R())}pw.prototype.$classData=g({H8:0},!1,"org.scalajs.testinterface.internal.FrameworkLoader$",{H8:1,d:1});var Wha=void 0;function Mha(){Wha||(Wha=(new pw).b());return Wha}function qw(){this.sV=null}qw.prototype=new l;qw.prototype.constructor=qw;
+function Xha(a){Lha(Mha(),a.sV);a=gw();var b=Dha(),d;d=[];for(var e=0,f=b.n.length;e<f;){var h=b.n[e],h=Sha(nw(),h);d.push(null===h?null:h);e=1+e|0}b=ka(Xa(Yha),d);a={name:"utest",fingerprints:hw(a,iw(Ne(),b))};ba.scalajsCom.send(ba.JSON.stringify(a))}function Zha(a){ba.scalajsCom.init(function(){return function(){}}(a));Xha(a);ba.scalajsCom.close()}qw.prototype.c=function(a){this.sV=a;return this};qw.prototype.initAndSend=function(){Zha(this)};
+qw.prototype.$classData=g({I8:0},!1,"org.scalajs.testinterface.internal.InfoSender",{I8:1,d:1});function rw(){}rw.prototype=new l;rw.prototype.constructor=rw;rw.prototype.b=function(){return this};
+function $ha(a,b){if(b&&b.$classData&&b.$classData.m.NC)return{selType:"SuiteSelector"};if(b&&b.$classData&&b.$classData.m.OC)return{selType:"TestSelector",testName:b.ak};if(b&&b.$classData&&b.$classData.m.KC)return{selType:"NestedSuiteSelector",suiteId:b.$j};if(b&&b.$classData&&b.$classData.m.LC)return{selType:"NestedTestSelector",suiteId:b.$j,testName:b.ak};if(b&&b.$classData&&b.$classData.m.PC)return{selType:"TestWildcardSelector",testWildcard:b.gs};throw(new Re).c(Jv((new Kv).Ea((new J).j(["Unknown Selector type: ",
+""])),(new J).j([oa(b)])));}function aia(a,b){a=b.selType;if("SuiteSelector"===a)return(new sw).b();if("TestSelector"===a)return(new tw).c(b.testName);if("NestedSuiteSelector"===a)return(new uw).c(b.suiteId);if("NestedTestSelector"===a)return(new vw).Kd(b.suiteId,b.testName);if("TestWildcardSelector"===a)return(new ww).c(b.testWildcard);throw(new Re).c(Jv((new Kv).Ea((new J).j(["Unknown Selector type: ",""])),(new J).j([a])));}
+rw.prototype.$classData=g({K8:0},!1,"org.scalajs.testinterface.internal.SelectorSerializer$",{K8:1,d:1});var bia=void 0;function cia(){bia||(bia=(new rw).b());return bia}function xw(){this.dA=!1;this.da=null}xw.prototype=new l;xw.prototype.constructor=xw;function dia(){}dia.prototype=xw.prototype;function eia(a){if(!a.dA)throw(new me).c(Jv((new Kv).Ea((new J).j([""," has been invalidated"])),(new J).j([a])));}xw.prototype.Ey=function(a){if(null===a)throw pg(qg(),null);this.da=a;this.dA=!0;return this};
+function yw(){}yw.prototype=new l;yw.prototype.constructor=yw;yw.prototype.b=function(){return this};
+function Cha(a,b){a=b.selectors;for(var d=[],e=0,f=a.length|0;e<f;){var h=a[e],h=aia(cia(),h);d.push(h);e=1+e|0}a=d.length|0;a=la(Xa(fia),[a]);for(var h=a.n.length,f=e=0,k=d.length|0,h=k<h?k:h,k=a.n.length,h=h<k?h:k;e<h;)a.n[f]=d[e],e=1+e|0,f=1+f|0;d=new zw;e=b.fullyQualifiedName;nw();f=b.fingerprint;h=f.fpType;if("AnnotatedFingerprint"===h)h=f.annotationName,k=new Aw,k.hr=!!f.isModule,k.Yx=h,f=k;else if("SubclassFingerprint"===h){var h=f.superclassName,k=!!f.requireNoArgConstructor,n=new Bw;n.hr=
+!!f.isModule;n.j_=h;n.XX=k;f=n}else throw(new Re).c(Jv((new Kv).Ea((new J).j(["Unknown Fingerprint type: ",""])),(new J).j([h])));b=!!b.explicitlySpecified;d.Ok=e;d.hq=f;d.es=b;d.fs=a;if(null===e)throw(new Ce).c("fullyQualifiedName was null");if(null===f)throw(new Ce).c("fingerprint was null");if(null===a)throw(new Ce).c("selectors was null");return d}
+function Oha(a,b){a=b.Ok;var d=Sha(nw(),b.hq),e=b.es,f=gw();b=b.fs;var h;h=[];for(var k=0,n=b.n.length;k<n;){var r=b.n[k],r=$ha(cia(),r);h.push(null===r?null:r);k=1+k|0}b=ka(Xa(Yha),h);return{fullyQualifiedName:a,fingerprint:d,explicitlySpecified:e,selectors:hw(f,iw(Ne(),b))}}yw.prototype.$classData=g({P8:0},!1,"org.scalajs.testinterface.internal.TaskDefSerializer$",{P8:1,d:1});var gia=void 0;function Zv(){gia||(gia=(new yw).b());return gia}function Cw(){}Cw.prototype=new l;
+Cw.prototype.constructor=Cw;Cw.prototype.b=function(){return this};function ew(a,b){var d=oa(b).l(),e=b.Vf(),f=b.l(),h=gw(),k=Dw(b),n;n=[];for(var r=0,y=k.n.length;r<y;){var E;E=k.n[r];E={className:E.hp,methodName:E.tt,fileName:E.Us,lineNumber:E.rt};n.push(null===E?null:E);r=1+r|0}k=ka(Xa(Yha),n);d={"class":d,message:e,toString:f,stackTrace:hw(h,iw(Ne(),k))};null!==b.Mf&&(d.cause=ew(a,b.Mf));return d}
+Cw.prototype.$classData=g({Q8:0},!1,"org.scalajs.testinterface.internal.ThrowableSerializer$",{Q8:1,d:1});var hia=void 0;function fw(){hia||(hia=(new Cw).b());return hia}function hr(a,b){if(Ew(a))return b.il(a.W);if(a&&a.$classData&&a.$classData.m.HC)return Fw(),a=Gw(Hw(),se(a.mp)),Iw(0,a);throw(new q).i(a);}var iia=g({Po:0},!0,"play.api.libs.json.JsValue",{Po:1,sn:1});function Jw(){}Jw.prototype=new l;Jw.prototype.constructor=Jw;Jw.prototype.b=function(){return this};
+function Kw(a){var b=jia();return kia(b,a,!1,0,m(new p,function(){return function(){return""}}(b)),!1,":",(new bc).Id("[",",","]"))}
+function lia(a,b){if(null===b)return mia();if(vg(b))return(new Lw).c(b);if("number"===typeof b){var d=+b;a=Mw();return Nw(new Ow,Pw(d,a.lk))}if(xa(b))return d=+b,a=Mw(),Nw(new Ow,Pw(d,a.lk));if(Qa(b))return d=b|0,a=Mw(),Nw(new Ow,nia(a,d,a.lk));if(Da(b))return a=Ra(b),d=a.ia,a=a.oa,b=Mw(),Nw(new Ow,oia(b,(new Xb).ha(d,a)));if(Em(Fm(),!0,b))return pia();if(Em(Fm(),!1,b))return qia();if(b instanceof ba.Array){Ne();for(var d=[],e=0,f=b.length|0;e<f;){var h=lia(a,b[e]);d.push(h);e=1+e|0}a=d.length|0;
+a=la(Xa(iia),[a]);f=a.n.length;e=b=0;h=d.length|0;f=h<f?h:f;h=a.n.length;for(f=f<h?f:h;b<f;)a.n[e]=d[b],b=1+b|0,e=1+e|0;return ria(new Qw,Dt(0,a))}if(b instanceof ba.Object)return sia||(sia=(new Rw).b()),d=(new Sw).Im(b),d=Zb(new $b,d,m(new p,function(){return function(a){return null!==a}}(a))).ya(m(new p,function(a){return function(b){if(null!==b){var d=b.ja();b=lia(a,b.na());return(new w).e(d,b)}throw(new q).i(b);}}(a)),(new Tw).b()),Uw(tia(d));dn(en(),Jv((new Kv).Ea((new J).j(["Unexpected JS value: ",
+""])),(new J).j([b])))}
+function uia(a){a=(new Tb).c(a);for(var b=Ne().qq.gf(a.U),d=0,e=a.U.length|0;d<e;){var f=a.X(d),h=null===f?0:f.W;if(31<h&&127>h)f=(new H).i(Oe(h)).wb();else{var f=(new Kv).Ea((new J).j(["u",""])),h=(+(h>>>0)).toString(16),h=(new Tb).c(h),h=Vw(h),h=(new Tb).c(h),k=Oe(48),n=Ne().qq,n=n.gf(h.Ed()),r=h.sa();n.oc(4<r?r:4);r=4-r|0;for(n.Xb(h.ie());0<r;)n.Ma(k),r=-1+r|0;h=n.Ba();h=(new Tb).c(h);h=Vw(h);f=Jv(f,(new J).j([h.toUpperCase()]));f=(new Tb).c(f);h=Oe(92);k=Ne().qq;f=Ww(f,h,k);f=(new Tb).c(f)}b.Xb(f.jb());
+d=1+d|0}return b.Ba()}
+function kia(a,b,d,e,f,h,k,n){if(mia()===b)return"null";if(Xw(b))return n=b.W,d?uia(ba.JSON.stringify(n)):ba.JSON.stringify(n);if(Yw(b))return b.W.Hc.l();if(pia().o(b))return"true";if(qia().o(b))return"false";if(via(b))return b=b.W,d=m(new p,function(a,b,d,e,f,h,k){return function(n){return kia(a,n,b,k,d,e,f,h)}}(a,d,f,h,k,n,1+e|0)),a=Nj().pc,kr(b,d,a).Qc(n.Oa,n.fb,n.Gf);if(ex(b)){b=b.Uw;var r=1+e|0;if(h){var y=Jv((new Kv).Ea((new J).j(["\\n",""])),(new J).j([f.y(r)])),E=Jv((new Kv).Ea((new J).j(["\\n","}"])),
+(new J).j([f.y(e)]));e=y;y=E}else e=f.y(r),y="}";n=m(new p,function(a,b,d,e,f,h,k,n){return function(r){if(null!==r){var y=r.ja();r=r.na();return Jv((new Kv).Ea((new J).j(["","","","",""])),(new J).j([n,b?uia(ba.JSON.stringify(y)):ba.JSON.stringify(y),f,kia(a,r,b,k,d,e,f,h)]))}throw(new q).i(r);}}(a,d,f,h,k,n,r,e));d=Mc().s;return kr(b,n,d).Qc("{",",",y)}throw(new q).i(b);}Jw.prototype.$classData=g({l9:0},!1,"play.api.libs.json.StaticBinding$",{l9:1,d:1});var wia=void 0;
+function jia(){wia||(wia=(new Jw).b());return wia}function Fha(a){return!!(a&&a.$classData&&a.$classData.m.m9)}function fx(){}fx.prototype=new l;fx.prototype.constructor=fx;function gx(){}gx.prototype=fx.prototype;var fia=g({ps:0},!1,"sbt.testing.Selector",{ps:1,d:1});fx.prototype.$classData=fia;function Eha(a){return!!(a&&a.$classData&&a.$classData.m.MC)}function hx(a){a.Zp(xia(a))}function ix(a){a.ow(yia(a))}function jx(){}jx.prototype=new l;jx.prototype.constructor=jx;function zia(){}
+zia.prototype=jx.prototype;jx.prototype.b=function(){(new kx).LE(this);(new lx).LE(this);return this};function mx(){}mx.prototype=new l;mx.prototype.constructor=mx;function Aia(){}Aia.prototype=mx.prototype;function Bia(a,b,d){var e=a.nn;d=se(d);return e.sc(d,I(function(a,b){return function(){return b}}(a,b)))}function nx(){}nx.prototype=new l;nx.prototype.constructor=nx;function Cia(){}Cia.prototype=nx.prototype;function ox(){}ox.prototype=new l;ox.prototype.constructor=ox;function Dia(){}
+Dia.prototype=ox.prototype;ox.prototype.b=function(){(new px).ME(this);return this};function qx(){}qx.prototype=new l;qx.prototype.constructor=qx;function rx(){}rx.prototype=qx.prototype;qx.prototype.wb=function(){return this.Ty(m(new p,function(){return function(a){return a}}(this)),Eia()).st()};function sx(){this.ea=null}sx.prototype=new l;sx.prototype.constructor=sx;function tx(){}tx.prototype=sx.prototype;
+function Fia(a,b){ux();b=(new vx).nc(b);return a.Yh(m(new p,function(a,b){return function(){return U(b)}}(a,b)),ub(new vb,function(a,b){return function(f,h){return wx(U(b),I(function(a,b){return function(){return b}}(a,h)))}}(a,b)),xx(function(a,b){return function(f,h,k,n){return U(b).Yh(m(new p,function(a){return function(){return a}}(a)),ub(new vb,function(a){return function(b,d){return yx(a,I(function(a,b){return function(){return b}}(a,d)))}}(a)),xx(function(a,b,d,e,f){return function(h,k,n,Ca){h=
+a.ea.Tl().sc(b,I(function(a,b){return function(){return b}}(a,h)));return zx(new Ax,h,d,I(function(a,b,d,e,f){return function(){return Gia(a,se(b),d,e,f)}}(a,e,f,k,n)),Ca,a.ea)}}(a,f,h,k,n)))}}(a,b)))}
+function Hia(a,b,d,e,f,h,k){ux();e=(new vx).nc(e);ux();f=(new vx).nc(f);ux();k=(new vx).nc(k);if(Bx(d)){d=d.Aa;if(Bx(h))return Cx(b,I(function(a,b,d){return function(){return Dx(Ex(),d,U(b),a.ea)}}(a,e,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,f,h.Aa)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Fx(h))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,
+h.Aa,h.Xa)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Hx(h))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h.Aa,h.Xa,h.Qb)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Ix(h))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h.Aa,h.Xa)),I(function(a,
+b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h.Qb,h.Fd)),I(function(a,b){return function(){return U(b)}}(a,k)));throw(new q).i(h);}if(Fx(d)){var n=d.Aa;d=d.Xa;if(Bx(h))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,n,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,f,h.Aa)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Fx(h))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,n,d)),I(function(a,
+b,d,e){return function(){return Gx(Ex(),U(b),d,e,a.ea)}}(a,f,h.Aa,h.Xa)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Hx(h))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,n,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,f,h.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h.Xa,h.Qb)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Ix(h))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),
+d,e,U(b),a.ea)}}(a,e,n,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),d,e,a.ea)}}(a,f,h.Aa,h.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h.Qb,h.Fd)),I(function(a,b){return function(){return U(b)}}(a,k)));throw(new q).i(h);}if(Hx(d)){var n=d.Aa,r=d.Xa;d=d.Qb;if(Bx(h))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n,r,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,e,f,h.Aa)),I(function(a,b){return function(){return U(b)}}(a,
+k)));if(Fx(h))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n,r,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),U(d),a.ea)}}(a,e,f)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h.Aa,h.Xa)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Hx(h))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n,r,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,e,f,h.Aa)),I(function(a,
+b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h.Xa,h.Qb)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Ix(h))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n,r,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,e,f,h.Aa)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h.Xa,h.Qb,h.Fd)),I(function(a,b){return function(){return U(b)}}(a,k)));throw(new q).i(h);}if(Ix(d)){var n=d.Aa,r=d.Xa,y=d.Qb;d=d.Fd;
+if(Bx(h))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n,r,y)),I(function(a,b,d){return function(){return Dx(Ex(),d,U(b),a.ea)}}(a,e,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,f,h.Aa)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Fx(h))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n,r,y)),I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d){return function(){return Dx(Ex(),
+b,d,a.ea)}}(a,h.Aa,h.Xa)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Hx(h))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n,r,y)),I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h.Aa,h.Xa,h.Qb)),I(function(a,b){return function(){return U(b)}}(a,k)));if(Ix(h))return Kx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n,r,y)),
+I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h.Aa,h.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h.Qb,h.Fd)),I(function(a,b){return function(){return U(b)}}(a,k)));throw(new q).i(h);}throw(new q).i(d);}
+function Jx(a,b,d,e,f){ux();f=(new vx).nc(f);ux();b=(new vx).nc(b);ux();d=(new vx).nc(d);ux();e=(new vx).nc(e);return a.Yh(m(new p,function(a,b,d,e,f){return function(){var E=U(d),Q=U(e),R=U(f);return wx(wx(wx(U(b),I(function(a,b){return function(){return b}}(a,R))),I(function(a,b){return function(){return b}}(a,Q))),I(function(a,b){return function(){return b}}(a,E)))}}(a,f,b,d,e)),ub(new vb,function(a,b,d,e,f){return function(E,Q){E=U(d);var R=U(e),da=U(f);return wx(wx(wx(wx(U(b),I(function(a,b){return function(){return b}}(a,
+da))),I(function(a,b){return function(){return b}}(a,R))),I(function(a,b){return function(){return b}}(a,E))),I(function(a,b){return function(){return b}}(a,Q)))}}(a,f,b,d,e)),xx(function(a,b,d,e,f){return function(E,Q,R,da){return U(b).Yh(m(new p,function(a,b,d,e){return function(){return yx(yx(yx(a,I(function(a,b){return function(){return U(b)}}(a,b))),I(function(a,b){return function(){return U(b)}}(a,d))),I(function(a,b){return function(){return U(b)}}(a,e)))}}(a,d,e,f)),ub(new vb,function(a,b,
+d,e){return function(f,h){return yx(yx(yx(yx(a,I(function(a,b){return function(){return U(b)}}(a,b))),I(function(a,b){return function(){return U(b)}}(a,d))),I(function(a,b){return function(){return U(b)}}(a,e))),I(function(a,b){return function(){return b}}(a,h)))}}(a,d,e,f)),xx(function(a,b,d,e,f,h,k,n){return function(r,y,E,R){var Q=a.ea,da=a.ea.cf(a.ea.cf(a.ea.cf(f,U(b)),U(d)),U(e));r=Q.Tl().sc(da,I(function(a,b){return function(){return b}}(a,r)));return zx(new Ax,r,h,I(function(a,b,d,e,f,h,k,
+n){return function(){return Iia(a,se(f),h,I(function(a,b){return function(){return U(b)}}(a,b)),I(function(a,b){return function(){return U(b)}}(a,d)),I(function(a,b){return function(){return U(b)}}(a,e)),k,n)}}(a,b,d,e,k,n,y,E)),R,a.ea)}}(a,d,e,f,E,Q,R,da)))}}(a,f,b,d,e)))}sx.prototype.Dj=function(a){this.ea=a;return this};
+function Cx(a,b,d,e){ux();e=(new vx).nc(e);ux();b=(new vx).nc(b);ux();d=(new vx).nc(d);return a.Yh(m(new p,function(a,b,d,e){return function(){var r=U(d),y=U(e);return wx(wx(U(b),I(function(a,b){return function(){return b}}(a,y))),I(function(a,b){return function(){return b}}(a,r)))}}(a,e,b,d)),ub(new vb,function(a,b,d,e){return function(r,y){r=U(d);var E=U(e);return wx(wx(wx(U(b),I(function(a,b){return function(){return b}}(a,E))),I(function(a,b){return function(){return b}}(a,r))),I(function(a,b){return function(){return b}}(a,
+y)))}}(a,e,b,d)),xx(function(a,b,d,e){return function(r,y,E,Q){return U(b).Yh(m(new p,function(a,b,d){return function(){return yx(yx(a,I(function(a,b){return function(){return U(b)}}(a,b))),I(function(a,b){return function(){return U(b)}}(a,d)))}}(a,d,e)),ub(new vb,function(a,b,d){return function(e,f){return yx(yx(yx(a,I(function(a,b){return function(){return U(b)}}(a,b))),I(function(a,b){return function(){return U(b)}}(a,d))),I(function(a,b){return function(){return b}}(a,f)))}}(a,d,e)),xx(function(a,
+b,d,e,f,h,k){return function(n,r,y,E){var Q=a.ea,dc=a.ea.cf(a.ea.cf(e,U(b)),U(d));n=Q.Tl().sc(dc,I(function(a,b){return function(){return b}}(a,n)));return zx(new Ax,n,f,I(function(a,b,d,e,f,h,k){return function(){return Hia(a,se(e),f,I(function(a,b){return function(){return U(b)}}(a,b)),I(function(a,b){return function(){return U(b)}}(a,d)),h,k)}}(a,b,d,h,k,r,y)),E,a.ea)}}(a,d,e,r,y,E,Q)))}}(a,e,b,d)))}
+function Kx(a,b,d,e,f,h){ux();h=(new vx).nc(h);ux();b=(new vx).nc(b);ux();d=(new vx).nc(d);ux();e=(new vx).nc(e);ux();f=(new vx).nc(f);return a.Yh(m(new p,function(a,b,d,e,f,h){return function(){var R=U(d),da=U(e),ma=U(f),ra=U(h);return wx(wx(wx(wx(U(b),I(function(a,b){return function(){return b}}(a,ra))),I(function(a,b){return function(){return b}}(a,ma))),I(function(a,b){return function(){return b}}(a,da))),I(function(a,b){return function(){return b}}(a,R)))}}(a,h,b,d,e,f)),ub(new vb,function(a,
+b,d,e,f,h){return function(R,da){R=U(d);var ma=U(e),ra=U(f),Ca=U(h);return wx(wx(wx(wx(wx(U(b),I(function(a,b){return function(){return b}}(a,Ca))),I(function(a,b){return function(){return b}}(a,ra))),I(function(a,b){return function(){return b}}(a,ma))),I(function(a,b){return function(){return b}}(a,R))),I(function(a,b){return function(){return b}}(a,da)))}}(a,h,b,d,e,f)),xx(function(a,b,d,e,f,h){return function(R,da,ma,ra){return U(b).Yh(m(new p,function(a,b,d,e,f){return function(){return yx(yx(yx(yx(a,
+I(function(a,b){return function(){return U(b)}}(a,b))),I(function(a,b){return function(){return U(b)}}(a,d))),I(function(a,b){return function(){return U(b)}}(a,e))),I(function(a,b){return function(){return U(b)}}(a,f)))}}(a,d,e,f,h)),ub(new vb,function(a,b,d,e,f){return function(h,k){return yx(yx(yx(yx(yx(a,I(function(a,b){return function(){return U(b)}}(a,b))),I(function(a,b){return function(){return U(b)}}(a,d))),I(function(a,b){return function(){return U(b)}}(a,e))),I(function(a,b){return function(){return U(b)}}(a,
+f))),I(function(a,b){return function(){return b}}(a,k)))}}(a,d,e,f,h)),xx(function(a,b,d,e,f,h,k,n,r){return function(y,E,R,Q){var da=a.ea,ma=a.ea.cf(a.ea.cf(a.ea.cf(a.ea.cf(h,U(b)),U(d)),U(e)),U(f));y=da.Tl().sc(ma,I(function(a,b){return function(){return b}}(a,y)));return zx(new Ax,y,k,I(function(a,b,d,e,f,h,k,n,r){return function(){return Jia(a,se(h),k,I(function(a,b){return function(){return U(b)}}(a,b)),I(function(a,b){return function(){return U(b)}}(a,d)),I(function(a,b){return function(){return U(b)}}(a,
+e)),I(function(a,b){return function(){return U(b)}}(a,f)),n,r)}}(a,b,d,e,f,n,r,E,R)),Q,a.ea)}}(a,d,e,f,h,R,da,ma,ra)))}}(a,h,b,d,e,f)))}
+function Iia(a,b,d,e,f,h,k,n){ux();e=(new vx).nc(e);ux();f=(new vx).nc(f);ux();h=(new vx).nc(h);ux();n=(new vx).nc(n);if(Bx(d)){d=d.Aa;if(Bx(k))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,h,k.Aa)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Fx(k))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),
+U(b),d,e,a.ea)}}(a,h,k.Aa,k.Xa)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Hx(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,h,k.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,k.Xa,k.Qb)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Ix(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,
+d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),d,e,a.ea)}}(a,h,k.Aa,k.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,k.Qb,k.Fd)),I(function(a,b){return function(){return U(b)}}(a,n)));throw(new q).i(k);}if(Fx(d)){var r=d.Aa;d=d.Xa;if(Bx(k))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,r,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,f,h,k.Aa)),I(function(a,b){return function(){return U(b)}}(a,
+n)));if(Fx(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,r,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),U(d),a.ea)}}(a,f,h)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,k.Aa,k.Xa)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Hx(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,r,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,f,h,k.Aa)),
+I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,k.Xa,k.Qb)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Ix(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,r,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,f,h,k.Aa)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,k.Xa,k.Qb,k.Fd)),I(function(a,b){return function(){return U(b)}}(a,n)));throw(new q).i(k);}if(Hx(d)){var r=d.Aa,y=
+d.Xa;d=d.Qb;if(Bx(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,r,y,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),U(d),a.ea)}}(a,e,f)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,h,k.Aa)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Fx(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,r,y,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,e,f,h)),
+I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,k.Aa,k.Xa)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Hx(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,r,y,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,e,f,h)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,k.Aa,k.Xa,k.Qb)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Ix(k))return Kx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),
+b,d,e,a.ea)}}(a,r,y,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,e,f,h)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,k.Aa,k.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,k.Qb,k.Fd)),I(function(a,b){return function(){return U(b)}}(a,n)));throw(new q).i(k);}if(Ix(d)){var r=d.Aa,y=d.Xa,E=d.Qb;d=d.Fd;if(Bx(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,r,y,E)),I(function(a,b,d,e){return function(){return Gx(Ex(),
+e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,h,k.Aa)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Fx(k))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,r,y,E)),I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),d,e,a.ea)}}(a,h,k.Aa,k.Xa)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Hx(k))return Kx(b,
+I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,r,y,E)),I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,h,k.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,k.Xa,k.Qb)),I(function(a,b){return function(){return U(b)}}(a,n)));if(Ix(k))return Kx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,r,y,E)),I(function(a,b,d,e){return function(){return Gx(Ex(),
+e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),d,e,a.ea)}}(a,h,k.Aa,k.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,k.Qb,k.Fd)),I(function(a,b){return function(){return U(b)}}(a,n)));throw(new q).i(k);}throw(new q).i(d);}sx.prototype.l=function(){Lx();var a=(new Mx).b();Lx();var b=(new Mx).b();Ex();var d=new Nx;d.Rx=a;d.is=b;Nd(d);Lx();Kia||(Kia=(new Ox).b());a=new Px;a.Wu=b;Nd(a);d.oA=a;return d.$d(this).l()};
+function Gia(a,b,d,e,f){if(Bx(d)){d=d.Aa;if(Bx(e))return e=e.Aa,Qx(b,Dx(Ex(),d,e,a.ea),f);if(Fx(e)){var h=e.Aa;e=e.Xa;return Qx(b,Gx(Ex(),d,h,e,a.ea),f)}if(Hx(e))return Cx(b,I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,d,e.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,e.Xa,e.Qb)),f);if(Ix(e))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,d,e.Aa,e.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,e.Qb,
+e.Fd)),f);throw(new q).i(e);}if(Fx(d)){h=d.Aa;d=d.Xa;if(Bx(e))return e=e.Aa,Qx(b,Gx(Ex(),h,d,e,a.ea),f);if(Fx(e))return Cx(b,I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,e.Aa,e.Xa)),f);if(Hx(e))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h,d,e.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,e.Xa,e.Qb)),f);if(Ix(e))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),
+b,d,e,a.ea)}}(a,h,d,e.Aa)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,e.Xa,e.Qb,e.Fd)),f);throw(new q).i(e);}if(Hx(d)){var h=d.Aa,k=d.Xa;d=d.Qb;if(Bx(e))return Cx(b,I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,h,k)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,d,e.Aa)),f);if(Fx(e))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h,k,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,
+e.Aa,e.Xa)),f);if(Hx(e))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h,k,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,e.Aa,e.Xa,e.Qb)),f);if(Ix(e))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h,k,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,e.Aa,e.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,e.Qb,e.Fd)),f);throw(new q).i(e);}if(Ix(d)){var h=d.Aa,k=d.Xa,
+n=d.Qb;d=d.Fd;if(Bx(e))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h,k,n)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,d,e.Aa)),f);if(Fx(e))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h,k,n)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,d,e.Aa,e.Xa)),f);if(Hx(e))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h,k,n)),I(function(a,b,d){return function(){return Dx(Ex(),
+b,d,a.ea)}}(a,d,e.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,e.Xa,e.Qb)),f);if(Ix(e))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,h,k,n)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,d,e.Aa,e.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,e.Qb,e.Fd)),f);throw(new q).i(e);}throw(new q).i(d);}
+sx.prototype.ta=function(a){this.Yh(m(new p,function(){return function(){}}(this)),ub(new vb,function(a,d){return function(a,b){d.y(b)}}(this,a)),xx(function(a,d){return function(e,f,h,k){f.ta(d);se(h).ta(m(new p,function(a,b){return function(a){a.ta(b)}}(a,d)));k.ta(d)}}(this,a)))};sx.prototype.st=function(){return Lia(Ex(),this.ea).jm(this)};
+function Jia(a,b,d,e,f,h,k,n,r){ux();e=(new vx).nc(e);ux();f=(new vx).nc(f);ux();h=(new vx).nc(h);ux();k=(new vx).nc(k);ux();r=(new vx).nc(r);if(Bx(d)){d=d.Aa;if(Bx(n))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,h,k,n.Aa)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Fx(n))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,
+f,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),U(d),a.ea)}}(a,h,k)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,n.Aa,n.Xa)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Hx(n))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,h,k,n.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,n.Xa,n.Qb)),I(function(a,b){return function(){return U(b)}}(a,
+r)));if(Ix(n))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,h,k,n.Aa)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n.Xa,n.Qb,n.Fd)),I(function(a,b){return function(){return U(b)}}(a,r)));throw(new q).i(n);}if(Fx(d)){var y=d.Aa;d=d.Xa;if(Bx(n))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,y,d)),I(function(a,b,d){return function(){return Dx(Ex(),
+U(b),U(d),a.ea)}}(a,f,h)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,k,n.Aa)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Fx(n))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,y,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,f,h,k)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,n.Aa,n.Xa)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Hx(n))return Jx(b,I(function(a,
+b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,y,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,f,h,k)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n.Aa,n.Xa,n.Qb)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Ix(n))return Kx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,y,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,f,h,k)),I(function(a,b,d){return function(){return Dx(Ex(),
+b,d,a.ea)}}(a,n.Aa,n.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,n.Qb,n.Fd)),I(function(a,b){return function(){return U(b)}}(a,r)));throw(new q).i(n);}if(Hx(d)){var y=d.Aa,E=d.Xa;d=d.Qb;if(Bx(n))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,y,E,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,e,f,h)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,k,n.Aa)),I(function(a,b){return function(){return U(b)}}(a,
+r)));if(Fx(n))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,y,E,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,e,f,h)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),d,e,a.ea)}}(a,k,n.Aa,n.Xa)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Hx(n))return Kx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,y,E,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,
+e,f,h)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,k,n.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,n.Xa,n.Qb)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Ix(n))return Kx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,y,E,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),U(e),a.ea)}}(a,e,f,h)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),d,e,a.ea)}}(a,k,n.Aa,n.Xa)),I(function(a,b,
+d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,n.Qb,n.Fd)),I(function(a,b){return function(){return U(b)}}(a,r)));throw(new q).i(n);}if(Ix(d)){var y=d.Aa,E=d.Xa,Q=d.Qb;d=d.Fd;if(Bx(n))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,y,E,Q)),I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,h,k,n.Aa)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Fx(n))return Kx(b,
+I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,y,E,Q)),I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),U(d),a.ea)}}(a,h,k)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,n.Aa,n.Xa)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Hx(n))return Kx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,y,E,Q)),I(function(a,b,d,e){return function(){return Gx(Ex(),
+e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,h,k,n.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,n.Xa,n.Qb)),I(function(a,b){return function(){return U(b)}}(a,r)));if(Ix(n))return Kx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,y,E,Q)),I(function(a,b,d,e){return function(){return Gx(Ex(),e,U(b),U(d),a.ea)}}(a,e,f,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),U(d),e,a.ea)}}(a,
+h,k,n.Aa)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,n.Xa,n.Qb,n.Fd)),I(function(a,b){return function(){return U(b)}}(a,r)));throw(new q).i(n);}throw(new q).i(d);}
+function yx(a,b){var d=Mia(Ex(),a.ea);ux();b=(new vx).nc(b);return a.Yh(m(new p,function(a,b){return function(d){d=a.ea.cf(d,U(b));return Nia(new Rx,d,I(function(a,b){return function(){return U(b)}}(a,b)),a.ea)}}(a,b)),ub(new vb,function(a,b,d){return function(k,n){k=a.ea.cf(k,U(d));n=Sx(Ex(),n,a.ea);var r=I(function(a,b){return function(){return(new Ld).Dj(b)}}(a,b)),y=Sx(Ex(),U(d),a.ea);return zx(new Ax,k,n,r,y,a.ea)}}(a,d,b)),xx(function(a,b){return function(d,k,n,r){n=se(n);if(Ix(r)){var y=r.Aa,
+E=r.Xa,Q=r.Qb;r=r.Fd;d=a.ea.cf(d,U(b));n=I(function(a,b,d,e,f){return function(){return yx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,d,e,f)))}}(a,n,y,E,Q));r=Oia(Ex(),r,U(b),a.ea);return zx(new Ax,d,k,n,r,a.ea)}d=a.ea.cf(d,U(b));n=I(function(a,b){return function(){return b}}(a,n));r=r.fx(U(b));return zx(new Ax,d,k,n,r,a.ea)}}(a,b)))}
+function Pia(a,b,d,e,f,h){ux();e=(new vx).nc(e);ux();h=(new vx).nc(h);if(Bx(d)){d=d.Aa;if(Bx(f))return f=f.Aa,Qx(b,Gx(Ex(),d,U(e),f,a.ea),I(function(a,b){return function(){return U(b)}}(a,h)));if(Fx(f))return Cx(b,I(function(a,b,d){return function(){return Dx(Ex(),d,U(b),a.ea)}}(a,e,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,f.Aa,f.Xa)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Hx(f))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,U(b),
+e,a.ea)}}(a,e,d,f.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,f.Xa,f.Qb)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Ix(f))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,U(b),e,a.ea)}}(a,e,d,f.Aa)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,f.Xa,f.Qb,f.Fd)),I(function(a,b){return function(){return U(b)}}(a,h)));throw(new q).i(f);}if(Fx(d)){var k=d.Aa;d=d.Xa;if(Bx(f))return Cx(b,I(function(a,b,d){return function(){return Dx(Ex(),
+b,d,a.ea)}}(a,k,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,e,f.Aa)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Fx(f))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,k,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,f.Aa,f.Xa)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Hx(f))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,k,d)),I(function(a,b,
+d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,f.Aa,f.Xa,f.Qb)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Ix(f))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),d,e,U(b),a.ea)}}(a,e,k,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,f.Aa,f.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,f.Qb,f.Fd)),I(function(a,b){return function(){return U(b)}}(a,h)));throw(new q).i(f);}if(Hx(d)){var k=d.Aa,n=d.Xa;d=d.Qb;if(Bx(f))return Cx(b,
+I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,k,n,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,e,f.Aa)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Fx(f))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,k,n,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),d,e,a.ea)}}(a,e,f.Aa,f.Xa)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Hx(f))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),
+b,d,e,a.ea)}}(a,k,n,d)),I(function(a,b,d){return function(){return Dx(Ex(),U(b),d,a.ea)}}(a,e,f.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,f.Xa,f.Qb)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Ix(f))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,k,n,d)),I(function(a,b,d,e){return function(){return Gx(Ex(),U(b),d,e,a.ea)}}(a,e,f.Aa,f.Xa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,f.Qb,f.Fd)),I(function(a,
+b){return function(){return U(b)}}(a,h)));throw(new q).i(f);}if(Ix(d)){var k=d.Aa,n=d.Xa,r=d.Qb;d=d.Fd;if(Bx(f))return Cx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,k,n,r)),I(function(a,b,d,e){return function(){return Gx(Ex(),d,U(b),e,a.ea)}}(a,e,d,f.Aa)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Fx(f))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,k,n,r)),I(function(a,b,d){return function(){return Dx(Ex(),d,U(b),a.ea)}}(a,
+e,d)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,f.Aa,f.Xa)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Hx(f))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,k,n,r)),I(function(a,b,d,e){return function(){return Gx(Ex(),d,U(b),e,a.ea)}}(a,e,d,f.Aa)),I(function(a,b,d){return function(){return Dx(Ex(),b,d,a.ea)}}(a,f.Xa,f.Qb)),I(function(a,b){return function(){return U(b)}}(a,h)));if(Ix(f))return Jx(b,I(function(a,b,d,e){return function(){return Gx(Ex(),
+b,d,e,a.ea)}}(a,k,n,r)),I(function(a,b,d,e){return function(){return Gx(Ex(),d,U(b),e,a.ea)}}(a,e,d,f.Aa)),I(function(a,b,d,e){return function(){return Gx(Ex(),b,d,e,a.ea)}}(a,f.Xa,f.Qb,f.Fd)),I(function(a,b){return function(){return U(b)}}(a,h)));throw(new q).i(f);}throw(new q).i(d);}
+function Qx(a,b,d){ux();d=(new vx).nc(d);return a.Yh(m(new p,function(a,b,d){return function(){return wx(U(d),I(function(a,b){return function(){return b}}(a,b)))}}(a,b,d)),ub(new vb,function(a,b,d){return function(k,n){return wx(wx(U(d),I(function(a,b){return function(){return b}}(a,b))),I(function(a,b){return function(){return b}}(a,n)))}}(a,b,d)),xx(function(a,b,d){return function(k,n,r,y){return U(d).Yh(m(new p,function(a,b){return function(){return yx(a,I(function(a,b){return function(){return b}}(a,
+b)))}}(a,b)),ub(new vb,function(a,b){return function(d,e){return yx(yx(a,I(function(a,b){return function(){return b}}(a,b))),I(function(a,b){return function(){return b}}(a,e)))}}(a,b)),xx(function(a,b,d,e,f,h){return function(k,n,r,y){var Wb=a.ea,zc=a.ea.cf(d,b);k=Wb.Tl().sc(zc,I(function(a,b){return function(){return b}}(a,k)));return zx(new Ax,k,e,I(function(a,b,d,e,f,h){return function(){return Pia(a,se(d),e,I(function(a,b){return function(){return b}}(a,b)),f,h)}}(a,b,f,h,n,r)),y,a.ea)}}(a,b,
+k,n,r,y)))}}(a,b,d)))}
+function wx(a,b){var d=Mia(Ex(),a.ea);ux();b=(new vx).nc(b);return a.Yh(m(new p,function(a,b){return function(d){d=a.ea.cp(U(b),d);return Nia(new Rx,d,I(function(a,b){return function(){return U(b)}}(a,b)),a.ea)}}(a,b)),ub(new vb,function(a,b,d){return function(k,n){k=a.ea.cp(U(d),k);var r=Sx(Ex(),U(d),a.ea),y=I(function(a,b){return function(){return(new Ld).Dj(b)}}(a,b));n=Sx(Ex(),n,a.ea);return zx(new Ax,k,r,y,n,a.ea)}}(a,d,b)),xx(function(a,b){return function(d,k,n,r){n=se(n);if(Ix(k)){var y=k.Aa,
+E=k.Xa,Q=k.Qb;k=k.Fd;d=a.ea.cp(U(b),d);y=Oia(Ex(),U(b),y,a.ea);return zx(new Ax,d,y,I(function(a,b,d,e,f){return function(){var h=Gx(Ex(),d,e,f,a.ea);return wx(b,I(function(a,b){return function(){return b}}(a,h)))}}(a,n,E,Q,k)),r,a.ea)}E=a.ea.cp(U(b),d);Q=U(b);k=k.jx(Q);return zx(new Ax,E,k,I(function(a,b){return function(){return b}}(a,n)),r,a.ea)}}(a,b)))}function Tx(){}Tx.prototype=new l;Tx.prototype.constructor=Tx;function Qia(){}Qia.prototype=Tx.prototype;
+function Mia(a,b){return Ria(new Ux,m(new p,function(a){return function(b){return b.oE(Yt(function(){return function(a){return a}}(a)),xx(function(){return function(a){return a}}(a)))}}(a)),b.Tl())}function Lia(a,b){return Ria(new Ux,m(new p,function(a){return function(b){return b.Yh(m(new p,function(){return function(a){return a}}(a)),ub(new vb,function(){return function(a){return a}}(a)),xx(function(){return function(a){return a}}(a)))}}(a)),b.Tl())}
+function Vx(a,b){return a.Ri(b,(x(),(new mc).b()),ub(new vb,function(){return function(a,b){return a.Ma(b)}}(a))).Ba()}function Wx(a){a.jl(Sia(a))}function Tia(a,b,d,e){e=m(new p,function(a,b){return function(a){Xx();var d=Uia;Via||(Via=(new Yx).b());d=d(Via,b);a=tb(d).y(a);return(new Zx).Kn(a)}}(a,e));Wia||(Wia=(new $x).b());var f=Xx(),f=(new ay).ME(f);return a.sk(b,e,Xia(f)).Ar.y(d)}function by(){}by.prototype=new l;by.prototype.constructor=by;function cy(){}cy.prototype=by.prototype;
+function Yia(a,b){for(;;){var d=a;if(Zia(d))return(new dy).i(d.ga);if($ia(d))return(new ey).i(b.hd(d.ga,m(new p,function(){return function(a){return(new fy).i(a)}}(a))));if(aja(d)){var e=d.ss;if(Zia(e))a=d.sp.y(e.ga);else{if($ia(e))return(new ey).i(b.hd(e.ga,d.sp));if(aja(e))a=gy(new hy,e.ss,m(new p,function(a,b,d){return function(a){a=b.sp.y(a);return gy(new hy,a,d.sp)}}(a,e,d)));else throw(new q).i(e);}}else throw(new q).i(d);}}
+function bja(a,b){return gy(new hy,a,m(new p,function(a,b){return function(a){return(new fy).i(b.y(a))}}(a,b)))}function iy(){}iy.prototype=new l;iy.prototype.constructor=iy;function cja(){}cja.prototype=iy.prototype;function jy(a,b){return m(new p,function(a,b){return function(f){return a.hd(f,b)}}(a,b))}function ky(a){a.mh(dja(a))}function ly(){}ly.prototype=new l;ly.prototype.constructor=ly;function eja(){}eja.prototype=ly.prototype;function my(){}my.prototype=new l;my.prototype.constructor=my;
+function fja(){}fja.prototype=my.prototype;function ny(){}ny.prototype=new l;ny.prototype.constructor=ny;function gja(){}gja.prototype=ny.prototype;function hja(a,b){return(new oy).Kn(m(new p,function(a,b){return function(f){return b.y(m(new p,function(a,b){return function(d){return py(a,d,b)}}(a,f)))}}(a,b)))}function py(a,b,d){return d.Fj(d.hd(a.qE().y(d),m(new p,function(a,b){return function(a){return a.y(b)}}(a,b))))}
+function ija(a,b,d){return hja(a,m(new p,function(a,b,d){return function(k){return m(new p,function(a,b,d,e){return function(f){return d.hd(e.y(f),m(new p,function(a,b){return function(a){return(new w).e(a.ja(),b.y(a.na()))}}(a,b)))}}(a,b,d,k))}}(a,b,d)))}function jja(a,b){var d=kja();return(new oy).Kn(m(new p,function(a,b,d){return function(){return m(new p,function(a,b,d){return function(e){return d.Yd(I(function(a,b,d){return function(){return py(a,d,b)}}(a,b,e)))}}(a,b,d))}}(a,b,d)))}
+function lja(a,b,d){return hja(a,m(new p,function(a,b,d){return function(k){return m(new p,function(a,b,d,e){return function(f){return d.yh(e.y(f),m(new p,function(a,b,d){return function(e){var f=b.y(e.na()).qE().y(d);return d.yh(f,m(new p,function(a,b){return function(a){return a.y(b.ja())}}(a,e)))}}(a,b,d)))}}(a,b,d,k))}}(a,b,d)))}function qy(){}qy.prototype=new l;qy.prototype.constructor=qy;function mja(){}mja.prototype=qy.prototype;function ry(a){a.Kt((new sy).NE(a));a.Jt((new ty).NE(a))}
+function nja(a){a.jG((new uy).OE(a));a.iG((new vy).OE(a))}function wy(){}wy.prototype=new l;wy.prototype.constructor=wy;function oja(){}oja.prototype=wy.prototype;function xy(){}xy.prototype=new l;xy.prototype.constructor=xy;function pja(){}pja.prototype=xy.prototype;function yy(){}yy.prototype=new l;yy.prototype.constructor=yy;function qja(){}qja.prototype=yy.prototype;yy.prototype.b=function(){var a=new zy;Cd(a);ix(a);return this};function Ay(){}Ay.prototype=new l;Ay.prototype.constructor=Ay;
+function rja(){}rja.prototype=Ay.prototype;function By(a){a.Rf(sja(a))}function Cy(){}Cy.prototype=new l;Cy.prototype.constructor=Cy;function tja(){}tja.prototype=Cy.prototype;function Dy(){}Dy.prototype=new l;Dy.prototype.constructor=Dy;Dy.prototype.b=function(){uja=this;(new Ey).b();return this};Dy.prototype.$classData=g({X$:0},!1,"scalaz.Need$",{X$:1,d:1});var uja=void 0;function ux(){uja||(uja=(new Dy).b())}function Fy(){}Fy.prototype=new l;Fy.prototype.constructor=Fy;function vja(){}
+vja.prototype=Fy.prototype;Fy.prototype.Dj=function(){return this};Fy.prototype.ta=function(a){this.oE(Yt(function(a,d){return function(a,b,h){d.y(se(b));d.y(se(h))}}(this,a)),xx(function(a,d){return function(a,b,h,k){d.y(se(b));d.y(se(h));d.y(se(k))}}(this,a)))};function Rp(){this.Sc=this.Ic=null}Rp.prototype=new l;Rp.prototype.constructor=Rp;c=Rp.prototype;c.o=function(a){if(a&&a.$classData&&a.$classData.m.TS){var b=Ys(this);a=Ys(a);return null===b?null===a:b.o(a)}return!1};
+function Ys(a){return(new Pp).Vb(a.Ic,a.Sc)}c.l=function(){return"NonEmpty"+(new Pp).Vb(this.Ic,this.Sc)};
+function wja(a,b,d){var e=a.Sc;if(Qp(e))return d.hd(b.y(a.Ic),m(new p,function(){return function(a){Lp();var b=Np().Wd;return(new Rp).Vb(a,b)}}(a)));if(Op(e))return Gy(d,I(function(a,b){return function(){return b.y(a.Ic)}}(a,b)),I(function(a,b,d,e,r){return function(){xja||(xja=(new Hy).b());var a=Np().aF,f=new Iy;f.Hn=a;Ed(f);ky(f);Wx(f);Jy(f);f.Fr(Ky(f));f.Hr(Ly(f));a=(new My).e(e,r);return yja(f,a,b,d)}}(a,b,d,e.gd,e.ld)),ub(new vb,function(){return function(a,b){Lp();return(new Rp).Vb(a,(new Pp).Vb(b.Ic,
+b.Sc))}}(a)));throw(new q).i(e);}function sq(a,b){var d=Ys(a);if(Qp(d))a=b;else if(Op(d))a=d.gd,d=d.ld,Lp(),b=Ys(b),b=zja(d,b),a=(new Rp).Vb(a,b);else throw(new q).i(d);return a}function Jp(a){var b;Aja||(Aja=(new Ny).b());b=Aja;Lp();var d=b.y(a.Ic);a=Mp(a.Sc);b=Bja(a,Np().Wd,b);return(new Rp).Vb(d,b)}c.Vb=function(a,b){this.Ic=a;this.Sc=b;return this};c.r=function(){return Ys(this).r()};c.$classData=g({TS:0},!1,"scalaz.NonEmptyList",{TS:1,d:1});function Oy(){}Oy.prototype=new l;
+Oy.prototype.constructor=Oy;function Cja(){}Cja.prototype=Oy.prototype;function Py(){}Py.prototype=new l;Py.prototype.constructor=Py;function Dja(){}Dja.prototype=Py.prototype;function Qy(a){a.zg(Eja(a))}function Ry(a){a.Lt(Fja(a))}function Sy(){}Sy.prototype=new l;Sy.prototype.constructor=Sy;function Gja(){}Gja.prototype=Sy.prototype;function Ty(){}Ty.prototype=new l;Ty.prototype.constructor=Ty;function Hja(){}Hja.prototype=Ty.prototype;
+Ty.prototype.b=function(){Ija();m(new p,function(){return function(a){return!!a}}(this));m(new p,function(){return function(a){return!!a}}(this));Uy();m(new p,function(){return function(a){return a|0}}(this));Uy();m(new p,function(){return function(a){return Oe(null===a?0:a.W)}}(this));Uy();m(new p,function(){return function(a){return a|0}}(this));Uy();m(new p,function(){return function(a){a=Ra(a);return(new Xb).ha(a.ia,a.oa)}}(this));Uy();m(new p,function(){return function(a){return a|0}}(this));
+Uy();m(new p,function(){return function(a){return a}}(this));Jja||(Jja=(new Vy).b());return this};function Eia(){var a;Kja||(Kja=(new Wy).b());a=Kja;var b=m(new p,function(){return function(a){var b=u();return Og(new Pg,a,b)}}(a));a=m(new p,function(a){return function(b){return m(new p,function(a,b){return function(a){return Og(new Pg,b,a)}}(a,b))}}(a));var d=pq(),d=(new qq).nv(d);return Lja(b,a,d)}function Xy(){}Xy.prototype=new l;Xy.prototype.constructor=Xy;
+Xy.prototype.b=function(){Mja=this;(new Yy).b();return this};Xy.prototype.$classData=g({vaa:0},!1,"scalaz.Show$",{vaa:1,d:1});var Mja=void 0;function Lx(){Mja||(Mja=(new Xy).b())}function Nja(a,b){a=m(new p,function(a,b){return function(a){a=b.y(a);return(new w).e(a,void 0)}}(a,b));b=Zy().ug;return $y(new az,a,b)}function bz(){}bz.prototype=new l;bz.prototype.constructor=bz;
+bz.prototype.b=function(){Oja=this;(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();(new cz).b();return this};bz.prototype.$classData=g({Gaa:0},!1,"scalaz.Tags$",{Gaa:1,d:1});var Oja=void 0;function dz(){Oja||(Oja=(new bz).b())}function ez(){this.da=this.ZH=null}ez.prototype=new l;ez.prototype.constructor=ez;
+ez.prototype.$classData=g({Jaa:0},!1,"scalaz.Traverse$Traversal",{Jaa:1,d:1});function fz(){}fz.prototype=new l;fz.prototype.constructor=fz;function Pja(){}Pja.prototype=fz.prototype;function gz(){}gz.prototype=new l;gz.prototype.constructor=gz;function Qja(){}Qja.prototype=gz.prototype;gz.prototype.b=function(){var a=new hz;hx(a);Bd(a);iz(a);return this};function jz(){this.ug=null}jz.prototype=new l;jz.prototype.constructor=jz;
+jz.prototype.b=function(){kz=this;lz||(lz=(new mz).b());this.ug=lz.Cy;Rja||(Rja=(new nz).b());Sja||(Sja=(new oz).b());Tja||(Tja=(new pz).b());Uja||(Uja=(new qz).b());Vja||(Vja=(new rz).b());Wja||(Wja=(new sz).b());Xja();Yja||(Yja=(new tz).b());Zja||(Zja=(new uz).b());$ja||($ja=(new vz).b());return this};jz.prototype.$classData=g({Uaa:0},!1,"scalaz.package$",{Uaa:1,d:1});var kz=void 0;function Zy(){kz||(kz=(new jz).b());return kz}function wz(){}wz.prototype=new l;wz.prototype.constructor=wz;
+wz.prototype.b=function(){return this};function aka(a){Lp();var b=[],d=Np().Wd,e=b.length|0;a:for(;;){if(0!==e){d=(new Pp).Vb(b[-1+e|0],d);e=-1+e|0;continue a}break}return(new Rp).Vb(a,d)}wz.prototype.$classData=g({Cca:0},!1,"scalaz.syntax.NelOps$",{Cca:1,d:1});var bka=void 0;function Yx(){}Yx.prototype=new l;Yx.prototype.constructor=Yx;Yx.prototype.b=function(){return this};function Uia(a,b){return ub(new vb,function(a,b){return function(a,d){return sb(b,d,a)}}(a,b))}
+Yx.prototype.$classData=g({Uca:0},!1,"scalaz.syntax.std.Function2Ops$",{Uca:1,d:1});var Via=void 0;function Qu(){this.eZ=null}Qu.prototype=new l;Qu.prototype.constructor=Qu;Qu.prototype.La=function(a){this.eZ=a;return this};Qu.prototype.$classData=g({Vca:0},!1,"scalaz.syntax.std.OptionOps",{Vca:1,d:1});function xz(){this.Kw=null}xz.prototype=new l;xz.prototype.constructor=xz;
+function cka(a,b){Fc();for(var d=(new J).b(),e=a.Kw,f=b.wb();;)if(nd(f)){if(!di(f))throw(new q).i(f);for(var h=f.Eb,f=f.Ka,h=e.Ad.xE(m(new p,function(a,b){return function(a){return a.W.we()===b}}(a,h))),k=[h],n=0,r=k.length|0;n<r;)d.qa.push(k[n]),n=1+n|0;if(!e.Ad.Fp(h))throw(new yz).Ea(b);e=e.Ad.X(h)}else break;return(new w).e(d,e)}function zz(a){var b=new xz;b.Kw=a;return b}
+function dka(a,b,d,e,f,h,k,n,r,y){var E=b.Lg();if(C()===E)return Az(Bz(),I(function(a,b){return function(){return b}}(a,d)),r);if(Xj(E)){var Q=E.Q,E=zz(Q),R=t(),R=h.yc(e,R.s),Q=Q.W.we(),da=t();return eka(E,f,R,k.yc(Q,da.s),n,y,r).Kl(m(new p,function(a,b,d,e,f,h,k,n,r,y){return function(E){var Q=n.$(),R=x().s;return dka(a,Q,oi(r,E,R),1+y|0,b,d,e,f,h,k)}}(a,f,h,k,n,r,y,b,d,e)),r)}throw(new q).i(E);}
+function fka(a,b,d,e,f,h){e=cka(a,e);if(null===e)throw(new q).i(e);a=e.ja();e=zz(e.na());var k=Cz(Bz(),C());return eka(e,b,a,d,f,k,h)}
+function eka(a,b,d,e,f,h,k){return Az(Bz(),I(function(a,b,d,e,f,h,k){return function(){var ma=gka(),ra=f.y(I(function(a,b,d,e){return function(){return d.Kl(m(new p,function(a,b,d){return function(e){if(C()===e)return Az(Bz(),I(function(a,b){return function(){try{return Cz(Bz(),a.Kw.W.Ara().Qra(b.wb()))}catch(d){var e=qn(qg(),d);if(null!==e)return Bz(),Dz||(Dz=(new Ez).b()),e=(new Fz).Dd(e),hka(ika(),e);throw d;}}}(a,b)),d).Kl(m(new p,function(){return function(a){return a}}(a)),d);if(Xj(e))throw e.Q;
+throw(new q).i(e);}}(a,b,e)),e).Kl(m(new p,function(){return function(a){return a&&a.$classData&&a.$classData.m.WF?a:Cz(Bz(),a)}}(a)),e)}}(a,d,h,k))),Ca=ra.di(m(new p,function(){return function(){return C()}}(a)),k).At(jka(a,e),k),Ca=dka(a,a.Kw.Ad,u(),0,b,d,e,f,k,Ca);return ra.di(m(new p,function(){return function(a){return(new Gz).i(a)}}(a)),k).At(new Hz,k).Kl(m(new p,function(a,b,d,e,f,h){return function(k){return h.di(m(new p,function(a,b,d,e,f){return function(h){a:{var k;if(dw(f)){var n=f.Xk;
+if(n&&n.$classData&&n.$classData.m.sF&&"Boxed Error"===n.Lc){k=(new Fz).Dd(n.Mf);break a}}k=f}var r=gka(),n=a.Kw.W.we(),r=r.dq,y=r.Bo.yo(r.fl),r=y.ia,E=y.oa,y=e.dq,y=y.Bo.yo(y.fl),Q=y.oa,y=r-y.ia|0,E=(-2147483648^y)>(-2147483648^r)?-1+(E-Q|0)|0:E-Q|0,r=new Iz,y=(new Xb).ha(y,E);r.va=n;r.W=k;r.Rv=y;sb(b,d,r);n=new Jz;n.W=r;n.Ad=h;return n}}(a,b,d,f,k)),e)}}(a,b,e,k,ma,Ca)),k)}}(a,b,d,e,f,h,k)),k).Kl(m(new p,function(){return function(a){return a}}(a)),k)}
+xz.prototype.$classData=g({Xca:0},!1,"utest.framework.TestTreeSeq",{Xca:1,d:1});function Kz(){}Kz.prototype=new l;Kz.prototype.constructor=Kz;Kz.prototype.b=function(){Lz=this;var a=(new Mz).hb(100),b=Nz().lu;kka(lka(),a.Ft,b);a=(new Mz).hb(1);b=Nz().nu;kka(lka(),a.Ft,b);return this};Kz.prototype.$classData=g({$ca:0},!1,"utest.package$",{$ca:1,d:1});var Lz=void 0;function Wa(){this.Ni=null}Wa.prototype=new l;Wa.prototype.constructor=Wa;Wa.prototype.tg=function(){return this.Ni.name};
+function Oz(a){return a.Ni.getComponentType()}Wa.prototype.l=function(){return(this.Ni.isInterface?"interface ":this.Ni.isPrimitive?"":"class ")+this.tg()};function Qk(a,b){return a.Ni.isPrimitive||b.Ni.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))):Pk(a,b.Ni.getFakeInstance())}function Pk(a,b){return!!a.Ni.isInstance(b)}
+function nq(a){a=(new Tb).c(a.Ni.name);a=bi(a,46);a=em((new Cm).$h(a));a=(new Tb).c(a);a=bi(a,36);return em((new Cm).$h(a))}Wa.prototype.$classData=g({Hda:0},!1,"java.lang.Class",{Hda:1,d:1});function Pz(){}Pz.prototype=new l;Pz.prototype.constructor=Pz;function mka(){}mka.prototype=Pz.prototype;function Qz(){this.nU=0;this.RX=Rz();this.yX=Rz()}Qz.prototype=new l;Qz.prototype.constructor=Qz;Qz.prototype.$classData=g({Uda:0},!1,"java.lang.Long$StringRadixInfo",{Uda:1,d:1});
+function Sz(){this.wV=this.mp=this.xX=null}Sz.prototype=new l;Sz.prototype.constructor=Sz;Sz.prototype.b=function(){Tz=this;this.xX=(new Uz).qv(!1);this.mp=(new Uz).qv(!0);this.wV=ba.performance?ba.performance.now?function(){Vz();return+ba.performance.now()}:ba.performance.webkitNow?function(){Vz();return+ba.performance.webkitNow()}:function(){Vz();return+(new ba.Date).getTime()}:function(){Vz();return+(new ba.Date).getTime()};return this};
+Sz.prototype.$classData=g({dea:0},!1,"java.lang.System$",{dea:1,d:1});var Tz=void 0;function Vz(){Tz||(Tz=(new Sz).b());return Tz}function Wz(){this.ET=null}Wz.prototype=new l;Wz.prototype.constructor=Wz;Wz.prototype.b=function(){Xz=this;var a=new Yz;a.va="main";this.ET=a;return this};Wz.prototype.$classData=g({fea:0},!1,"java.lang.Thread$",{fea:1,d:1});var Xz=void 0;function Zz(){this.xc=this.zy=null}Zz.prototype=new l;Zz.prototype.constructor=Zz;Zz.prototype.b=function(){this.zy=!1;return this};
+Zz.prototype.nz=function(){this.zy=!1;this.xc=null};Zz.prototype.R=function(){this.zy||$z(this,null);return this.xc};function $z(a,b){a.xc=b;a.zy=!0}Zz.prototype.$classData=g({gea:0},!1,"java.lang.ThreadLocal",{gea:1,d:1});function aA(){}aA.prototype=new l;aA.prototype.constructor=aA;aA.prototype.b=function(){return this};function nka(a,b,d){return b.Ni.newArrayOfThisClass([d])}aA.prototype.$classData=g({iea:0},!1,"java.lang.reflect.Array$",{iea:1,d:1});var oka=void 0;
+function pka(){oka||(oka=(new aA).b());return oka}function bA(){}bA.prototype=new l;bA.prototype.constructor=bA;bA.prototype.b=function(){return this};function qka(a,b){a=null===b.ve?0:Ga(b.ve);b=null===b.W?0:Ga(b.W);return a^b}bA.prototype.$classData=g({kea:0},!1,"java.util.AbstractMap$",{kea:1,d:1});var rka=void 0;function ska(){rka||(rka=(new bA).b());return rka}function cA(){}cA.prototype=new l;cA.prototype.constructor=cA;
+function tka(a,b,d){if(b===d)return!0;if(null!==b&&null!==d&&b.n.length===d.n.length){a=iw(Ne(),b);a=dA(a);a=Ye(new Ze,a,0,a.sa());for(var e=!0;e&&a.ra();)e=a.ka()|0,e=Em(Fm(),b.n[e],d.n[e]);return e}return!1}cA.prototype.b=function(){return this};function uka(a){return m(new p,function(){return function(a){return Ga(a)}}(a))}function vka(a,b,d){a=0;var e=b.n.length;for(;;){if(a===e)return-1-a|0;var f=(a+e|0)>>>1|0,h=b.n[f];if(d<h)e=f;else{if(Em(Fm(),d,h))return f;a=1+f|0}}}
+function wka(a,b,d,e){d=d-b|0;if(2<=d){if(0<e.Ge(a.n[b],a.n[1+b|0])){var f=a.n[b];a.n[b]=a.n[1+b|0];a.n[1+b|0]=f}for(f=2;f<d;){var h=a.n[b+f|0];if(0>e.Ge(h,a.n[-1+(b+f|0)|0])){for(var k=b,n=-1+(b+f|0)|0;1<(n-k|0);){var r=(k+n|0)>>>1|0;0>e.Ge(h,a.n[r])?n=r:k=r}k=k+(0>e.Ge(h,a.n[k])?0:1)|0;for(n=b+f|0;n>k;)a.n[n]=a.n[-1+n|0],n=-1+n|0;a.n[k]=h}f=1+f|0}}}function xka(a,b){a=b.n.length;for(var d=0;d!==a;)b.n[d]=0,d=1+d|0}
+function yka(a,b,d){var e=new eA;e.sU=d;d=b.n.length;16<d?zka(a,b,la(Xa(Va),[b.n.length]),0,d,e):wka(b,0,d,e)}function zka(a,b,d,e,f,h){var k=f-e|0;if(16<k){var n=e+(k/2|0)|0;zka(a,b,d,e,n,h);zka(a,b,d,n,f,h);for(var r=a=e,y=n;a<f;)r<n&&(y>=f||0>=h.Ge(b.n[r],b.n[y]))?(d.n[a]=b.n[r],r=1+r|0):(d.n[a]=b.n[y],y=1+y|0),a=1+a|0;Pa(d,e,b,e,k)}else wka(b,e,f,h)}cA.prototype.$classData=g({lea:0},!1,"java.util.Arrays$",{lea:1,d:1});var Aka=void 0;function fA(){Aka||(Aka=(new cA).b());return Aka}
+function gA(){this.fW=null}gA.prototype=new l;gA.prototype.constructor=gA;gA.prototype.b=function(){hA=this;this.fW=new ba.RegExp("(?:(\\d+)\\$)?([-#+ 0,\\(\x3c]*)(\\d+)?(?:\\.(\\d+))?[%A-Za-z]","g");return this};gA.prototype.$classData=g({qea:0},!1,"java.util.Formatter$",{qea:1,d:1});var hA=void 0;function iA(){this.UW=null}iA.prototype=new l;iA.prototype.constructor=iA;
+function jA(a,b,d,e,f){e=kA(a,d,e,f);if(null===e)throw(new q).i(e);a=e.Oa;d=e.fb|0;e=e.Gf|0;f=t();return(new bc).Id(Bka(a.Tc(b,f.s)),d,e)}function Cka(a,b){a=kA(a,0,1,b).Oa;if(u().o(a))return lA(mA(),"");t();b=(new H).i(a);return null!==b.Q&&0===b.Q.vb(1)?b.Q.X(0):Dka(mA(),a)}
+function Bka(a){a:for(;;){var b=a,d=vm(rc().kn,b);if(!d.z()){var e=d.R().ja(),d=d.R().na(),e=Eka().Ao(e);if(!e.z()&&(e=e.R(),d=vm(rc().kn,d),!d.z())){var f=d.R().ja(),d=d.R().na(),f=Eka().Ao(f);if(!f.z()&&(f=f.R(),!Fka(nA(),e)&&"|"!==e&&!Fka(nA(),f)&&"|"!==f)){a=lA(mA(),""+e+f);b=t();a=d.Tc(a,b.s);continue a}}}b=vm(rc().kn,b);if(!b.z()&&(e=b.R().ja(),b=b.R().na(),b=vm(rc().kn,b),!b.z()&&(d=b.R().ja(),b=b.R().na(),f=mA().Ao(d),!f.z()&&(d=f.R().ja(),f=f.R().na(),oA(d)&&(d=Gka(Hka(),d),!d.z()&&(d=d.R(),
+pA(f)&&""===f.Rp)))))){a=mA().Ao(e);if(!a.z()&&(f=a.R().ja(),a=a.R().na(),oA(f))){e=f;e=(new qA).Kd(e.Wa,""+e.Na+d);a=rA(new sA,e,a);e=t();a=b.Tc(a,e.s);continue a}a=mA().Ao(e);if(!a.z()&&(a=a.R().ja(),tA(a))){a=(new qA).Kd("",d);d=t();e=(new uA).Ea(G(d,(new J).j([e])));a=rA(new sA,a,e);e=t();a=b.Tc(a,e.s);continue a}throw(new q).i(e);}return a}}
+function kA(a,b,d,e){if(b>=(e.length|0))return(new bc).Id(G(t(),u()),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=kA(a,3+b|0,d,e);if(null===f)throw(new q).i(f);var h=f.Oa;d=f.Gf|0;f=1+(f.fb|0)|0;b=65535&(e.charCodeAt(2+b|0)|0);b=(new qA).Kd("(?"+Oe(b),")");h=Ika(Jka(),h);return jA(a,rA(new sA,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=kA(a,1+b|0,1+d|0,e);if(null===f)throw(new q).i(f);h=f.Oa;b=f.Gf|0;f=1+(f.fb|0)|0;d=(new vA).hb(d);h=Ika(Jka(),h);return jA(a,Kka(rA(new sA,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=kA(a,3+b|0,d,e);if(null===h)throw(new q).i(h);d=h.Oa;b=h.Gf|0;h=1+(h.fb|0)|0;return jA(a,Kka(Dka(mA(),d)),h,b,e)}return Lka(a,e,b,d);case 41:return(new bc).Id(G(t(),u()),b,d);case 92:if((e.length|
+0)>=(2+b|0)){h=65535&(e.charCodeAt(1+b|0)|0);if(zh(Ah(),h))a:for(h=1+b|0;;)if(h<(e.length|0)?(f=65535&(e.charCodeAt(h)|0),f=zh(Ah(),f)):f=!1,f)h=1+h|0;else break a;else h=2+b|0;b=e.substring(b,h);return jA(a,lA(mA(),b),h,d,e)}return Lka(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 qA).Kd("",b),f=(new wA).c(""),jA(a,rA(new sA,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 qA).Kd("",b);f=(new wA).c("");return jA(a,rA(new sA,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 jA(a,lA(mA(),b),h,d,e);default:return Lka(a,e,b,d)}}
+function Mka(a,b,d){var e=new iA,f=Cka(e,d.Un.source),h=Nka(d);Oka(f,1);var k=Pka(f),n=m(new p,function(){return function(a){return(new ji).ha(a.ni(),a.na().Xy)}}(e)),r=sp(),r=Qka(r);Rka(f,kr(k,n,r));n=Ska(f);h=new ba.RegExp(n,h);h.lastIndex=b;n=h.exec(a);if(null===n)throw pg(qg(),(new nr).c("[Internal error] Executed '"+h+"' on "+("'"+a+"' at position "+b)+", got an error.\n"+("Original pattern '"+d)+"' did match however."));Tka(f,m(new p,function(a,b){return function(a){a=b[a|0];return void 0===
+a?null:a}}(e,n)));Uka(f,b);a=m(new p,function(){return function(a){return(new ji).ha(a.ni(),a.na().Ua)}}(e));b=sp();b=Qka(b);e.UW=kr(k,a,b);return e}function Lka(a,b,d,e){var f=65535&(b.charCodeAt(d)|0);return jA(a,lA(mA(),""+Oe(f)),1+d|0,e,b)}iA.prototype.$classData=g({Tea:0},!1,"java.util.regex.GroupStartMap",{Tea:1,d:1});function xA(){}xA.prototype=new l;xA.prototype.constructor=xA;xA.prototype.b=function(){return this};
+function Fka(a,b){if(2<=(b.length|0)&&92===(65535&(b.charCodeAt(0)|0))){a=(new Tb).c(b);a=Uj(a);a=(new Tb).c(a);for(b=0;;){if(b<(a.U.length|0))var d=a.X(b),d=null===d?0:d.W,d=!0===zh(Ah(),d);else d=!1;if(d)b=1+b|0;else break}return b===(a.U.length|0)}return!1}xA.prototype.$classData=g({Uea:0},!1,"java.util.regex.GroupStartMap$",{Uea:1,d:1});var Vka=void 0;function nA(){Vka||(Vka=(new xA).b());return Vka}function yA(){}yA.prototype=new l;yA.prototype.constructor=yA;yA.prototype.b=function(){return this};
+function Wka(a){a=a.Rp;if(Fka(nA(),a)){a=a.substring(1);a=(new Tb).c(a);var b=ei();return(new H).i(gi(b,a.U,10))}return C()}yA.prototype.$classData=g({Vea:0},!1,"java.util.regex.GroupStartMap$BackReferenceLeaf$",{Vea:1,d:1});var Xka=void 0;function zA(){}zA.prototype=new l;zA.prototype.constructor=zA;zA.prototype.b=function(){return this};
+function Ika(a,b){var d=b.wb(),e=u(),f=u();a:for(;;){if(!u().o(d)){if(di(d)){var h=d.Eb,d=d.Ka,k=h.hl,n=(new wA).c("|");if(null!==k&&k.o(n)){f=AA(f);e=Og(new Pg,f,e);f=u();continue a}f=Og(new Pg,h,f);continue a}throw(new q).i(d);}d=AA(f);e=AA(Og(new Pg,d,e));break}if(1===Jm(e))return(new uA).Ea(b);a=function(){return function(a){return Dka(mA(),a)}}(a);b=x().s;if(b===x().s)if(e===u())a=u();else{b=e.Y();d=b=Og(new Pg,a(b),u());for(e=e.$();e!==u();)f=e.Y(),f=Og(new Pg,a(f),u()),d=d.Ka=f,e=e.$();a=b}else{for(b=
+Nc(e,b);!e.z();)d=e.Y(),b.Ma(a(d)),e=e.$();a=b.Ba()}return(new BA).Ea(a)}zA.prototype.$classData=g({Wea:0},!1,"java.util.regex.GroupStartMap$CreateParentNode$",{Wea:1,d:1});var Yka=void 0;function Jka(){Yka||(Yka=(new zA).b());return Yka}function sA(){this.hl=this.jo=null;this.Xy=0;this.kr=null;this.Ua=0}sA.prototype=new l;sA.prototype.constructor=sA;function Zka(a,b){var d=a.jo;b=oA(d)&&$ka(ala(),d)?b:null===a.kr?-1:b-(a.kr.length|0)|0;a.Ua=b;bla(a);return a.Ua}
+function Ska(a){var b=a.jo;if(tA(b))b="(";else{if(!oA(b))throw(new q).i(b);b="((?:"+b.Wa}var d=a.hl;if(pA(d))d=d.Rp;else if(CA(d))var d=d.Ad,e=m(new p,function(){return function(a){return Ska(a)}}(a)),f=t(),d="(?:"+d.ya(e,f.s).Zf()+")";else{if(!DA(d))throw(new q).i(d);d=d.Ad;e=m(new p,function(){return function(a){return Ska(a)}}(a));f=t();d="(?:"+d.ya(e,f.s).Ab("|")+")"}a=a.jo;if(tA(a))a=")";else{if(!oA(a))throw(new q).i(a);a=")"+a.Na+")"}return b+d+a}
+sA.prototype.l=function(){return"Node("+this.jo+", "+this.hl+")"};function Rka(a,b){var d=!1,e=null,f=a.hl;a:{if(pA(f)&&(d=!0,e=f,Xka||(Xka=(new yA).b()),e=Wka(e),!e.z())){d=e.R()|0;b=b.gc(d);a.hl=(new wA).c("\\"+(b.z()?0:b.R()));break a}if(!d)if(CA(f))f.Ad.ta(m(new p,function(a,b){return function(a){return Rka(a,b)}}(a,b)));else if(DA(f))f.Ad.ta(m(new p,function(a,b){return function(a){return Rka(a,b)}}(a,b)));else throw(new q).i(f);}return a}
+sA.prototype.qk=function(){return this.Ua+(null===this.kr?0:this.kr.length|0)|0};function Tka(a,b){a.kr=b.y(a.Xy);var d=a.hl;if(!pA(d))if(CA(d))d.Ad.ta(m(new p,function(a,b){return function(a){Tka(a,b)}}(a,b)));else if(DA(d))d.Ad.ta(m(new p,function(a,b){return function(a){Tka(a,b)}}(a,b)));else throw(new q).i(d);}
+function Pka(a){var b=a.jo;if(tA(b)){for(var b=[(new w).e(b.qr,a)],d=fc(new gc,hc()),e=0,f=b.length|0;e<f;)ic(d,b[e]),e=1+e|0;b=d.Va}else{if(!oA(b))throw(new q).i(b);b=Wg(Ne().qi,u())}d=a.hl;if(pA(d))a=Wg(Ne().qi,u());else{if(!CA(d)&&!DA(d))throw(new q).i(d);a=d.Ad.Ib(Wg(Ne().qi,u()),ub(new vb,function(){return function(a,b){return a.Nk(Pka(b))}}(a)))}return b.Nk(a)}
+function bla(a){var b=a.hl;if(!pA(b))if(CA(b))b.Ad.Ib(a.Ua,ub(new vb,function(){return function(a,b){return Uka(b,a|0)}}(a)))|0;else if(DA(b))b.Ad.ta(m(new p,function(a){return function(b){return Uka(b,a.Ua)}}(a)));else throw(new q).i(b);}function rA(a,b,d){a.jo=b;a.hl=d;a.Xy=0;a.kr="";a.Ua=0;return a}
+function Oka(a,b){a.Xy=b;var d=a.hl;if(pA(d))return 1+b|0;if(CA(d))return d.Ad.Ib(1+b|0,ub(new vb,function(){return function(a,b){return Oka(b,a|0)}}(a)))|0;if(!DA(d))throw(new q).i(d);return d.Ad.Ib(1+b|0,ub(new vb,function(){return function(a,b){return Oka(b,a|0)}}(a)))|0}
+function cla(a){var b=a.hl;if(!pA(b))if(CA(b))b.Ad.Si(a.qk(),ub(new vb,function(){return function(a,b){return Zka(a,b|0)}}(a)))|0;else if(DA(b))b.Ad.ta(m(new p,function(a){return function(b){return Zka(b,a.qk())}}(a)));else throw(new q).i(b);}
+function Kka(a){var b=mA().Ao(a);if(!b.z()){var d=b.R().ja(),b=b.R().na();if(tA(d)&&(d=d.qr,CA(b)&&(b=b.Ad,t(),b=(new H).i(b),null!==b.Q&&0===b.Q.vb(1)&&(b=b.Q.X(0),b=Eka().Ao(b),!b.z()))))return a=b.R(),d=(new vA).hb(d),a=(new wA).c(a),rA(new sA,d,a)}return a}function Uka(a,b){a.Ua=null===a.kr?-1:b;var d=a.jo;oA(d)&&!Gka(Hka(),d).z()?cla(a):bla(a);d=a.jo;return oA(d)&&$ka(ala(),d)?b:a.qk()}sA.prototype.$classData=g({Xea:0},!1,"java.util.regex.GroupStartMap$Node",{Xea:1,d:1});function EA(){}
+EA.prototype=new l;EA.prototype.constructor=EA;EA.prototype.b=function(){return this};function lA(a,b){return rA(new sA,(new qA).Kd("",""),(new wA).c(b))}EA.prototype.Ao=function(a){return(new H).i((new w).e(a.jo,a.hl))};function Dka(a,b){return rA(new sA,(new qA).Kd("",""),Ika(Jka(),b))}EA.prototype.$classData=g({Yea:0},!1,"java.util.regex.GroupStartMap$Node$",{Yea:1,d:1});var dla=void 0;function mA(){dla||(dla=(new EA).b());return dla}function FA(){}FA.prototype=new l;FA.prototype.constructor=FA;
+FA.prototype.b=function(){return this};function $ka(a,b){return("(?!"===b.Wa||"(?\x3d"===b.Wa)&&")"===b.Na}FA.prototype.$classData=g({afa:0},!1,"java.util.regex.GroupStartMap$OriginallyWrapped$Absolute$",{afa:1,d:1});var ela=void 0;function ala(){ela||(ela=(new FA).b());return ela}function GA(){}GA.prototype=new l;GA.prototype.constructor=GA;GA.prototype.b=function(){return this};
+function Gka(a,b){if(a=""===b.Wa)fla||(fla=(new HA).b()),a=b.Na,a="?"===a||"??"===a||"*"===a||"+"===a||"*?"===a||"+?"===a||0<=(a.length|0)&&"{"===a.substring(0,1);return a?(new H).i(b.Na):C()}GA.prototype.$classData=g({bfa:0},!1,"java.util.regex.GroupStartMap$OriginallyWrapped$Repeater$",{bfa:1,d:1});var gla=void 0;function Hka(){gla||(gla=(new GA).b());return gla}function IA(){}IA.prototype=new l;IA.prototype.constructor=IA;IA.prototype.b=function(){return this};
+IA.prototype.Ao=function(a){var b=mA().Ao(a);if(!b.z()&&(a=b.R().ja(),b=b.R().na(),oA(a))){var d=a.Na;if(""===a.Wa&&""===d&&pA(b))return(new H).i(b.Rp)}return C()};IA.prototype.$classData=g({cfa:0},!1,"java.util.regex.GroupStartMap$UnwrappedRegexLeaf$",{cfa:1,d:1});var hla=void 0;function Eka(){hla||(hla=(new IA).b());return hla}function JA(){}JA.prototype=new l;JA.prototype.constructor=JA;function ila(){}ila.prototype=JA.prototype;function KA(){}KA.prototype=new l;KA.prototype.constructor=KA;
+function jla(){}jla.prototype=KA.prototype;function LA(){}LA.prototype=new l;LA.prototype.constructor=LA;function kla(){}kla.prototype=LA.prototype;function Dt(a,b){null===b?a=null:0===b.n.length?(MA||(MA=(new NA).b()),a=MA.SH):a=(new ci).$h(b);return a}function nca(a){return null!==a?(new OA).xp(a):null}function wo(){this.da=this.Yl=null}wo.prototype=new l;wo.prototype.constructor=wo;function hea(a,b,d){a.Yl=d;if(null===b)throw pg(qg(),null);a.da=b;return a}
+wo.prototype.$classData=g({nfa:0},!1,"scala.Option$WithFilter",{nfa:1,d:1});function PA(a,b){return m(new p,function(a,b){return function(f){f=a.gb(f,od().Br);return!QA(od(),f)&&(b.y(f),!0)}}(a,b))}function RA(a,b,d){return a.Za(b)?a.y(b):d.y(b)}function SA(){this.ZD=this.GY=this.Br=null}SA.prototype=new l;SA.prototype.constructor=SA;SA.prototype.b=function(){TA=this;this.Br=(new UA).b();this.GY=m(new p,function(){return function(){return!1}}(this));this.ZD=(new VA).b();return this};
+function QA(a,b){return a.Br===b}SA.prototype.$classData=g({ofa:0},!1,"scala.PartialFunction$",{ofa:1,d:1});var TA=void 0;function od(){TA||(TA=(new SA).b());return TA}function WA(){}WA.prototype=new l;WA.prototype.constructor=WA;WA.prototype.b=function(){return this};WA.prototype.$classData=g({zfa:0},!1,"scala.Predef$DummyImplicit",{zfa:1,d:1});function XA(){}XA.prototype=new l;XA.prototype.constructor=XA;XA.prototype.b=function(){return this};function lla(a,b,d){return""+b+d}
+XA.prototype.$classData=g({Afa:0},!1,"scala.Predef$any2stringadd$",{Afa:1,d:1});var mla=void 0;function nla(){mla||(mla=(new XA).b());return mla}function YA(){this.Fu=null}YA.prototype=new l;YA.prototype.constructor=YA;YA.prototype.b=function(){ZA=this;this.Fu=(new Zz).b();return this};YA.prototype.$classData=g({Hfa:0},!1,"scala.concurrent.BlockContext$",{Hfa:1,d:1});var ZA=void 0;function ola(){ZA||(ZA=(new YA).b());return ZA}function $A(){this.yV=null;this.xa=!1}$A.prototype=new l;
+$A.prototype.constructor=$A;$A.prototype.b=function(){return this};function aB(){var a;pla||(pla=(new $A).b());a=pla;a.xa||a.xa||(bB||(bB=(new cB).b()),a.yV=bB.QX,a.xa=!0);return a.yV}$A.prototype.$classData=g({Jfa:0},!1,"scala.concurrent.ExecutionContext$Implicits$",{Jfa:1,d:1});var pla=void 0;function qla(a,b,d){return rla(a,m(new p,function(a,b){return function(d){if(cw(d))return b.y(d.Q);if(dw(d))return a;throw(new q).i(d);}}(a,b)),d)}
+function sla(a,b,d){return tla(a,m(new p,function(a,b){return function(a){return a.SW(b)}}(a,b)),d)}function ula(a,b,d,e){return a.Kl(m(new p,function(a,b,d,e){return function(r){return b.di(m(new p,function(a,b,d){return function(a){return sb(b,d,a)}}(a,d,r)),e)}}(a,b,d,e)),je())}function vla(a,b,d){return a.di(m(new p,function(a,b){return function(a){if(b.y(a))return a;throw(new Bu).c("Future.filter predicate is not satisfied");}}(a,b)),d)}
+function wla(a,b,d){return tla(a,m(new p,function(a,b){return function(a){return a.SX(b)}}(a,b)),d)}function dB(){this.z_=null}dB.prototype=new l;dB.prototype.constructor=dB;
+dB.prototype.b=function(){eB=this;for(var a=[(new w).e(pa(Za),pa(Aa)),(new w).e(pa(bb),pa(ta)),(new w).e(pa($a),pa(xla)),(new w).e(pa(cb),pa(va)),(new w).e(pa(db),pa(wa)),(new w).e(pa(eb),pa(Ea)),(new w).e(pa(fb),pa(ya)),(new w).e(pa(gb),pa(za)),(new w).e(pa(Ya),pa(Ba))],b=fc(new gc,hc()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.z_=Cz(0,void 0);return this};
+function yla(a,b,d,e){return b.Ib(Cz(0,d.gf(b)),ub(new vb,function(a,b){return function(d,e){return d.mH(e,ub(new vb,function(){return function(a,b){return a.Ma(b)}}(a)),b)}}(a,e))).di(m(new p,function(){return function(a){return a.Ba()}}(a)),je())}function Cz(a,b){Dz||(Dz=(new Ez).b());a=(new Gz).i(b);return hka(ika(),a)}function Az(a,b,d){return a.z_.di(m(new p,function(a,b){return function(){return se(b)}}(a,b)),d)}dB.prototype.$classData=g({Kfa:0},!1,"scala.concurrent.Future$",{Kfa:1,d:1});
+var eB=void 0;function Bz(){eB||(eB=(new dB).b());return eB}function Ez(){}Ez.prototype=new l;Ez.prototype.constructor=Ez;Ez.prototype.b=function(){return this};Ez.prototype.$classData=g({Nfa:0},!1,"scala.concurrent.Promise$",{Nfa:1,d:1});var Dz=void 0;function fB(){}fB.prototype=new l;fB.prototype.constructor=fB;fB.prototype.b=function(){return this};function kka(a,b,d){gB();a=b>>31;zla(new hB,(new Xb).ha(b,a),d)}
+fB.prototype.$classData=g({Tfa:0},!1,"scala.concurrent.duration.package$DurationInt$",{Tfa:1,d:1});var Ala=void 0;function lka(){Ala||(Ala=(new fB).b());return Ala}function iB(){}iB.prototype=new l;iB.prototype.constructor=iB;iB.prototype.b=function(){return this};
+function Bla(a){return a&&a.$classData&&a.$classData.m.LG?(new Gz).i(a.gH):Cla(a)?(new Fz).Dd((new jB).$q("Boxed ControlThrowable",a)):Dla(a)?(new Fz).Dd((new jB).$q("Boxed InterruptedException",a)):a&&a.$classData&&a.$classData.m.Lda?(new Fz).Dd((new jB).$q("Boxed Error",a)):(new Fz).Dd(a)}iB.prototype.$classData=g({Vfa:0},!1,"scala.concurrent.impl.Promise$",{Vfa:1,d:1});var kB=void 0;function lB(){}lB.prototype=new l;lB.prototype.constructor=lB;lB.prototype.b=function(){return this};
+function hka(a,b){kB||(kB=(new iB).b());a=dw(b)?Bla(b.Xk):b;if(cw(a))return b=new mB,b.aj=a,b;if(dw(a))return b=new nB,b.aj=a,b;throw(new q).i(a);}lB.prototype.$classData=g({Wfa:0},!1,"scala.concurrent.impl.Promise$KeptPromise$",{Wfa:1,d:1});var Ela=void 0;function ika(){Ela||(Ela=(new lB).b());return Ela}function oB(){}oB.prototype=new l;oB.prototype.constructor=oB;function Fla(){}Fla.prototype=oB.prototype;function pB(){}pB.prototype=new l;pB.prototype.constructor=pB;pB.prototype.b=function(){return this};
+function wca(a,b){return Gla(Hla(b),I(function(a,b){return function(){return wca(vca(),b)}}(a,b)))}pB.prototype.$classData=g({$fa:0},!1,"scala.io.Source$",{$fa:1,d:1});var Ila=void 0;function vca(){Ila||(Ila=(new pB).b());return Ila}function qB(){this.l_=this.Aq=this.hy=this.Ac=this.ED=0;this.da=null}qB.prototype=new l;qB.prototype.constructor=qB;function Jla(){}Jla.prototype=qB.prototype;
+qB.prototype.Yy=function(){var a=this.da.Pf.ka();this.ED=null===a?0:a.W;var a=this.hy,b=this.Aq;this.Ac=1048575<=a?2147481600:a<<11|(2047<b?2047:b);switch(this.ED){case 10:this.Aq=1;this.hy=1+this.hy|0;break;case 9:this.Aq=this.Aq+this.l_|0;break;default:this.Aq=1+this.Aq|0}return this.ED};qB.prototype.vda=function(a){if(null===a)throw pg(qg(),null);this.da=a;this.Ac=0;this.Aq=this.hy=1;this.l_=4;return this};function rB(){this.da=this.Mv=null}rB.prototype=new l;rB.prototype.constructor=rB;
+function Kla(){}Kla.prototype=rB.prototype;rB.prototype.wda=function(a,b){this.Mv=b;if(null===a)throw pg(qg(),null);this.da=a;return this};function sB(){}sB.prototype=new l;sB.prototype.constructor=sB;sB.prototype.b=function(){return this};sB.prototype.$classData=g({qga:0},!1,"scala.math.Ordered$",{qga:1,d:1});var Lla=void 0;function tB(){this.da=this.Mv=null}tB.prototype=new l;tB.prototype.constructor=tB;function Mla(a,b){return 0>a.da.Ge(a.Mv,b)}
+function Nla(a,b){var d=new tB;d.Mv=b;if(null===a)throw pg(qg(),null);d.da=a;return d}tB.prototype.$classData=g({Bga:0},!1,"scala.math.Ordering$Ops",{Bga:1,d:1});function uB(){this.ri=this.GT=this.kn=this.uH=null;this.xa=0}uB.prototype=new l;uB.prototype.constructor=uB;
+uB.prototype.b=function(){vB=this;(new wB).b();Ola||(Ola=(new xB).b());Mc();t();Nj();yB();x();u();Pla||(Pla=(new zB).b());Qla||(Qla=(new AB).b());this.kn=Qla;Rla||(Rla=(new BB).b());this.GT=sg();Sla||(Sla=(new CB).b());this.ri=Mj();Tla||(Tla=(new DB).b());kn();Ula||(Ula=(new EB).b());Vla||(Vla=(new FB).b());Wla||(Wla=(new GB).b());Xla||(Xla=(new HB).b());Lla||(Lla=(new sB).b());Yla||(Yla=(new IB).b());Zla||(Zla=(new JB).b());$la||($la=(new KB).b());ama||(ama=(new LB).b());return this};
+uB.prototype.$classData=g({Gga:0},!1,"scala.package$",{Gga:1,d:1});var vB=void 0;function rc(){vB||(vB=(new uB).b());return vB}function MB(){}MB.prototype=new l;MB.prototype.constructor=MB;MB.prototype.b=function(){bma=this;cma();dma();ema();NB();fma();ri();OB();gma();hma();ima||(ima=(new PB).b());jma();kma||(kma=(new QB).b());lma();mma();return this};MB.prototype.$classData=g({Iga:0},!1,"scala.reflect.ClassManifestFactory$",{Iga:1,d:1});var bma=void 0;function RB(){}RB.prototype=new l;
+RB.prototype.constructor=RB;RB.prototype.b=function(){return this};RB.prototype.$classData=g({Lga:0},!1,"scala.reflect.ManifestFactory$",{Lga:1,d:1});var nma=void 0;function SB(){}SB.prototype=new l;SB.prototype.constructor=SB;SB.prototype.b=function(){oma=this;bma||(bma=(new MB).b());nma||(nma=(new RB).b());return this};SB.prototype.$classData=g({aha:0},!1,"scala.reflect.package$",{aha:1,d:1});var oma=void 0;function pma(){oma||(oma=(new SB).b())}function TB(){}TB.prototype=new l;
+TB.prototype.constructor=TB;TB.prototype.b=function(){return this};function dn(a,b){throw pg(qg(),(new Ag).c(b));}TB.prototype.$classData=g({bha:0},!1,"scala.sys.package$",{bha:1,d:1});var qma=void 0;function en(){qma||(qma=(new TB).b());return qma}function UB(){this.xc=null}UB.prototype=new l;UB.prototype.constructor=UB;UB.prototype.l=function(){return"DynamicVariable("+this.xc+")"};UB.prototype.i=function(a){this.xc=a;return this};
+UB.prototype.$classData=g({cha:0},!1,"scala.util.DynamicVariable",{cha:1,d:1});function VB(){}VB.prototype=new l;VB.prototype.constructor=VB;VB.prototype.b=function(){(new WB).b();return this};VB.prototype.$classData=g({iha:0},!1,"scala.util.control.Breaks",{iha:1,d:1});function Cla(a){return!!(a&&a.$classData&&a.$classData.m.xY)}function XB(){this.gX=null}XB.prototype=new l;XB.prototype.constructor=XB;
+XB.prototype.b=function(){YB=this;this.gX=rma(m(new p,function(){return function(){return!1}}(this)),m(new p,function(){return function(a){throw pg(qg(),a);}}(this)));var a=sma(new ZB,this.gX,C(),tma());dba(a,"\x3cnothing\x3e");return this};function uma(a,b,d){return d.Le(m(new p,function(a,b){return function(a){return Qk(a,oa(b))}}(a,b)))}
+function vma(){var a=$B(),b=(new J).j([pa(wma)]),d=sma(new ZB,(new aC).Ea(b),C(),tma()),a=m(new p,function(){return function(a){return a.tg()}}(a)),e=t(),b=b.ya(a,e.s).Ab(", ");return dba(d,b)}function rma(a,b){var d=(new An).Mg(pa(eq)),e=new bC;e.$V=a;e.yj=b;e.Wu=d;return e}XB.prototype.$classData=g({jha:0},!1,"scala.util.control.Exception$",{jha:1,d:1});var YB=void 0;function $B(){YB||(YB=(new XB).b());return YB}function cC(){}cC.prototype=new l;cC.prototype.constructor=cC;cC.prototype.b=function(){return this};
+function tma(){xma||(xma=(new cC).b());return m(new p,function(){return function(a){$B();return Cla(a)||Dla(a)}}(xma))}cC.prototype.$classData=g({nha:0},!1,"scala.util.control.Exception$Catch$",{nha:1,d:1});var xma=void 0;function dC(){}dC.prototype=new l;dC.prototype.constructor=dC;dC.prototype.b=function(){return this};function jw(a,b){return b&&b.$classData&&b.$classData.m.Jra||b&&b.$classData&&b.$classData.m.Ira||Dla(b)||b&&b.$classData&&b.$classData.m.Hra||Cla(b)?C():(new H).i(b)}
+dC.prototype.$classData=g({rha:0},!1,"scala.util.control.NonFatal$",{rha:1,d:1});var yma=void 0;function kw(){yma||(yma=(new dC).b());return yma}function eC(){}eC.prototype=new l;eC.prototype.constructor=eC;function zma(){}zma.prototype=eC.prototype;eC.prototype.vt=function(a,b){b=ea(-862048943,b);b=ea(461845907,b<<15|b>>>17|0);return a^b};eC.prototype.ca=function(a,b){a=this.vt(a,b);return-430675100+ea(5,a<<13|a>>>19|0)|0};
+function T(a,b){var d=b.v();if(0===d)return a=b.u(),Ha(Ia(),a);for(var e=-889275714,f=0;f<d;)e=a.ca(e,fC(V(),b.w(f))),f=1+f|0;return a.xb(e,d)}function gC(a,b,d){var e=(new hC).hb(0),f=(new hC).hb(0),h=(new hC).hb(0),k=(new hC).hb(1);b.ta(m(new p,function(a,b,d,e,f){return function(a){a=fC(V(),a);b.Ca=b.Ca+a|0;d.Ca^=a;0!==a&&(f.Ca=ea(f.Ca,a));e.Ca=1+e.Ca|0}}(a,e,f,h,k)));b=a.ca(d,e.Ca);b=a.ca(b,f.Ca);b=a.vt(b,k.Ca);return a.xb(b,h.Ca)}
+eC.prototype.xb=function(a,b){a^=b;a=ea(-2048144789,a^(a>>>16|0));a=ea(-1028477387,a^(a>>>13|0));return a^(a>>>16|0)};function Ama(a,b,d){var e=(new hC).hb(0);d=(new hC).hb(d);b.ta(m(new p,function(a,b,d){return function(e){d.Ca=a.ca(d.Ca,fC(V(),e));b.Ca=1+b.Ca|0}}(a,e,d)));return a.xb(d.Ca,e.Ca)}function iC(){}iC.prototype=new l;iC.prototype.constructor=iC;iC.prototype.b=function(){return this};
+function Bma(a,b){a=ea(-1640532531,b);ei();return ea(-1640532531,a<<24|16711680&a<<8|65280&(a>>>8|0)|a>>>24|0)}iC.prototype.$classData=g({tha:0},!1,"scala.util.hashing.package$",{tha:1,d:1});var Cma=void 0;function Dma(){Cma||(Cma=(new iC).b());return Cma}function jC(){}jC.prototype=new l;jC.prototype.constructor=jC;function oea(a,b){return ve(b)?(new H).i((new w).e(b.gl,b.ke)):ue(b)?(new H).i((new w).e(b.gl,b.ke)):C()}jC.prototype.Cp=function(){return this};
+jC.prototype.$classData=g({Dha:0},!1,"scala.util.parsing.combinator.Parsers$NoSuccess$",{Dha:1,d:1});function kC(){this.da=null}kC.prototype=new l;kC.prototype.constructor=kC;function Ema(){}Ema.prototype=kC.prototype;kC.prototype.Cp=function(a){if(null===a)throw pg(qg(),null);this.da=a;return this};function lC(){}lC.prototype=new l;lC.prototype.constructor=lC;function Fma(){}Fma.prototype=lC.prototype;function BB(){}BB.prototype=new l;BB.prototype.constructor=BB;BB.prototype.b=function(){return this};
+BB.prototype.$classData=g({Eha:0},!1,"scala.collection.$colon$plus$",{Eha:1,d:1});var Rla=void 0;function AB(){}AB.prototype=new l;AB.prototype.constructor=AB;AB.prototype.b=function(){return this};function vm(a,b){if(b.z())return C();a=b.Y();b=b.$();return(new H).i((new w).e(a,b))}AB.prototype.$classData=g({Fha:0},!1,"scala.collection.$plus$colon$",{Fha:1,d:1});var Qla=void 0;function mC(){this.Sd=null}mC.prototype=new l;mC.prototype.constructor=mC;
+mC.prototype.b=function(){nC=this;this.Sd=(new oC).b();return this};mC.prototype.$classData=g({Mha:0},!1,"scala.collection.Iterator$",{Mha:1,d:1});var nC=void 0;function yB(){nC||(nC=(new mC).b());return nC}function pC(a,b,d){a.He(b,d,qC(W(),b)-d|0)}function rC(a,b){b=b.Tg();b.Xb(a.jb());return b.Ba()}function Gma(a,b){var d=(new hC).hb(0);a.ta(m(new p,function(a,b,d){return function(a){b.y(a)&&(d.Ca=1+d.Ca|0)}}(a,b,d)));return d.Ca}function ec(a,b,d,e){return a.cg((new Bl).b(),b,d,e).Bb.Yb}
+function Xk(a,b,d){b=(new jl).i(b);a.ta(m(new p,function(a,b,d){return function(a){d.Ca=sb(b,d.Ca,a)}}(a,d,b)));return b.Ca}function Hma(a,b,d){a=Ima(a);var e=b;for(b=a;!b.z();)a=e,e=b.Y(),e=sb(d,e,a),b=b.$();return e}function Fr(a){var b=(new hC).hb(0);a.ta(m(new p,function(a,b){return function(){b.Ca=1+b.Ca|0}}(a,b)));return b.Ca}
+function rg(a,b){var d=(new he).b();try{if(a&&a.$classData&&a.$classData.m.Rc)var e=a;else{if(!(a&&a.$classData&&a.$classData.m.Gb))return a.ta(b.Wm(m(new p,function(a,b){return function(a){throw(new sC).e(b,(new H).i(a));}}(a,d)))),C();e=a.Rg()}for(var f=new tC;e.ra();){var h=b.gb(e.ka(),f);if(h!==f)return(new H).i(h)}return C()}catch(k){if(k&&k.$classData&&k.$classData.m.LG&&k.GW===d)return k.gH;throw k;}}
+function uC(a,b,d,e,f){var h=(new vC).ud(!0);zr(b,d);a.ta(m(new p,function(a,b,d,e){return function(a){if(e.Ca)Ar(b,a),e.Ca=!1;else return zr(b,d),Ar(b,a)}}(a,b,e,h)));zr(b,f);return b}function wC(a,b){return a.Ib(b.Xg(0),ub(new vb,function(a,b){return function(a,d){return b.Jj(a,d)}}(a,b)))}function xC(a,b){return a.Ng()?(b=b.bh(a.Da()),a.Ig(b,0),b):a.ae().Ce(b)}function nd(a){return!a.z()}
+function Ima(a){var b=u(),b=(new jl).i(b);a.ta(m(new p,function(a,b){return function(a){b.Ca=Og(new Pg,a,b.Ca)}}(a,b)));return b.Ca}function Jma(a,b){if(a.z())throw(new Sk).c("empty.reduceLeft");var d=(new vC).ud(!0),e=(new jl).i(0);a.ta(m(new p,function(a,b,d,e){return function(a){d.Ca?(e.Ca=a,d.Ca=!1):e.Ca=sb(b,e.Ca,a)}}(a,b,d,e)));return e.Ca}
+function Kma(a,b){return(new yC).nc(I(function(a,b){return function(){return null===b?null:b&&b.$classData&&b.$classData.m.Lsa&&b.Nsa()===zC()?b.lta():Lma(new AC,zC(),b)}}(a,b)))}function BC(a,b){return(new yC).nc(I(function(a,b){return function(){return null===b?null:b&&b.$classData&&b.$classData.m.hia&&b.lia()===zC()?b.Ola():Mma(new CC,zC(),b)}}(a,b)))}
+function Nma(a,b){return(new yC).nc(I(function(a,b){return function(){return null===b?null:b&&b.$classData&&b.$classData.m.Ksa&&b.Msa()===zC()?b.kta():DC(new EC,zC(),b)}}(a,b)))}function yC(){this.Sm=null}yC.prototype=new l;yC.prototype.constructor=yC;yC.prototype.nc=function(a){this.Sm=a;return this};yC.prototype.$classData=g({eia:0},!1,"scala.collection.convert.Decorators$AsScala",{eia:1,d:1});function FC(){}FC.prototype=new l;FC.prototype.constructor=FC;function Oma(){}Oma.prototype=FC.prototype;
+function Wg(a,b){return a.db().Xb(b).Ba()}FC.prototype.db=function(){return fc(new gc,this.Su())};function GC(){}GC.prototype=new l;GC.prototype.constructor=GC;function Pma(){}Pma.prototype=GC.prototype;function HC(){}HC.prototype=new l;HC.prototype.constructor=HC;function Qma(){}Qma.prototype=HC.prototype;function G(a,b){if(b.z())return a.Wk();a=a.db();a.Xb(b);return a.Ba()}HC.prototype.Wk=function(){return this.db().Ba()};
+function Rma(a,b){var d=a.ad().db();a.jb().ta(m(new p,function(a,b,d){return function(a){return d.Xb(b.y(a).jb())}}(a,b,d)));return d.Ba()}function Sma(a,b){a:for(;;){if(nd(b)){a.cd(b.Y());b=b.$();continue a}break}}function IC(a,b){b&&b.$classData&&b.$classData.m.Vp?Sma(a,b):b.ta(m(new p,function(a){return function(b){return a.cd(b)}}(a)));return a}function JC(){}JC.prototype=new l;JC.prototype.constructor=JC;function Tma(){}Tma.prototype=JC.prototype;function CB(){}CB.prototype=new l;
+CB.prototype.constructor=CB;CB.prototype.b=function(){return this};CB.prototype.$classData=g({lja:0},!1,"scala.collection.immutable.Stream$$hash$colon$colon$",{lja:1,d:1});var Sla=void 0;function KC(){this.WG=null}KC.prototype=new l;KC.prototype.constructor=KC;KC.prototype.nc=function(a){this.WG=a;return this};function Uma(a,b){return LC(new MC,b,a.WG)}function Vma(a,b){return Wma(b,a.WG)}KC.prototype.$classData=g({mja:0},!1,"scala.collection.immutable.Stream$ConsWrapper",{mja:1,d:1});
+function NC(){this.MG=this.xc=null;this.xa=!1;this.da=null}NC.prototype=new l;NC.prototype.constructor=NC;function Xma(a,b,d){a.MG=d;if(null===b)throw pg(qg(),null);a.da=b;return a}function Yma(a){a.xa||(a.xa||(a.xc=se(a.MG),a.xa=!0),a.MG=null);return a.xc}NC.prototype.$classData=g({rja:0},!1,"scala.collection.immutable.StreamIterator$LazyCell",{rja:1,d:1});function OC(){}OC.prototype=new l;OC.prototype.constructor=OC;OC.prototype.b=function(){return this};
+function Le(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)}OC.prototype.$classData=g({tja:0},!1,"scala.collection.immutable.StringOps$",{tja:1,d:1});var Zma=void 0;function Me(){Zma||(Zma=(new OC).b());return Zma}function PC(){}PC.prototype=new l;PC.prototype.constructor=PC;PC.prototype.b=function(){return this};PC.prototype.db=function(){var a=(new Bl).b();return QC(new RC,a,m(new p,function(){return function(a){return(new Ni).c(a)}}(this)))};
+PC.prototype.$classData=g({Bja:0},!1,"scala.collection.immutable.WrappedString$",{Bja:1,d:1});var $ma=void 0;function SC(){}SC.prototype=new l;SC.prototype.constructor=SC;SC.prototype.b=function(){return this};SC.prototype.$classData=g({Fja:0},!1,"scala.collection.mutable.ArrayOps$ofBoolean$",{Fja:1,d:1});var ana=void 0;function TC(){}TC.prototype=new l;TC.prototype.constructor=TC;TC.prototype.b=function(){return this};
+TC.prototype.$classData=g({Gja:0},!1,"scala.collection.mutable.ArrayOps$ofByte$",{Gja:1,d:1});var bna=void 0;function UC(){}UC.prototype=new l;UC.prototype.constructor=UC;UC.prototype.b=function(){return this};UC.prototype.$classData=g({Hja:0},!1,"scala.collection.mutable.ArrayOps$ofChar$",{Hja:1,d:1});var cna=void 0;function VC(){}VC.prototype=new l;VC.prototype.constructor=VC;VC.prototype.b=function(){return this};
+VC.prototype.$classData=g({Ija:0},!1,"scala.collection.mutable.ArrayOps$ofDouble$",{Ija:1,d:1});var dna=void 0;function WC(){}WC.prototype=new l;WC.prototype.constructor=WC;WC.prototype.b=function(){return this};WC.prototype.$classData=g({Jja:0},!1,"scala.collection.mutable.ArrayOps$ofFloat$",{Jja:1,d:1});var ena=void 0;function XC(){}XC.prototype=new l;XC.prototype.constructor=XC;XC.prototype.b=function(){return this};
+XC.prototype.$classData=g({Kja:0},!1,"scala.collection.mutable.ArrayOps$ofInt$",{Kja:1,d:1});var fna=void 0;function YC(){}YC.prototype=new l;YC.prototype.constructor=YC;YC.prototype.b=function(){return this};YC.prototype.$classData=g({Lja:0},!1,"scala.collection.mutable.ArrayOps$ofLong$",{Lja:1,d:1});var gna=void 0;function ZC(){}ZC.prototype=new l;ZC.prototype.constructor=ZC;ZC.prototype.b=function(){return this};
+ZC.prototype.$classData=g({Mja:0},!1,"scala.collection.mutable.ArrayOps$ofRef$",{Mja:1,d:1});var hna=void 0;function $C(){}$C.prototype=new l;$C.prototype.constructor=$C;$C.prototype.b=function(){return this};$C.prototype.$classData=g({Nja:0},!1,"scala.collection.mutable.ArrayOps$ofShort$",{Nja:1,d:1});var ina=void 0;function aD(){}aD.prototype=new l;aD.prototype.constructor=aD;aD.prototype.b=function(){return this};
+aD.prototype.$classData=g({Oja:0},!1,"scala.collection.mutable.ArrayOps$ofUnit$",{Oja:1,d:1});var jna=void 0;function kna(a){return bD(ei(),-1+a.Tb.n.length|0)}function lna(a,b){b=Ve(b);return mna(a,b)}
+function mna(a,b){for(var d=Ga(b),d=cD(a,d),e=a.Tb.n[d];null!==e;){if(Em(Fm(),e,b))return!1;d=(1+d|0)%a.Tb.n.length|0;e=a.Tb.n[d]}a.Tb.n[d]=b;a.df=1+a.df|0;null!==a.zf&&(b=d>>5,d=a.zf,d.n[b]=1+d.n[b]|0);if(a.df>=a.Uj)for(b=a.Tb,a.Tb=la(Xa(Va),[a.Tb.n.length<<1]),a.df=0,null!==a.zf&&(d=1+(a.Tb.n.length>>5)|0,a.zf.n.length!==d?a.zf=la(Xa(db),[d]):xka(fA(),a.zf)),a.Ek=kna(a),a.Uj=nna().Sv(a.Pk,a.Tb.n.length),d=0;d<b.n.length;)e=b.n[d],null!==e&&mna(a,e),d=1+d|0;return!0}
+function cD(a,b){var d=a.Ek;b=Bma(Dma(),b);a=-1+a.Tb.n.length|0;return((b>>>d|0|b<<(-d|0))>>>(32-bD(ei(),a)|0)|0)&a}
+function ona(a,b){b=Ve(b);for(var d=Ga(b),d=cD(a,d),e=a.Tb.n[d];null!==e;){if(Em(Fm(),e,b)){b=d;for(d=(1+b|0)%a.Tb.n.length|0;null!==a.Tb.n[d];){var e=Ga(a.Tb.n[d]),e=cD(a,e),f;if(f=e!==d)f=a.Tb.n.length>>1,f=e<=b?(b-e|0)<f:(e-b|0)>f;f&&(a.Tb.n[b]=a.Tb.n[d],b=d);d=(1+d|0)%a.Tb.n.length|0}a.Tb.n[b]=null;a.df=-1+a.df|0;null!==a.zf&&(a=a.zf,b>>=5,a.n[b]=-1+a.n[b]|0);return!0}d=(1+d|0)%a.Tb.n.length|0;e=a.Tb.n[d]}return!1}
+function pna(a,b){b=Ve(b);for(var d=Ga(b),d=cD(a,d),e=a.Tb.n[d];null!==e&&!Em(Fm(),e,b);)d=(1+d|0)%a.Tb.n.length|0,e=a.Tb.n[d];return e}function dD(){}dD.prototype=new l;dD.prototype.constructor=dD;dD.prototype.b=function(){return this};
+dD.prototype.Sv=function(a,b){if(!(500>a))throw(new eD).i("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,n=a>>>16|0,r=ea(f,k),k=ea(h,k),y=ea(f,n),f=r+((k+y|0)<<16)|0,r=(r>>>16|0)+y|0;a=(((ea(b,e)+ea(d,a)|0)+ea(h,n)|0)+(r>>>16|0)|0)+(((65535&r)+k|0)>>>16|0)|0;return nf(Sa(),f,a,1E3,0)};dD.prototype.$classData=g({Xja:0},!1,"scala.collection.mutable.FlatHashTable$",{Xja:1,d:1});var qna=void 0;
+function nna(){qna||(qna=(new dD).b());return qna}function fD(){}fD.prototype=new l;fD.prototype.constructor=fD;fD.prototype.b=function(){return this};fD.prototype.l=function(){return"NullSentinel"};fD.prototype.r=function(){return 0};fD.prototype.$classData=g({Zja:0},!1,"scala.collection.mutable.FlatHashTable$NullSentinel$",{Zja:1,d:1});var rna=void 0;function oba(){rna||(rna=(new fD).b());return rna}function sna(a){return bD(ei(),-1+a.Tb.n.length|0)}
+function tna(a){for(var b=-1+a.Tb.n.length|0;0<=b;)a.Tb.n[b]=null,b=-1+b|0;a.cq(0);una(a,0)}function vna(a,b,d){for(a=a.Tb.n[d];;)if(null!==a?(d=a.Vi(),d=!Em(Fm(),d,b)):d=!1,d)a=a.ka();else break;return a}function gD(a,b){var d=-1+a.Tb.n.length|0,e=ga(d);a=a.Ek;b=Bma(Dma(),b);return((b>>>a|0|b<<(-a|0))>>>e|0)&d}function wna(a){a.lx(750);hD();a.Fw(la(Xa(qba),[iD(0,16)]));a.cq(0);var b=a.Pk,d=hD();hD();a.Lw(d.Sv(b,iD(0,16)));a.ww(null);a.Ez(sna(a))}
+function jD(a,b){var d=fC(V(),b),d=gD(a,d),e=a.Tb.n[d];if(null!==e){var f=e.Vi();if(Em(Fm(),f,b))return a.Tb.n[d]=e.ka(),a.cq(-1+a.df|0),xna(a,d),e.nr(null),e;for(f=e.ka();;){if(null!==f)var h=f.Vi(),h=!Em(Fm(),h,b);else h=!1;if(h)e=f,f=f.ka();else break}if(null!==f)return e.nr(f.ka()),a.cq(-1+a.df|0),xna(a,d),f.nr(null),f}return null}function kD(a){for(var b=-1+a.Tb.n.length|0;null===a.Tb.n[b]&&0<b;)b=-1+b|0;return b}
+function lD(a,b,d){var e=fC(V(),b),e=gD(a,e),f=vna(a,b,e);if(null!==f)return f;b=a.PD(b,d);yna(a,b,e);return null}function mD(a,b){var d=fC(V(),b),d=gD(a,d);return vna(a,b,d)}
+function yna(a,b,d){b.nr(a.Tb.n[d]);a.Tb.n[d]=b;a.cq(1+a.df|0);zna(a,d);if(a.df>a.Uj){b=a.Tb.n.length<<1;d=a.Tb;a.Fw(la(Xa(qba),[b]));una(a,a.Tb.n.length);for(var e=-1+d.n.length|0;0<=e;){for(var f=d.n[e];null!==f;){var h=f.Vi(),h=fC(V(),h),h=gD(a,h),k=f.ka();f.nr(a.Tb.n[h]);a.Tb.n[h]=f;f=k;zna(a,h)}e=-1+e|0}a.Lw(hD().Sv(a.Pk,b))}}function xna(a,b){null!==a.zf&&(a=a.zf,b>>=5,a.n[b]=-1+a.n[b]|0)}function una(a,b){null!==a.zf&&(b=1+(b>>5)|0,a.zf.n.length!==b?a.ww(la(Xa(db),[b])):xka(fA(),a.zf))}
+function zna(a,b){null!==a.zf&&(a=a.zf,b>>=5,a.n[b]=1+a.n[b]|0)}function nD(){}nD.prototype=new l;nD.prototype.constructor=nD;nD.prototype.b=function(){return this};function iD(a,b){return 1<<(-ga(-1+b|0)|0)}nD.prototype.Sv=function(a,b){var d=b>>31,e=a>>31,f=65535&b,h=b>>>16|0,k=65535&a,n=a>>>16|0,r=ea(f,k),k=ea(h,k),y=ea(f,n),f=r+((k+y|0)<<16)|0,r=(r>>>16|0)+y|0;a=(((ea(b,e)+ea(d,a)|0)+ea(h,n)|0)+(r>>>16|0)|0)+(((65535&r)+k|0)>>>16|0)|0;return nf(Sa(),f,a,1E3,0)};
+nD.prototype.$classData=g({gka:0},!1,"scala.collection.mutable.HashTable$",{gka:1,d:1});var Ana=void 0;function hD(){Ana||(Ana=(new nD).b());return Ana}function oD(){this.xd=0;this.fE=this.DD=this.Vd=this.Sh=null}oD.prototype=new l;oD.prototype.constructor=oD;c=oD.prototype;c.NV=function(a,b,d,e,f){this.xd=a;this.Sh=b;this.Vd=d;this.DD=e;this.fE=f;return this};c.X=function(a){var b=this;for(;;){if(a<b.xd)return pD(W(),b.Sh,a);a=a-b.xd|0;b=b.Vd}};
+c.Bf=function(a,b){var d=this;a:for(;;){if(a<d.xd)qD(W(),d.Sh,a,b);else{a=a-d.xd|0;d=d.Vd;continue a}break}};
+c.l=function(){Ne();var a=iw(Ne(),this.Sh),b=iw(0,rD(a,0,this.xd)),d=(new Tb).c("Unrolled@%08x"),e=[Ka(this)];Ia();var f=d.U;t();hn();for(var h=[],k=0,n=e.length|0;k<n;){var r=e[k];h.push(Bna(r)?r.y_():r);k=1+k|0}jma();for(var y=h.length|0,E=la(Xa(Va),[y]),Q=E.n.length,R=0,da=0,ma=h.length|0,ra=ma<Q?ma:Q,Ca=E.n.length,ab=ra<Ca?ra:Ca;R<ab;)E.n[da]=h[R],R=1+R|0,da=1+da|0;var hb=(new sD).b();if(hb.Fv)throw(new tD).b();for(var mb=0,Wb=0,zc=f.length|0,xb=0;xb!==zc;){var Wc=f.indexOf("%",xb)|0;if(0>Wc){uD(hb,
+f.substring(xb));break}uD(hb,f.substring(xb,Wc));var dc=1+Wc|0;hA||(hA=(new gA).b());var le=hA.fW;le.lastIndex=dc;var qd=le.exec(f);if(null===qd||(qd.index|0)!==dc){var bj=dc===zc?"%":f.substring(dc,1+dc|0);throw(new vD).c(bj);}for(var xb=le.lastIndex|0,Cg=65535&(f.charCodeAt(-1+xb|0)|0),jh,ti=qd[2],Dg=90>=Cg?256:0,cj=ti.length|0,Eg=0;Eg!==cj;){var Kh=65535&(ti.charCodeAt(Eg)|0);switch(Kh){case 45:var Xd=1;break;case 35:Xd=2;break;case 43:Xd=4;break;case 32:Xd=8;break;case 48:Xd=16;break;case 44:Xd=
+32;break;case 40:Xd=64;break;case 60:Xd=128;break;default:throw(new q).i(Oe(Kh));}if(0!==(Dg&Xd))throw(new wD).c(ba.String.fromCharCode(Kh));Dg|=Xd;Eg=1+Eg|0}jh=Dg;var hk=Cna(qd[3],-1),dj=Cna(qd[4],-1);if(37===Cg||110===Cg)var ik=null;else{if(0!==(1&jh)&&0>hk)throw(new xD).c("%"+qd[0]);if(0!==(128&jh))var fg=Wb;else{var ej=Cna(qd[1],0);fg=0===ej?mb=1+mb|0:0>ej?Wb:ej}if(0>=fg||fg>E.n.length){var ui=ba.String.fromCharCode(Cg);if(0>("bBhHsHcCdoxXeEgGfn%".indexOf(ui)|0))throw(new vD).c(ui);throw(new yD).c("%"+
+qd[0]);}Wb=fg;ik=E.n[-1+fg|0]}var oc=hb,Fb=ik,Yc=Cg,Ma=jh,jc=hk,kc=dj;switch(Yc){case 98:case 66:0!==(126&Ma)&&zD(Ma,Yc,126);AD(oc,Ma,jc,kc,!1===Fb||null===Fb?"false":"true");break;case 104:case 72:0!==(126&Ma)&&zD(Ma,Yc,126);var Hl=null===Fb?"null":(+(Ga(Fb)>>>0)).toString(16);AD(oc,Ma,jc,kc,Hl);break;case 115:case 83:Fb&&Fb.$classData&&Fb.$classData.m.Lra?(0!==(124&Ma)&&zD(Ma,Yc,124),Fb.Cra(oc,(0!==(1&Ma)?1:0)|(0!==(2&Ma)?4:0)|(0!==(256&Ma)?2:0),jc,kc)):(0!==(126&Ma)&&zD(Ma,Yc,126),AD(oc,Ma,jc,
+kc,""+Fb));break;case 99:case 67:0!==(126&Ma)&&zD(Ma,Yc,126);if(0<=kc)throw(new BD).hb(kc);if(ne(Fb))AD(oc,Ma,jc,-1,ba.String.fromCharCode(null===Fb?0:Fb.W));else if(Qa(Fb)){var Fg=Fb|0;if(!(0<=Fg&&1114111>=Fg))throw(new CD).hb(Fg);var Il=65536>Fg?ba.String.fromCharCode(Fg):ba.String.fromCharCode(-64+(Fg>>10)|55296,56320|1023&Fg);AD(oc,Ma,jc,-1,Il)}else DD(oc,Fb,Yc,Ma,jc,kc);break;case 100:0!==(2&Ma)&&zD(Ma,Yc,2);17!==(17&Ma)&&12!==(12&Ma)||ED(Ma);if(0<=kc)throw(new BD).hb(kc);if(Qa(Fb))FD(oc,Ma,
+jc,""+(Fb|0));else if(Da(Fb)){var jk=Ra(Fb),Jl=jk.ia,Kl=jk.oa;FD(oc,Ma,jc,GD(Sa(),Jl,Kl))}else DD(oc,Fb,Yc,Ma,jc,kc);break;case 111:0!==(108&Ma)&&zD(Ma,Yc,108);17===(17&Ma)&&ED(Ma);if(0<=kc)throw(new BD).hb(kc);var kk=0!==(2&Ma)?"0":"";if(Qa(Fb)){var Ll=(+((Fb|0)>>>0)).toString(8);HD(oc,Ma,jc,kk,Ll)}else if(Da(Fb)){var lk=Ra(Fb),mk=lk.ia,nk=lk.oa;Gh();var ok=oc,Ml=Ma,Nl=jc,fj=kk,vi;var Lh=1073741823&mk,gj=1073741823&((mk>>>30|0)+(nk<<2)|0),wi=nk>>>28|0;if(0!==wi){var Ol=(+(wi>>>0)).toString(8),xi=
+(+(gj>>>0)).toString(8),Pl="0000000000".substring(xi.length|0),yi=(+(Lh>>>0)).toString(8);vi=Ol+(""+Pl+xi)+(""+"0000000000".substring(yi.length|0)+yi)}else if(0!==gj){var Ql=(+(gj>>>0)).toString(8),zi=(+(Lh>>>0)).toString(8);vi=Ql+(""+"0000000000".substring(zi.length|0)+zi)}else vi=(+(Lh>>>0)).toString(8);HD(ok,Ml,Nl,fj,vi)}else DD(oc,Fb,Yc,Ma,jc,kc);break;case 120:case 88:0!==(108&Ma)&&zD(Ma,Yc,108);17===(17&Ma)&&ED(Ma);if(0<=kc)throw(new BD).hb(kc);var pk=0===(2&Ma)?"":0!==(256&Ma)?"0X":"0x";if(Qa(Fb)){var hj=
+(+((Fb|0)>>>0)).toString(16);HD(oc,Ma,jc,pk,ID(Ma,hj))}else if(Da(Fb)){var qk=Ra(Fb),Rl=qk.ia,ij=qk.oa;Gh();var Sl=oc,Tl=Ma,Ul=jc,Vl=pk,Wl=Ma,jj;var kh=Rl;if(0!==ij){var rk=(+(ij>>>0)).toString(16),sk=(+(kh>>>0)).toString(16);jj=rk+(""+"00000000".substring(sk.length|0)+sk)}else jj=(+(kh>>>0)).toString(16);HD(Sl,Tl,Ul,Vl,ID(Wl,jj))}else DD(oc,Fb,Yc,Ma,jc,kc);break;case 101:case 69:0!==(32&Ma)&&zD(Ma,Yc,32);17!==(17&Ma)&&12!==(12&Ma)||ED(Ma);if("number"===typeof Fb){var lh=+Fb;lh!==lh||Infinity===lh||
+-Infinity===lh?Dna(oc,Ma,jc,lh):FD(oc,Ma,jc,Ena(lh,0<=kc?kc:6,0!==(2&Ma)))}else DD(oc,Fb,Yc,Ma,jc,kc);break;case 103:case 71:0!==(2&Ma)&&zD(Ma,Yc,2);17!==(17&Ma)&&12!==(12&Ma)||ED(Ma);if("number"===typeof Fb){var mh=+Fb;if(mh!==mh||Infinity===mh||-Infinity===mh)Dna(oc,Ma,jc,mh);else{var tk=oc,uk=Ma,vk=jc,Gg;var Mh=mh,nh=0<=kc?kc:6,oh=0!==(2&Ma),Ff=+ba.Math.abs(Mh),ph=0===nh?1:nh;if(1E-4<=Ff&&Ff<+ba.Math.pow(10,ph)){var wk=void 0!==ba.Math.log10?+ba.Math.log10(Ff):+ba.Math.log(Ff)/2.302585092994046,
+kj=Oa(+ba.Math.ceil(wk)),xk=+ba.Math.pow(10,kj)<=Ff?1+kj|0:kj,Hg=ph-xk|0;Gg=Fna(Mh,0<Hg?Hg:0,oh)}else Gg=Ena(Mh,-1+ph|0,oh);FD(tk,uk,vk,Gg)}}else DD(oc,Fb,Yc,Ma,jc,kc);break;case 102:17!==(17&Ma)&&12!==(12&Ma)||ED(Ma);if("number"===typeof Fb){var qh=+Fb;qh!==qh||Infinity===qh||-Infinity===qh?Dna(oc,Ma,jc,qh):FD(oc,Ma,jc,Fna(qh,0<=kc?kc:6,0!==(2&Ma)))}else DD(oc,Fb,Yc,Ma,jc,kc);break;case 37:if(0!==(254&Ma))throw(new JD).c(KD(Ma));if(0<=kc)throw(new BD).hb(kc);if(0!==(1&Ma)&&0>jc)throw(new xD).c("%-%");
+Gna(oc,Ma,jc,"%");break;case 110:if(0!==(255&Ma))throw(new JD).c(KD(Ma));if(0<=kc)throw(new BD).hb(kc);if(0<=jc)throw(new LD).hb(jc);uD(oc,"\n");break;default:throw(new vD).c(ba.String.fromCharCode(Yc));}}var Nh=hb.l();hb.ap();var lj=Nh+"["+this.xd+"/"+qC(W(),this.Sh)+"](";return ec(b,lj,", ",")")+" -\x3e "+(null!==this.Vd?this.Vd.l():"")};c.ta=function(a){for(var b=this,d=0;null!==b;){for(var e=b.Sh,f=b.xd;d<f;){var h=pD(W(),e,d);a.y(h);d=1+d|0}d=0;b=b.Vd}};
+function Hna(a){return null===a.DD?MD().eH:qC(W(),a.Sh)}c.$classData=g({Pka:0},!1,"scala.collection.mutable.UnrolledBuffer$Unrolled",{Pka:1,d:1});function NA(){this.SH=null}NA.prototype=new l;NA.prototype.constructor=NA;NA.prototype.b=function(){MA=this;this.SH=(new ci).$h(la(Xa(Va),[0]));return this};NA.prototype.$classData=g({Qka:0},!1,"scala.collection.mutable.WrappedArray$",{Qka:1,d:1});var MA=void 0;function cB(){this.QX=null}cB.prototype=new l;cB.prototype.constructor=cB;
+cB.prototype.b=function(){bB=this;Ina||(Ina=(new ND).b());Jna||(Jna=(new OD).b());this.QX=void 0===ba.Promise?(new PD).b():(new QD).b();return this};cB.prototype.$classData=g({Ska:0},!1,"scala.scalajs.concurrent.JSExecutionContext$",{Ska:1,d:1});var bB=void 0;function OD(){}OD.prototype=new l;OD.prototype.constructor=OD;OD.prototype.b=function(){return this};OD.prototype.$classData=g({Tka:0},!1,"scala.scalajs.concurrent.QueueExecutionContext$",{Tka:1,d:1});var Jna=void 0;function Mu(){}
+Mu.prototype=new l;Mu.prototype.constructor=Mu;Mu.prototype.b=function(){return this};function cha(a,b){var d={};b.Fo(m(new p,function(){return function(a){return null!==a}}(a))).ta(m(new p,function(a,b){return function(a){if(null!==a)b[a.ja()]=a.na();else throw(new q).i(a);}}(a,d)));return d}Mu.prototype.$classData=g({Yka:0},!1,"scala.scalajs.js.Dictionary$",{Yka:1,d:1});var Lu=void 0;function RD(){}RD.prototype=new l;RD.prototype.constructor=RD;RD.prototype.b=function(){return this};
+function hw(a,b){if(Iu(b))return b.bf;if(Ju(b))return b.qa;var d=[];b.ta(m(new p,function(a,b){return function(a){return b.push(a)|0}}(a,d)));return d}RD.prototype.$classData=g({$ka:0},!1,"scala.scalajs.js.JSConverters$JSRichGenTraversableOnce$",{$ka:1,d:1});var Kna=void 0;function gw(){Kna||(Kna=(new RD).b());return Kna}function SD(){this.Zm=null}SD.prototype=new l;SD.prototype.constructor=SD;SD.prototype.b=function(){TD=this;this.Zm=ba.Object.prototype.hasOwnProperty;return this};
+SD.prototype.$classData=g({ela:0},!1,"scala.scalajs.js.WrappedDictionary$Cache$",{ela:1,d:1});var TD=void 0;function Au(){TD||(TD=(new SD).b());return TD}function UD(){this.LU=this.am=null}UD.prototype=new l;UD.prototype.constructor=UD;function Vha(a){var b;a:{b=u();for(var d=a.LU;!d.z();){var e=d.Y().OF;if(VD(e,b)){b=(new H).i(d.Y());break a}d=d.$()}b=C()}if(b.z())throw qg(),b=(new WD).c(a.am.tg()),a=(new XD).c(a.am.tg()+".\x3cinit\x3e()"),b.Mf=a,pg(0,b);return Lna(b.R())}
+UD.prototype.$classData=g({hla:0},!1,"scala.scalajs.reflect.InstantiatableClass",{hla:1,d:1});function YD(){this.eX=this.OF=null}YD.prototype=new l;YD.prototype.constructor=YD;function Lna(a){var b=u();Ne();var d=b.Da();ZD(0,d===Jm(a.OF));a=a.eX;d=bha();if(Iu(b))b=b.bf;else if(Ju(b))b=b.qa;else{var e=[];b.ta(m(new p,function(a,b){return function(a){return b.push(a)|0}}(d,e)));b=e}return a.apply(void 0,b)}YD.prototype.$classData=g({ila:0},!1,"scala.scalajs.reflect.InvokableConstructor",{ila:1,d:1});
+function $D(){this.vv=this.OW=null}$D.prototype=new l;$D.prototype.constructor=$D;$D.prototype.b=function(){aE=this;this.OW=(new zv).b();this.vv=(new zv).b();return this};$D.prototype.$classData=g({jla:0},!1,"scala.scalajs.reflect.Reflect$",{jla:1,d:1});var aE=void 0;function Wv(){aE||(aE=(new $D).b());return aE}function bE(){this.Xp=!1;this.mE=this.lt=this.tu=null;this.AD=!1;this.DF=this.vE=0}bE.prototype=new l;bE.prototype.constructor=bE;
+bE.prototype.b=function(){cE=this;this.tu=(this.Xp=!!(ba.ArrayBuffer&&ba.Int32Array&&ba.Float32Array&&ba.Float64Array))?new ba.ArrayBuffer(8):null;this.lt=this.Xp?new ba.Int32Array(this.tu,0,2):null;this.Xp&&new ba.Float32Array(this.tu,0,2);this.mE=this.Xp?new ba.Float64Array(this.tu,0,1):null;if(this.Xp)this.lt[0]=16909060,a=1===((new ba.Int8Array(this.tu,0,8))[0]|0);else var a=!0;this.vE=(this.AD=a)?0:1;this.DF=this.AD?1:0;return this};
+function daa(a,b){var d=b|0;if(d===b&&-Infinity!==1/b)return d;if(a.Xp)a.mE[0]=b,a=(new Xb).ha(a.lt[a.DF]|0,a.lt[a.vE]|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 Xb).ha(d|0,(a?-2147483648:0)|(b|0)<<20|d/4294967296|0)}return a.ia^a.oa}
+function Mna(a){var b=a.oa,d=0>b,e=2047&b>>20;a=4294967296*(1048575&b)+ +(a.ia>>>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}bE.prototype.$classData=g({pla:0},!1,"scala.scalajs.runtime.Bits$",{pla:1,d:1});var cE=void 0;function Ja(){cE||(cE=(new bE).b());return cE}function dE(){}dE.prototype=new l;dE.prototype.constructor=dE;dE.prototype.b=function(){return this};
+dE.prototype.$classData=g({qla:0},!1,"scala.scalajs.runtime.Compat$",{qla:1,d:1});var Nna=void 0;function bha(){Nna||(Nna=(new dE).b());return Nna}function eE(){this.xa=!1}eE.prototype=new l;eE.prototype.constructor=eE;function mp(a,b,d){return b.substring((b.length|0)-(d.length|0)|0)===d}eE.prototype.b=function(){return this};function fE(a,b){a=b.length|0;for(var d=la(Xa($a),[a]),e=0;e<a;)d.n[e]=65535&(b.charCodeAt(e)|0),e=1+e|0;return d}
+function gE(a,b,d){if(null===b)throw(new Ce).b();a=jg(ig(),d);b=na(b);if(""===b)for(d=(new J).j([""]),b=d.qa.length|0,b=la(Xa(qa),[b]),a=0,d=Ye(new Ze,d,0,d.qa.length|0);d.ra();){var e=d.ka();b.n[a]=e;a=1+a|0}else{d=kg(new lg,a,b,b.length|0);a=[];for(var f=0,e=0;2147483646>e&&Hh(d);){if(0!==d.qk()){var h=d.nl(),f=b.substring(f,h);a.push(null===f?null:f);e=1+e|0}f=d.qk()}b=b.substring(f);a.push(null===b?null:b);b=ka(Xa(qa),a);for(a=b.n.length;0!==a&&""===b.n[-1+a|0];)a=-1+a|0;a!==b.n.length&&(d=la(Xa(qa),
+[a]),Pa(b,0,d,0,a),b=d)}return b}function Qha(a,b,d){a=Ona(d);return b.indexOf(a)|0}function Pna(a,b,d,e){a=d+e|0;if(0>d||a<d||a>b.n.length)throw(new hE).b();for(e="";d!==a;)e=""+e+ba.String.fromCharCode(b.n[d]),d=1+d|0;return e}function Ona(a){if(0===(-65536&a))return ba.String.fromCharCode(a);if(0>a||1114111<a)throw(new Re).b();a=-65536+a|0;return ba.String.fromCharCode(55296|a>>10,56320|1023&a)}
+function Ha(a,b){a=0;for(var d=1,e=-1+(b.length|0)|0;0<=e;)a=a+ea(65535&(b.charCodeAt(e)|0),d)|0,d=ea(31,d),e=-1+e|0;return a}function Rb(a,b,d,e){if(null===b)throw(new Ce).b();a=jg(ig(),d);b=kg(new lg,a,b,b.length|0);tn(b);for(a=(new un).b();Hh(b);)vn(b,a,e);yn(b,a);return a.l()}eE.prototype.$classData=g({sla:0},!1,"scala.scalajs.runtime.RuntimeString$",{sla:1,d:1});var Qna=void 0;function Ia(){Qna||(Qna=(new eE).b());return Qna}function iE(){this.bW=!1;this.CU=this.NU=this.MU=null;this.xa=0}
+iE.prototype=new l;iE.prototype.constructor=iE;iE.prototype.b=function(){return this};function Rna(a){return(a.stack+"\n").replace(jE("^[\\s\\S]+?\\s+at\\s+")," at ").replace(kE("^\\s+(at eval )?at\\s+","gm"),"").replace(kE("^([^\\(]+?)([\\n])","gm"),"{anonymous}() ($1)$2").replace(kE("^Object.\x3canonymous\x3e\\s*\\(([^\\)]+)\\)","gm"),"{anonymous}() ($1)").replace(kE("^([^\\(]+|\\{anonymous\\}\\(\\)) \\((.+)\\)$","gm"),"$1@$2").split("\n").slice(0,-1)}
+function Sna(a){0===(8&a.xa)<<24>>24&&0===(8&a.xa)<<24>>24&&(a.CU=ba.Object.keys(Tna(a)),a.xa=(8|a.xa)<<24>>24);return a.CU}
+function Una(a){if(0===(2&a.xa)<<24>>24&&0===(2&a.xa)<<24>>24){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.MU=b;a.xa=(2|a.xa)<<24>>24}return a.MU}
+function Vna(a,b){var d=jE("^(?:Object\\.|\\[object Object\\]\\.)?(?:ScalaJS\\.c\\.|\\$c_)([^\\.]+)(?:\\.prototype)?\\.([^\\.]+)$"),e=jE("^(?:Object\\.|\\[object Object\\]\\.)?(?:ScalaJS\\.(?:s|f)\\.|\\$(?:s|f)_)((?:_[^_]|[^_])+)__([^\\.]+)$"),f=jE("^(?: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 Bu).c("undefined.get");b=36===(65535&(b.charCodeAt(0)|0))?b.substring(1):
+b;e=Una(a);if(Au().Zm.call(e,b)){a=Una(a);if(!Au().Zm.call(a,b))throw(new Bu).c("key not found: "+b);a=a[b]}else a:for(f=0;;)if(f<(Sna(a).length|0)){e=Sna(a)[f];if(0<=(b.length|0)&&b.substring(0,e.length|0)===e){a=Tna(a);if(!Au().Zm.call(a,e))throw(new Bu).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 Bu).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 w).e(a,h)}return(new w).e("\x3cjscode\x3e",b)}function Wna(a){var b=kE("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 Bu).c("undefined.get");h=h[1];if(void 0===h)throw(new Bu).c("undefined.get");d.push("{anonymous}()@"+k+":"+h)}e=2+e|0}return d}
+function Tna(a){0===(4&a.xa)<<24>>24&&0===(4&a.xa)<<24>>24&&(a.NU={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.xa=(4|a.xa)<<24>>24);return a.NU}iE.prototype.$classData=g({tla:0},!1,"scala.scalajs.runtime.StackTrace$",{tla:1,d:1});var Xna=void 0;function lE(){}lE.prototype=new l;
+lE.prototype.constructor=lE;lE.prototype.b=function(){return this};function kE(a,b){mE||(mE=(new lE).b());return new ba.RegExp(a,b)}function jE(a){mE||(mE=(new lE).b());return new ba.RegExp(a)}lE.prototype.$classData=g({ula:0},!1,"scala.scalajs.runtime.StackTrace$StringRE$",{ula:1,d:1});var mE=void 0;function nE(){}nE.prototype=new l;nE.prototype.constructor=nE;nE.prototype.b=function(){return this};function pg(a,b){return oE(b)?b.op:b}
+function qn(a,b){return b&&b.$classData&&b.$classData.m.tc?b:(new pE).i(b)}nE.prototype.$classData=g({vla:0},!1,"scala.scalajs.runtime.package$",{vla:1,d:1});var Yna=void 0;function qg(){Yna||(Yna=(new nE).b());return Yna}function qE(){}qE.prototype=new l;qE.prototype.constructor=qE;qE.prototype.b=function(){return this};
+function Zna(a,b){if(ne(b))return a.W===b.W;if($na(b)){if("number"===typeof b)return+b===a.W;if(Da(b)){b=Ra(b);var d=b.oa;a=a.W;return b.ia===a&&d===a>>31}return null===b?null===a:Fa(b,a)}return null===a&&null===b}function rE(a,b,d){if($na(d))return sE(0,b,d);if(ne(d)){if("number"===typeof b)return+b===d.W;if(Da(b))return a=Ra(b),b=a.oa,d=d.W,a.ia===d&&b===d>>31}return null===b?null===d:Fa(b,d)}function Em(a,b,d){return b===d?!0:$na(b)?rE(0,b,d):ne(b)?Zna(b,d):null===b?null===d:Fa(b,d)}
+function sE(a,b,d){if("number"===typeof b)return a=+b,"number"===typeof d?a===+d:Da(d)?(b=Ra(d),d=b.ia,b=b.oa,a===tE(Sa(),d,b)):Bna(d)?d.o(a):!1;if(Da(b)){b=Ra(b);a=b.ia;b=b.oa;if(Da(d)){d=Ra(d);var e=d.oa;return a===d.ia&&b===e}return"number"===typeof d?(d=+d,tE(Sa(),a,b)===d):Bna(d)?d.o((new Xb).ha(a,b)):!1}return null===b?null===d:Fa(b,d)}qE.prototype.$classData=g({yla:0},!1,"scala.runtime.BoxesRunTime$",{yla:1,d:1});var aoa=void 0;function Fm(){aoa||(aoa=(new qE).b());return aoa}
+var uE=g({Gla:0},!1,"scala.runtime.Null$",{Gla:1,d:1});function vE(){}vE.prototype=new l;vE.prototype.constructor=vE;vE.prototype.b=function(){return this};function tu(a,b){return Oa(b)===b}vE.prototype.$classData=g({Ila:0},!1,"scala.runtime.RichDouble$",{Ila:1,d:1});var boa=void 0;function uu(){boa||(boa=(new vE).b());return boa}function wE(){}wE.prototype=new l;wE.prototype.constructor=wE;wE.prototype.b=function(){return this};
+wE.prototype.$classData=g({Jla:0},!1,"scala.runtime.RichLong$",{Jla:1,d:1});var coa=void 0;function xE(){coa||(coa=(new wE).b())}function yE(){}yE.prototype=new l;yE.prototype.constructor=yE;yE.prototype.b=function(){return this};function qC(a,b){if(ie(b,1)||nb(b,1)||qb(b,1)||ob(b,1)||pb(b,1)||jb(b,1)||kb(b,1)||lb(b,1)||ib(b,1)||zE(b))return b.n.length;if(null===b)throw(new Ce).b();throw(new q).i(b);}
+function qD(a,b,d,e){if(ie(b,1))b.n[d]=e;else if(nb(b,1))b.n[d]=e|0;else if(qb(b,1))b.n[d]=+e;else if(ob(b,1))b.n[d]=Ra(e);else if(pb(b,1))b.n[d]=+e;else if(jb(b,1))b.n[d]=null===e?0:e.W;else if(kb(b,1))b.n[d]=e|0;else if(lb(b,1))b.n[d]=e|0;else if(ib(b,1))b.n[d]=!!e;else if(zE(b))b.n[d]=void 0;else{if(null===b)throw(new Ce).b();throw(new q).i(b);}}function X(a,b){a=b.x();return ec(a,b.u()+"(",",",")")}
+function pD(a,b,d){if(ie(b,1)||nb(b,1)||qb(b,1)||ob(b,1)||pb(b,1))return b.n[d];if(jb(b,1))return Oe(b.n[d]);if(kb(b,1)||lb(b,1)||ib(b,1)||zE(b))return b.n[d];if(null===b)throw(new Ce).b();throw(new q).i(b);}yE.prototype.$classData=g({Kla:0},!1,"scala.runtime.ScalaRunTime$",{Kla:1,d:1});var doa=void 0;function W(){doa||(doa=(new yE).b());return doa}function AE(){}AE.prototype=new l;AE.prototype.constructor=AE;c=AE.prototype;c.b=function(){return this};
+c.vt=function(a,b){b=ea(-862048943,b);b=ea(461845907,b<<15|b>>>17|0);return a^b};function BE(a,b){a=Oa(b);if(a===b)return a;var d=Sa();a=CE(d,b);d=d.Sb;return tE(Sa(),a,d)===b?a^d:daa(Ja(),b)}function fC(a,b){return null===b?0:"number"===typeof b?BE(0,+b):Da(b)?(a=Ra(b),DE(0,(new Xb).ha(a.ia,a.oa))):Ga(b)}c.ca=function(a,b){a=this.vt(a,b);return-430675100+ea(5,a<<13|a>>>19|0)|0};function DE(a,b){a=b.ia;b=b.oa;return b===a>>31?a:a^b}
+c.xb=function(a,b){a^=b;a=ea(-2048144789,a^(a>>>16|0));a=ea(-1028477387,a^(a>>>13|0));return a^(a>>>16|0)};c.$classData=g({Mla:0},!1,"scala.runtime.Statics$",{Mla:1,d:1});var eoa=void 0;function V(){eoa||(eoa=(new AE).b());return eoa}function EE(){this.FV=null;this.uU=0;this.xV=this.EV=this.GV=this.HV=null;this.a=0}EE.prototype=new l;EE.prototype.constructor=EE;
+EE.prototype.b=function(){FE=this;this.FV=Wg(Xg(),u());this.a|=1;this.uU=M(A())|Zi(A());this.a|=2;for(var a=M(A()),a=(new w).e("WHO",a),b=GE(this),b=(new w).e("COLOR",b),d=M(A()),d=(new w).e("HEADING",d),e=M(A()),e=(new w).e("XCOR",e),f=M(A()),f=(new w).e("YCOR",f),h=Yi(A()),h=(new w).e("SHAPE",h),k=nc(),k=(new w).e("LABEL",k),n=GE(this),n=(new w).e("LABEL-COLOR",n),r=$i(A()),r=(new w).e("BREED",r),y=Xi(A()),y=(new w).e("HIDDEN?",y),E=M(A()),E=(new w).e("SIZE",E),Q=M(A()),Q=(new w).e("PEN-SIZE",Q),
+R=Yi(A()),a=[a,b,d,e,f,h,k,n,r,y,E,Q,(new w).e("PEN-MODE",R)],b=fc(new gc,Cu()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.HV=b.Va;this.a|=4;a=M(A());a=(new w).e("PXCOR",a);b=M(A());b=(new w).e("PYCOR",b);d=GE(this);d=(new w).e("PCOLOR",d);e=nc();e=(new w).e("PLABEL",e);f=GE(this);a=[a,b,d,e,(new w).e("PLABEL-COLOR",f)];b=fc(new gc,Cu());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.GV=b.Va;this.a|=8;a=pj(A());a=(new w).e("END1",a);b=pj(A());b=(new w).e("END2",b);d=GE(this);d=(new w).e("COLOR",
+d);e=nc();e=(new w).e("LABEL",e);f=GE(this);f=(new w).e("LABEL-COLOR",f);h=Xi(A());h=(new w).e("HIDDEN?",h);k=oj(A());k=(new w).e("BREED",k);n=M(A());n=(new w).e("THICKNESS",n);r=Yi(A());r=(new w).e("SHAPE",r);y=Yi(A());a=[a,b,d,e,f,h,k,n,r,(new w).e("TIE-MODE",y)];b=fc(new gc,Cu());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.EV=b.Va;this.a|=16;a=foa(this);a=Jc(a);Qo(a);this.a|=32;a=goa(this);a=Jc(a);Qo(a);this.a|=64;a=HE(this);a=Jc(a);Qo(a);this.a|=128;a=hoa(this);a=Jc(a);Qo(a);this.a|=256;
+a=foa(this);a=Jc(a);Qo(a).Ce((new An).Mg(pa(qa)));this.a|=512;a=hoa(this);a=Jc(a);this.xV=Qo(a).Ce((new An).Mg(pa(qa)));this.a|=1024;return this};function goa(a){if(0===(4&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/AgentVariables.scala: 14");return a.HV}function foa(a){if(0===(1&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/AgentVariables.scala: 9");return a.FV}
+function vga(){var a=IE(),a=HE(a),a=Jc(a);return Qo(a).Ce((new An).Mg(pa(qa)))}function sga(){var a=IE(),a=goa(a),a=Jc(a);return Qo(a).Ce((new An).Mg(pa(qa)))}function GE(a){if(0===(2&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/AgentVariables.scala: 12");return a.uU}function hoa(a){if(0===(16&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/AgentVariables.scala: 36");return a.EV}
+function rga(){var a=IE();if(0===(1024&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/AgentVariables.scala: 56");return a.xV}function HE(a){if(0===(8&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/AgentVariables.scala: 29");return a.GV}EE.prototype.$classData=g({h0:0},!1,"org.nlogo.core.AgentVariables$",{h0:1,d:1,Wla:1});var FE=void 0;function IE(){FE||(FE=(new EE).b());return FE}
+function JE(a){return!!(a&&a.$classData&&a.$classData.m.pI)}function $s(){this.gT=this.oT=0;this.$X=this.oX=this.pX=null;this.a=0}$s.prototype=new l;$s.prototype.constructor=$s;function uaa(a){if(0===(64&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Color.scala: 232");return a.$X}
+$s.prototype.b=function(){Zs=this;this.oT=14;this.a=(1|this.a)<<24>>24;if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Color.scala: 232");this.gT=ea(10,this.oT);this.a=(2|this.a)<<24>>24;this.a=(4|this.a)<<24>>24;Nba(Kg());this.a=(8|this.a)<<24>>24;var a=(new J).j([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.qa.length|0,b=la(Xa(db),[b]),d;d=0;for(a=Ye(new Ze,a,0,a.qa.length|0);a.ra();){var e=a.ka();b.n[d]=e|0;d=1+d|0}this.pX=b;this.a=(16|this.a)<<24>>24;a=ea(10,ioa(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;KE();Nj();KE();Mj();d=(new LE).b();0>f&&jn(kn(),0,a,1,!1);if(!e)for(a=0;;){var h=a,k=h/100|0,e=joa(this).n[ea(3,k)],f=joa(this).n[1+ea(3,k)|0],k=joa(this).n[2+ea(3,k)|0],h=.012+(-50+(h%100|0)|0)/50.48;0>h?(e=e+Oa(e*h)|0,f=f+Oa(f*h)|0,k=k+Oa(k*h)|
+0):0<h&&(e=e+Oa((255-e|0)*h)|0,f=f+Oa((255-f|0)*h)|0,k=k+Oa((255-k|0)*h)|0);ME(d,((-16777216+(e<<16)|0)+(f<<8)|0)+k|0);if(a===b)break;a=1+a|0}b=NE(d);d=b.sa();d=la(Xa(db),[d]);pC(b,d,0);d.n[0]=-16777216;d.n[99]=-1;this.oX=d;this.a=(32|this.a)<<24>>24;koa||(koa=(new OE).b());b=Wg(koa,u());a=ea(10,ioa(this));d=-1+a|0;if(!(0>=a))for(a=0;;){f=e=a/10;if(0===(32&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Color.scala: 232");PE(b,this.oX.n[Oa(10*
+f)],e);if(a===d)break;a=1+a|0}this.$X=b;this.a=(64|this.a)<<24>>24;return this};function ioa(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Color.scala: 232");return a.gT}function joa(a){if(0===(16&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Color.scala: 232");return a.pX}$s.prototype.$classData=g({s0:0},!1,"org.nlogo.core.Color$",{s0:1,d:1,Yla:1});var Zs=void 0;
+function QE(){}QE.prototype=new l;QE.prototype.constructor=QE;QE.prototype.b=function(){return this};QE.prototype.$classData=g({y0:0},!1,"org.nlogo.core.DummyCompilationEnvironment",{y0:1,d:1,Zla:1});function RE(){}RE.prototype=new l;RE.prototype.constructor=RE;RE.prototype.b=function(){return this};RE.prototype.$classData=g({z0:0},!1,"org.nlogo.core.DummyLibraryManager",{z0:1,d:1,fma:1});function SE(){this.cV=null;this.a=!1}SE.prototype=new l;SE.prototype.constructor=SE;
+SE.prototype.b=function(){TE=this;var a=new UE;if(null===this)throw pg(qg(),null);a.Qa=this;this.cV=a;this.a=!0;return this};SE.prototype.$classData=g({A0:0},!1,"org.nlogo.core.Dump$",{A0:1,d:1,bma:1});var TE=void 0;function Nn(){TE||(TE=(new SE).b());return TE}function VE(){this.vj=this.Kj=this.jU=null;this.a=0}VE.prototype=new l;VE.prototype.constructor=VE;function loa(){}loa.prototype=VE.prototype;
+VE.prototype.Kd=function(){var a=Ne().qi,b=(new w).e("org.nlogo.core.prim._breed",m(new p,function(){return function(a){return(new WE).c(a)}}(this))),d=(new w).e("org.nlogo.core.prim._breedvariable",m(new p,function(){return function(a){return(new XE).c(a)}}(this))),e=(new w).e("org.nlogo.core.prim._createorderedturtles",m(new p,function(){return function(a){return(new YE).c(a)}}(this))),f=(new w).e("org.nlogo.core.prim._createturtles",m(new p,function(){return function(a){return(new ZE).c(a)}}(this))),
+h=(new w).e("org.nlogo.core.prim._hatch",m(new p,function(){return function(a){return(new $E).c(a)}}(this))),k=(new w).e("org.nlogo.core.prim._lambdavariable",m(new p,function(){return function(a){return(new wm).c(a)}}(this))),n=(new w).e("org.nlogo.core.prim._linkbreedvariable",m(new p,function(){return function(a){return(new aF).c(a)}}(this))),r=(new w).e("org.nlogo.core.prim._sprout",m(new p,function(){return function(a){return(new bF).c(a)}}(this))),y=(new w).e("org.nlogo.core.prim.etc._breedat",
+m(new p,function(){return function(a){return(new cF).c(a)}}(this))),E=(new w).e("org.nlogo.core.prim.etc._breedhere",m(new p,function(){return function(a){return(new dF).c(a)}}(this))),Q=(new w).e("org.nlogo.core.prim.etc._breedon",m(new p,function(){return function(a){return(new eF).c(a)}}(this))),R=(new w).e("org.nlogo.core.prim.etc._breedsingular",m(new p,function(){return function(a){return(new fF).c(a)}}(this))),da=(new w).e("org.nlogo.core.prim.etc._inlinkfrom",m(new p,function(){return function(a){return(new gF).c(a)}}(this))),
+ma=(new w).e("org.nlogo.core.prim.etc._inlinkneighbor",m(new p,function(){return function(a){return(new hF).c(a)}}(this))),ra=(new w).e("org.nlogo.core.prim.etc._inlinkneighbors",m(new p,function(){return function(a){return(new iF).c(a)}}(this))),Ca=(new w).e("org.nlogo.core.prim.etc._isbreed",m(new p,function(){return function(a){return(new jF).c(a)}}(this))),ab=(new w).e("org.nlogo.core.prim.etc._linkbreed",m(new p,function(){return function(a){return(new kF).c(a)}}(this))),hb=(new w).e("org.nlogo.core.prim.etc._linkbreedsingular",
+m(new p,function(){return function(a){return(new lF).c(a)}}(this))),mb=(new w).e("org.nlogo.core.prim.etc._linkneighbor",m(new p,function(){return function(a){return(new mF).c(a)}}(this))),Wb=(new w).e("org.nlogo.core.prim.etc._linkneighbors",m(new p,function(){return function(a){return(new nF).c(a)}}(this))),zc=(new w).e("org.nlogo.core.prim.etc._linkwith",m(new p,function(){return function(a){return(new oF).c(a)}}(this))),xb=(new w).e("org.nlogo.core.prim.etc._myinlinks",m(new p,function(){return function(a){return(new pF).c(a)}}(this))),
+Wc=(new w).e("org.nlogo.core.prim.etc._mylinks",m(new p,function(){return function(a){return(new qF).c(a)}}(this))),dc=(new w).e("org.nlogo.core.prim.etc._myoutlinks",m(new p,function(){return function(a){return(new rF).c(a)}}(this))),le=(new w).e("org.nlogo.core.prim.etc._outlinkneighbor",m(new p,function(){return function(a){return(new sF).c(a)}}(this))),qd=(new w).e("org.nlogo.core.prim.etc._outlinkneighbors",m(new p,function(){return function(a){return(new tF).c(a)}}(this))),bj=(new w).e("org.nlogo.core.prim.etc._outlinkto",
+m(new p,function(){return function(a){return(new uF).c(a)}}(this))),Cg=(new w).e("org.nlogo.core.prim.etc._createlinkwith",m(new p,function(){return function(a){return(new vF).c(a)}}(this))),jh=(new w).e("org.nlogo.core.prim.etc._createlinkto",m(new p,function(){return function(a){return(new wF).c(a)}}(this))),ti=(new w).e("org.nlogo.core.prim.etc._createlinkfrom",m(new p,function(){return function(a){return(new xF).c(a)}}(this))),Dg=(new w).e("org.nlogo.core.prim.etc._createlinkswith",m(new p,function(){return function(a){return(new yF).c(a)}}(this))),
+cj=(new w).e("org.nlogo.core.prim.etc._createlinksto",m(new p,function(){return function(a){return(new zF).c(a)}}(this))),Eg=[b,d,e,f,h,k,n,r,y,E,Q,R,da,ma,ra,Ca,ab,hb,mb,Wb,zc,xb,Wc,dc,le,qd,bj,Cg,jh,ti,Dg,cj,(new w).e("org.nlogo.core.prim.etc._createlinksfrom",m(new p,function(){return function(a){return(new AF).c(a)}}(this)))];this.jU=Wg(a,(new J).j(Eg));this.a=(1|this.a)<<24>>24;var Kh=Ne().qi,Xd=(new w).e("!\x3d",I(function(){return function(){return(new BF).b()}}(this))),hk=(new w).e("*",I(function(){return function(){return(new CF).b()}}(this))),
+dj=(new w).e("+",I(function(){return function(){return(new DF).b()}}(this))),ik=(new w).e("-",I(function(){return function(){return(new EF).b()}}(this))),fg=(new w).e("/",I(function(){return function(){return(new FF).b()}}(this))),ej=(new w).e("\x3c",I(function(){return function(){return(new GF).b()}}(this))),ui=(new w).e("\x3c\x3d",I(function(){return function(){return(new HF).b()}}(this))),oc=(new w).e("\x3d",I(function(){return function(){return(new IF).b()}}(this))),Fb=(new w).e("\x3e",I(function(){return function(){return(new JF).b()}}(this))),
+Yc=(new w).e("\x3e\x3d",I(function(){return function(){return(new KF).b()}}(this))),Ma=(new w).e("^",I(function(){return function(){return(new LF).b()}}(this))),jc=(new w).e("__APPLY-RESULT",I(function(){return function(){return(new MF).b()}}(this))),kc=(new w).e("__BOOM",I(function(){return function(){return(new NF).b()}}(this))),Hl=(new w).e("__BLOCK",I(function(){return function(){return(new OF).b()}}(this))),Fg=(new w).e("__CHECK-SYNTAX",I(function(){return function(){return(new PF).b()}}(this))),
+Il=(new w).e("__CHECKSUM",I(function(){return function(){return(new QF).b()}}(this))),jk=(new w).e("__DUMP",I(function(){return function(){return(new RF).b()}}(this))),Jl=(new w).e("__DUMP-EXTENSION-PRIMS",I(function(){return function(){return(new SF).b()}}(this))),Kl=(new w).e("__DUMP-EXTENSIONS",I(function(){return function(){return(new TF).b()}}(this))),kk=(new w).e("__DUMP1",I(function(){return function(){return(new UF).b()}}(this))),Ll=(new w).e("__NANO-TIME",I(function(){return function(){return(new VF).b()}}(this))),
+lk=(new w).e("__PROCESSORS",I(function(){return function(){return(new WF).b()}}(this))),mk=(new w).e("__RANDOM-STATE",I(function(){return function(){return(new XF).b()}}(this))),nk=(new w).e("__REFERENCE",I(function(){return function(){return(new YF).b()}}(this))),ok=(new w).e("__STACK-TRACE",I(function(){return function(){return(new ZF).b()}}(this))),Ml=(new w).e("__SYMBOL",I(function(){return function(){return(new $F).b()}}(this))),Nl=(new w).e("__TO-STRING",I(function(){return function(){return(new aG).b()}}(this))),
+fj=(new w).e("ABS",I(function(){return function(){return(new bG).b()}}(this))),vi=(new w).e("ACOS",I(function(){return function(){return(new cG).b()}}(this))),Lh=(new w).e("ALL?",I(function(){return function(){return(new dG).b()}}(this))),gj=(new w).e("AND",I(function(){return function(){return(new eG).b()}}(this))),wi=(new w).e("ANY?",I(function(){return function(){return(new fG).b()}}(this))),Ol=(new w).e("APPROXIMATE-HSB",I(function(){return function(){return(new gG).b()}}(this))),xi=(new w).e("APPROXIMATE-RGB",
+I(function(){return function(){return(new hG).b()}}(this))),Pl=(new w).e("ASIN",I(function(){return function(){return(new iG).b()}}(this))),yi=(new w).e("AT-POINTS",I(function(){return function(){return(new jG).b()}}(this))),Ql=(new w).e("ATAN",I(function(){return function(){return(new kG).b()}}(this))),zi=(new w).e("AUTOPLOT?",I(function(){return function(){return(new lG).b()}}(this))),pk=(new w).e("BASE-COLORS",I(function(){return function(){return(new mG).b()}}(this))),hj=(new w).e("BEHAVIORSPACE-EXPERIMENT-NAME",
+I(function(){return function(){return(new nG).b()}}(this))),qk=(new w).e("BEHAVIORSPACE-RUN-NUMBER",I(function(){return function(){return(new oG).b()}}(this))),Rl=(new w).e("BF",I(function(){return function(){return(new pG).b()}}(this))),ij=(new w).e("BL",I(function(){return function(){return(new qG).b()}}(this))),Sl=(new w).e("BOTH-ENDS",I(function(){return function(){return(new rG).b()}}(this))),Tl=(new w).e("BUT-FIRST",I(function(){return function(){return(new pG).b()}}(this))),Ul=(new w).e("BUT-LAST",
+I(function(){return function(){return(new qG).b()}}(this))),Vl=(new w).e("BUTFIRST",I(function(){return function(){return(new pG).b()}}(this))),Wl=(new w).e("BUTLAST",I(function(){return function(){return(new qG).b()}}(this))),jj=(new w).e("CAN-MOVE?",I(function(){return function(){return(new sG).b()}}(this))),kh=(new w).e("CEILING",I(function(){return function(){return(new tG).b()}}(this))),rk=(new w).e("COS",I(function(){return function(){return(new uG).b()}}(this))),sk=(new w).e("COUNT",I(function(){return function(){return(new vG).b()}}(this))),
+lh=(new w).e("DATE-AND-TIME",I(function(){return function(){return(new wG).b()}}(this))),mh=(new w).e("DISTANCE",I(function(){return function(){return(new xG).b()}}(this))),tk=(new w).e("DISTANCEXY",I(function(){return function(){return(new yG).b()}}(this))),uk=(new w).e("DX",I(function(){return function(){return(new zG).b()}}(this))),vk=(new w).e("DY",I(function(){return function(){return(new AG).b()}}(this))),Gg=(new w).e("EMPTY?",I(function(){return function(){return(new BG).b()}}(this))),Mh=(new w).e("ERROR-MESSAGE",
+I(function(){return function(){return(new CG).b()}}(this))),nh=(new w).e("EXP",I(function(){return function(){return(new DG).b()}}(this))),oh=(new w).e("EXTRACT-HSB",I(function(){return function(){return(new EG).b()}}(this))),Ff=(new w).e("EXTRACT-RGB",I(function(){return function(){return(new FG).b()}}(this))),ph=(new w).e("FILE-AT-END?",I(function(){return function(){return(new GG).b()}}(this))),wk=(new w).e("FILE-EXISTS?",I(function(){return function(){return(new HG).b()}}(this))),kj=(new w).e("FILE-READ",
+I(function(){return function(){return(new IG).b()}}(this))),xk=(new w).e("FILE-READ-CHARACTERS",I(function(){return function(){return(new JG).b()}}(this))),Hg=(new w).e("FILE-READ-LINE",I(function(){return function(){return(new KG).b()}}(this))),qh=(new w).e("FILTER",I(function(){return function(){return(new LG).b()}}(this))),Nh=(new w).e("FIRST",I(function(){return function(){return(new MG).b()}}(this))),lj=(new w).e("FLOOR",I(function(){return function(){return(new WG).b()}}(this))),mj=(new w).e("FPUT",
+I(function(){return function(){return(new XG).b()}}(this))),Zw=(new w).e("HSB",I(function(){return function(){return(new YG).b()}}(this))),$w=(new w).e("HUBNET-CLIENTS-LIST",I(function(){return function(){return(new ZG).b()}}(this))),ax=(new w).e("HUBNET-ENTER-MESSAGE?",I(function(){return function(){return(new $G).b()}}(this))),OG=(new w).e("HUBNET-EXIT-MESSAGE?",I(function(){return function(){return(new aH).b()}}(this))),bx=(new w).e("HUBNET-MESSAGE",I(function(){return function(){return(new bH).b()}}(this))),
+PG=(new w).e("HUBNET-MESSAGE-SOURCE",I(function(){return function(){return(new cH).b()}}(this))),ur=(new w).e("HUBNET-MESSAGE-TAG",I(function(){return function(){return(new dH).b()}}(this))),QG=(new w).e("HUBNET-MESSAGE-WAITING?",I(function(){return function(){return(new eH).b()}}(this))),xn=(new w).e("IFELSE-VALUE",I(function(){return function(){return(new fH).b()}}(this))),cx=(new w).e("IN-CONE",I(function(){return function(){return(new gH).b()}}(this))),RG=(new w).e("IN-LINK-FROM",I(function(){return function(){return(new gF).b()}}(this))),
+SG=(new w).e("IN-LINK-NEIGHBOR?",I(function(){return function(){return(new hF).b()}}(this))),vr=(new w).e("IN-LINK-NEIGHBORS",I(function(){return function(){return(new iF).b()}}(this))),TG=(new w).e("IN-RADIUS",I(function(){return function(){return(new hH).b()}}(this))),UG=(new w).e("INSERT-ITEM",I(function(){return function(){return(new iH).b()}}(this))),VG=(new w).e("INT",I(function(){return function(){return(new jH).b()}}(this))),dx=(new w).e("IS-AGENT?",I(function(){return function(){return(new kH).b()}}(this))),
+wr=(new w).e("IS-AGENTSET?",I(function(){return function(){return(new lH).b()}}(this))),wn=(new w).e("IS-ANONYMOUS-COMMAND?",I(function(){return function(){return(new mH).b()}}(this))),Z7=(new w).e("IS-ANONYMOUS-REPORTER?",I(function(){return function(){return(new nH).b()}}(this))),NG=(new w).e("IS-BOOLEAN?",I(function(){return function(){return(new oH).b()}}(this))),E9=(new w).e("IS-DIRECTED-LINK?",I(function(){return function(){return(new pH).b()}}(this))),F9=(new w).e("IS-LINK-SET?",I(function(){return function(){return(new qH).b()}}(this))),
+H9=(new w).e("IS-LINK?",I(function(){return function(){return(new rH).b()}}(this))),I9=(new w).e("IS-LIST?",I(function(){return function(){return(new sH).b()}}(this))),J9=(new w).e("IS-NUMBER?",I(function(){return function(){return(new tH).b()}}(this))),K9=(new w).e("IS-PATCH-SET?",I(function(){return function(){return(new uH).b()}}(this))),hI=(new w).e("IS-PATCH?",I(function(){return function(){return(new vH).b()}}(this))),L9=(new w).e("IS-STRING?",I(function(){return function(){return(new wH).b()}}(this))),
+N9=(new w).e("IS-TURTLE-SET?",I(function(){return function(){return(new xH).b()}}(this))),O9=(new w).e("IS-TURTLE?",I(function(){return function(){return(new yH).b()}}(this))),P9=(new w).e("IS-UNDIRECTED-LINK?",I(function(){return function(){return(new zH).b()}}(this))),b1=(new w).e("ITEM",I(function(){return function(){return(new AH).b()}}(this))),Wr=(new w).e("LAST",I(function(){return function(){return(new BH).b()}}(this))),Q9=(new w).e("LENGTH",I(function(){return function(){return(new CH).b()}}(this))),
+iI=(new w).e("LINK",I(function(){return function(){return(new DH).b()}}(this))),R9=(new w).e("LINK-HEADING",I(function(){return function(){return(new EH).b()}}(this))),S9=(new w).e("LINK-LENGTH",I(function(){return function(){return(new FH).b()}}(this))),T9=(new w).e("LINK-NEIGHBOR?",I(function(){return function(){return(new mF).b()}}(this))),U9=(new w).e("LINK-NEIGHBORS",I(function(){return function(){return(new nF).b()}}(this))),V9=(new w).e("LINK-SET",I(function(){return function(){return(new GH).b()}}(this))),
+c1=(new w).e("LINK-SHAPES",I(function(){return function(){return(new HH).b()}}(this))),W9=(new w).e("LINK-WITH",I(function(){return function(){return(new oF).b()}}(this))),X9=(new w).e("LINKS",I(function(){return function(){return(new IH).b()}}(this))),Y9=(new w).e("LIST",I(function(){return function(){return(new JH).b()}}(this))),jI=(new w).e("LN",I(function(){return function(){return(new KH).b()}}(this))),TFa=(new w).e("LOG",I(function(){return function(){return(new LH).b()}}(this))),UFa=(new w).e("LPUT",
+I(function(){return function(){return(new MH).b()}}(this))),VFa=(new w).e("MAP",I(function(){return function(){return(new NH).b()}}(this))),WFa=(new w).e("MAX",I(function(){return function(){return(new OH).b()}}(this))),XFa=(new w).e("MAX-N-OF",I(function(){return function(){return(new PH).b()}}(this))),YFa=(new w).e("MAX-ONE-OF",I(function(){return function(){return(new QH).b()}}(this))),ZFa=(new w).e("MAX-PXCOR",I(function(){return function(){return(new RH).b()}}(this))),$Fa=(new w).e("MAX-PYCOR",
+I(function(){return function(){return(new SH).b()}}(this))),aGa=(new w).e("MEAN",I(function(){return function(){return(new TH).b()}}(this))),bGa=(new w).e("MEDIAN",I(function(){return function(){return(new UH).b()}}(this))),cGa=(new w).e("MEMBER?",I(function(){return function(){return(new VH).b()}}(this))),dGa=(new w).e("MIN",I(function(){return function(){return(new WH).b()}}(this))),eGa=(new w).e("MIN-N-OF",I(function(){return function(){return(new XH).b()}}(this))),fGa=(new w).e("MIN-ONE-OF",I(function(){return function(){return(new YH).b()}}(this))),
+gGa=(new w).e("MIN-PXCOR",I(function(){return function(){return(new ZH).b()}}(this))),hGa=(new w).e("MIN-PYCOR",I(function(){return function(){return(new $H).b()}}(this))),iGa=(new w).e("MOD",I(function(){return function(){return(new aI).b()}}(this))),jGa=(new w).e("MODES",I(function(){return function(){return(new bI).b()}}(this))),kGa=(new w).e("MOUSE-DOWN?",I(function(){return function(){return(new cI).b()}}(this))),lGa=(new w).e("MOUSE-INSIDE?",I(function(){return function(){return(new dI).b()}}(this))),
+mGa=(new w).e("MOUSE-XCOR",I(function(){return function(){return(new eI).b()}}(this))),nGa=(new w).e("MOUSE-YCOR",I(function(){return function(){return(new fI).b()}}(this))),oGa=(new w).e("MY-IN-LINKS",I(function(){return function(){return(new pF).b()}}(this))),pGa=(new w).e("MY-LINKS",I(function(){return function(){return(new qF).b()}}(this))),qGa=(new w).e("MY-OUT-LINKS",I(function(){return function(){return(new rF).b()}}(this))),rGa=(new w).e("MYSELF",I(function(){return function(){return(new gI).b()}}(this))),
+sGa=(new w).e("N-OF",I(function(){return function(){return(new kI).b()}}(this))),tGa=(new w).e("N-VALUES",I(function(){return function(){return(new lI).b()}}(this))),uGa=(new w).e("NEIGHBORS",I(function(){return function(){return(new mI).b()}}(this))),vGa=(new w).e("NEIGHBORS4",I(function(){return function(){return(new nI).b()}}(this))),wGa=(new w).e("NETLOGO-APPLET?",I(function(){return function(){return(new oI).b()}}(this))),xGa=(new w).e("NETLOGO-VERSION",I(function(){return function(){return(new pI).b()}}(this))),
+yGa=(new w).e("NETLOGO-WEB?",I(function(){return function(){return(new qI).b()}}(this))),zGa=(new w).e("NEW-SEED",I(function(){return function(){return(new rI).b()}}(this))),AGa=(new w).e("NO-LINKS",I(function(){return function(){return(new sI).b()}}(this))),BGa=(new w).e("NO-PATCHES",I(function(){return function(){return(new tI).b()}}(this))),CGa=(new w).e("NO-TURTLES",I(function(){return function(){return(new uI).b()}}(this))),DGa=(new w).e("NOT",I(function(){return function(){return(new vI).b()}}(this))),
+EGa=(new w).e("OF",I(function(){return function(){return(new wI).b()}}(this))),FGa=(new w).e("ONE-OF",I(function(){return function(){return(new xI).b()}}(this))),GGa=(new w).e("OR",I(function(){return function(){return(new yI).b()}}(this))),HGa=(new w).e("OTHER",I(function(){return function(){return(new zI).b()}}(this))),IGa=(new w).e("OTHER-END",I(function(){return function(){return(new AI).b()}}(this))),JGa=(new w).e("OUT-LINK-NEIGHBOR?",I(function(){return function(){return(new sF).b()}}(this))),
+KGa=(new w).e("OUT-LINK-NEIGHBORS",I(function(){return function(){return(new tF).b()}}(this))),LGa=(new w).e("OUT-LINK-TO",I(function(){return function(){return(new uF).b()}}(this))),MGa=(new w).e("PATCH",I(function(){return function(){return(new BI).b()}}(this))),NGa=(new w).e("PATCH-AHEAD",I(function(){return function(){return(new CI).b()}}(this))),OGa=(new w).e("PATCH-AT",I(function(){return function(){return(new DI).b()}}(this))),PGa=(new w).e("PATCH-AT-HEADING-AND-DISTANCE",I(function(){return function(){return(new EI).b()}}(this))),
+QGa=(new w).e("PATCH-HERE",I(function(){return function(){return(new FI).b()}}(this))),RGa=(new w).e("PATCH-LEFT-AND-AHEAD",I(function(){return function(){return(new GI).b()}}(this))),SGa=(new w).e("PATCH-RIGHT-AND-AHEAD",I(function(){return function(){return(new HI).b()}}(this))),TGa=(new w).e("PATCH-SET",I(function(){return function(){return(new II).b()}}(this))),UGa=(new w).e("PATCH-SIZE",I(function(){return function(){return(new JI).b()}}(this))),VGa=(new w).e("PATCHES",I(function(){return function(){return(new KI).b()}}(this))),
+WGa=(new w).e("PLOT-NAME",I(function(){return function(){return(new LI).b()}}(this))),XGa=(new w).e("PLOT-PEN-EXISTS?",I(function(){return function(){return(new MI).b()}}(this))),YGa=(new w).e("PLOT-X-MAX",I(function(){return function(){return(new NI).b()}}(this))),ZGa=(new w).e("PLOT-X-MIN",I(function(){return function(){return(new OI).b()}}(this))),$Ga=(new w).e("PLOT-Y-MAX",I(function(){return function(){return(new PI).b()}}(this))),aHa=(new w).e("PLOT-Y-MIN",I(function(){return function(){return(new QI).b()}}(this))),
+bHa=(new w).e("POSITION",I(function(){return function(){return(new RI).b()}}(this))),cHa=(new w).e("PRECISION",I(function(){return function(){return(new SI).b()}}(this))),dHa=(new w).e("RANDOM",I(function(){return function(){return(new TI).b()}}(this))),eHa=(new w).e("RANDOM-EXPONENTIAL",I(function(){return function(){return(new UI).b()}}(this))),fHa=(new w).e("RANDOM-FLOAT",I(function(){return function(){return(new VI).b()}}(this))),gHa=(new w).e("RANDOM-GAMMA",I(function(){return function(){return(new WI).b()}}(this))),
+hHa=(new w).e("RANDOM-NORMAL",I(function(){return function(){return(new XI).b()}}(this))),iHa=(new w).e("RANDOM-POISSON",I(function(){return function(){return(new YI).b()}}(this))),jHa=(new w).e("RANDOM-PXCOR",I(function(){return function(){return(new ZI).b()}}(this))),kHa=(new w).e("RANDOM-PYCOR",I(function(){return function(){return(new $I).b()}}(this))),lHa=(new w).e("RANDOM-XCOR",I(function(){return function(){return(new aJ).b()}}(this))),mHa=(new w).e("RANDOM-YCOR",I(function(){return function(){return(new bJ).b()}}(this))),
+nHa=(new w).e("RANGE",I(function(){return function(){return(new cJ).b()}}(this))),oHa=(new w).e("READ-FROM-STRING",I(function(){return function(){return(new dJ).b()}}(this))),pHa=(new w).e("REDUCE",I(function(){return function(){return(new eJ).b()}}(this))),qHa=(new w).e("REMAINDER",I(function(){return function(){return(new fJ).b()}}(this))),rHa=(new w).e("REMOVE",I(function(){return function(){return(new gJ).b()}}(this))),sHa=(new w).e("REMOVE-DUPLICATES",I(function(){return function(){return(new hJ).b()}}(this))),
+tHa=(new w).e("REMOVE-ITEM",I(function(){return function(){return(new iJ).b()}}(this))),uHa=(new w).e("REPLACE-ITEM",I(function(){return function(){return(new jJ).b()}}(this))),vHa=(new w).e("REVERSE",I(function(){return function(){return(new kJ).b()}}(this))),wHa=(new w).e("RGB",I(function(){return function(){return(new lJ).b()}}(this))),xHa=(new w).e("ROUND",I(function(){return function(){return(new mJ).b()}}(this))),yHa=(new w).e("RUN-RESULT",I(function(){return function(){return(new nJ).b()}}(this))),
+zHa=(new w).e("RUNRESULT",I(function(){return function(){return(new nJ).b()}}(this))),AHa=(new w).e("SCALE-COLOR",I(function(){return function(){return(new oJ).b()}}(this))),BHa=(new w).e("SE",I(function(){return function(){return(new pJ).b()}}(this))),CHa=(new w).e("SELF",I(function(){return function(){return(new qJ).b()}}(this))),DHa=(new w).e("SENTENCE",I(function(){return function(){return(new pJ).b()}}(this))),EHa=(new w).e("SHADE-OF?",I(function(){return function(){return(new rJ).b()}}(this))),
+FHa=(new w).e("SHAPES",I(function(){return function(){return(new sJ).b()}}(this))),GHa=(new w).e("SHUFFLE",I(function(){return function(){return(new tJ).b()}}(this))),HHa=(new w).e("SIN",I(function(){return function(){return(new uJ).b()}}(this))),IHa=(new w).e("SORT",I(function(){return function(){return(new vJ).b()}}(this))),JHa=(new w).e("SORT-BY",I(function(){return function(){return(new wJ).b()}}(this))),KHa=(new w).e("SORT-ON",I(function(){return function(){return(new xJ).b()}}(this))),LHa=(new w).e("SQRT",
+I(function(){return function(){return(new yJ).b()}}(this))),MHa=(new w).e("STANDARD-DEVIATION",I(function(){return function(){return(new zJ).b()}}(this))),NHa=(new w).e("SUBJECT",I(function(){return function(){return(new AJ).b()}}(this))),OHa=(new w).e("SUBLIST",I(function(){return function(){return(new BJ).b()}}(this))),PHa=(new w).e("SUBSTRING",I(function(){return function(){return(new CJ).b()}}(this))),QHa=(new w).e("SUBTRACT-HEADINGS",I(function(){return function(){return(new DJ).b()}}(this))),
+RHa=(new w).e("SUM",I(function(){return function(){return(new EJ).b()}}(this))),SHa=(new w).e("TAN",I(function(){return function(){return(new FJ).b()}}(this))),THa=(new w).e("TICKS",I(function(){return function(){return(new GJ).b()}}(this))),UHa=(new w).e("TIMER",I(function(){return function(){return(new HJ).b()}}(this))),VHa=(new w).e("TOWARDS",I(function(){return function(){return(new IJ).b()}}(this))),WHa=(new w).e("TOWARDSXY",I(function(){return function(){return(new JJ).b()}}(this))),XHa=(new w).e("TURTLE",
+I(function(){return function(){return(new KJ).b()}}(this))),YHa=(new w).e("TURTLE-SET",I(function(){return function(){return(new LJ).b()}}(this))),ZHa=(new w).e("TURTLES",I(function(){return function(){return(new MJ).b()}}(this))),$Ha=(new w).e("TURTLES-AT",I(function(){return function(){return(new NJ).b()}}(this))),aIa=(new w).e("TURTLES-HERE",I(function(){return function(){return(new OJ).b()}}(this))),bIa=(new w).e("TURTLES-ON",I(function(){return function(){return(new PJ).b()}}(this))),cIa=(new w).e("UP-TO-N-OF",
+I(function(){return function(){return(new QJ).b()}}(this))),dIa=(new w).e("USER-DIRECTORY",I(function(){return function(){return(new RJ).b()}}(this))),eIa=(new w).e("USER-FILE",I(function(){return function(){return(new SJ).b()}}(this))),fIa=(new w).e("USER-INPUT",I(function(){return function(){return(new TJ).b()}}(this))),gIa=(new w).e("USER-NEW-FILE",I(function(){return function(){return(new UJ).b()}}(this))),hIa=(new w).e("USER-ONE-OF",I(function(){return function(){return(new VJ).b()}}(this))),
+iIa=(new w).e("USER-YES-OR-NO?",I(function(){return function(){return(new WJ).b()}}(this))),jIa=(new w).e("VARIANCE",I(function(){return function(){return(new XJ).b()}}(this))),kIa=(new w).e("WITH",I(function(){return function(){return(new YJ).b()}}(this))),lIa=(new w).e("WITH-MAX",I(function(){return function(){return(new ZJ).b()}}(this))),mIa=(new w).e("WITH-MIN",I(function(){return function(){return(new $J).b()}}(this))),nIa=(new w).e("WORD",I(function(){return function(){return(new aK).b()}}(this))),
+oIa=(new w).e("WORLD-HEIGHT",I(function(){return function(){return(new bK).b()}}(this))),pIa=(new w).e("WORLD-WIDTH",I(function(){return function(){return(new cK).b()}}(this))),qIa=(new w).e("WRAP-COLOR",I(function(){return function(){return(new dK).b()}}(this))),rIa=[Xd,hk,dj,ik,fg,ej,ui,oc,Fb,Yc,Ma,jc,kc,Hl,Fg,Il,jk,Jl,Kl,kk,Ll,lk,mk,nk,ok,Ml,Nl,fj,vi,Lh,gj,wi,Ol,xi,Pl,yi,Ql,zi,pk,hj,qk,Rl,ij,Sl,Tl,Ul,Vl,Wl,jj,kh,rk,sk,lh,mh,tk,uk,vk,Gg,Mh,nh,oh,Ff,ph,wk,kj,xk,Hg,qh,Nh,lj,mj,Zw,$w,ax,OG,bx,PG,ur,
+QG,xn,cx,RG,SG,vr,TG,UG,VG,dx,wr,wn,Z7,NG,E9,F9,H9,I9,J9,K9,hI,L9,N9,O9,P9,b1,Wr,Q9,iI,R9,S9,T9,U9,V9,c1,W9,X9,Y9,jI,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,(new w).e("XOR",I(function(){return function(){return(new eK).b()}}(this)))];this.Kj=Wg(Kh,(new J).j(rIa));this.a=(2|this.a)<<24>>24;var sIa=Ne().qi,tIa=(new w).e("__APPLY",I(function(){return function(){return(new fK).b()}}(this))),uIa=(new w).e("__BENCH",I(function(){return function(){return(new gK).b()}}(this))),vIa=(new w).e("__CHANGE-TOPOLOGY",I(function(){return function(){return(new hK).b()}}(this))),
+wIa=(new w).e("__DONE",I(function(){return function(){return(new iK).b()}}(this))),xIa=(new w).e("__EXPERIMENTSTEPEND",I(function(){return function(){return(new jK).b()}}(this))),yIa=(new w).e("__EXPORT-DRAWING",I(function(){return function(){return(new kK).b()}}(this))),zIa=(new w).e("__FOREVERBUTTONEND",I(function(){return function(){return(new lK).b()}}(this))),AIa=(new w).e("__IGNORE",I(function(){return function(){return(new mK).b()}}(this))),BIa=(new w).e("__LET",I(function(){return function(){return(new nK).b()}}(this))),
+CIa=(new w).e("__LINKCODE",I(function(){return function(){return(new oK).b()}}(this))),DIa=(new w).e("__MKDIR",I(function(){return function(){return(new pK).b()}}(this))),EIa=(new w).e("__OBSERVERCODE",I(function(){return function(){return(new qK).b()}}(this))),FIa=(new w).e("__PATCHCODE",I(function(){return function(){return(new rK).b()}}(this))),GIa=(new w).e("__PLOT-PEN-HIDE",I(function(){return function(){return(new sK).b()}}(this))),HIa=(new w).e("__PLOT-PEN-SHOW",I(function(){return function(){return(new tK).b()}}(this))),
+IIa=(new w).e("__PWD",I(function(){return function(){return(new uK).b()}}(this))),JIa=(new w).e("__RELOAD-EXTENSIONS",I(function(){return function(){return(new vK).b()}}(this))),KIa=(new w).e("__SET-LINE-THICKNESS",I(function(){return function(){return(new wK).b()}}(this))),LIa=(new w).e("__STDERR",I(function(){return function(){return(new xK).b()}}(this))),MIa=(new w).e("__STDOUT",I(function(){return function(){return(new yK).b()}}(this))),NIa=(new w).e("__THUNK-DID-FINISH",I(function(){return function(){return(new zK).b()}}(this))),
+OIa=(new w).e("__TURTLECODE",I(function(){return function(){return(new AK).b()}}(this))),PIa=(new w).e("ASK",I(function(){return function(){return(new BK).b()}}(this))),QIa=(new w).e("ASK-CONCURRENT",I(function(){return function(){return(new CK).b()}}(this))),RIa=(new w).e("AUTO-PLOT-OFF",I(function(){return function(){return(new DK).b()}}(this))),SIa=(new w).e("AUTO-PLOT-ON",I(function(){return function(){return(new EK).b()}}(this))),TIa=(new w).e("BACK",I(function(){return function(){return(new FK).b()}}(this))),
+UIa=(new w).e("BEEP",I(function(){return function(){return(new GK).b()}}(this))),VIa=(new w).e("BK",I(function(){return function(){return(new FK).b()}}(this))),WIa=(new w).e("CA",I(function(){return function(){return(new HK).b()}}(this))),XIa=(new w).e("CAREFULLY",I(function(){return function(){return(new IK).b()}}(this))),YIa=(new w).e("CD",I(function(){return function(){return(new JK).b()}}(this))),ZIa=(new w).e("CLEAR-ALL",I(function(){return function(){return(new HK).b()}}(this))),$Ia=(new w).e("CLEAR-ALL-PLOTS",
+I(function(){return function(){return(new KK).b()}}(this))),aJa=(new w).e("CLEAR-DRAWING",I(function(){return function(){return(new JK).b()}}(this))),bJa=(new w).e("CLEAR-GLOBALS",I(function(){return function(){return(new LK).b()}}(this))),cJa=(new w).e("CLEAR-LINKS",I(function(){return function(){return(new MK).b()}}(this))),dJa=(new w).e("CLEAR-OUTPUT",I(function(){return function(){return(new NK).b()}}(this))),eJa=(new w).e("CLEAR-PATCHES",I(function(){return function(){return(new OK).b()}}(this))),
+fJa=(new w).e("CLEAR-PLOT",I(function(){return function(){return(new PK).b()}}(this))),gJa=(new w).e("CLEAR-TICKS",I(function(){return function(){return(new QK).b()}}(this))),hJa=(new w).e("CLEAR-TURTLES",I(function(){return function(){return(new RK).b()}}(this))),iJa=(new w).e("CP",I(function(){return function(){return(new OK).b()}}(this))),jJa=(new w).e("CREATE-LINK-FROM",I(function(){return function(){return(new xF).b()}}(this))),kJa=(new w).e("CREATE-LINK-TO",I(function(){return function(){return(new wF).b()}}(this))),
+lJa=(new w).e("CREATE-LINK-WITH",I(function(){return function(){return(new vF).b()}}(this))),mJa=(new w).e("CREATE-LINKS-FROM",I(function(){return function(){return(new AF).b()}}(this))),nJa=(new w).e("CREATE-LINKS-TO",I(function(){return function(){return(new zF).b()}}(this))),oJa=(new w).e("CREATE-LINKS-WITH",I(function(){return function(){return(new yF).b()}}(this))),pJa=(new w).e("CREATE-ORDERED-TURTLES",I(function(){return function(){return(new YE).b()}}(this))),qJa=(new w).e("CREATE-TEMPORARY-PLOT-PEN",
+I(function(){return function(){return(new SK).b()}}(this))),rJa=(new w).e("CREATE-TURTLES",I(function(){return function(){return(new ZE).b()}}(this))),sJa=(new w).e("CRO",I(function(){return function(){return(new YE).b()}}(this))),tJa=(new w).e("CRT",I(function(){return function(){return(new ZE).b()}}(this))),uJa=(new w).e("CT",I(function(){return function(){return(new RK).b()}}(this))),vJa=(new w).e("DIE",I(function(){return function(){return(new TK).b()}}(this))),wJa=(new w).e("DIFFUSE",I(function(){return function(){return(new UK).b()}}(this))),
+xJa=(new w).e("DIFFUSE4",I(function(){return function(){return(new VK).b()}}(this))),yJa=(new w).e("DISPLAY",I(function(){return function(){return(new WK).b()}}(this))),zJa=(new w).e("DOWNHILL",I(function(){return function(){return(new XK).b()}}(this))),AJa=(new w).e("DOWNHILL4",I(function(){return function(){return(new YK).b()}}(this))),BJa=(new w).e("ERROR",I(function(){return function(){return(new ZK).b()}}(this))),CJa=(new w).e("EVERY",I(function(){return function(){return(new $K).b()}}(this))),
+DJa=(new w).e("EXPORT-ALL-PLOTS",I(function(){return function(){return(new aL).b()}}(this))),EJa=(new w).e("EXPORT-INTERFACE",I(function(){return function(){return(new bL).b()}}(this))),FJa=(new w).e("EXPORT-OUTPUT",I(function(){return function(){return(new cL).b()}}(this))),GJa=(new w).e("EXPORT-PLOT",I(function(){return function(){return(new dL).b()}}(this))),HJa=(new w).e("EXPORT-VIEW",I(function(){return function(){return(new eL).b()}}(this))),IJa=(new w).e("EXPORT-WORLD",I(function(){return function(){return(new fL).b()}}(this))),
+JJa=(new w).e("FACE",I(function(){return function(){return(new gL).b()}}(this))),KJa=(new w).e("FACEXY",I(function(){return function(){return(new hL).b()}}(this))),LJa=(new w).e("FD",I(function(){return function(){return(new iL).b()}}(this))),MJa=(new w).e("FILE-CLOSE",I(function(){return function(){return(new jL).b()}}(this))),NJa=(new w).e("FILE-CLOSE-ALL",I(function(){return function(){return(new kL).b()}}(this))),OJa=(new w).e("FILE-DELETE",I(function(){return function(){return(new lL).b()}}(this))),
+PJa=(new w).e("FILE-FLUSH",I(function(){return function(){return(new mL).b()}}(this))),QJa=(new w).e("FILE-OPEN",I(function(){return function(){return(new nL).b()}}(this))),RJa=(new w).e("FILE-PRINT",I(function(){return function(){return(new oL).b()}}(this))),SJa=(new w).e("FILE-SHOW",I(function(){return function(){return(new pL).b()}}(this))),TJa=(new w).e("FILE-TYPE",I(function(){return function(){return(new qL).b()}}(this))),UJa=(new w).e("FILE-WRITE",I(function(){return function(){return(new rL).b()}}(this))),
+VJa=(new w).e("FOLLOW",I(function(){return function(){return(new sL).b()}}(this))),WJa=(new w).e("FOLLOW-ME",I(function(){return function(){return(new tL).b()}}(this))),XJa=(new w).e("FOREACH",I(function(){return function(){return(new uL).b()}}(this))),YJa=(new w).e("FORWARD",I(function(){return function(){return(new iL).b()}}(this))),ZJa=(new w).e("HATCH",I(function(){return function(){return(new $E).b()}}(this))),$Ja=(new w).e("HIDE-LINK",I(function(){return function(){return(new vL).b()}}(this))),
+aKa=(new w).e("HIDE-TURTLE",I(function(){return function(){return(new wL).b()}}(this))),bKa=(new w).e("HISTOGRAM",I(function(){return function(){return(new xL).b()}}(this))),cKa=(new w).e("HOME",I(function(){return function(){return(new yL).b()}}(this))),dKa=(new w).e("HT",I(function(){return function(){return(new wL).b()}}(this))),eKa=(new w).e("HUBNET-BROADCAST",I(function(){return function(){return(new zL).b()}}(this))),fKa=(new w).e("HUBNET-BROADCAST-CLEAR-OUTPUT",I(function(){return function(){return(new AL).b()}}(this))),
+gKa=(new w).e("HUBNET-BROADCAST-MESSAGE",I(function(){return function(){return(new BL).b()}}(this))),hKa=(new w).e("HUBNET-CLEAR-OVERRIDE",I(function(){return function(){return(new CL).b()}}(this))),iKa=(new w).e("HUBNET-CLEAR-OVERRIDES",I(function(){return function(){return(new DL).b()}}(this))),jKa=(new w).e("HUBNET-FETCH-MESSAGE",I(function(){return function(){return(new EL).b()}}(this))),kKa=(new w).e("HUBNET-KICK-ALL-CLIENTS",I(function(){return function(){return(new FL).b()}}(this))),lKa=(new w).e("HUBNET-KICK-CLIENT",
+I(function(){return function(){return(new GL).b()}}(this))),mKa=(new w).e("HUBNET-RESET",I(function(){return function(){return(new HL).b()}}(this))),nKa=(new w).e("HUBNET-RESET-PERSPECTIVE",I(function(){return function(){return(new IL).b()}}(this))),oKa=(new w).e("HUBNET-SEND",I(function(){return function(){return(new JL).b()}}(this))),pKa=(new w).e("HUBNET-SEND-CLEAR-OUTPUT",I(function(){return function(){return(new KL).b()}}(this))),qKa=(new w).e("HUBNET-SEND-FOLLOW",I(function(){return function(){return(new LL).b()}}(this))),
+rKa=(new w).e("HUBNET-SEND-MESSAGE",I(function(){return function(){return(new ML).b()}}(this))),sKa=(new w).e("HUBNET-SEND-OVERRIDE",I(function(){return function(){return(new NL).b()}}(this))),tKa=(new w).e("HUBNET-SEND-WATCH",I(function(){return function(){return(new OL).b()}}(this))),uKa=(new w).e("IF",I(function(){return function(){return(new PL).b()}}(this))),vKa=(new w).e("IF-ELSE",I(function(){return function(){return(new QL).b()}}(this))),wKa=(new w).e("IFELSE",I(function(){return function(){return(new QL).b()}}(this))),
+xKa=(new w).e("IMPORT-DRAWING",I(function(){return function(){return(new RL).b()}}(this))),yKa=(new w).e("IMPORT-PCOLORS",I(function(){return function(){return(new SL).b()}}(this))),zKa=(new w).e("IMPORT-PCOLORS-RGB",I(function(){return function(){return(new TL).b()}}(this))),AKa=(new w).e("IMPORT-WORLD",I(function(){return function(){return(new UL).b()}}(this))),BKa=(new w).e("INSPECT",I(function(){return function(){return(new VL).b()}}(this))),CKa=(new w).e("JUMP",I(function(){return function(){return(new WL).b()}}(this))),
+DKa=(new w).e("LAYOUT-CIRCLE",I(function(){return function(){return(new XL).b()}}(this))),EKa=(new w).e("LAYOUT-RADIAL",I(function(){return function(){return(new YL).b()}}(this))),FKa=(new w).e("LAYOUT-SPRING",I(function(){return function(){return(new ZL).b()}}(this))),GKa=(new w).e("LAYOUT-TUTTE",I(function(){return function(){return(new $L).b()}}(this))),HKa=(new w).e("LEFT",I(function(){return function(){return(new aM).b()}}(this))),IKa=(new w).e("LET",I(function(){return function(){return(new nK).b()}}(this))),
+JKa=(new w).e("LOOP",I(function(){return function(){return(new bM).b()}}(this))),KKa=(new w).e("LT",I(function(){return function(){return(new aM).b()}}(this))),LKa=(new w).e("MOVE-TO",I(function(){return function(){return(new cM).b()}}(this))),MKa=(new w).e("NO-DISPLAY",I(function(){return function(){return(new dM).b()}}(this))),NKa=(new w).e("OUTPUT-PRINT",I(function(){return function(){return(new eM).b()}}(this))),OKa=(new w).e("OUTPUT-SHOW",I(function(){return function(){return(new fM).b()}}(this))),
+PKa=(new w).e("OUTPUT-TYPE",I(function(){return function(){return(new gM).b()}}(this))),QKa=(new w).e("OUTPUT-WRITE",I(function(){return function(){return(new hM).b()}}(this))),RKa=(new w).e("PD",I(function(){return function(){return(new iM).b()}}(this))),SKa=(new w).e("PE",I(function(){return function(){return(new jM).b()}}(this))),TKa=(new w).e("PEN-DOWN",I(function(){return function(){return(new iM).b()}}(this))),UKa=(new w).e("PEN-ERASE",I(function(){return function(){return(new jM).b()}}(this))),
+VKa=(new w).e("PEN-UP",I(function(){return function(){return(new kM).b()}}(this))),WKa=(new w).e("PENDOWN",I(function(){return function(){return(new iM).b()}}(this))),XKa=(new w).e("PENUP",I(function(){return function(){return(new kM).b()}}(this))),YKa=(new w).e("PLOT",I(function(){return function(){return(new lM).b()}}(this))),ZKa=(new w).e("PLOT-PEN-DOWN",I(function(){return function(){return(new mM).b()}}(this))),$Ka=(new w).e("PLOT-PEN-RESET",I(function(){return function(){return(new nM).b()}}(this))),
+aLa=(new w).e("PLOT-PEN-UP",I(function(){return function(){return(new oM).b()}}(this))),bLa=(new w).e("PLOTXY",I(function(){return function(){return(new pM).b()}}(this))),cLa=(new w).e("PRINT",I(function(){return function(){return(new qM).b()}}(this))),dLa=(new w).e("PU",I(function(){return function(){return(new kM).b()}}(this))),eLa=(new w).e("RANDOM-SEED",I(function(){return function(){return(new rM).b()}}(this))),fLa=(new w).e("REPEAT",I(function(){return function(){return(new sM).b()}}(this))),
+gLa=(new w).e("REPORT",I(function(){return function(){return(new tM).b()}}(this))),hLa=(new w).e("RESET-PERSPECTIVE",I(function(){return function(){return(new uM).b()}}(this))),iLa=(new w).e("RESET-TICKS",I(function(){return function(){return(new vM).b()}}(this))),jLa=(new w).e("RESET-TIMER",I(function(){return function(){return(new wM).b()}}(this))),kLa=(new w).e("RESIZE-WORLD",I(function(){return function(){return(new xM).b()}}(this))),lLa=(new w).e("RIDE",I(function(){return function(){return(new yM).b()}}(this))),
+mLa=(new w).e("RIDE-ME",I(function(){return function(){return(new zM).b()}}(this))),nLa=(new w).e("RIGHT",I(function(){return function(){return(new AM).b()}}(this))),oLa=(new w).e("RP",I(function(){return function(){return(new uM).b()}}(this))),pLa=(new w).e("RT",I(function(){return function(){return(new AM).b()}}(this))),qLa=(new w).e("RUN",I(function(){return function(){return(new BM).b()}}(this))),rLa=(new w).e("SET",I(function(){return function(){return(new CM).b()}}(this))),sLa=(new w).e("SET-CURRENT-DIRECTORY",
+I(function(){return function(){return(new DM).b()}}(this))),tLa=(new w).e("SET-CURRENT-PLOT",I(function(){return function(){return(new EM).b()}}(this))),uLa=(new w).e("SET-CURRENT-PLOT-PEN",I(function(){return function(){return(new FM).b()}}(this))),vLa=(new w).e("SET-DEFAULT-SHAPE",I(function(){return function(){return(new GM).b()}}(this))),wLa=(new w).e("SET-HISTOGRAM-NUM-BARS",I(function(){return function(){return(new HM).b()}}(this))),xLa=(new w).e("SET-PATCH-SIZE",I(function(){return function(){return(new IM).b()}}(this))),
+yLa=(new w).e("SET-PLOT-PEN-COLOR",I(function(){return function(){return(new JM).b()}}(this))),zLa=(new w).e("SET-PLOT-PEN-INTERVAL",I(function(){return function(){return(new KM).b()}}(this))),ALa=(new w).e("SET-PLOT-PEN-MODE",I(function(){return function(){return(new LM).b()}}(this))),BLa=(new w).e("SET-PLOT-X-RANGE",I(function(){return function(){return(new MM).b()}}(this))),CLa=(new w).e("SET-PLOT-Y-RANGE",I(function(){return function(){return(new NM).b()}}(this))),DLa=(new w).e("SETUP-PLOTS",
+I(function(){return function(){return(new OM).b()}}(this))),ELa=(new w).e("SETXY",I(function(){return function(){return(new PM).b()}}(this))),FLa=(new w).e("SHOW",I(function(){return function(){return(new QM).b()}}(this))),GLa=(new w).e("SHOW-LINK",I(function(){return function(){return(new RM).b()}}(this))),HLa=(new w).e("SHOW-TURTLE",I(function(){return function(){return(new SM).b()}}(this))),ILa=(new w).e("SPROUT",I(function(){return function(){return(new bF).b()}}(this))),JLa=(new w).e("ST",I(function(){return function(){return(new SM).b()}}(this))),
+KLa=(new w).e("STAMP",I(function(){return function(){return(new TM).b()}}(this))),LLa=(new w).e("STAMP-ERASE",I(function(){return function(){return(new UM).b()}}(this))),MLa=(new w).e("STOP",I(function(){return function(){return(new VM).b()}}(this))),NLa=(new w).e("STOP-INSPECTING",I(function(){return function(){return(new WM).b()}}(this))),OLa=(new w).e("STOP-INSPECTING-DEAD-AGENTS",I(function(){return function(){return(new XM).b()}}(this))),PLa=(new w).e("TICK",I(function(){return function(){return(new YM).b()}}(this))),
+QLa=(new w).e("TICK-ADVANCE",I(function(){return function(){return(new ZM).b()}}(this))),RLa=(new w).e("TIE",I(function(){return function(){return(new $M).b()}}(this))),SLa=(new w).e("TYPE",I(function(){return function(){return(new aN).b()}}(this))),TLa=(new w).e("UNTIE",I(function(){return function(){return(new bN).b()}}(this))),ULa=(new w).e("UPDATE-PLOTS",I(function(){return function(){return(new cN).b()}}(this))),VLa=(new w).e("UPHILL",I(function(){return function(){return(new dN).b()}}(this))),
+WLa=(new w).e("UPHILL4",I(function(){return function(){return(new eN).b()}}(this))),XLa=(new w).e("USER-MESSAGE",I(function(){return function(){return(new fN).b()}}(this))),YLa=(new w).e("WAIT",I(function(){return function(){return(new gN).b()}}(this))),ZLa=(new w).e("WATCH",I(function(){return function(){return(new hN).b()}}(this))),$La=(new w).e("WATCH-ME",I(function(){return function(){return(new iN).b()}}(this))),aMa=(new w).e("WHILE",I(function(){return function(){return(new jN).b()}}(this))),
+bMa=(new w).e("WITH-LOCAL-RANDOMNESS",I(function(){return function(){return(new kN).b()}}(this))),cMa=(new w).e("WITHOUT-INTERRUPTION",I(function(){return function(){return(new lN).b()}}(this))),dMa=[tIa,uIa,vIa,wIa,xIa,yIa,zIa,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,$Ia,aJa,bJa,cJa,dJa,eJa,fJa,gJa,hJa,iJa,jJa,kJa,lJa,mJa,nJa,oJa,pJa,qJa,rJa,sJa,tJa,uJa,vJa,wJa,xJa,yJa,zJa,AJa,BJa,CJa,DJa,EJa,FJa,GJa,HJa,IJa,JJa,KJa,LJa,MJa,NJa,OJa,PJa,
+QJa,RJa,SJa,TJa,UJa,VJa,WJa,XJa,YJa,ZJa,$Ja,aKa,bKa,cKa,dKa,eKa,fKa,gKa,hKa,iKa,jKa,kKa,lKa,mKa,nKa,oKa,pKa,qKa,rKa,sKa,tKa,uKa,vKa,wKa,xKa,yKa,zKa,AKa,BKa,CKa,DKa,EKa,FKa,GKa,HKa,IKa,JKa,KKa,LKa,MKa,NKa,OKa,PKa,QKa,RKa,SKa,TKa,UKa,VKa,WKa,XKa,YKa,ZKa,$Ka,aLa,bLa,cLa,dLa,eLa,fLa,gLa,hLa,iLa,jLa,kLa,lLa,mLa,nLa,oLa,pLa,qLa,rLa,sLa,tLa,uLa,vLa,wLa,xLa,yLa,zLa,ALa,BLa,CLa,DLa,ELa,FLa,GLa,HLa,ILa,JLa,KLa,LLa,MLa,NLa,OLa,PLa,QLa,RLa,SLa,TLa,ULa,VLa,WLa,XLa,YLa,ZLa,$La,aMa,bMa,cMa,(new w).e("WRITE",I(function(){return function(){return(new mN).b()}}(this)))];
+this.vj=Wg(sIa,(new J).j(dMa));this.a=(4|this.a)<<24>>24;var eMa=Ne().qi,fMa=G(t(),(new J).j(["__APPLY"])),gMa=(new w).e("etc._apply",fMa),hMa=G(t(),(new J).j(["__BENCH"])),iMa=(new w).e("etc._bench",hMa),jMa=G(t(),(new J).j(["__CHANGE-TOPOLOGY"])),kMa=(new w).e("etc._changetopology",jMa),lMa=G(t(),(new J).j(["__DONE"])),mMa=(new w).e("_done",lMa),nMa=G(t(),(new J).j(["__EXPERIMENTSTEPEND"])),oMa=(new w).e("etc._experimentstepend",nMa),pMa=G(t(),(new J).j(["__EXPORT-DRAWING"])),qMa=(new w).e("etc._exportdrawing",
+pMa),rMa=G(t(),(new J).j(["__FOREVERBUTTONEND"])),sMa=(new w).e("etc._foreverbuttonend",rMa),tMa=G(t(),(new J).j(["__IGNORE"])),uMa=(new w).e("etc._ignore",tMa),vMa=G(t(),(new J).j(["__LET","LET"])),wMa=(new w).e("_let",vMa),xMa=G(t(),(new J).j(["__LINKCODE"])),yMa=(new w).e("etc._linkcode",xMa),zMa=G(t(),(new J).j(["__MKDIR"])),AMa=(new w).e("etc._mkdir",zMa),BMa=G(t(),(new J).j(["__OBSERVERCODE"])),CMa=(new w).e("etc._observercode",BMa),DMa=G(t(),(new J).j(["__PATCHCODE"])),EMa=(new w).e("etc._patchcode",
+DMa),FMa=G(t(),(new J).j(["__PLOT-PEN-HIDE"])),GMa=(new w).e("etc._plotpenhide",FMa),HMa=G(t(),(new J).j(["__PLOT-PEN-SHOW"])),IMa=(new w).e("etc._plotpenshow",HMa),JMa=G(t(),(new J).j(["__PWD"])),KMa=(new w).e("etc._pwd",JMa),LMa=G(t(),(new J).j(["__RELOAD-EXTENSIONS"])),MMa=(new w).e("etc._reloadextensions",LMa),NMa=G(t(),(new J).j(["__SET-LINE-THICKNESS"])),OMa=(new w).e("etc._setlinethickness",NMa),PMa=G(t(),(new J).j(["__STDERR"])),QMa=(new w).e("etc._stderr",PMa),RMa=G(t(),(new J).j(["__STDOUT"])),
+SMa=(new w).e("etc._stdout",RMa),TMa=G(t(),(new J).j(["__THUNK-DID-FINISH"])),UMa=(new w).e("etc._thunkdidfinish",TMa),VMa=G(t(),(new J).j(["__TURTLECODE"])),WMa=(new w).e("etc._turtlecode",VMa),XMa=G(t(),(new J).j(["ASK"])),YMa=(new w).e("_ask",XMa),ZMa=G(t(),(new J).j(["ASK-CONCURRENT"])),$Ma=(new w).e("_askconcurrent",ZMa),aNa=G(t(),(new J).j(["AUTO-PLOT-OFF"])),bNa=(new w).e("etc._autoplotoff",aNa),cNa=G(t(),(new J).j(["AUTO-PLOT-ON"])),dNa=(new w).e("etc._autoploton",cNa),eNa=G(t(),(new J).j(["BACK",
+"BK"])),fNa=(new w).e("_bk",eNa),gNa=G(t(),(new J).j(["BEEP"])),hNa=(new w).e("etc._beep",gNa),iNa=G(t(),(new J).j(["BACK","BK"])),jNa=(new w).e("_bk",iNa),kNa=G(t(),(new J).j(["CA","CLEAR-ALL"])),lNa=(new w).e("etc._clearall",kNa),mNa=G(t(),(new J).j(["CAREFULLY"])),nNa=(new w).e("_carefully",mNa),oNa=G(t(),(new J).j(["CD","CLEAR-DRAWING"])),pNa=(new w).e("etc._cleardrawing",oNa),qNa=G(t(),(new J).j(["CA","CLEAR-ALL"])),rNa=(new w).e("etc._clearall",qNa),sNa=G(t(),(new J).j(["CLEAR-ALL-PLOTS"])),
+tNa=(new w).e("etc._clearallplots",sNa),uNa=G(t(),(new J).j(["CD","CLEAR-DRAWING"])),vNa=(new w).e("etc._cleardrawing",uNa),wNa=G(t(),(new J).j(["CLEAR-GLOBALS"])),xNa=(new w).e("etc._clearglobals",wNa),yNa=G(t(),(new J).j(["CLEAR-LINKS"])),zNa=(new w).e("etc._clearlinks",yNa),ANa=G(t(),(new J).j(["CLEAR-OUTPUT"])),BNa=(new w).e("etc._clearoutput",ANa),CNa=G(t(),(new J).j(["CLEAR-PATCHES","CP"])),DNa=(new w).e("etc._clearpatches",CNa),ENa=G(t(),(new J).j(["CLEAR-PLOT"])),FNa=(new w).e("etc._clearplot",
+ENa),GNa=G(t(),(new J).j(["CLEAR-TICKS"])),HNa=(new w).e("etc._clearticks",GNa),INa=G(t(),(new J).j(["CLEAR-TURTLES","CT"])),JNa=(new w).e("etc._clearturtles",INa),KNa=G(t(),(new J).j(["CLEAR-PATCHES","CP"])),LNa=(new w).e("etc._clearpatches",KNa),MNa=G(t(),(new J).j(["CREATE-LINK-FROM"])),NNa=(new w).e("etc._createlinkfrom",MNa),ONa=G(t(),(new J).j(["CREATE-LINK-TO"])),PNa=(new w).e("etc._createlinkto",ONa),QNa=G(t(),(new J).j(["CREATE-LINK-WITH"])),RNa=(new w).e("etc._createlinkwith",QNa),SNa=G(t(),
+(new J).j(["CREATE-LINKS-FROM"])),TNa=(new w).e("etc._createlinksfrom",SNa),UNa=G(t(),(new J).j(["CREATE-LINKS-TO"])),VNa=(new w).e("etc._createlinksto",UNa),WNa=G(t(),(new J).j(["CREATE-LINKS-WITH"])),XNa=(new w).e("etc._createlinkswith",WNa),YNa=G(t(),(new J).j(["CREATE-ORDERED-TURTLES","CRO"])),ZNa=(new w).e("_createorderedturtles",YNa),$Na=G(t(),(new J).j(["CREATE-TEMPORARY-PLOT-PEN"])),aOa=(new w).e("etc._createtemporaryplotpen",$Na),bOa=G(t(),(new J).j(["CREATE-TURTLES","CRT"])),cOa=(new w).e("_createturtles",
+bOa),dOa=G(t(),(new J).j(["CREATE-ORDERED-TURTLES","CRO"])),eOa=(new w).e("_createorderedturtles",dOa),fOa=G(t(),(new J).j(["CREATE-TURTLES","CRT"])),gOa=(new w).e("_createturtles",fOa),hOa=G(t(),(new J).j(["CLEAR-TURTLES","CT"])),iOa=(new w).e("etc._clearturtles",hOa),jOa=G(t(),(new J).j(["DIE"])),kOa=(new w).e("etc._die",jOa),lOa=G(t(),(new J).j(["DIFFUSE"])),mOa=(new w).e("etc._diffuse",lOa),nOa=G(t(),(new J).j(["DIFFUSE4"])),oOa=(new w).e("etc._diffuse4",nOa),pOa=G(t(),(new J).j(["DISPLAY"])),
+qOa=(new w).e("etc._display",pOa),rOa=G(t(),(new J).j(["DOWNHILL"])),sOa=(new w).e("etc._downhill",rOa),tOa=G(t(),(new J).j(["DOWNHILL4"])),uOa=(new w).e("etc._downhill4",tOa),vOa=G(t(),(new J).j(["ERROR"])),wOa=(new w).e("etc._error",vOa),xOa=G(t(),(new J).j(["EVERY"])),yOa=(new w).e("etc._every",xOa),zOa=G(t(),(new J).j(["EXPORT-ALL-PLOTS"])),AOa=(new w).e("etc._exportplots",zOa),BOa=G(t(),(new J).j(["EXPORT-INTERFACE"])),COa=(new w).e("etc._exportinterface",BOa),DOa=G(t(),(new J).j(["EXPORT-OUTPUT"])),
+EOa=(new w).e("etc._exportoutput",DOa),FOa=G(t(),(new J).j(["EXPORT-PLOT"])),GOa=(new w).e("etc._exportplot",FOa),HOa=G(t(),(new J).j(["EXPORT-VIEW"])),IOa=(new w).e("etc._exportview",HOa),JOa=G(t(),(new J).j(["EXPORT-WORLD"])),KOa=(new w).e("etc._exportworld",JOa),LOa=G(t(),(new J).j(["FACE"])),MOa=(new w).e("etc._face",LOa),NOa=G(t(),(new J).j(["FACEXY"])),OOa=(new w).e("etc._facexy",NOa),POa=G(t(),(new J).j(["FD","FORWARD"])),QOa=(new w).e("_fd",POa),ROa=G(t(),(new J).j(["FILE-CLOSE"])),SOa=(new w).e("etc._fileclose",
+ROa),TOa=G(t(),(new J).j(["FILE-CLOSE-ALL"])),UOa=(new w).e("etc._filecloseall",TOa),VOa=G(t(),(new J).j(["FILE-DELETE"])),WOa=(new w).e("etc._filedelete",VOa),XOa=G(t(),(new J).j(["FILE-FLUSH"])),YOa=(new w).e("etc._fileflush",XOa),ZOa=G(t(),(new J).j(["FILE-OPEN"])),$Oa=(new w).e("etc._fileopen",ZOa),aPa=G(t(),(new J).j(["FILE-PRINT"])),bPa=(new w).e("etc._fileprint",aPa),cPa=G(t(),(new J).j(["FILE-SHOW"])),dPa=(new w).e("etc._fileshow",cPa),ePa=G(t(),(new J).j(["FILE-TYPE"])),fPa=(new w).e("etc._filetype",
+ePa),gPa=G(t(),(new J).j(["FILE-WRITE"])),hPa=(new w).e("etc._filewrite",gPa),iPa=G(t(),(new J).j(["FOLLOW"])),jPa=(new w).e("etc._follow",iPa),kPa=G(t(),(new J).j(["FOLLOW-ME"])),lPa=(new w).e("etc._followme",kPa),mPa=G(t(),(new J).j(["FOREACH"])),nPa=(new w).e("etc._foreach",mPa),oPa=G(t(),(new J).j(["FD","FORWARD"])),pPa=(new w).e("_fd",oPa),qPa=G(t(),(new J).j(["HATCH"])),rPa=(new w).e("_hatch",qPa),sPa=G(t(),(new J).j(["HIDE-LINK"])),tPa=(new w).e("etc._hidelink",sPa),uPa=G(t(),(new J).j(["HIDE-TURTLE",
+"HT"])),vPa=(new w).e("etc._hideturtle",uPa),wPa=G(t(),(new J).j(["HISTOGRAM"])),xPa=(new w).e("etc._histogram",wPa),yPa=G(t(),(new J).j(["HOME"])),zPa=(new w).e("etc._home",yPa),APa=G(t(),(new J).j(["HIDE-TURTLE","HT"])),BPa=(new w).e("etc._hideturtle",APa),CPa=G(t(),(new J).j(["HUBNET-BROADCAST"])),DPa=(new w).e("hubnet._hubnetbroadcast",CPa),EPa=G(t(),(new J).j(["HUBNET-BROADCAST-CLEAR-OUTPUT"])),FPa=(new w).e("hubnet._hubnetbroadcastclearoutput",EPa),GPa=G(t(),(new J).j(["HUBNET-BROADCAST-MESSAGE"])),
+HPa=(new w).e("hubnet._hubnetbroadcastmessage",GPa),IPa=G(t(),(new J).j(["HUBNET-CLEAR-OVERRIDE"])),JPa=(new w).e("hubnet._hubnetclearoverride",IPa),KPa=G(t(),(new J).j(["HUBNET-CLEAR-OVERRIDES"])),LPa=(new w).e("hubnet._hubnetclearoverrides",KPa),MPa=G(t(),(new J).j(["HUBNET-FETCH-MESSAGE"])),NPa=(new w).e("hubnet._hubnetfetchmessage",MPa),OPa=G(t(),(new J).j(["HUBNET-KICK-ALL-CLIENTS"])),PPa=(new w).e("hubnet._hubnetkickallclients",OPa),QPa=G(t(),(new J).j(["HUBNET-KICK-CLIENT"])),RPa=(new w).e("hubnet._hubnetkickclient",
+QPa),SPa=G(t(),(new J).j(["HUBNET-RESET"])),TPa=(new w).e("hubnet._hubnetreset",SPa),UPa=G(t(),(new J).j(["HUBNET-RESET-PERSPECTIVE"])),VPa=(new w).e("hubnet._hubnetresetperspective",UPa),WPa=G(t(),(new J).j(["HUBNET-SEND"])),XPa=(new w).e("hubnet._hubnetsend",WPa),YPa=G(t(),(new J).j(["HUBNET-SEND-CLEAR-OUTPUT"])),ZPa=(new w).e("hubnet._hubnetsendclearoutput",YPa),$Pa=G(t(),(new J).j(["HUBNET-SEND-FOLLOW"])),aQa=(new w).e("hubnet._hubnetsendfollow",$Pa),bQa=G(t(),(new J).j(["HUBNET-SEND-MESSAGE"])),
+cQa=(new w).e("hubnet._hubnetsendmessage",bQa),dQa=G(t(),(new J).j(["HUBNET-SEND-OVERRIDE"])),eQa=(new w).e("hubnet._hubnetsendoverride",dQa),fQa=G(t(),(new J).j(["HUBNET-SEND-WATCH"])),gQa=(new w).e("hubnet._hubnetsendwatch",fQa),hQa=G(t(),(new J).j(["IF"])),iQa=(new w).e("etc._if",hQa),jQa=G(t(),(new J).j(["IF-ELSE","IFELSE"])),kQa=(new w).e("etc._ifelse",jQa),lQa=G(t(),(new J).j(["IF-ELSE","IFELSE"])),mQa=(new w).e("etc._ifelse",lQa),nQa=G(t(),(new J).j(["IMPORT-DRAWING"])),oQa=(new w).e("etc._importdrawing",
+nQa),pQa=G(t(),(new J).j(["IMPORT-PCOLORS"])),qQa=(new w).e("etc._importpatchcolors",pQa),rQa=G(t(),(new J).j(["IMPORT-PCOLORS-RGB"])),sQa=(new w).e("etc._importpcolorsrgb",rQa),tQa=G(t(),(new J).j(["IMPORT-WORLD"])),uQa=(new w).e("etc._importworld",tQa),vQa=G(t(),(new J).j(["INSPECT"])),wQa=(new w).e("etc._inspect",vQa),xQa=G(t(),(new J).j(["JUMP"])),yQa=(new w).e("_jump",xQa),zQa=G(t(),(new J).j(["LAYOUT-CIRCLE"])),AQa=(new w).e("etc._layoutcircle",zQa),BQa=G(t(),(new J).j(["LAYOUT-RADIAL"])),CQa=
+(new w).e("etc._layoutradial",BQa),DQa=G(t(),(new J).j(["LAYOUT-SPRING"])),EQa=(new w).e("etc._layoutspring",DQa),FQa=G(t(),(new J).j(["LAYOUT-TUTTE"])),GQa=(new w).e("etc._layouttutte",FQa),HQa=G(t(),(new J).j(["LEFT","LT"])),IQa=(new w).e("etc._left",HQa),JQa=G(t(),(new J).j(["__LET","LET"])),KQa=(new w).e("_let",JQa),LQa=G(t(),(new J).j(["LOOP"])),MQa=(new w).e("etc._loop",LQa),NQa=G(t(),(new J).j(["LEFT","LT"])),OQa=(new w).e("etc._left",NQa),PQa=G(t(),(new J).j(["MOVE-TO"])),QQa=(new w).e("etc._moveto",
+PQa),RQa=G(t(),(new J).j(["NO-DISPLAY"])),SQa=(new w).e("etc._nodisplay",RQa),TQa=G(t(),(new J).j(["OUTPUT-PRINT"])),UQa=(new w).e("etc._outputprint",TQa),VQa=G(t(),(new J).j(["OUTPUT-SHOW"])),WQa=(new w).e("etc._outputshow",VQa),XQa=G(t(),(new J).j(["OUTPUT-TYPE"])),YQa=(new w).e("etc._outputtype",XQa),ZQa=G(t(),(new J).j(["OUTPUT-WRITE"])),$Qa=(new w).e("etc._outputwrite",ZQa),aRa=G(t(),(new J).j(["PD","PEN-DOWN","PENDOWN"])),bRa=(new w).e("etc._pendown",aRa),cRa=G(t(),(new J).j(["PE","PEN-ERASE"])),
+dRa=(new w).e("etc._penerase",cRa),eRa=G(t(),(new J).j(["PD","PEN-DOWN","PENDOWN"])),fRa=(new w).e("etc._pendown",eRa),gRa=G(t(),(new J).j(["PE","PEN-ERASE"])),hRa=(new w).e("etc._penerase",gRa),iRa=G(t(),(new J).j(["PEN-UP","PENUP","PU"])),jRa=(new w).e("etc._penup",iRa),kRa=G(t(),(new J).j(["PD","PEN-DOWN","PENDOWN"])),lRa=(new w).e("etc._pendown",kRa),mRa=G(t(),(new J).j(["PEN-UP","PENUP","PU"])),nRa=(new w).e("etc._penup",mRa),oRa=G(t(),(new J).j(["PLOT"])),pRa=(new w).e("etc._plot",oRa),qRa=
+G(t(),(new J).j(["PLOT-PEN-DOWN"])),rRa=(new w).e("etc._plotpendown",qRa),sRa=G(t(),(new J).j(["PLOT-PEN-RESET"])),tRa=(new w).e("etc._plotpenreset",sRa),uRa=G(t(),(new J).j(["PLOT-PEN-UP"])),vRa=(new w).e("etc._plotpenup",uRa),wRa=G(t(),(new J).j(["PLOTXY"])),xRa=(new w).e("etc._plotxy",wRa),yRa=G(t(),(new J).j(["PRINT"])),zRa=(new w).e("etc._print",yRa),ARa=G(t(),(new J).j(["PEN-UP","PENUP","PU"])),BRa=(new w).e("etc._penup",ARa),CRa=G(t(),(new J).j(["RANDOM-SEED"])),DRa=(new w).e("etc._randomseed",
+CRa),ERa=G(t(),(new J).j(["REPEAT"])),FRa=(new w).e("_repeat",ERa),GRa=G(t(),(new J).j(["REPORT"])),HRa=(new w).e("_report",GRa),IRa=G(t(),(new J).j(["RESET-PERSPECTIVE","RP"])),JRa=(new w).e("etc._resetperspective",IRa),KRa=G(t(),(new J).j(["RESET-TICKS"])),LRa=(new w).e("etc._resetticks",KRa),MRa=G(t(),(new J).j(["RESET-TIMER"])),NRa=(new w).e("etc._resettimer",MRa),ORa=G(t(),(new J).j(["RESIZE-WORLD"])),PRa=(new w).e("etc._resizeworld",ORa),QRa=G(t(),(new J).j(["RIDE"])),RRa=(new w).e("etc._ride",
+QRa),SRa=G(t(),(new J).j(["RIDE-ME"])),TRa=(new w).e("etc._rideme",SRa),URa=G(t(),(new J).j(["RIGHT","RT"])),VRa=(new w).e("etc._right",URa),WRa=G(t(),(new J).j(["RESET-PERSPECTIVE","RP"])),XRa=(new w).e("etc._resetperspective",WRa),YRa=G(t(),(new J).j(["RIGHT","RT"])),ZRa=(new w).e("etc._right",YRa),$Ra=G(t(),(new J).j(["RUN"])),aSa=(new w).e("_run",$Ra),bSa=G(t(),(new J).j(["SET"])),cSa=(new w).e("_set",bSa),dSa=G(t(),(new J).j(["SET-CURRENT-DIRECTORY"])),eSa=(new w).e("etc._setcurdir",dSa),fSa=
+G(t(),(new J).j(["SET-CURRENT-PLOT"])),gSa=(new w).e("etc._setcurrentplot",fSa),hSa=G(t(),(new J).j(["SET-CURRENT-PLOT-PEN"])),iSa=(new w).e("etc._setcurrentplotpen",hSa),jSa=G(t(),(new J).j(["SET-DEFAULT-SHAPE"])),kSa=(new w).e("etc._setdefaultshape",jSa),lSa=G(t(),(new J).j(["SET-HISTOGRAM-NUM-BARS"])),mSa=(new w).e("etc._sethistogramnumbars",lSa),nSa=G(t(),(new J).j(["SET-PATCH-SIZE"])),oSa=(new w).e("etc._setpatchsize",nSa),pSa=G(t(),(new J).j(["SET-PLOT-PEN-COLOR"])),qSa=(new w).e("etc._setplotpencolor",
+pSa),rSa=G(t(),(new J).j(["SET-PLOT-PEN-INTERVAL"])),sSa=(new w).e("etc._setplotpeninterval",rSa),tSa=G(t(),(new J).j(["SET-PLOT-PEN-MODE"])),uSa=(new w).e("etc._setplotpenmode",tSa),vSa=G(t(),(new J).j(["SET-PLOT-X-RANGE"])),wSa=(new w).e("etc._setplotxrange",vSa),xSa=G(t(),(new J).j(["SET-PLOT-Y-RANGE"])),ySa=(new w).e("etc._setplotyrange",xSa),zSa=G(t(),(new J).j(["SETUP-PLOTS"])),ASa=(new w).e("etc._setupplots",zSa),BSa=G(t(),(new J).j(["SETXY"])),CSa=(new w).e("etc._setxy",BSa),DSa=G(t(),(new J).j(["SHOW"])),
+ESa=(new w).e("etc._show",DSa),FSa=G(t(),(new J).j(["SHOW-LINK"])),GSa=(new w).e("etc._showlink",FSa),HSa=G(t(),(new J).j(["SHOW-TURTLE","ST"])),ISa=(new w).e("etc._showturtle",HSa),JSa=G(t(),(new J).j(["SPROUT"])),KSa=(new w).e("_sprout",JSa),LSa=G(t(),(new J).j(["SHOW-TURTLE","ST"])),MSa=(new w).e("etc._showturtle",LSa),NSa=G(t(),(new J).j(["STAMP"])),OSa=(new w).e("etc._stamp",NSa),PSa=G(t(),(new J).j(["STAMP-ERASE"])),QSa=(new w).e("etc._stamperase",PSa),RSa=G(t(),(new J).j(["STOP"])),SSa=(new w).e("_stop",
+RSa),TSa=G(t(),(new J).j(["STOP-INSPECTING"])),USa=(new w).e("etc._stopinspecting",TSa),VSa=G(t(),(new J).j(["STOP-INSPECTING-DEAD-AGENTS"])),WSa=(new w).e("etc._stopinspectingdeadagents",VSa),XSa=G(t(),(new J).j(["TICK"])),YSa=(new w).e("etc._tick",XSa),ZSa=G(t(),(new J).j(["TICK-ADVANCE"])),$Sa=(new w).e("etc._tickadvance",ZSa),aTa=G(t(),(new J).j(["TIE"])),bTa=(new w).e("etc._tie",aTa),cTa=G(t(),(new J).j(["TYPE"])),dTa=(new w).e("etc._type",cTa),eTa=G(t(),(new J).j(["UNTIE"])),fTa=(new w).e("etc._untie",
+eTa),gTa=G(t(),(new J).j(["UPDATE-PLOTS"])),hTa=(new w).e("etc._updateplots",gTa),iTa=G(t(),(new J).j(["UPHILL"])),jTa=(new w).e("etc._uphill",iTa),kTa=G(t(),(new J).j(["UPHILL4"])),lTa=(new w).e("etc._uphill4",kTa),mTa=G(t(),(new J).j(["USER-MESSAGE"])),nTa=(new w).e("etc._usermessage",mTa),oTa=G(t(),(new J).j(["WAIT"])),pTa=(new w).e("etc._wait",oTa),qTa=G(t(),(new J).j(["WATCH"])),rTa=(new w).e("etc._watch",qTa),sTa=G(t(),(new J).j(["WATCH-ME"])),tTa=(new w).e("etc._watchme",sTa),uTa=G(t(),(new J).j(["WHILE"])),
+vTa=(new w).e("etc._while",uTa),wTa=G(t(),(new J).j(["WITH-LOCAL-RANDOMNESS"])),xTa=(new w).e("etc._withlocalrandomness",wTa),yTa=G(t(),(new J).j(["WITHOUT-INTERRUPTION"])),zTa=(new w).e("etc._withoutinterruption",yTa),ATa=G(t(),(new J).j(["WRITE"])),BTa=(new w).e("etc._write",ATa),CTa=G(t(),(new J).j(["!\x3d"])),DTa=(new w).e("_notequal",CTa),ETa=G(t(),(new J).j(["*"])),FTa=(new w).e("etc._mult",ETa),GTa=G(t(),(new J).j(["+"])),HTa=(new w).e("etc._plus",GTa),ITa=G(t(),(new J).j(["-"])),JTa=(new w).e("_minus",
+ITa),KTa=G(t(),(new J).j(["/"])),LTa=(new w).e("etc._div",KTa),MTa=G(t(),(new J).j(["\x3c"])),NTa=(new w).e("_lessthan",MTa),OTa=G(t(),(new J).j(["\x3c\x3d"])),PTa=(new w).e("etc._lessorequal",OTa),QTa=G(t(),(new J).j(["\x3d"])),RTa=(new w).e("_equal",QTa),STa=G(t(),(new J).j(["\x3e"])),TTa=(new w).e("_greaterthan",STa),UTa=G(t(),(new J).j(["\x3e\x3d"])),VTa=(new w).e("etc._greaterorequal",UTa),WTa=G(t(),(new J).j(["^"])),XTa=(new w).e("etc._pow",WTa),YTa=G(t(),(new J).j(["__APPLY-RESULT"])),ZTa=
+(new w).e("etc._applyresult",YTa),$Ta=G(t(),(new J).j(["__BOOM"])),aUa=(new w).e("etc._boom",$Ta),bUa=G(t(),(new J).j(["__BLOCK"])),cUa=(new w).e("etc._block",bUa),dUa=G(t(),(new J).j(["__CHECK-SYNTAX"])),eUa=(new w).e("etc._checksyntax",dUa),fUa=G(t(),(new J).j(["__CHECKSUM"])),gUa=(new w).e("etc._checksum",fUa),hUa=G(t(),(new J).j(["__DUMP"])),iUa=(new w).e("etc._dump",hUa),jUa=G(t(),(new J).j(["__DUMP-EXTENSION-PRIMS"])),kUa=(new w).e("etc._dumpextensionprims",jUa),lUa=G(t(),(new J).j(["__DUMP-EXTENSIONS"])),
+mUa=(new w).e("etc._dumpextensions",lUa),nUa=G(t(),(new J).j(["__DUMP1"])),oUa=(new w).e("etc._dump1",nUa),pUa=G(t(),(new J).j(["__NANO-TIME"])),qUa=(new w).e("etc._nanotime",pUa),rUa=G(t(),(new J).j(["__PROCESSORS"])),sUa=(new w).e("etc._processors",rUa),tUa=G(t(),(new J).j(["__RANDOM-STATE"])),uUa=(new w).e("etc._randomstate",tUa),vUa=G(t(),(new J).j(["__REFERENCE"])),wUa=(new w).e("etc._reference",vUa),xUa=G(t(),(new J).j(["__STACK-TRACE"])),yUa=(new w).e("etc._stacktrace",xUa),zUa=G(t(),(new J).j(["__SYMBOL"])),
+AUa=(new w).e("etc._symbolstring",zUa),BUa=G(t(),(new J).j(["__TO-STRING"])),CUa=(new w).e("etc._tostring",BUa),DUa=G(t(),(new J).j(["ABS"])),EUa=(new w).e("etc._abs",DUa),FUa=G(t(),(new J).j(["ACOS"])),GUa=(new w).e("etc._acos",FUa),HUa=G(t(),(new J).j(["ALL?"])),IUa=(new w).e("etc._all",HUa),JUa=G(t(),(new J).j(["AND"])),KUa=(new w).e("_and",JUa),LUa=G(t(),(new J).j(["ANY?"])),MUa=(new w).e("_any",LUa),NUa=G(t(),(new J).j(["APPROXIMATE-HSB"])),OUa=(new w).e("etc._approximatehsb",NUa),PUa=G(t(),
+(new J).j(["APPROXIMATE-RGB"])),QUa=(new w).e("etc._approximatergb",PUa),RUa=G(t(),(new J).j(["ASIN"])),SUa=(new w).e("etc._asin",RUa),TUa=G(t(),(new J).j(["AT-POINTS"])),UUa=(new w).e("etc._atpoints",TUa),VUa=G(t(),(new J).j(["ATAN"])),WUa=(new w).e("etc._atan",VUa),XUa=G(t(),(new J).j(["AUTOPLOT?"])),YUa=(new w).e("etc._autoplot",XUa),ZUa=G(t(),(new J).j(["BASE-COLORS"])),$Ua=(new w).e("etc._basecolors",ZUa),aVa=G(t(),(new J).j(["BEHAVIORSPACE-EXPERIMENT-NAME"])),bVa=(new w).e("etc._behaviorspaceexperimentname",
+aVa),cVa=G(t(),(new J).j(["BEHAVIORSPACE-RUN-NUMBER"])),dVa=(new w).e("etc._behaviorspacerunnumber",cVa),eVa=G(t(),(new J).j(["BF","BUT-FIRST","BUTFIRST"])),fVa=(new w).e("etc._butfirst",eVa),gVa=G(t(),(new J).j(["BL","BUT-LAST","BUTLAST"])),hVa=(new w).e("etc._butlast",gVa),iVa=G(t(),(new J).j(["BOTH-ENDS"])),jVa=(new w).e("etc._bothends",iVa),kVa=G(t(),(new J).j(["BF","BUT-FIRST","BUTFIRST"])),lVa=(new w).e("etc._butfirst",kVa),mVa=G(t(),(new J).j(["BL","BUT-LAST","BUTLAST"])),nVa=(new w).e("etc._butlast",
+mVa),oVa=G(t(),(new J).j(["BF","BUT-FIRST","BUTFIRST"])),pVa=(new w).e("etc._butfirst",oVa),qVa=G(t(),(new J).j(["BL","BUT-LAST","BUTLAST"])),rVa=(new w).e("etc._butlast",qVa),sVa=G(t(),(new J).j(["CAN-MOVE?"])),tVa=(new w).e("etc._canmove",sVa),uVa=G(t(),(new J).j(["CEILING"])),vVa=(new w).e("etc._ceil",uVa),wVa=G(t(),(new J).j(["COS"])),xVa=(new w).e("etc._cos",wVa),yVa=G(t(),(new J).j(["COUNT"])),zVa=(new w).e("_count",yVa),AVa=G(t(),(new J).j(["DATE-AND-TIME"])),BVa=(new w).e("etc._dateandtime",
+AVa),CVa=G(t(),(new J).j(["DISTANCE"])),DVa=(new w).e("etc._distance",CVa),EVa=G(t(),(new J).j(["DISTANCEXY"])),FVa=(new w).e("etc._distancexy",EVa),GVa=G(t(),(new J).j(["DX"])),HVa=(new w).e("etc._dx",GVa),IVa=G(t(),(new J).j(["DY"])),JVa=(new w).e("etc._dy",IVa),KVa=G(t(),(new J).j(["EMPTY?"])),LVa=(new w).e("etc._empty",KVa),MVa=G(t(),(new J).j(["ERROR-MESSAGE"])),NVa=(new w).e("_errormessage",MVa),OVa=G(t(),(new J).j(["EXP"])),PVa=(new w).e("etc._exp",OVa),QVa=G(t(),(new J).j(["EXTRACT-HSB"])),
+RVa=(new w).e("etc._extracthsb",QVa),SVa=G(t(),(new J).j(["EXTRACT-RGB"])),TVa=(new w).e("etc._extractrgb",SVa),UVa=G(t(),(new J).j(["FILE-AT-END?"])),VVa=(new w).e("etc._fileatend",UVa),WVa=G(t(),(new J).j(["FILE-EXISTS?"])),XVa=(new w).e("etc._fileexists",WVa),YVa=G(t(),(new J).j(["FILE-READ"])),ZVa=(new w).e("etc._fileread",YVa),$Va=G(t(),(new J).j(["FILE-READ-CHARACTERS"])),aWa=(new w).e("etc._filereadchars",$Va),bWa=G(t(),(new J).j(["FILE-READ-LINE"])),cWa=(new w).e("etc._filereadline",bWa),
+dWa=G(t(),(new J).j(["FILTER"])),eWa=(new w).e("etc._filter",dWa),fWa=G(t(),(new J).j(["FIRST"])),gWa=(new w).e("etc._first",fWa),hWa=G(t(),(new J).j(["FLOOR"])),iWa=(new w).e("etc._floor",hWa),jWa=G(t(),(new J).j(["FPUT"])),kWa=(new w).e("etc._fput",jWa),lWa=G(t(),(new J).j(["HSB"])),mWa=(new w).e("etc._hsb",lWa),nWa=G(t(),(new J).j(["HUBNET-CLIENTS-LIST"])),oWa=(new w).e("hubnet._hubnetclientslist",nWa),pWa=G(t(),(new J).j(["HUBNET-ENTER-MESSAGE?"])),qWa=(new w).e("hubnet._hubnetentermessage",pWa),
+rWa=G(t(),(new J).j(["HUBNET-EXIT-MESSAGE?"])),sWa=(new w).e("hubnet._hubnetexitmessage",rWa),tWa=G(t(),(new J).j(["HUBNET-MESSAGE"])),uWa=(new w).e("hubnet._hubnetmessage",tWa),vWa=G(t(),(new J).j(["HUBNET-MESSAGE-SOURCE"])),wWa=(new w).e("hubnet._hubnetmessagesource",vWa),xWa=G(t(),(new J).j(["HUBNET-MESSAGE-TAG"])),yWa=(new w).e("hubnet._hubnetmessagetag",xWa),zWa=G(t(),(new J).j(["HUBNET-MESSAGE-WAITING?"])),AWa=(new w).e("hubnet._hubnetmessagewaiting",zWa),BWa=G(t(),(new J).j(["IFELSE-VALUE"])),
+CWa=(new w).e("etc._ifelsevalue",BWa),DWa=G(t(),(new J).j(["IN-CONE"])),EWa=(new w).e("etc._incone",DWa),FWa=G(t(),(new J).j(["IN-LINK-FROM"])),GWa=(new w).e("etc._inlinkfrom",FWa),HWa=G(t(),(new J).j(["IN-LINK-NEIGHBOR?"])),IWa=(new w).e("etc._inlinkneighbor",HWa),JWa=G(t(),(new J).j(["IN-LINK-NEIGHBORS"])),KWa=(new w).e("etc._inlinkneighbors",JWa),LWa=G(t(),(new J).j(["IN-RADIUS"])),MWa=(new w).e("_inradius",LWa),NWa=G(t(),(new J).j(["INSERT-ITEM"])),OWa=(new w).e("etc._insertitem",NWa),PWa=G(t(),
+(new J).j(["INT"])),QWa=(new w).e("etc._int",PWa),RWa=G(t(),(new J).j(["IS-AGENT?"])),SWa=(new w).e("etc._isagent",RWa),TWa=G(t(),(new J).j(["IS-AGENTSET?"])),UWa=(new w).e("etc._isagentset",TWa),VWa=G(t(),(new J).j(["IS-ANONYMOUS-COMMAND?"])),WWa=(new w).e("etc._isanonymouscommand",VWa),XWa=G(t(),(new J).j(["IS-ANONYMOUS-REPORTER?"])),YWa=(new w).e("etc._isanonymousreporter",XWa),ZWa=G(t(),(new J).j(["IS-BOOLEAN?"])),$Wa=(new w).e("etc._isboolean",ZWa),aXa=G(t(),(new J).j(["IS-DIRECTED-LINK?"])),
+bXa=(new w).e("etc._isdirectedlink",aXa),cXa=G(t(),(new J).j(["IS-LINK-SET?"])),dXa=(new w).e("etc._islinkset",cXa),eXa=G(t(),(new J).j(["IS-LINK?"])),fXa=(new w).e("etc._islink",eXa),gXa=G(t(),(new J).j(["IS-LIST?"])),hXa=(new w).e("etc._islist",gXa),iXa=G(t(),(new J).j(["IS-NUMBER?"])),jXa=(new w).e("etc._isnumber",iXa),kXa=G(t(),(new J).j(["IS-PATCH-SET?"])),lXa=(new w).e("etc._ispatchset",kXa),mXa=G(t(),(new J).j(["IS-PATCH?"])),nXa=(new w).e("etc._ispatch",mXa),oXa=G(t(),(new J).j(["IS-STRING?"])),
+pXa=(new w).e("etc._isstring",oXa),qXa=G(t(),(new J).j(["IS-TURTLE-SET?"])),rXa=(new w).e("etc._isturtleset",qXa),sXa=G(t(),(new J).j(["IS-TURTLE?"])),tXa=(new w).e("etc._isturtle",sXa),uXa=G(t(),(new J).j(["IS-UNDIRECTED-LINK?"])),vXa=(new w).e("etc._isundirectedlink",uXa),wXa=G(t(),(new J).j(["ITEM"])),xXa=(new w).e("etc._item",wXa),yXa=G(t(),(new J).j(["LAST"])),zXa=(new w).e("etc._last",yXa),AXa=G(t(),(new J).j(["LENGTH"])),BXa=(new w).e("etc._length",AXa),CXa=G(t(),(new J).j(["LINK"])),DXa=(new w).e("etc._link",
+CXa),EXa=G(t(),(new J).j(["LINK-HEADING"])),FXa=(new w).e("etc._linkheading",EXa),GXa=G(t(),(new J).j(["LINK-LENGTH"])),HXa=(new w).e("etc._linklength",GXa),IXa=G(t(),(new J).j(["LINK-NEIGHBOR?"])),JXa=(new w).e("etc._linkneighbor",IXa),KXa=G(t(),(new J).j(["LINK-NEIGHBORS"])),LXa=(new w).e("etc._linkneighbors",KXa),MXa=G(t(),(new J).j(["LINK-SET"])),NXa=(new w).e("etc._linkset",MXa),OXa=G(t(),(new J).j(["LINK-SHAPES"])),PXa=(new w).e("etc._linkshapes",OXa),QXa=G(t(),(new J).j(["LINK-WITH"])),RXa=
+(new w).e("etc._linkwith",QXa),SXa=G(t(),(new J).j(["LINKS"])),TXa=(new w).e("etc._links",SXa),UXa=G(t(),(new J).j(["LIST"])),VXa=(new w).e("_list",UXa),WXa=G(t(),(new J).j(["LN"])),XXa=(new w).e("etc._ln",WXa),YXa=G(t(),(new J).j(["LOG"])),ZXa=(new w).e("etc._log",YXa),$Xa=G(t(),(new J).j(["LPUT"])),aYa=(new w).e("etc._lput",$Xa),bYa=G(t(),(new J).j(["MAP"])),cYa=(new w).e("etc._map",bYa),dYa=G(t(),(new J).j(["MAX"])),eYa=(new w).e("etc._max",dYa),fYa=G(t(),(new J).j(["MAX-N-OF"])),gYa=(new w).e("etc._maxnof",
+fYa),hYa=G(t(),(new J).j(["MAX-ONE-OF"])),iYa=(new w).e("etc._maxoneof",hYa),jYa=G(t(),(new J).j(["MAX-PXCOR"])),kYa=(new w).e("etc._maxpxcor",jYa),lYa=G(t(),(new J).j(["MAX-PYCOR"])),mYa=(new w).e("etc._maxpycor",lYa),nYa=G(t(),(new J).j(["MEAN"])),oYa=(new w).e("etc._mean",nYa),pYa=G(t(),(new J).j(["MEDIAN"])),qYa=(new w).e("etc._median",pYa),rYa=G(t(),(new J).j(["MEMBER?"])),sYa=(new w).e("etc._member",rYa),tYa=G(t(),(new J).j(["MIN"])),uYa=(new w).e("etc._min",tYa),vYa=G(t(),(new J).j(["MIN-N-OF"])),
+wYa=(new w).e("etc._minnof",vYa),xYa=G(t(),(new J).j(["MIN-ONE-OF"])),yYa=(new w).e("etc._minoneof",xYa),zYa=G(t(),(new J).j(["MIN-PXCOR"])),AYa=(new w).e("etc._minpxcor",zYa),BYa=G(t(),(new J).j(["MIN-PYCOR"])),CYa=(new w).e("etc._minpycor",BYa),DYa=G(t(),(new J).j(["MOD"])),EYa=(new w).e("etc._mod",DYa),FYa=G(t(),(new J).j(["MODES"])),GYa=(new w).e("etc._modes",FYa),HYa=G(t(),(new J).j(["MOUSE-DOWN?"])),IYa=(new w).e("etc._mousedown",HYa),JYa=G(t(),(new J).j(["MOUSE-INSIDE?"])),KYa=(new w).e("etc._mouseinside",
+JYa),LYa=G(t(),(new J).j(["MOUSE-XCOR"])),MYa=(new w).e("etc._mousexcor",LYa),NYa=G(t(),(new J).j(["MOUSE-YCOR"])),OYa=(new w).e("etc._mouseycor",NYa),PYa=G(t(),(new J).j(["MY-IN-LINKS"])),QYa=(new w).e("etc._myinlinks",PYa),RYa=G(t(),(new J).j(["MY-LINKS"])),SYa=(new w).e("etc._mylinks",RYa),TYa=G(t(),(new J).j(["MY-OUT-LINKS"])),UYa=(new w).e("etc._myoutlinks",TYa),VYa=G(t(),(new J).j(["MYSELF"])),WYa=(new w).e("etc._myself",VYa),XYa=G(t(),(new J).j(["N-OF"])),YYa=(new w).e("etc._nof",XYa),ZYa=
+G(t(),(new J).j(["N-VALUES"])),$Ya=(new w).e("etc._nvalues",ZYa),aZa=G(t(),(new J).j(["NEIGHBORS"])),bZa=(new w).e("_neighbors",aZa),cZa=G(t(),(new J).j(["NEIGHBORS4"])),dZa=(new w).e("_neighbors4",cZa),eZa=G(t(),(new J).j(["NETLOGO-APPLET?"])),fZa=(new w).e("etc._netlogoapplet",eZa),gZa=G(t(),(new J).j(["NETLOGO-VERSION"])),hZa=(new w).e("etc._netlogoversion",gZa),iZa=G(t(),(new J).j(["NETLOGO-WEB?"])),jZa=(new w).e("etc._netlogoweb",iZa),kZa=G(t(),(new J).j(["NEW-SEED"])),lZa=(new w).e("etc._newseed",
+kZa),mZa=G(t(),(new J).j(["NO-LINKS"])),nZa=(new w).e("etc._nolinks",mZa),oZa=G(t(),(new J).j(["NO-PATCHES"])),pZa=(new w).e("etc._nopatches",oZa),qZa=G(t(),(new J).j(["NO-TURTLES"])),rZa=(new w).e("etc._noturtles",qZa),sZa=G(t(),(new J).j(["NOT"])),tZa=(new w).e("_not",sZa),uZa=G(t(),(new J).j(["OF"])),vZa=(new w).e("_of",uZa),wZa=G(t(),(new J).j(["ONE-OF"])),xZa=(new w).e("_oneof",wZa),yZa=G(t(),(new J).j(["OR"])),zZa=(new w).e("_or",yZa),AZa=G(t(),(new J).j(["OTHER"])),BZa=(new w).e("_other",AZa),
+CZa=G(t(),(new J).j(["OTHER-END"])),DZa=(new w).e("etc._otherend",CZa),EZa=G(t(),(new J).j(["OUT-LINK-NEIGHBOR?"])),FZa=(new w).e("etc._outlinkneighbor",EZa),GZa=G(t(),(new J).j(["OUT-LINK-NEIGHBORS"])),HZa=(new w).e("etc._outlinkneighbors",GZa),IZa=G(t(),(new J).j(["OUT-LINK-TO"])),JZa=(new w).e("etc._outlinkto",IZa),KZa=G(t(),(new J).j(["PATCH"])),LZa=(new w).e("etc._patch",KZa),MZa=G(t(),(new J).j(["PATCH-AHEAD"])),NZa=(new w).e("etc._patchahead",MZa),OZa=G(t(),(new J).j(["PATCH-AT"])),PZa=(new w).e("_patchat",
+OZa),QZa=G(t(),(new J).j(["PATCH-AT-HEADING-AND-DISTANCE"])),RZa=(new w).e("etc._patchatheadinganddistance",QZa),SZa=G(t(),(new J).j(["PATCH-HERE"])),TZa=(new w).e("etc._patchhere",SZa),UZa=G(t(),(new J).j(["PATCH-LEFT-AND-AHEAD"])),VZa=(new w).e("etc._patchleftandahead",UZa),WZa=G(t(),(new J).j(["PATCH-RIGHT-AND-AHEAD"])),XZa=(new w).e("etc._patchrightandahead",WZa),YZa=G(t(),(new J).j(["PATCH-SET"])),ZZa=(new w).e("etc._patchset",YZa),$Za=G(t(),(new J).j(["PATCH-SIZE"])),a_a=(new w).e("etc._patchsize",
+$Za),b_a=G(t(),(new J).j(["PATCHES"])),c_a=(new w).e("_patches",b_a),d_a=G(t(),(new J).j(["PLOT-NAME"])),e_a=(new w).e("etc._plotname",d_a),f_a=G(t(),(new J).j(["PLOT-PEN-EXISTS?"])),g_a=(new w).e("etc._plotpenexists",f_a),h_a=G(t(),(new J).j(["PLOT-X-MAX"])),i_a=(new w).e("etc._plotxmax",h_a),j_a=G(t(),(new J).j(["PLOT-X-MIN"])),k_a=(new w).e("etc._plotxmin",j_a),l_a=G(t(),(new J).j(["PLOT-Y-MAX"])),m_a=(new w).e("etc._plotymax",l_a),n_a=G(t(),(new J).j(["PLOT-Y-MIN"])),o_a=(new w).e("etc._plotymin",
+n_a),p_a=G(t(),(new J).j(["POSITION"])),q_a=(new w).e("etc._position",p_a),r_a=G(t(),(new J).j(["PRECISION"])),s_a=(new w).e("etc._precision",r_a),t_a=G(t(),(new J).j(["RANDOM"])),u_a=(new w).e("_random",t_a),v_a=G(t(),(new J).j(["RANDOM-EXPONENTIAL"])),w_a=(new w).e("etc._randomexponential",v_a),x_a=G(t(),(new J).j(["RANDOM-FLOAT"])),y_a=(new w).e("etc._randomfloat",x_a),z_a=G(t(),(new J).j(["RANDOM-GAMMA"])),A_a=(new w).e("etc._randomgamma",z_a),B_a=G(t(),(new J).j(["RANDOM-NORMAL"])),C_a=(new w).e("etc._randomnormal",
+B_a),D_a=G(t(),(new J).j(["RANDOM-POISSON"])),E_a=(new w).e("etc._randompoisson",D_a),F_a=G(t(),(new J).j(["RANDOM-PXCOR"])),G_a=(new w).e("etc._randompxcor",F_a),H_a=G(t(),(new J).j(["RANDOM-PYCOR"])),I_a=(new w).e("etc._randompycor",H_a),J_a=G(t(),(new J).j(["RANDOM-XCOR"])),K_a=(new w).e("etc._randomxcor",J_a),L_a=G(t(),(new J).j(["RANDOM-YCOR"])),M_a=(new w).e("etc._randomycor",L_a),N_a=G(t(),(new J).j(["RANGE"])),O_a=(new w).e("etc._range",N_a),P_a=G(t(),(new J).j(["READ-FROM-STRING"])),Q_a=
+(new w).e("etc._readfromstring",P_a),R_a=G(t(),(new J).j(["REDUCE"])),S_a=(new w).e("etc._reduce",R_a),T_a=G(t(),(new J).j(["REMAINDER"])),U_a=(new w).e("etc._remainder",T_a),V_a=G(t(),(new J).j(["REMOVE"])),W_a=(new w).e("etc._remove",V_a),X_a=G(t(),(new J).j(["REMOVE-DUPLICATES"])),Y_a=(new w).e("etc._removeduplicates",X_a),Z_a=G(t(),(new J).j(["REMOVE-ITEM"])),$_a=(new w).e("etc._removeitem",Z_a),a0a=G(t(),(new J).j(["REPLACE-ITEM"])),b0a=(new w).e("etc._replaceitem",a0a),c0a=G(t(),(new J).j(["REVERSE"])),
+d0a=(new w).e("etc._reverse",c0a),e0a=G(t(),(new J).j(["RGB"])),f0a=(new w).e("etc._rgb",e0a),g0a=G(t(),(new J).j(["ROUND"])),h0a=(new w).e("etc._round",g0a),i0a=G(t(),(new J).j(["RUN-RESULT","RUNRESULT"])),j0a=(new w).e("etc._runresult",i0a),k0a=G(t(),(new J).j(["RUN-RESULT","RUNRESULT"])),l0a=(new w).e("etc._runresult",k0a),m0a=G(t(),(new J).j(["SCALE-COLOR"])),n0a=(new w).e("etc._scalecolor",m0a),o0a=G(t(),(new J).j(["SE","SENTENCE"])),p0a=(new w).e("_sentence",o0a),q0a=G(t(),(new J).j(["SELF"])),
+r0a=(new w).e("etc._self",q0a),s0a=G(t(),(new J).j(["SE","SENTENCE"])),t0a=(new w).e("_sentence",s0a),u0a=G(t(),(new J).j(["SHADE-OF?"])),v0a=(new w).e("etc._shadeof",u0a),w0a=G(t(),(new J).j(["SHAPES"])),x0a=(new w).e("etc._shapes",w0a),y0a=G(t(),(new J).j(["SHUFFLE"])),z0a=(new w).e("etc._shuffle",y0a),A0a=G(t(),(new J).j(["SIN"])),B0a=(new w).e("etc._sin",A0a),C0a=G(t(),(new J).j(["SORT"])),D0a=(new w).e("etc._sort",C0a),E0a=G(t(),(new J).j(["SORT-BY"])),F0a=(new w).e("etc._sortby",E0a),G0a=G(t(),
+(new J).j(["SORT-ON"])),H0a=(new w).e("etc._sorton",G0a),I0a=G(t(),(new J).j(["SQRT"])),J0a=(new w).e("etc._sqrt",I0a),K0a=G(t(),(new J).j(["STANDARD-DEVIATION"])),L0a=(new w).e("etc._standarddeviation",K0a),M0a=G(t(),(new J).j(["SUBJECT"])),N0a=(new w).e("etc._subject",M0a),O0a=G(t(),(new J).j(["SUBLIST"])),P0a=(new w).e("etc._sublist",O0a),Q0a=G(t(),(new J).j(["SUBSTRING"])),R0a=(new w).e("etc._substring",Q0a),S0a=G(t(),(new J).j(["SUBTRACT-HEADINGS"])),T0a=(new w).e("etc._subtractheadings",S0a),
+U0a=G(t(),(new J).j(["SUM"])),V0a=(new w).e("_sum",U0a),W0a=G(t(),(new J).j(["TAN"])),X0a=(new w).e("etc._tan",W0a),Y0a=G(t(),(new J).j(["TICKS"])),Z0a=(new w).e("etc._ticks",Y0a),$0a=G(t(),(new J).j(["TIMER"])),a1a=(new w).e("etc._timer",$0a),b1a=G(t(),(new J).j(["TOWARDS"])),c1a=(new w).e("etc._towards",b1a),d1a=G(t(),(new J).j(["TOWARDSXY"])),e1a=(new w).e("etc._towardsxy",d1a),f1a=G(t(),(new J).j(["TURTLE"])),g1a=(new w).e("_turtle",f1a),h1a=G(t(),(new J).j(["TURTLE-SET"])),i1a=(new w).e("etc._turtleset",
+h1a),j1a=G(t(),(new J).j(["TURTLES"])),k1a=(new w).e("_turtles",j1a),l1a=G(t(),(new J).j(["TURTLES-AT"])),m1a=(new w).e("etc._turtlesat",l1a),n1a=G(t(),(new J).j(["TURTLES-HERE"])),o1a=(new w).e("etc._turtleshere",n1a),p1a=G(t(),(new J).j(["TURTLES-ON"])),q1a=(new w).e("etc._turtleson",p1a),r1a=G(t(),(new J).j(["UP-TO-N-OF"])),s1a=(new w).e("etc._uptonof",r1a),t1a=G(t(),(new J).j(["USER-DIRECTORY"])),u1a=(new w).e("etc._userdirectory",t1a),v1a=G(t(),(new J).j(["USER-FILE"])),w1a=(new w).e("etc._userfile",
+v1a),x1a=G(t(),(new J).j(["USER-INPUT"])),y1a=(new w).e("etc._userinput",x1a),z1a=G(t(),(new J).j(["USER-NEW-FILE"])),A1a=(new w).e("etc._usernewfile",z1a),B1a=G(t(),(new J).j(["USER-ONE-OF"])),C1a=(new w).e("etc._useroneof",B1a),D1a=G(t(),(new J).j(["USER-YES-OR-NO?"])),E1a=(new w).e("etc._useryesorno",D1a),F1a=G(t(),(new J).j(["VARIANCE"])),G1a=(new w).e("etc._variance",F1a),H1a=G(t(),(new J).j(["WITH"])),I1a=(new w).e("_with",H1a),J1a=G(t(),(new J).j(["WITH-MAX"])),K1a=(new w).e("etc._withmax",
+J1a),L1a=G(t(),(new J).j(["WITH-MIN"])),M1a=(new w).e("etc._withmin",L1a),N1a=G(t(),(new J).j(["WORD"])),O1a=(new w).e("_word",N1a),P1a=G(t(),(new J).j(["WORLD-HEIGHT"])),Q1a=(new w).e("etc._worldheight",P1a),R1a=G(t(),(new J).j(["WORLD-WIDTH"])),S1a=(new w).e("etc._worldwidth",R1a),T1a=G(t(),(new J).j(["WRAP-COLOR"])),U1a=(new w).e("etc._wrapcolor",T1a),V1a=G(t(),(new J).j(["XOR"])),W1a=[gMa,iMa,kMa,mMa,oMa,qMa,sMa,uMa,wMa,yMa,AMa,CMa,EMa,GMa,IMa,KMa,MMa,OMa,QMa,SMa,UMa,WMa,YMa,$Ma,bNa,dNa,fNa,hNa,
+jNa,lNa,nNa,pNa,rNa,tNa,vNa,xNa,zNa,BNa,DNa,FNa,HNa,JNa,LNa,NNa,PNa,RNa,TNa,VNa,XNa,ZNa,aOa,cOa,eOa,gOa,iOa,kOa,mOa,oOa,qOa,sOa,uOa,wOa,yOa,AOa,COa,EOa,GOa,IOa,KOa,MOa,OOa,QOa,SOa,UOa,WOa,YOa,$Oa,bPa,dPa,fPa,hPa,jPa,lPa,nPa,pPa,rPa,tPa,vPa,xPa,zPa,BPa,DPa,FPa,HPa,JPa,LPa,NPa,PPa,RPa,TPa,VPa,XPa,ZPa,aQa,cQa,eQa,gQa,iQa,kQa,mQa,oQa,qQa,sQa,uQa,wQa,yQa,AQa,CQa,EQa,GQa,IQa,KQa,MQa,OQa,QQa,SQa,UQa,WQa,YQa,$Qa,bRa,dRa,fRa,hRa,jRa,lRa,nRa,pRa,rRa,tRa,vRa,xRa,zRa,BRa,DRa,FRa,HRa,JRa,LRa,NRa,PRa,RRa,TRa,VRa,
+XRa,ZRa,aSa,cSa,eSa,gSa,iSa,kSa,mSa,oSa,qSa,sSa,uSa,wSa,ySa,ASa,CSa,ESa,GSa,ISa,KSa,MSa,OSa,QSa,SSa,USa,WSa,YSa,$Sa,bTa,dTa,fTa,hTa,jTa,lTa,nTa,pTa,rTa,tTa,vTa,xTa,zTa,BTa,DTa,FTa,HTa,JTa,LTa,NTa,PTa,RTa,TTa,VTa,XTa,ZTa,aUa,cUa,eUa,gUa,iUa,kUa,mUa,oUa,qUa,sUa,uUa,wUa,yUa,AUa,CUa,EUa,GUa,IUa,KUa,MUa,OUa,QUa,SUa,UUa,WUa,YUa,$Ua,bVa,dVa,fVa,hVa,jVa,lVa,nVa,pVa,rVa,tVa,vVa,xVa,zVa,BVa,DVa,FVa,HVa,JVa,LVa,NVa,PVa,RVa,TVa,VVa,XVa,ZVa,aWa,cWa,eWa,gWa,iWa,kWa,mWa,oWa,qWa,sWa,uWa,wWa,yWa,AWa,CWa,EWa,GWa,IWa,
+KWa,MWa,OWa,QWa,SWa,UWa,WWa,YWa,$Wa,bXa,dXa,fXa,hXa,jXa,lXa,nXa,pXa,rXa,tXa,vXa,xXa,zXa,BXa,DXa,FXa,HXa,JXa,LXa,NXa,PXa,RXa,TXa,VXa,XXa,ZXa,aYa,cYa,eYa,gYa,iYa,kYa,mYa,oYa,qYa,sYa,uYa,wYa,yYa,AYa,CYa,EYa,GYa,IYa,KYa,MYa,OYa,QYa,SYa,UYa,WYa,YYa,$Ya,bZa,dZa,fZa,hZa,jZa,lZa,nZa,pZa,rZa,tZa,vZa,xZa,zZa,BZa,DZa,FZa,HZa,JZa,LZa,NZa,PZa,RZa,TZa,VZa,XZa,ZZa,a_a,c_a,e_a,g_a,i_a,k_a,m_a,o_a,q_a,s_a,u_a,w_a,y_a,A_a,C_a,E_a,G_a,I_a,K_a,M_a,O_a,Q_a,S_a,U_a,W_a,Y_a,$_a,b0a,d0a,f0a,h0a,j0a,l0a,n0a,p0a,r0a,t0a,v0a,
+x0a,z0a,B0a,D0a,F0a,H0a,J0a,L0a,N0a,P0a,R0a,T0a,V0a,X0a,Z0a,a1a,c1a,e1a,g1a,i1a,k1a,m1a,o1a,q1a,s1a,u1a,w1a,y1a,A1a,C1a,E1a,G1a,I1a,K1a,M1a,O1a,Q1a,S1a,U1a,(new w).e("etc._xor",V1a)];Wg(eMa,(new J).j(W1a));this.a=(8|this.a)<<24>>24;return this};function yea(a){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/core/TokenMapper.scala: 20");return a.vj}
+function zea(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/core/TokenMapper.scala: 18");return a.Kj}VE.prototype.$classData=g({mJ:0},!1,"org.nlogo.core.TokenMapper",{mJ:1,d:1,r1:1});function nN(){}nN.prototype=new l;nN.prototype.constructor=nN;function oN(){}oN.prototype=nN.prototype;
+nN.prototype.fH=function(a){var b=Jm(a),d=this.Uh();if(b===Jm(d))b=!0;else{a:{b=0;for(d=pN(this.Uh(),0);;)if(nd(d)){if(d.Y().Mh().ba())break a;b=1+b|0;d=d.$()}else break;b=-1}if(-1!==b){b=Jm(a);a:{for(var d=0,e=pN(this.Uh(),0);;)if(nd(e)){if(e.Y().Mh().ba())break a;d=1+d|0;e=e.$()}else break;d=-1}b=b>=d}else b=!1}if(b){b=this.Uh();d=x().s;for(a=qN(b,a,d);!a.z();){b=a.Y();if(null===b)throw(new q).i(b);if(!b.ja().kj(b.na()))return!1;a=a.$()}return!0}return!1};
+nN.prototype.rV=function(a){var b=this.Uh();a=this.rm(a);var d=x().s;a=qN(b,a,d);b=function(){return function(a){if(null!==a)return a.ja().yi(a.na());throw(new q).i(a);}}(this);d=x().s;if(d===x().s)if(a===u())b=u();else{var d=a.Y(),e=d=Og(new Pg,b(d),u());for(a=a.$();a!==u();){var f=a.Y(),f=Og(new Pg,b(f),u()),e=e.Ka=f;a=a.$()}b=d}else{for(d=Nc(a,d);!a.z();)e=a.Y(),d.Ma(b(e)),a=a.$();b=d.Ba()}return b.Ab("\n")};
+nN.prototype.DX=function(a,b){var d=this.Uh(),e=x().s,d=rN(d,e);a=function(a,b){return function(a){if(null!==a){var d=a.ja();a=a.Gc();return a<Jm(b)?d.Fi(mi(b,a)):d.Mh().R()}throw(new q).i(a);}}(this,a);e=x().s;if(e===x().s)if(d===u())a=u();else{for(var e=d.Y(),f=e=Og(new Pg,a(e),u()),d=d.$();d!==u();)var h=d.Y(),h=Og(new Pg,a(h),u()),f=f.Ka=h,d=d.$();a=e}else{for(e=Nc(d,e);!d.z();)f=d.Y(),e.Ma(a(f)),d=d.$();a=e.Ba()}return this.sm(a,b)};function sN(){this.no=null;this.a=this.SF=this.EF=0}
+sN.prototype=new l;sN.prototype.constructor=sN;sN.prototype.xr=function(){this.no.xr();Dl(this,tN(this))};function Al(a){moa(a.no,tN(a));Dl(a,tN(a))}function noa(a){var b=new sN;b.no=a;b.EF=65536;b.a=(1|b.a)<<24>>24;b.SF=0;b.a=(2|b.a)<<24>>24;return b}function Dl(a,b){a.SF=b;a.a=(2|a.a)<<24>>24}function El(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/AutoGrowingBufferedReader.scala: 9");return a.SF}
+function tN(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/AutoGrowingBufferedReader.scala: 8");return a.EF}sN.prototype.jz=function(){if(0===El(this)){this.no.xr();moa(this.no,tN(this)<<1);var a=this.no,b=tN(this);a.xw((new Xb).ha(b,b>>31));Dl(this,tN(this));this.EF=tN(this)<<1;this.a=(1|this.a)<<24>>24}a=this.no.jz();Dl(this,-1+El(this)|0);return a};
+sN.prototype.$classData=g({i2:0},!1,"org.nlogo.lex.AutoGrowingBufferedReader",{i2:1,d:1,lma:1});function im(){this.Tk=null;this.Kp=0;this.bb=null}im.prototype=new l;im.prototype.constructor=im;im.prototype.rda=function(a,b,d){this.Tk=a;this.Kp=b;this.bb=d;return this};im.prototype.ra=function(){Al(this.Tk);var a=-1!==this.Tk.jz();this.Tk.xr();return a};im.prototype.OV=function(a,b,d){im.prototype.rda.call(this,noa(a),b,d);return this};
+function Oca(a){a=a.Tk.jz();return-1===a?C():(new H).i(Oe(65535&a))}im.prototype.$classData=g({j2:0},!1,"org.nlogo.lex.BufferedInputWrapper",{j2:1,d:1,oma:1});function uN(){this.JW=null;this.dX=0;this.RU=null;this.a=0;this.da=null}uN.prototype=new l;uN.prototype.constructor=uN;
+function Uca(a){var b=new uN;if(null===a)throw pg(qg(),null);b.da=a;b.JW=C();b.a=(1|b.a)<<24>>24;b.dX=0;b.a=(2|b.a)<<24>>24;b.RU=fl(ll(),(new w).e(ooa(b),poa(b)),ub(new vb,function(){return function(a,b){b=null===b?0:b.W;if(null!==a){var f=a.ja(),h=a.Gc();if(C()===f&&0===h&&123===b)return(new w).e((new w).e((new H).i(Oe(123)),0),cl())}return null!==a&&(f=a.Gc(),0>f)?(new w).e((new w).e(C(),f),il()):null!==a&&(f=a.Gc(),13===b||10===b)?(new w).e((new w).e((new H).i(Oe(b)),f),dl()):null!==a&&(h=a.ja(),
+f=a.Gc(),Xj(h)&&(h=h.Q,125===(null===h?0:h.W)&&1===f&&125===b))?(new w).e((new w).e(C(),0),dl()):null!==a&&(h=a.ja(),f=a.Gc(),Xj(h)&&(h=h.Q,123===(null===h?0:h.W)&&123===b))?(new w).e((new w).e(C(),1+f|0),cl()):null!==a&&(h=a.ja(),f=a.Gc(),Xj(h)&&(h=h.Q,125===(null===h?0:h.W)&&125===b))?(new w).e((new w).e(C(),-1+f|0),cl()):null!==a&&(h=a.ja(),f=a.Gc(),Xj(h)&&(h=h.Q,h=null===h?0:h.W,0===f&&123!==h))?(new w).e((new w).e(C(),0),il()):null!==a?(a=a.Gc(),(new w).e((new w).e((new H).i(Oe(b)),a),cl())):
+(new w).e((new w).e(C(),0),il())}}(b)));b.a=(4|b.a)<<24>>24;return b}c=uN.prototype;c.y=function(a){return qoa(this,null===a?0:a.W)};c.Ia=function(a){return qoa(this,a.W)|0};function poa(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/TokenLexer.scala: 48");return a.dX}c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!qoa(this,a.W)};
+function qoa(a,b){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/TokenLexer.scala: 49");return a.RU.y(Oe(b))}function ooa(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/TokenLexer.scala: 47");return a.JW}c.za=function(a){return rb(this,a)};c.$classData=g({q2:0},!1,"org.nlogo.lex.TokenLexer$DoubleBracePairMatcher",{q2:1,d:1,fa:1});function vN(){}vN.prototype=new l;
+vN.prototype.constructor=vN;vN.prototype.b=function(){return this};function ip(a,b,d){var e=new wN,f;roa||(roa=(new xN).b());f=roa;Zca||(Zca=(new fm).b());b=soa(e,f,Wca(b,d));return(new cc).Nf(b,m(new p,function(){return function(a){return a.ja()}}(a)))}vN.prototype.$classData=g({r2:0},!1,"org.nlogo.lex.Tokenizer$",{r2:1,d:1,kma:1});var toa=void 0;function yN(){this.da=this.g=null}yN.prototype=new l;yN.prototype.constructor=yN;
+function uoa(a){a:for(;;){var b=a.ye.G().yr;if(pj(A())===b||aj(A())===b)return"-T--";if(qj(A())===b||nj(A())===b)return"--P-";if(rj(A())===b||oj(A())===b)return"---L";if(Vi(A())===b||$i(A())===b)if(a=a.wa,t(),a=(new H).i(a),null!==a.Q&&0<=a.Q.vb(1)&&(a=a.Q.X(0),yb(a)))continue a;return"-TPL"}}
+function voa(a,b,d){d.ta(m(new p,function(a,b,d){return function(k){if(zb(k)||Ab(k)){if("?"!==b)var n=b;else a:{t();n=(new H).i(d);if(null!==n.Q&&0<=n.Q.vb(1)&&(n=n.Q.X(0),yb(n))){n=uoa(n);break a}n="-TPL"}n=km(a.da,n)}else n=a;Ob(n,k)}}(a,b,d)))}yN.prototype.K_=function(a){var b=a.Gd;this.g=woa(b,this.g);a=a.wa;var d=b.G().Na,e=t();a=a.Te(d,e.s);d=new zN;e=t();a=a.lc(d,e.s);b.G().p.ba()?voa(this,b.G().p.R(),a):a.ta(m(new p,function(a){return function(b){Ob(a,b)}}(this)));b.L(this.g)};
+function xoa(a,b,d){var e;e=(new Tb).c(b);for(var f=Ne().qq,f=Nc(e,f),h=0,k=e.U.length|0;h<k;){var n=e.X(h),n=null===n?0:n.W,n=45!==n&&-1!==Qha(Ia(),d,n)?n:45;f.Ma(Oe(n));h=1+h|0}e=f.Ba();"----"===e&&(f=a.H().Zb.toUpperCase(),Tg(),Ia(),h="|You can't use "+f+" in ",b=yoa(b),b=111===(65535&(b.charCodeAt(0)|0))?"an "+b:"a "+b,d=h+b+" context,\n              | because "+f+" is "+yoa(d)+"-only.",d=(new Tb).c(d),d=Rb(0,gd(d),"\n",""),a=a.H().ma,Sg(d,a.Ua,a.Ya,a.bb));return e}
+function km(a,b){var d=new yN;d.g=b;if(null===a)throw pg(qg(),null);d.da=a;return d}function woa(a,b){return Wq(a)?xoa(a,b,a.fi.M()):ot(a)?xoa(a,b,a.fi.M()):xoa(a,b,a.M())}
+yN.prototype.jH=function(a){var b=a.ye;this.g=woa(b,this.g);if(Pm(b.G()))var d=b.G().Wa,e=b.G().Na,f=x(),e=e.Tc(d,f.s);else e=b.G().Na;a:{d=0;for(e=pN(e,0);;)if(nd(e)){f=e.Y()|0;if(Rm(A(),Ti(),f))break a;d=1+d|0;e=e.$()}else break;d=-1}e=a.wa;f=t();d=e.Xj(f.s).hg(m(new p,function(a,b){return function(a){if(null!==a)return a.Gc()!==b;throw(new q).i(a);}}(this,d)));e=m(new p,function(){return function(a){return a.ja()}}(this));f=t();e=d.ya(e,f.s);d=km(this.da,"OTPL");On(b)||vt(b)?(a=a.wa.Y(),Ob(d,a)):
+b.G().p.ba()?voa(this,b.G().p.R(),e):e.ta(m(new p,function(a){return function(b){Ob(a,b)}}(this)));On(b)||vt(b)?b.N((new H).i(d.g)):b.L(this.g)};
+function yoa(a){for(var b=(new w).e(Oe(79),"observer"),d=(new w).e(Oe(84),"turtle"),e=(new w).e(Oe(80),"patch"),b=[b,d,e,(new w).e(Oe(76),"link")],d=fc(new gc,hc()),e=0,f=b.length|0;e<f;)ic(d,b[e]),e=1+e|0;b=d.Va;a=(new Tb).c(a);d=(new Bl).b();e=0;for(f=a.U.length|0;e<f;){var h=a.X(e);45!==(null===h?0:h.W)!==!1&&zoa(d,null===h?0:h.W);e=1+e|0}a=(new Tb).c(d.Bb.Yb);Ne();d=Nc(a,new al);e=0;for(f=a.U.length|0;e<f;)h=a.X(e),d.Ma(b.y(Oe(null===h?0:h.W))),e=1+e|0;return d.Ba().Ab("/")}
+yN.prototype.$classData=g({w2:0},!1,"org.nlogo.parse.AgentTypeChecker$AgentTypeCheckerVisitor",{w2:1,d:1,i0:1});function Un(){this.Jz=null;this.a=!1}Un.prototype=new l;Un.prototype.constructor=Un;c=Un.prototype;c.b=function(){this.Jz=(x(),u());this.a=!0;return this};function AN(a){if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/CarefullyVisitor.scala: 15");return a.Jz}
+c.sf=function(a){var b=a.Gd;if(Nq(b)){var d=a.wa.X(0),d=Bb(this,d),e=AN(this);this.Jz=Og(new Pg,b,e);this.a=!0;b=a.wa.X(1);b=Bb(this,b);this.Jz=AN(this).$();this.a=!0;d=G(t(),(new J).j([d,b]));return(new Jb).Cj(a.Gd,d,a.ma)}return Ib(this,a)};
+c.Se=function(a){var b=a.ye;if(st(b)){if(AN(this).z()){Tg();var d=$g(),e=[b.H().Zb],f=d.Dm.Zh("compiler.CarefullyVisitor.badNesting",I(function(a,b){return function(){throw(new Re).c("coding error, bad translation key: "+b+" for Errors");}}(d,"compiler.CarefullyVisitor.badNesting"))),h=e.length|0;if(0>=h)var k=0;else d=h>>31,k=(0===d?-1<(-2147483648^h):0<d)?-1:h;t();hn();var d=[],n=0,r=e.length|0;0>k&&jn(kn(),0,h,1,!1);for(r=r<k?r:k;n<r;){var y=e[n],E=n;0>k&&jn(kn(),0,h,1,!1);if(0>E||E>=k)throw(new O).c(""+
+E);y=(new w).e(y,E);d.push(y);n=1+n|0}e=d.length|0;h=0;k=f;a:for(;;){if(h!==e){f=1+h|0;k=(new w).e(k,d[h]);b:{h=k.ub;r=k.Fb;if(null!==r&&(n=r.ja(),r=r.Gc(),vg(n))){k=n;k=Rb(Ia(),h,"\\{"+r+"\\}",k);break b}throw(new q).i(k);}h=f;continue a}break}d=a.ma;Sg(k,d.Ua,d.Ya,d.bb)}b=Aoa(b,md().Uc(Yea(AN(this).Y())));return(new Lb).bd(b,a.wa,a.ma)}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({E2:0},!1,"org.nlogo.parse.CarefullyVisitor",{E2:1,d:1,ff:1});function BN(){this.IW=null}
+BN.prototype=new l;BN.prototype.constructor=BN;function laa(a,b,d){var e=b.ye;if(Eq(e))return d.Sg((new CN).ft(e.ed));if(Pn(e)){var f=e.va;if(!a.IW.ab(f))return d.Sg((new DN).c(f))}return sc(e)&&(Cca||(Cca=(new Tk).b()),e=(new H).i((new bc).Id(e.Fe.Rk(),EN(e.Fe),e.Uk)),!e.z())?(a=e.R().Gf,d.wl(a)):naa(a,b,d)}BN.prototype.Ea=function(a){this.IW=a;return this};BN.prototype.$classData=g({F2:0},!1,"org.nlogo.parse.ClosedVariableFinder",{F2:1,d:1,Xla:1});function Vn(){}Vn.prototype=new l;
+Vn.prototype.constructor=Vn;c=Vn.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};c.Se=function(a){var b=a.ye;if(vt(b)){a=Kb(this,a);var d=(new BN).Ea(b.Fe.Rk()),e=a.wa.X(0),f=G(Ne().ou,u()),d=wb(d,e,f),b=Boa(b,b.Fe,d,b.Bc);return(new Lb).bd(b,a.wa,a.ma)}return On(b)?(a=Kb(this,a),d=(new BN).Ea(b.Fe.Rk()),e=a.wa.X(0),f=G(Ne().ou,u()),d=wb(d,e,f),b=Coa(b,b.Fe,d,b.Bc),(new Lb).bd(b,a.wa,a.ma)):Kb(this,a)};c.ef=function(a){return Mb(this,a)};
+c.$classData=g({G2:0},!1,"org.nlogo.parse.ClosureTagger",{G2:1,d:1,ff:1});function FN(){this.a=0}FN.prototype=new l;FN.prototype.constructor=FN;FN.prototype.b=function(){Doa=this;for(var a=(new w).e(Oe(38),"\x26amp;"),b=(new w).e(Oe(60),"\x26lt;"),d=(new w).e(Oe(62),"\x26gt;"),a=[a,b,d,(new w).e(Oe(34),"\x26quot;")],b=fc(new gc,hc()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;this.a=(4|this.a)<<24>>24;return this};FN.prototype.$classData=g({H2:0},!1,"org.nlogo.parse.Colorizer$",{H2:1,d:1,jma:1});
+var Doa=void 0;function Yn(){this.MD=this.fD=null;this.a=0}Yn.prototype=new l;Yn.prototype.constructor=Yn;c=Yn.prototype;c.b=function(){this.MD=u();this.a=(16|this.a)<<24>>24;return this};
+c.sf=function(a){if(Xq(a.Gd)||GN(a.Gd)||Yq(a.Gd)){var b=HN(this).Y().sy(),d=HN(this).$();IN(this,Og(new Pg,b,d))}b=HN(this).Y();d=a.Gd;if(b&&b.$classData&&b.$classData.m.jC&&GN(d)){Tg();var b=$g(),e=["STOP"],d=b.Dm.Zh("org.nlogo.prim.etc._stop.notAllowedInsideToReport",I(function(a,b){return function(){throw(new Re).c("coding error, bad translation key: "+b+" for Errors");}}(b,"org.nlogo.prim.etc._stop.notAllowedInsideToReport"))),f=e.length|0;if(0>=f)var h=0;else b=f>>31,h=(0===b?-1<(-2147483648^
+f):0<b)?-1:f;t();hn();var b=[],k=0,n=e.length|0;0>h&&jn(kn(),0,f,1,!1);for(n=n<h?n:h;k<n;){var r=e[k],y=k;0>h&&jn(kn(),0,f,1,!1);if(0>y||y>=h)throw(new O).c(""+y);r=(new w).e(r,y);b.push(r);k=1+k|0}e=b.length|0;f=0;h=d;a:for(;;){if(f!==e){d=1+f|0;h=(new w).e(h,b[f]);b:{f=h.ub;n=h.Fb;if(null!==n&&(k=n.ja(),n=n.Gc(),vg(k))){h=k;h=Rb(Ia(),f,"\\{"+n+"\\}",h);break b}throw(new q).i(h);}f=d;continue a}break}a=a.ma;Sg(h,a.Ua,a.Ya,a.bb)}else if(Xq(d)?(e=HN(this),e=Eoa(Mm(e))?!Foa(HN(this).Y()):!1):e=!1,e){Tg();
+b=$g();e=["REPORT"];d=b.Dm.Zh("org.nlogo.prim._report.canOnlyUseInToReport",I(function(a,b){return function(){throw(new Re).c("coding error, bad translation key: "+b+" for Errors");}}(b,"org.nlogo.prim._report.canOnlyUseInToReport")));f=e.length|0;0>=f?h=0:(b=f>>31,h=(0===b?-1<(-2147483648^f):0<b)?-1:f);t();hn();b=[];k=0;n=e.length|0;0>h&&jn(kn(),0,f,1,!1);for(n=n<h?n:h;k<n;){r=e[k];y=k;0>h&&jn(kn(),0,f,1,!1);if(0>y||y>=h)throw(new O).c(""+y);r=(new w).e(r,y);b.push(r);k=1+k|0}e=b.length|0;f=0;h=
+d;a:for(;;){if(f!==e){d=1+f|0;h=(new w).e(h,b[f]);b:{f=h.ub;n=h.Fb;if(null!==n&&(k=n.ja(),n=n.Gc(),vg(k))){h=k;h=Rb(Ia(),f,"\\{"+n+"\\}",h);break b}throw(new q).i(h);}f=d;continue a}break}a=a.ma;Sg(h,a.Ua,a.Ya,a.bb)}else if((b&&b.$classData&&b.$classData.m.hC||Eoa(b))&&Xq(d)){Tg();b=$g();e=["REPORT"];d=b.Dm.Zh("org.nlogo.prim._report.mustImmediatelyBeUsedInToReport",I(function(a,b){return function(){throw(new Re).c("coding error, bad translation key: "+b+" for Errors");}}(b,"org.nlogo.prim._report.mustImmediatelyBeUsedInToReport")));
+f=e.length|0;0>=f?h=0:(b=f>>31,h=(0===b?-1<(-2147483648^f):0<b)?-1:f);t();hn();b=[];k=0;n=e.length|0;0>h&&jn(kn(),0,f,1,!1);for(n=n<h?n:h;k<n;){r=e[k];y=k;0>h&&jn(kn(),0,f,1,!1);if(0>y||y>=h)throw(new O).c(""+y);r=(new w).e(r,y);b.push(r);k=1+k|0}e=b.length|0;f=0;h=d;a:for(;;){if(f!==e){d=1+f|0;h=(new w).e(h,b[f]);b:{f=h.ub;n=h.Fb;if(null!==n&&(k=n.ja(),n=n.Gc(),vg(k))){h=k;h=Rb(Ia(),f,"\\{"+n+"\\}",h);break b}throw(new q).i(h);}f=d;continue a}break}a=a.ma;Sg(h,a.Ua,a.Ya,a.bb)}else return a.Gd.G().mt?
+(b=(new JN).Zk(this,!1),d=HN(this),IN(this,Og(new Pg,b,d)),b=Ib(this,a),d=HN(this).Y(),IN(this,HN(this).$()),a=a.wa,d=m(new p,function(a,b){return function(a){return zb(a)?Cb(new Db,(new Hb).ht(a.pe.Ts,a.pe.ng,b.xe),a.ma,a.Tj):a}}(this,d)),e=t(),a=a.ya(d,e.s),(new Jb).Cj(b.Gd,a,b.ma)):Ib(this,a)};function Goa(a){if(null===a.fD&&null===a.fD){var b=new KN;if(null===a)throw pg(qg(),null);b.Qa=a;a.fD=b}}
+c.Se=function(a){if(On(a.ye)){var b=(new LN).Zk(this,!1),d=HN(this);IN(this,Og(new Pg,b,d));a=Kb(this,a);IN(this,HN(this).$());return a}return Kb(this,a)};function HN(a){if(0===(16&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/ControlFlowVerifier.scala: 31");return a.MD}function IN(a,b){a.MD=b;a.a=(16|a.a)<<24>>24}
+c.ef=function(a){if(a.Gi.dw.Qn)var b=(new MN).Zk(this,(Goa(this),!0)),d=HN(this);else b=(new NN).Zk(this,!1),d=HN(this);b=Og(new Pg,b,d);IN(this,b);a=Mb(this,a);b=HN(this).Y();IN(this,HN(this).$());return Nb(a.Gi,(new Hb).ht(a.pe.Ts,a.pe.ng,b.xe),a.lA)};c.$classData=g({L2:0},!1,"org.nlogo.parse.ControlFlowVerifier",{L2:1,d:1,ff:1});function ON(){}ON.prototype=new l;ON.prototype.constructor=ON;ON.prototype.b=function(){return this};
+function Jaa(a){return m(new p,function(a){return function(d){return m(new p,function(a,b){return function(a){return Tc(b,a)}}(a,d))}}(a))}
+function ad(a,b,d,e){var f=e.xk.gc(d);f.z()?f=C():(f=f.R(),f=(new H).i(Sc(f,a,b,d,e)));if(f.z()){var f=Tc(e.Ef,d),h=(new w).e(Pm(b.ye.G()),b.ye),k=h.Fb;if(!0===!!h.ub){h=b.wa.Y();h=Oc(a,h,d,0,e);b=b.wa;var n=t();return b.Xj(n.s).$().Ib(Uc(Vc(h),""+f+e.Jm.y(k)),ub(new vb,function(a,b){return function(d,e){d=(new w).e(d,e);e=d.ub;var f=d.Fb;if(null!==f)return Oc(a,f.ja(),b,f.Gc(),e);throw(new q).i(d);}}(a,d)))}if(Hoa(h.Fb))return e=Uc(Vc(e),""+Tc(e.Ef,d)+Ioa(e.Ef,d)),Pc(a,b,d,e);k=h.Fb;if(!1===!!h.ub&&
+Mn(k))return e=Uc(Vc(e),""+Tc(e.Ef,d)+Ioa(e.Ef,d)),Pc(a,b,d,e);k=h.Fb;if(!1===!!h.ub&&sc(k)){f=(new Tb).c(e.Zb);f=PN(f);f.z()?f=!0:(f=f.R(),f=32===(null===f?0:f.W));f=f?"":" ";h=e.xk;n=e.Ef;Sda();h=Rda(Qn(),h,n);b=Pc(a,b,d,h).Zb;var h=!1,n=null,r=k.Fe;a:{if(r&&r.$classData&&r.$classData.m.ZA&&(h=!0,n=r,!0===n.$r)){a="[ -\x3e";break a}if(h&&!1===n.$r)a="[";else if(EN(r))a="";else if(r&&r.$classData&&r.$classData.m.$A)a="[ "+r.Hi.Zb+" -\x3e";else if(r&&r.$classData&&r.$classData.m.YA)h=r.vs,a=m(new p,
+function(){return function(a){return a.Zb}}(a)),n=t(),a="[ ["+h.ya(a,n.s).Ab(" ")+"] -\x3e";else throw(new q).i(r);}h=!mp(Ia(),a,"\x3e")||0<=(b.length|0)&&" "===b.substring(0,1)?"":" ";n=cd(e.Ef,d);d=EN(k.Fe)?"":"]";k=(new Tb).c(b);PN(k).ab(Oe(32))?(k=(new Tb).c(n),k=Wj(k).ab(Oe(32))):k=!1;k?(k=(new Tb).c(n),n=k.U.length|0,k=Le(Me(),k.U,1,n)):k=n;return Uc(Vc(e),f+a+h+b+k+d)}k=h.Fb;if(!1===!!h.ub)return f=Uc(Vc(e),""+f+e.Jm.y(k)),d=Pc(a,b,d,f),Xc(new Zc,d.Zb,d.xk,e.Jm,d.Ef);throw(new q).i(h);}return f.R()}
+function Kaa(a){return m(new p,function(a){return function(d){return m(new p,function(a,b){return function(a){return cd(b,a)}}(a,d))}}(a))}ON.prototype.$classData=g({Q2:0},!1,"org.nlogo.parse.Formatter",{Q2:1,d:1,vma:1});function QN(){this.Kz=null}QN.prototype=new l;QN.prototype.constructor=QN;function Ioa(a,b){a=Joa(a.Kz,b.jk);return Xj(a)&&(a=a.Q,yb(a))?(b=a.ye,Mn(b)&&(a=b.W,zg(a))?(b=Nn(),ac(b,a,!0,!1)):b.H().Zb):""}
+function cd(a,b){var d=!1,e=null,f=b.jk.Wn();return Xj(f)&&(d=!0,e=f,RN(e.Q))?(b=(new SN).Ea(b.jk.ce(1)),a=Joa(a.Kz,b.jk),Xj(a)&&(a=a.Q,yb(a)&&(a=Sh().ac(a),!a.z()&&(a=a.R().Oa,On(a))))?" ":" ]"):d&&TN(e.Q)?" ]":" "}
+function Tc(a,b){var d=!1,e=null,f=b.jk.Wn();return Xj(f)&&(d=!0,e=f,Koa(e.Q))||d&&UN(e.Q)?" ":d&&(f=e.Q,RN(f))?(d=f.Ac,e=!1,f=null,b=(new SN).Ea(b.jk.ce(1)),a=Joa(a.Kz,b.jk),Xj(a)&&(e=!0,f=a,a=f.Q,yb(a)&&(a=Sh().ac(a),!a.z()&&(a=a.R().Oa,On(a))))||e&&(a=f.Q,JE(a)&&(d=a.wa.X(d),zb(d)&&d.Tj))?"":" ["):d&&TN(e.Q)?" [":""}function Loa(a){var b=new QN;b.Kz=a;return b}QN.prototype.$classData=g({U2:0},!1,"org.nlogo.parse.LambdaWhitespace",{U2:1,d:1,qma:1});function yc(){}yc.prototype=new l;
+yc.prototype.constructor=yc;yc.prototype.b=function(){return this};yc.prototype.WV=function(){return!1};yc.prototype.u_=function(a,b){a:{b=!!b;if(null!==a){var d=a.sb;if(yl()===d&&b){b=(new VN).b();d=$f();a=(new w).e(eh(a,b,a.Zb,d),!1);break a}}b:{if(null!==a&&(b=a.sb,d=a.W,yl()===b&&"LET"===d)){b=!0;break b}if(null!==a&&(b=a.sb,d=a.W,yl()===b&&"__LET"===d)){b=!0;break b}b=!1}a=b?(new w).e(a,!0):(new w).e(a,!1)}return a};yc.prototype.$classData=g({V2:0},!1,"org.nlogo.parse.LetNamer$",{V2:1,d:1,S3:1});
+var xc=void 0;function Tn(){}Tn.prototype=new l;Tn.prototype.constructor=Tn;c=Tn.prototype;c.b=function(){return this};c.sf=function(a){if(Zn(a.Gd)){var b=a.wa.$();return Ib(this,(new Jb).Cj(a.Gd,b,a.ma))}return Ib(this,a)};c.Se=function(a){return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({W2:0},!1,"org.nlogo.parse.LetReducer",{W2:1,d:1,ff:1});function Xn(){this.jy=null;this.a=!1}Xn.prototype=new l;Xn.prototype.constructor=Xn;Xn.prototype.b=function(){this.jy=C();this.a=!0;return this};
+Xn.prototype.K_=function(a){var b=a.Gd;Zn(b)?(this.jy=b.ed,this.a=!0,paa(this,a),this.jy=C(),this.a=!0):paa(this,a)};function Moa(a){if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/LetVerifier.scala: 13");return a.jy}
+Xn.prototype.jH=function(a){var b=a.ye;if(Eq(b)){Tg();var d=Moa(this).z()||Moa(this).R()!==b.ed,e=b.H();if(!d){var d=$g(),f=[b.H().Zb.toUpperCase()],d=d.Dm.Zh("compiler.LetVariable.notDefined",I(function(a,b){return function(){throw(new Re).c("coding error, bad translation key: "+b+" for Errors");}}(d,"compiler.LetVariable.notDefined"))),h=f.length|0;if(0>=h)var k=0;else b=h>>31,k=(0===b?-1<(-2147483648^h):0<b)?-1:h;t();hn();var b=[],n=0,r=f.length|0;0>k&&jn(kn(),0,h,1,!1);for(r=r<k?r:k;n<r;){var y=
+f[n],E=n;0>k&&jn(kn(),0,h,1,!1);if(0>E||E>=k)throw(new O).c(""+E);y=(new w).e(y,E);b.push(y);n=1+n|0}f=b.length|0;h=0;k=d;a:for(;;){if(h!==f){d=1+h|0;k=(new w).e(k,b[h]);b:{h=k.ub;r=k.Fb;if(null!==r&&(n=r.ja(),r=r.Gc(),vg(n))){k=n;k=Rb(Ia(),h,"\\{"+r+"\\}",k);break b}throw(new q).i(k);}h=d;continue a}break}e=e.ma;Sg(k,e.Ua,e.Ya,e.bb)}}qaa(this,a)};Xn.prototype.$classData=g({$2:0},!1,"org.nlogo.parse.LetVerifier",{$2:1,d:1,i0:1});
+function Bc(){this.Xh=this.Gi=this.he=this.dc=this.Aj=null;this.xa=!1}Bc.prototype=new l;Bc.prototype.constructor=Bc;function Daa(a){var b=WN(a.Gi),d=zaa(a.Gi),e=t();d.Tc(b,e.s).ta(m(new p,function(a){return function(b){var d=Noa(a,b);d.z()?d=C():(d=d.R(),d=(new H).i(d.W));var d=d.R(),e=Wq(d)||ot(d)||Hq(d);Tg();e||(d=Zq(d)?"an extension command":wt(d)?"an extension reporter":"a "+nq(oa(d)),e=b.Zb.toUpperCase(),b=b.ma,Sg("There is already "+d+" called "+e,b.Ua,b.Ya,b.bb))}}(a)))}
+function Ooa(a){if(!a.xa){var b=t(),d=(new XN).HE(cp(a.dc.Jg)),e=(new YN).HE(cp(a.dc.Jg)),f=(new ZN).DE(a.dc),h=(new $N).DE(a.dc),k=new aO;k.Xh=a.Xh;d=[d,e,f,h,k,(new bO).Ea(uc(a.Gi)),(new cO).bc(a.he)];a.Aj=G(b,(new J).j(d));a.xa=!0}a.he=null;a.Xh=null;return a.Aj}Bc.prototype.WV=function(){};
+function Noa(a,b){var d=a.xa?a.Aj:Ooa(a);a=m(new p,function(a,b){return function(a){return a.y(b).wb()}}(a,b));var e=t(),d=d.zj(a,e.s).Lg();if(d.z())return C();a=d.R();if(null!==a)d=a.na(),b=Fl(new Gl,b.Zb,a.ja(),d,b.ma),d.K(b);else throw(new q).i(a);return(new H).i(b)}Bc.prototype.u_=function(a){var b=a.sb;if(yl()===b)if(b=Noa(this,a),b.z()){var b=(new dO).b(),d=$f();a=eh(a,b,a.Zb,d)}else a=b.R();a=(new w).e(a,void 0);return a};
+Bc.prototype.$classData=g({b3:0},!1,"org.nlogo.parse.Namer",{b3:1,d:1,S3:1});function eO(){}eO.prototype=new l;eO.prototype.constructor=eO;c=eO.prototype;c.b=function(){return this};c.y=function(a){return Poa(a)};
+function Poa(a){var b=a.sb,d=$l();if(null!==b&&b===d)throw(new kd).Wf(a);gh||(gh=(new fh).b());b=a.Zb;d=gh;if(!d.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Keywords.scala: 8");if(d.HW.ab(b.toUpperCase())||mp(Ia(),b.toUpperCase(),"-OWN"))b=fO(),a=Fl(new Gl,a.Zb,b,a.W,a.ma);else if(Am||(Am=(new zm).b()),b=Am.$s(a.Zb),Xj(b))b=b.Q,d=cm(),a=Fl(new Gl,a.Zb,d,b,a.ma);else if(C()!==b)throw(new q).i(b);return a}c.Ia=function(a){return Poa(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!Poa(a)};c.za=function(a){return rb(this,a)};c.$classData=g({c3:0},!1,"org.nlogo.parse.Namer0$",{c3:1,d:1,fa:1});var Qoa=void 0;function jp(){Qoa||(Qoa=(new eO).b());return Qoa}function gO(){this.PH=null;this.a=!1}gO.prototype=new l;gO.prototype.constructor=gO;gO.prototype.b=function(){this.PH="Can only have literal agents and agentsets if importing.";this.a=!0;return this};
+function Xda(){var a=Wm();if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/NullImportHandler.scala: 10");return a.PH}gO.prototype.$classData=g({d3:0},!1,"org.nlogo.parse.NullImportHandler$",{d3:1,d:1,gma:1});var Roa=void 0;function Wm(){Roa||(Roa=(new gO).b());return Roa}function hO(){this.wa=this.g=this.va=this.eU=this.bX=this.dw=null;this.a=0}hO.prototype=new l;hO.prototype.constructor=hO;
+hO.prototype.L=function(a){this.g=a;this.a=(8|this.a)<<24>>24};function Baa(a,b){a.wa=b;a.a=(16|a.a)<<24>>24}function WN(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/RawProcedure.scala: 12");return a.bX}function zaa(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/RawProcedure.scala: 13");return a.eU}
+hO.prototype.we=function(){if(0===(4&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/RawProcedure.scala: 21");return this.va};function uc(a){if(0===(16&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/RawProcedure.scala: 9");return a.wa}
+function Soa(a){var b=new hO;b.dw=a;Aaa(b);b.bX=a.Ii.$().Y();b.a=(1|b.a)<<24>>24;var d=a.Nn,e=m(new p,function(){return function(a){return a.f}}(b)),f=t();b.eU=d.ya(e,f.s);b.a=(2|b.a)<<24>>24;a=a.Nn;d=m(new p,function(){return function(a){return a.va}}(b));e=t();Baa(b,a.ya(d,e.s).pg());b.va=WN(b).W;b.a=(4|b.a)<<24>>24;return b}hO.prototype.M=function(){if(0===(8&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/RawProcedure.scala: 9");return this.g};
+hO.prototype.$classData=g({g3:0},!1,"org.nlogo.parse.RawProcedure",{g3:1,d:1,ema:1});function Ae(){this.nE=this.jn=null}Ae.prototype=new Fma;Ae.prototype.constructor=Ae;function gba(a,b,d){a.jn=b;a.nE=d;return a}function iO(a){return a.jn.z()?Toa(new jO,a,2147483647):Toa(new jO,a,a.nE.y(a.jn.Y())|0)}Ae.prototype.$classData=g({i3:0},!1,"org.nlogo.parse.SeqReader",{i3:1,ysa:1,d:1});function Wn(){}Wn.prototype=new l;Wn.prototype.constructor=Wn;Wn.prototype.sf=function(a){return Ib(this,a)};
+Wn.prototype.Se=function(a){var b=a.ye;if(sc(b)){var d=Kb(this,a);a=ad((new ON).b(),d,(new SN).Ea(u()),Xc(new Zc,"",Wg(Ne().qi,u()),m(new p,function(){return function(a){return Ln(Qn(),a)}}(this)),Loa(a))).Zb.trim();if(vt(b))a=(new H).i(a),b=Boa(b,b.Fe,b.Uk,a);else{if(!On(b))throw(new q).i(b);a=(new H).i(a);b=Coa(b,b.Fe,b.Uk,a)}return(new Lb).bd(b,d.wa,d.ma)}return Kb(this,a)};Wn.prototype.ef=function(a){return Mb(this,a)};
+Wn.prototype.$classData=g({k3:0},!1,"org.nlogo.parse.SourceTagger",{k3:1,d:1,ff:1});function Oo(){this.Nx=this.JY=null;this.xa=!1;this.a=0}Oo.prototype=new l;Oo.prototype.constructor=Oo;function kO(a){return lO(mO(a,"identifier",yl()),m(new p,function(){return function(a){return Uoa(a.W,a)}}(a)))}Oo.prototype.b=function(){return this};
+function Voa(a){return lO(nO(oO(a,"UNDIRECTED-LINK-BREED"),I(function(a){return function(){return Woa(a,"UNDIRECTED-LINK-BREED")}}(a))),m(new p,function(){return function(a){var d=a.fb.$l,e=a.fb.Tf;a.fb;return Xoa(d,e,!0,!1)}}(a)))}function Yoa(a){return lO(nO(ze(a,"\x3cbreed\x3e-own",(new pO).Wq(a)),I(function(a){return function(){return qO(a)}}(a))),m(new p,function(){return function(a){if(null!==a){var d=a.Oa,e=new rO,d=Uoa(d.W,d);a=a.fb;e.Og=d;e.ag=a;return e}throw(new q).i(a);}}(a)))}
+function Woa(a,b){var d=lO(kO(a).bs(I(function(a){return function(){return kO(a)}}(a))),m(new p,function(){return function(a){if(null!==a)return Xoa(a.Oa,a.fb,!1,!1);throw(new q).i(a);}}(a)));b=He(kO(a),m(new p,function(a,b){return function(d){return xe(a,"Breed declarations must have plural and singular. "+b+" ["+d.va+"] has only one name.")}}(a,b)));return sO(Zoa(mO(a,"opening bracket",wl()),I(function(a,b,d){return function(){return Fe(b,I(function(a,b){return function(){return b}}(a,d)))}}(a,
+d,b))),I(function(a){return function(){return mO(a,"closing bracket",xl())}}(a)))}function $oa(a){return Zoa(mO(a,"opening bracket",wl()),I(function(a){return function(){return re(a,I(function(a){return function(){return sO(Ee(a,I(function(a){return function(){return ze(a,"string",(new tO).Wq(a))}}(a))),I(function(a){return function(){return mO(a,"closing bracket",xl())}}(a)))}}(a)))}}(a)))}function mO(a,b,d){var e=new uO;e.ZG=d;return ze(a,b,e)}
+function pea(a){null===a.Nx&&null===a.Nx&&(a.Nx=(new jC).Cp(a));return a.Nx}function oO(a,b){var d=new vO;d.mr=b;return ze(a,b,d)}function nea(a){var b=Ee(a,I(function(a){return function(){return apa(a)}}(a))).bs(I(function(a){return function(){return Fe(bpa(a),I(function(a){return function(){return cpa(a)}}(a)))}}(a)));return lO(dpa(a,b),m(new p,function(){return function(a){if(null!==a){var b=a.Oa;a=a.fb;var f=x();return b.$c(a,f.s)}throw(new q).i(a);}}(a)))}
+function epa(a){return lO(nO(oO(a,"EXTENSIONS"),I(function(a){return function(){return qO(a)}}(a))),m(new p,function(){return function(a){if(null!==a)return(new wO).IE(a.Oa,a.fb);throw(new q).i(a);}}(a)))}function fpa(a){return lO(nO(ze(a,"BREED",(new xO).Wq(a)),I(function(a){return function(){return Woa(a,"BREED")}}(a))),m(new p,function(){return function(a){return a.fb}}(a)))}
+function apa(a){return Fe(Fe(Fe(Fe(Fe(Fe(Fe(Fe(Fe(gpa(a),I(function(a){return function(){return epa(a)}}(a))),I(function(a){return function(){return fpa(a)}}(a))),I(function(a){return function(){return hpa(a)}}(a))),I(function(a){return function(){return Voa(a)}}(a))),I(function(a){return function(){return yO(a,"GLOBALS")}}(a))),I(function(a){return function(){return yO(a,"TURTLES-OWN")}}(a))),I(function(a){return function(){return yO(a,"PATCHES-OWN")}}(a))),I(function(a){return function(){return yO(a,
+"LINKS-OWN")}}(a))),I(function(a){return function(){return Yoa(a)}}(a)))}function bpa(a){var b=I(function(a){return function(){return ipa(a)}}(a));return sO(hba(a,b,b),I(function(a){return function(){return Fe(mO(a,"eof",Ec()),I(function(a){return function(){return xe(a,"TO or TO-REPORT expected")}}(a)))}}(a)))}function zO(a){a.xa||a.xa||(a.JY=(new UB).i(C()),a.xa=!0);return a.JY}
+function qO(a){return Zoa(mO(a,"opening bracket",wl()),I(function(a){return function(){return re(a,I(function(a){return function(){return sO(Ee(a,I(function(a){return function(){return kO(a)}}(a))),I(function(a){return function(){return mO(a,"closing bracket",xl())}}(a)))}}(a)))}}(a)))}
+function yO(a,b){return lO(nO(oO(a,b),I(function(a){return function(){return qO(a)}}(a))),m(new p,function(a,b){return function(a){if(null!==a){var d=new rO,k=Uoa(b,a.Oa);a=a.fb;d.Og=k;d.ag=a;return d}throw(new q).i(a);}}(a,b)))}function gpa(a){return lO(nO(oO(a,"__INCLUDES"),I(function(a){return function(){return $oa(a)}}(a))),m(new p,function(){return function(a){if(null!==a)return(new AO).IE(a.Oa,a.fb);throw(new q).i(a);}}(a)))}
+function ipa(a){return lO(nO(Fe(oO(a,"TO"),I(function(a){return function(){return oO(a,"TO-REPORT")}}(a))),I(function(a){return function(){return kO(a)}}(a))).bs(I(function(a){return function(){return Fe(lO(qO(a),m(new p,function(){return function(a){return(new H).i(a)}}(a))),I(function(a){return function(){var b=C();return fba(a,b)}}(a)))}}(a))).bs(I(function(a){return function(){return Ee(a,I(function(a){return function(){return ze(a,"?",(new BO).Wq(a))}}(a)))}}(a))).bs(I(function(a){return function(){return Fe(oO(a,
+"END"),I(function(a){return function(){return xe(a,"END expected")}}(a)))}}(a))),m(new p,function(){return function(a){if(null!==a){var d=a.Oa,e=a.fb;if(null!==d){var f=d.Oa,h=d.fb;if(null!==f&&(d=f.Oa,f=f.fb,null!==d)){var k=d.Oa;a=d.fb;var d=k.W,d=null!==d&&Fa(d,"TO-REPORT"),f=f.z()?G(t(),u()):f.R(),n=a.f,r=x(),h=h.Tc(n,r.s),n=x(),k=h.Tc(k,n.s),n=x(),h=new CO,e=k.yc(e,n.s);h.va=a;h.Qn=d;h.Nn=f;h.Ii=e;return h}}}throw(new q).i(a);}}(a)))}
+function hpa(a){return lO(nO(oO(a,"DIRECTED-LINK-BREED"),I(function(a){return function(){return Woa(a,"DIRECTED-LINK-BREED")}}(a))),m(new p,function(){return function(a){var d=a.fb.$l,e=a.fb.Tf;a.fb;return Xoa(d,e,!0,!0)}}(a)))}function cpa(a){return Fe(lO(mO(a,"eof",Ec()),m(new p,function(){return function(){return G(t(),u())}}(a))),I(function(a){return function(){return xe(a,"keyword expected")}}(a)))}Oo.prototype.$classData=g({m3:0},!1,"org.nlogo.parse.StructureCombinators",{m3:1,d:1,vsa:1});
+function rp(){this.gj=null;this.Zr=0}rp.prototype=new l;rp.prototype.constructor=rp;function lea(a,b){return qp(new rp,a.gj.Nk(b.gj),a.Zr+b.Zr|0)}function qp(a,b,d){a.gj=b;a.Zr=d;return a}function ym(a,b){a=a.gj;b=b.toUpperCase();return a.ab(b)}c=rp.prototype;c.o=function(a){if(a&&a.$classData&&a.$classData.m.jR){a=a.gj;var b=this.gj;return null===a?null===b:DO(a,b)}return this===a};c.l=function(){return ec(this.gj,"",", ","")};c.Fo=function(a){return qp(new rp,this.gj.hg(a),this.Zr)};c.ta=function(a){this.gj.ta(a)};
+function Qda(a){for(var b=qm(),d=C(),e=a.Zr;d.z();){var f=("_"+e).toUpperCase();ym(a,f)?e=1+e|0:d=(new H).i((new w).e(f,e))}a:{if(Xj(d)&&(e=d.Q,null!==e)){d=e.Gc();e=e.ja();break a}throw(new q).i(d);}d|=0;return(new w).e(e,qp(new rp,a.gj.Zj((new w).e(e,b)),1+d|0))}function Vda(a,b,d){var e=a.gj;b=b.toUpperCase();return qp(new rp,e.Zj((new w).e(b,d)),a.Zr)}c.$s=function(a){return this.gj.gc(a.toUpperCase())};function pm(a,b){return a.gj.y(b.toUpperCase())}
+function tc(a,b,d){var e=a.gj;d=m(new p,function(a,b){return function(a){a=a.toUpperCase();return(new w).e(a,b)}}(a,d));var f=Mc();return qp(new rp,e.Nk(b.ya(d,f.s).De(Ne().ml)),a.Zr)}c.ya=function(a,b){b=b.Tg();var d=this.gj,e=Ok().s;b.Xb(kr(d,a,e));return b.Ba()};c.$classData=g({jR:0},!1,"org.nlogo.parse.SymbolTable",{jR:1,d:1,ib:1});function EO(){this.vU=null}EO.prototype=new l;EO.prototype.constructor=EO;function oga(a){var b=new EO;b.vU=a;return b}
+EO.prototype.rf=function(){var a;FO();var b=this.vU;a=new GO;a.L_=b.lj;a=a.rf();b=b.gq;if(P(b))b=b.ga,a=jpa(FO(),a,b);else{if(!Hp(b))throw(new q).i(b);b=b.fc;a=kpa(FO(),a,b)}return a};EO.prototype.$classData=g({k4:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$$anon$1",{k4:1,d:1,mm:1});function HO(){this.tV=this.qX=this.rX=null;this.a=0}HO.prototype=new l;HO.prototype.constructor=HO;
+HO.prototype.b=function(){IO=this;this.rX=(new JO).b();this.a=(1|this.a)<<24>>24;this.qX=(new KO).b();this.a=(2|this.a)<<24>>24;this.tV=LO();this.a=(4|this.a)<<24>>24;return this};function MO(a){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Compiler.scala: 49");return a.tV}
+function lpa(a,b,d){var e=iga(uga(b.dc,b.Kc,b.$f,d.rr)),f=Ofa(Ss(),b.Kc);gt||(gt=(new ft).b());d=$fa(b.Fs);b=b.wv;a=m(new p,function(a){return function(b){if(P(b))return b.ga;if(!Hp(b))throw(new q).i(b);var d=b.fc;b=function(){return function(a){return a.Lc}}(a);Lp();var e=b(d.Ic),f=Mp(d.Sc),d=Np().Wd;a:for(;;){if(Op(f)){var h=f,f=h.ld,d=(new Pp).Vb(b(h.gd),d);continue a}if(!Qp(f))throw(new q).i(f);break}b=Ys((new Rp).Vb(e,d)).wb();return'modelConfig.dialog.notify("Error(s) in interface global init: '+
+ec(b,"",", ","")+'")'}}(a));var h=t();a=b.ya(a,h.s).Ab("\n");b=t();a=(new Vs).$k("interfaceInit",a,G(b,(new J).j(["world","procedures","modelConfig"])));Lt||(Lt=(new Ht).b());b=Lt;h=t();e=e.$c(f,h.s);f=t();d=e.$c(d,f.s);e=(new Vs).$k("global.modelConfig",Ufa(),G(t(),u()));f=t();d=d.yc(e,f.s);e=mpa();f=t();d=d.yc(e,f.s);e=t();return Iga(b,d.yc(a,e.s))}
+function Gfa(a,b,d){var e=npa(opa()),f=ppa(b),e=So(f,e.Ik,e.jj,e.Ij,e.Xi,e.rg,e.Yf,e.Jg),f=Yg(),f=qpa(a,b,e,f);if(null===f)throw(new q).i(f);var h=f.Oa,e=f.fb,f=f.Gf,k=(new pr).c(b.je),h=Yfa(Vfa(new dt,NO(a),d,k),h),k=afa(),k=rb(m(new p,function(a,b){return function(a){return rpa(Yp(),b,a)}}(a,m(new p,function(a,b,d,e){return function(a){return OO(Yp(),a,!0,b,d,!1,e)}}(a,f,e,spa(new PO,d.up,d.rr,k,d.Np))))),m(new p,function(a){return function(b){if(P(b))return b;if(Hp(b)){var d=b.fc;b=function(){return function(a){return a}}(a);
+Lp();var e=b(d.Ic),f=Mp(d.Sc),d=Np().Wd;a:for(;;){if(Op(f)){var h=f,f=h.ld,d=(new Pp).Vb(b(h.gd),d);continue a}if(!Qp(f))throw(new q).i(f);break}return(new Ip).i((new Rp).Vb(e,d))}throw(new q).i(b);}}(a))),n=rb(m(new p,function(a,b){return function(a){return rpa(Yp(),b,a)}}(a,m(new p,function(a,b,d,e){return function(a){return OO(Yp(),a,!1,b,d,!1,e)}}(a,f,e,d)))),m(new p,function(a){return function(b){if(P(b))return b;if(Hp(b)){var d=b.fc;b=function(){return function(a){return a}}(a);Lp();var e=b(d.Ic),
+f=Mp(d.Sc),d=Np().Wd;a:for(;;){if(Op(f)){var h=f,f=h.ld,d=(new Pp).Vb(b(h.gd),d);continue a}if(!Qp(f))throw(new q).i(f);break}return(new Ip).i((new Rp).Vb(e,d))}throw(new q).i(b);}}(a))),k=Xga(Wga(k,n),b.Kc);a=m(new p,function(a,b){return function(a){return rpa(Yp(),b,a)}}(a,m(new p,function(a,b,d,e){return function(a){return OO(Yp(),a,!0,b,d,!0,e)}}(a,f,e,d))));d=tpa(b);n=t();a=d.ya(a,n.s);return upa(h,k,a,b,f,e)}
+function qpa(a,b,d,e){b=b.je;var f=QO();MO(a);var h=C();MO(a);var k=(new RE).b();MO(a);var n=(new QE).b();MO(a);a=MO(a);d=waa(a,b,h,d,!1,e,f,k,n);if(null===d)throw(new q).i(d);e=d.na();return(new bc).Id(d.ja(),e.dc,e.he)}function rpa(a,b,d){try{fq();var e=b.y(d);return oq().y(e)}catch(f){if($p(f))return fq(),gq(Vp(),f);throw f;}}
+function mpa(){var a=(new Tb).c('var modelConfig \x3d\n               |  (\n               |    (typeof global !\x3d\x3d "undefined" \x26\x26 global !\x3d\x3d null) ? global :\n               |    (typeof window !\x3d\x3d "undefined" \x26\x26 window !\x3d\x3d null) ? window :\n               |    {}\n               |  ).modelConfig || {};'),a=gd(a),b=t();return(new Vs).$k("modelConfig",a,G(b,(new J).j(["global.modelConfig"])))}
+function NO(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Compiler.scala: 47");return a.qX}
+function OO(a,b,d,e,f,h,k){var n;n=pca();var r=Ei();if(!n.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/SourceWrapping.scala: 7");n=n.$T.y(r);n=d?"to __evaluator [] "+n+" ":"to-report __evaluator [] "+n+" report ( ";pca();r=""+n+b+(d?"\n__done end":"\n) __done end");b=(new pr).c(r);n=Xfa(new et,!h,G(t(),u()));var y=QO();MO(a);var E=C();MO(a);MO(a);var Q=(new RE).b();MO(a);var R=(new QE).b();MO(a);var da=MO(a);e=waa(da,r,E,f,!0,e,y,Q,R);if(null===e)throw(new q).i(e);
+e=e.ja();e=k.Np?Mfa(Nfa(),e.Y()):e.Y();if(d)return a=NO(a),Jq(a,e.pe,!0,!h,k,b,n);h=NO(a);a=e.pe.ng.X(1).wa.X(0);return zq(h,a,k,b,n)}HO.prototype.$classData=g({p4:0},!1,"org.nlogo.tortoise.compiler.Compiler$",{p4:1,d:1,xma:1});var IO=void 0;function Yp(){IO||(IO=(new HO).b());return IO}function RO(){this.qF=null}RO.prototype=new l;RO.prototype.constructor=RO;RO.prototype.tg=function(){var a=fr(cr(),(new dr).Bh(this.qF),"name"),b=er();return wd(a,b)};
+function vpa(a){try{var b=fr(cr(),(new dr).Bh(a.qF),"prims"),d=dfa(),e=wd(b,d).W,f=m(new p,function(){return function(a){return cfa(gr(),a)}}(a)),h=Nj().pc;return kr(e,f,h)}catch(k){a=qn(qg(),k);if(Lr(a))throw pg(qg(),(new nr).$q("Problem parsing extension definition JSON.  "+a.Vf(),a));throw k;}}RO.prototype.Bh=function(a){this.qF=a;return this};RO.prototype.$classData=g({x4:0},!1,"org.nlogo.tortoise.compiler.CreateExtension$$anon$1",{x4:1,d:1,zma:1});
+function SO(){this.JX=this.iV=null;this.a=0}SO.prototype=new l;SO.prototype.constructor=SO;
+SO.prototype.b=function(){TO=this;var a=G(t(),(new J).j('{\n  "name": "logging",\n  "prims": [\n    {\n      "name":       "all-logs",\n      "actionName": "all-logs",\n      "argTypes":   [],\n      "returnType": "list"\n    }, {\n      "name":       "clear-logs",\n      "actionName": "clear-logs",\n      "argTypes":   [],\n      "returnType": "unit"\n    }, {\n      "name":       "log-globals",\n      "actionName": "log-globals",\n      "argTypes":   [{ "type": "string", "isRepeatable": true }],\n      "returnType": "unit"\n    }, {\n      "name":       "log-message",\n      "actionName": "log-message",\n      "argTypes":   ["string"],\n      "returnType": "unit"\n    }\n  ]\n}\n;{\n  "name": "encode",\n  "prims": [\n    {\n      "name":       "base64-to-bytes",\n      "actionName": "base64-to-bytes",\n      "argTypes":   ["string"],\n      "returnType": "list"\n    }, {\n      "name":       "bytes-to-base64",\n      "actionName": "bytes-to-base64",\n      "argTypes":   ["list"],\n      "returnType": "string"\n    }, {\n      "name":       "bytes-to-string",\n      "actionName": "bytes-to-string",\n      "argTypes":   ["list"],\n      "returnType": "string"\n    }, {\n      "name":       "string-to-bytes",\n      "actionName": "string-to-bytes",\n      "argTypes":   ["string"],\n      "returnType": "list"\n    }\n  ]\n}\n;{\n  "name": "store",\n  "prims": [\n    {\n      "name":       "put",\n      "actionName": "put",\n      "argTypes":   ["string", "string", { "type": "commandblock", "isOptional": true }],\n      "returnType": "unit"\n    },\n    {\n      "name":       "get",\n      "actionName": "get",\n      "argTypes":   ["string", "command"],\n      "returnType": "unit"\n    },\n    {\n      "name":       "get-keys",\n      "actionName": "get-keys",\n      "argTypes":   ["command"],\n      "returnType": "unit"\n    },\n    {\n      "name":       "has-key",\n      "actionName": "has-key",\n      "argTypes":   ["string", "command"],\n      "returnType": "unit"\n    },\n    {\n      "name":       "remove",\n      "actionName": "remove",\n      "argTypes":   ["string", { "type": "commandblock", "isOptional": true }],\n      "returnType": "unit"\n    },\n    {\n      "name":       "clear",\n      "actionName": "clear",\n      "argTypes":   [{ "type": "commandblock", "isOptional": true }],\n      "returnType": "unit"\n    }\n  ]\n}\n;{\n  "name": "import-a",\n  "prims": [\n    {\n      "name":            "drawing",\n      "actionName":      "drawing",\n      "argTypes":        ["string"],\n      "returnType":      "unit"\n    }, {\n      "name":            "pcolors",\n      "actionName":      "pcolors",\n      "argTypes":        ["string"],\n      "returnType":      "unit"\n    }, {\n      "name":            "pcolors-rgb",\n      "actionName":      "pcolors-rgb",\n      "argTypes":        ["string"],\n      "returnType":      "unit"\n    }, {\n      "name":            "world",\n      "actionName":      "world",\n      "argTypes":        ["string"],\n      "returnType":      "unit"\n    }\n  ]\n}\n;{\n  "name": "codap",\n  "prims": [\n    {\n      "name":       "init",\n      "actionName": "init",\n      "argTypes":   ["command"]\n    }, {\n      "name":       "call",\n      "actionName": "call",\n      "argTypes":   ["wildcard"]\n    }\n  ]\n}\n;{\n  "name": "dialog",\n  "prims": [\n    {\n      "name":       "user-input",\n      "actionName": "user-input",\n      "argTypes":   ["string", "command"],\n      "returnType": "unit"\n    }, {\n      "name":       "user-message",\n      "actionName": "user-message",\n      "argTypes":   ["string", "command"],\n      "returnType": "unit"\n    }, {\n      "name":       "user-one-of",\n      "actionName": "user-one-of",\n      "argTypes":   ["string", "list", "command"],\n      "returnType": "unit"\n    }, {\n      "name":       "user-yes-or-no?",\n      "actionName": "user-yes-or-no?",\n      "argTypes":   ["string", "command"],\n      "returnType": "unit"\n    }\n  ]\n}\n;{\n  "name": "mini-csv",\n  "prims": [\n    {\n      "name":            "from-string",\n      "actionName":      "from-string",\n      "argTypes":        [{ "type": "string", "isRepeatable": true }],\n      "defaultArgCount": 1,\n      "returnType":      "list"\n    }, {\n      "name":            "from-row",\n      "actionName":      "from-row",\n      "argTypes":        [{ "type": "string", "isRepeatable": true }],\n      "defaultArgCount": 1,\n      "returnType":      "list"\n    }, {\n      "name":            "to-string",\n      "actionName":      "to-string",\n      "argTypes":        ["list", { "type": "string", "isRepeatable": true }],\n      "defaultArgCount": 1,\n      "returnType":      "string"\n    }, {\n      "name":            "to-row",\n      "actionName":      "to-row",\n      "argTypes":        ["list", { "type": "string", "isRepeatable": true }],\n      "defaultArgCount": 1,\n      "returnType":      "string"\n    }\n  ]\n}\n;{\n  "name": "fetch",\n  "prims": [\n    {\n      "name":       "file",\n      "actionName": "file",\n      "argTypes":   ["string"],\n      "returnType": "string"\n    }, {\n      "name":       "file-async",\n      "actionName": "file-async",\n      "argTypes":   ["string", "command"],\n      "returnType": "unit"\n    }, {\n      "name":       "url",\n      "actionName": "url",\n      "argTypes":   ["string"],\n      "returnType": "string"\n    }, {\n      "name":       "url-async",\n      "actionName": "url-async",\n      "argTypes":   ["string", "command"],\n      "returnType": "unit"\n    }, {\n      "name":       "user-file",\n      "actionName": "user-file",\n      "argTypes":   [],\n      "returnType": "string"\n    }, {\n      "name":       "user-file-async",\n      "actionName": "user-file-async",\n      "argTypes":   ["command"],\n      "returnType": "unit"\n    }\n  ]\n}\n;{\n  "name": "nlmap",\n  "prims": [\n    {\n      "name":       "from-list",\n      "actionName": "from-list",\n      "argTypes":   ["list"],\n      "returnType": "wildcard"\n    }, {\n      "name":       "to-list",\n      "actionName": "to-list",\n      "argTypes":   ["wildcard"],\n      "returnType": "list"\n    }, {\n      "name":       "is-map?",\n      "actionName": "is-map?",\n      "argTypes":   ["wildcard"],\n      "returnType": "boolean"\n    }, {\n      "name":       "get",\n      "actionName": "get",\n      "argTypes":   ["wildcard", "string"],\n      "returnType": "wildcard"\n    }, {\n      "name":       "remove",\n      "actionName": "remove",\n      "argTypes":   ["wildcard", "string"],\n      "returnType": "wildcard"\n    }, {\n      "name":       "add",\n      "actionName": "add",\n      "argTypes":   ["wildcard", "string", "wildcard"],\n      "returnType": "wildcard"\n    }, {\n      "name":       "to-json",\n      "actionName": "to-json",\n      "argTypes":   ["wildcard"],\n      "returnType": "string"\n    }, {\n      "name":       "to-urlenc",\n      "actionName": "to-urlenc",\n      "argTypes":   ["wildcard"],\n      "returnType": "string"\n    }, {\n      "name":       "from-json",\n      "actionName": "from-json",\n      "argTypes":   ["string"],\n      "returnType": "wildcard"\n    }\n  ]\n}\n;{\n  "name": "http-req",\n  "prims": [\n    {\n      "name":       "get",\n      "actionName": "get",\n      "argTypes":   ["string"],\n      "returnType": "list"\n    }, {\n      "name":       "post",\n      "actionName": "post",\n      "argTypes":   ["string", "string", "string"],\n      "returnType": "list"\n    }\n  ]\n}\n;{\n  "name": "send-to",\n  "prims": [\n    {\n      "name":       "file",\n      "actionName": "file",\n      "argTypes":   ["string", "string"],\n      "returnType": "unit"\n    }\n  ]\n}\n;{\n  "name": "export-the",\n  "prims": [\n    {\n      "name":            "model",\n      "actionName":      "model",\n      "argTypes":        [],\n      "returnType":      "string"\n    }, {\n      "name":            "output",\n      "actionName":      "output",\n      "argTypes":        [],\n      "returnType":      "string"\n    }, {\n      "name":            "plot",\n      "actionName":      "plot",\n      "argTypes":        ["string"],\n      "returnType":      "string"\n    }, {\n      "name":            "view",\n      "actionName":      "view",\n      "argTypes":        [],\n      "returnType":      "string"\n    }, {\n      "name":            "world",\n      "actionName":      "world",\n      "argTypes":        [],\n      "returnType":      "string"\n    }\n  ]\n}\n'.split(";"))),b=
+m(new p,function(){return function(a){gr();var b=jia();a=lia(b,ba.JSON.parse(a));return(new RO).Bh(a)}}(this)),d=t(),a=a.ya(b,d.s),b=m(new p,function(){return function(a){return(new w).e(a.tg(),a)}}(this)),d=t();this.iV=a.ya(b,d.s).De(Ne().ml);this.a=(1|this.a)<<24>>24;wpa||(wpa=(new UO).b());this.JX=Wg(wpa,u());this.a=(2|this.a)<<24>>24;return this};
+function np(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/NLWExtensionManager.scala: 141");return a.JX}function xpa(a,b){a=Zl().ma.Ua;var d=Zl().ma.Ya,e=Zl();throw(new kd).gt(b,a,d,e.ma.bb);}function ypa(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/NLWExtensionManager.scala: 140");return a.iV}
+function Fea(a,b){var d=ypa(a).Zh(b,I(function(a,b){return function(){xpa(QO(),"No such extension: "+b)}}(a,b)));b=vpa(d);var d=m(new p,function(a,b){return function(a){return(new w).e(b.tg(),a)}}(a,d)),e=t();b=b.ya(d,e.s);d=m(new p,function(){return function(a){if(null!==a){var b=a.ja(),d=a.na();if(null!==d)return a=d.cw,(new w).e((b+":"+d.va).toUpperCase(),a)}throw(new q).i(a);}}(a));e=t();b=b.ya(d,e.s);a=np(a);IC(a,b)}
+SO.prototype.$classData=g({K4:0},!1,"org.nlogo.tortoise.compiler.NLWExtensionManager$",{K4:1,d:1,cma:1});var TO=void 0;function QO(){TO||(TO=(new SO).b());return TO}function ss(){}ss.prototype=new l;ss.prototype.constructor=ss;c=ss.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(qt(d)&&(t(),d=(new H).i(b),null!==d.Q&&0===d.Q.vb(1)&&(d=d.Q.X(0),yb(d)&&(b=Sh().ac(d),!b.z()&&(d=b.R().Oa,b=b.R().fb,VO(d))))))return d=(new WO).b(),(new Lb).bd(d,b,a.ma)}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({N4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$AnyOtherTransformer$",{N4:1,d:1,ff:1});var rs=void 0;function qs(){}qs.prototype=new l;qs.prototype.constructor=qs;c=qs.prototype;c.b=function(){return this};
+c.sf=function(a){return Ib(this,a)};c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(qt(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(1)&&(b=b.Q.X(0),yb(b)&&(d=Sh().ac(b),!d.z()&&(b=d.R().fb,ut(d.R().Oa))))))return d=(new XO).b(),(new Lb).bd(d,b,a.ma)}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({O4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$AnyOtherWithTransformer$",{O4:1,d:1,ff:1});var ps=void 0;function As(){}As.prototype=new l;
+As.prototype.constructor=As;c=As.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(qt(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(1)&&(b=b.Q.X(0),yb(b)&&(d=Sh().ac(b),!d.z()&&(b=d.R().fb,tt(d.R().Oa))))))return d=(new YO).b(),(new Lb).bd(d,b,a.ma)}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({P4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$AnyWith1Transformer$",{P4:1,d:1,ff:1});
+var zs=void 0;function Cs(){}Cs.prototype=new l;Cs.prototype.constructor=Cs;c=Cs.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(ZO(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),yb(d)&&(d=Sh().ac(d),!d.z())))){var e=d.R().fb;if(pt(d.R().Oa)&&(t(),d=(new H).i(e),null!==d.Q&&0===d.Q.vb(1)&&(d=d.Q.X(0),yb(d)&&(e=Sh().ac(d),!e.z()&&(d=e.R().fb,tt(e.R().Oa)&&yb(b)&&(b=Sh().ac(b),!b.z()&&(b=b.R().Oa,Mn(b)&&Em(Fm(),b.W,0))))))))return b=(new YO).b(),(new Lb).bd(b,d,a.ma)}}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};
+c.$classData=g({Q4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$AnyWith2Transformer$",{Q4:1,d:1,ff:1});var Bs=void 0;function Es(){}Es.prototype=new l;Es.prototype.constructor=Es;c=Es.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if($O(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),yb(d)&&(d=Sh().ac(d),!d.z())))){var e=d.R().fb;if(pt(d.R().Oa)&&(t(),d=(new H).i(e),null!==d.Q&&0===d.Q.vb(1)&&(d=d.Q.X(0),yb(d)&&(e=Sh().ac(d),!e.z()&&(d=e.R().fb,tt(e.R().Oa)&&yb(b)&&(b=Sh().ac(b),!b.z()&&(b=b.R().Oa,Mn(b)&&Em(Fm(),b.W,0))))))))return b=(new YO).b(),(new Lb).bd(b,d,a.ma)}}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};
+c.$classData=g({R4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$AnyWith3Transformer$",{R4:1,d:1,ff:1});var Ds=void 0;function Gs(){}Gs.prototype=new l;Gs.prototype.constructor=Gs;c=Gs.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(aP(b.R().Oa)&&(t(),d=(new H).i(d),null!==d.Q&&0===d.Q.vb(2)&&(b=d.Q.X(0),d=d.Q.X(1),yb(b)&&(b=Sh().ac(b),!b.z()&&(b=b.R().Oa,Mn(b)&&yb(d)&&(d=Sh().ac(d),!d.z())))))){var e=d.R().fb;if(pt(d.R().Oa)&&(t(),d=(new H).i(e),null!==d.Q&&0===d.Q.vb(1)&&(d=d.Q.X(0),yb(d)&&(e=Sh().ac(d),!e.z()&&(d=e.R().fb,tt(e.R().Oa)&&Em(Fm(),b.W,0))))))return b=(new YO).b(),(new Lb).bd(b,d,a.ma)}}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};
+c.$classData=g({S4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$AnyWith4Transformer$",{S4:1,d:1,ff:1});var Fs=void 0;function Is(){}Is.prototype=new l;Is.prototype.constructor=Is;c=Is.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(Ls(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),yb(d)&&(d=Sh().ac(d),!d.z())))){var e=d.R().fb;if(pt(d.R().Oa)&&(t(),d=(new H).i(e),null!==d.Q&&0===d.Q.vb(1)&&(d=d.Q.X(0),yb(d)&&(e=Sh().ac(d),!e.z()&&(d=e.R().fb,tt(e.R().Oa)&&yb(b)&&(b=Sh().ac(b),!b.z()&&(b=b.R().Oa,Mn(b)&&Em(Fm(),b.W,0)))))))){var b=(new vI).b(),e=t(),f=(new YO).b(),d=G(e,(new J).j([(new Lb).bd(f,d,a.ma)]));return(new Lb).bd(b,d,a.ma)}}}return Kb(this,
+a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({T4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$AnyWith5Transformer$",{T4:1,d:1,ff:1});var Hs=void 0;function ys(){}ys.prototype=new l;ys.prototype.constructor=ys;c=ys.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(pt(d)&&(t(),d=(new H).i(b),null!==d.Q&&0===d.Q.vb(1)&&(d=d.Q.X(0),yb(d)&&(b=Sh().ac(d),!b.z()&&(d=b.R().Oa,b=b.R().fb,VO(d))))))return d=(new bP).b(),(new Lb).bd(d,b,a.ma)}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({U4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$CountOtherTransformer$",{U4:1,d:1,ff:1});var xs=void 0;function ws(){}ws.prototype=new l;ws.prototype.constructor=ws;c=ws.prototype;
+c.b=function(){return this};c.sf=function(a){return Ib(this,a)};c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(pt(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(1)&&(b=b.Q.X(0),yb(b)&&(d=Sh().ac(b),!d.z()&&(b=d.R().fb,ut(d.R().Oa))))))return d=(new cP).b(),(new Lb).bd(d,b,a.ma)}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({V4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$CountOtherWithTransformer$",{V4:1,d:1,ff:1});var vs=void 0;function as(){}
+as.prototype=new l;as.prototype.constructor=as;c=as.prototype;c.b=function(){return this};c.sf=function(a){var b=Ji(Li(),a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(Pq(d)&&(t(),b=(new H).i(b),null!==b.Q&&0===b.Q.vb(2)&&(b=b.Q.X(1),zb(b)&&b.pe.ng.z())))return d=(new dP).c(d.la),(new Jb).Cj(d,a.wa,a.ma)}return Ib(this,a)};c.Se=function(a){return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({W4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$CroFastTransformer$",{W4:1,d:1,ff:1});
+var $r=void 0;function Zr(){}Zr.prototype=new l;Zr.prototype.constructor=Zr;c=Zr.prototype;c.b=function(){return this};c.sf=function(a){var b=Ji(Li(),a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(Oq(d)&&(t(),b=(new H).i(b),null!==b.Q&&0===b.Q.vb(2)&&(b=b.Q.X(1),zb(b)&&b.pe.ng.z())))return d=(new eP).c(d.la),(new Jb).Cj(d,a.wa,a.ma)}return Ib(this,a)};c.Se=function(a){return Kb(this,a)};c.ef=function(a){return Mb(this,a)};
+c.$classData=g({X4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$CrtFastTransformer$",{X4:1,d:1,ff:1});var Yr=void 0;function Sr(){}Sr.prototype=new l;Sr.prototype.constructor=Sr;c=Sr.prototype;c.b=function(){return this};c.sf=function(a){var b=Ji(Li(),a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(fP(d)&&(t(),d=(new H).i(b),null!==d.Q&&0===d.Q.vb(1)&&(d=d.Q.X(0),yb(d)&&(d=Sh().ac(d),!d.z()&&(d=d.R().Oa,Mn(d)&&Em(Fm(),d.W,1))))))return d=(new gP).b(),b=G(t(),u()),(new Jb).Cj(d,b,a.ma)}return Ib(this,a)};
+c.Se=function(a){return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({Y4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$Fd1Transformer$",{Y4:1,d:1,ff:1});var Rr=void 0;function Ur(){}Ur.prototype=new l;Ur.prototype.constructor=Ur;c=Ur.prototype;c.b=function(){return this};
+c.sf=function(a){var b=Ji(Li(),a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(fP(d)&&(t(),d=(new H).i(b),null!==d.Q&&0===d.Q.vb(1)&&(d=d.Q.X(0),yb(d)&&(d=Sh().ac(d),!d.z()&&(d=d.R().Oa,Mn(d)&&(d=d.W,"number"===typeof d&&-1<+d&&1>+d))))))return d=(new hP).b(),(new Jb).Cj(d,a.wa,a.ma)}return Ib(this,a)};c.Se=function(a){return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({Z4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$FdLessThan1Transformer$",{Z4:1,d:1,ff:1});var Tr=void 0;
+function es(){}es.prototype=new l;es.prototype.constructor=es;c=es.prototype;c.b=function(){return this};c.sf=function(a){var b=Ji(Li(),a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(Uq(d)&&(t(),b=(new H).i(b),null!==b.Q&&0===b.Q.vb(2)&&(b=b.Q.X(1),zb(b)&&b.pe.ng.z())))return d=(new iP).c(d.la),(new Jb).Cj(d,a.wa,a.ma)}return Ib(this,a)};c.Se=function(a){return Kb(this,a)};c.ef=function(a){return Mb(this,a)};
+c.$classData=g({$4:0},!1,"org.nlogo.tortoise.compiler.Optimizer$HatchFastTransformer$",{$4:1,d:1,ff:1});var ds=void 0;function jP(){}jP.prototype=new l;jP.prototype.constructor=jP;function zpa(){}zpa.prototype=jP.prototype;jP.prototype.sf=function(a){return Ib(this,a)};jP.prototype.ef=function(a){return Mb(this,a)};function ms(){}ms.prototype=new l;ms.prototype.constructor=ms;c=ms.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(kP(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(1)&&(b=b.Q.X(0),yb(b)&&(d=Sh().ac(b),!d.z()&&(b=d.R().fb,tt(d.R().Oa))))))return d=(new lP).b(),(new Lb).bd(d,b,a.ma)}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({d5:0},!1,"org.nlogo.tortoise.compiler.Optimizer$OneOfWithTransformer$",{d5:1,d:1,ff:1});var ls=void 0;function os(){}os.prototype=new l;os.prototype.constructor=os;c=os.prototype;c.b=function(){return this};
+c.sf=function(a){return Ib(this,a)};c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(VO(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(1)&&(b=b.Q.X(0),yb(b)&&(d=Sh().ac(b),!d.z()&&(b=d.R().fb,tt(d.R().Oa))))))return d=(new mP).b(),(new Lb).bd(d,b,a.ma)}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({e5:0},!1,"org.nlogo.tortoise.compiler.Optimizer$OtherWithTransformer$",{e5:1,d:1,ff:1});var ns=void 0;function cs(){}cs.prototype=new l;
+cs.prototype.constructor=cs;c=cs.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(nP(d)&&(t(),d=(new H).i(b),null!==d.Q&&0===d.Q.vb(2)&&(b=d.Q.X(0),d=d.Q.X(1),yb(b)&&(b=Sh().ac(b),!b.z()&&(b=b.R().Oa,Mn(b)&&(b=b.W,"number"===typeof b&&yb(d)&&(d=Sh().ac(d),!d.z()&&(d=d.R().Oa,Mn(d)&&(d=d.W,"number"===typeof d))))))))){if(rE(Fm(),b,0)&&rE(Fm(),d,0))return d=(new oP).b(),(new Lb).bd(d,a.wa,a.ma);if(rE(Fm(),b,0)&&rE(Fm(),d,-1))return d=(new pP).b(),(new Lb).bd(d,a.wa,a.ma);if(rE(Fm(),b,0)&&rE(Fm(),d,1))return d=
+(new qP).b(),(new Lb).bd(d,a.wa,a.ma);if(rE(Fm(),b,-1)&&rE(Fm(),d,0))return d=(new rP).b(),(new Lb).bd(d,a.wa,a.ma);if(rE(Fm(),b,-1)&&rE(Fm(),d,-1))return d=(new sP).b(),(new Lb).bd(d,a.wa,a.ma);if(rE(Fm(),b,-1)&&rE(Fm(),d,1))return d=(new tP).b(),(new Lb).bd(d,a.wa,a.ma);if(rE(Fm(),b,1)&&rE(Fm(),d,0))return d=(new uP).b(),(new Lb).bd(d,a.wa,a.ma);if(rE(Fm(),b,1)&&rE(Fm(),d,-1))return d=(new vP).b(),(new Lb).bd(d,a.wa,a.ma);if(rE(Fm(),b,1)&&rE(Fm(),d,1))return d=(new wP).b(),(new Lb).bd(d,a.wa,a.ma)}}return Kb(this,
+a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({f5:0},!1,"org.nlogo.tortoise.compiler.Optimizer$PatchAtTransformer$",{f5:1,d:1,ff:1});var bs=void 0;function gs(){}gs.prototype=new l;gs.prototype.constructor=gs;c=gs.prototype;c.b=function(){return this};c.sf=function(a){var b=Ji(Li(),a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(Qq(d)&&(t(),b=(new H).i(b),null!==b.Q&&0===b.Q.vb(2)&&(b=b.Q.X(1),zb(b)&&b.pe.ng.z())))return d=(new xP).c(d.la),(new Jb).Cj(d,a.wa,a.ma)}return Ib(this,a)};
+c.Se=function(a){return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({g5:0},!1,"org.nlogo.tortoise.compiler.Optimizer$SproutFastTransformer$",{g5:1,d:1,ff:1});var fs=void 0;function us(){}us.prototype=new l;us.prototype.constructor=us;c=us.prototype;c.b=function(){return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(tt(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),yb(d)))){var e=Sh().ac(d);if(!e.z()&&(d=e.R().fb,VO(e.R().Oa))){var e=(new mP).b(),f=t(),b=d.yc(b,f.s);return(new Lb).bd(e,b,a.ma)}}}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({h5:0},!1,"org.nlogo.tortoise.compiler.Optimizer$WithOtherTransformer$",{h5:1,d:1,ff:1});var ts=void 0;function Xr(){this.a=this.PX=this.OX=0}
+Xr.prototype=new l;Xr.prototype.constructor=Xr;function Apa(a){var b=Sh().ac(a);if(!b.z()&&(b=b.R().Oa,Mn(b)))return!0;b=Sh().ac(a);if(!b.z()&&(b=b.R().Oa,yP(b)))return!0;a=Sh().ac(a);return!a.z()&&(a=a.R().Oa,Hq(a))?!0:!1}c=Xr.prototype;c.b=function(){Vr=this;var a=HE(zP(AP())),a=Jc(a),b=x().s,a=K(a,b);this.OX=BP(a,"PXCOR",0);this.a=(1|this.a)<<24>>24;a=HE(zP(AP()));a=Jc(a);b=x().s;a=K(a,b);this.PX=BP(a,"PYCOR",0);this.a=(2|this.a)<<24>>24;return this};c.sf=function(a){return Ib(this,a)};
+c.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().Oa,b=b.R().fb;if(tt(d)&&(t(),d=(new H).i(b),null!==d.Q&&0===d.Q.vb(2)&&(b=d.Q.X(0),d=d.Q.X(1),yb(b)&&(b=Sh().ac(b),!b.z()&&(b=b.R().Oa,CP(b)&&Ab(d)&&(d=Uh(Wh(),d),!d.z()&&(d=d.R().ja(),Ms||(Ms=(new Ks).b()),d=Ms.ac(d),!d.z()))))))){b=d.R().ja();d=d.R().na();b=b.be;if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 374");if(this.OX===b&&Apa(d))b=(new DP).b(),
+d=G(t(),(new J).j([d])),a=(new Lb).bd(b,d,a.ma);else{if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 375");this.PX===b&&Apa(d)?(b=(new EP).b(),d=G(t(),(new J).j([d])),a=(new Lb).bd(b,d,a.ma)):a=Kb(this,a)}return a}}return Kb(this,a)};c.ef=function(a){return Mb(this,a)};c.$classData=g({i5:0},!1,"org.nlogo.tortoise.compiler.Optimizer$WithTransformer$",{i5:1,d:1,ff:1});var Vr=void 0;
+function FP(){this.da=null}FP.prototype=new l;FP.prototype.constructor=FP;FP.prototype.dH=function(a){a=Naa(a,"get");if(a.z())return C();a=a.R();a:{if(null!==a){var b=a.ja(),d=a.na();if(null!==b&&null!==d){a=b+"("+hd(id(),d)+")";break a}}throw(new q).i(a);}return(new H).i(a)};FP.prototype.JE=function(a){if(null===a)throw pg(qg(),null);this.da=a;return this};FP.prototype.$classData=g({t5:0},!1,"org.nlogo.tortoise.compiler.PrimUtils$VariableReporter$",{t5:1,d:1,r5:1});function Iq(){this.da=null}
+Iq.prototype=new l;Iq.prototype.constructor=Iq;Iq.prototype.dH=function(a){a=Naa(a,"set");if(a.z())return C();a=a.R();a:{if(null!==a){var b=a.ja(),d=a.na();if(null!==b&&null!==d){a=m(new p,function(a,b,d){return function(a){return b+"("+hd(id(),d)+", "+a+");"}}(this,b,d));break a}}throw(new q).i(a);}return(new H).i(a)};Iq.prototype.JE=function(a){if(null===a)throw pg(qg(),null);this.da=a;return this};
+Iq.prototype.$classData=g({u5:0},!1,"org.nlogo.tortoise.compiler.PrimUtils$VariableSetter$",{u5:1,d:1,r5:1});function GP(a){var b=(new xu).c(a.Tw()),b=(new w).e("type",b),d;d=a.ki.Db;d=(new xu).c("rgba("+d.wr+", "+d.Kq+", "+d.zq+", "+d.uq/255+")");d=(new w).e("color",d);var e=(new yu).ud(a.ki.Il()),e=(new w).e("filled",e);a=(new yu).ud(a.ki.jc);a=[b,d,e,(new w).e("marked",a)];b=fc(new gc,Cu());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;return(new qu).bc(b.Va)}
+function HP(){this.Uz=this.Vz=this.Wz=this.Tz=this.Rz=this.Sz=this.dy=null;this.a=0}HP.prototype=new l;HP.prototype.constructor=HP;HP.prototype.b=function(){return this};function IP(){var a=mq();null===mq().dy&&null===mq().dy&&(mq().dy=(new JP).tk(a));return mq().dy}function Fp(){var a=mq();null===mq().Vz&&null===mq().Vz&&(mq().Vz=(new KP).tk(a));return mq().Vz}function LP(){var a=mq();null===mq().Sz&&null===mq().Sz&&(mq().Sz=(new MP).tk(a));return mq().Sz}
+function NP(){var a=mq();null===mq().Rz&&null===mq().Rz&&(mq().Rz=(new OP).tk(a));return mq().Rz}function Tea(){var a=mq();null===mq().Uz&&null===mq().Uz&&(mq().Uz=(new PP).tk(a));return mq().Uz}function QP(a,b,d,e){return e.Fc(d,b.eh.gc(d))}function lq(a){null===mq().Tz&&null===mq().Tz&&(mq().Tz=(new RP).tk(a));return mq().Tz}HP.prototype.$classData=g({o6:0},!1,"org.nlogo.tortoise.compiler.json.JsonReader$",{o6:1,d:1,Ema:1});var Bpa=void 0;function mq(){Bpa||(Bpa=(new HP).b());return Bpa}
+function SP(a,b){a=a.Yz().y(b);if(P(a))return(new Kp).i((new H).i(a.ga));if(Hp(a))return a;throw(new q).i(a);}function TP(a,b){b.z()?a=C():(b=b.R(),a=(new H).i(SP(a,b)));return a.z()?(fq(),a=C(),oq().y(a)):a.R()}function UP(){this.cy=this.ny=this.Iy=this.Lz=null;this.a=0}UP.prototype=new l;UP.prototype.constructor=UP;UP.prototype.b=function(){return this};function VP(){var a=WP();null===WP().cy&&null===WP().cy&&(WP().cy=(new XP).Xq(a));return WP().cy}
+function YP(){var a=WP();null===WP().ny&&null===WP().ny&&(WP().ny=(new ZP).Xq(a));return WP().ny}function $P(){var a=WP();null===WP().Lz&&null===WP().Lz&&(WP().Lz=(new aQ).Xq(a));return WP().Lz}function bQ(){var a=WP();null===WP().Iy&&null===WP().Iy&&(WP().Iy=(new cQ).Xq(a));return WP().Iy}UP.prototype.$classData=g({t6:0},!1,"org.nlogo.tortoise.compiler.json.JsonWriter$",{t6:1,d:1,Fma:1});var Cpa=void 0;function WP(){Cpa||(Cpa=(new UP).b());return Cpa}function dQ(){this.n_=this.gV=null}
+dQ.prototype=new l;dQ.prototype.constructor=dQ;function Tp(a,b){var d=new dQ;d.gV=a;d.n_=b;return d}dQ.prototype.rf=function(){return this.gV.zc(this.n_)};dQ.prototype.$classData=g({u6:0},!1,"org.nlogo.tortoise.compiler.json.JsonWriter$$anon$1",{u6:1,d:1,mm:1});function eQ(){this.r_=null;this.a=!1}eQ.prototype=new l;eQ.prototype.constructor=eQ;
+function Dpa(a){var b=new eQ,d=(new wu).Bj(a.lH()),d=(new w).e("x-offset",d),e=(new yu).ud(a.kF()),e=(new w).e("is-visible",e);a=a.QD();var f=m(new p,function(){return function(a){return(new wu).Bj(+a)}}(b)),h=t();a=(new zu).Ea(a.ya(f,h.s));d=[d,e,(new w).e("dash-pattern",a)];e=fc(new gc,Cu());a=0;for(f=d.length|0;a<f;)ic(e,d[a]),a=1+a|0;b.r_=(new qu).bc(e.Va);b.a=!0;return b}
+eQ.prototype.rf=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 36");return this.r_};eQ.prototype.$classData=g({K6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$$anon$1",{K6:1,d:1,mm:1});function GO(){this.L_=null}GO.prototype=new l;GO.prototype.constructor=GO;
+GO.prototype.rf=function(){var a=this.L_;if(Ut(a)){var b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new fQ).vg(this))}return gQ(a)}if(a&&a.$classData&&a.$classData.m.CA){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new hQ).vg(this))}return iQ(a)}if(a&&a.$classData&&a.$classData.m.EA){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new jQ).vg(this))}return kQ(a)}if(Wt(a)){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,
+(new lQ).vg(this))}return mQ(a)}if(a&&a.$classData&&a.$classData.m.GA){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new nQ).vg(this))}return oQ(a)}if(a&&a.$classData&&a.$classData.m.HA)return b=(new Be).b(),(b.Pa?b.tb:Epa(this,b)).dg(a);if(Ot(a)){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new pQ).vg(this))}return qQ(a)}if(Xt(a)){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new rQ).vg(this))}return sQ(a)}if(a&&a.$classData&&a.$classData.m.NA){b=
+(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new tQ).vg(this))}return uQ(a)}if(a&&a.$classData&&a.$classData.m.OA){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new vQ).vg(this))}return wQ(a)}if(!xQ(a))throw(new q).i(a);b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new yQ).vg(this))}return zQ(a)};function Epa(a,b){if(null===b)throw(new Ce).b();return b.Pa?b.tb:De(b,(new AQ).vg(a))}
+GO.prototype.$classData=g({v7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1",{v7:1,d:1,mm:1});function BQ(a,b){if(b.z())return C();b=b.R();b=(new H).i(b);return(new H).i(a.us(b))}function CQ(){this.oU=null}CQ.prototype=new l;CQ.prototype.constructor=CQ;CQ.prototype.b=function(){DQ=this;this.oU=Fpa(ba);return this};function Gpa(a,b){return!!b.Ib(!0,ub(new vb,function(){return function(a,b){return!!a&&!!b}}(a)))}
+function Hpa(a,b,d){d=m(new p,function(a,b){return function(d){d=Ipa(a,d,b);var e=m(new p,function(){return function(a){return null!==a}}(a)),r=aB();return d.kE(e,r).Kl(m(new p,function(a,b){return function(d){if(null!==d){var e=!!d.ja();d=d.na();return Hpa(a,Dt(Ne(),d),b).di(m(new p,function(a,b){return function(a){return b&&!!a}}(a,e)),aB())}throw(new q).i(d);}}(a,b)),aB())}}(a,d));var e=t();b=b.ya(d,e.s);d=Bz();e=t();return yla(d,b,e.s,aB()).di(m(new p,function(a){return function(b){return Gpa(a,
+b)}}(a)),aB())}
+function Jpa(a,b,d,e){for(var f=u(),h=Jm(f),h=la(Xa(qa),[h]),k=0,k=0,f=hv(f);f.ra();){var n=f.ka();h.n[k]=n;k=1+k|0}n=u();k=Jm(n);k=la(Xa(qa),[k]);f=f=0;for(n=hv(n);n.ra();){var r=n.ka();k.n[f]=r;f=1+f|0}h=Kpa(b,h,a.oU);d=Lpa(h,d.Ce((new An).Mg(pa(Mpa))));return Hpa(a,Dt(Ne(),d),e).di(m(new p,function(a,b,d,e){return function(a){a=!!a;var b=e.ly(),f=(new Tb).c(b);nd(f)&&(f=d.io,b=Jv((new Kv).Ea((new J).j([""," reported ",""])),(new J).j(["utest",b])),Dv(f.Ug,b,Cv(a)));return a}}(a,b,e,h)),aB())}
+function Npa(a){for(var b=(new Tb).c(ba.document.location.search),d=Opa(b),e=!1,b=null,d=gE(Ia(),d,"\x26"),f=null,f=[],h=0,k=d.n.length;h<k;){var n=ba.decodeURIComponent(d.n[h]);f.push(null===n?null:n);h=1+h|0}d=ka(Xa(qa),f);f=x().s.Tg();h=d.n.length;switch(h){case -1:break;default:f.oc(h)}f.Xb((new ci).$h(d));d=f.Ba();a:{if(di(d)&&(e=!0,b=d,d=b.Ka,"i"===b.Eb&&di(d))){b=d.Eb;e=d.Ka;d=Yk();d=Zk(d);e=K(e,d);e=m(new p,function(a,b){return function(a){return b.ab(a.Ok)}}(a,e));b=(new Tb).c(b);d=ei();
+d=(new H).i(gi(d,b.U,10));b=e;e=d;break a}if(e&&(e=b.Ka,"e"===b.Eb)){b=Yk();b=Zk(b);b=K(e,b);b=m(new p,function(a,b){return function(a){return!b.ab(a.Ok)}}(a,b));e=C();break a}b=m(new p,function(){return function(){return!0}}(a));e=C()}d=e;f=Aha();e=m(new p,function(){return function(a){return a.na().Da()}}(a));h=t();e=f.ya(e,h.s).og(Iv())|0;h=m(new p,function(a,b){return function(a){return a.na().vf(b)}}(a,b));k=t();h=f.zj(h,k.s);e=vha(h,e);(d.z()?0:(d.R()|0)!==Ppa(a,h))&&rha(e);d=f.Fo(m(new p,function(){return function(a){return null!==
+a}}(a)));b=m(new p,function(a,b,d){return function(e){if(null!==e)return Jpa(a,e.ja(),e.na().Jl(b,!1),d);throw(new q).i(e);}}(a,b,e));f=t();b=d.ya(b,f.s);d=Bz();f=t();yla(d,b,f.s,aB()).di(m(new p,function(a){return function(b){return Gpa(a,b)}}(a)),aB()).Mp(m(new p,function(a,b){return function(a){b.WD(a)}}(a,e)),aB())}function Ppa(a,b){V();a=m(new p,function(){return function(a){return a.Ok}}(a));var d=t();return fC(0,b.ya(a,d.s).md())}
+function Ipa(a,b,d){d=tha(d,b.Iw.Ok);var e=(new EQ).b(),f=(new FQ).b();b=Az(Bz(),I(function(a,b,d,e,f){return function(){for(var E=(new J).j([d.Ry]),Q=E.qa.length|0,Q=la(Xa(Qaa),[Q]),R=0,R=0,E=Ye(new Ze,E,0,E.qa.length|0);E.ra();){var da=E.ka();Q.n[R]=da;R=1+R|0}Qpa(b,e,Q,m(new p,function(a,b){return function(a){a=(new Gz).i(a);ke(b,a)}}(a,f)))}}(a,b,d,e,f)),(new PD).b()).Kl(m(new p,function(a,b,d){return function(){return d.di(m(new p,function(a,b){return function(a){return(new w).e(!b.kx,a)}}(a,
+b)),aB())}}(a,e,f)),aB());b.di(m(new p,function(){return function(a){return!!a.ja()}}(a)),aB()).Mp(m(new p,function(a,b){return function(a){b.WD(a)}}(a,d)),aB());return b.At((new GQ).b(),aB())}CQ.prototype.main=function(){Npa(this)};CQ.prototype.$classData=g({k8:0},!1,"org.scalajs.testinterface.HTMLRunner$",{k8:1,d:1,$sa:1});var DQ=void 0;function EQ(){this.kx=!1}EQ.prototype=new l;EQ.prototype.constructor=EQ;EQ.prototype.b=function(){this.kx=!1;return this};
+EQ.prototype.BV=function(a){a=a.NG;this.kx=this.kx?!0:Av().tX.ab(a);Av().Hu.Co(a,1+(Av().Hu.y(a)|0)|0)};EQ.prototype.$classData=g({n8:0},!1,"org.scalajs.testinterface.HTMLRunner$EventCounter$Handler",{n8:1,d:1,n9:1});function HQ(){this.da=this.vX=this.sr=null}HQ.prototype=new l;HQ.prototype.constructor=HQ;HQ.prototype.uw=function(a){this.sr.uw(a)};
+function wha(a){var b=new HQ;if(null===a)throw pg(qg(),null);b.da=a;var d=a.LF.Da();b.sr=(new Pv).mv(a,Jv((new Kv).Ea((new J).j(["Excluded Test Suites (",")"])),(new J).j([d])));b.vX=uha(a,a.Wv,b.sr.ui);b.sr.ui.checked=!1;b.sr.ui.onclick=sha(a,a.Wv,b.sr.ui);a.LF.ta(m(new p,function(a){return function(b){return a.da.Wv.Yj(Rpa(a,b.Ok))}}(b)));return b}HQ.prototype.$classData=g({p8:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$ExcludedTestBox",{p8:1,d:1,mS:1});
+function IQ(){this.da=this.ui=this.CF=this.Qt=null}IQ.prototype=new l;IQ.prototype.constructor=IQ;IQ.prototype.lV=function(){return!1};IQ.prototype.YZ=function(a){this.ui.checked=a};IQ.prototype.Fz=function(){return!!this.ui.checked};function Rpa(a,b){var d=new IQ;d.Qt=b;if(null===a)throw pg(qg(),null);d.da=a;d.CF=Dv(a.sr,"","info");d.ui=xha(Fv(),d.CF,!1);d.ui.onclick=a.vX;Ev(Fv(),d.CF," "+b);return d}
+IQ.prototype.$classData=g({q8:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$ExcludedTestBox$ExcludedTest",{q8:1,d:1,u8:1});function Ov(){this.da=this.A_=this.OD=this.Ug=null}Ov.prototype=new l;Ov.prototype.constructor=Ov;Ov.prototype.uw=function(a){this.Ug.uw(a)};
+function Spa(a,b){var d=a.da.Xv,e=a.da.Wv,f=Fc().s,d=Gt(d,e,f).$i(b);if(null===d)throw(new q).i(d);b=d.ja();d=d.na();b.Da()<d.Da()?(V(),e=m(new p,function(){return function(a){return a.Qt}}(a)),f=Fc().s,d=""+fC(0,kr(d,e,f).md()),d=G(t(),(new J).j(["i",d])),e=m(new p,function(){return function(a){return a.Qt}}(a)),f=Fc().s,b=kr(b,e,f),e=t(),b=d.$c(b,e.s)):(b=m(new p,function(){return function(a){return a.Qt}}(a)),e=Fc().s,b=kr(d,b,e),d=Fc(),b=b.Tc("e",d.s));a=m(new p,function(){return function(a){return ba.encodeURIComponent(a)}}(a));
+d=t();return b.ya(a,d.s).Qc("?","\x26","")}Ov.prototype.my=function(a){this.Ug.my(a);this.OD.className="log "+Cv(a);var b=Dv(this.Ug,"Next: ",Cv(a));a||(Gv(Fv(),b,Spa(this,m(new p,function(){return function(a){return a.lV()}}(this))),"Run failed"),Ev(Fv(),b," | "));Gv(Fv(),b,"#","Run selected").onclick=function(a){return function(){return Tpa(a)}}(this);Ev(Fv(),b," | ");Gv(Fv(),b,"?","Run all")};
+function Tpa(a){ba.document.location.search=Spa(a,m(new p,function(){return function(a){return a.Fz()}}(a)));return!1}Ov.prototype.$classData=g({r8:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$RootBox",{r8:1,d:1,mS:1});function JQ(){this.da=null}JQ.prototype=new l;JQ.prototype.constructor=JQ;JQ.prototype.eE=function(a){Dv(this.da.Wl,a,"error");Qv(this.da.Wl)};JQ.prototype.$G=function(a){this.eE(a.l())};JQ.prototype.zE=function(a){Dv(this.da.Wl,a,"info")};
+JQ.prototype.$classData=g({t8:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$RunningTest$$anon$1",{t8:1,d:1,JC:1});function Pv(){this.Gg=this.ui=this.uE=this.hE=this.at=this.Ug=null;this.Qs=!1;this.da=null}Pv.prototype=new l;Pv.prototype.constructor=Pv;Pv.prototype.uw=function(a){this.Ug.insertAdjacentElement("afterend",a.Ug)};function Upa(a){a.Qs=!a.Qs;a.hE.textContent=a.Qs?"[-]":"[+]";a.Gg.style.display=a.Qs?"block":"none"}function Qv(a){a.Qs||Upa(a)}
+Pv.prototype.my=function(a){this.at.className=this.at.className+" "+Cv(a);this.uE.textContent+=a?" - Passed":" - Failed"};
+Pv.prototype.mv=function(a,b){if(null===a)throw pg(qg(),null);this.da=a;a=a.uX;a=this.Ug=Nv(Fv(),a,"test-box","","div");this.at=Nv(Fv(),a,"test-box-header","","div");this.hE=Gv(Fv(),this.at,"#","[+]");this.hE.onclick=function(a){return function(){Upa(a);return!1}}(this);this.uE=Ev(Fv(),this.at," "+b);this.ui=xha(Fv(),this.at,!0);b=this.Ug;this.Gg=Nv(Fv(),b,"test-box-body","","div");this.Qs=!1;return this};
+function Dv(a,b,d){return Nv(Fv(),a.Gg,Jv((new Kv).Ea((new J).j(["log ",""])),(new J).j([d])),b,"pre")}Pv.prototype.$classData=g({v8:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$TestBox",{v8:1,d:1,mS:1});function KQ(){this.cX=null}KQ.prototype=new mka;KQ.prototype.constructor=KQ;function Fpa(a){var b=new KQ;b.cX=a;return b}KQ.prototype.$classData=g({nS:0},!1,"org.scalajs.testinterface.ScalaJSClassLoader",{nS:1,Fra:1,d:1});function LQ(){this.Ak=this.bv=null}LQ.prototype=new Iha;
+LQ.prototype.constructor=LQ;c=LQ.prototype;c.Ny=function(a){return ba.JSON.parse(se(a))};
+c.AV=function(a,b){if("newRunner"===a){var d;a:{var e=this.Ny(b),f=e.args,h=f.length|0,h=la(Xa(qa),[h]);a=h.n.length;var k=0,n=0;b=f.length|0;a=b<a?b:a;b=h.n.length;for(a=a<b?a:b;k<a;)h.n[n]=f[k],k=1+k|0,n=1+n|0;e=e.remoteArgs;f=e.length|0;f=la(Xa(qa),[f]);a=f.n.length;n=k=0;b=e.length|0;a=b<a?b:a;b=f.n.length;for(a=a<b?a:b;k<a;)f.n[n]=e[k],k=1+k|0,n=1+n|0;e=Fpa(aa.exportsNamespace);try{this.Ak=Kpa(this.bv,h,e),d=(new Gz).i(void 0)}catch(y){d=qn(qg(),y);if(null!==d){h=jw(kw(),d);if(!h.z()){d=h.R();
+d=(new Fz).Dd(d);break a}throw pg(qg(),d);}throw y;}}bw(d)}else if("runnerDone"===a){this.Dq();try{var r=(new Gz).i(this.Ak.ly())}catch(y){if(d=qn(qg(),y),null!==d){h=jw(kw(),d);if(h.z())throw pg(qg(),d);d=h.R();r=(new Fz).Dd(d)}else throw y;}this.Ak=null;bw(r)}else if("tasks"===a){a:{f=this.Ny(b);this.Dq();d=[];k=0;for(n=f.length|0;k<n;)a=f[k],a=Cha(Zv(),a),d.push(a),k=1+k|0;f=d.length|0;f=la(Xa(Mpa),[f]);a=f.n.length;n=k=0;b=d.length|0;a=b<a?b:a;b=f.n.length;for(a=a<b?a:b;k<a;)f.n[n]=d[k],k=1+k|
+0,n=1+n|0;try{e=Lpa(this.Ak,f),h=(new Gz).i(ba.JSON.stringify(Nha(e)))}catch(y){d=qn(qg(),y);if(null!==d){h=jw(kw(),d);if(!h.z()){d=h.R();h=(new Fz).Dd(d);break a}throw pg(qg(),d);}throw y;}}bw(h)}else if("msg"===a){a:{d=se(b);this.Dq();try{k=this.Ak.RF(d),n=k.z()?":n":":s:"+k.R(),f=(new Gz).i(n)}catch(y){d=qn(qg(),y);if(null!==d){h=jw(kw(),d);if(!h.z()){d=h.R();f=(new Fz).Dd(d);break a}throw pg(qg(),d);}throw y;}}bw(f)}else throw(new Re).c(Jv((new Kv).Ea((new J).j(["Unknown command: ",""])),(new J).j([a])));
+};c.Dq=function(){if(null===this.Ak)throw(new me).c("No runner created");};c.c=function(a){aw.prototype.c.call(this,a);return this};c.$classData=g({J8:0},!1,"org.scalajs.testinterface.internal.Master",{J8:1,B8:1,d:1});function MQ(){this.VX=this.gU=this.bv=null;this.zu=!1;this.Ak=this.Vy=null}MQ.prototype=new Iha;MQ.prototype.constructor=MQ;c=MQ.prototype;c.Ny=function(a){return ba.JSON.parse(se(a))};
+c.AV=function(a,b){try{for(this.zu=!0;!this.Vy.z();){var d=this.Vy;if(d.z())throw(new Bu).c("queue empty");var e=d.sg.xj;d.sg=d.sg.Ei;var f=d;f.Di=-1+f.Di|0;0===f.Di&&(f.wk=f.sg);Vpa(this,e)}if("newRunner"===a)bw(Wpa(this));else if("execute"===a)Xpa(this,this.Ny(b));else if("stopSlave"===a){this.Dq();try{var h=(new Gz).i((this.Ak.ly(),void 0))}catch(ma){var k=qn(qg(),ma);if(null!==k){var n=jw(kw(),k);if(n.z())throw pg(qg(),k);var r=n.R(),h=(new Fz).Dd(r)}else throw ma;}this.Ak=null;bw(h)}else if("msg"===
+a){var y;a:{var E=se(b);this.Dq();try{y=(new Gz).i((this.Ak.RF(E),void 0))}catch(ma){var Q=qn(qg(),ma);if(null!==Q){var R=jw(kw(),Q);if(!R.z()){var da=R.R();y=(new Fz).Dd(da);break a}throw pg(qg(),Q);}throw ma;}}y.gF()&&bw(y)}else throw(new Re).c(Jv((new Kv).Ea((new J).j(["Unknown command: ",""])),(new J).j([a])));}finally{this.zu=!1}};function Vpa(a,b){bn(Ne(),a.zu);ba.scalajsCom.send(Jv((new Kv).Ea((new J).j(["msg:",""])),(new J).j([b])))}
+function Wpa(a){var b=Fpa(aa.exportsNamespace);try{for(var d=a.bv,e=a.gU,f=e.length|0,h=la(Xa(qa),[f]),k=h.n.length,n=f=0,r=e.length|0,k=r<k?r:k,y=h.n.length,y=k<y?k:y;f<y;)h.n[n]=e[f],f=1+f|0,n=1+n|0;for(var E=a.VX,Q=E.length|0,R=la(Xa(qa),[Q]),da=R.n.length,Q=e=0,ma=E.length|0,da=ma<da?ma:da,ra=R.n.length,ra=da<ra?da:ra;e<ra;)R.n[Q]=E[e],e=1+e|0,Q=1+Q|0;a.Ak=Ypa(d,h,b,m(new p,function(a){return function(b){if(a.zu)Vpa(a,b);else{var d=a.Vy;b=[b];for(var e=0,f=b.length|0;e<f;)Zpa(d,b[e]),e=1+e|0}}}(a)));
+return(new Gz).i(void 0)}catch(Ca){a=qn(qg(),Ca);if(null!==a){b=jw(kw(),a);if(!b.z())return a=b.R(),(new Fz).Dd(a);throw pg(qg(),a);}throw Ca;}}c.Dq=function(){if(null===this.Ak)throw(new me).c("No runner created");};c.sda=function(a,b,d){this.gU=b;this.VX=d;aw.prototype.c.call(this,a);this.zu=!1;this.Vy=$pa().db().Ba();return this};
+function Xpa(a,b){a.Dq();var d=b.serializedTask,d=aqa(a.Ak,Cha(Zv(),ba.JSON.parse(d))),e=(new NQ).Ey(a);b=b.loggerColorSupport;for(var f=[],h=b.length|0,k=0;k<h;){var n=(new w).e(b[k],k);f.push(n);k=1+k|0}b=Zb(new $b,(new Uv).j(f),m(new p,function(){return function(a){return null!==a}}(a)));f=m(new p,function(a){return function(b){if(null!==b){var d=new OQ;d.lf=b.Gc();xw.prototype.Ey.call(d,a);return d}throw(new q).i(b);}}(a));h=(new Uv).b();b.da.ta(m(new p,function(a,b,d){return function(e){return a.Yl.y(e)?
+d.Ma(b.y(e)):void 0}}(b,f,h)));b=h.bf;try{for(var r=b.length|0,y=la(Xa(Qaa),[r]),E=y.n.length,f=r=0,Q=b.length|0,E=Q<E?Q:E,R=y.n.length,R=E<R?E:R;r<R;)y.n[f]=b[r],r=1+r|0,f=1+f|0;Qpa(d,e,y,m(new p,function(a,b,d){return function(a){try{var e=(new Gz).i(ba.JSON.stringify(Nha(a)))}catch(f){if(e=qn(qg(),f),null!==e){a=jw(kw(),e);if(a.z())throw pg(qg(),e);e=a.R();e=(new Fz).Dd(e)}else throw f;}b.dA=!1;a=0;for(var h=d.length|0;a<h;)d[a].dA=!1,a=1+a|0;bw(e)}}(a,e,b)));var da=(new Gz).i(void 0)}catch(ma){if(a=
+qn(qg(),ma),null!==a){y=jw(kw(),a);if(y.z())throw pg(qg(),a);a=y.R();da=(new Fz).Dd(a)}else throw ma;}da.gF()&&bw(da)}c.$classData=g({L8:0},!1,"org.scalajs.testinterface.internal.Slave",{L8:1,B8:1,d:1});
+function bqa(a){PQ();a.lda=(new QQ).Kn(m(new p,function(){return function(a){if(Xw(a)){a=a.W;var d=cqa();try{var e,f=rc();0===(1&f.xa)<<24>>24&&0===(1&f.xa)<<24>>24&&(f.uH=Mw(),f.xa=(1|f.xa)<<24>>24);e=f.uH;var h=(new RQ).c(a),k=(new H).i(SQ(new TQ,UQ(new VQ,h,e.lk)))}catch(r){var n=qn(qg(),r);if(null!==n){if(d.pz.y(n))throw pg(qg(),n);if(d.Zl.Za(n))k=d.Zl.y(n);else throw pg(qg(),n);}else throw r;}finally{e=d.wy,e.z()||e.R().Ada()}return k.z()?Iw(Fw(),Gw(Hw(),"error.expected.numberformatexception")):
+k.R()}return Yw(a)?(k=a.W,e=Mw(),SQ(new TQ,UQ(new VQ,k.Hc,e.lk))):Iw(Fw(),Gw(Hw(),"error.expected.jsnumberorjsstring"))}}(a)));PQ();a.Bda=(new QQ).Kn(m(new p,function(){return function(a){if(Xw(a)){a=a.W;var d=cqa();try{var e=(new H).i(SQ(new TQ,(new RQ).c(a)))}catch(h){var f=qn(qg(),h);if(null!==f){if(d.pz.y(f))throw pg(qg(),f);if(d.Zl.Za(f))e=d.Zl.y(f);else throw pg(qg(),f);}else throw h;}finally{f=d.wy,f.z()||f.R().Ada()}return e.z()?Iw(Fw(),Gw(Hw(),"error.expected.numberformatexception")):e.R()}return Yw(a)?
+SQ(new TQ,a.W.Hc):Iw(Fw(),Gw(Hw(),"error.expected.jsnumberorjsstring"))}}(a)));a.Pla=dqa(a)}function WQ(){}WQ.prototype=new l;WQ.prototype.constructor=WQ;WQ.prototype.Yq=function(){return this};WQ.prototype.il=function(a){if(a&&a.$classData&&a.$classData.m.DC)return a=!!(new H).i(a.W).Q,SQ(new TQ,a);a=t();var b=XQ(),d=G(t(),(new J).j([Gw(Hw(),"error.expected.jsboolean")]));return(new YQ).Ea(G(a,(new J).j([(new w).e(b,d)])))};
+WQ.prototype.$classData=g({S8:0},!1,"play.api.libs.json.DefaultReads$BooleanReads$",{S8:1,d:1,du:1});function ZQ(){}ZQ.prototype=new l;ZQ.prototype.constructor=ZQ;ZQ.prototype.Yq=function(){return this};ZQ.prototype.il=function(a){var b=!1;return Yw(a)&&(b=!0,a=a.W,a.Ev())?SQ(new TQ,a.Hc.Ti()):b?eqa("error.expected.int"):eqa("error.expected.jsnumber")};ZQ.prototype.$classData=g({T8:0},!1,"play.api.libs.json.DefaultReads$IntReads$",{T8:1,d:1,du:1});function $Q(){}$Q.prototype=new l;
+$Q.prototype.constructor=$Q;$Q.prototype.Yq=function(){return this};$Q.prototype.il=function(a){if(via(a))return SQ(new TQ,a);a=t();var b=XQ(),d=G(t(),(new J).j([Gw(Hw(),"error.expected.jsarray")]));return(new YQ).Ea(G(a,(new J).j([(new w).e(b,d)])))};$Q.prototype.$classData=g({U8:0},!1,"play.api.libs.json.DefaultReads$JsArrayReads$",{U8:1,d:1,du:1});function aR(){}aR.prototype=new l;aR.prototype.constructor=aR;aR.prototype.Yq=function(){return this};
+aR.prototype.il=function(a){if(Xw(a))return SQ(new TQ,a.W);a=t();var b=XQ(),d=G(t(),(new J).j([Gw(Hw(),"error.expected.jsstring")]));return(new YQ).Ea(G(a,(new J).j([(new w).e(b,d)])))};aR.prototype.$classData=g({V8:0},!1,"play.api.libs.json.DefaultReads$StringReads$",{V8:1,d:1,du:1});function bR(){this.mU=!1;this.da=null}bR.prototype=new l;bR.prototype.constructor=bR;
+bR.prototype.il=function(a){if(Xw(a)){a=a.W;try{var b=(new Gz).i(fqa(gqa(),a))}catch(e){if(b=qn(qg(),e),null!==b){var d=jw(kw(),b);if(d.z())throw pg(qg(),b);b=d.R();b=(new Fz).Dd(b)}else throw e;}b=b.Ow();this.mU?(b.z()?a=!0:(d=b.R(),a=null!==d&&a===d.l()),a=a?b:C()):a=b;a.z()?a=C():(a=a.R(),a=(new H).i(SQ(new TQ,a)));return a.z()?(a=t(),b=XQ(),d=G(t(),(new J).j([Gw(Hw(),"error.expected.uuid")])),(new YQ).Ea(G(a,(new J).j([(new w).e(b,d)])))):a.R()}a=t();b=XQ();d=G(t(),(new J).j([Gw(Hw(),"error.expected.uuid")]));
+return(new YQ).Ea(G(a,(new J).j([(new w).e(b,d)])))};function dqa(a){var b=new bR;b.mU=!1;if(null===a)throw pg(qg(),null);b.da=a;return b}bR.prototype.$classData=g({W8:0},!1,"play.api.libs.json.DefaultReads$UUIDReader",{W8:1,d:1,du:1});function QQ(){this.yj=null}QQ.prototype=new l;QQ.prototype.constructor=QQ;QQ.prototype.il=function(a){return this.yj.y(a)};QQ.prototype.Kn=function(a){this.yj=a;return this};QQ.prototype.$classData=g({i9:0},!1,"play.api.libs.json.Reads$$anon$8",{i9:1,d:1,du:1});
+function cR(){}cR.prototype=new l;cR.prototype.constructor=cR;cR.prototype.b=function(){return this};cR.prototype.$classData=g({j9:0},!1,"play.api.libs.json.Reads$JsArrayMonoid$",{j9:1,d:1,R8:1});var hqa=void 0;function dR(){}dR.prototype=new l;dR.prototype.constructor=dR;dR.prototype.b=function(){return this};dR.prototype.$classData=g({k9:0},!1,"play.api.libs.json.Reads$JsObjectMonoid$",{k9:1,d:1,R8:1});var iqa=void 0;function zw(){this.hq=this.Ok=null;this.es=!1;this.fs=null}zw.prototype=new l;
+zw.prototype.constructor=zw;zw.prototype.o=function(a){return a&&a.$classData&&a.$classData.m.yS?this.Ok===a.Ok&&this.hq===a.hq&&this.es===a.es?tka(fA(),this.fs,a.fs):!1:!1};zw.prototype.l=function(){var a=this.Ok,b=this.hq,d=this.es,e=this.fs,f=(new Bl).b(),h;h=!0;zr(f,"[");for(var k=0,n=e.n.length;k<n;){var r=e.n[k];h?(Ar(f,r),h=!1):(zr(f,", "),Ar(f,r));k=1+k|0}zr(f,"]");return"TaskDef("+a+", "+b+", "+d+", "+f.Bb.Yb+")"};
+zw.prototype.r=function(){var a;a=this.Ok;a=ea(31,17)+Ha(Ia(),a)|0;var b=this.hq;a=ea(31,a)+Ka(b)|0;a=ea(31,a)+(this.es?1:0)|0;a=ea(31,a);var b=fA(),d=this.fs,b=uka(b);if(null===d)b=0;else{var d=iw(Ne(),d),e=d.sa(),f=0,h=1;b:for(;;){if(f!==e){var k=1+f|0,f=d.X(f),h=ea(31,h|0)+(null===f?0:b.y(f)|0)|0,f=k;continue b}break}b=h|0}return a+b|0};var Mpa=g({yS:0},!1,"sbt.testing.TaskDef",{yS:1,d:1,h:1});zw.prototype.$classData=Mpa;function eR(a){a.Yp(jqa(a))}function fR(){this.da=null}fR.prototype=new l;
+fR.prototype.constructor=fR;function kqa(a){var b=new fR;if(null===a)throw pg(qg(),null);b.da=a;return b}fR.prototype.$classData=g({G9:0},!1,"scalaz.Associative$$anon$2",{G9:1,d:1,rpa:1});function gR(){this.da=null}gR.prototype=new l;gR.prototype.constructor=gR;function Raa(a){var b=new gR;if(null===a)throw pg(qg(),null);b.da=a;return b}gR.prototype.$classData=g({J9:0},!1,"scalaz.Bifoldable$$anon$8",{J9:1,d:1,wca:1});function hR(){this.da=null}hR.prototype=new l;hR.prototype.constructor=hR;
+function xia(a){var b=new hR;if(null===a)throw pg(qg(),null);b.da=a;return b}hR.prototype.$classData=g({K9:0},!1,"scalaz.Bifunctor$$anon$8",{K9:1,d:1,xca:1});function iR(a){a.$m(lqa(a))}function jR(){this.da=null}jR.prototype=new l;jR.prototype.constructor=jR;function Saa(a){var b=new jR;if(null===a)throw pg(qg(),null);b.da=a;return b}jR.prototype.$classData=g({T9:0},!1,"scalaz.Compose$$anon$5",{T9:1,d:1,Ix:1});function kR(){}kR.prototype=new l;kR.prototype.constructor=kR;c=kR.prototype;
+c.b=function(){Nd(this);return this};c.$d=function(a){return a};c.rh=function(a){return a.l()};c.nh=function(){};c.$classData=g({X9:0},!1,"scalaz.Cord$$anon$2",{X9:1,d:1,xh:1});function lR(){}lR.prototype=new l;lR.prototype.constructor=lR;lR.prototype.b=function(){Dd(this);return this};lR.prototype.jg=function(){};lR.prototype.$classData=g({Y9:0},!1,"scalaz.Cord$$anon$3",{Y9:1,d:1,qg:1});function mR(){this.da=null}mR.prototype=new l;mR.prototype.constructor=mR;
+function nR(a){var b=new mR;if(null===a)throw pg(qg(),null);b.da=a;return b}mR.prototype.$classData=g({Z9:0},!1,"scalaz.Cozip$$anon$2",{Z9:1,d:1,xpa:1});function oR(){}oR.prototype=new zia;oR.prototype.constructor=oR;function mqa(){}mqa.prototype=oR.prototype;function lx(){}lx.prototype=new l;lx.prototype.constructor=lx;lx.prototype.fG=function(){};lx.prototype.LE=function(){this.fG(kqa(this));return this};lx.prototype.$classData=g({a$:0},!1,"scalaz.DisjunctionInstances2$$anon$8",{a$:1,d:1,F9:1});
+function pR(){}pR.prototype=new Aia;pR.prototype.constructor=pR;function nqa(){}nqa.prototype=pR.prototype;function qR(){}qR.prototype=new Cia;qR.prototype.constructor=qR;function oqa(){}oqa.prototype=qR.prototype;function rR(a){a.gi(pqa(a))}function sR(){this.da=null}sR.prototype=new l;sR.prototype.constructor=sR;function Taa(a){var b=new sR;if(null===a)throw pg(qg(),null);b.da=a;return b}sR.prototype.$classData=g({j$:0},!1,"scalaz.Equal$$anon$5",{j$:1,d:1,$S:1});function tR(){}tR.prototype=new Qia;
+tR.prototype.constructor=tR;function Gx(a,b,d,e,f){var h=f.cf(f.cf(f.jm(b),d),e);return qqa(new uR,h,I(function(a,b){return function(){return b}}(a,b)),I(function(a,b){return function(){return b}}(a,d)),I(function(a,b){return function(){return b}}(a,e)),f)}tR.prototype.b=function(){return this};function Oia(a,b,d,e){return rqa(new vR,e.cf(e.jm(b),d),b,d,e)}
+function Dx(a,b,d,e){var f=e.cf(e.jm(b),d);return sqa(new wR,f,I(function(a,b){return function(){return b}}(a,b)),I(function(a,b){return function(){return b}}(a,d)),e)}function Sx(a,b,d){a=new xR;var e=d.jm(b);a.Cf=e;a.Aa=b;a.fh=d;a.Zi=e;return a}function tqa(a,b,d){var e=d.jm(b);return Nia(new Rx,e,I(function(a,b){return function(){return b}}(a,b)),d)}tR.prototype.$classData=g({k$:0},!1,"scalaz.FingerTree$",{k$:1,gna:1,d:1});var uqa=void 0;function Ex(){uqa||(uqa=(new tR).b());return uqa}
+function wR(){this.WT=this.UT=this.D_=this.Zi=null}wR.prototype=new vja;wR.prototype.constructor=wR;wR.prototype.oE=function(a){var b=this.D_,d=this.UT,e=this.WT;return(0,a.Qi)(b,d,e)};function sqa(a,b,d,e,f){a.D_=b;a.UT=d;a.WT=e;Fy.prototype.Dj.call(a,f);a.Zi=b;return a}wR.prototype.$classData=g({l$:0},!1,"scalaz.FingerTree$$anon$11",{l$:1,$$:1,d:1});function uR(){this.YT=this.XT=this.VT=this.E_=this.Zi=null}uR.prototype=new vja;uR.prototype.constructor=uR;
+uR.prototype.oE=function(a,b){return Sc(b,this.E_,this.VT,this.XT,this.YT)};function qqa(a,b,d,e,f,h){a.E_=b;a.VT=d;a.XT=e;a.YT=f;Fy.prototype.Dj.call(a,h);a.Zi=b;return a}uR.prototype.$classData=g({m$:0},!1,"scalaz.FingerTree$$anon$12",{m$:1,$$:1,d:1});function Ld(){this.$W=this.ea=null}Ld.prototype=new tx;Ld.prototype.constructor=Ld;Ld.prototype.Dj=function(a){this.$W=a;sx.prototype.Dj.call(this,a);return this};Ld.prototype.Yh=function(a){return a.y(this.$W.Tl().Ee())};
+Ld.prototype.$classData=g({n$:0},!1,"scalaz.FingerTree$$anon$17",{n$:1,HS:1,d:1});function Rx(){this.TT=this.B_=this.ea=null}Rx.prototype=new tx;Rx.prototype.constructor=Rx;Rx.prototype.Yh=function(a,b){return sb(b,this.B_,se(this.TT))};function Nia(a,b,d,e){a.B_=b;a.TT=d;sx.prototype.Dj.call(a,e);return a}Rx.prototype.$classData=g({o$:0},!1,"scalaz.FingerTree$$anon$18",{o$:1,HS:1,d:1});function Ax(){this.ZZ=this.HX=this.C_=this.aX=this.ea=null}Ax.prototype=new tx;Ax.prototype.constructor=Ax;
+function zx(a,b,d,e,f,h){a.C_=b;a.HX=d;a.ZZ=f;sx.prototype.Dj.call(a,h);Mia(Ex(),h);a.aX=(ux(),(new vx).nc(e));return a}Ax.prototype.Yh=function(a,b,d){return Sc(d,this.C_,this.HX,I(function(a){return function(){return U(a.aX)}}(this)),this.ZZ)};Ax.prototype.$classData=g({p$:0},!1,"scalaz.FingerTree$$anon$19",{p$:1,HS:1,d:1});function Nx(){this.is=this.Rx=this.oA=null}Nx.prototype=new l;Nx.prototype.constructor=Nx;Nx.prototype.$d=function(a){return vqa(this,a)};Nx.prototype.rh=function(a){return this.$d(a).l()};
+Nx.prototype.nh=function(){};
+function vqa(a,b){return b.Yh(m(new p,function(a){return function(b){var f=Id();b=[a.Rx.$d(b),Jd(Id()," []")];var h=b.length|0,k=0,n=Kd((new Ld).Dj(f.Mr));a:for(;;){if(k!==h){f=1+k|0;n=Md(n,b[k]);k=f;continue a}return n}}}(a)),ub(new vb,function(a){return function(b,f){var h=Id();b=[a.Rx.$d(b),Jd(Id()," ["),a.is.$d(f),Jd(Id(),"]")];f=b.length|0;var k=0,n=Kd((new Ld).Dj(h.Mr));a:for(;;){if(k!==f){h=1+k|0;n=Md(n,b[k]);k=h;continue a}return n}}}(a)),xx(function(a){return function(b,f,h,k){h=Id();b=[a.Rx.$d(b),
+Jd(Id()," ["),a.oA.$d(f.wb()),Jd(Id(),", ?, "),a.oA.$d(k.wb()),Jd(Id(),"]")];f=b.length|0;k=0;var n=Kd((new Ld).Dj(h.Mr));a:for(;;){if(k!==f){h=1+k|0;n=Md(n,b[k]);k=h;continue a}return n}}}(a)))}Nx.prototype.$classData=g({q$:0},!1,"scalaz.FingerTreeInstances$$anon$9",{q$:1,d:1,xh:1});function yR(){this.da=null}yR.prototype=new l;yR.prototype.constructor=yR;function Sia(a){var b=new yR;if(null===a)throw pg(qg(),null);b.da=a;return b}
+yR.prototype.$classData=g({r$:0},!1,"scalaz.Foldable$$anon$6",{r$:1,d:1,bD:1});function wqa(a,b,d,e){var f=(new zR).b();b.ta(m(new p,function(a,b){return function(a){xqa(b,a)}}(a,f)));for(b=e.Ee();!f.z();){var h=b;b=yqa(f);h=I(function(a,b){return function(){return b}}(a,h));b=e.sc(d.y(b),h)}return b}
+function zqa(a,b,d,e){a=a.Ri(b,(Ru(),C()),ub(new vb,function(a,b,d){return function(a,e){a=(new w).e(a,e);e=a.ub;var f=a.Fb;if(C()===e)return Ru(),a=b.y(f),(new H).i(a);f=a.ub;e=a.Fb;if(Xj(f))return a=f.Q,Ru(),a=sb(d,a,e),(new H).i(a);throw(new q).i(a);}}(a,d,e)));return a.z()?dn(en(),"foldMapLeft1"):a.R()}function Aqa(a,b,d){return a.xy(b,m(new p,function(){return function(a){return a}}(a)),d)}function AR(){}AR.prototype=new cja;AR.prototype.constructor=AR;function Bqa(){}Bqa.prototype=AR.prototype;
+function BR(){this.aF=null}BR.prototype=new eja;BR.prototype.constructor=BR;function Cqa(){}Cqa.prototype=BR.prototype;BR.prototype.b=function(){var a=new CR;Ed(a);ky(a);Wx(a);Jy(a);DR(a);ER(a);FR(a);GR(a);Fd(a);Ry(a);HR(a);IR(a);JR(a);Pd(a);Od(a);eR(a);KR(a);iR(a);this.aF=a;return this};function LR(){this.is=null}LR.prototype=new l;LR.prototype.constructor=LR;
+function Dqa(a,b){if(Qp(b))b=Eqa(Id());else{if(!Op(b))throw(new q).i(b);b=Fqa(a,b.ld,a.is.$d(b.gd))}Id();b=wx(b.vc,I(function(a,b){return function(){return b}}(b,"[")));return Gqa(Kd(b),I(function(){return function(){return"]"}}(a)))}LR.prototype.$d=function(a){return Dqa(this,a)};function Fqa(a,b,d){for(;;){if(Qp(b))return d;if(Op(b)){var e=b;b=e.gd;e=e.ld;d=Md(Gqa(d,I(function(){return function(){return","}}(a))),a.is.$d(b));b=e}else throw(new q).i(b);}}LR.prototype.rh=function(a){return this.$d(a).l()};
+LR.prototype.nh=function(){};LR.prototype.$classData=g({A$:0},!1,"scalaz.IListInstances$$anon$6",{A$:1,d:1,xh:1});function mz(){this.Cy=null}mz.prototype=new l;mz.prototype.constructor=mz;mz.prototype.b=function(){lz=this;this.hG(Hqa());return this};mz.prototype.hG=function(a){this.Cy=a};mz.prototype.$classData=g({B$:0},!1,"scalaz.Id$",{B$:1,d:1,C$:1});var lz=void 0;function MR(){}MR.prototype=new fja;MR.prototype.constructor=MR;function Iqa(){}Iqa.prototype=MR.prototype;
+function az(){this.YH=this.qp=null}az.prototype=new gja;az.prototype.constructor=az;function $y(a,b,d){a.qp=b;a.YH=d;return a}az.prototype.qE=function(){return m(new p,function(a){return function(){return a.YH.Yd(I(function(a){return function(){return a.qp}}(a)))}}(this))};az.prototype.$classData=g({H$:0},!1,"scalaz.IndexedStateT$$anon$12",{H$:1,G$:1,d:1});function oy(){this.kV=null}oy.prototype=new gja;oy.prototype.constructor=oy;oy.prototype.Kn=function(a){this.kV=a;return this};
+oy.prototype.qE=function(){return m(new p,function(a){return function(b){return b.Yd(I(function(a,b){return function(){return a.kV.y(b)}}(a,b)))}}(this))};oy.prototype.$classData=g({I$:0},!1,"scalaz.IndexedStateT$$anon$13",{I$:1,G$:1,d:1});function NR(){}NR.prototype=new mja;NR.prototype.constructor=NR;function Jqa(){}Jqa.prototype=NR.prototype;function OR(){this.da=null}OR.prototype=new l;OR.prototype.constructor=OR;function Uaa(a){var b=new OR;if(null===a)throw pg(qg(),null);b.da=a;return b}
+OR.prototype.$classData=g({J$:0},!1,"scalaz.InvariantFunctor$$anon$3",{J$:1,d:1,sj:1});function KR(a){a.It(Kqa(a))}function sy(){this.da=null}sy.prototype=new l;sy.prototype.constructor=sy;sy.prototype.NE=function(a){if(null===a)throw pg(qg(),null);this.da=a;return this};sy.prototype.$classData=g({L$:0},!1,"scalaz.Isomorphisms$IsoBifunctorTemplate$$anon$16",{L$:1,d:1,I9:1});function ty(){this.da=null}ty.prototype=new l;ty.prototype.constructor=ty;
+ty.prototype.NE=function(a){if(null===a)throw pg(qg(),null);this.da=a;return this};ty.prototype.$classData=g({M$:0},!1,"scalaz.Isomorphisms$IsoBifunctorTemplate$$anon$17",{M$:1,d:1,I9:1});function uy(){this.da=null}uy.prototype=new l;uy.prototype.constructor=uy;uy.prototype.OE=function(a){if(null===a)throw pg(qg(),null);this.da=a;return this};uy.prototype.$classData=g({N$:0},!1,"scalaz.Isomorphisms$IsoFunctorTemplate$$anon$13",{N$:1,d:1,SS:1});function vy(){this.da=null}vy.prototype=new l;
+vy.prototype.constructor=vy;vy.prototype.OE=function(a){if(null===a)throw pg(qg(),null);this.da=a;return this};vy.prototype.$classData=g({O$:0},!1,"scalaz.Isomorphisms$IsoFunctorTemplate$$anon$14",{O$:1,d:1,SS:1});function PR(){}PR.prototype=new oja;PR.prototype.constructor=PR;function Lqa(){}Lqa.prototype=PR.prototype;function QR(){}QR.prototype=new qja;QR.prototype.constructor=QR;QR.prototype.b=function(){yy.prototype.b.call(this);return this};
+QR.prototype.$classData=g({Q$:0},!1,"scalaz.Leibniz$",{Q$:1,Kna:1,d:1});var Mqa=void 0;function RR(){}RR.prototype=new pja;RR.prototype.constructor=RR;RR.prototype.b=function(){return this};RR.prototype.$classData=g({R$:0},!1,"scalaz.Leibniz$$anon$2",{R$:1,Jna:1,d:1});function SR(){}SR.prototype=new l;SR.prototype.constructor=SR;SR.prototype.Gt=function(){};SR.prototype.$classData=g({T$:0},!1,"scalaz.MapInstances$$anon$7",{T$:1,d:1,fu:1});function TR(){}TR.prototype=new rja;
+TR.prototype.constructor=TR;function Nqa(){}Nqa.prototype=TR.prototype;function UR(){}UR.prototype=new tja;UR.prototype.constructor=UR;function Oqa(){}Oqa.prototype=UR.prototype;function VR(){this.HF=null}VR.prototype=new Cja;VR.prototype.constructor=VR;function Pqa(){}Pqa.prototype=VR.prototype;VR.prototype.b=function(){this.HF=(new WR).Zq(this);return this};function rq(){}rq.prototype=new l;rq.prototype.constructor=rq;rq.prototype.sc=function(a,b){return sq(a,se(b))};
+rq.prototype.Zq=function(){Gd(this);return this};rq.prototype.wf=function(){};rq.prototype.$classData=g({caa:0},!1,"scalaz.NonEmptyListInstances$$anon$2",{caa:1,d:1,If:1});function Wp(){}Wp.prototype=new l;Wp.prototype.constructor=Wp;Wp.prototype.b=function(){return this};Wp.prototype.$classData=g({daa:0},!1,"scalaz.NotNothing$$anon$1",{daa:1,d:1,Una:1});function XR(){}XR.prototype=new Dja;XR.prototype.constructor=XR;function Qqa(){}Qqa.prototype=XR.prototype;function YR(){this.da=null}
+YR.prototype=new l;YR.prototype.constructor=YR;function Rqa(a){var b=new YR;if(null===a)throw pg(qg(),null);b.da=a;return b}YR.prototype.$classData=g({iaa:0},!1,"scalaz.Optional$$anon$2",{iaa:1,d:1,Cpa:1});function ZR(){this.da=null}ZR.prototype=new l;ZR.prototype.constructor=ZR;function Vaa(a){var b=new ZR;if(null===a)throw pg(qg(),null);b.da=a;return b}ZR.prototype.$classData=g({kaa:0},!1,"scalaz.Plus$$anon$7",{kaa:1,d:1,Jx:1});function $R(){this.da=null}$R.prototype=new l;
+$R.prototype.constructor=$R;function Sqa(a){var b=new $R;if(null===a)throw pg(qg(),null);b.da=a;return b}$R.prototype.$classData=g({oaa:0},!1,"scalaz.Profunctor$$anon$7",{oaa:1,d:1,dD:1});function Wy(){}Wy.prototype=new Hja;Wy.prototype.constructor=Wy;Wy.prototype.b=function(){Ty.prototype.b.call(this);return this};Wy.prototype.$classData=g({qaa:0},!1,"scalaz.Reducer$",{qaa:1,foa:1,d:1});var Kja=void 0;function aS(){this.WW=this.JU=this.bH=this.YW=null}aS.prototype=new Gja;
+aS.prototype.constructor=aS;c=aS.prototype;c.Tl=function(){return this.YW};c.jm=function(a){return this.bH.y(a)};c.cf=function(a,b){return this.WW.sc(a,I(function(a,b){return function(){return a.bH.y(b)}}(this,b)))};c.cp=function(a,b){return this.JU.y(a).y(b)};function Lja(a,b,d){var e=new aS;e.bH=a;e.JU=b;e.WW=d;e.YW=d;return e}c.$classData=g({raa:0},!1,"scalaz.ReducerInstances$$anon$7",{raa:1,paa:1,d:1});function bS(){this.da=null}bS.prototype=new l;bS.prototype.constructor=bS;
+function Waa(a){var b=new bS;if(null===a)throw pg(qg(),null);b.da=a;return b}bS.prototype.$classData=g({uaa:0},!1,"scalaz.Semigroup$$anon$10",{uaa:1,d:1,eD:1});function cS(){this.da=null}cS.prototype=new l;cS.prototype.constructor=cS;function Xaa(a){var b=new cS;if(null===a)throw pg(qg(),null);b.da=a;return b}cS.prototype.$classData=g({xaa:0},!1,"scalaz.Show$$anon$3",{xaa:1,d:1,Fpa:1});function Mx(){}Mx.prototype=new l;Mx.prototype.constructor=Mx;c=Mx.prototype;c.b=function(){Nd(this);return this};
+c.$d=function(a){return Hd(this,a)};c.rh=function(a){return na(a)};c.nh=function(){};c.$classData=g({yaa:0},!1,"scalaz.Show$$anon$4",{yaa:1,d:1,xh:1});function cz(){}cz.prototype=new l;cz.prototype.constructor=cz;cz.prototype.b=function(){return this};cz.prototype.$classData=g({Faa:0},!1,"scalaz.Tag$TagOf",{Faa:1,d:1,SS:1});function dS(){this.MT=null}dS.prototype=new l;dS.prototype.constructor=dS;function Tqa(a){var b=new dS;b.MT=a;return b}
+dS.prototype.$classData=g({Maa:0},!1,"scalaz.Unapply_0$$anon$14",{Maa:1,d:1,soa:1});function eS(){}eS.prototype=new Pja;eS.prototype.constructor=eS;function Uqa(){}Uqa.prototype=eS.prototype;function fS(){}fS.prototype=new Gja;fS.prototype.constructor=fS;function Vqa(){}Vqa.prototype=fS.prototype;fS.prototype.cf=function(a,b){return this.Tl().sc(a,I(function(a,b){return function(){return a.jm(b)}}(this,b)))};
+fS.prototype.cp=function(a,b){return this.Tl().sc(this.jm(a),I(function(a,b){return function(){return b}}(this,b)))};function gS(){this.da=null}gS.prototype=new l;gS.prototype.constructor=gS;function Yaa(a){var b=new gS;if(null===a)throw pg(qg(),null);b.da=a;return b}gS.prototype.$classData=g({Oaa:0},!1,"scalaz.Unzip$$anon$4",{Oaa:1,d:1,kra:1});function hS(){}hS.prototype=new Qja;hS.prototype.constructor=hS;function Wqa(){}Wqa.prototype=hS.prototype;function iS(){this.da=null}iS.prototype=new l;
+iS.prototype.constructor=iS;function Zaa(a){var b=new iS;if(null===a)throw pg(qg(),null);b.da=a;return b}iS.prototype.$classData=g({Taa:0},!1,"scalaz.Zip$$anon$6",{Taa:1,d:1,lra:1});function Xqa(a){a.$Y((new jS).PE(a));a.aZ((new kS).PE(a))}function Px(){this.Wu=null}Px.prototype=new l;Px.prototype.constructor=Px;Px.prototype.$d=function(a){return Yqa(this,a)};Px.prototype.rh=function(a){return this.$d(a).l()};Px.prototype.nh=function(){};
+function Yqa(a,b){var d=Id(),e=Jd(Id(),","),f=m(new p,function(a){return function(b){Lx();return a.Wu.$d(b)}}(a)),h=Mc();b=Zqa(d,e,b.ya(f,h.s).Nc());Id();b=wx(b.vc,I(function(a,b){return function(){return b}}(b,"[")));return Gqa(Kd(b),I(function(){return function(){return"]"}}(a)))}Px.prototype.$classData=g({Hba:0},!1,"scalaz.std.IterableInstances$$anon$3",{Hba:1,d:1,xh:1});function lS(){}lS.prototype=new l;lS.prototype.constructor=lS;lS.prototype.fG=function(){};
+lS.prototype.ov=function(){this.fG(kqa(this));return this};lS.prototype.$classData=g({Yba:0},!1,"scalaz.std.TupleInstances1$$anon$72",{Yba:1,d:1,F9:1});function mS(){this.Jy=this.wu=null}mS.prototype=new l;mS.prototype.constructor=mS;c=mS.prototype;c.YY=function(){};c.PY=function(){};c.QY=function(){};c.b=function(){nS=this;$aa(this);return this};c.TY=function(a){this.Jy=a};c.ZY=function(){};c.NY=function(){};c.XY=function(){};c.MY=function(){};c.RY=function(){};c.OY=function(){};c.SY=function(){};
+c.WY=function(){};c.UY=function(){};c.VY=function(){};c.LY=function(){};c.$classData=g({cca:0},!1,"scalaz.std.anyVal$",{cca:1,d:1,$aa:1});var nS=void 0;function Uy(){nS||(nS=(new mS).b());return nS}function Ox(){}Ox.prototype=new l;Ox.prototype.constructor=Ox;Ox.prototype.b=function(){return this};Ox.prototype.$classData=g({eca:0},!1,"scalaz.std.iterable$",{eca:1,d:1,Moa:1});var Kia=void 0;function oS(){this.yj=null}oS.prototype=new l;oS.prototype.constructor=oS;
+oS.prototype.TE=function(a,b,d){this.yj=d;return this};oS.prototype.$classData=g({jca:0},!1,"scalaz.std.java.util.concurrent.CallableInstances$$anon$1$$anon$3",{jca:1,d:1,xW:1});function pS(){this.ty=null}pS.prototype=new l;pS.prototype.constructor=pS;pS.prototype.TE=function(a,b,d){this.ty=d;return this};pS.prototype.$classData=g({kca:0},!1,"scalaz.std.java.util.concurrent.CallableInstances$$anon$1$$anon$4",{kca:1,d:1,xW:1});function qS(){}qS.prototype=new l;qS.prototype.constructor=qS;
+qS.prototype.$classData=g({lca:0},!1,"scalaz.std.java.util.concurrent.CallableInstances$$anon$1$$anon$5",{lca:1,d:1,xW:1});function Vy(){}Vy.prototype=new l;Vy.prototype.constructor=Vy;Vy.prototype.b=function(){Jja=this;aba(this);return this};Vy.prototype.dZ=function(){};Vy.prototype.cZ=function(){};Vy.prototype.$classData=g({sca:0},!1,"scalaz.std.math.bigInt$",{sca:1,d:1,pca:1});var Jja=void 0;function rS(){this.Yt=this.vc=null}rS.prototype=new l;rS.prototype.constructor=rS;
+function Ffa(a,b){var d=new rS;d.vc=a;d.Yt=b;return d}rS.prototype.$classData=g({Aca:0},!1,"scalaz.syntax.FoldableOps",{Aca:1,d:1,Dca:1});function sS(){}sS.prototype=new l;sS.prototype.constructor=sS;sS.prototype.pv=function(){return this};sS.prototype.$classData=g({Ica:0},!1,"scalaz.syntax.Syntaxes$nel$",{Ica:1,d:1,Oca:1});function tS(){this.Yt=this.vc=null}tS.prototype=new l;tS.prototype.constructor=tS;
+function $qa(a,b){return b.MT.Kh(a.vc,m(new p,function(){return function(a){Mqa||(Mqa=(new QR).b());(new RR).b();return a}}(a,b)),a.Yt)}function ara(a,b){var d=new tS;d.vc=a;d.Yt=b;return d}tS.prototype.$classData=g({Rca:0},!1,"scalaz.syntax.TraverseOps",{Rca:1,d:1,Dca:1});function uS(){this.GF=this.aH=this.pE=null}uS.prototype=new l;uS.prototype.constructor=uS;uS.prototype.b=function(){return this};function bra(){var a=vS();null===vS().aH&&null===vS().aH&&(vS().aH=(new wS).pv(a));vS()}
+function Efa(){var a=vS();null===vS().pE&&null===vS().pE&&(vS().pE=(new xS).pv(a));vS()}uS.prototype.$classData=g({Tca:0},!1,"scalaz.syntax.package$",{Tca:1,d:1,Gpa:1});var cra=void 0;function vS(){cra||(cra=(new uS).b());return cra}function yS(){}yS.prototype=new l;yS.prototype.constructor=yS;yS.prototype.b=function(){return this};
+yS.prototype.Bt=function(a){var b=dra().dE.xc;zS(b,"Failure in RunNow async execution: "+a);AS(b,"\n");b=dra().dE.xc;a=Dw(a);var d=(new Bl).b(),e;e=!0;zr(d,"");for(var f=0,h=a.n.length;f<h;){var k=a.n[f];e?(Ar(d,k),e=!1):(zr(d,"\n"),Ar(d,k));f=1+f|0}zr(d,"");zS(b,d.Bb.Yb);AS(b,"\n")};yS.prototype.Xu=function(a){try{a.Xm()}catch(b){a=qn(qg(),b);if(null!==a)throw pg(qg(),a);throw b;}};yS.prototype.$classData=g({Wca:0},!1,"utest.framework.ExecutionContext$RunNow$",{Wca:1,d:1,rz:1});var era=void 0;
+function fra(){era||(era=(new yS).b());return era}function BS(){this.o_=this.wa=null}BS.prototype=new l;BS.prototype.constructor=BS;function gra(){}gra.prototype=BS.prototype;
+function hra(a,b,d,e,f){Hha||(Hha=(new $v).b());var h=Gha(e,a.o_),k=b.Ab("."),n=""+Jv((new Kv).Ea((new J).j(["Starting Suite "])),u())+e,r=(new Tb).c("-"),r=ira(r,(80-(n.length|0)|0)/2|0);d.ta(m(new p,function(a,b,d){return function(a){a.zE(""+d+b+d)}}(a,n,r)));Lz||(Lz=(new Kz).b());n=h.Nla();n=cka(zz(n),b);if(null===n)throw(new q).i(n);a.ZT(n.na().sa());for(var n=a.wa,r=n.n.length,y=0;;){if(y<r)var E=n.n[y],E=!(0<=(E.length|0)&&"--parallel"===E.substring(0,10));else E=!1;if(E)y=1+y|0;else break}r=
+y;n=r<n.n.length?(new H).i(n.n[r]):C();n.z()?n=!1:(n=n.R(),n=(new Tb).c(n),r=10,y=n.U.length|0,n=Le(Me(),n.U,r,y),0===(n.length|0)?n=!0:(n=(new Tb).c(n),r=n.U.length|0,n=Le(Me(),n.U,1,r),n=(new Tb).c(n),n=hi(n.U)));n=n?aB():fra();Lz||(Lz=(new Kz).b());r=h.Nla();r=zz(r);d=ub(new vb,function(a,b,d,e,f,h,k){return function(n,r){r.W.Ky()?a.JV():a.IV();var y=t();n=h.Bra(b.$c(n,y.s),r);jra((new CS).b(),yv().gD,f,k);n.z()||(y=n.R(),d.ta(m(new p,function(a,b,d){return function(a){a.zE(""+b+d)}}(a,e,y))));
+r=r.W;if(dw(r)){r=r.Xk;jra((new CS).Dd(r),yv().qx,f,k);for(var y=Dw(r),E=y.n.length,xb=0;;)if(xb<E&&"utest.framework.TestThunkTree"!==y.n[xb].hp)xb=1+xb|0;else break;E=xb;E=0<E?E:0;xb=y.n.length;E=E<xb?E:xb;E=0<E?E:0;xb=nka(pka(),Oz(oa(y)),E);0<E&&Lv(Af(),y,0,xb,0,E);kra(r,xb);a.pD(""+e+(n.z()?"":n.R()));if(lra(r))n="";else{n=Dw(r);r=null;r=[];y=0;for(E=n.n.length;y<E;)xb=n.n[y].l(),r.push(null===xb?null:xb),y=1+y|0;n=ka(Xa(qa),r);r=(new Bl).b();y=!1;y=!0;zr(r,"");E=0;for(xb=n.n.length;E<xb;){var Wc=
+n.n[E];y?(Ar(r,Wc),y=!1):(zr(r,"\n"),Ar(r,Wc));E=1+E|0}zr(r,"");n=r.Bb.Yb}a.rD(n)}}}(a,b,d,e,f,h,k));e=m(new p,function(a,b,d){return function(a){return b.mta(a,d)}}(a,h,n));f=u();return fka(r,d,f,b,e,n).di(m(new p,function(a,b){return function(a){return b.Dra(a)}}(a,h)),n).di(m(new p,function(a){return function(b){b.z()||(b=b.R(),a.qD(b))}}(a)),n)}function jra(a,b,d,e){d.BV(mra(e,a,b))}
+function Lpa(a,b){var d;d=[];for(var e=0,f=b.n.length;e<f;){var h=aqa(a,b.n[e]);d.push(null===h?null:h);e=1+e|0}return ka(Xa(Ad),d)}BS.prototype.LV=function(a,b,d){this.wa=a;this.o_=d;return this};function aqa(a,b){var d=Dt(Ne(),a.wa),d=pd(new rd,d).Uc(0),d=d.z()||45!==(65535&(d.R().charCodeAt(0)|0))?d:C(),d=d.z()?"":d.R();return nra(new DS,b,d,xx(function(a){return function(b,d,k,n){return hra(a,b,d,k,n)}}(a)))}function ES(){this.NG=this.mX=this.IG=null}ES.prototype=new l;
+ES.prototype.constructor=ES;function mra(a,b,d){var e=new ES;e.IG=a;e.mX=b;e.NG=d;return e}ES.prototype.$classData=g({bda:0},!1,"utest.runner.BaseRunner$$anon$2",{bda:1,d:1,Nma:1});function FS(){}FS.prototype=new l;FS.prototype.constructor=FS;FS.prototype.b=function(){return this};function Dha(){var a=(new J).j([new GS]),b=a.qa.length|0,b=la(Xa(Paa),[b]),d;d=0;for(a=Ye(new Ze,a,0,a.qa.length|0);a.ra();){var e=a.ka();b.n[d]=e;d=1+d|0}return b}
+function Kpa(a,b,d){return ora(new HS,b,d,I(function(){return function(){}}(a)),I(function(){return function(){}}(a)))}function Ypa(a,b,d,e){return pra(new IS,b,d,e,I(function(){return function(){}}(a)),I(function(){return function(){}}(a)))}var qra=g({dda:0},!1,"utest.runner.Framework",{dda:1,d:1,IC:1});FS.prototype.$classData=qra;function DS(){this.VF=this.dh=this.Iw=null}DS.prototype=new l;DS.prototype.constructor=DS;
+function Qpa(a,b,d,e){var f=fra();rra(a,b,d).At(sra(d),f).Mp(m(new p,function(a,b){return function(){var a=u(),d=Jm(a),d=la(Xa(Ad),[d]),e;e=0;for(a=hv(a);a.ra();){var f=a.ka();d.n[e]=f;e=1+e|0}b.y(d)}}(a,e)),f)}function nra(a,b,d,e){a.Iw=b;a.dh=d;a.VF=e;return a}
+function rra(a,b,d){if(mp(Ia(),a.dh,"}")){var e=(new Tb).c(a.dh),f=a.dh.lastIndexOf("{")|0,f=Pi(e,f);if(null===f)throw(new q).i(f);var e=f.ja(),f=(new Tb).c(f.na()),h=f.U.length|0,f=Le(Me(),f.U,1,h),f=(new Tb).c(f),f=dm(f,1),f=gE(Ia(),f,",");Af();(new WA).b();var h=tra().db(),k=f.n.length;switch(k){case -1:break;default:h.oc(k)}for(var k=0,n=f.n.length;k<n;)h.Ma(""+e+f.n[k].trim()),k=1+k|0;f=h.Ba()}else f=G(t(),(new J).j([a.dh]));h=a.Iw.Ok;if(f.Le(m(new p,function(a,b){return function(a){return 0<=
+(b.length|0)&&b.substring(0,a.length|0)===a}}(a,h))))return Sc(a.VF,u(),Dt(Ne(),d),h,b);e=fra();f=f.Jl(m(new p,function(a,b){return function(a){return 0<=(a.length|0)&&a.substring(0,b.length|0)===b}}(a,h)),!1);a=m(new p,function(a,b,d,e){return function(f){var h=a.VF;Ne();f=(new Tb).c(f);var k=e.length|0,n=f.U.length|0;f=Le(Me(),f.U,k,n);f=gE(Ia(),f,"\\.");for(var k=(new JS).Bp(ura(vra(),Oz(oa(f)))),n=0,Ca=f.n.length;n<Ca;){var ab=f.n[n];!1!==0<(ab.length|0)&&wra(k,ab);n=1+n|0}return Sc(h,Dt(0,xra(k)),
+Dt(Ne(),d),e,b)}}(a,b,d,h));b=t();a=f.ya(a,b.s);b=Bz();d=t();return yla(b,a,d.s,e)}DS.prototype.$classData=g({ida:0},!1,"utest.runner.Task",{ida:1,d:1,xS:1});function KS(){}KS.prototype=new l;KS.prototype.constructor=KS;function LS(){}LS.prototype=KS.prototype;function $na(a){return!!(a&&a.$classData&&a.$classData.m.bl||"number"===typeof a)}function MS(){this.Us=this.tt=this.hp=null;this.Bu=this.rt=0}MS.prototype=new l;MS.prototype.constructor=MS;
+MS.prototype.o=function(a){return a&&a.$classData&&a.$classData.m.pW?this.Us===a.Us&&this.rt===a.rt&&this.hp===a.hp&&this.tt===a.tt:!1};MS.prototype.l=function(){var a="";"\x3cjscode\x3e"!==this.hp&&(a=""+a+this.hp+".");a=""+a+this.tt;null===this.Us?a+="(Unknown Source)":(a=a+"("+this.Us,0<=this.rt&&(a=a+":"+this.rt,0<=this.Bu&&(a=a+":"+this.Bu)),a+=")");return a};MS.prototype.r=function(){var a=this.hp,a=Ha(Ia(),a),b=this.tt;return a^Ha(Ia(),b)};
+MS.prototype.setColumnNumber=function(a){this.Bu=a|0};MS.prototype.getColumnNumber=function(){return this.Bu};var yra=g({pW:0},!1,"java.lang.StackTraceElement",{pW:1,d:1,h:1});MS.prototype.$classData=yra;function Yz(){this.va=null}Yz.prototype=new l;Yz.prototype.constructor=Yz;Yz.prototype.Xm=function(){};Yz.prototype.$classData=g({eea:0},!1,"java.lang.Thread",{eea:1,d:1,oW:1});function NS(){this.Mf=this.Lc=null;this.kH=!1;this.Or=null}NS.prototype=new l;NS.prototype.constructor=NS;
+function OS(){}OS.prototype=NS.prototype;NS.prototype.av=function(){if(void 0===ba.Error.captureStackTrace){try{var a={}.undef()}catch(b){if(a=qn(qg(),b),null!==a)if(oE(a))a=a.op;else throw pg(qg(),a);else throw b;}this.stackdata=a}else ba.Error.captureStackTrace(this),this.stackdata=this;return this};NS.prototype.Vf=function(){return this.Lc};NS.prototype.l=function(){var a=oa(this).tg(),b=this.Vf();return null===b?a:a+": "+b};
+function kra(a,b){if(a.kH){for(var d=0;d<b.n.length;){if(null===b.n[d])throw(new Ce).b();d=1+d|0}a.Or=b.qU()}}
+function Dw(a){if(null===a.Or){var b;if(a.kH){Xna||(Xna=(new iE).b());b=Xna;var d=a.stackdata,e;if(d){if(0===(1&b.xa)<<24>>24&&0===(1&b.xa)<<24>>24){a:try{ba.Packages.org.mozilla.javascript.JavaScriptException,e=!0}catch(R){e=qn(qg(),R);if(null!==e){if(oE(e)){e=!1;break a}throw pg(qg(),e);}throw R;}b.bW=e;b.xa=(1|b.xa)<<24>>24}if(b.bW)e=d.stack,e=(void 0===e?"":e).replace(kE("^\\s+at\\s+","gm"),"").replace(kE("^(.+?)(?: \\((.+)\\))?$","gm"),"$2@$1").replace(kE("\\r\\n?","gm"),"\n").split("\n");else if(d.arguments&&
+d.stack)e=Rna(d);else if(d.stack&&d.sourceURL)e=d.stack.replace(kE("\\[native code\\]\\n","m"),"").replace(kE("^(?\x3d\\w+Error\\:).*$\\n","m"),"").replace(kE("^@","gm"),"{anonymous}()@").split("\n");else if(d.stack&&d.number)e=d.stack.replace(kE("^\\s*at\\s+(.*)$","gm"),"$1").replace(kE("^Anonymous function\\s+","gm"),"{anonymous}() ").replace(kE("^([^\\(]+|\\{anonymous\\}\\(\\))\\s+\\((.+)\\)$","gm"),"$1@$2").split("\n").slice(1);else if(d.stack&&d.fileName)e=d.stack.replace(kE("(?:\\n@:0)?\\s+$",
+"m"),"").replace(kE("^(?:\\((\\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=Wna(d);else{e=kE("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 n=e.exec(d[h]);if(null!==n){var r=n[3],r=void 0===r?"{anonymous}":r,y=n[2];if(void 0===y)throw(new Bu).c("undefined.get");
+n=n[1];if(void 0===n)throw(new Bu).c("undefined.get");f.push(r+"()@"+y+":"+n)}h=2+h|0}e=f}else e=Wna(d);else if(d.message&&d.stack&&d.stacktrace){if(0>d.stacktrace.indexOf("called from line"))for(e=jE("^(.*)@(.+):(\\d+)$"),d=d.stacktrace.split("\n"),f=[],h=0,k=d.length|0;h<k;){n=e.exec(d[h]);if(null!==n){r=n[1];r=void 0===r?"global code":r+"()";y=n[2];if(void 0===y)throw(new Bu).c("undefined.get");n=n[3];if(void 0===n)throw(new Bu).c("undefined.get");f.push(r+"@"+y+":"+n)}h=1+h|0}else for(e=jE("^.*line (\\d+), column (\\d+)(?: in (.+))? in (\\S+):$"),
+d=d.stacktrace.split("\n"),f=[],h=0,k=d.length|0;h<k;){n=e.exec(d[h]);if(null!==n){r=n[4];if(void 0===r)throw(new Bu).c("undefined.get");y=n[1];if(void 0===y)throw(new Bu).c("undefined.get");var E=n[2];if(void 0===E)throw(new Bu).c("undefined.get");r=r+":"+y+":"+E;n=n[2];n=(void 0===n?"global code":n).replace(jE("\x3canonymous function: (\\S+)\x3e"),"$1").replace(jE("\x3canonymous function\x3e"),"{anonymous}");f.push(n+"@"+r)|0}h=2+h|0}e=f}else e=d.stack&&!d.fileName?Rna(d):[]}else e=[];f=e;h=jE("^([^\\@]*)\\@(.*):([0-9]+)$");
+k=jE("^([^\\@]*)\\@(.*):([0-9]+):([0-9]+)$");d=[];for(e=0;e<(f.length|0);){n=f[e];if(null===n)throw(new Ce).b();if(""!==n)if(r=k.exec(n),null!==r){n=r[1];if(void 0===n)throw(new Bu).c("undefined.get");y=Vna(b,n);if(null===y)throw(new q).i(y);n=y.ja();y=y.na();E=r[2];if(void 0===E)throw(new Bu).c("undefined.get");var Q=r[3];if(void 0===Q)throw(new Bu).c("undefined.get");Q=(new Tb).c(Q);Q=gi(ei(),Q.U,10);r=r[4];if(void 0===r)throw(new Bu).c("undefined.get");r=(new Tb).c(r);r=gi(ei(),r.U,10);d.push({declaringClass:n,
+methodName:y,fileName:E,lineNumber:Q,columnNumber:void 0===r?void 0:r})}else if(r=h.exec(n),null!==r){n=r[1];if(void 0===n)throw(new Bu).c("undefined.get");y=Vna(b,n);if(null===y)throw(new q).i(y);n=y.ja();y=y.na();E=r[2];if(void 0===E)throw(new Bu).c("undefined.get");r=r[3];if(void 0===r)throw(new Bu).c("undefined.get");r=(new Tb).c(r);r=gi(ei(),r.U,10);d.push({declaringClass:n,methodName:y,fileName:E,lineNumber:r,columnNumber:void 0})}else d.push({declaringClass:"\x3cjscode\x3e",methodName:n,fileName:null,
+lineNumber:-1,columnNumber:void 0})|0;e=1+e|0}b=aa.sourceMapper;b=void 0===b?d:b(d);d=la(Xa(yra),[b.length|0]);for(e=0;e<(b.length|0);)f=b[e],h=f.methodName,k=f.fileName,n=f.lineNumber|0,r=new MS,r.hp=f.declaringClass,r.tt=h,r.Us=k,r.rt=n,r.Bu=-1,h=r,f=f.columnNumber,void 0!==f&&h.setColumnNumber(f|0),d.n[e]=h,e=1+e|0;b=d}else b=la(Xa(yra),[0]);a.Or=b}return a.Or}
+function PS(a){var b=Vz().mp,b=function(a,b){return function(a){zS(b,a);AS(b,"\n")}}(a,b);Dw(a);var d=a.l();b(d);if(0!==a.Or.n.length)for(d=0;d<a.Or.n.length;)b("  at "+a.Or.n[d]),d=1+d|0;else b("  \x3cno stack trace available\x3e");for(;;)if(a!==a.Mf&&null!==a.Mf){var e=Dw(a);a=a.Mf;var d=Dw(a),f=d.n.length,h=e.n.length,k="Caused by: "+a.l();b(k);if(0!==f){for(k=0;;){if(k<f&&k<h)var n=d.n[-1+(f-k|0)|0],r=e.n[-1+(h-k|0)|0],n=null===n?null===r:n.o(r);else n=!1;if(n)k=1+k|0;else break}0<k&&(k=-1+k|
+0);e=f-k|0;for(f=0;f<e;)b("  at "+d.n[f]),f=1+f|0;0<k&&b("  ... "+k+" more")}else b("  \x3cno stack trace available\x3e")}else break}NS.prototype.ic=function(a,b,d,e){this.Lc=a;this.Mf=b;(this.kH=e)&&this.av();return this};var eq=g({tc:0},!1,"java.lang.Throwable",{tc:1,d:1,h:1});NS.prototype.$classData=eq;function QS(){}QS.prototype=new l;QS.prototype.constructor=QS;function zra(){}zra.prototype=QS.prototype;
+QS.prototype.o=function(a){if(a===this)return!0;if(a&&a.$classData&&a.$classData.m.uW&&this.Da()===a.Da()){var b=RS(),d=(new SS).ar(this);return se(Kma(b,d).Sm).ee(m(new p,function(a,b){return function(a){var d=b.yy(a.ve);a=a.W;return null===d?null===a:Fa(d,a)}}(this,a)))}return!1};QS.prototype.l=function(){var a=RS(),b=(new SS).ar(this),b=TS(b),a=se(BC(a,b).Sm),a=(new cc).Nf(a,m(new p,function(){return function(a){return a.ve+"\x3d"+a.W}}(this)));return ec(a,"{",", ","}")};
+QS.prototype.r=function(){var a=RS(),b=(new SS).ar(this);return se(Kma(a,b).Sm).Ib(0,ub(new vb,function(){return function(a,b){a|=0;return qka(ska(),b)+a|0}}(this)))|0};function US(){this.da=this.Kv=this.Gy=null}US.prototype=new l;US.prototype.constructor=US;function Ara(){}Ara.prototype=US.prototype;US.prototype.nz=function(){var a=this.Kv;if(Xj(a))this.da.Ej.Sp(a.Q),this.Kv=C();else{if(C()===a)throw(new me).b();throw(new q).i(a);}};
+US.prototype.ka=function(){this.Kv=(new H).i(this.Gy.ka());var a=this.Kv.R(),b=new VS;if(null===this)throw pg(qg(),null);b.Qa=this;WS.prototype.e.call(b,a.Dp,this.Qa.Dg.Ej.y(a));return b};US.prototype.ra=function(){return this.Gy.ra()};US.prototype.ar=function(a){if(null===a)throw pg(qg(),null);this.da=a;this.Gy=a.Ej.vF().Sa();this.Kv=C();return this};function XS(){this.da=this.qt=this.lF=null}XS.prototype=new l;XS.prototype.constructor=XS;
+XS.prototype.nz=function(){if(this.qt.z())throw(new me).b();var a=this.qt;a.z()||(a=a.R(),this.da.Um(a));this.qt=C()};XS.prototype.ka=function(){this.qt=(new H).i(this.lF.ka().Dp);return this.qt.R()};XS.prototype.ra=function(){return this.lF.ra()};XS.prototype.$classData=g({vea:0},!1,"java.util.HashSet$$anon$1",{vea:1,d:1,Bea:1});function lg(){this.YV=this.ez=null;this.TX=this.UX=0;this.el=this.Ep=this.kz=null;this.gy=!1;this.xF=null;this.ts=0;this.yw=null}lg.prototype=new l;
+lg.prototype.constructor=lg;function Hh(a){if(a.gy){a.el=a.kz.exec(a.Ep);if(null!==a.el){var b=a.el[0];if(void 0===b)throw(new Bu).c("undefined.get");if(null===b)throw(new Ce).b();""===b&&(b=a.kz,b.lastIndex=1+(b.lastIndex|0)|0)}else a.gy=!1;a.yw=C();return null!==a.el}return!1}function Bra(a){if(null===a.el)throw(new me).c("No match available");return a.el}function Cra(a,b){a=Bra(a)[b];return void 0===a?null:a}c=lg.prototype;
+c.Pr=function(a){if(0===a)a=this.nl();else{var b;b=this.yw;b.z()?(nA(),b=this.nl(),b=Mka(this.Ep,b,this.ez).UW,this.yw=(new H).i(b)):b=b.R();a=b.Ia(a)}return a};function Hba(a){tn(a);Hh(a);null===a.el||0===a.nl()&&a.qk()===(a.Ep.length|0)||tn(a);return null!==a.el}function Dra(a){if(null!==a.el)return-1+(a.el.length|0)|0;var b=a.xF;if(Xj(b))return b.Q|0;if(C()===b)return b=-1+((new ba.RegExp("|"+a.ez.Un.source)).exec("").length|0)|0,a.xF=(new H).i(b),b;throw(new q).i(b);}
+function yn(a,b){Era(b,a.Ep.substring(a.ts));a.ts=a.Ep.length|0}c.qk=function(){var a=this.nl(),b=Ih(this);return a+(b.length|0)|0};function kg(a,b,d,e){a.ez=b;a.YV=d;a.UX=0;a.TX=e;b=a.ez;d=new ba.RegExp(b.Un);b=d!==b.Un?d:new ba.RegExp(b.Un.source,Nka(b));a.kz=b;a.Ep=na(Na(a.YV,a.UX,a.TX));a.el=null;a.gy=!0;a.xF=C();a.ts=0;a.yw=C();return a}
+function vn(a,b,d){var e=a.Ep,f=a.ts,h=a.nl();Era(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=ei();h=d.substring(h,f);h=gi(k,h,10);Era(b,Cra(a,h));break;case 92:f=1+f|0;f<e&&(h=65535&(d.charCodeAt(f)|0),YS(b.Xo,h));f=1+f|0;break;default:YS(b.Xo,h),f=1+f|0}a.ts=a.qk()}
+function Ih(a){a=Bra(a)[0];if(void 0===a)throw(new Bu).c("undefined.get");return a}c.nl=function(){return Bra(this).index|0};c.Vu=function(a){var b=this.Pr(a);if(-1===b)return-1;a=Cra(this,a);return b+(a.length|0)|0};function tn(a){a.kz.lastIndex=0;a.el=null;a.gy=!0;a.ts=0;a.yw=C()}c.$classData=g({dfa:0},!1,"java.util.regex.Matcher",{dfa:1,d:1,Ora:1});function al(){}al.prototype=new l;al.prototype.constructor=al;al.prototype.Tg=function(){KE();Mj();return(new LE).b()};
+al.prototype.gf=function(){KE();Mj();return(new LE).b()};al.prototype.$classData=g({jfa:0},!1,"scala.LowPriorityImplicits$$anon$4",{jfa:1,d:1,Ir:1});function ZS(){}ZS.prototype=new l;ZS.prototype.constructor=ZS;ZS.prototype.b=function(){return this};ZS.prototype.Tg=function(){return(new Bl).b()};ZS.prototype.gf=function(){return(new Bl).b()};ZS.prototype.$classData=g({xfa:0},!1,"scala.Predef$$anon$3",{xfa:1,d:1,Ir:1});function $S(){this.cs=null}$S.prototype=new l;$S.prototype.constructor=$S;c=$S.prototype;
+c.Bw=function(a,b){return(new aT).wp(this.cs,a,b)};c.l=function(){var a=this.cs,b=(new Bl).b(),d;d=!0;zr(b,"");for(var e=0,f=a.n.length;e<f;){var h=Oe(a.n[e]);d?(Ar(b,h),d=!1):(zr(b,""),Ar(b,h));e=1+e|0}zr(b,"");return b.Bb.Yb};c.Gm=function(a){this.cs=a;return this};c.sa=function(){return this.cs.n.length};c.$classData=g({yfa:0},!1,"scala.Predef$ArrayCharSequence",{yfa:1,d:1,Hv:1});
+function Fra(a,b){switch(b){case 0:return a.Oa;case 1:return a.fb;case 2:return a.Gf;case 3:return a.ds;default:throw(new O).c(""+b);}}function bT(){}bT.prototype=new l;bT.prototype.constructor=bT;bT.prototype.b=function(){return this};bT.prototype.$classData=g({Ifa:0},!1,"scala.concurrent.BlockContext$DefaultBlockContext$",{Ifa:1,d:1,hY:1});var Gra=void 0;function Mz(){this.Ft=0}Mz.prototype=new l;Mz.prototype.constructor=Mz;
+Mz.prototype.o=function(a){lka();return a&&a.$classData&&a.$classData.m.mY?this.Ft===a.Ft:!1};Mz.prototype.hb=function(a){this.Ft=a;return this};Mz.prototype.r=function(){return this.Ft};Mz.prototype.$classData=g({mY:0},!1,"scala.concurrent.duration.package$DurationInt",{mY:1,d:1,esa:1});function cT(){}cT.prototype=new Fla;cT.prototype.constructor=cT;cT.prototype.sv=function(){return this};cT.prototype.$classData=g({cga:0},!1,"scala.io.Source$RelaxedPosition$",{cga:1,gsa:1,d:1});
+function dT(){qB.call(this)}dT.prototype=new Jla;dT.prototype.constructor=dT;dT.prototype.sv=function(a){qB.prototype.vda.call(this,a,Hra(a));return this};dT.prototype.$classData=g({dga:0},!1,"scala.io.Source$RelaxedPositioner$",{dga:1,isa:1,d:1});function eT(){rB.call(this)}eT.prototype=new Kla;eT.prototype.constructor=eT;eT.prototype.$classData=g({jga:0},!1,"scala.math.Integral$IntegralOps",{jga:1,psa:1,d:1});function wB(){}wB.prototype=new l;wB.prototype.constructor=wB;wB.prototype.b=function(){return this};
+wB.prototype.l=function(){return"object AnyRef"};wB.prototype.$classData=g({Hga:0},!1,"scala.package$$anon$1",{Hga:1,d:1,csa:1});function ZB(){this.cG=this.va=this.pz=this.wy=this.Zl=null}ZB.prototype=new l;ZB.prototype.constructor=ZB;ZB.prototype.l=function(){return this.va+"("+this.cG+")"};function sma(a,b,d,e){a.Zl=b;a.wy=d;a.pz=e;a.cG="";a.va="Catch";return a}function Ira(a,b){var d=new fT;if(null===a)throw pg(qg(),null);d.da=a;d.ty=b;return sma(new ZB,d,a.wy,a.pz)}
+function cqa(){var a=vma();return Ira(a,m(new p,function(){return function(){return C()}}(a)))}ZB.prototype.$classData=g({mha:0},!1,"scala.util.control.Exception$Catch",{mha:1,d:1,ssa:1});function gT(){this.Hz=this.RW=this.Fk=0}gT.prototype=new zma;gT.prototype.constructor=gT;gT.prototype.b=function(){hT=this;this.Fk=Ha(Ia(),"Seq");this.RW=Ha(Ia(),"Map");this.Hz=Ha(Ia(),"Set");return this};
+function iT(a,b){if(Ng(b)){for(var d=0,e=a.Fk,f=b;!f.z();)b=f.Y(),f=f.$(),e=a.ca(e,fC(V(),b)),d=1+d|0;a=a.xb(e,d)}else a=Ama(a,b,a.Fk);return a}gT.prototype.$classData=g({sha:0},!1,"scala.util.hashing.MurmurHash3$",{sha:1,tsa:1,d:1});var hT=void 0;function S(){hT||(hT=(new gT).b());return hT}function jT(){this.Qv=this.Bc=this.eV=this.g_=null;this.xa=this.Ya=this.Ua=0}jT.prototype=new l;jT.prototype.constructor=jT;c=jT.prototype;c.Pr=function(a){return Jra(this).n[a]};
+c.l=function(){return 0<=this.nl()?na(Na(this.KG(),this.nl(),this.qk())):null};c.qk=function(){return this.Ya};function Kra(a){if(0===(2&a.xa)<<24>>24&&0===(2&a.xa)<<24>>24){var b=Dra(a.Qv),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;KE();Nj();KE();Mj();f=(new LE).b();0>e&&jn(kn(),0,b,1,!0);if(!d)for(d=0;;){e=a.Qv.Vu(d);ME(f,e);if(d===b)break;d=1+d|0}b=NE(f);d=b.sa();d=la(Xa(db),[d]);pC(b,d,0);a.eV=d;a.xa=(2|a.xa)<<24>>24}return a.eV}c.KG=function(){return this.Bc};
+c.nl=function(){return this.Ua};c.Vu=function(a){return Kra(this).n[a]};function Jra(a){if(0===(1&a.xa)<<24>>24&&0===(1&a.xa)<<24>>24){var b=Dra(a.Qv),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;KE();Nj();KE();Mj();f=(new LE).b();0>e&&jn(kn(),0,b,1,!0);if(!d)for(d=0;;){e=a.Qv.Pr(d);ME(f,e);if(d===b)break;d=1+d|0}b=NE(f);d=b.sa();d=la(Xa(db),[d]);pC(b,d,0);a.g_=d;a.xa=(1|a.xa)<<24>>24}return a.g_}
+c.$classData=g({wha:0},!1,"scala.util.matching.Regex$Match",{wha:1,d:1,xha:1});function kT(){this.ke=this.gl=this.da=null}kT.prototype=new Ema;kT.prototype.constructor=kT;function Lra(){}Lra.prototype=kT.prototype;kT.prototype.Mn=function(a,b,d){this.gl=b;this.ke=d;kC.prototype.Cp.call(this,a);b=zO(a).xc;b.z()?b=!1:(b=b.R(),b.z()?b=!0:(d=b.R(),b=iO(this.ke),d=iO(d.ke),b=!(b.Ac<d.Ac)));b&&(zO(a).xc=(new H).i((new H).i(this)));return this};kT.prototype.pV=function(){return this};kT.prototype.TW=function(){return this};
+function lT(){this.da=this.va=null}lT.prototype=new l;lT.prototype.constructor=lT;function mT(){}mT.prototype=lT.prototype;function Mra(a,b){var d=(new Be).b();return(new oe).Nl(a.da,m(new p,function(a,b,d){return function(k){return a.si(k).tD(I(function(a,b,d,e){return function(){return(e.Pa?e.tb:Nra(b,e)).si(d)}}(a,b,k,d)))}}(a,b,d)))}function lO(a,b){return Ge(Ie(a,b),a.l()+"^^")}function Ora(a,b){if(null===b)throw(new Ce).b();return b.Pa?b.tb:De(b,se(a))}c=lT.prototype;
+c.Ia=function(a){return this.si(a)|0};function Zoa(a,b){var d=(new Be).b();return Ge(He(a,m(new p,function(a,b,d){return function(){return Ie(d.Pa?d.tb:Pra(b,d),m(new p,function(){return function(a){return a}}(a)))}}(a,b,d))),"~\x3e")}c.l=function(){return"Parser ("+this.va+")"};function Ge(a,b){a.va=b;return a}function Pra(a,b){if(null===b)throw(new Ce).b();return b.Pa?b.tb:De(b,se(a))}
+function sO(a,b){var d=(new Be).b();return Ge(He(a,m(new p,function(a,b,d){return function(k){return Ie(d.Pa?d.tb:Ora(b,d),m(new p,function(a,b){return function(){return b}}(a,k)))}}(a,b,d))),"\x3c~")}c.bs=function(a){var b=(new Be).b();return Ge(He(this,m(new p,function(a,b,f){return function(h){return Ie(f.Pa?f.tb:Qra(b,f),m(new p,function(a,b){return function(d){return Je(a.da,b,d)}}(a,h)))}}(this,a,b))),"~")};c.Ja=function(a){return!!this.si(a)};
+function nO(a,b){var d=a.da;a=Ge(He(a,m(new p,function(a,b){return function(d){return Ie(re(a.da,b),m(new p,function(a,b){return function(d){return Je(a.da,b,d)}}(a,d)))}}(a,b))),"~!");return(new Ke).Nl(d,a)}function He(a,b){return(new oe).Nl(a.da,m(new p,function(a,b){return function(f){return a.si(f).pV(b)}}(a,b)))}function Qra(a,b){if(null===b)throw(new Ce).b();return b.Pa?b.tb:De(b,se(a))}
+function Ie(a,b){return(new oe).Nl(a.da,m(new p,function(a,b){return function(f){return a.si(f).TW(b)}}(a,b)))}c.Cp=function(a){if(null===a)throw pg(qg(),null);this.da=a;this.va="";return this};c.za=function(a){return rb(this,a)};function Fe(a,b){return Ge(Mra(a,b),"|")}function Nra(a,b){if(null===b)throw(new Ce).b();return b.Pa?b.tb:De(b,se(a))}function Rra(a,b){for(var d=!1;!d&&a.ra();)d=!!b.y(a.ka());return d}function nT(a){return(a.ra()?"non-empty":"empty")+" iterator"}
+function oT(a,b){for(var d=!0;d&&a.ra();)d=!!b.y(a.ka());return d}function pT(a,b){for(;a.ra();)b.y(a.ka())}function Sra(a,b){for(;a.ra();){var d=a.ka();if(b.y(d))return(new H).i(d)}return C()}function Vv(a){if(a.ra()){var b=a.ka();return LC(new MC,b,I(function(a){return function(){return a.Oc()}}(a)))}sg();return qT()}function rT(a,b,d,e){var f=d,h=qC(W(),b)-d|0;for(d=d+(e<h?e:h)|0;f<d&&a.ra();)qD(W(),b,f,a.ka()),f=1+f|0}function sT(a,b){for(var d=0;d<b&&a.ra();)a.ka(),d=1+d|0;return a}
+function $b(){this.da=this.Yl=null}$b.prototype=new l;$b.prototype.constructor=$b;$b.prototype.ta=function(a){this.da.ta(m(new p,function(a,d){return function(e){return a.Yl.y(e)?d.y(e):void 0}}(this,a)))};$b.prototype.ya=function(a,b){b=b.gf(this.da.Ed());this.da.ta(m(new p,function(a,b,f){return function(h){return a.Yl.y(h)?f.Ma(b.y(h)):void 0}}(this,a,b)));return b.Ba()};function Zb(a,b,d){a.Yl=d;if(null===b)throw pg(qg(),null);a.da=b;return a}
+$b.prototype.$classData=g({cia:0},!1,"scala.collection.TraversableLike$WithFilter",{cia:1,d:1,ib:1});function tT(){}tT.prototype=new Pma;tT.prototype.constructor=tT;function Tra(){}Tra.prototype=tT.prototype;function uT(){this.da=null}uT.prototype=new l;uT.prototype.constructor=uT;uT.prototype.Tg=function(){return this.da.db()};uT.prototype.gf=function(){return this.da.db()};function Qka(a){var b=new uT;if(null===a)throw pg(qg(),null);b.da=a;return b}
+uT.prototype.$classData=g({mia:0},!1,"scala.collection.generic.GenMapFactory$MapCanBuildFrom",{mia:1,d:1,Ir:1});function vT(){}vT.prototype=new Qma;vT.prototype.constructor=vT;function Ura(){}Ura.prototype=vT.prototype;function wT(){this.da=null}wT.prototype=new l;wT.prototype.constructor=wT;wT.prototype.Tg=function(){return this.da.db()};wT.prototype.gf=function(a){return a&&a.$classData&&a.$classData.m.lh?a.ad().db():this.da.db()};
+function Zk(a){var b=new wT;if(null===a)throw pg(qg(),null);b.da=a;return b}wT.prototype.$classData=g({nia:0},!1,"scala.collection.generic.GenSetFactory$$anon$1",{nia:1,d:1,Ir:1});function xT(){this.s=null}xT.prototype=new Qma;xT.prototype.constructor=xT;function yT(){}yT.prototype=xT.prototype;xT.prototype.b=function(){this.s=(new zT).uv(this);return this};
+function bfa(a,b){var d=Iv();if(Em(Fm(),2,d.Xg(0)))throw(new Re).c("zero step");a=a.db();a.oc(Vra(Wra(),b,d));for(var e=0;;)if(Mla(Nla(d,2),d.Xg(0))?Mla(Nla(d,b),e):Mla(Nla(d,e),b)){a.Ma(e);var f=new eT;rB.prototype.wda.call(f,d,e);e=f;e=e.da.Jj(e.Mv,2)}else break;return a.Ba()}function AT(){this.da=null}AT.prototype=new l;AT.prototype.constructor=AT;function BT(){}BT.prototype=AT.prototype;AT.prototype.Tg=function(){return this.da.db()};AT.prototype.gf=function(a){return a.ad().db()};
+AT.prototype.uv=function(a){if(null===a)throw pg(qg(),null);this.da=a;return this};function CT(){}CT.prototype=new Oma;CT.prototype.constructor=CT;function Xra(){}Xra.prototype=CT.prototype;function DT(){this.FF=null}DT.prototype=new Tma;DT.prototype.constructor=DT;function Yra(a,b){a.FF=b;b=new ET;if(null===a)throw pg(qg(),null);b.Qa=a}DT.prototype.zD=function(a,b){return sb(this.FF,a,b)};DT.prototype.$classData=g({tia:0},!1,"scala.collection.immutable.HashMap$$anon$2",{tia:1,yia:1,d:1});
+function ET(){this.Qa=null}ET.prototype=new Tma;ET.prototype.constructor=ET;ET.prototype.zD=function(a,b){return sb(this.Qa.FF,b,a)};ET.prototype.$classData=g({uia:0},!1,"scala.collection.immutable.HashMap$$anon$2$$anon$3",{uia:1,yia:1,d:1});function FT(){}FT.prototype=new l;FT.prototype.constructor=FT;c=FT.prototype;c.b=function(){return this};c.y=function(){return this};c.Ia=function(){return this|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(){return!!this};
+c.za=function(a){return rb(this,a)};c.$classData=g({Hia:0},!1,"scala.collection.immutable.List$$anon$1",{Hia:1,d:1,fa:1});function GT(){this.Lc=this.Yl=this.vy=null;this.xa=!1}GT.prototype=new l;GT.prototype.constructor=GT;GT.prototype.ta=function(a){(this.xa?this.vy:Zra(this)).ta(a)};function $ra(a,b,d){a.Yl=d;a.Lc=se(b);return a}GT.prototype.ya=function(a,b){return(this.xa?this.vy:Zra(this)).ya(a,b)};function Zra(a){if(!a.xa){var b=HT(a.Lc,a.Yl,!1);a.Lc=null;a.vy=b;a.xa=!0}return a.vy}
+GT.prototype.$classData=g({pja:0},!1,"scala.collection.immutable.Stream$StreamWithFilter",{pja:1,d:1,ib:1});function asa(a,b){b=b.yf();switch(b){case -1:break;default:a.oc(b)}}function IT(a,b,d){b=b.yf();switch(b){case -1:break;default:a.oc(b+d|0)}}function JT(a,b,d){d=d.yf();switch(d){case -1:break;default:a.oc(b<d?b:d)}}
+var Yha=g({Zka:0},!1,"scala.scalajs.js.Dynamic",{Zka:1,Xka:1,Tra:1},!0,void 0,function(){throw new ba.TypeError("Cannot call isInstance() on a Class representing a raw JS trait/object");}),Pha=g({ala:0},!1,"scala.scalajs.js.Object",{ala:1,d:1,Xka:1},!0,void 0,function(a){return a instanceof ba.Object});function Tw(){}Tw.prototype=new l;Tw.prototype.constructor=Tw;Tw.prototype.b=function(){return this};Tw.prototype.Tg=function(){return(new KT).b()};Tw.prototype.gf=function(){return(new KT).b()};
+Tw.prototype.$classData=g({dla:0},!1,"scala.scalajs.js.WrappedDictionary$$anon$1",{dla:1,d:1,Ir:1});function LT(){}LT.prototype=new l;LT.prototype.constructor=LT;function bsa(){}bsa.prototype=LT.prototype;LT.prototype.l=function(){return"\x3cfunction0\x3e"};function MT(){}MT.prototype=new l;MT.prototype.constructor=MT;function NT(){}NT.prototype=MT.prototype;MT.prototype.Ia=function(a){return this.y(a)|0};MT.prototype.l=function(){return"\x3cfunction1\x3e"};MT.prototype.Ja=function(a){return!!this.y(a)};
+MT.prototype.za=function(a){return rb(this,a)};function OT(){}OT.prototype=new l;OT.prototype.constructor=OT;function csa(){}csa.prototype=OT.prototype;OT.prototype.l=function(){return"\x3cfunction2\x3e"};function PT(){}PT.prototype=new l;PT.prototype.constructor=PT;function dsa(){}dsa.prototype=PT.prototype;PT.prototype.l=function(){return"\x3cfunction3\x3e"};function QT(){}QT.prototype=new l;QT.prototype.constructor=QT;function esa(){}esa.prototype=QT.prototype;QT.prototype.l=function(){return"\x3cfunction4\x3e"};
+function aT(){this.bx=null;this.Ya=this.Ua=0}aT.prototype=new l;aT.prototype.constructor=aT;c=aT.prototype;c.Bw=function(a,b){if(0>a)throw(new RT).hb(a);if(b>this.sa())throw(new RT).hb(b);if(b<=a)return(new aT).wp(this.bx,0,0);var d=this.Ua+a|0;return(new aT).wp(this.bx,d,d+(b-a|0)|0)};c.l=function(){var a=this.Ua,a=0<a?a:0,b=this.bx.n.length,d=a+this.sa()|0,b=b<d?b:d;return a>=b?"":Pna(Ia(),this.bx,a,b-a|0)};c.sa=function(){var a=this.Ya-this.Ua|0;return 0>a?0:a};
+c.wp=function(a,b,d){this.bx=a;this.Ua=b;this.Ya=d;return this};c.$classData=g({wla:0},!1,"scala.runtime.ArrayCharSequence",{wla:1,d:1,Hv:1});function vC(){this.Ca=!1}vC.prototype=new l;vC.prototype.constructor=vC;vC.prototype.l=function(){return""+this.Ca};vC.prototype.ud=function(a){this.Ca=a;return this};vC.prototype.$classData=g({xla:0},!1,"scala.runtime.BooleanRef",{xla:1,d:1,h:1});function zE(a){return!!(a&&a.$classData&&1===a.$classData.ys&&a.$classData.xs.m.e_)}
+var Ba=g({e_:0},!1,"scala.runtime.BoxedUnit",{e_:1,d:1,h:1},void 0,void 0,function(a){return void 0===a});function Yb(){this.Ca=0}Yb.prototype=new l;Yb.prototype.constructor=Yb;Yb.prototype.Bj=function(a){this.Ca=a;return this};Yb.prototype.l=function(){return""+this.Ca};Yb.prototype.$classData=g({zla:0},!1,"scala.runtime.DoubleRef",{zla:1,d:1,h:1});function hC(){this.Ca=0}hC.prototype=new l;hC.prototype.constructor=hC;hC.prototype.l=function(){return""+this.Ca};
+hC.prototype.hb=function(a){this.Ca=a;return this};hC.prototype.$classData=g({Ala:0},!1,"scala.runtime.IntRef",{Ala:1,d:1,h:1});function Vb(){this.Ca=Rz()}Vb.prototype=new l;Vb.prototype.constructor=Vb;Vb.prototype.AE=function(a){this.Ca=a;return this};Vb.prototype.l=function(){var a=this.Ca,b=a.ia,a=a.oa;return GD(Sa(),b,a)};Vb.prototype.$classData=g({Ela:0},!1,"scala.runtime.LongRef",{Ela:1,d:1,h:1});function jl(){this.Ca=null}jl.prototype=new l;jl.prototype.constructor=jl;
+jl.prototype.l=function(){return""+this.Ca};jl.prototype.i=function(a){this.Ca=a;return this};jl.prototype.$classData=g({Hla:0},!1,"scala.runtime.ObjectRef",{Hla:1,d:1,h:1});function ST(){this.dW=this.mD=this.vH=this.eW=this.jq=this.nF=this.rq=this.un=this.fk=null}ST.prototype=new l;ST.prototype.constructor=ST;function TT(a,b,d){return 0===d?fsa(a,b):0===b.ia&&0===b.oa&&0<=d&&d<a.mD.n.length?a.mD.n[d]:(new RQ).BE(b,d)}
+ST.prototype.b=function(){UT=this;this.fk=(new RQ).ha(0,0);this.un=(new RQ).ha(1,0);this.rq=(new RQ).ha(10,0);this.nF=gsa(28,5);var a=this.nF.n.length,b;b=[];for(var d=0;d<a;){var e=d,e=VT(WT(),WT().nF.n[e]);b.push(e);d=1+d|0}ka(Xa(db),b);this.jq=gsa(19,10);a=this.jq.n.length;b=[];for(d=0;d<a;)e=d,e=VT(WT(),WT().jq.n[e]),b.push(e),d=1+d|0;this.eW=ka(Xa(db),b);a=[];for(b=0;11>b;)d=b,d=(new RQ).ha(d,0),a.push(d),b=1+b|0;this.vH=ka(Xa(hsa),a);a=[];for(b=0;11>b;)d=b,d=(new RQ).ha(0,d),a.push(d),b=1+b|
+0;this.mD=ka(Xa(hsa),a);a=[];for(b=0;100>b;)a.push(48),b=1+b|0;this.dW=ka(Xa($a),a);return this};
+function isa(a,b,d,e){var f;if(f=e<a.jq.n.length){f=b.Me;var h=d.Me+a.eW.n[e]|0;f=64>(1+(f>h?f:h)|0)}if(f){f=d.Ud;d=f.ia;f=f.oa;var h=a.jq.n[e],k=h.ia;e=65535&d;var n=d>>>16|0,r=65535&k,y=k>>>16|0,E=ea(e,r),r=ea(n,r),Q=ea(e,y);e=E+((r+Q|0)<<16)|0;E=(E>>>16|0)+Q|0;d=(((ea(d,h.oa)+ea(f,k)|0)+ea(n,y)|0)+(E>>>16|0)|0)+(((65535&E)+r|0)>>>16|0)|0;h=b.Ud;f=h.ia;h=h.oa;e=f+e|0;return TT(a,(new Xb).ha(e,(-2147483648^e)<(-2147483648^f)?1+(h+d|0)|0:h+d|0),b.Rb)}a=tf();d=XT(d);e=(new Xb).ha(e,e>>31);f=a.jD.n.length;
+h=f>>31;k=e.oa;a=(k===h?(-2147483648^e.ia)<(-2147483648^f):k<h)?Cba(d,a.jD.n[e.ia]):Of(d,Tf(a,e));d=XT(b);return(new RQ).Uq(zf(Ef(),d,a),b.Rb)}function jsa(a,b,d,e){a=0>d?-d|0:d;var f=0===d?0:0>d?-1:1;if(Lf().lD===e)return f;if(Lf().qA===e)return 0;if(Lf().pA===e)return 0<f?f:0;if(Lf().sA===e)return 0>f?f:0;if(Lf().uA===e)return 5<=a?f:0;if(Lf().tA===e)return 5<a?f:0;if(Lf().sx===e)return 5<(a+b|0)?f:0;if(Lf().kD===e){if(0===d)return 0;throw(new YT).c("Rounding necessary");}throw(new q).i(e);}
+function ZT(a,b){a=b.oa;(-1===a?0>(-2147483648^b.ia):-1>a)?a=!0:(a=b.oa,a=0===a?-1<(-2147483648^b.ia):0<a);if(a)throw(new YT).c("Out of int range: "+b);return b.ia}function fsa(a,b){if(0<=b.oa)var d=b.oa,d=0===d?-2147483637>(-2147483648^b.ia):0>d;else d=!1;return d?a.vH.n[b.ia]:(new RQ).BE(b,0)}function VT(a,b){b=0>b.oa?(new Xb).ha(~b.ia,~b.oa):b;a=b.ia;b=b.oa;return 64-(0!==b?ga(b):32+ga(a)|0)|0}
+function gsa(a,b){var d;d=[];if(0<a){var e=(new Xb).ha(1,0),f=1,h=e;for(d.push(null===h?null:h);f<a;){var h=Ra(e),e=h.ia,h=h.oa,k=b>>31,n=65535&e,r=e>>>16|0,y=65535&b,E=b>>>16|0,Q=ea(n,y),y=ea(r,y),R=ea(n,E),n=Q+((y+R|0)<<16)|0,Q=(Q>>>16|0)+R|0,e=(((ea(e,k)+ea(h,b)|0)+ea(r,E)|0)+(Q>>>16|0)|0)+(((65535&Q)+y|0)>>>16|0)|0,e=(new Xb).ha(n,e),f=1+f|0,h=e;d.push(null===h?null:h)}}return ka(Xa(eb),d)}
+function ksa(a,b){var d=b.ia;return b.ia===d&&b.oa===d>>31?TT(a,Rz(),b.ia):0<=b.oa?(new RQ).ha(0,2147483647):(new RQ).ha(0,-2147483648)}ST.prototype.$classData=g({T_:0},!1,"java.math.BigDecimal$",{T_:1,d:1,k:1,h:1});var UT=void 0;function WT(){UT||(UT=(new ST).b());return UT}function $T(){this.iD=this.DT=this.Lx=this.fk=this.rq=this.un=null}$T.prototype=new l;$T.prototype.constructor=$T;
+$T.prototype.b=function(){aU=this;this.un=(new df).ha(1,1);this.rq=(new df).ha(1,10);this.fk=(new df).ha(0,0);this.Lx=(new df).ha(-1,1);var a=[this.fk,this.un,(new df).ha(1,2),(new df).ha(1,3),(new df).ha(1,4),(new df).ha(1,5),(new df).ha(1,6),(new df).ha(1,7),(new df).ha(1,8),(new df).ha(1,9),this.rq],b=(new J).j(a),a=b.qa.length|0,a=la(Xa(Xe),[a]),d;d=0;for(b=Ye(new Ze,b,0,b.qa.length|0);b.ra();){var e=b.ka();a.n[d]=e;d=1+d|0}this.DT=a;a=[];for(d=0;32>d;)b=d,b=Cf(ff(),(new Xb).ha(0===(32&b)?1<<
+b:0,0===(32&b)?0:1<<b)),a.push(null===b?null:b),d=1+d|0;this.iD=ka(Xa(Xe),a);return this};function lsa(a,b){if(b<a.iD.n.length)return a.iD.n[b];a=b>>5;b&=31;var d=la(Xa(db),[1+a|0]);d.n[a]=1<<b;return cf(new df,1,1+a|0,d)}function Cf(a,b){if(0>b.oa)return-1!==b.ia||-1!==b.oa?(a=b.ia,b=b.oa,msa(new df,-1,(new Xb).ha(-a|0,0!==a?~b:-b|0))):a.Lx;var d=b.oa;return(0===d?-2147483638>=(-2147483648^b.ia):0>d)?a.DT.n[b.ia]:msa(new df,1,b)}
+$T.prototype.$classData=g({U_:0},!1,"java.math.BigInteger$",{U_:1,d:1,k:1,h:1});var aU=void 0;function ff(){aU||(aU=(new $T).b());return aU}function bU(){this.hs=this.kD=this.sx=this.tA=this.uA=this.sA=this.pA=this.qA=this.lD=null}bU.prototype=new l;bU.prototype.constructor=bU;
+bU.prototype.b=function(){cU=this;this.lD=(new dU).Jd("UP",0);this.qA=(new dU).Jd("DOWN",1);this.pA=(new dU).Jd("CEILING",2);this.sA=(new dU).Jd("FLOOR",3);this.uA=(new dU).Jd("HALF_UP",4);this.tA=(new dU).Jd("HALF_DOWN",5);this.sx=(new dU).Jd("HALF_EVEN",6);this.kD=(new dU).Jd("UNNECESSARY",7);var a=(new J).j([this.lD,this.qA,this.pA,this.sA,this.uA,this.tA,this.sx,this.kD]),b=a.qa.length|0,b=la(Xa(nsa),[b]),d;d=0;for(a=Ye(new Ze,a,0,a.qa.length|0);a.ra();){var e=a.ka();b.n[d]=e;d=1+d|0}this.hs=
+b;return this};bU.prototype.$classData=g({c0:0},!1,"java.math.RoundingMode$",{c0:1,d:1,k:1,h:1});var cU=void 0;function Lf(){cU||(cU=(new bU).b());return cU}function eU(){VE.call(this)}eU.prototype=new loa;eU.prototype.constructor=eU;eU.prototype.b=function(){VE.prototype.Kd.call(this,"/system/tokens-core.txt","org.nlogo.core.prim.");return this};eU.prototype.$classData=g({x0:0},!1,"org.nlogo.core.DefaultTokenMapper$",{x0:1,mJ:1,d:1,r1:1});var osa=void 0;function fU(){this.RH=null;this.a=!1}
+fU.prototype=new l;fU.prototype.constructor=fU;fU.prototype.b=function(){gU=this;this.RH=(new hU).it(G(rc().ri,u()));this.a=!0;return this};function Wda(a,b){return(new hU).it(G(rc().ri,u()).$c(b,(Mj(),Nj().pc)))}function psa(){var a=eo();if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/LogoList.scala: 11");return a.RH}fU.prototype.$classData=g({J0:0},!1,"org.nlogo.core.LogoList$",{J0:1,d:1,k:1,h:1});var gU=void 0;
+function eo(){gU||(gU=(new fU).b());return gU}function iU(){this.OU=this.QU=null;this.xa=0}iU.prototype=new l;iU.prototype.constructor=iU;iU.prototype.b=function(){return this};
+function qsa(){var a=rsa();if(0===(2&a.xa)<<24>>24&&0===(2&a.xa)<<24>>24){var b=$h(),d=G(t(),(new J).j("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(";"))).Sa();a.OU=gca(b,d.Oc()).wb();a.xa=(2|a.xa)<<24>>24}return a.OU}
+function ssa(){var a=rsa();if(0===(1&a.xa)<<24>>24&&0===(1&a.xa)<<24>>24){var b=$h(),d=G(t(),(new J).j("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(";"))).Sa();a.QU=
+ica(b,d.Oc()).wb();a.xa=(1|a.xa)<<24>>24}return a.QU}iU.prototype.$classData=g({K0:0},!1,"org.nlogo.core.Model$",{K0:1,d:1,k:1,h:1});var tsa=void 0;function rsa(){tsa||(tsa=(new iU).b());return tsa}function jU(){this.a=0}jU.prototype=new l;jU.prototype.constructor=jU;jU.prototype.b=function(){return this};jU.prototype.$classData=g({T0:0},!1,"org.nlogo.core.NumericInput$",{T0:1,d:1,k:1,h:1});var usa=void 0;function kU(){this.pe=this.Gi=null;this.lA=0;this.ma=null;this.a=!1}kU.prototype=new l;
+kU.prototype.constructor=kU;kU.prototype.wc=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/AstNode.scala: 65");return this.ma};function Nb(a,b,d){var e=new kU;e.Gi=a;e.pe=b;e.lA=d;b=WN(a).ma.Ua;a=WN(a);e.ma=Xl(new Yl,b,d,a.ma.bb);e.a=!0;return e}kU.prototype.$classData=g({KI:0},!1,"org.nlogo.core.ProcedureDefinition",{KI:1,d:1,kq:1,No:1});function lU(){}lU.prototype=new l;lU.prototype.constructor=lU;lU.prototype.b=function(){return this};
+function npa(){var a=AP(),b=goa(zP(a)),d=HE(zP(a)),e=hoa(zP(a)),f=G(t(),u()),h=G(t(),u()),k=Wg(Xg(),u()),n=Wg(Xg(),u());return So(f,h,b,d,e,k,n,a)}lU.prototype.$classData=g({$0:0},!1,"org.nlogo.core.Program$",{$0:1,d:1,k:1,h:1});var vsa=void 0;function opa(){vsa||(vsa=(new lU).b());return vsa}function mU(){this.KH=null;this.a=!1}mU.prototype=new l;mU.prototype.constructor=mU;mU.prototype.b=function(){this.KH="default";this.a=!0;return this};
+function wsa(a){if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/ShapeList.scala: 9");return a.KH}function lga(a,b){a=m(new p,function(){return function(a){var b=a.we();return(new w).e(b,a)}}(a));var d=Mc();return b.ya(a,d.s).De(Ne().ml)}mU.prototype.$classData=g({e1:0},!1,"org.nlogo.core.ShapeList$",{e1:1,d:1,k:1,h:1});var xsa=void 0;function zt(){xsa||(xsa=(new mU).b());return xsa}function Hb(){this.ng=this.Ts=null;this.xe=!1}Hb.prototype=new l;
+Hb.prototype.constructor=Hb;c=Hb.prototype;c.ht=function(a,b,d){this.Ts=a;this.ng=b;this.xe=d;return this};c.Ap=function(a,b){Hb.prototype.ht.call(this,a,b,!1);return this};c.wc=function(){if(this.ng.z())return Xl(new Yl,0,0,this.Ts);var a=this.ng.X(0).wc().Ua,b=this.ng.nd();return Xl(new Yl,a,b.wc().Ya,this.Ts)};c.l=function(){return this.ng.Ab(" ")};c.c=function(a){Hb.prototype.ht.call(this,a,G(t(),u()),!1);return this};c.$classData=g({MA:0},!1,"org.nlogo.core.Statements",{MA:1,d:1,kq:1,No:1});
+function nU(){this.a=0}nU.prototype=new l;nU.prototype.constructor=nU;nU.prototype.b=function(){return this};nU.prototype.$classData=g({k1:0},!1,"org.nlogo.core.StringInput$",{k1:1,d:1,k:1,h:1});var ysa=void 0;function oU(){this.Sd=null;this.a=!1}oU.prototype=new l;oU.prototype.constructor=oU;oU.prototype.b=function(){zsa=this;opa();this.Sd=Wo(new Xo,npa(),(ap(),Yg()),(ap(),Wg(Ne().qi,u())),(ap(),G(t(),u())),(ap(),G(t(),u())),(ap(),G(t(),u())));this.a=!0;return this};
+oU.prototype.$classData=g({o1:0},!1,"org.nlogo.core.StructureResults$",{o1:1,d:1,k:1,h:1});var zsa=void 0;function ap(){zsa||(zsa=(new oU).b())}function pU(){this.a=this.nT=this.GH=this.JT=this.CH=this.rT=this.yT=this.AH=this.zT=this.sT=this.pT=this.yH=this.FH=this.xT=this.ST=this.wT=this.sH=this.AT=this.HH=this.hI=this.tT=this.NT=this.mT=this.tH=this.iI=this.uT=this.OT=this.jI=this.IT=this.zH=this.qT=this.QT=0}pU.prototype=new l;pU.prototype.constructor=pU;
+function aj(a){if(0===(32&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 203");return a.OT}
+pU.prototype.b=function(){qU=this;this.QT=0;this.a|=1;this.qT=1;this.a|=2;this.zH=2;this.a|=4;this.IT=4;this.a|=8;this.jI=8;this.a|=16;this.OT=16;this.a|=32;this.uT=32;this.a|=64;this.iI=64;this.a|=128;this.tH=aj(this)|nj(this)|oj(this);this.a|=256;this.mT=128;this.a|=512;this.NT=256;this.a|=1024;this.tT=512;this.a|=2048;this.hI=1024;this.a|=4096;this.HH=2048;this.a|=8192;this.AT=4096;this.a|=16384;this.sH=pj(this)|qj(this)|rj(this);this.a|=32768;this.wT=M(this)|Xi(this)|Yi(this)|Zi(this)|Wi(this);
+this.a|=65536;this.ST=M(this)|Xi(this)|Yi(this)|Zi(this)|Vi(this)|$i(this)|Wi(this)|tj(this)|sj(this);this.a|=131072;this.xT=8192;this.a|=262144;this.FH=16384;this.a|=524288;this.yH=32768;this.a|=1048576;this.pT=65536;this.a|=2097152;this.sT=131072;this.a|=4194304;this.zT=xj(this)|yj(this)|wj(this);this.a|=8388608;this.AH=Zi(this)|uj(this)|vj(this);this.a|=16777216;this.yT=262144;this.a|=33554432;this.rT=524288;this.a|=67108864;this.CH=1048576;this.a|=134217728;this.JT=2097152;this.a|=268435456;this.GH=
+0;this.a|=536870912;this.nT=10;this.a|=1073741824;return this};function Ti(){var a=A();if(0===(262144&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 270");return a.xT}function qc(a,b,d,e,f,h,k,n){var r=new F;if(0===(536870912&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 318");return D(r,a.GH,B(),b,B(),d,e,!1,f,h,k||h.ba(),n)}
+function zj(){var a=A();if(0===(134217728&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 311");return a.CH}function xj(a){if(0===(1048576&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 278");return a.yH}
+function Ui(){var a=A();if(0===(16777216&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 292");return a.AH}function Rm(a,b,d){return 0!==(b&d)}function z(){var a=A();if(0===(1073741824&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 319");return a.nT}
+function vj(a){if(0===(8388608&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 291");return a.zT}function nj(a){if(0===(64&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 208");return a.uT}function Si(){var a=A();if(0===(33554432&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 299");return a.yT}
+function mr(){var a=A();if(0===(65536&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 261");return a.wT}function Vi(a){if(0===(32768&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 255");return a.sH}function Aj(){var a=A();if(0===(268435456&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 316");return a.JT}
+function Zi(a){if(0===(16&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 198");return a.jI}function rj(a){if(0===(4096&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 239");return a.hI}function Bj(){var a=A();if(0===(67108864&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 306");return a.rT}
+function pj(a){if(0===(1024&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 229");return a.NT}function uj(a){if(0===(524288&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 274");return a.FH}function wj(a){if(0===(4194304&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 286");return a.sT}
+function M(a){if(0===(2&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 183");return a.qT}function sj(a){if(0===(16384&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 249");return a.AT}function Yi(a){if(0===(8&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 193");return a.IT}
+function Wi(a){if(0===(512&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 224");return a.mT}function Xi(a){if(0===(4&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 188");return a.zH}function oj(a){if(0===(128&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 213");return a.iI}
+function B(){var a=A();if(0===(1&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 180");return a.QT}function qj(a){if(0===(2048&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 234");return a.tT}function $i(a){if(0===(256&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 219");return a.tH}
+function yj(a){if(0===(2097152&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 282");return a.pT}function nc(){var a=A();if(0===(131072&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 268");return a.ST}function tj(a){if(0===(8192&a.a))throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Syntax.scala: 244");return a.HH}
+pU.prototype.$classData=g({p1:0},!1,"org.nlogo.core.Syntax$",{p1:1,d:1,k:1,h:1});var qU=void 0;function A(){qU||(qU=(new pU).b());return qU}function rU(){this.TH=null;this.a=!1}rU.prototype=new l;rU.prototype.constructor=rU;rU.prototype.b=function(){sU=this;this.TH=Fl(new Gl,"",Ec(),"",Xl(new Yl,2147483647,2147483647,""));this.a=!0;return this};
+function Zl(){var a;sU||(sU=(new rU).b());a=sU;if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Token.scala: 15");return a.TH}rU.prototype.$classData=g({q1:0},!1,"org.nlogo.core.Token$",{q1:1,d:1,k:1,h:1});var sU=void 0;function tU(){}tU.prototype=new l;tU.prototype.constructor=tU;function Asa(){}Asa.prototype=tU.prototype;tU.prototype.hb=function(){return this};function ek(){}ek.prototype=new oN;ek.prototype.constructor=ek;c=ek.prototype;c.b=function(){return this};
+c.rm=function(a){x();a=(new J).j([void 0,a.Wa,a.lb,a.Na,a.kb,a.cb,a.Bc,a.tp,void 0,void 0,a.An,void 0,a.So,void 0,void 0,a.jp?0:1]);var b=x().s;return K(a,b)};
+c.sm=function(a){a:{x();var b=(new H).i(a);if(null!==b.Q&&0===ng(b.Q,16)){var d=b.Q.X(1),e=b.Q.X(2),f=b.Q.X(3),h=b.Q.X(4),k=b.Q.X(5),n=b.Q.X(6),r=b.Q.X(7),y=b.Q.X(10),E=b.Q.X(12),b=b.Q.X(15);if(Qa(d)&&(d|=0,Qa(e)&&(e|=0,Qa(f)&&(f|=0,Qa(h)&&(h|=0,uU(k)&&uU(n)&&"boolean"===typeof r&&(r=!!r,y&&y.$classData&&y.$classData.m.wx&&uU(E)&&Qa(b)))))))break a}throw(new q).i(a);}return Bsa(n,d|0,e|0,f|0,h|0,k,!!r,y,E,0===(b|0))};c.xm=function(){return(new An).Mg(pa(Csa))};
+c.Uh=function(){x();var a=(new vU).c("BUTTON"),b=(new wU).La(C()),d=(new wU).La(C()),e=(new wU).La(C()),f=(new wU).La(C()),h=xU(new yU,(new zU).La(C())),k=xU(new yU,(new AU).La(C())),n=(new BU).La(C()),r=(new CU).c("1"),y=(new CU).c("T");x();var E=Ei(),E=(new w).e("OBSERVER",E),Q=Gi(),Q=(new w).e("PATCH",Q),R=Fi(),R=(new w).e("TURTLE",R),da=Hi(),E=[E,Q,R,(new w).e("LINK",da)],E=(new J).j(E),Q=x().s,a=[a,b,d,e,f,h,k,n,r,y,(new DU).br(K(E,Q)),(new CU).c("NIL"),xU(new yU,(new EU).La(C())),(new CU).c("NIL"),
+(new CU).c("NIL"),(new wU).La(C())],a=(new J).j(a),b=x().s;return K(a,b)};c.$classData=g({M1:0},!1,"org.nlogo.core.model.ButtonReader$",{M1:1,pn:1,d:1,qn:1});var dk=void 0;function Hk(){}Hk.prototype=new oN;Hk.prototype.constructor=Hk;c=Hk.prototype;c.b=function(){return this};function Dsa(a,b){if(vh()===b)return"nobody";if(zg(b)){eo();var d=Nj().pc,d=Nc(b,d);for(b=Qj(b.xc);b.oi;){var e=b.ka();d.Ma(Dsa(a,e))}return Wda(0,d.Ba())}return b}
+function Esa(a,b){x();var d=b.Wa,e=b.lb,f=b.Na,h=b.kb,k=b.cb,n=b.td,r=b.$o;a=function(){return function(a){var b=Nn();a=a.lm();return ac(b,a,!0,!1)}}(a);var y=x().s;if(y===x().s)if(r===u())a=u();else{for(var y=r.Y(),E=y=Og(new Pg,a(y),u()),r=r.$();r!==u();)var Q=r.Y(),Q=Og(new Pg,a(Q),u()),E=E.Ka=Q,r=r.$();a=y}else{for(y=Nc(r,y);!r.z();)E=r.Y(),y.Ma(a(E)),r=r.$();a=y.Ba()}b=[void 0,d,e,f,h,k,n,a.Ab(" "),b.fp];b=(new J).j(b);d=x().s;return K(b,d)}c.rm=function(a){return Esa(this,a)};
+c.sm=function(a){return Fsa(this,a)};
+function Fsa(a,b){a:{x();var d=(new H).i(b);if(null!==d.Q&&0===ng(d.Q,9)){var e=d.Q.X(1),f=d.Q.X(2),h=d.Q.X(3),k=d.Q.X(4),n=d.Q.X(5),r=d.Q.X(6),y=d.Q.X(7),d=d.Q.X(8);if(Qa(e)&&(e|=0,Qa(f)&&(f|=0,Qa(h)&&(h|=0,Qa(k))))){var E=k|0;if(uU(n)&&uU(r)&&vg(y)&&Qa(d))break a}}throw(new q).i(b);}b=e|0;k=f|0;h|=0;e=E|0;d|=0;f=Kfa(0,"["+y+"]");y=Nj().pc;y=Nc(f,y);for(f=Qj(f.xc);f.oi;)E=f.ka(),y.Ma(Dsa(a,E));y=y.Ba();a=m(new p,function(){return function(a){return Kba(Mba(),a)}}(a));f=Nj();return Gsa(new FU,r,b,
+k,h,e,n,y.ya(a,f.pc).wb(),d)}c.xm=function(){return(new An).Mg(pa(Hsa))};c.Uh=function(){x();var a=[(new vU).c("CHOOSER"),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),xU(new yU,(new AU).La(C())),xU(new yU,(new zU).La(C())),(new zU).La(C()),(new wU).La(C())],a=(new J).j(a),b=x().s;return K(a,b)};c.$classData=g({N1:0},!1,"org.nlogo.core.model.ChooserReader$",{N1:1,pn:1,d:1,qn:1});var Gk=void 0;function Nk(){}Nk.prototype=new oN;Nk.prototype.constructor=Nk;c=Nk.prototype;c.b=function(){return this};
+c.rm=function(a){x();var b=a.Wa,d=a.lb,e=a.Na,f=a.kb,h=a.td,k=a.vm.iU(),n;n=a.vm;if(GU(n))n=!1;else if(HU(n))n=n.lr;else throw(new q).i(n);a=[void 0,b,d,e,f,h,k,void 0,n,a.vm.we()];a=(new J).j(a);b=x().s;return K(a,b)};
+c.sm=function(a){a:{x();var b=(new H).i(a);if(null!==b.Q&&0===ng(b.Q,10)){var d=b.Q.X(0),e=b.Q.X(1),f=b.Q.X(2),h=b.Q.X(3),k=b.Q.X(4),n=b.Q.X(5),r=b.Q.X(6),y=b.Q.X(8),b=b.Q.X(9);if(void 0===d&&Qa(e)&&(d=e|0,Qa(f)&&(e=f|0,Qa(h)&&(h|=0,Qa(k))))){var E=k|0;if(uU(n)&&vg(r)&&"boolean"===typeof y&&(f=!!y,vg(b)))break a}}throw(new q).i(a);}a=d|0;y=e|0;k=h|0;h=E|0;f=!!f;if("Number"===b||"Color"===b){f=(new Tb).c(r);d=Ch();r=new IU;f=Bh(d,f.U);usa||(usa=(new jU).b());if("Number"===b)b=JU();else if("Color"===
+b)b=KU();else throw(new q).i(b);b=LU(r,f,b)}else{if("String"!==b&&"String (reporter)"!==b&&"String (commands)"!==b)throw pg(qg(),(new Ag).c("Couldn't find corresponding input box type for "+b));d=new MU;ysa||(ysa=(new nU).b());if("String"===b)b=Isa();else if("String (reporter)"===b)b=Jsa();else if("String (commands)"===b)b=Ksa();else throw(new q).i(b);b=Lsa(d,r,b,f)}return Msa(n,a,y,k,h,b)};c.xm=function(){return(new An).Mg(pa(Nsa))};
+c.Uh=function(){x();var a=[(new vU).c("INPUTBOX"),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),xU(new yU,(new zU).La(C())),(new NU).La(C()),(new CU).c("1"),(new OU).La(C()),(new zU).La(C())],a=(new J).j(a),b=x().s;return K(a,b)};c.$classData=g({O1:0},!1,"org.nlogo.core.model.InputBoxReader$",{O1:1,pn:1,d:1,qn:1});var Mk=void 0;function Bk(){}Bk.prototype=new oN;Bk.prototype.constructor=Bk;c=Bk.prototype;c.b=function(){return this};
+c.rm=function(a){x();a=(new J).j([void 0,a.Wa,a.lb,a.Na,a.kb,a.cb,a.Bc,a.ei,void 0,a.Td]);var b=x().s;return K(a,b)};c.sm=function(a){a:{x();var b=(new H).i(a);if(null!==b.Q&&0===ng(b.Q,10)){var d=b.Q.X(1),e=b.Q.X(2),f=b.Q.X(3),h=b.Q.X(4),k=b.Q.X(5),n=b.Q.X(6),r=b.Q.X(7),b=b.Q.X(9);if(Qa(d)&&(d|=0,Qa(e)&&(e|=0,Qa(f)&&(f|=0,Qa(h)&&(h|=0,uU(k)&&uU(n)&&Qa(r)&&(r|=0,Qa(b)))))))break a}throw(new q).i(a);}return Osa(n,d|0,e|0,f|0,h|0,k,r|0,b|0)};c.xm=function(){return(new An).Mg(pa(Psa))};
+c.Uh=function(){x();var a=[(new vU).c("MONITOR"),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),xU(new yU,(new zU).La(C())),xU(new yU,(new AU).La(C())),(new wU).La(C()),(new CU).c("1"),(new wU).La(C())],a=(new J).j(a),b=x().s;return K(a,b)};c.$classData=g({S1:0},!1,"org.nlogo.core.model.MonitorReader$",{S1:1,pn:1,d:1,qn:1});var Ak=void 0;function Jk(){}Jk.prototype=new oN;Jk.prototype.constructor=Jk;c=Jk.prototype;c.b=function(){return this};
+c.rm=function(a){x();a=(new J).j([void 0,a.Wa,a.lb,a.Na,a.kb,a.Td]);var b=x().s;return K(a,b)};c.sm=function(a){a:{x();var b=(new H).i(a);if(null!==b.Q&&0===ng(b.Q,6)){var d=b.Q.X(1),e=b.Q.X(2),f=b.Q.X(3),h=b.Q.X(4),b=b.Q.X(5);if(Qa(d)&&(d|=0,Qa(e)&&(e|=0,Qa(f)&&(f|=0,Qa(h)&&(h|=0,Qa(b))))))break a}throw(new q).i(a);}return Qsa(d|0,e|0,f|0,h|0,b|0)};c.xm=function(){return(new An).Mg(pa(Rsa))};
+c.Uh=function(){x();var a=[(new vU).c("OUTPUT"),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),(new wU).La(C())],a=(new J).j(a),b=x().s;return K(a,b)};c.$classData=g({T1:0},!1,"org.nlogo.core.model.OutputReader$",{T1:1,pn:1,d:1,qn:1});var Ik=void 0;function Fk(){}Fk.prototype=new oN;Fk.prototype.constructor=Fk;c=Fk.prototype;c.b=function(){return this};
+c.fH=function(a){for(var b=(new mc).b();;)if(a.z()?0:"PENS"!==a.Y())pc(b,a.Y()),a=a.$();else break;b=b.wb();return nN.prototype.fH.call(this,b)};function Ssa(a){x();a=[void 0,a.Wa,a.lb,a.Na,a.kb,a.cb,a.Go,a.Io,a.nj,a.mj,a.pj,a.oj,a.yn,a.Xn,'"'+Lg(Mg(),a.Bg)+'" "'+Lg(Mg(),a.Cg)+'"'];a=(new J).j(a);var b=x().s;return K(a,b)}
+function Tsa(a,b,d){for(var e=(new mc).b();;)if(b.z()?0:"PENS"!==b.Y())pc(e,b.Y()),b=b.$();else break;e=e.wb();if(1<Jm(b)){b=b.$();d=function(){return function(a){var b=ak();Ne();var d=(new Tb).c(a),d=Dj(d);ZD(0,34===(null===d?0:d.W));a=(new Tb).c(a);d=Aca(Uj(a));if(null===d)throw(new q).i(d);a=d.ja();for(var d=(new Tb).c(d.na()),e=d.U.length|0,f=0;;){if(f<e)var h=d.X(f),h=34!==(null===h?0:h.W);else h=!1;if(h)f=1+f|0;else break}d=Pi(d,f);if(null===d)throw(new q).i(d);var k=d.na(),d=d.ja().trim(),
+d=gE(Ia(),d,"\\s+"),e=x().s.Tg(),f=d.n.length;switch(f){case -1:break;default:e.oc(f)}e.Xb((new ci).$h(d));d=e.Ba();x();f=(new H).i(d);if(null!==f.Q&&0===ng(f.Q,4))var h=f.Q.X(0),e=f.Q.X(1),d=f.Q.X(2),ma=f.Q.X(3);else throw(new q).i(d);f=e;e=d;d=ma;Ne();Ph||(Ph=(new Oh).b());var ma=(new Tb).c(f),ra=ei(),ma=gi(ra,ma.U,10);ZD(0,0<=ma&&2>=ma);b=Vj(b,k);x();k=(new H).i(b);null!==k.Q&&0===ng(k.Q,2)?(b=k.Q.X(0),k=k.Q.X(1)):k=b="";a=Oi(Mg(),a);h=(new Tb).c(h);h=Bh(Ch(),h.U);f=(new Tb).c(f);f=gi(ei(),f.U,
+10);e=(new Tb).c(e);e=gi(ei(),e.U,10);d=(new Tb).c(d);return Usa(new PU,a,h,f,e,hi(d.U),Oi(Mg(),b),Oi(Mg(),k))}}(a,d);var f=x().s;if(f===x().s)if(b===u())d=u();else{var f=b.Y(),h=f=Og(new Pg,d(f),u());for(b=b.$();b!==u();){var k=b.Y(),k=Og(new Pg,d(k),u()),h=h.Ka=k;b=b.$()}d=f}else{for(f=Nc(b,f);!b.z();)h=b.Y(),f.Ma(d(h)),b=b.$();d=f.Ba()}}else d=u();b=a.Uh();f=x().s;b=rN(b,f);a=function(a,b){return function(a){if(null!==a){var d=a.ja();a=a.Gc();return a<Jm(b)?d.Fi(mi(b,a)):d.Mh().R()}throw(new q).i(a);
+}}(a,e);e=x().s;if(e===x().s)if(b===u())a=u();else{e=b.Y();f=e=Og(new Pg,a(e),u());for(b=b.$();b!==u();)h=b.Y(),h=Og(new Pg,a(h),u()),f=f.Ka=h,b=b.$();a=e}else{for(e=Nc(b,e);!b.z();)f=b.Y(),e.Ma(a(f)),b=b.$();a=e.Ba()}e=x();return Vsa(a.yc(d,e.s))}c.rV=function(a){return Wsa(this,a)};c.sm=function(a){return Vsa(a)};c.rm=function(a){return Ssa(a)};c.xm=function(){return(new An).Mg(pa(Xsa))};
+function Vsa(a){a:{x();var b=(new H).i(a);if(null!==b.Q&&0===ng(b.Q,16)){var d=b.Q.X(1),e=b.Q.X(2),f=b.Q.X(3),h=b.Q.X(4),k=b.Q.X(5),n=b.Q.X(6),r=b.Q.X(7),y=b.Q.X(8),E=b.Q.X(9),Q=b.Q.X(10),R=b.Q.X(11),da=b.Q.X(12),ma=b.Q.X(13),ra=b.Q.X(14),b=b.Q.X(15);if(Qa(d)&&(d|=0,Qa(e)&&(e|=0,Qa(f)))){var Ca=f|0;if(Qa(h)){var ab=h|0;if(uU(k)&&uU(n)&&uU(r)&&"number"===typeof y&&(y=+y,"number"===typeof E&&(E=+E,"number"===typeof Q&&(Q=+Q,"number"===typeof R&&(R=+R,"boolean"===typeof da&&(h=!!da,"boolean"===typeof ma&&
+(f=!!ma,vg(ra)&&Ng(b))))))))break a}}}throw(new q).i(a);}a=d|0;ma=e|0;da=Ca|0;d=ab|0;y=+y;E=+E;Q=+Q;R=+R;h=!!h;f=!!f;e=ra;ra=b;b=Vj(ak(),e);a:{x();Ca=(new H).i(b);if(null!==Ca.Q&&0===ng(Ca.Q,2)&&(e=Ca.Q.X(0),Ca=Ca.Q.X(1),null!==e&&null!==Ca))break a;throw(new q).i(b);}b=e;e=Ca;return Ysa(new QU,k,a,ma,da,d,n,r,y,E,Q,R,h,f,Oi(Mg(),b),Oi(Mg(),e),ra)}c.DX=function(a,b){return Tsa(this,a,b)};
+function Wsa(a,b){var d=a.Uh(),e=Ssa(b),f=x().s,e=qN(d,e,f),d=function(){return function(a){if(null!==a)return a.ja().yi(a.na());throw(new q).i(a);}}(a),f=x().s;if(f===x().s)if(e===u())d=u();else{for(var f=e.Y(),h=f=Og(new Pg,d(f),u()),e=e.$();e!==u();)var k=e.Y(),k=Og(new Pg,d(k),u()),h=h.Ka=k,e=e.$();d=f}else{for(f=Nc(e,f);!e.z();)h=e.Y(),f.Ma(d(h)),e=e.$();d=f.Ba()}d=d.Ab("\n");b=b.ko;a=function(){return function(a){ak();return Yj(Lg(Mg(),a.cb))+" "+a.Ol+" "+a.Sl+" "+a.Db+" "+a.Em+" "+Yj(Lg(Mg(),
+a.Bg))+" "+Yj(Lg(Mg(),a.Cg))}}(a);e=x().s;if(e===x().s)if(b===u())a=u();else{e=b.Y();f=e=Og(new Pg,a(e),u());for(b=b.$();b!==u();)h=b.Y(),h=Og(new Pg,a(h),u()),f=f.Ka=h,b=b.$();a=e}else{for(e=Nc(b,e);!b.z();)f=b.Y(),e.Ma(a(f)),b=b.$();a=e.Ba()}return d+"\nPENS\n"+a.Ab("\n")}
+c.Uh=function(){x();var a=[(new vU).c("PLOT"),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),xU(new yU,(new zU).La(C())),xU(new yU,(new zU).La(C())),xU(new yU,(new zU).La(C())),(new RU).La(C()),(new RU).La(C()),(new RU).La(C()),(new RU).La(C()),(new SU).La(C()),(new SU).La(C()),(new zU).La((new H).i('"" ""'))],a=(new J).j(a),b=x().s;return K(a,b)};c.$classData=g({V1:0},!1,"org.nlogo.core.model.PlotReader$",{V1:1,pn:1,d:1,qn:1});var Ek=void 0;function gk(){}gk.prototype=new oN;
+gk.prototype.constructor=gk;c=gk.prototype;c.b=function(){return this};c.rm=function(a){x();a=(new J).j([void 0,a.Wa,a.lb,a.Na,a.kb,a.cb,a.td,a.ao,a.Lm,a.Hb,a.en,void 0,a.eq,a.ip]);var b=x().s;return K(a,b)};
+c.sm=function(a){a:{x();var b=(new H).i(a);if(null!==b.Q&&0===ng(b.Q,14)){var d=b.Q.X(1),e=b.Q.X(2),f=b.Q.X(3),h=b.Q.X(4),k=b.Q.X(5),n=b.Q.X(6),r=b.Q.X(7),y=b.Q.X(8),E=b.Q.X(9),Q=b.Q.X(10),R=b.Q.X(12),b=b.Q.X(13);if(Qa(d)&&(d|=0,Qa(e)&&(e|=0,Qa(f)&&(f|=0,Qa(h)&&(h|=0,uU(k)&&uU(n)&&vg(r)&&vg(y)&&"number"===typeof E&&(E=+E,vg(Q)&&uU(R)&&b&&b.$classData&&b.$classData.m.CI))))))break a}throw(new q).i(a);}return Zsa(n,d|0,e|0,f|0,h|0,k,r,y,+E,Q,R,b)};c.xm=function(){return(new An).Mg(pa($sa))};
+c.Uh=function(){x();var a=(new vU).c("SLIDER"),b=(new wU).La(C()),d=(new wU).La(C()),e=(new wU).La(C()),f=(new wU).La(C()),h=xU(new yU,(new zU).La(C())),k=xU(new yU,(new zU).La(C())),n=(new zU).La(C()),r=(new zU).La(C()),y=(new RU).La(C()),E=(new zU).La(C()),Q=(new CU).c("1"),R=xU(new yU,(new zU).La(C()));x();var da=[(new w).e("HORIZONTAL",ata()),(new w).e("VERTICAL",bta())],da=(new J).j(da),ma=x().s,a=[a,b,d,e,f,h,k,n,r,y,E,Q,R,(new DU).br(K(da,ma))],a=(new J).j(a),b=x().s;return K(a,b)};
+c.$classData=g({W1:0},!1,"org.nlogo.core.model.SliderReader$",{W1:1,pn:1,d:1,qn:1});var fk=void 0;function Dk(){}Dk.prototype=new oN;Dk.prototype.constructor=Dk;c=Dk.prototype;c.b=function(){return this};c.rm=function(a){x();a=(new J).j([void 0,a.Wa,a.lb,a.Na,a.kb,a.cb,a.td,a.Lp,void 0,void 0]);var b=x().s;return K(a,b)};
+c.sm=function(a){a:{x();var b=(new H).i(a);if(null!==b.Q&&0===ng(b.Q,10)){var d=b.Q.X(1),e=b.Q.X(2),f=b.Q.X(3),h=b.Q.X(4),k=b.Q.X(5),n=b.Q.X(6),b=b.Q.X(7);if(Qa(d)&&(d|=0,Qa(e)&&(e|=0,Qa(f)&&(f|=0,Qa(h)&&(h|=0,uU(k)&&uU(n)&&"boolean"===typeof b)))))break a}throw(new q).i(a);}return cta(n,d|0,e|0,f|0,h|0,k,!!b)};c.xm=function(){return(new An).Mg(pa(dta))};
+c.Uh=function(){x();var a=[(new vU).c("SWITCH"),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),xU(new yU,(new zU).La(C())),xU(new yU,(new zU).La(C())),(new TU).La(C()),(new CU).c("1"),(new CU).c("-1000")],a=(new J).j(a),b=x().s;return K(a,b)};c.$classData=g({X1:0},!1,"org.nlogo.core.model.SwitchReader$",{X1:1,pn:1,d:1,qn:1});var Ck=void 0;function Lk(){}Lk.prototype=new oN;Lk.prototype.constructor=Lk;c=Lk.prototype;c.b=function(){return this};
+c.rm=function(a){x();a=(new J).j([void 0,a.Wa,a.lb,a.Na,a.kb,a.cb,a.Td,a.Db,a.Yr]);var b=x().s;return K(a,b)};c.sm=function(a){a:{x();var b=(new H).i(a);if(null!==b.Q&&0===ng(b.Q,9)){var d=b.Q.X(1),e=b.Q.X(2),f=b.Q.X(3),h=b.Q.X(4),k=b.Q.X(5),n=b.Q.X(6),r=b.Q.X(7),b=b.Q.X(8);if(Qa(d)&&(d|=0,Qa(e)&&(e|=0,Qa(f)&&(f|=0,Qa(h)&&(h|=0,uU(k)&&Qa(n)&&(n|=0,"number"===typeof r&&(r=+r,"boolean"===typeof b)))))))break a}throw(new q).i(a);}return eta(k,d|0,e|0,f|0,h|0,n|0,+r,!!b)};c.xm=function(){return(new An).Mg(pa(fta))};
+c.Uh=function(){x();var a=[(new vU).c("TEXTBOX"),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),(new wU).La(C()),xU(new yU,(new AU).La(C())),(new wU).La(C()),(new RU).La(C()),(new OU).La(C())],a=(new J).j(a),b=x().s;return K(a,b)};c.$classData=g({Y1:0},!1,"org.nlogo.core.model.TextBoxReader$",{Y1:1,pn:1,d:1,qn:1});var Kk=void 0;function zk(){}zk.prototype=new oN;zk.prototype.constructor=zk;c=zk.prototype;c.b=function(){return this};
+c.rm=function(a){x();a=[void 0,a.Wa,a.lb,a.Na,a.kb,void 0,void 0,Bga(a),void 0,a.Td,void 0,void 0,void 0,void 0,Cga(a),Dga(a),void 0,xga(a),yga(a),zga(a),Aga(a),a.fq,a.fq,a.Lr,a.Rr,a.Jq];a=(new J).j(a);var b=x().s;return K(a,b)};
+c.sm=function(a){a:{var b,d,e,f;if(di(a)){var h=a.Ka;if(di(h)){var k=h.Eb,h=h.Ka;if(Qa(k)&&(k|=0,di(h))){var n=h.Eb,r=h.Ka;if(Qa(n)&&(h=n|0,di(r))){var y=r.Eb,n=r.Ka;if(Qa(y)&&(r=y|0,di(n)&&(y=n.Eb,b=n.Ka,Qa(y)&&(n=y|0,di(b)&&(y=b.Ka,di(y)&&(b=y.Ka,di(b)&&(y=b.Eb,b=b.Ka,"number"===typeof y&&(y=+y,di(b))))))))){var E=b.Ka;if(di(E)&&(b=E.Eb,E=E.Ka,Qa(b)&&(b|=0,di(E)&&(E=E.Ka,di(E)&&(E=E.Ka,di(E)&&(E=E.Ka,di(E))))))){var Q=E.Ka;if(di(Q)&&(E=Q.Eb,Q=Q.Ka,"boolean"===typeof E&&(E=!!E,di(Q)))){var R=Q.Eb,
+da=Q.Ka;if("boolean"===typeof R&&(Q=!!R,di(da)&&(da=da.Ka,di(da)&&(R=da.Eb,da=da.Ka,Qa(R)&&(R|=0,di(da)))))){var ma=da.Eb,ra=da.Ka;if(Qa(ma)&&(da=ma|0,di(ra)&&(d=ra.Eb,ma=ra.Ka,Qa(d)&&(ra=d|0,di(ma)&&(d=ma.Eb,e=ma.Ka,Qa(d)&&(ma=d|0,di(e)&&(d=e.Eb,e=e.Ka,d&&d.$classData&&d.$classData.m.nJ&&di(e)&&(f=e.Ka,di(f))))))))){e=f.Eb;var Ca=f.Ka;if("boolean"===typeof e&&(f=!!e,di(Ca))){e=Ca.Eb;var ab=Ca.Ka;if(uU(e)&&di(ab)&&(Ca=ab.Eb,ab=ab.Ka,"number"===typeof Ca&&(Ca=+Ca,u().o(ab)))){a=b;b=d;d=f;f=Ca;break a}}}}}}}}}}}throw(new q).i(a);
+}return gta(new UU,k|0,h|0,r|0,n|0,hta(R|0,da|0,ra|0,ma|0,+y,!!E,!!Q),a|0,b,!!d,e,+f)};c.xm=function(){return(new An).Mg(pa(ita))};
+c.Uh=function(){x();var a=(new vU).c("GRAPHICS-WINDOW"),b=(new wU).La(C()),d=(new wU).La(C()),e=(new wU).La(C()),f=(new wU).La(C()),h=(new CU).c("-1"),k=(new CU).c("-1"),n=(new RU).La(C()),r=(new CU).c("1"),y=(new wU).La(C()),E=(new CU).c("1"),Q=(new CU).c("1"),R=(new CU).c("1"),da=(new CU).c("0"),ma=(new OU).La(C()),ra=(new OU).La(C()),Ca=(new CU).c("1"),ab=(new wU).La(C()),hb=(new wU).La(C()),mb=(new wU).La(C()),Wb=(new wU).La(C());x();var zc=[(new w).e("0",jta()),(new w).e("1",kta())],zc=(new J).j(zc),
+xb=x().s,zc=(new DU).br(K(zc,xb));x();var xb=[(new w).e("0",jta()),(new w).e("1",kta())],xb=(new J).j(xb),Wc=x().s,a=[a,b,d,e,f,h,k,n,r,y,E,Q,R,da,ma,ra,Ca,ab,hb,mb,Wb,zc,(new DU).br(K(xb,Wc)),(new OU).La(C()),xU(new yU,(new zU).La(C())),(new RU).La((new H).i(30))],a=(new J).j(a),b=x().s;return K(a,b)};c.$classData=g({Z1:0},!1,"org.nlogo.core.model.ViewReader$",{Z1:1,pn:1,d:1,qn:1});var yk=void 0;
+function VU(a){x();a=[a.kt(),uj(A())|Bj()];a=(new J).j(a);var b=x().s;a=K(a,b);b=md().Uc("---L");A();var d=C();A();var e=C();A();A();return qc(A(),a,d,e,"-T--",b,!1,!0)}function xN(){pl.call(this)}xN.prototype=new Hca;xN.prototype.constructor=xN;xN.prototype.b=function(){pl.prototype.b.call(this);return this};
+xN.prototype.yD=function(a){Al(a.Tk);var b=(new Bl).b();a:for(;;){var d=Oca(a);if(Xj(d)){var d=d.Q,d=null===d?0:d.W,e=Ah(),f=d;if(((256>f?9===f||10===f||11===f||12===f||13===f||28<=f&&31>=f||160!==f&&lta(mta(e).n[f]):8199!==f&&8239!==f&&lta(nta(e,f)))?cl():dl()).mx()){b=Cl(b,d);continue a}}b=b.Bb.Yb;break}a.Tk.xr();e=b.length|0;d=a.Tk;e=(new Xb).ha(e,e>>31);d.no.xw(e);Dl(d,El(d)-e.ia|0);a.Kp=a.Kp+(b.length|0)|0;a=(new w).e(b.length|0,a);if(null===a)throw(new q).i(a);return pl.prototype.yD.call(this,
+a.na())};xN.prototype.$classData=g({p2:0},!1,"org.nlogo.lex.StandardLexer$",{p2:1,nma:1,d:1,mma:1});var roa=void 0;function $N(){this.dc=null}$N.prototype=new l;$N.prototype.constructor=$N;c=$N.prototype;c.y=function(a){return this.tf(a)};c.Ia=function(a){return this.tf(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.tf(a)};c.DE=function(a){this.dc=a;return this};c.za=function(a){return rb(this,a)};
+c.tf=function(a){a=a.W;for(var b=(new Lc).Of(this.dc.rg).Dg.Wj(),d=!1;!d&&b.ra();)d=b.ka().Xl.ab(a);b=d?(new H).i((new XE).c(a)):C();if(b.z()){b=(new Lc).Of(this.dc.Yf).Dg.Wj();for(d=!1;!d&&b.ra();)d=b.ka().Xl.ab(a);b=d?(new H).i((new aF).c(a)):C()}b=b.z()?gp(this.dc).ab(a)&&hp(this.dc).ab(a)?(new H).i((new WU).Jd(a,this.dc.jj.y(a)|0|this.dc.Xi.y(a)|0)):C():b;b.z()&&(b=this.dc.jj,b.ab(a)?(d=Jc(b),d=Qo(d).Ml(a),b=b.y(a)|0,b=(new H).i((new XU).ha(d,b))):b=C());b.z()&&(b=this.dc.Ij,b.ab(a)?(d=Jc(b),
+d=Qo(d).Ml(a),b=b.y(a)|0,b=(new H).i((new YU).ha(d,b))):b=C());b.z()&&(b=this.dc.Xi,b.ab(a)?(d=Jc(b),d=Qo(d).Ml(a),b=b.y(a)|0,b=(new H).i((new ZU).ha(d,b))):b=C());b.z()&&(b=ota(this.dc),b.ab(a)?(d=Jc(b),d=Qo(d).Ml(a),b=b.y(a)|0,b=(new H).i((new $U).ha(d,b))):b=C());b.z()?(od(),a=fp(this.dc).Ml(a),a=pd(new rd,new aV).Uc(a)):a=b;if(a.z())return C();a=a.R();return(new H).i((new w).e($f(),a))};c.$classData=g({y2:0},!1,"org.nlogo.parse.AgentVariableReporterHandler",{y2:1,d:1,ms:1,fa:1});
+function ZN(){this.dc=null}ZN.prototype=new l;ZN.prototype.constructor=ZN;c=ZN.prototype;c.y=function(a){return this.tf(a)};c.Ia=function(a){return this.tf(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.tf(a)};c.DE=function(a){this.dc=a;return this};c.za=function(a){return rb(this,a)};
+c.tf=function(a){a=Jba(Sb(),a,this.dc);if(a.z())return C();a=a.R();if(null===a)throw(new q).i(a);var b=a.Oa,d=a.fb;a=a.Gf;var e=cp(this.dc.Jg);if(0===(1&e.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-js/src/main/core/TokenMapper.scala: 16");b=e.jU.gc("org.nlogo.core.prim."+b);b.z()?d=C():(b=b.R(),d=(new H).i(b.y(d)));if(d.z())return C();d=d.R();return(new H).i((new w).e(a,d))};c.$classData=g({C2:0},!1,"org.nlogo.parse.BreedHandler",{C2:1,d:1,ms:1,fa:1});
+function cO(){this.he=null}cO.prototype=new l;cO.prototype.constructor=cO;c=cO.prototype;c.y=function(a){return this.tf(a)};c.bc=function(a){this.he=a;return this};c.Ia=function(a){return this.tf(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.tf(a)};c.za=function(a){return rb(this,a)};c.tf=function(a){a=(new H).i(a.W).Q;a=this.he.gc(a);if(a.z())return C();a=a.R();return(new H).i(a.dw.Qn?(new w).e($f(),(new bV).CE(a)):(new w).e(Zf(),(new cV).CE(a)))};
+c.$classData=g({D2:0},!1,"org.nlogo.parse.CallHandler",{D2:1,d:1,ms:1,fa:1});function dV(){this.a=!1}dV.prototype=new l;dV.prototype.constructor=dV;dV.prototype.b=function(){eV=this;Doa||(Doa=(new FN).b());this.a=!0;return this};
+function Uea(a,b,d,e){a=QO();try{var f=ip(Ic(LO()),"to __is-reporter? report "+b+"\nend",(Ic(LO()),"")),h=jp(),k=(new cc).Nf(f,h),n=wea(xea(new $o,C(),!0),k,Wo(new Xo,d,e,(ap(),Wg(Ne().qi,u())),(ap(),G(t(),u())),(ap(),G(t(),u())),(ap(),G(t(),u())))),r=(new Lc).Of(n.he).Dg.Wj().ka(),y=new Bc,E=Cc(e,n.he);y.dc=d;y.he=E;y.Gi=r;y.Xh=a;Daa(y);for(var Q=Ac(wc(),n.Pp.y(r.we()).Sa(),y),R=fV(Vv(Q),1);;){if(R.z())ra=!1;else var da=R.Y().sb,ma=ul(),ra=null!==da&&da===ma;if(ra)R=R.$();else break}var Ca=Wj(R);
+if(Ca.z())return!1;var ab=Ca.R();Ij();var hb=ab.sb;return wl()===hb||cm()===hb||yl()===hb?!0:$f()===hb?!(Eq(ab.W)||fn(ab.W)||tm(ab.W)):!1}catch(mb){if($p(mb))return!1;throw mb;}}
+function Kfa(a,b){a=Wm();var d=yh(Jh(),b),d=gV(d).Mf;if(bm(d))return d.Q;Ij();a=vda(new Vm,a);b=ip(Ic(LO()),b,(Ic(LO()),""));d=jp();d=(new cc).Nf(b,d);b=go(a,d.ka(),d);d=d.ka();Tg();var e=d.sb,f=Ec();if(null===e||e!==f){if(0===(8&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/LiteralParser.scala: 23");d=d.ma;Sg(a.OH,d.Ua,d.Ya,d.bb)}return b}dV.prototype.$classData=g({J2:0},!1,"org.nlogo.parse.CompilerUtilities$",{J2:1,d:1,$la:1,hma:1});
+var eV=void 0;function Ij(){eV||(eV=(new dV).b());return eV}function aO(){this.Xh=null}aO.prototype=new l;aO.prototype.constructor=aO;c=aO.prototype;c.y=function(a){return this.tf(a)};c.Ia=function(a){return this.tf(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.tf(a)};function pta(a){if(a&&a.$classData&&a.$classData.m.JI)return(new hV).GE(a.tE());if(a&&a.$classData&&a.$classData.m.Z0)return(new iV).GE(a.tE());throw(new q).i(a);}c.za=function(a){return rb(this,a)};
+c.tf=function(a){var b=a.sb,d=yl();if(null===b||b!==d||null===this.Xh)return C();a=a.W;b=np(this.Xh).gc(a);if(Xj(b))a=b.Q;else{if(C()!==b)throw(new q).i(b);-1!==(a.indexOf(":")|0)&&xpa(QO(),"No such primitive: "+a);a=null}if(null===a)return C();b=a&&a.$classData&&a.$classData.m.JI?Zf():$f();return(new H).i((new w).e(b,pta(a)))};c.$classData=g({P2:0},!1,"org.nlogo.parse.ExtensionPrimitiveHandler",{P2:1,d:1,ms:1,fa:1});function jV(){}jV.prototype=new l;jV.prototype.constructor=jV;function qta(){}
+qta.prototype=jV.prototype;jV.prototype.Ia=function(a){return this.tf(a)|0};jV.prototype.l=function(){return"\x3cfunction1\x3e"};jV.prototype.Ja=function(a){return!!this.tf(a)};jV.prototype.za=function(a){return rb(this,a)};function bO(){this.wa=null}bO.prototype=new l;bO.prototype.constructor=bO;c=bO.prototype;c.y=function(a){return this.tf(a)};c.Ia=function(a){return this.tf(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.tf(a)};c.Ea=function(a){this.wa=a;return this};
+c.za=function(a){return rb(this,a)};c.tf=function(a){a=(new H).i(a.W);a=this.wa.ab(a.Q)?a:C();if(a.z())return C();a=a.R();return(new H).i((new w).e($f(),(new kV).yp(this.wa.Ml(a),a)))};c.$classData=g({f3:0},!1,"org.nlogo.parse.ProcedureVariableHandler",{f3:1,d:1,ms:1,fa:1});function lV(){}lV.prototype=new l;lV.prototype.constructor=lV;lV.prototype.b=function(){return this};
+function cq(a,b){a=new Dp;var d=(fq(),oq().y(b)),e=rta(b).je,f=rta(b).nf;if(0===(2&b.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompiledModel.scala: 23");return Cp(a,d,e,f,b.Kc,G(t(),u()),G(t(),u()))}lV.prototype.$classData=g({W3:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$ModelCompilation$",{W3:1,d:1,k:1,h:1});var sta=void 0;function dq(){sta||(sta=(new lV).b());return sta}function wq(){}wq.prototype=new l;
+wq.prototype.constructor=wq;c=wq.prototype;c.zc=function(a){return mV(a)};c.b=function(){return this};c.y=function(a){return mV(a)};c.Ia=function(a){return mV(a)|0};c.l=function(){return"\x3cfunction1\x3e"};function mV(a){var b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new nV).b())}return oV(a)}c.Ja=function(a){return!!mV(a)};c.za=function(a){return rb(this,a)};c.$classData=g({X3:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compilation2JsonWriter$",{X3:1,d:1,Cc:1,fa:1});
+var vq=void 0;function nV(){}nV.prototype=new l;nV.prototype.constructor=nV;c=nV.prototype;c.b=function(){return this};c.zc=function(a){return oV(a)};c.y=function(a){return oV(a)};c.Ia=function(a){return oV(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!oV(a)};
+function oV(a){var b=t(),d=tta(),d=Yu(d,a.$f),d=(new w).e("model",d),e=$P(),e=Yu(e,a.je),e=(new w).e("code",e),f=$P(),f=Yu(f,a.nf),f=(new w).e("info",f);uta||(uta=(new pV).b());var h=Yu(uta,a.Kc),h=(new w).e("widgets",h),k=vta(),k=Yu(k,a.vj),k=(new w).e("commands",k),n=vta();a=Yu(n,a.Kj);a=(new w).e("reporters",a);n=(new H).i(($P(),(new xu).c("modelCompilation")));d=[d,e,f,h,k,a,(new w).e("type",n)];b=G(b,(new J).j(d));d=Xg();a=new qV;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}
+c.za=function(a){return rb(this,a)};c.$classData=g({Y3:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compilation2JsonWriter$writer$macro$2$1$",{Y3:1,d:1,Cc:1,fa:1});function rV(){}rV.prototype=new l;rV.prototype.constructor=rV;c=rV.prototype;c.zc=function(a){return this.tj(a)};c.b=function(){return this};c.y=function(a){return this.tj(a)};c.Ia=function(a){return this.tj(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.tj(a)};
+c.tj=function(a){if(P(a)){a=a.ga;var b=(new yu).ud(!0),b=(new w).e("success",b);a=(new xu).c(a);a=[b,(new w).e("result",a)];for(var b=fc(new gc,Cu()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;return(new qu).bc(b.Va)}if(!Hp(a))throw(new q).i(a);b=a.fc;a=(new yu).ud(!1);a=(new w).e("success",a);d=Ys(b).wb();b=function(){return function(a){var b=wta();return Tp(b,a).rf()}}(this);e=x().s;if(e===x().s)if(d===u())b=u();else{for(var e=d.Y(),f=e=Og(new Pg,b(e),u()),d=d.$();d!==u();)var h=d.Y(),h=Og(new Pg,
+b(h),u()),f=f.Ka=h,d=d.$();b=e}else{for(e=Nc(d,e);!d.z();)f=d.Y(),e.Ma(b(f)),d=d.$();b=e.Ba()}b=(new zu).Ea(b);a=[a,(new w).e("result",b)];b=fc(new gc,Cu());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;return(new qu).bc(b.Va)};c.za=function(a){return rb(this,a)};c.$classData=g({$3:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compileResult2Json$",{$3:1,d:1,Cc:1,fa:1});var xta=void 0;function sV(){}sV.prototype=new l;sV.prototype.constructor=sV;c=sV.prototype;c.zc=function(a){return this.uj(a)};
+c.b=function(){return this};c.y=function(a){return this.uj(a)};c.Ia=function(a){return this.uj(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.uj=function(a){var b;xta||(xta=(new rV).b());b=xta;var d=t();return(new zu).Ea(a.ya(b,d.s))};c.Ja=function(a){return!!this.uj(a)};c.za=function(a){return rb(this,a)};c.$classData=g({a4:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compiledCommands2Json$",{a4:1,d:1,Cc:1,fa:1});var yta=void 0;function vta(){yta||(yta=(new sV).b());return yta}
+function pV(){}pV.prototype=new l;pV.prototype.constructor=pV;c=pV.prototype;c.zc=function(a){return this.uj(a)};c.b=function(){return this};c.y=function(a){return this.uj(a)};c.Ia=function(a){return this.uj(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.uj=function(a){return(new xu).c(Yga(Pt(),a))};c.Ja=function(a){return!!this.uj(a)};c.za=function(a){return rb(this,a)};c.$classData=g({b4:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compiledWidgets2JsonString$",{b4:1,d:1,Cc:1,fa:1});
+var uta=void 0;function tV(){}tV.prototype=new l;tV.prototype.constructor=tV;c=tV.prototype;c.b=function(){return this};c.zc=function(a){return this.tj(a)};c.y=function(a){return this.tj(a)};c.Ia=function(a){return this.tj(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.tj(a)};
+c.jE=function(a){var b=(new yu).ud(!1),b=(new w).e("success",b),d=Ys(a).wb();a=function(){return function(a){var b=zta();return Tp(b,a).rf()}}(this);var e=x().s;if(e===x().s)if(d===u())a=u();else{for(var e=d.Y(),f=e=Og(new Pg,a(e),u()),d=d.$();d!==u();)var h=d.Y(),h=Og(new Pg,a(h),u()),f=f.Ka=h,d=d.$();a=e}else{for(e=Nc(d,e);!d.z();)f=d.Y(),e.Ma(a(f)),d=d.$();a=e.Ba()}a=(new zu).Ea(a);b=[b,(new w).e("result",a)];a=fc(new gc,Cu());d=0;for(e=b.length|0;d<e;)ic(a,b[d]),d=1+d|0;return(new qu).bc(a.Va)};
+c.tj=function(a){if(P(a)){a=a.ga;Sp();a=(new xu).c(a);a=[(new w).e("result",a)];for(var b=fc(new gc,Cu()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;a=(new qu).bc(b.Va).eh;b=(new yu).ud(!0);return(new qu).bc(a.mn((new w).e("success",b)))}if(!Hp(a))throw(new q).i(a);a=a.fc;return Sp().jE(a)};c.za=function(a){return rb(this,a)};c.$classData=g({c4:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$export2JsonWriter$",{c4:1,d:1,Cc:1,fa:1});var Ata=void 0;
+function Sp(){Ata||(Ata=(new tV).b());return Ata}function uV(){}uV.prototype=new l;uV.prototype.constructor=uV;c=uV.prototype;c.b=function(){return this};c.zc=function(a){return this.tj(a)};c.y=function(a){return this.tj(a)};c.Ia=function(a){return this.tj(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.tj(a)};
+c.jE=function(a){var b=(new yu).ud(!1),b=(new w).e("success",b),d=Ys(a).wb();a=function(){return function(a){var b=zta();return Tp(b,a).rf()}}(this);var e=x().s;if(e===x().s)if(d===u())a=u();else{for(var e=d.Y(),f=e=Og(new Pg,a(e),u()),d=d.$();d!==u();)var h=d.Y(),h=Og(new Pg,a(h),u()),f=f.Ka=h,d=d.$();a=e}else{for(e=Nc(d,e);!d.z();)f=d.Y(),e.Ma(a(f)),d=d.$();a=e.Ba()}a=(new zu).Ea(a);b=[b,(new w).e("result",a)];a=fc(new gc,Cu());d=0;for(e=b.length|0;d<e;)ic(a,b[d]),d=1+d|0;return(new qu).bc(a.Va)};
+c.tj=function(a){if(P(a)){a=a.ga;var b=(new yu).ud(!0),b=(new w).e("success",b);a=(new xu).c(a.Du);a=[b,(new w).e("result",a)];for(var b=fc(new gc,Cu()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;return(new qu).bc(b.Va)}if(!Hp(a))throw(new q).i(a);a=a.fc;return tta().jE(a)};c.za=function(a){return rb(this,a)};c.$classData=g({d4:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$modelCompilationNel2Json$",{d4:1,d:1,Cc:1,fa:1});var Bta=void 0;function tta(){Bta||(Bta=(new uV).b());return Bta}
+function vV(){}vV.prototype=new l;vV.prototype.constructor=vV;c=vV.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"code",lq(mq()));if(P(b)){var b=b.ga,d=QP(mq(),a,"info",Up().Uv());if(P(d)){var d=d.ga,e=QP(mq(),a,"version",Up().Uv());if(P(e)){var e=e.ga,f=QP(mq(),a,"widgets",Cta());if(P(f)){var f=f.ga,h=QP(mq(),a,"commands",Dta());if(P(h)){var h=h.ga,k=QP(mq(),a,"reporters",Dta());if(P(k)){var k=k.ga,n=QP(mq(),a,"turtleShapes",Up().JF());if(P(n)){n=n.ga;a=QP(mq(),a,"linkShapes",Up().IF());if(P(a))return(new Kp).i(Jfa(b,d,e,f,h,k,n,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(n))throw(new q).i(n);
+return n}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({h4:0},!1,"org.nlogo.tortoise.compiler.CompilationRequest$reader$macro$10$1$",{h4:1,d:1,kc:1,fa:1});function wV(){this.a=!1}wV.prototype=new l;wV.prototype.constructor=wV;
+wV.prototype.b=function(){this.a=!0;return this};function Rea(a,b){Yp();var d=Zp();try{var e=Mea(0,uca(Hj(),b),Yp(),d)}catch(h){if((b=qn(qg(),h))&&b.$classData&&b.$classData.m.ge)fq(),e=gq(Vp(),b);else throw h;}if(P(e))return e;if(Hp(e)){d=e.fc;a=function(){return function(a){return a}}(a);Lp();b=a(d.Ic);e=Mp(d.Sc);d=Np().Wd;a:for(;;){if(Op(e)){var f=e,e=f.ld,d=(new Pp).Vb(a(f.gd),d);continue a}if(!Qp(e))throw(new q).i(e);break}return(new Ip).i((new Rp).Vb(b,d))}throw(new q).i(e);}
+function Mea(a,b,d,e){try{fq();var f=Gfa(d,b,e),h=Eta(new xV,lpa(d,f,e),f,d);return oq().y(h)}catch(k){if($p(k))return fq(),gq(Vp(),k);throw k;}}wV.prototype.$classData=g({i4:0},!1,"org.nlogo.tortoise.compiler.CompiledModel$",{i4:1,d:1,k:1,h:1});var Fta=void 0;function Xp(){Fta||(Fta=(new wV).b());return Fta}function yV(){this.a=0}yV.prototype=new l;yV.prototype.constructor=yV;yV.prototype.b=function(){return this};
+function jpa(a,b,d){a=Cc;Gta||(Gta=(new zV).b());b=a(AV(d).eh,b.eh);d=(new yu).ud(!0);d=(new w).e("success",d);a=(new zu).Ea(G(t(),u()));d=[d,(new w).e("messages",a)];a=fc(new gc,Cu());for(var e=0,f=d.length|0;e<f;)ic(a,d[e]),e=1+e|0;d=[(new w).e("compilation",(new qu).bc(a.Va))];a=fc(new gc,Cu());e=0;for(f=d.length|0;e<f;)ic(a,d[e]),e=1+e|0;return(new qu).bc(Cc(b,a.Va))}
+function kpa(a,b,d){b=b.eh;var e=(new yu).ud(!1),e=(new w).e("success",e);d=Ys(d).wb();a=function(){return function(a){return(new xu).c(a.Vf())}}(a);var f=x().s;if(f===x().s)if(d===u())a=u();else{var f=d.Y(),h=f=Og(new Pg,a(f),u());for(d=d.$();d!==u();){var k=d.Y(),k=Og(new Pg,a(k),u()),h=h.Ka=k;d=d.$()}a=f}else{for(f=Nc(d,f);!d.z();)h=d.Y(),f.Ma(a(h)),d=d.$();a=f.Ba()}a=(new zu).Ea(a);e=[e,(new w).e("messages",a)];a=fc(new gc,Cu());d=0;for(f=e.length|0;d<f;)ic(a,e[d]),d=1+d|0;e=[(new w).e("compilation",
+(new qu).bc(a.Va))];a=fc(new gc,Cu());d=0;for(f=e.length|0;d<f;)ic(a,e[d]),d=1+d|0;return(new qu).bc(Cc(b,a.Va))}yV.prototype.$classData=g({j4:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$",{j4:1,d:1,k:1,h:1});var Hta=void 0;function FO(){Hta||(Hta=(new yV).b());return Hta}function BV(){}BV.prototype=new l;BV.prototype.constructor=BV;c=BV.prototype;c.b=function(){return this};c.zc=function(a){return CV(a)};c.y=function(a){return CV(a)};c.Ia=function(a){return CV(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!CV(a)};function Ita(a){if(null===a)throw(new Ce).b();return a.Pa?a.tb:De(a,(new DV).b())}function CV(a){var b=(new Be).b(),b=(b.Pa?b.tb:Ita(b)).dg(a.xt);a=a.St;if(P(a))return a=a.ga,jpa(FO(),b,a);if(!Hp(a))throw(new q).i(a);a=a.fc;return kpa(FO(),b,a)}c.za=function(a){return rb(this,a)};c.$classData=g({l4:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$compiledPen2Json$",{l4:1,d:1,Cc:1,fa:1});var Jta=void 0;function DV(){}DV.prototype=new l;DV.prototype.constructor=DV;
+c=DV.prototype;c.b=function(){return this};c.zc=function(a){return this.dg(a)};c.y=function(a){return this.dg(a)};c.Ia=function(a){return this.dg(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.dg(a)};c.za=function(a){return rb(this,a)};
+c.dg=function(a){var b=t(),d=$P(),d=Yu(d,a.cb),d=(new w).e("display",d),e=YP(),e=Yu(e,a.Ol),e=(new w).e("interval",e),f=bQ(),f=Yu(f,a.Sl),f=(new w).e("mode",f),h=bQ(),h=Yu(h,a.Db),h=(new w).e("color",h),k=VP(),k=Yu(k,a.Em),k=(new w).e("inLegend",k),n=$P(),n=Yu(n,a.Bg),n=(new w).e("setupCode",n),r=$P();a=Yu(r,a.Cg);a=(new w).e("updateCode",a);r=(new H).i(($P(),(new xu).c("pen")));d=[d,e,f,h,k,n,a,(new w).e("type",r)];b=G(b,(new J).j(d));d=Xg();a=new EV;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))};
+c.$classData=g({m4:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$compiledPen2Json$writer$macro$2$1$",{m4:1,d:1,Cc:1,fa:1});function FV(){}FV.prototype=new l;FV.prototype.constructor=FV;c=FV.prototype;c.zc=function(a){return this.uj(a)};c.b=function(){return this};c.y=function(a){return this.uj(a)};c.Ia=function(a){return this.uj(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.uj=function(a){var b=m(new p,function(){return function(a){Jta||(Jta=(new BV).b());return CV(a)}}(this)),d=t();return(new zu).Ea(a.ya(b,d.s))};c.Ja=function(a){return!!this.uj(a)};c.za=function(a){return rb(this,a)};c.$classData=g({o4:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$compiledPens2Json$",{o4:1,d:1,Cc:1,fa:1});var Kta=void 0;function KO(){this.sX=this.gz=null;this.a=this.xa=!1}KO.prototype=new l;KO.prototype.constructor=KO;KO.prototype.b=function(){Sq(this,(new w).e(0,""));return this};
+function Sq(a,b){a.sX=b;a.a=!0}function lfa(a){if(!a.xa){var b=Yp();if(0===(1&b.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Compiler.scala: 46");a.gz=b.rX;a.xa=!0}return a.gz}KO.prototype.$classData=g({r4:0},!1,"org.nlogo.tortoise.compiler.Compiler$$anon$2",{r4:1,d:1,Ama:1,yma:1});function GV(){this.JH=null;this.a=0}GV.prototype=new l;GV.prototype.constructor=GV;
+GV.prototype.b=function(){HV=this;var a=new PO,b=(IV(),"function(){}");IV();Lta||(Lta=(new JV).b());this.JH=spa(a,!1,b,Lta,(IV(),!0));this.a=(1|this.a)<<24>>24;return this};function Zp(){var a=IV();if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompilerLike.scala: 56");return a.JH}GV.prototype.$classData=g({s4:0},!1,"org.nlogo.tortoise.compiler.CompilerFlags$",{s4:1,d:1,k:1,h:1});var HV=void 0;
+function IV(){HV||(HV=(new GV).b());return HV}function KV(){this.KW=0;this.aY=null;this.IX=this.ZX=0;this.Lu=null}KV.prototype=new l;KV.prototype.constructor=KV;KV.prototype.tE=function(){var a=this.KW,b=this.aY,d=x().s,b=K(b,d),d=this.ZX,e=this.IX,f=this.Lu;A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};function ffa(a,b,d,e,f){var h=new KV;h.KW=a;h.aY=b;h.ZX=d;h.IX=e;h.Lu=f;return h}
+KV.prototype.$classData=g({y4:0},!1,"org.nlogo.tortoise.compiler.CreateExtension$$anon$2",{y4:1,d:1,Z0:1,Y0:1});function LV(){this.Lu=this.fU=null}LV.prototype=new l;LV.prototype.constructor=LV;function gfa(a,b){var d=new LV;d.fU=a;d.Lu=b;return d}LV.prototype.tE=function(){var a=A(),b=this.fU,d=x().s;return qc(a,K(b,d),this.Lu,(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};LV.prototype.$classData=g({z4:0},!1,"org.nlogo.tortoise.compiler.CreateExtension$$anon$3",{z4:1,d:1,JI:1,Y0:1});
+function MV(){}MV.prototype=new l;MV.prototype.constructor=MV;c=MV.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"code",lq(mq()));if(P(b)){var b=b.ga,d=QP(mq(),a,"info",Gp().Uv());if(P(d)){var d=d.ga,e=QP(mq(),a,"widgets",Cta());if(P(e)){var e=e.ga,f=QP(mq(),a,"turtleShapes",Gp().JF());if(P(f)){var f=f.ga,h=QP(mq(),a,"linkShapes",Gp().IF());if(P(h)){h=h.ga;a=QP(mq(),a,"version",Gp().Uv());if(P(a))return(new Kp).i(Mta(b,d,e,f,h,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);
+return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({B4:0},!1,"org.nlogo.tortoise.compiler.ExportRequest$reader$macro$8$1$",{B4:1,d:1,kc:1,fa:1});function Kr(){NS.call(this);this.VW=null}Kr.prototype=new OS;Kr.prototype.constructor=Kr;Kr.prototype.c=function(a){this.VW=a;NS.prototype.ic.call(this,null,null,0,!0);return this};Object.defineProperty(Kr.prototype,"message",{get:function(){return this.VW},configurable:!0});
+Kr.prototype.$classData=g({J4:0},!1,"org.nlogo.tortoise.compiler.LiteralConverter$WrappedException",{J4:1,tc:1,d:1,h:1});function ks(){}ks.prototype=new zpa;ks.prototype.constructor=ks;ks.prototype.b=function(){return this};
+ks.prototype.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(NV(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(1)&&(b=b.Q.X(0),yb(b)&&(b=Sh().ac(b),!b.z()&&(d=b.R().fb,rt(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),Ab(d)&&(d=Uh(Wh(),d),!d.z()&&(d=d.R().ja(),d=Sh().ac(d),!d.z()&&(d=d.R().Oa,$q(d)&&yb(b)&&OV(b.ye)))))))))))return b=ch(d).toLowerCase(),b=(new PV).c(b),(new Lb).bd(b,a.wa,a.ma)}return Kb(this,a)};
+ks.prototype.$classData=g({a5:0},!1,"org.nlogo.tortoise.compiler.Optimizer$NSum4Transformer$",{a5:1,c5:1,d:1,ff:1});var js=void 0;function is(){}is.prototype=new zpa;is.prototype.constructor=is;is.prototype.b=function(){return this};
+is.prototype.Se=function(a){var b=Sh().ac(a);if(!b.z()){var d=b.R().fb;if(NV(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(1)&&(b=b.Q.X(0),yb(b)&&(b=Sh().ac(b),!b.z()&&(d=b.R().fb,rt(b.R().Oa)&&(t(),b=(new H).i(d),null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),Ab(d)&&(d=Uh(Wh(),d),!d.z()&&(d=d.R().ja(),d=Sh().ac(d),!d.z()&&(d=d.R().Oa,$q(d)&&yb(b)&&QV(b.ye)))))))))))return b=ch(d).toLowerCase(),b=(new RV).c(b),(new Lb).bd(b,a.wa,a.ma)}return Kb(this,a)};
+is.prototype.$classData=g({b5:0},!1,"org.nlogo.tortoise.compiler.Optimizer$NSumTransformer$",{b5:1,c5:1,d:1,ff:1});var hs=void 0;function SV(){}SV.prototype=new l;SV.prototype.constructor=SV;c=SV.prototype;c.b=function(){return this};c.zc=function(a){return TV(a)};c.y=function(a){return TV(a)};c.Ia=function(a){return TV(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!TV(a)};c.za=function(a){return rb(this,a)};
+function TV(a){if($p(a)){var b=(new xu).c(a.Lc),b=(new w).e("message",b),d=(new vu).hb(a.oe),d=(new w).e("start",d);a=(new vu).hb(a.Cm);a=[b,d,(new w).e("end",a)];for(var b=fc(new gc,Cu()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;return(new qu).bc(b.Va)}a=(new xu).c(a.Vf());a=[(new w).e("message",a)];b=fc(new gc,Cu());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;return(new qu).bc(b.Va)}c.$classData=g({J5:0},!1,"org.nlogo.tortoise.compiler.TortoiseFailure$compileError2Json$",{J5:1,d:1,Cc:1,fa:1});
+var Nta=void 0;function wta(){Nta||(Nta=(new SV).b());return Nta}function UV(){}UV.prototype=new l;UV.prototype.constructor=UV;c=UV.prototype;c.b=function(){return this};c.zc=function(a){return VV(a)};c.y=function(a){return VV(a)};c.Ia=function(a){return VV(a)|0};
+function VV(a){if(a&&a.$classData&&a.$classData.m.oC){a=a.gg;var b=wta();return Tp(b,a).rf()}if(a&&a.$classData&&a.$classData.m.pC)return a=a.gg,b=wta(),Tp(b,a).rf();if(a&&a.$classData&&a.$classData.m.qC){a=(new xu).c(a.ol);a=[(new w).e("message",a)];for(var b=fc(new gc,Cu()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;return(new qu).bc(b.Va)}throw(new q).i(a);}c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!VV(a)};c.za=function(a){return rb(this,a)};
+c.$classData=g({K5:0},!1,"org.nlogo.tortoise.compiler.TortoiseFailure$compileFailure2Json$",{K5:1,d:1,Cc:1,fa:1});var Ota=void 0;function zta(){Ota||(Ota=(new UV).b());return Ota}function zV(){}zV.prototype=new l;zV.prototype.constructor=zV;c=zV.prototype;c.b=function(){return this};c.zc=function(a){return AV(a)};c.y=function(a){return AV(a)};c.Ia=function(a){return AV(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+function AV(a){if(Qga()===a)return a=u(),(new qu).bc(Wg(Xg(),a));if(du(a)){var b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new WV).b())}return XV(a)}if(a&&a.$classData&&a.$classData.m.BC){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new YV).b())}return ZV(a)}if(a&&a.$classData&&a.$classData.m.AC){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();b.Pa||De(b,(new $V).b())}return aW(a)}if(eu(a)){b=(new Be).b();if(!b.Pa){if(null===b)throw(new Ce).b();
+b.Pa||De(b,(new bW).b())}return cW(a)}throw(new q).i(a);}c.Ja=function(a){return!!AV(a)};c.za=function(a){return rb(this,a)};c.$classData=g({P5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$",{P5:1,d:1,Cc:1,fa:1});var Gta=void 0;function WV(){}WV.prototype=new l;WV.prototype.constructor=WV;c=WV.prototype;c.b=function(){return this};c.zc=function(a){return XV(a)};c.y=function(a){return XV(a)};c.Ia=function(a){return XV(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!XV(a)};c.za=function(a){return rb(this,a)};function XV(a){var b=t(),d=$P();a=Yu(d,a.Gs);a=(new w).e("compiledSource",a);d=(new H).i(($P(),(new xu).c("sourceCompilation")));a=[a,(new w).e("type",d)];b=G(b,(new J).j(a));a=Xg();var d=new dW,e=t();return(new qu).bc(Wg(a,b.lc(d,e.s)))}c.$classData=g({Q5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$2$3$",{Q5:1,d:1,Cc:1,fa:1});function YV(){}YV.prototype=new l;
+YV.prototype.constructor=YV;c=YV.prototype;c.b=function(){return this};c.zc=function(a){return ZV(a)};c.y=function(a){return ZV(a)};c.Ia=function(a){return ZV(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!ZV(a)};c.za=function(a){return rb(this,a)};
+function ZV(a){var b=t(),d=$P(),d=Yu(d,a.hk),d=(new w).e("compiledSetupCode",d),e=$P();a=Yu(e,a.ik);a=(new w).e("compiledUpdateCode",a);e=(new H).i(($P(),(new xu).c("updateableCompilation")));d=[d,a,(new w).e("type",e)];b=G(b,(new J).j(d));d=Xg();a=new eW;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.$classData=g({S5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$4$1$",{S5:1,d:1,Cc:1,fa:1});function $V(){}$V.prototype=new l;$V.prototype.constructor=$V;c=$V.prototype;
+c.b=function(){return this};c.zc=function(a){return aW(a)};c.y=function(a){return aW(a)};c.Ia=function(a){return aW(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+function aW(a){var b=t(),d=$P(),d=Yu(d,a.hk),d=(new w).e("compiledSetupCode",d),e=$P(),e=Yu(e,a.ik),e=(new w).e("compiledUpdateCode",e);Kta||(Kta=(new FV).b());a=Yu(Kta,a.Es);a=(new w).e("compiledPens",a);var f=(new H).i(($P(),(new xu).c("plotWidgetCompilation"))),d=[d,e,a,(new w).e("type",f)],b=G(b,(new J).j(d)),d=Xg();a=new fW;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.Ja=function(a){return!!aW(a)};c.za=function(a){return rb(this,a)};
+c.$classData=g({U5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$6$1$",{U5:1,d:1,Cc:1,fa:1});function bW(){}bW.prototype=new l;bW.prototype.constructor=bW;c=bW.prototype;c.b=function(){return this};c.zc=function(a){return cW(a)};c.y=function(a){return cW(a)};c.Ia=function(a){return cW(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!cW(a)};
+function cW(a){var b=t(),d=$P(),d=Yu(d,a.Ds),d=(new w).e("compiledMin",d),e=$P(),e=Yu(e,a.Cs),e=(new w).e("compiledMax",e),f=$P();a=Yu(f,a.Hs);a=(new w).e("compiledStep",a);f=(new H).i(($P(),(new xu).c("sliderCompilation")));d=[d,e,a,(new w).e("type",f)];b=G(b,(new J).j(d));d=Xg();a=new gW;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.za=function(a){return rb(this,a)};c.$classData=g({W5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$8$1$",{W5:1,d:1,Cc:1,fa:1});
+function lu(){}lu.prototype=new l;lu.prototype.constructor=lu;c=lu.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"color",hW());if(P(b)){var b=b.ga,d=QP(mq(),a,"filled",IP());if(P(d)){var d=!!d.ga,e=QP(mq(),a,"marked",IP());if(P(e)){var e=!!e.ga,f=QP(mq(),a,"x",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"y",LP());if(P(h)){h=h.ga|0;a=QP(mq(),a,"diam",LP());if(P(a))return(new Kp).i((new iW).EE(b,d,e,f,h,a.ga|0));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);
+return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({h6:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$reader$macro$17$1$",{h6:1,d:1,kc: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.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"color",hW());if(P(b)){var b=b.ga,d=QP(mq(),a,"filled",IP());if(P(d)){var d=!!d.ga,e=QP(mq(),a,"marked",IP());if(P(e)){var e=!!e.ga,f=QP(mq(),a,"xmin",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"ymin",LP());if(P(h)){var h=h.ga|0,k=QP(mq(),a,"xmax",LP());if(P(k)){k=k.ga|0;a=QP(mq(),a,"ymax",LP());if(P(a))return(new Kp).i((new jW).FE(b,d,e,f,h,k,a.ga|0));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);
+return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({i6:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$reader$macro$26$1$",{i6:1,d:1,kc: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.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"color",hW());if(P(b)){var b=b.ga,d=QP(mq(),a,"filled",IP());if(P(d)){var d=!!d.ga,e=QP(mq(),a,"marked",IP());if(P(e)){var e=!!e.ga,f=QP(mq(),a,"xcors",Pta());if(P(f)){f=f.ga;a=QP(mq(),a,"ycors",Pta());if(P(a))return(new Kp).i(Qta(b,d,e,f,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({j6:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$reader$macro$33$1$",{j6:1,d:1,kc:1,fa:1});function ku(){}ku.prototype=new l;ku.prototype.constructor=ku;c=ku.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"color",hW());if(P(b)){var b=b.ga,d=QP(mq(),a,"filled",IP());if(P(d)){var d=!!d.ga,e=QP(mq(),a,"marked",IP());if(P(e)){var e=!!e.ga,f=QP(mq(),a,"x1",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"y1",LP());if(P(h)){var h=h.ga|0,k=QP(mq(),a,"x2",LP());if(P(k)){k=k.ga|0;a=QP(mq(),a,"y2",LP());if(P(a))return(new Kp).i((new kW).FE(b,d,e,f,h,k,a.ga|0));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);
+return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({k6:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$reader$macro$9$1$",{k6:1,d:1,kc:1,fa:1});function lW(){}lW.prototype=new l;lW.prototype.constructor=lW;c=lW.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!this.Ta(a)};
+c.Ta=function(a){var b=(new Tb).c("rgba\\((\\d+), (\\d+), (\\d+), ([.0-9]+)\\)"),d=u(),b=(new Ub).Ap(b.U,d);if(Fu(a)&&(b=mg(b,a.Lc),b.z()?d=!1:null!==b.R()?(d=b.R(),d=0===ng(d,4)):d=!1,d)){a=b.R().X(0);var d=b.R().X(1),e=b.R().X(2),b=b.R().X(3);Vp();try{var f=(new Tb).c(a),h=gi(ei(),f.U,10),k=(new Tb).c(d),n=gi(ei(),k.U,10),r=(new Tb).c(e),y=gi(ei(),r.U,10),E=(new Tb).c(b),Q=Ch(),R=(new Kp).i(mca(new qi,h,n,y,Oa(255*Bh(Q,E.U))))}catch(da){if(f=qn(qg(),da),null!==f){h=jw(kw(),f);if(h.z())throw pg(qg(),
+f);f=h.R();R=(new Ip).i(f)}else throw da;}if(P(R))return R;if(Hp(R))return f=R.fc,bka||(bka=(new wz).b()),h=vS(),null===vS().GF&&null===vS().GF&&(vS().GF=(new sS).pv(h)),vS(),f="problem deserializing RGBA color value: "+f.Vf(),(new Ip).i(aka(f));throw(new q).i(R);}fq();f="could not convert "+a+" to RGBA color";return gq(Vp(),f)};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};
+c.$classData=g({l6:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$tortoiseJs2RgbColor$",{l6:1,d:1,kc:1,fa:1});var Rta=void 0;function hW(){Rta||(Rta=(new lW).b());return Rta}function mW(){}mW.prototype=new l;mW.prototype.constructor=mW;function nW(){}c=nW.prototype=mW.prototype;c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ta=function(a){if(Hu(a)){a=a.Va;bra();var b=m(new p,function(a){return function(b){return a.ep(b)}}(this)),d=t();a=a.ya(b,d.s).wb();b=pq().Qy;a=ara(a,b);Sta||(Sta=(new oW).b());Vp();b=Lp();b=(new rq).Zq(b);b=St(b);return $qa(a,Tqa(b))}fq();a=this.Jp(a);return gq(Vp(),a)};c.Ja=function(a){return!!this.Ta(a)};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};function pW(){this.da=this.UG=null}pW.prototype=new l;pW.prototype.constructor=pW;function Tta(){}
+c=Tta.prototype=pW.prototype;c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ta=function(a){if(Du(a))return this.HU(a.zi);if(Eu(a))return this.GU(a.Dl);a=oa(a);var b=this.UG.Od();return dha(a,b)};c.Ja=function(a){return!!this.Ta(a)};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};function JP(){}JP.prototype=new l;JP.prototype.constructor=JP;c=JP.prototype;c.y=function(a){return this.Ta(a)};
+c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};c.Ta=function(a){if(Gu(a))return a=a.tm,fq(),oq().y(a);a=oa(a);return dha(a,pa(Za))};c.tk=function(){return this};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({w6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$boolean2TortoiseJs$",{w6:1,d:1,kc:1,fa:1});function RP(){}RP.prototype=new l;RP.prototype.constructor=RP;c=RP.prototype;
+c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};c.Ta=function(a){if(Fu(a))return a=a.Lc,fq(),oq().y(a);fq();a="could not convert "+a+" to String";return gq(Vp(),a)};c.tk=function(){return this};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({z6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJs2String$",{z6:1,d:1,kc:1,fa:1});
+function PP(){}PP.prototype=new l;PP.prototype.constructor=PP;c=PP.prototype;c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};c.Ta=function(a){if(Hu(a))return fq(),oq().y(a);fq();a="Expected Javascript Array, found "+a;return gq(Vp(),a)};c.tk=function(){return this};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};
+c.$classData=g({A6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJsAsJsArray$",{A6:1,d:1,kc:1,fa:1});function KP(){}KP.prototype=new l;KP.prototype.constructor=KP;c=KP.prototype;c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};c.Ta=function(a){if(Ku(a))return fq(),oq().y(a);fq();a="Expected Javascript Object, found "+a;return gq(Vp(),a)};c.tk=function(){return this};
+c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({B6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJsAsJsObject$",{B6:1,d:1,kc:1,fa:1});function qW(){this.da=this.fV=null}qW.prototype=new l;qW.prototype.constructor=qW;function Uta(){}c=Uta.prototype=qW.prototype;c.zc=function(a){return rW(this,a)};c.y=function(a){return rW(this,a)};c.Ia=function(a){return rW(this,a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!rW(this,a)};c.za=function(a){return rb(this,a)};function rW(a,b){a=a.fV;var d=x();return(new zu).Ea(b.ya(a,d.s))}c.RV=function(a,b){this.fV=b;if(null===a)throw pg(qg(),null);this.da=a;return this};function XP(){}XP.prototype=new l;XP.prototype.constructor=XP;c=XP.prototype;c.zc=function(a){return(new yu).ud(!!a)};c.y=function(a){return(new yu).ud(!!a)};c.Ia=function(a){return(new yu).ud(!!a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!(new yu).ud(!!a)};
+c.Xq=function(){return this};c.za=function(a){return rb(this,a)};c.$classData=g({E6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityWriterImplicits$bool2TortoiseJs$",{E6:1,d:1,Cc:1,fa:1});function ZP(){}ZP.prototype=new l;ZP.prototype.constructor=ZP;c=ZP.prototype;c.zc=function(a){return(new wu).Bj(+a)};c.y=function(a){return(new wu).Bj(+a)};c.Ia=function(a){return(new wu).Bj(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!(new wu).Bj(a)};c.Xq=function(){return this};
+c.za=function(a){return rb(this,a)};c.$classData=g({F6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityWriterImplicits$double2TortoiseJs$",{F6:1,d:1,Cc:1,fa:1});function cQ(){}cQ.prototype=new l;cQ.prototype.constructor=cQ;c=cQ.prototype;c.zc=function(a){return(new vu).hb(a|0)};c.y=function(a){return(new vu).hb(a|0)};c.Ia=function(a){return(new vu).hb(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!(new vu).hb(a)};c.Xq=function(){return this};
+c.za=function(a){return rb(this,a)};c.$classData=g({G6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityWriterImplicits$int2TortoiseJs$",{G6:1,d:1,Cc:1,fa:1});function aQ(){}aQ.prototype=new l;aQ.prototype.constructor=aQ;c=aQ.prototype;c.zc=function(a){return(new xu).c(a)};c.y=function(a){return(new xu).c(a)};c.Ia=function(a){return(new xu).c(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!(new xu).c(a)};c.Xq=function(){return this};c.za=function(a){return rb(this,a)};
+c.$classData=g({H6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityWriterImplicits$string2TortoiseJs$",{H6:1,d:1,Cc:1,fa:1});function sW(){}sW.prototype=new l;sW.prototype.constructor=sW;c=sW.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"x-offset",NP());if(P(b)){var b=+b.ga,d=QP(mq(),a,"is-visible",IP());if(P(d)){d=!!d.ga;mq();Vta||(Vta=(new tW).b());a=QP(0,a,"dash-pattern",Vta);if(P(a))return(new Kp).i((new uW).hv(b,d,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};
+c.$classData=g({P6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$reader$macro$5$1$",{P6:1,d:1,kc:1,fa:1});function ev(){}ev.prototype=new l;ev.prototype.constructor=ev;c=ev.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"name",lq(mq()));if(P(b)){var b=b.ga,d=QP(mq(),a,"rotate",IP());if(P(d)){var d=!!d.ga,e=QP(mq(),a,"editableColorIndex",LP());if(P(e)){e=e.ga|0;mq();Wta||(Wta=(new vW).b());a=QP(0,a,"elements",Wta);if(P(a))return(new Kp).i((new wW).XE(b,d,e,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({Q6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$reader$macro$6$1$",{Q6:1,d:1,kc:1,fa:1});function cv(){}cv.prototype=new l;cv.prototype.constructor=cv;c=cv.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"name",lq(mq()));if(P(b)){var b=b.ga,d=QP(mq(),a,"curviness",NP());if(P(d)){d=+d.ga;mq();Xta||(Xta=(new xW).b());var e=QP(0,a,"lines",Xta);if(P(e)){e=e.ga;mq();Yta||(Yta=(new yW).b());a=QP(0,a,"direction-indicator",Yta);if(P(a))return(new Kp).i(Zta(b,d,e,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({R6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$reader$macro$6$3$",{R6:1,d:1,kc:1,fa:1});function yW(){}yW.prototype=new l;yW.prototype.constructor=yW;c=yW.prototype;c.b=function(){return this};c.y=function(a){return dv(iv(),a)};c.Ia=function(a){return dv(iv(),a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!dv(iv(),a)};c.Ta=function(a){return dv(iv(),a)};c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({V6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$tortoiseJs2VectorShape$",{V6:1,d:1,kc:1,fa:1});var Yta=void 0;function vv(){}vv.prototype=new l;vv.prototype.constructor=vv;c=vv.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ta=function(a){return this.Ra(a)};c.Ja=function(a){return!!this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"left",LP());if(P(b)){var b=b.ga|0,d=QP(mq(),a,"top",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"right",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"bottom",LP());if(P(f)){f=f.ga|0;mq();$ta||($ta=(new zW).b());var h=QP(0,a,"dimensions",$ta);if(P(h)){var h=h.ga,k=QP(mq(),a,"fontSize",LP());if(P(k)){k=k.ga|0;mq();aua||(aua=(new AW).b());var n=QP(0,a,"updateMode",aua);if(P(n)){var n=n.ga,r=QP(mq(),a,"showTickCounter",IP());if(P(r)){var r=!!r.ga,y=QP(mq(),a,"tickCounterLabel",
+BW());if(P(y)){y=y.ga;a=QP(mq(),a,"frameRate",NP());if(P(a))return(new Kp).i(gta(new UU,b,d,e,f,h,k,n,r,y,+a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(y))throw(new q).i(y);return y}if(!Hp(r))throw(new q).i(r);return r}if(!Hp(n))throw(new q).i(n);return n}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};
+c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({$6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$110$1$",{$6:1,d:1,kc:1,fa:1});function mv(){}mv.prototype=new l;mv.prototype.constructor=mv;c=mv.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ta=function(a){return this.Ra(a)};c.Ja=function(a){return!!this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"source",BW());if(P(b)){var b=b.ga,d=QP(mq(),a,"left",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"top",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"right",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"bottom",LP());if(P(h)){var h=h.ga|0,k=QP(mq(),a,"display",BW());if(P(k)){var k=k.ga,n=QP(mq(),a,"forever",IP());if(P(n)){n=!!n.ga;mq();bua||(bua=(new CW).b());var r=QP(0,a,"buttonKind",bua);if(P(r)){var r=r.ga,y=QP(mq(),a,"actionKey",cua());if(P(y)){y=y.ga;a=QP(mq(),a,"disableUntilTicksStart",
+IP());if(P(a))return(new Kp).i(Bsa(b,d,e,f,h,k,n,r,y,!!a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(y))throw(new q).i(y);return y}if(!Hp(r))throw(new q).i(r);return r}if(!Hp(n))throw(new q).i(n);return n}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({a7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$12$1$",{a7:1,d:1,kc:1,fa:1});function nv(){}nv.prototype=new l;nv.prototype.constructor=nv;c=nv.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"variable",BW());if(P(b)){var b=b.ga,d=QP(mq(),a,"left",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"top",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"right",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"bottom",LP());if(P(h)){var h=h.ga|0,k=QP(mq(),a,"display",BW());if(P(k)){var k=k.ga,n=QP(mq(),a,"choices",dua());if(P(n)){n=n.ga;a=QP(mq(),a,"currentChoice",LP());if(P(a))return(new Kp).i(Gsa(new FU,b,d,e,f,h,k,n,a.ga|0));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(n))throw(new q).i(n);
+return n}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({b7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$22$1$",{b7:1,d:1,kc: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.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"variable",BW());if(P(b)){var b=b.ga,d=QP(mq(),a,"left",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"top",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"right",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"bottom",LP());if(P(h)){h=h.ga|0;mq();DW||(DW=(new EW).b());a=QP(0,a,"boxedValue",DW);if(P(a))return(new Kp).i(Msa(b,d,e,f,h,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);
+return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({c7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$30$1$",{c7:1,d:1,kc: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.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"source",BW());if(P(b)){var b=b.ga,d=QP(mq(),a,"left",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"top",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"right",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"bottom",LP());if(P(h)){var h=h.ga|0,k=QP(mq(),a,"display",BW());if(P(k)){var k=k.ga,n=QP(mq(),a,"precision",LP());if(P(n)){n=n.ga|0;a=QP(mq(),a,"fontSize",LP());if(P(a))return(new Kp).i(Osa(b,d,e,f,h,k,n,a.ga|0));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(n))throw(new q).i(n);return n}if(!Hp(k))throw(new q).i(k);
+return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({d7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$40$1$",{d7:1,d:1,kc: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.Ra(a)};
+c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"left",LP());if(P(b)){var b=b.ga|0,d=QP(mq(),a,"top",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"right",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"bottom",LP());if(P(f)){f=f.ga|0;a=QP(mq(),a,"fontSize",LP());if(P(a))return(new Kp).i(Qsa(b,d,e,f,a.ga|0));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({e7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$47$1$",{e7:1,d:1,kc: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.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ta=function(a){return this.Ra(a)};c.Ja=function(a){return!!this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"display",BW());if(P(b)){var b=b.ga,d=QP(mq(),a,"left",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"top",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"right",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"bottom",LP());if(P(h)){var h=h.ga|0,k=QP(mq(),a,"xAxis",BW());if(P(k)){var k=k.ga,n=QP(mq(),a,"yAxis",BW());if(P(n)){var n=n.ga,r=QP(mq(),a,"xmin",NP());if(P(r)){var r=+r.ga,y=QP(mq(),a,"xmax",NP());if(P(y)){var y=+y.ga,E=QP(mq(),a,"ymin",NP());if(P(E)){var E=+E.ga,Q=QP(mq(),a,
+"ymax",NP());if(P(Q)){var Q=+Q.ga,R=QP(mq(),a,"autoPlotOn",IP());if(P(R)){var R=!!R.ga,da=QP(mq(),a,"legendOn",IP());if(P(da)){var da=!!da.ga,ma=QP(mq(),a,"setupCode",FW());if(P(ma)){var ma=ma.ga,ra=QP(mq(),a,"updateCode",FW());if(P(ra)){ra=ra.ga;a=QP(mq(),a,"pens",eua());if(P(a))return(new Kp).i(Ysa(new QU,b,d,e,f,h,k,n,r,y,E,Q,R,da,ma,ra,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(ra))throw(new q).i(ra);return ra}if(!Hp(ma))throw(new q).i(ma);return ma}if(!Hp(da))throw(new q).i(da);return da}if(!Hp(R))throw(new q).i(R);
+return R}if(!Hp(Q))throw(new q).i(Q);return Q}if(!Hp(E))throw(new q).i(E);return E}if(!Hp(y))throw(new q).i(y);return y}if(!Hp(r))throw(new q).i(r);return r}if(!Hp(n))throw(new q).i(n);return n}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};
+c.$classData=g({f7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$65$1$",{f7:1,d:1,kc: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.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ta=function(a){return this.Ra(a)};c.Ja=function(a){return!!this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"variable",BW());if(P(b)){var b=b.ga,d=QP(mq(),a,"left",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"top",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"right",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"bottom",LP());if(P(h)){var h=h.ga|0,k=QP(mq(),a,"display",BW());if(P(k)){var k=k.ga,n=QP(mq(),a,"min",FW());if(P(n)){var n=n.ga,r=QP(mq(),a,"max",FW());if(P(r)){var r=r.ga,y=QP(mq(),a,"default",NP());if(P(y)){var y=+y.ga,E=QP(mq(),a,"step",FW());if(P(E)){var E=E.ga,Q=QP(mq(),a,
+"units",BW());if(P(Q)){Q=Q.ga;mq();fua||(fua=(new GW).b());a=QP(0,a,"direction",fua);if(P(a))return(new Kp).i(Zsa(b,d,e,f,h,k,n,r,y,E,Q,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(Q))throw(new q).i(Q);return Q}if(!Hp(E))throw(new q).i(E);return E}if(!Hp(y))throw(new q).i(y);return y}if(!Hp(r))throw(new q).i(r);return r}if(!Hp(n))throw(new q).i(n);return n}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);
+return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({g7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$79$1$",{g7:1,d:1,kc: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.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ra(a)};
+c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"variable",BW());if(P(b)){var b=b.ga,d=QP(mq(),a,"left",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"top",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"right",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"bottom",LP());if(P(h)){var h=h.ga|0,k=QP(mq(),a,"display",BW());if(P(k)){k=k.ga;a=QP(mq(),a,"on",IP());if(P(a))return(new Kp).i(cta(b,d,e,f,h,k,!!a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);
+return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({h7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$88$1$",{h7:1,d:1,kc: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.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"display",BW());if(P(b)){var b=b.ga,d=QP(mq(),a,"left",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"top",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"right",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"bottom",LP());if(P(h)){var h=h.ga|0,k=QP(mq(),a,"fontSize",LP());if(P(k)){var k=k.ga|0,n=QP(mq(),a,"color",NP());if(P(n)){n=+n.ga;a=QP(mq(),a,"transparent",IP());if(P(a))return(new Kp).i(eta(b,d,e,f,h,k,n,!!a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(n))throw(new q).i(n);
+return n}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({i7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$98$1$",{i7:1,d:1,kc:1,fa:1});function CW(){}CW.prototype=new l;CW.prototype.constructor=CW;c=CW.prototype;
+c.b=function(){return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};
+c.Ta=function(a){var b=!1,d=null;if(Fu(a)&&(b=!0,d=a,"OBSERVER"===d.Lc.toUpperCase()))return fq(),a=Ei(),oq().y(a);if(b&&"TURTLE"===d.Lc.toUpperCase())return fq(),a=Fi(),oq().y(a);if(b&&"PATCH"===d.Lc.toUpperCase())return fq(),a=Gi(),oq().y(a);if(b&&"LINK"===d.Lc.toUpperCase())return fq(),a=Hi(),oq().y(a);fq();a="Agent kind can only be 'Observer', 'Turtle', 'Patch', or 'Link' but was "+a;return gq(Vp(),a)};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};
+c.$classData=g({j7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2AgentKind$",{j7:1,d:1,kc:1,fa:1});var bua=void 0;function EW(){this.i_=null;this.a=!1}EW.prototype=new l;EW.prototype.constructor=EW;c=EW.prototype;
+c.b=function(){DW=this;var a=[Ksa(),Jsa(),Isa()];if(0===(a.length|0))a=hh();else{for(var b=ih(new rh,hh()),d=0,e=a.length|0;d<e;)sh(b,a[d]),d=1+d|0;a=b.Va}b=m(new p,function(){return function(a){var b=a.wj();return(new w).e(b,a)}}(this));d=Yk();d=Zk(d);this.i_=kr(a,b,d).De(Ne().ml);this.a=!0;return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};
+c.Ta=function(a){a=Cr(a.eh);var b=m(new p,function(){return function(a){return a.ja()}}(this)),d=gua();a=Ko(a,b,d);t();b=(new H).i(a);if(null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),null!==d)){var e=d.na();if("type"===d.ja()&&Fu(e)&&(d=e.Lc,null!==b&&(e=b.na(),"value"===b.ja()&&Du(e)&&(b=e.zi,d===KU().wj()))))return fq(),a=LU(new IU,b,KU()),oq().y(a)}t();b=(new H).i(a);if(null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),null!==d&&(e=d.na(),"type"===d.ja()&&Fu(e)&&(d=e.Lc,null!==b&&(e=b.na(),
+"value"===b.ja()&&Eu(e)&&(b=e.Dl,d===KU().wj()))))))return fq(),a=LU(new IU,b,KU()),oq().y(a);t();b=(new H).i(a);if(null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),null!==d&&(e=d.na(),"type"===d.ja()&&Fu(e)&&(d=e.Lc,null!==b&&(e=b.na(),"value"===b.ja()&&Du(e)&&(b=e.zi,d===JU().wj()))))))return fq(),a=LU(new IU,b,JU()),oq().y(a);t();b=(new H).i(a);if(null!==b.Q&&0===b.Q.vb(2)&&(d=b.Q.X(0),b=b.Q.X(1),null!==d&&(e=d.na(),"type"===d.ja()&&Fu(e)&&(d=e.Lc,null!==b&&(e=b.na(),"value"===b.ja()&&Eu(e)&&
+(b=e.Dl,d===JU().wj()))))))return fq(),a=LU(new IU,b,JU()),oq().y(a);t();b=(new H).i(a);if(null!==b.Q&&0===b.Q.vb(3)&&(d=b.Q.X(0),e=b.Q.X(1),b=b.Q.X(2),null!==d)){var f=d.na();if("multiline"===d.ja()&&Gu(f)&&(d=f.tm,null!==e&&(f=e.na(),"type"===e.ja()&&Fu(f)&&(e=f.Lc,null!==b&&(f=b.na(),"value"===b.ja()&&Fu(f)))))){a=f.Lc;fq();b=new MU;if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/WidgetRead.scala: 110");a=Lsa(b,a,this.i_.y(e),d);
+return oq().y(a)}}fq();a="Invalid input box: "+a;return gq(Vp(),a)};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({k7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2BoxedValue$",{k7:1,d:1,kc:1,fa:1});var DW=void 0;function HW(){}HW.prototype=new l;HW.prototype.constructor=HW;c=HW.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+function hua(a,b){if(Eu(b))return a=b.Dl,fq(),a=(new xg).ZE(a),oq().y(a);if(Du(b))return a=b.zi,fq(),a=(new xg).ZE(a),oq().y(a);if(Fu(b))return a=b.Lc,fq(),a=(new wg).c(a),oq().y(a);if(Gu(b))return a=b.tm,fq(),a=(new yg).qv(a),oq().y(a);if(Hu(b))return a=iua(a,b.Va),jua||(jua=(new IW).b()),kua(a,jua);fq();a="Could not convert "+b+" to a chooseable value";return gq(Vp(),a)}
+function iua(a,b){fq();var d=psa();return b.Ib(oq().y(d),ub(new vb,function(){return function(a,b){if(P(a)){a=a.ga;if(Eu(b))return b=b.Dl,fq(),a=fo(a,b),oq().y(a);if(Du(b))return b=b.zi,fq(),a=fo(a,b),oq().y(a);if(Gu(b))return b=b.tm,fq(),a=fo(a,b),oq().y(a);if(Fu(b))return b=b.Lc,fq(),a=fo(a,b),oq().y(a);if(Hu(b)){b=b.Va;b=iua(dua(),b);if(P(b))return(new Kp).i(fo(a,b.ga));if(!Hp(b))throw(new q).i(b);return b}fq();a="could not convert "+b+" to a chooseable value";return gq(Vp(),a)}if(Hp(a))return a;
+throw(new q).i(a);}}(a)))}c.Ja=function(a){return!!this.Ta(a)};c.Ta=function(a){if(Hu(a)){a=a.Va;var b=m(new p,function(){return function(a){return hua(dua(),a)}}(this)),d=t();a=a.ya(b,d.s);fq();b=u();return a.Ib(oq().y(b),ub(new vb,function(){return function(a,b){if(P(a)){a=a.ga;if(P(b)){b=b.ga;var d=x().s;return(new Kp).i(oi(a,b,d))}if(!Hp(b))throw(new q).i(b);return b}if(Hp(a))return a;throw(new q).i(a);}}(this)))}fq();a="choices must be a list of chooseable values - found "+a;return gq(Vp(),a)};
+c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({l7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2Chooseable$",{l7:1,d:1,kc:1,fa:1});var lua=void 0;function dua(){lua||(lua=(new HW).b());return lua}function GW(){}GW.prototype=new l;GW.prototype.constructor=GW;c=GW.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};
+c.Ta=function(a){var b=!1,d=null;if(Fu(a)&&(b=!0,d=a,"HORIZONTAL"===d.Lc.toUpperCase()))return fq(),a=ata(),oq().y(a);if(b&&"VERTICAL"===d.Lc.toUpperCase())return fq(),a=bta(),oq().y(a);fq();a="Slider direction can only be 'Horizontal' or 'Vertical' but was "+a;return gq(Vp(),a)};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({m7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2Direction$",{m7:1,d:1,kc:1,fa:1});var fua=void 0;
+function JW(){}JW.prototype=new l;JW.prototype.constructor=JW;c=JW.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};c.Ta=function(a){if(su()===a)return fq(),oq().y("NIL");if(Fu(a))return a=a.Lc,fq(),oq().y(a);fq();a="could not convert "+nq(oa(a))+" to String";return gq(Vp(),a)};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};
+c.$classData=g({n7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2NilString$",{n7:1,d:1,kc:1,fa:1});var mua=void 0;function FW(){mua||(mua=(new JW).b());return mua}function KW(){}KW.prototype=new l;KW.prototype.constructor=KW;c=KW.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};
+c.Ta=function(a){var b=!1,d=null;if(su()===a||Fu(a)&&(b=!0,d=a,"NIL"===d.Lc))return fq(),a=C(),oq().y(a);if(b&&(b=d.Lc,1===(b.length|0)))return fq(),a=(new Tb).c(b),a=(new H).i(Dj(a)),oq().y(a);fq();a=sd(a);return gq(Vp(),a)};c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){if(b.z())a=C();else{b=b.R();b=cua().Ta(b);if(P(b))a=b;else{if(!Hp(b))throw(new q).i(b);b=b.fc;Lp();a=b+" is an invalid value for "+a;b=[];var d=Np().Wd,e=b.length|0;a:for(;;){if(0!==e){d=(new Pp).Vb(b[-1+e|0],d);e=-1+e|0;continue a}break}a=(new Ip).i((new Rp).Vb(a,d))}a=(new H).i(a)}return a.z()?(fq(),a=C(),oq().y(a)):a.R()};c.$classData=g({o7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2OptionChar$",{o7:1,d:1,kc:1,fa:1});var nua=void 0;
+function cua(){nua||(nua=(new KW).b());return nua}function LW(){}LW.prototype=new l;LW.prototype.constructor=LW;c=LW.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};c.Ta=function(a){var b=!1,d=null;if(su()===a||Fu(a)&&(b=!0,d=a,"NIL"===d.Lc))return fq(),a=C(),oq().y(a);if(b)return a=d.Lc,fq(),a=(new H).i(a),oq().y(a);fq();a=sd(a);return gq(Vp(),a)};
+c.za=function(a){return rb(this,a)};c.Fc=function(a,b){if(b.z())a=C();else{b=b.R();b=BW().Ta(b);if(P(b))a=b;else{if(!Hp(b))throw(new q).i(b);b=b.fc;Lp();a=b+" is an invalid value for "+a;b=[];var d=Np().Wd,e=b.length|0;a:for(;;){if(0!==e){d=(new Pp).Vb(b[-1+e|0],d);e=-1+e|0;continue a}break}a=(new Ip).i((new Rp).Vb(a,d))}a=(new H).i(a)}return a.z()?(fq(),a=C(),oq().y(a)):a.R()};c.$classData=g({p7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2OptionString$",{p7:1,d:1,kc:1,fa:1});
+var oua=void 0;function BW(){oua||(oua=(new LW).b());return oua}function MW(){}MW.prototype=new l;MW.prototype.constructor=MW;c=MW.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};
+c.Ta=function(a){if(Hu(a)){a=a.Va;fq();var b=u();return a.Ib(oq().y(b),ub(new vb,function(){return function(a,b){if(Ku(b)){if(P(a)){a=a.ga;var f=(new Be).b();b=(f.Pa?f.tb:pua(f)).Ra(b);if(P(b))return b=b.ga,f=x().s,(new Kp).i(oi(a,b,f));if(!Hp(b))throw(new q).i(b);return b}if(Hp(a))return a;throw(new q).i(a);}return qua(eua())}}(this)))}return qua()};function pua(a){if(null===a)throw(new Ce).b();return a.Pa?a.tb:De(a,(new NW).b())}c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){return Pu(this,a,b)};function qua(){fq();return gq(Vp(),"Must supply a list of pens")}c.$classData=g({q7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2PenList$",{q7:1,d:1,kc:1,fa:1});var rua=void 0;function eua(){rua||(rua=(new MW).b());return rua}function NW(){}NW.prototype=new l;NW.prototype.constructor=NW;c=NW.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"display",FW());if(P(b)){var b=b.ga,d=QP(mq(),a,"interval",NP());if(P(d)){var d=+d.ga,e=QP(mq(),a,"mode",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"color",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"inLegend",IP());if(P(h)){var h=!!h.ga,k=QP(mq(),a,"setupCode",FW());if(P(k)){k=k.ga;a=QP(mq(),a,"updateCode",FW());if(P(a))return(new Kp).i(Usa(new PU,b,d,e,f,h,k,a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);return h}if(!Hp(f))throw(new q).i(f);
+return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({r7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2PenList$reader$macro$9$3$",{r7:1,d:1,kc:1,fa:1});function AW(){}AW.prototype=new l;AW.prototype.constructor=AW;c=AW.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};
+c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};c.Ta=function(a){var b=!1,d=null;if(Fu(a)&&(b=!0,d=a,"CONTINUOUS"===d.Lc.toUpperCase()))return fq(),a=jta(),oq().y(a);if(b&&"TICKBASED"===d.Lc.toUpperCase())return fq(),a=kta(),oq().y(a);fq();a="View update mode can only be 'Continuous' or 'TickBased' but was "+a;return gq(Vp(),a)};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};
+c.$classData=g({s7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2UpdateMode$",{s7:1,d:1,kc:1,fa:1});var aua=void 0;function zW(){}zW.prototype=new l;zW.prototype.constructor=zW;c=zW.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};function sua(a){if(null===a)throw(new Ce).b();return a.Pa?a.tb:De(a,(new OW).b())}c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};
+c.Ta=function(a){var b=(new Be).b();return(b.Pa?b.tb:sua(b)).Ra(a)};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({t7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2WorldDimensions$",{t7:1,d:1,kc:1,fa:1});var $ta=void 0;function OW(){}OW.prototype=new l;OW.prototype.constructor=OW;c=OW.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Ia=function(a){return this.Ra(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!this.Ra(a)};c.Ta=function(a){return this.Ra(a)};
+c.Ra=function(a){var b=QP(mq(),a,"minPxcor",LP());if(P(b)){var b=b.ga|0,d=QP(mq(),a,"maxPxcor",LP());if(P(d)){var d=d.ga|0,e=QP(mq(),a,"minPycor",LP());if(P(e)){var e=e.ga|0,f=QP(mq(),a,"maxPycor",LP());if(P(f)){var f=f.ga|0,h=QP(mq(),a,"patchSize",NP());if(P(h)){var h=+h.ga,k=QP(mq(),a,"wrappingAllowedInX",IP());if(P(k)){k=!!k.ga;a=QP(mq(),a,"wrappingAllowedInY",IP());if(P(a))return(new Kp).i(hta(b,d,e,f,h,k,!!a.ga));if(!Hp(a))throw(new q).i(a);return a}if(!Hp(k))throw(new q).i(k);return k}if(!Hp(h))throw(new q).i(h);
+return h}if(!Hp(f))throw(new q).i(f);return f}if(!Hp(e))throw(new q).i(e);return e}if(!Hp(d))throw(new q).i(d);return d}if(Hp(b))return b;throw(new q).i(b);};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({u7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2WorldDimensions$reader$macro$9$1$",{u7:1,d:1,kc:1,fa:1});function nQ(){}nQ.prototype=new l;nQ.prototype.constructor=nQ;c=nQ.prototype;c.zc=function(a){return oQ(a)};c.y=function(a){return oQ(a)};
+c.Ia=function(a){return oQ(a)|0};c.vg=function(){return this};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!oQ(a)};
+function oQ(a){var b=t(),d=bQ(),d=Yu(d,a.Wa),d=(new w).e("left",d),e=bQ(),e=Yu(e,a.lb),e=(new w).e("top",e),f=bQ(),f=Yu(f,a.Na),f=(new w).e("right",f),h=bQ(),h=Yu(h,a.kb),h=(new w).e("bottom",h),k=bQ();a=Yu(k,a.Td);a=(new w).e("fontSize",a);k=(new H).i(PW(QW(),"output"));d=[d,e,f,h,a,(new w).e("type",k)];b=G(b,(new J).j(d));d=Xg();a=new RW;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.za=function(a){return rb(this,a)};
+c.$classData=g({w7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$10$1$",{w7:1,d:1,Cc:1,fa:1});function AQ(){}AQ.prototype=new l;AQ.prototype.constructor=AQ;c=AQ.prototype;c.zc=function(a){return this.dg(a)};c.y=function(a){return this.dg(a)};c.Ia=function(a){return this.dg(a)|0};c.vg=function(){return this};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.dg(a)};c.za=function(a){return rb(this,a)};
+c.dg=function(a){var b=t(),d=QW(),d=Yu(d,a.cb),d=(new w).e("display",d),e=YP(),e=Yu(e,a.Ol),e=(new w).e("interval",e),f=bQ(),f=Yu(f,a.Sl),f=(new w).e("mode",f),h=bQ(),h=Yu(h,a.Db),h=(new w).e("color",h),k=VP(),k=Yu(k,a.Em),k=(new w).e("inLegend",k),n=QW(),n=Yu(n,a.Bg),n=(new w).e("setupCode",n),r=QW();a=Yu(r,a.Cg);a=(new w).e("updateCode",a);r=(new H).i(PW(QW(),"pen"));d=[d,e,f,h,k,n,a,(new w).e("type",r)];b=G(b,(new J).j(d));d=Xg();a=new SW;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))};
+c.$classData=g({y7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$12$1$",{y7:1,d:1,Cc:1,fa:1});function pQ(){}pQ.prototype=new l;pQ.prototype.constructor=pQ;c=pQ.prototype;c.zc=function(a){return qQ(a)};c.y=function(a){return qQ(a)};
+function qQ(a){var b=t(),d=TW(),d=BQ(d,a.cb),d=(new w).e("display",d),e=bQ(),e=Yu(e,a.Wa),e=(new w).e("left",e),f=bQ(),f=Yu(f,a.lb),f=(new w).e("top",f),h=bQ(),h=Yu(h,a.Na),h=(new w).e("right",h),k=bQ(),k=Yu(k,a.kb),k=(new w).e("bottom",k),n=TW(),n=BQ(n,a.Go),n=(new w).e("xAxis",n),r=TW(),r=BQ(r,a.Io),r=(new w).e("yAxis",r),y=YP(),y=Yu(y,a.nj),y=(new w).e("xmin",y),E=YP(),E=Yu(E,a.mj),E=(new w).e("xmax",E),Q=YP(),Q=Yu(Q,a.pj),Q=(new w).e("ymin",Q),R=YP(),R=Yu(R,a.oj),R=(new w).e("ymax",R),da=VP(),
+da=Yu(da,a.yn),da=(new w).e("autoPlotOn",da),ma=VP(),ma=Yu(ma,a.Xn),ma=(new w).e("legendOn",ma),ra=QW(),ra=Yu(ra,a.Bg),ra=(new w).e("setupCode",ra),Ca=QW(),Ca=Yu(Ca,a.Cg),Ca=(new w).e("updateCode",Ca);tua||(tua=(new UW).b());a=Yu(tua,a.ko);a=(new w).e("pens",a);var ab=(new H).i(PW(QW(),"plot")),d=[d,e,f,h,k,n,r,y,E,Q,R,da,ma,ra,Ca,a,(new w).e("type",ab)],b=G(b,(new J).j(d)),d=Xg();a=new VW;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.Ia=function(a){return qQ(a)|0};c.vg=function(){return this};
+c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!qQ(a)};c.za=function(a){return rb(this,a)};c.$classData=g({A7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$14$1$",{A7:1,d:1,Cc:1,fa:1});function rQ(){}rQ.prototype=new l;rQ.prototype.constructor=rQ;c=rQ.prototype;c.zc=function(a){return sQ(a)};c.y=function(a){return sQ(a)};
+function sQ(a){var b=t(),d=TW(),d=BQ(d,a.td),d=(new w).e("variable",d),e=bQ(),e=Yu(e,a.Wa),e=(new w).e("left",e),f=bQ(),f=Yu(f,a.lb),f=(new w).e("top",f),h=bQ(),h=Yu(h,a.Na),h=(new w).e("right",h),k=bQ(),k=Yu(k,a.kb),k=(new w).e("bottom",k),n=TW(),n=BQ(n,a.cb),n=(new w).e("display",n),r=QW(),r=Yu(r,a.ao),r=(new w).e("min",r),y=QW(),y=Yu(y,a.Lm),y=(new w).e("max",y),E=YP(),E=Yu(E,a.Hb),E=(new w).e("default",E),Q=QW(),Q=Yu(Q,a.en),Q=(new w).e("step",Q),R=TW(),R=BQ(R,a.eq),R=(new w).e("units",R);uua||
+(uua=(new WW).b());a=Yu(uua,a.ip);a=(new w).e("direction",a);var da=(new H).i(PW(QW(),"slider")),d=[d,e,f,h,k,n,r,y,E,Q,R,a,(new w).e("type",da)],b=G(b,(new J).j(d)),d=Xg();a=new XW;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.Ia=function(a){return sQ(a)|0};c.vg=function(){return this};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!sQ(a)};c.za=function(a){return rb(this,a)};
+c.$classData=g({C7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$16$1$",{C7:1,d:1,Cc:1,fa:1});function tQ(){}tQ.prototype=new l;tQ.prototype.constructor=tQ;c=tQ.prototype;c.zc=function(a){return uQ(a)};c.y=function(a){return uQ(a)};c.Ia=function(a){return uQ(a)|0};c.vg=function(){return this};c.l=function(){return"\x3cfunction1\x3e"};
+function uQ(a){var b=t(),d=TW(),d=BQ(d,a.td),d=(new w).e("variable",d),e=bQ(),e=Yu(e,a.Wa),e=(new w).e("left",e),f=bQ(),f=Yu(f,a.lb),f=(new w).e("top",f),h=bQ(),h=Yu(h,a.Na),h=(new w).e("right",h),k=bQ(),k=Yu(k,a.kb),k=(new w).e("bottom",k),n=TW(),n=BQ(n,a.cb),n=(new w).e("display",n),r=VP();a=Yu(r,a.Lp);a=(new w).e("on",a);r=(new H).i(PW(QW(),"switch"));d=[d,e,f,h,k,n,a,(new w).e("type",r)];b=G(b,(new J).j(d));d=Xg();a=new YW;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.Ja=function(a){return!!uQ(a)};
+c.za=function(a){return rb(this,a)};c.$classData=g({E7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$18$1$",{E7:1,d:1,Cc:1,fa:1});function fQ(){}fQ.prototype=new l;fQ.prototype.constructor=fQ;c=fQ.prototype;c.zc=function(a){return gQ(a)};c.y=function(a){return gQ(a)};c.Ia=function(a){return gQ(a)|0};c.vg=function(){return this};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!gQ(a)};
+function gQ(a){var b=t(),d=TW(),d=BQ(d,a.Bc),d=(new w).e("source",d),e=bQ(),e=Yu(e,a.Wa),e=(new w).e("left",e),f=bQ(),f=Yu(f,a.lb),f=(new w).e("top",f),h=bQ(),h=Yu(h,a.Na),h=(new w).e("right",h),k=bQ(),k=Yu(k,a.kb),k=(new w).e("bottom",k),n=TW(),n=BQ(n,a.cb),n=(new w).e("display",n),r=VP(),r=Yu(r,a.tp),r=(new w).e("forever",r);vua||(vua=(new ZW).b());var y=Yu(vua,a.An),y=(new w).e("buttonKind",y);wua||(wua=(new $W).b());var E=BQ(wua,a.So),E=(new w).e("actionKey",E),Q=VP();a=Yu(Q,a.jp);a=(new w).e("disableUntilTicksStart",
+a);Q=(new H).i(PW(QW(),"button"));d=[d,e,f,h,k,n,r,y,E,a,(new w).e("type",Q)];b=G(b,(new J).j(d));d=Xg();a=new aX;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.za=function(a){return rb(this,a)};c.$classData=g({G7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$2$1$",{G7:1,d:1,Cc:1,fa:1});function vQ(){}vQ.prototype=new l;vQ.prototype.constructor=vQ;c=vQ.prototype;c.zc=function(a){return wQ(a)};c.y=function(a){return wQ(a)};c.Ia=function(a){return wQ(a)|0};c.vg=function(){return this};
+c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!wQ(a)};
+function wQ(a){var b=t(),d=TW(),d=BQ(d,a.cb),d=(new w).e("display",d),e=bQ(),e=Yu(e,a.Wa),e=(new w).e("left",e),f=bQ(),f=Yu(f,a.lb),f=(new w).e("top",f),h=bQ(),h=Yu(h,a.Na),h=(new w).e("right",h),k=bQ(),k=Yu(k,a.kb),k=(new w).e("bottom",k),n=bQ(),n=Yu(n,a.Td),n=(new w).e("fontSize",n),r=YP(),r=Yu(r,a.Db),r=(new w).e("color",r),y=VP();a=Yu(y,a.Yr);a=(new w).e("transparent",a);y=(new H).i(PW(QW(),"textBox"));d=[d,e,f,h,k,n,r,a,(new w).e("type",y)];b=G(b,(new J).j(d));d=Xg();a=new bX;e=t();return(new qu).bc(Wg(d,
+b.lc(a,e.s)))}c.za=function(a){return rb(this,a)};c.$classData=g({I7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$20$1$",{I7:1,d:1,Cc:1,fa:1});function yQ(){}yQ.prototype=new l;yQ.prototype.constructor=yQ;c=yQ.prototype;c.zc=function(a){return zQ(a)};c.y=function(a){return zQ(a)};
+function zQ(a){var b=t(),d=bQ(),d=Yu(d,a.Wa),d=(new w).e("left",d),e=bQ(),e=Yu(e,a.lb),e=(new w).e("top",e),f=bQ(),f=Yu(f,a.Na),f=(new w).e("right",f),h=bQ(),h=Yu(h,a.kb),h=(new w).e("bottom",h);xua||(xua=(new cX).b());var k=Yu(xua,a.Os),k=(new w).e("dimensions",k),n=bQ(),n=Yu(n,a.Td),n=(new w).e("fontSize",n);yua||(yua=(new dX).b());var r=Yu(yua,a.fq),r=(new w).e("updateMode",r),y=VP(),y=Yu(y,a.Lr),y=(new w).e("showTickCounter",y),E=TW(),E=BQ(E,a.Rr),E=(new w).e("tickCounterLabel",E),Q=YP();a=Yu(Q,
+a.Jq);a=(new w).e("frameRate",a);Q=(new H).i(PW(QW(),"view"));d=[d,e,f,h,k,n,r,y,E,a,(new w).e("type",Q)];b=G(b,(new J).j(d));d=Xg();a=new eX;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.Ia=function(a){return zQ(a)|0};c.vg=function(){return this};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!zQ(a)};c.za=function(a){return rb(this,a)};c.$classData=g({K7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$22$1$",{K7:1,d:1,Cc:1,fa:1});function hQ(){}
+hQ.prototype=new l;hQ.prototype.constructor=hQ;c=hQ.prototype;c.zc=function(a){return iQ(a)};
+function iQ(a){var b=t(),d=TW(),d=BQ(d,a.td),d=(new w).e("variable",d),e=bQ(),e=Yu(e,a.Wa),e=(new w).e("left",e),f=bQ(),f=Yu(f,a.lb),f=(new w).e("top",f),h=bQ(),h=Yu(h,a.Na),h=(new w).e("right",h),k=bQ(),k=Yu(k,a.kb),k=(new w).e("bottom",k),n=TW(),n=BQ(n,a.cb),n=(new w).e("display",n);zua||(zua=(new fX).b());var r=Yu(zua,a.$o),r=(new w).e("choices",r),y=bQ();a=Yu(y,a.fp);a=(new w).e("currentChoice",a);y=(new H).i(PW(QW(),"chooser"));d=[d,e,f,h,k,n,r,a,(new w).e("type",y)];b=G(b,(new J).j(d));d=Xg();
+a=new gX;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.y=function(a){return iQ(a)};c.Ia=function(a){return iQ(a)|0};c.vg=function(){return this};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!iQ(a)};c.za=function(a){return rb(this,a)};c.$classData=g({M7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$4$1$",{M7:1,d:1,Cc:1,fa:1});function jQ(){}jQ.prototype=new l;jQ.prototype.constructor=jQ;c=jQ.prototype;c.zc=function(a){return kQ(a)};c.y=function(a){return kQ(a)};
+c.Ia=function(a){return kQ(a)|0};c.vg=function(){return this};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!kQ(a)};
+function kQ(a){var b=t(),d=TW(),d=BQ(d,a.td),d=(new w).e("variable",d),e=bQ(),e=Yu(e,a.Wa),e=(new w).e("left",e),f=bQ(),f=Yu(f,a.lb),f=(new w).e("top",f),h=bQ(),h=Yu(h,a.Na),h=(new w).e("right",h),k=bQ(),k=Yu(k,a.kb),k=(new w).e("bottom",k);Aua||(Aua=(new hX).b());a=Yu(Aua,a.vm);a=(new w).e("boxedValue",a);var n=(new H).i(PW(QW(),"inputBox")),d=[d,e,f,h,k,a,(new w).e("type",n)],b=G(b,(new J).j(d)),d=Xg();a=new iX;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))}c.za=function(a){return rb(this,a)};
+c.$classData=g({O7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$6$1$",{O7:1,d:1,Cc:1,fa:1});function lQ(){}lQ.prototype=new l;lQ.prototype.constructor=lQ;c=lQ.prototype;c.zc=function(a){return mQ(a)};c.y=function(a){return mQ(a)};c.Ia=function(a){return mQ(a)|0};c.vg=function(){return this};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!mQ(a)};
+function mQ(a){var b=t(),d=TW(),d=BQ(d,a.Bc),d=(new w).e("source",d),e=bQ(),e=Yu(e,a.Wa),e=(new w).e("left",e),f=bQ(),f=Yu(f,a.lb),f=(new w).e("top",f),h=bQ(),h=Yu(h,a.Na),h=(new w).e("right",h),k=bQ(),k=Yu(k,a.kb),k=(new w).e("bottom",k),n=TW(),n=BQ(n,a.cb),n=(new w).e("display",n),r=bQ(),r=Yu(r,a.ei),r=(new w).e("precision",r),y=bQ();a=Yu(y,a.Td);a=(new w).e("fontSize",a);y=(new H).i(PW(QW(),"monitor"));d=[d,e,f,h,k,n,r,a,(new w).e("type",y)];b=G(b,(new J).j(d));d=Xg();a=new jX;e=t();return(new qu).bc(Wg(d,
+b.lc(a,e.s)))}c.za=function(a){return rb(this,a)};c.$classData=g({Q7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$8$1$",{Q7:1,d:1,Cc:1,fa:1});function kX(){}kX.prototype=new l;kX.prototype.constructor=kX;c=kX.prototype;c.b=function(){return this};c.y=function(a){return this.Ta(a)};c.Ia=function(a){return this.Ta(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.Ta(a)};
+c.Ta=function(a){var b=(new jv).c("type");if(Ku(a)&&(b=a.eh.gc(b.va),!b.z()&&(b=b.R(),Fu(b)&&(b=b.Lc,lv||(lv=(new kv).b()),b=lv.QF().gc(b),!b.z()))))return b.R().y(a);fq();return gq(Vp(),"Widgets must be represented as a JSON Object with type specified")};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return Pu(this,a,b)};c.$classData=g({S7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$readWidgetJson$",{S7:1,d:1,kc:1,fa:1});var Bua=void 0;function ZW(){}ZW.prototype=new l;
+ZW.prototype.constructor=ZW;c=ZW.prototype;c.zc=function(a){return(new xu).c(a.l())};c.b=function(){return this};c.y=function(a){return(new xu).c(a.l())};c.Ia=function(a){return(new xu).c(a.l())|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!(new xu).c(a.l())};c.za=function(a){return rb(this,a)};c.$classData=g({V7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$agentKind2Json$",{V7:1,d:1,Cc:1,fa:1});var vua=void 0;function hX(){}hX.prototype=new l;
+hX.prototype.constructor=hX;c=hX.prototype;c.zc=function(a){return lX(a)};c.b=function(){return this};c.y=function(a){return lX(a)};c.Ia=function(a){return lX(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!lX(a)};
+function lX(a){var b=!1,d=null;if(GU(a)){var b=!0,d=a,e=d.W,f=d.Ci;if(f===KU()){a=(new w).e("value",(new wu).Bj(e));d=(new xu).c(f.wj());a=[a,(new w).e("type",d)];d=fc(new gc,Cu());f=0;for(b=a.length|0;f<b;)ic(d,a[f]),f=1+f|0;return(new qu).bc(d.Va)}}if(b&&(f=d.W,d=d.Ci,d===JU())){a=(new w).e("value",(new wu).Bj(f));d=(new xu).c(d.wj());a=[a,(new w).e("type",d)];d=fc(new gc,Cu());f=0;for(b=a.length|0;f<b;)ic(d,a[f]),f=1+f|0;return(new qu).bc(d.Va)}if(HU(a)){f=a.Ci;d=a.lr;a=(new xu).c(a.W);a=(new w).e("value",
+a);f=(new xu).c(f.wj());f=(new w).e("type",f);d=(new yu).ud(d);a=[a,f,(new w).e("multiline",d)];d=fc(new gc,Cu());f=0;for(b=a.length|0;f<b;)ic(d,a[f]),f=1+f|0;return(new qu).bc(d.Va)}throw(new q).i(a);}c.za=function(a){return rb(this,a)};c.$classData=g({W7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$boxedValue2Json$",{W7:1,d:1,Cc:1,fa:1});var Aua=void 0;function mX(){}mX.prototype=new l;mX.prototype.constructor=mX;c=mX.prototype;c.zc=function(a){return nX(0,a)};c.b=function(){return this};
+c.y=function(a){return nX(0,a)};c.Ia=function(a){return nX(0,a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!nX(0,a)};c.za=function(a){return rb(this,a)};
+function nX(a,b){if(b&&b.$classData&&b.$classData.m.zA)return(new wu).Bj(+b.W);if(b&&b.$classData&&b.$classData.m.BA)return(new xu).c(b.W);if(b&&b.$classData&&b.$classData.m.yA)return(new yu).ud(!!b.W);if(b&&b.$classData&&b.$classData.m.AA){b=b.W;a=Nj().pc;a=Nc(b,a);for(b=Qj(b.xc);b.oi;){var d=b.ka();a.Ma(nX(Cua(),Kba(Mba(),d)))}return(new zu).Ea(a.Ba().wb())}throw(new q).i(b);}c.$classData=g({Y7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$chooseable2Json$",{Y7:1,d:1,Cc:1,fa:1});var Dua=void 0;
+function Cua(){Dua||(Dua=(new mX).b());return Dua}function cX(){}cX.prototype=new l;cX.prototype.constructor=cX;c=cX.prototype;c.b=function(){return this};c.zc=function(a){return this.qm(a)};c.y=function(a){return this.qm(a)};c.Ia=function(a){return this.qm(a)|0};c.l=function(){return"\x3cfunction1\x3e"};function Eua(a){if(null===a)throw(new Ce).b();return a.Pa?a.tb:De(a,(new oX).b())}c.Ja=function(a){return!!this.qm(a)};c.za=function(a){return rb(this,a)};
+c.qm=function(a){var b=(new Be).b();a=(b.Pa?b.tb:Eua(b)).qm(a);if(!Ku(a))throw(new q).i(a);a=(new pX).Fy(a.eh,m(new p,function(){return function(a){return"type"!==a}}(this)));a=Cr(a);return(new qu).bc(Wg(Xg(),a))};c.$classData=g({$7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$dims2Json$",{$7:1,d:1,Cc:1,fa:1});var xua=void 0;function oX(){}oX.prototype=new l;oX.prototype.constructor=oX;c=oX.prototype;c.b=function(){return this};c.zc=function(a){return this.qm(a)};c.y=function(a){return this.qm(a)};
+c.Ia=function(a){return this.qm(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.qm(a)};
+c.qm=function(a){var b=t(),d=bQ(),d=Yu(d,a.Pm),d=(new w).e("minPxcor",d),e=bQ(),e=Yu(e,a.Mm),e=(new w).e("maxPxcor",e),f=bQ(),f=Yu(f,a.Qm),f=(new w).e("minPycor",f),h=bQ(),h=Yu(h,a.Nm),h=(new w).e("maxPycor",h),k=YP(),k=Yu(k,a.Tm),k=(new w).e("patchSize",k),n=VP(),n=Yu(n,a.gn),n=(new w).e("wrappingAllowedInX",n),r=VP();a=Yu(r,a.hn);a=(new w).e("wrappingAllowedInY",a);r=(new H).i(PW(QW(),"worldDimensions"));d=[d,e,f,h,k,n,a,(new w).e("type",r)];b=G(b,(new J).j(d));d=Xg();a=new qX;e=t();return(new qu).bc(Wg(d,
+b.lc(a,e.s)))};c.za=function(a){return rb(this,a)};c.$classData=g({a8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$dims2Json$writer$macro$2$3$",{a8:1,d:1,Cc:1,fa:1});function WW(){}WW.prototype=new l;WW.prototype.constructor=WW;c=WW.prototype;c.zc=function(a){return rX(a)};c.b=function(){return this};c.y=function(a){return rX(a)};c.Ia=function(a){return rX(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!rX(a)};c.za=function(a){return rb(this,a)};
+function rX(a){a=a.l();return(new xu).c(a.toLowerCase())}c.$classData=g({c8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$direction2Json$",{c8:1,d:1,Cc:1,fa:1});var uua=void 0;function sX(){}sX.prototype=new l;sX.prototype.constructor=sX;c=sX.prototype;c.zc=function(a){return this.dg(a)};c.b=function(){return this};c.y=function(a){return this.dg(a)};c.Ia=function(a){return this.dg(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.dg(a)};
+function Fua(a){if(null===a)throw(new Ce).b();return a.Pa?a.tb:De(a,(new tX).b())}c.za=function(a){return rb(this,a)};c.dg=function(a){var b=(new Be).b();return(b.Pa?b.tb:Fua(b)).dg(a)};c.$classData=g({d8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$pen2Json$",{d8:1,d:1,Cc:1,fa:1});var Gua=void 0;function Hua(){Gua||(Gua=(new sX).b());return Gua}function tX(){}tX.prototype=new l;tX.prototype.constructor=tX;c=tX.prototype;c.b=function(){return this};c.zc=function(a){return this.dg(a)};c.y=function(a){return this.dg(a)};
+c.Ia=function(a){return this.dg(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.dg(a)};c.za=function(a){return rb(this,a)};
+c.dg=function(a){var b=t(),d=QW(),d=Yu(d,a.cb),d=(new w).e("display",d),e=YP(),e=Yu(e,a.Ol),e=(new w).e("interval",e),f=bQ(),f=Yu(f,a.Sl),f=(new w).e("mode",f),h=bQ(),h=Yu(h,a.Db),h=(new w).e("color",h),k=VP(),k=Yu(k,a.Em),k=(new w).e("inLegend",k),n=QW(),n=Yu(n,a.Bg),n=(new w).e("setupCode",n),r=QW();a=Yu(r,a.Cg);a=(new w).e("updateCode",a);r=(new H).i(PW(QW(),"pen"));d=[d,e,f,h,k,n,a,(new w).e("type",r)];b=G(b,(new J).j(d));d=Xg();a=new uX;e=t();return(new qu).bc(Wg(d,b.lc(a,e.s)))};
+c.$classData=g({e8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$pen2Json$writer$macro$2$1$",{e8:1,d:1,Cc:1,fa:1});function vX(){}vX.prototype=new l;vX.prototype.constructor=vX;c=vX.prototype;c.zc=function(a){return PW(0,a)};c.b=function(){return this};c.y=function(a){return PW(0,a)};c.Ia=function(a){return PW(0,a)|0};c.l=function(){return"\x3cfunction1\x3e"};function PW(a,b){return"NIL"===b?su():(new xu).c(b)}c.Ja=function(a){return!!PW(0,a)};c.za=function(a){return rb(this,a)};
+c.$classData=g({h8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$string2NillableTortoiseJs$",{h8:1,d:1,Cc:1,fa:1});var Iua=void 0;function QW(){Iua||(Iua=(new vX).b());return Iua}function dX(){}dX.prototype=new l;dX.prototype.constructor=dX;c=dX.prototype;c.zc=function(a){return(new xu).c(a.l())};c.b=function(){return this};c.y=function(a){return(new xu).c(a.l())};c.Ia=function(a){return(new xu).c(a.l())|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!(new xu).c(a.l())};
+c.za=function(a){return rb(this,a)};c.$classData=g({j8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$updateMode2Json$",{j8:1,d:1,Cc:1,fa:1});var yua=void 0;function Mv(){this.Wl=this.Qt=null;this.Xt=!1;this.da=this.Ry=null}Mv.prototype=new l;Mv.prototype.constructor=Mv;c=Mv.prototype;c.mv=function(a,b){this.Qt=b;if(null===a)throw pg(qg(),null);this.da=a;this.Wl=(new Pv).mv(a,b);this.Wl.ui.onclick=a.io.A_;this.Xt=!1;a=new JQ;if(null===this)throw pg(qg(),null);a.da=this;this.Ry=a;return this};
+c.lV=function(){return!this.Xt};c.YZ=function(a){this.Wl.ui.checked=a};c.Fz=function(){return!!this.Wl.ui.checked};c.WD=function(a){a.iE().ta(m(new p,function(a){return function(d){a.Ry.eE("Test framework crashed during test:");a.Ry.$G(d)}}(this)));this.Xt=!!a.sE(I(function(){return function(){return!1}}(this)));Hv(this.da);this.Wl.my(this.Xt);this.Xt||(Qv(this.Wl),this.da.MF.uw(this.Wl),this.da.MF=this.Wl)};
+c.$classData=g({s8:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$RunningTest",{s8:1,d:1,u8:1,Gma:1});function Aw(){this.hr=!1;this.Yx=null}Aw.prototype=new l;Aw.prototype.constructor=Aw;Aw.prototype.$classData=g({E8:0},!1,"org.scalajs.testinterface.internal.FingerprintSerializer$DeserializedAnnotatedFingerprint",{E8:1,d:1,m9:1,eu:1});function Bw(){this.hr=!1;this.j_=null;this.XX=!1}Bw.prototype=new l;Bw.prototype.constructor=Bw;Bw.prototype.Ew=function(){return this.j_};Bw.prototype.Cv=function(){return this.hr};
+Bw.prototype.TF=function(){return this.XX};Bw.prototype.$classData=g({F8:0},!1,"org.scalajs.testinterface.internal.FingerprintSerializer$DeserializedSubclassFingerprint",{F8:1,d:1,MC:1,eu:1});function NQ(){xw.call(this)}NQ.prototype=new dia;NQ.prototype.constructor=NQ;
+NQ.prototype.BV=function(a){eia(this);Rha||(Rha=(new lw).b());var b=a.IG,d=Sha(nw(),new wX),e=$ha(cia(),(new tw).c(a.IG)),b={fullyQualifiedName:b,fingerprint:d,selector:e,status:a.NG.mA,durationLS:0,durationMS:0};a=a.mX;if(a.ba()){d=ew;e=fw();if(null===a.gg)throw(new me).c("This OptionalThrowable is not defined");b.throwable=d(e,a.gg)}ba.scalajsCom.send("event:"+ba.JSON.stringify(b))};NQ.prototype.Ey=function(a){xw.prototype.Ey.call(this,a);return this};
+NQ.prototype.$classData=g({N8:0},!1,"org.scalajs.testinterface.internal.Slave$RemoteEventHandler",{N8:1,M8:1,d:1,n9:1});function OQ(){xw.call(this);this.lf=0}OQ.prototype=new dia;OQ.prototype.constructor=OQ;function Jua(a,b,d){eia(a);ba.scalajsCom.send(Jv((new Kv).Ea((new J).j(["",":",":",""])),(new J).j([b,a.lf,d])))}OQ.prototype.eE=function(a){Jua(this,"error",a)};OQ.prototype.$G=function(a){Jua(this,"trace",ba.JSON.stringify(ew(fw(),a)))};OQ.prototype.zE=function(a){Jua(this,"info",a)};
+OQ.prototype.$classData=g({O8:0},!1,"org.scalajs.testinterface.internal.Slave$RemoteLogger",{O8:1,M8:1,d:1,JC:1});function xX(){}xX.prototype=new l;xX.prototype.constructor=xX;xX.prototype.b=function(){return this};function Iw(a,b){a=t();var d=XQ();b=G(t(),(new J).j([b]));return(new YQ).Ea(G(a,(new J).j([(new w).e(d,b)])))}function eqa(a){Fw();return Iw(Fw(),Gw(Hw(),a))}xX.prototype.$classData=g({Y8:0},!1,"play.api.libs.json.JsError$",{Y8:1,d:1,k:1,h:1});var Kua=void 0;
+function Fw(){Kua||(Kua=(new xX).b());return Kua}function yX(){this.mp=null}yX.prototype=new l;yX.prototype.constructor=yX;yX.prototype.nc=function(a){this.mp=a;return this};yX.prototype.l=function(){return Jv((new Kv).Ea((new J).j(["JsUndefined(",")"])),(new J).j([se(this.mp)]))};yX.prototype.Vj=function(a){return hr(this,a)};yX.prototype.$classData=g({HC:0},!1,"play.api.libs.json.JsUndefined",{HC:1,d:1,a9:1,sn:1});function zX(){}zX.prototype=new l;zX.prototype.constructor=zX;zX.prototype.b=function(){return this};
+function Gw(a,b){a=(new J).j([]);return(new AX).tv(G(t(),(new J).j([b])),a)}zX.prototype.$classData=g({g9:0},!1,"play.api.libs.json.JsonValidationError$",{g9:1,d:1,k:1,h:1});var Lua=void 0;function Hw(){Lua||(Lua=(new zX).b());return Lua}function CS(){this.gg=null}CS.prototype=new l;CS.prototype.constructor=CS;c=CS.prototype;c.b=function(){CS.prototype.Dd.call(this,null);return this};c.o=function(a){return a&&a.$classData&&a.$classData.m.wS?this.gg===a.gg:!1};c.ba=function(){return null!==this.gg};
+c.l=function(){return null===this.gg?"OptionalThrowable()":Jv((new Kv).Ea((new J).j(["OptionalThrowable(",")"])),(new J).j([this.gg]))};c.Dd=function(a){this.gg=a;return this};c.r=function(){return null===this.gg?0:this.gg.r()};c.$classData=g({wS:0},!1,"sbt.testing.OptionalThrowable",{wS:1,d:1,k:1,h:1});function BX(){this.hs=this.vT=this.BH=this.$H=this.FT=this.qx=this.rA=this.gD=null}BX.prototype=new l;BX.prototype.constructor=BX;
+BX.prototype.b=function(){CX=this;this.gD=(new DX).Jd("Success",0);this.rA=(new DX).Jd("Error",1);this.qx=(new DX).Jd("Failure",2);this.FT=(new DX).Jd("Skipped",3);this.$H=(new DX).Jd("Ignored",4);this.BH=(new DX).Jd("Canceled",5);this.vT=(new DX).Jd("Pending",6);var a=(new J).j([this.gD,this.rA,this.qx,this.FT,this.$H,this.BH,this.vT]),b=a.qa.length|0,b=la(Xa(Mua),[b]),d;d=0;for(a=Ye(new Ze,a,0,a.qa.length|0);a.ra();){var e=a.ka();b.n[d]=e;d=1+d|0}this.hs=b;return this};
+BX.prototype.$classData=g({q9:0},!1,"sbt.testing.Status$",{q9:1,d:1,k:1,h:1});var CX=void 0;function yv(){CX||(CX=(new BX).b());return CX}function uz(){}uz.prototype=new l;uz.prototype.constructor=uz;uz.prototype.b=function(){return this};uz.prototype.l=function(){return"\\/-"};uz.prototype.$classData=g({t9:0},!1,"scalaz.$bslash$div$minus$",{t9:1,d:1,k:1,h:1});var Zja=void 0;function tz(){}tz.prototype=new l;tz.prototype.constructor=tz;tz.prototype.b=function(){return this};tz.prototype.l=function(){return"-\\/"};
+tz.prototype.$classData=g({v9:0},!1,"scalaz.$minus$bslash$div$",{v9:1,d:1,k:1,h:1});var Yja=void 0;function DR(a){a.Gh((new EX).KE(a))}function Nua(a,b,d,e){return a.Jf(d,I(function(a,b,d){return function(){return a.Jf(b,I(function(a,b){return function(){return a.hd(b,m(new p,function(){return function(a){return tb(a)}}(a)))}}(a,d)))}}(a,b,e)))}function FX(){this.da=null}FX.prototype=new l;FX.prototype.constructor=FX;function Oua(a){var b=new FX;if(null===a)throw pg(qg(),null);b.da=a;return b}
+FX.prototype.$classData=g({H9:0},!1,"scalaz.Band$$anon$3",{H9:1,d:1,vca:1,eD:1});function iz(a){a.nw(Pua(a))}function GX(){this.da=null}GX.prototype=new l;GX.prototype.constructor=GX;function yia(a){var b=new GX;if(null===a)throw pg(qg(),null);b.da=a;return b}GX.prototype.$classData=g({O9:0},!1,"scalaz.Category$$anon$5",{O9:1,d:1,ZS:1,Ix:1});function HX(a){a.Ht(Qua(a))}function IX(){this.da=null}IX.prototype=new l;IX.prototype.constructor=IX;
+IX.prototype.$classData=g({U9:0},!1,"scalaz.Contravariant$$anon$6",{U9:1,d:1,wpa:1,sj:1});function JX(){this.Mr=this.Sd=null;this.xa=!1}JX.prototype=new l;JX.prototype.constructor=JX;JX.prototype.b=function(){KX=this;var a=m(new p,function(){return function(a){return a.length|0}}(this)),b=Uy().Jy;this.Mr=Ria(new Ux,a,b);(new kR).b();(new LX).b();(new lR).b();return this};function Jd(a,b){a=tqa(Ex(),b,a.Mr);return Kd(a)}
+function Eqa(a){return u().Ib(Kd((new Ld).Dj(a.Mr)),ub(new vb,function(){return function(a,d){return Md(a,d)}}(a)))}function Zqa(a,b,d){return d.z()?Eqa(Id()):d.$().Ib(d.Y(),ub(new vb,function(a,b){return function(a,d){return Md(Md(a,b),d)}}(a,b)))}JX.prototype.$classData=g({V9:0},!1,"scalaz.Cord$",{V9:1,d:1,k:1,h:1});var KX=void 0;function Id(){KX||(KX=(new JX).b());return KX}function LX(){}LX.prototype=new l;LX.prototype.constructor=LX;c=LX.prototype;c.b=function(){Gd(this);By(this);return this};
+c.sc=function(a,b){return Md(a,se(b))};c.Ee=function(){var a=Id();a.xa||a.xa||(a.Sd=Eqa(a),a.xa=!0);return a.Sd};c.wf=function(){};c.Rf=function(){};c.$classData=g({W9:0},!1,"scalaz.Cord$$anon$1",{W9:1,d:1,Uf:1,If:1});function MX(){}MX.prototype=new mqa;MX.prototype.constructor=MX;function Rua(){}Rua.prototype=MX.prototype;function $x(){}$x.prototype=new nqa;$x.prototype.constructor=$x;$x.prototype.b=function(){return this};$x.prototype.$classData=g({b$:0},!1,"scalaz.Dual$",{b$:1,Wma:1,Xma:1,d:1});
+var Wia=void 0;function NX(){}NX.prototype=new oqa;NX.prototype.constructor=NX;function Sua(){}Sua.prototype=NX.prototype;function OX(){}OX.prototype=new l;OX.prototype.constructor=OX;OX.prototype.b=function(){nja(this);return this};OX.prototype.jG=function(){};OX.prototype.iG=function(){};OX.prototype.$classData=g({f$:0},!1,"scalaz.Endo$$anon$2",{f$:1,d:1,RS:1,QS:1});function ay(){}ay.prototype=new l;ay.prototype.constructor=ay;c=ay.prototype;c.ME=function(){Gd(this);By(this);return this};
+c.sc=function(a,b){b=se(b);Xx();a=iaa(a.Ar,b.Ar);return(new Zx).Kn(a)};c.Ee=function(){return Tua()};c.wf=function(){};c.Rf=function(){};c.$classData=g({h$:0},!1,"scalaz.EndoInstances$$anon$3",{h$:1,d:1,Uf:1,If:1});function PX(){this.da=null}PX.prototype=new l;PX.prototype.constructor=PX;function Ky(a){var b=new PX;if(null===a)throw pg(qg(),null);b.da=a;return b}PX.prototype.$classData=g({s$:0},!1,"scalaz.Foldable1$$anon$5",{s$:1,d:1,zca:1,bD:1});function QX(){}QX.prototype=new Bqa;
+QX.prototype.constructor=QX;function Uua(){}Uua.prototype=QX.prototype;function RX(){this.da=null}RX.prototype=new l;RX.prototype.constructor=RX;function dja(a){var b=new RX;if(null===a)throw pg(qg(),null);b.da=a;return b}RX.prototype.$classData=g({v$:0},!1,"scalaz.Functor$$anon$7",{v$:1,d:1,Qk:1,sj:1});function SX(){}SX.prototype=new l;SX.prototype.constructor=SX;SX.prototype.b=function(){nja(this);return this};SX.prototype.jG=function(){};SX.prototype.iG=function(){};
+SX.prototype.$classData=g({y$:0},!1,"scalaz.IList$$anon$3",{y$:1,d:1,RS:1,QS:1});function TX(){}TX.prototype=new Iqa;TX.prototype.constructor=TX;function Vua(){}Vua.prototype=TX.prototype;function UX(){}UX.prototype=new Jqa;UX.prototype.constructor=UX;function Wua(){}Wua.prototype=UX.prototype;function VX(){}VX.prototype=new Lqa;VX.prototype.constructor=VX;function Xua(){}Xua.prototype=VX.prototype;function zy(){}zy.prototype=new l;zy.prototype.constructor=zy;zy.prototype.pw=function(){};
+zy.prototype.ow=function(){};zy.prototype.$classData=g({S$:0},!1,"scalaz.LeibnizInstances$$anon$1",{S$:1,d:1,Ex:1,Fx:1});function WX(){}WX.prototype=new Nqa;WX.prototype.constructor=WX;function Yua(){}Yua.prototype=WX.prototype;function XX(){this.da=null}XX.prototype=new l;XX.prototype.constructor=XX;function sja(a){var b=new XX;if(null===a)throw pg(qg(),null);b.da=a;return b}XX.prototype.$classData=g({W$:0},!1,"scalaz.Monoid$$anon$6",{W$:1,d:1,Bpa:1,eD:1});
+function vx(){this.H_=null;this.uu=!1;this.nD=null}vx.prototype=new Oqa;vx.prototype.constructor=vx;vx.prototype.nc=function(a){this.nD=a;return this};function U(a){a.uu||(a.uu||(a.H_=se(a.nD),a.uu=!0),a.nD=null);return a.H_}vx.prototype.$classData=g({Z$:0},!1,"scalaz.Need$$anon$4",{Z$:1,Rna:1,Qna:1,d:1});function YX(){this.HF=null}YX.prototype=new Pqa;YX.prototype.constructor=YX;YX.prototype.b=function(){VR.prototype.b.call(this);return this};
+YX.prototype.$classData=g({aaa:0},!1,"scalaz.NonEmptyList$",{aaa:1,Sna:1,Tna:1,d:1});var Zua=void 0;function Lp(){Zua||(Zua=(new YX).b());return Zua}function ZX(){}ZX.prototype=new l;ZX.prototype.constructor=ZX;ZX.prototype.b=function(){nja(this);return this};ZX.prototype.jG=function(){};ZX.prototype.iG=function(){};ZX.prototype.$classData=g({faa:0},!1,"scalaz.OneAnd$$anon$14",{faa:1,d:1,RS:1,QS:1});
+function $ua(a,b,d,e){return e.sc(d.y(b.Ic),I(function(a,b,d,e){return function(){return a.Hn.sk(b.Sc,d,e)}}(a,b,d,e)))}function $X(){}$X.prototype=new Qqa;$X.prototype.constructor=$X;function ava(){}ava.prototype=$X.prototype;function aY(){this.da=null}aY.prototype=new l;aY.prototype.constructor=aY;function Eja(a){var b=new aY;if(null===a)throw pg(qg(),null);b.da=a;return b}aY.prototype.$classData=g({jaa:0},!1,"scalaz.Order$$anon$7",{jaa:1,d:1,Eca:1,$S:1});function bY(){this.da=null}
+bY.prototype=new l;bY.prototype.constructor=bY;function Fja(a){var b=new bY;if(null===a)throw pg(qg(),null);b.da=a;return b}bY.prototype.$classData=g({laa:0},!1,"scalaz.PlusEmpty$$anon$5",{laa:1,d:1,cD:1,Jx:1});function cY(){this.da=null}cY.prototype=new l;cY.prototype.constructor=cY;cY.prototype.$classData=g({maa:0},!1,"scalaz.ProChoice$$anon$2",{maa:1,d:1,Dpa:1,dD:1});function Yy(){}Yy.prototype=new l;Yy.prototype.constructor=Yy;
+Yy.prototype.b=function(){Ed(this);var a=new IX;if(null===this)throw pg(qg(),null);a.da=this;return this};Yy.prototype.yg=function(){};Yy.prototype.$classData=g({waa:0},!1,"scalaz.Show$$anon$2",{waa:1,d:1,Rma:1,Eg:1});function dY(){this.da=null}dY.prototype=new l;dY.prototype.constructor=dY;function bva(a){var b=new dY;if(null===a)throw pg(qg(),null);b.da=a;return b}dY.prototype.$classData=g({Aaa:0},!1,"scalaz.Split$$anon$2",{Aaa:1,d:1,Fca:1,Ix:1});function eY(){this.da=null}eY.prototype=new l;
+eY.prototype.constructor=eY;function cva(a){var b=new eY;if(null===a)throw pg(qg(),null);b.da=a;return b}eY.prototype.$classData=g({Eaa:0},!1,"scalaz.Strong$$anon$2",{Eaa:1,d:1,Gca:1,dD:1});function fY(){}fY.prototype=new Uqa;fY.prototype.constructor=fY;function dva(){}dva.prototype=fY.prototype;function Ux(){this.x_=this.ZW=null}Ux.prototype=new Vqa;Ux.prototype.constructor=Ux;function Ria(a,b,d){a.x_=b;a.ZW=d;return a}Ux.prototype.Tl=function(){return this.ZW};Ux.prototype.jm=function(a){return this.x_.y(a)};
+Ux.prototype.$classData=g({Naa:0},!1,"scalaz.UnitReducer$$anon$1",{Naa:1,zoa:1,paa:1,d:1});function gY(){}gY.prototype=new Wqa;gY.prototype.constructor=gY;function eva(){}eva.prototype=gY.prototype;function hY(){}hY.prototype=new l;hY.prototype.constructor=hY;hY.prototype.b=function(){return this};hY.prototype.$classData=g({Yaa:0},!1,"scalaz.package$State$",{Yaa:1,d:1,Baa:1,F$:1});var fva=void 0;function iY(){}iY.prototype=new l;iY.prototype.constructor=iY;c=iY.prototype;
+c.sc=function(a,b){return!!a||!!se(b)};c.Ee=function(){return!1};c.wf=function(){};c.Rf=function(){};c.$classData=g({qba:0},!1,"scalaz.std.AnyValInstances$booleanInstance$disjunction$",{qba:1,d:1,Uf:1,If:1});function jY(){}jY.prototype=new l;jY.prototype.constructor=jY;jY.prototype.Yg=function(){ry(this);return this};jY.prototype.Kt=function(){};jY.prototype.Jt=function(){};jY.prototype.$classData=g({uba:0},!1,"scalaz.std.EitherInstances$$anon$26",{uba:1,d:1,ju:1,iu:1});function kY(){}
+kY.prototype=new l;kY.prototype.constructor=kY;kY.prototype.Yg=function(){ry(this);return this};kY.prototype.Kt=function(){};kY.prototype.Jt=function(){};kY.prototype.$classData=g({vba:0},!1,"scalaz.std.EitherInstances$$anon$27",{vba:1,d:1,ju:1,iu:1});function lY(){}lY.prototype=new l;lY.prototype.constructor=lY;lY.prototype.Yg=function(){ry(this);return this};lY.prototype.Kt=function(){};lY.prototype.Jt=function(){};
+lY.prototype.$classData=g({wba:0},!1,"scalaz.std.EitherInstances$$anon$28",{wba:1,d:1,ju:1,iu:1});function mY(){}mY.prototype=new l;mY.prototype.constructor=mY;mY.prototype.Yg=function(){ry(this);return this};mY.prototype.Kt=function(){};mY.prototype.Jt=function(){};mY.prototype.$classData=g({xba:0},!1,"scalaz.std.EitherInstances$$anon$29",{xba:1,d:1,ju:1,iu:1});function nY(){}nY.prototype=new l;nY.prototype.constructor=nY;nY.prototype.Yg=function(){ry(this);return this};nY.prototype.Kt=function(){};
+nY.prototype.Jt=function(){};nY.prototype.$classData=g({yba:0},!1,"scalaz.std.EitherInstances$$anon$30",{yba:1,d:1,ju:1,iu:1});function oY(){}oY.prototype=new l;oY.prototype.constructor=oY;oY.prototype.Yg=function(){ry(this);return this};oY.prototype.Kt=function(){};oY.prototype.Jt=function(){};oY.prototype.$classData=g({zba:0},!1,"scalaz.std.EitherInstances$$anon$31",{zba:1,d:1,ju:1,iu:1});function qq(){}qq.prototype=new l;qq.prototype.constructor=qq;c=qq.prototype;
+c.sc=function(a,b){return tq(se(b),a)};c.Ee=function(){return u()};c.wf=function(){};c.nv=function(){Gd(this);By(this);return this};c.Rf=function(){};c.$classData=g({Lba:0},!1,"scalaz.std.ListInstances$$anon$4",{Lba:1,d:1,Uf:1,If:1});function pY(){}pY.prototype=new l;pY.prototype.constructor=pY;pY.prototype.Er=function(){};pY.prototype.$classData=g({Zba:0},!1,"scalaz.std.TupleInstances2$$anon$64",{Zba:1,d:1,Zoa:1,QC:1});function qY(){}qY.prototype=new l;qY.prototype.constructor=qY;
+qY.prototype.pw=function(){};qY.prototype.ow=function(){};qY.prototype.RE=function(){Cd(this);ix(this);return this};qY.prototype.$classData=g({$ba:0},!1,"scalaz.std.TypeConstraintInstances$$anon$1",{$ba:1,d:1,Ex:1,Fx:1});function rY(){}rY.prototype=new l;rY.prototype.constructor=rY;rY.prototype.pw=function(){};rY.prototype.ow=function(){};rY.prototype.RE=function(){Cd(this);ix(this);return this};rY.prototype.$classData=g({aca:0},!1,"scalaz.std.TypeConstraintInstances$$anon$2",{aca:1,d:1,Ex:1,Fx:1});
+function sY(){}sY.prototype=new l;sY.prototype.constructor=sY;c=sY.prototype;
+c.sc=function(a,b){dz();var d=se(b);b=new VQ;var e=a.Uy,f;f=a.Hc;var d=d.Hc,h=f.Rb,k=h>>31,n=d.Rb,r=n>>31,n=h+n|0,h=(-2147483648^n)<(-2147483648^h)?1+(k+r|0)|0:k+r|0;if(tY(f)||tY(d))f=ksa(WT(),(new Xb).ha(n,h));else if(64>(f.Me+d.Me|0)){var r=f.Ud,k=r.ia,r=r.oa,y=d.Ud,E=y.ia,Q=65535&k,R=k>>>16|0,da=65535&E,ma=E>>>16|0,ra=ea(Q,da),da=ea(R,da),Ca=ea(Q,ma),Q=ra+((da+Ca|0)<<16)|0,ra=(ra>>>16|0)+Ca|0,k=(((ea(k,y.oa)+ea(r,E)|0)+ea(R,ma)|0)+(ra>>>16|0)|0)+(((65535&ra)+da|0)>>>16|0)|0;f=0===Q&&-2147483648===
+k&&0>f.Ud.oa&&0>d.Ud.oa?(new RQ).Uq(lsa(ff(),63),ZT(WT(),(new Xb).ha(n,h))):TT(WT(),(new Xb).ha(Q,k),ZT(WT(),(new Xb).ha(n,h)))}else f=Of(XT(f),XT(d)),f=(new RQ).Uq(f,ZT(WT(),(new Xb).ha(n,h)));gva(f,e);return UQ(b,f,a.Uy)};c.Ee=function(){dz();var a=Mw();return nia(a,1,a.lk)};c.wf=function(){};c.UE=function(){Gd(this);By(this);return this};c.Rf=function(){};c.$classData=g({oca:0},!1,"scalaz.std.math.BigDecimalInstances$$anon$2",{oca:1,d:1,Uf:1,If:1});function xS(){}xS.prototype=new l;
+xS.prototype.constructor=xS;xS.prototype.pv=function(){return this};xS.prototype.$classData=g({Hca:0},!1,"scalaz.syntax.Syntaxes$foldable$",{Hca:1,d:1,aT:1,bT:1});function wX(){}wX.prototype=new l;wX.prototype.constructor=wX;wX.prototype.Ew=function(){return"utest.TestSuite"};wX.prototype.Cv=function(){return!0};wX.prototype.TF=function(){return!0};wX.prototype.$classData=g({cda:0},!1,"utest.runner.BaseRunner$$anon$2$$anon$1",{cda:1,d:1,MC:1,eu:1});function GS(){}GS.prototype=new l;
+GS.prototype.constructor=GS;GS.prototype.Ew=function(){return"utest.TestSuite"};GS.prototype.Cv=function(){return!0};GS.prototype.TF=function(){return!0};GS.prototype.$classData=g({eda:0},!1,"utest.runner.Framework$$anon$1",{eda:1,d:1,MC:1,eu:1});function HS(){BS.call(this);this.Xz=this.$u=this.Zu=this.Dw=this.Rw=this.oz=this.Jw=null}HS.prototype=new gra;HS.prototype.constructor=HS;c=HS.prototype;c.ZT=function(a){var b=this.Rw;b.bi=b.bi+a|0};
+c.ly=function(){se(this.Jw);var a=this.oz.W.Ab("\n"),b=this.$u.W,d=u();if(null!==b&&Fa(b,d))b="";else var b=t(),d=this.$u.W,e=this.Xz.W,f=x(),d=AA(d.Te(e,f.s)),e=new uY,f=x(),b=G(b,(new J).j(["\u001b[31mFailures:",d.lc(e,f.s).Ab("\n")])).Ab("\n");return G(t(),(new J).j(["-----------------------------------Results-----------------------------------",a,b,Jv((new Kv).Ea((new J).j(["Tests: ",""])),(new J).j([this.Rw])),Jv((new Kv).Ea((new J).j(["Passed: ",""])),(new J).j([this.Dw])),Jv((new Kv).Ea((new J).j(["Failed: ",
+""])),(new J).j([this.Zu]))])).Ab("\n")};
+c.RF=function(a){switch(65535&(a.charCodeAt(0)|0)){case 104:break;case 114:a=(new Tb).c(a);this.qD(Uj(a));break;case 102:a=(new Tb).c(a);this.pD(Uj(a));break;case 116:a=(new Tb).c(a);a=Uj(a);a=(new Tb).c(a);a=gi(ei(),a.U,10);var b=this.Rw;b.bi=b.bi+a|0;break;case 99:a=(new Tb).c(a);this.rD(Uj(a));break;case 105:switch(65535&(a.charCodeAt(1)|0)){case 115:a=this.Dw;a.bi=1+a.bi|0;break;case 102:a=this.Zu;a.bi=1+a.bi|0;break;default:dn(en(),"bad message: "+a)}break;default:dn(en(),"bad message: "+a)}a=
+Jv((new Kv).Ea((new J).j(["",",",",",""])),(new J).j([this.Dw.bi,this.Zu.bi,this.Rw.bi]));return(new H).i(a)};c.IV=function(){var a=this.Zu;a.bi=1+a.bi|0};function ora(a,b,d,e,f){a.Jw=f;BS.prototype.LV.call(a,b,0,d);se(e);a.oz=(new vY).i(u());a.Rw=(new wY).hb(0);a.Dw=(new wY).hb(0);a.Zu=(new wY).hb(0);a.$u=(new vY).i(u());a.Xz=(new vY).i(u());return a}c.JV=function(){var a=this.Dw;a.bi=1+a.bi|0};c.rD=function(a){a:for(;;){var b=this.Xz.W;if(!xY(this.Xz,b,Og(new Pg,a,b)))continue a;break}};
+c.pD=function(a){a:for(;;){var b=this.$u.W;if(!xY(this.$u,b,Og(new Pg,a,b)))continue a;break}};c.qD=function(a){a:for(;;){var b=this.oz.W;if(!xY(this.oz,b,Og(new Pg,a,b)))continue a;break}};c.$classData=g({fda:0},!1,"utest.runner.MasterRunner",{fda:1,ada:1,d:1,o9:1});function IS(){BS.call(this);this.Jw=this.Jr=null}IS.prototype=new gra;IS.prototype.constructor=IS;c=IS.prototype;c.ZT=function(a){this.Jr.y(Jv((new Kv).Ea((new J).j(["t",""])),(new J).j([a])))};c.RF=function(){return C()};
+c.ly=function(){se(this.Jw);return""};c.IV=function(){this.Jr.y(Jv((new Kv).Ea((new J).j(["if"])),u()))};c.JV=function(){this.Jr.y(Jv((new Kv).Ea((new J).j(["is"])),u()))};function pra(a,b,d,e,f,h){a.Jr=e;a.Jw=h;BS.prototype.LV.call(a,b,0,d);se(f);return a}c.rD=function(a){this.Jr.y(Jv((new Kv).Ea((new J).j(["c",""])),(new J).j([a])))};c.pD=function(a){this.Jr.y(Jv((new Kv).Ea((new J).j(["f",""])),(new J).j([a])))};c.qD=function(a){this.Jr.y(Jv((new Kv).Ea((new J).j(["r",""])),(new J).j([a])))};
+c.$classData=g({hda:0},!1,"utest.runner.ScalaJsSlaveRunner",{hda:1,ada:1,d:1,o9:1});var Aa=g({Eda:0},!1,"java.lang.Boolean",{Eda:1,d:1,h:1,Md:1},void 0,void 0,function(a){return"boolean"===typeof a});function yY(){this.W=0}yY.prototype=new l;yY.prototype.constructor=yY;yY.prototype.o=function(a){return ne(a)?this.W===a.W:!1};yY.prototype.l=function(){return ba.String.fromCharCode(this.W)};function Oe(a){var b=new yY;b.W=a;return b}yY.prototype.r=function(){return this.W};
+function ne(a){return!!(a&&a.$classData&&a.$classData.m.lW)}var xla=g({lW:0},!1,"java.lang.Character",{lW:1,d:1,h:1,Md:1});yY.prototype.$classData=xla;function zY(){this.fX=this.lU=this.kU=this.cW=null;this.xa=0}zY.prototype=new l;zY.prototype.constructor=zY;function yfa(a,b){return 65535&(ba.String.fromCharCode(b).toLowerCase().charCodeAt(0)|0)}zY.prototype.b=function(){return this};function zh(a,b){return 256>b?48<=b&&57>=b:9===nta(a,b)}
+function nta(a,b){fA();if(0===(2&a.xa)<<24>>24&&0===(2&a.xa)<<24>>24){var d=(new J).j([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.qa.length|0,e=la(Xa(db),[e]),f;f=0;for(d=Ye(new Ze,d,0,d.qa.length|0);d.ra();){var h=d.ka();e.n[f]=h|0;f=1+f|0}d=e.n.length;f=-1+d|0;if(!(1>=d))for(d=1;;){h=d;e.n[h]=e.n[h]+e.n[-1+h|0]|0;if(d===f)break;d=1+d|0}a.kU=e;a.xa=(2|a.xa)<<24>>24}b=1+vka(0,a.kU,b)|0;if(0===(4&a.xa)<<24>>24&&0===(4&a.xa)<<24>>24){d=(new J).j([1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,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.qa.length|0;e=la(Xa(bb),[e]);f=0;for(d=Ye(new Ze,d,0,d.qa.length|0);d.ra();)h=d.ka(),e.n[f]=h|0,f=1+f|0;a.lU=e;a.xa=(4|a.xa)<<24>>24}return a.lU.n[0>b?-b|0:b]}
+function hva(a,b,d){if(256>b)a=48<=b&&57>=b?-48+b|0:65<=b&&90>=b?-55+b|0:97<=b&&122>=b?-87+b|0:-1;else if(65313<=b&&65338>=b)a=-65303+b|0;else if(65345<=b&&65370>=b)a=-65335+b|0;else{var e=vka(fA(),iva(a),b),e=0>e?-2-e|0:e;0>e?a=-1:(a=b-iva(a).n[e]|0,a=9<a?-1:a)}return a<d?a:-1}
+function mta(a){if(0===(1&a.xa)<<24>>24&&0===(1&a.xa)<<24>>24){var b=(new J).j([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.qa.length|0,d=la(Xa(bb),[d]),e;e=0;for(b=Ye(new Ze,b,0,b.qa.length|0);b.ra();){var f=b.ka();d.n[e]=f|0;e=1+e|0}a.cW=d;a.xa=(1|a.xa)<<24>>24}return a.cW}
+function iva(a){if(0===(16&a.xa)<<24>>24&&0===(16&a.xa)<<24>>24){var b=(new J).j([1632,1776,1984,2406,2534,2662,2790,2918,3046,3174,3302,3430,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,42528,43216,43264,43472,43600,44016,65296,66720,69734,69872,69942,70096,71360,120782,120792,120802,120812,120822]),d=b.qa.length|0,d=la(Xa(db),[d]),e;e=0;for(b=Ye(new Ze,b,0,b.qa.length|0);b.ra();){var f=b.ka();d.n[e]=f|0;e=1+e|0}a.fX=d;a.xa=(16|a.xa)<<24>>24}return a.fX}
+function sca(a,b){return 65535&(ba.String.fromCharCode(b).toUpperCase().charCodeAt(0)|0)}function lta(a){return 12===a||13===a||14===a}zY.prototype.$classData=g({Gda:0},!1,"java.lang.Character$",{Gda:1,d:1,k:1,h:1});var jva=void 0;function Ah(){jva||(jva=(new zY).b());return jva}function AY(){this.XD=this.YD=null;this.xa=0}AY.prototype=new l;AY.prototype.constructor=AY;AY.prototype.b=function(){return this};
+function kva(a){0===(1&a.xa)<<24>>24&&(a.YD=new ba.RegExp("^[\\x00-\\x20]*([+-]?(?:NaN|Infinity|(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?)[fFdD]?)[\\x00-\\x20]*$"),a.xa=(1|a.xa)<<24>>24);return a.YD}AY.prototype.Gl=function(a){throw(new BY).c('For input string: "'+a+'"');};function lva(a){0===(2&a.xa)<<24>>24&&(a.XD=new ba.RegExp("^[\\x00-\\x20]*([+-]?)0[xX]([0-9A-Fa-f]*)\\.?([0-9A-Fa-f]*)[pP]([+-]?\\d+)[fFdD]?[\\x00-\\x20]*$"),a.xa=(2|a.xa)<<24>>24);return a.XD}
+function Bh(a,b){var d=(0===(1&a.xa)<<24>>24?kva(a):a.YD).exec(b);if(null!==d)return d=d[1],+ba.parseFloat(void 0===d?void 0:d);var e=(0===(2&a.xa)<<24>>24?lva(a):a.XD).exec(b);if(null!==e){var d=e[1],f=e[2],h=e[3],e=e[4];""===f&&""===h&&a.Gl(b);b=""+f+h;a=-((h.length|0)<<2)|0;for(h=0;;)if(h!==(b.length|0)&&48===(65535&(b.charCodeAt(h)|0)))h=1+h|0;else break;h=b.substring(h);""===h?d="-"===d?-0:0:(b=(f=15<(h.length|0))?h.substring(0,15):h,h=a+(f?(-15+(h.length|0)|0)<<2:0)|0,a=+ba.parseInt(b,16),bn(Ne(),
+0!==a&&Infinity!==a),e=+ba.parseInt(e,10),b=Oa(e)+h|0,h=b/3|0,e=+ba.Math.pow(2,h),b=+ba.Math.pow(2,b-(h<<1)|0),e=a*e*e*b,d="-"===d?-e:e)}else d=a.Gl(b);return d}AY.prototype.$classData=g({Kda:0},!1,"java.lang.Double$",{Kda:1,d:1,k:1,h:1});var mva=void 0;function Ch(){mva||(mva=(new AY).b());return mva}function CY(){this.mA=null;this.qH=0}CY.prototype=new l;CY.prototype.constructor=CY;function DY(){}DY.prototype=CY.prototype;CY.prototype.o=function(a){return this===a};CY.prototype.l=function(){return this.mA};
+CY.prototype.Jd=function(a,b){this.mA=a;this.qH=b;return this};CY.prototype.r=function(){return Ka(this)};function EY(){NS.call(this)}EY.prototype=new OS;EY.prototype.constructor=EY;function nva(){}nva.prototype=EY.prototype;function nr(){NS.call(this)}nr.prototype=new OS;nr.prototype.constructor=nr;function FY(){}FY.prototype=nr.prototype;nr.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};nr.prototype.$q=function(a,b){NS.prototype.ic.call(this,a,b,0,!0);return this};
+function Lr(a){return!!(a&&a.$classData&&a.$classData.m.Wc)}nr.prototype.$classData=g({Wc:0},!1,"java.lang.Exception",{Wc:1,tc:1,d:1,h:1});function GY(){}GY.prototype=new l;GY.prototype.constructor=GY;GY.prototype.b=function(){return this};GY.prototype.Gl=function(a){throw(new BY).c('For input string: "'+a+'"');};
+function gi(a,b,d){var e=null===b?0:b.length|0;(0===e||2>d||36<d)&&a.Gl(b);var f=65535&(b.charCodeAt(0)|0),h=45===f,k=h?2147483648:2147483647,f=h||43===f?1:0;f>=(b.length|0)&&a.Gl(b);for(var n=0;f!==e;){var r=hva(Ah(),65535&(b.charCodeAt(f)|0),d),n=n*d+r;(-1===r||n>k)&&a.Gl(b);f=1+f|0}return h?-n|0:n|0}function bD(a,b){a=b-(1431655765&b>>1)|0;a=(858993459&a)+(858993459&a>>2)|0;return ea(16843009,252645135&(a+(a>>4)|0))>>24}GY.prototype.$classData=g({Pda:0},!1,"java.lang.Integer$",{Pda:1,d:1,k:1,h:1});
+var ova=void 0;function ei(){ova||(ova=(new GY).b());return ova}function HY(){this.HT=null;this.xa=!1}HY.prototype=new l;HY.prototype.constructor=HY;HY.prototype.b=function(){return this};
+function Tba(a,b){""===b&&IY(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)IY(b),f=void 0;else{if(!a.xa&&!a.xa){for(var h=[],k=0;;){h.push(null);if(1===k)break;k=1+k|0}for(k=2;;){for(var n=k,r=2147483647/n|0,y=n,E=1;y<=r;)y=ea(y,n),E=1+E|0;var Q=y>>31,r=Sa(),n=pf(r,-1,-1,y,Q),R=r.Sb,r=new Qz,y=(new Xb).ha(y,Q),n=(new Xb).ha(n,R);r.nU=E;r.RX=y;r.yX=n;h.push(r);if(36===k)break;k=1+k|0}a.HT=h;a.xa=!0}h=a.HT[10];for(k=h.nU;;){if(a=
+f<d)a=Ah(),E=65535&(b.charCodeAt(f)|0),a=256>E?48===E:0<=vka(fA(),iva(a),E);if(a)f=1+f|0;else break}(d-f|0)>ea(3,k)&&IY(b);n=f+(1+((-1+(d-f|0)|0)%k|0)|0)|0;r=pva(f,n,b);if(n===d)f=(new Xb).ha(r,0);else{a=h.RX;f=a.ia;a=a.oa;var E=n+k|0,y=65535&r,Q=r>>>16|0,da=65535&f,R=f>>>16|0,ma=ea(y,da),da=ea(Q,da),ra=ea(y,R),y=ma+((da+ra|0)<<16)|0,ma=(ma>>>16|0)+ra|0,r=((ea(r,a)+ea(Q,R)|0)+(ma>>>16|0)|0)+(((65535&ma)+da|0)>>>16|0)|0,n=pva(n,E,b),n=y+n|0,r=(-2147483648^n)<(-2147483648^y)?1+r|0:r;E===d?f=(new Xb).ha(n,
+r):(bn(Ne(),(E+k|0)===d),k=h.yX,h=k.ia,k=k.oa,d=pva(E,d,b),(r===k?(-2147483648^n)>(-2147483648^h):r>k)&&IY(b),E=65535&n,h=n>>>16|0,Q=65535&f,k=f>>>16|0,y=ea(E,Q),Q=ea(h,Q),R=ea(E,k),E=y+((Q+R|0)<<16)|0,y=(y>>>16|0)+R|0,a=(((ea(n,a)+ea(r,f)|0)+ea(h,k)|0)+(y>>>16|0)|0)+(((65535&y)+Q|0)>>>16|0)|0,f=E+d|0,a=(-2147483648^f)<(-2147483648^E)?1+a|0:a,-2147483648===(-2147483648^a)&&(-2147483648^f)<(-2147483648^d)&&IY(b),f=(new Xb).ha(f,a))}}d=f.ia;f=f.oa;if(e)return e=-d|0,d=0!==d?~f:-f|0,(0===d?0!==e:0<d)&&
+IY(b),(new Xb).ha(e,d);0>f&&IY(b);return(new Xb).ha(d,f)}function IY(a){throw(new BY).c('For input string: "'+a+'"');}function pva(a,b,d){for(var e=0;a!==b;){var f=hva(Ah(),65535&(d.charCodeAt(a)|0),10);-1===f&&IY(d);e=ea(e,10)+f|0;a=1+a|0}return e}HY.prototype.$classData=g({Tda:0},!1,"java.lang.Long$",{Tda:1,d:1,k:1,h:1});var qva=void 0;function Gh(){qva||(qva=(new HY).b());return qva}function JY(){}JY.prototype=new l;JY.prototype.constructor=JY;function rva(){}c=rva.prototype=JY.prototype;
+c.EU=function(a){var b=RS();a=a.Sn();b=se(BC(b,a).Sm);for(a=!0;a&&b.ra();)a=b.ka(),a=this.ab(a);return a};c.l=function(){var a=RS(),b=this.Sn();return se(BC(a,b).Sm).Qc("[",",","]")};c.ab=function(a){for(var b=RS(),d=this.Sn(),b=se(BC(b,d).Sm),d=!1;!d&&b.ra();)d=b.ka(),d=null===a?null===d:Fa(a,d);return d};c.Um=function(a){a:{var b=this.Sn();for(;;)if(b.ra()){var d=b.ka();if(null===d?null===a:Fa(d,a)){b.nz();a=!0;break a}}else{a=!1;break a}}return a};c.vn=function(){throw(new Sk).b();};
+function KY(){US.call(this);this.Qa=null}KY.prototype=new Ara;KY.prototype.constructor=KY;function TS(a){var b=new KY;if(null===a)throw pg(qg(),null);b.Qa=a;US.prototype.ar.call(b,a.Dg);return b}KY.prototype.$classData=g({tea:0},!1,"java.util.HashMap$EntrySet$$anon$2",{tea:1,Nra:1,d:1,Bea:1});function LY(){this.ev=this.ct=this.bt=this.dv=0}LY.prototype=new l;LY.prototype.constructor=LY;
+LY.prototype.o=function(a){return a&&a.$classData&&a.$classData.m.wW?this.dv===a.dv&&this.bt===a.bt&&this.ct===a.ct&&this.ev===a.ev:!1};
+LY.prototype.l=function(){var a=(+(this.dv>>>0)).toString(16),b="00000000".substring(a.length|0),d=(+((this.bt>>>16|0)>>>0)).toString(16),e="0000".substring(d.length|0),f=(+((65535&this.bt)>>>0)).toString(16),h="0000".substring(f.length|0),k=(+((this.ct>>>16|0)>>>0)).toString(16),n="0000".substring(k.length|0),r=(+((65535&this.ct)>>>0)).toString(16),y="0000".substring(r.length|0),E=(+(this.ev>>>0)).toString(16);return""+b+a+"-"+(""+e+d)+"-"+(""+h+f)+"-"+(""+n+k)+"-"+(""+y+r)+(""+"00000000".substring(E.length|
+0)+E)};LY.prototype.r=function(){return this.dv^this.bt^this.ct^this.ev};LY.prototype.$classData=g({wW:0},!1,"java.util.UUID",{wW:1,d:1,h:1,Md:1});function MY(){this.xa=!1}MY.prototype=new l;MY.prototype.constructor=MY;MY.prototype.b=function(){return this};MY.prototype.Gl=function(a){throw(new Re).c("Invalid UUID string: "+a);};
+function fqa(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.Gl(b);try{var d=b.substring(0,4),e=b.substring(4,8),f=gi(ei(),d,16)<<16|gi(ei(),e,16),h=b.substring(9,13),k=b.substring(14,18),n=gi(ei(),h,16)<<16|gi(ei(),k,16),r=b.substring(19,23),y=b.substring(24,28),E=gi(ei(),r,16)<<16|gi(ei(),y,16),Q=b.substring(28,32),R=b.substring(32,36),da=gi(ei(),Q,16)<<16|gi(ei(),R,16),ma=new LY;
+ma.dv=f;ma.bt=n;ma.ct=E;ma.ev=da;return ma}catch(ra){if(ra&&ra.$classData&&ra.$classData.m.pF)a.Gl(b);else throw ra;}}MY.prototype.$classData=g({Iea:0},!1,"java.util.UUID$",{Iea:1,d:1,k:1,h:1});var sva=void 0;function gqa(){sva||(sva=(new MY).b());return sva}function NY(){this.hs=this.js=this.tx=this.Mx=this.nu=this.lu=this.Kx=this.mu=null}NY.prototype=new l;NY.prototype.constructor=NY;
+NY.prototype.b=function(){OY=this;this.mu=(new PY).b();this.Kx=(new QY).b();this.lu=(new RY).b();this.nu=(new SY).b();this.Mx=(new TY).b();this.tx=(new UY).b();this.js=(new VY).b();var a=(new J).j([this.mu,this.Kx,this.lu,this.nu,this.Mx,this.tx,this.js]),b=a.qa.length|0,b=la(Xa(tva),[b]),d;d=0;for(a=Ye(new Ze,a,0,a.qa.length|0);a.ra();){var e=a.ka();b.n[d]=e;d=1+d|0}this.hs=b;return this};
+function WY(a,b,d,e){a=b.oa;var f=e.oa;if(a===f?(-2147483648^b.ia)>(-2147483648^e.ia):a>f)return(new Xb).ha(-1,2147483647);a=e.ia;e=e.oa;e=0!==a?~e:-e|0;f=b.oa;if(f===e?(-2147483648^b.ia)<(-2147483648^(-a|0)):f<e)return(new Xb).ha(1,-2147483648);e=b.ia;a=d.ia;var h=65535&e,f=e>>>16|0,k=65535&a,n=a>>>16|0,r=ea(h,k),k=ea(f,k),y=ea(h,n),h=r+((k+y|0)<<16)|0,r=(r>>>16|0)+y|0;b=(((ea(e,d.oa)+ea(b.oa,a)|0)+ea(f,n)|0)+(r>>>16|0)|0)+(((65535&r)+k|0)>>>16|0)|0;return(new Xb).ha(h,b)}
+NY.prototype.$classData=g({Kea:0},!1,"java.util.concurrent.TimeUnit$",{Kea:1,d:1,k:1,h:1});var OY=void 0;function Nz(){OY||(OY=(new NY).b());return OY}function vY(){this.W=null}vY.prototype=new l;vY.prototype.constructor=vY;function uva(){}uva.prototype=vY.prototype;function xY(a,b,d){return b===a.W?(a.W=d,!0):!1}vY.prototype.l=function(){return""+this.W};vY.prototype.i=function(a){this.W=a;return this};
+vY.prototype.$classData=g({yW:0},!1,"java.util.concurrent.atomic.AtomicReference",{yW:1,d:1,k:1,h:1});function HA(){}HA.prototype=new l;HA.prototype.constructor=HA;HA.prototype.b=function(){return this};HA.prototype.$classData=g({$ea:0},!1,"java.util.regex.GroupStartMap$OriginallyWrapped$",{$ea:1,d:1,k:1,h:1});var fla=void 0;function XY(){this.nA=this.Un=null}XY.prototype=new l;XY.prototype.constructor=XY;XY.prototype.l=function(){return this.nA};
+function Nka(a){return(a.Un.global?"g":"")+(a.Un.ignoreCase?"i":"")+(a.Un.multiline?"m":"")}XY.prototype.$classData=g({efa:0},!1,"java.util.regex.Pattern",{efa:1,d:1,k:1,h:1});function YY(){this.gW=this.hW=null}YY.prototype=new l;YY.prototype.constructor=YY;YY.prototype.b=function(){ZY=this;this.hW=new ba.RegExp("^\\\\Q(.|\\n|\\r)\\\\E$");this.gW=new ba.RegExp("^\\(\\?([idmsuxU]*)(?:-([idmsuxU]*))?\\)");return this};
+function jg(a,b){a=a.hW.exec(b);if(null!==a){a=a[1];if(void 0===a)throw(new Bu).c("undefined.get");a=(new H).i((new w).e(vva(a),0))}else a=C();if(a.z()){var d=ig().gW.exec(b);if(null!==d){a=d[0];if(void 0===a)throw(new Bu).c("undefined.get");a=b.substring(a.length|0);var e=d[1];if(void 0===e)var f=0;else{var e=(new Tb).c(e),f=e.U.length|0,h=0,k=0;a:for(;;){if(h!==f){var n=1+h|0,h=e.X(h),h=null===h?0:h.W,k=k|0|wva(ig(),h),h=n;continue a}break}f=k|0}d=d[2];if(void 0===d)d=f;else{d=(new Tb).c(d);e=d.U.length|
+0;n=0;h=f;a:for(;;){if(n!==e){f=1+n|0;n=d.X(n);n=null===n?0:n.W;h=(h|0)&~wva(ig(),n);n=f;continue a}break}d=h|0}a=(new H).i((new w).e(a,d))}else a=C()}a=a.z()?(new w).e(b,0):a.R();if(null===a)throw(new q).i(a);d=a.Gc();a=new ba.RegExp(a.ja(),"g"+(0!==(2&d)?"i":"")+(0!==(8&d)?"m":""));d=new XY;d.Un=a;d.nA=b;return d}
+function vva(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="\\"+Oe(e);break;default:e=Oe(e)}b=""+b+e;d=1+d|0}return b}function wva(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 Re).c("bad in-pattern flag");}}
+YY.prototype.$classData=g({ffa:0},!1,"java.util.regex.Pattern$",{ffa:1,d:1,k:1,h:1});var ZY=void 0;function ig(){ZY||(ZY=(new YY).b());return ZY}function $Y(){this.dE=null}$Y.prototype=new ila;$Y.prototype.constructor=$Y;$Y.prototype.b=function(){aZ=this;(new UB).i(Vz().xX);this.dE=(new UB).i(Vz().mp);(new UB).i(null);return this};$Y.prototype.$classData=g({ifa:0},!1,"scala.Console$",{ifa:1,Rra:1,d:1,fsa:1});var aZ=void 0;function dra(){aZ||(aZ=(new $Y).b());return aZ}function bZ(){}
+bZ.prototype=new l;bZ.prototype.constructor=bZ;bZ.prototype.b=function(){return this};bZ.prototype.Uc=function(a){return null===a?C():(new H).i(a)};bZ.prototype.$classData=g({mfa:0},!1,"scala.Option$",{mfa:1,d:1,k:1,h:1});var xva=void 0;function md(){xva||(xva=(new bZ).b());return xva}function cZ(){this.ml=this.qq=this.ou=this.qi=null}cZ.prototype=new kla;cZ.prototype.constructor=cZ;function bn(a,b){if(!b)throw(new eD).i("assertion failed");}
+cZ.prototype.b=function(){dZ=this;rc();x();this.qi=sp();this.ou=Yk();pma();pma();yva||(yva=(new eZ).b());this.qq=(new ZS).b();this.ml=(new fZ).b();(new gZ).b();return this};
+function iw(a,b){if(ie(b,1))return(new Cm).$h(b);if(ib(b,1))return(new hZ).Rq(b);if(kb(b,1))return(new iZ).Mq(b);if(jb(b,1))return(new jZ).Gm(b);if(qb(b,1))return(new kZ).Nq(b);if(pb(b,1))return(new lZ).xp(b);if(nb(b,1))return(new mZ).Oq(b);if(ob(b,1))return(new nZ).Pq(b);if(lb(b,1))return(new oZ).Qq(b);if(zE(b))return(new pZ).Sq(b);if(null===b)return null;throw(new q).i(b);}function ZD(a,b){if(!b)throw(new Re).c("requirement failed");}
+cZ.prototype.$classData=g({ufa:0},!1,"scala.Predef$",{ufa:1,Vra:1,d:1,Sra:1});var dZ=void 0;function Ne(){dZ||(dZ=(new cZ).b());return dZ}function qZ(){}qZ.prototype=new l;qZ.prototype.constructor=qZ;qZ.prototype.b=function(){return this};qZ.prototype.$classData=g({Dfa:0},!1,"scala.StringContext$",{Dfa:1,d:1,k:1,h:1});var zva=void 0;function rZ(){this.da=this.UV=null}rZ.prototype=new l;rZ.prototype.constructor=rZ;function Ava(a,b,d){a.UV=d;if(null===b)throw pg(qg(),null);a.da=b;return a}
+rZ.prototype.Xm=function(){ZD(Ne(),null===this.da.qo.R());if(null===ola().Fu.R()){Xz||(Xz=(new Wz).b());var a=Xz.ET;a&&a.$classData&&a.$classData.m.hY||Gra||(Gra=(new bT).b())}var a=ola(),b=a.Fu.R();try{$z(a.Fu,this);try{var d=this.UV;a:for(;;){var e=d;if(!u().o(e)){if(di(e)){var f=e.Eb;$z(this.da.qo,e.Ka);try{f.Xm()}catch(n){var h=qn(qg(),n);if(null!==h){var k=this.da.qo.R();$z(this.da.qo,u());Ava(new rZ,this.da,k).Xm();throw pg(qg(),h);}throw n;}d=this.da.qo.R();continue a}throw(new q).i(e);}break}}finally{this.da.qo.nz()}}finally{$z(a.Fu,
+b)}};rZ.prototype.$classData=g({Gfa:0},!1,"scala.concurrent.BatchingExecutor$Batch",{Gfa:1,d:1,oW:1,hY:1});function sZ(){}sZ.prototype=new l;sZ.prototype.constructor=sZ;sZ.prototype.b=function(){return this};function gka(){Bva||(Bva=(new sZ).b());gB();var a;a=Vz();var b=Sa();a=1E6*+(0,a.wV)();a=CE(b,a);a=(new Xb).ha(a,b.Sb);b=a.ia;a=a.oa;var d=Nz().mu,b=zla(new hB,(new Xb).ha(b,a),d);a=new tZ;a.dq=b;return a}
+sZ.prototype.$classData=g({Ofa:0},!1,"scala.concurrent.duration.Deadline$",{Ofa:1,d:1,k:1,h:1});var Bva=void 0;function uZ(){this.PT=this.sq=this.p_=this.VG=null}uZ.prototype=new l;uZ.prototype.constructor=uZ;
+uZ.prototype.b=function(){vZ=this;x();for(var a=Nz().js,a=(new w).e(a,"d day"),b=Nz().tx,b=(new w).e(b,"h hour"),d=Nz().Mx,d=(new w).e(d,"min minute"),e=Nz().nu,e=(new w).e(e,"s sec second"),f=Nz().lu,f=(new w).e(f,"ms milli millisecond"),h=Nz().Kx,h=(new w).e(h,"\u00b5s micro microsecond"),k=Nz().mu,a=[a,b,d,e,f,h,(new w).e(k,"ns nano nanosecond")],a=(new J).j(a),b=x().s,b=this.VG=K(a,b),a=fc(new gc,hc());!b.z();)d=b.Y(),ic(a,d),b=b.$();this.p_=(new Nu).Fy(a.Va,m(new p,function(){return function(a){a=
+Cva(gB(),a);return Mm(a)}}(this)));b=this.VG;a=function(a){return function(b){if(null!==b){var d=b.ja();b=b.na();b=Dva(gB(),b);var d=function(a,b){return function(a){return(new w).e(a,b)}}(a,d),e=x().s;if(e===x().s){if(b===u())return u();var e=b.Y(),f=e=Og(new Pg,d(e),u());for(b=b.$();b!==u();){var h=b.Y(),h=Og(new Pg,d(h),u()),f=f.Ka=h;b=b.$()}return e}for(e=Nc(b,e);!b.z();)f=b.Y(),e.Ma(d(f)),b=b.$();return e.Ba()}throw(new q).i(b);}}(this);if(x().s===x().s)if(b===u())a=u();else{d=b;e=(new vC).ud(!1);
+f=(new jl).i(null);for(h=(new jl).i(null);d!==u();)k=d.Y(),a(k).jb().ta(m(new p,function(a,b,d,e){return function(a){b.Ca?(a=Og(new Pg,a,u()),e.Ca.Ka=a,e.Ca=a):(d.Ca=Og(new Pg,a,u()),e.Ca=d.Ca,b.Ca=!0)}}(b,e,f,h))),d=d.$();a=e.Ca?f.Ca:u()}else{x();for(d=(new mc).b();!b.z();)e=b.Y(),e=a(e).jb(),Rk(d,e),b=b.$();a=d.wb()}a.De(Ne().ml);this.sq=zla(new hB,Rz(),Nz().js);this.PT=(new wZ).b();(new xZ).b();(new yZ).b();return this};
+function Cva(a,b){a=b.trim();a=gE(Ia(),a,"\\s+");b=x().s.Tg();var d=a.n.length;switch(d){case -1:break;default:b.oc(d)}b.Xb((new ci).$h(a));return b.Ba()}
+function Dva(a,b){var d=Cva(0,b);if(!di(d))throw(new q).i(d);b=d.Eb;d=d.Ka;a=function(){return function(a){x();a=(new J).j([a,a+"s"]);var b=x().s;return K(a,b)}}(a);if(x().s===x().s)if(d===u())a=u();else{for(var e=d,f=(new vC).ud(!1),h=(new jl).i(null),k=(new jl).i(null);e!==u();){var n=e.Y();a(n).jb().ta(m(new p,function(a,b,d,e){return function(a){b.Ca?(a=Og(new Pg,a,u()),e.Ca.Ka=a,e.Ca=a):(d.Ca=Og(new Pg,a,u()),e.Ca=d.Ca,b.Ca=!0)}}(d,f,h,k)));e=e.$()}a=f.Ca?h.Ca:u()}else{x();for(e=(new mc).b();!d.z();)f=
+d.Y(),f=a(f).jb(),Rk(e,f),d=d.$();a=e.wb()}return Og(new Pg,b,a)}uZ.prototype.$classData=g({Pfa:0},!1,"scala.concurrent.duration.Duration$",{Pfa:1,d:1,k:1,h:1});var vZ=void 0;function gB(){vZ||(vZ=(new uZ).b());return vZ}function zZ(){this.W=this.kX=this.ry=null}zZ.prototype=new l;zZ.prototype.constructor=zZ;zZ.prototype.Xm=function(){ZD(Ne(),null!==this.W);try{this.kX.y(this.W)}catch(d){var a=qn(qg(),d);if(null!==a){var b=jw(kw(),a);if(b.z())throw pg(qg(),a);a=b.R();this.ry.Bt(a)}else throw d;}};
+function Eva(a,b){var d=new zZ;d.ry=a;d.kX=b;d.W=null;return d}function AZ(a,b){ZD(Ne(),null===a.W);a.W=b;try{a.ry.Xu(a)}catch(e){if(b=qn(qg(),e),null!==b){var d=jw(kw(),b);if(d.z())throw pg(qg(),b);b=d.R();a.ry.Bt(b)}else throw e;}}zZ.prototype.$classData=g({Ufa:0},!1,"scala.concurrent.impl.CallbackRunnable",{Ufa:1,d:1,oW:1,Mfa:1});
+function rla(a,b,d){var e=(new FQ).b();a.Mp(m(new p,function(a,b,d){return function(e){try{var r=b.y(e);if(r===a)return ke(d,e);if(BZ(r)){var y=d.W,E=BZ(y)?CZ(d,y):d;e=r;a:for(;;){if(e!==E){var Q=e.W;b:if(Fva(Q)){if(!E.Sw(Q))throw(new me).c("Cannot link completed promises together");}else{if(BZ(Q)){e=CZ(e,Q);continue a}if(Ng(Q)&&(r=Q,xY(e,r,E))){if(nd(r))for(Q=r;!Q.z();){var R=Q.Y();Gva(E,R);Q=Q.$()}break b}continue a}}break}}else return bba(d,r)}catch(da){E=qn(qg(),da);if(null!==E){R=jw(kw(),E);
+if(!R.z())return E=R.R(),ke(d,(new Fz).Dd(E));throw pg(qg(),E);}throw da;}}}(a,b,e)),d);return e}function Hva(a){a=a.iH();if(Xj(a))return"Future("+a.Q+")";if(C()===a)return"Future(\x3cnot completed\x3e)";throw(new q).i(a);}function tla(a,b,d){var e=(new FQ).b();a.Mp(m(new p,function(a,b,d){return function(a){var e;a:try{e=b.y(a)}catch(f){a=qn(qg(),f);if(null!==a){e=jw(kw(),a);if(!e.z()){a=e.R();e=(new Fz).Dd(a);break a}throw pg(qg(),a);}throw f;}return ke(d,e)}}(a,b,e)),d);return e}
+function DZ(){this.Zo=null;this.$n=this.Rl=0;this.lk=null;this.xa=!1}DZ.prototype=new l;DZ.prototype.constructor=DZ;DZ.prototype.b=function(){EZ=this;this.Rl=-512;this.$n=512;this.lk=Kf().IH;return this};function Iva(a){a.xa||(a.Zo=la(Xa(Jva),[1+(a.$n-a.Rl|0)|0]),a.xa=!0);return a.Zo}function Pw(a,b){var d=new VQ,e=new RQ;a=""+a;RQ.prototype.wp.call(e,fE(Ia(),a),0,a.length|0);gva(e,b);return UQ(d,e,b)}
+function oia(a,b){var d=a.Rl,e=d>>31,f=b.oa;(e===f?(-2147483648^d)<=(-2147483648^b.ia):e<f)?(d=a.$n,e=d>>31,f=b.oa,d=f===e?(-2147483648^b.ia)<=(-2147483648^d):f<e):d=!1;return d?nia(a,b.ia,a.lk):UQ(new VQ,fsa(WT(),b),a.lk)}
+function nia(a,b,d){var e=a.lk;if((null===d?null===e:d.o(e))&&a.Rl<=b&&b<=a.$n){var e=b-a.Rl|0,f=(a.xa?a.Zo:Iva(a)).n[e];null===f&&(f=WT(),f=UQ(new VQ,fsa(f,(new Xb).ha(b,b>>31)),d),(a.xa?a.Zo:Iva(a)).n[e]=f);return f}a=(new Xb).ha(b,b>>31);b=new VQ;e=new RQ;RQ.prototype.BE.call(e,a,0);gva(e,d);return UQ(b,e,d)}DZ.prototype.$classData=g({ega:0},!1,"scala.math.BigDecimal$",{ega:1,d:1,k:1,h:1});var EZ=void 0;function Mw(){EZ||(EZ=(new DZ).b());return EZ}
+function FZ(){this.$n=this.Rl=0;this.HY=this.Zo=null}FZ.prototype=new l;FZ.prototype.constructor=FZ;FZ.prototype.b=function(){GZ=this;this.Rl=-1024;this.$n=1024;this.Zo=la(Xa(Kva),[1+(this.$n-this.Rl|0)|0]);this.HY=Cf(ff(),(new Xb).ha(-1,-1));return this};function HZ(a,b){if(a.Rl<=b&&b<=a.$n){var d=b-a.Rl|0,e=a.Zo.n[d];null===e&&(e=ff(),e=(new IZ).Ln(Cf(e,(new Xb).ha(b,b>>31))),a.Zo.n[d]=e);return e}a=ff();return(new IZ).Ln(Cf(a,(new Xb).ha(b,b>>31)))}
+function Lva(a,b){var d=a.Rl,e=d>>31,f=b.oa;(e===f?(-2147483648^d)<=(-2147483648^b.ia):e<f)?(d=a.$n,e=d>>31,f=b.oa,d=f===e?(-2147483648^b.ia)<=(-2147483648^d):f<e):d=!1;return d?HZ(a,b.ia):(new IZ).Ln(Cf(ff(),b))}FZ.prototype.$classData=g({fga:0},!1,"scala.math.BigInt$",{fga:1,d:1,k:1,h:1});var GZ=void 0;function JZ(){GZ||(GZ=(new FZ).b());return GZ}function FB(){}FB.prototype=new l;FB.prototype.constructor=FB;FB.prototype.b=function(){return this};
+FB.prototype.$classData=g({hga:0},!1,"scala.math.Fractional$",{hga:1,d:1,k:1,h:1});var Vla=void 0;function GB(){}GB.prototype=new l;GB.prototype.constructor=GB;GB.prototype.b=function(){return this};GB.prototype.$classData=g({iga:0},!1,"scala.math.Integral$",{iga:1,d:1,k:1,h:1});var Wla=void 0;function HB(){}HB.prototype=new l;HB.prototype.constructor=HB;HB.prototype.b=function(){return this};HB.prototype.$classData=g({kga:0},!1,"scala.math.Numeric$",{kga:1,d:1,k:1,h:1});var Xla=void 0;
+function KZ(){}KZ.prototype=new LS;KZ.prototype.constructor=KZ;function Mva(){}Mva.prototype=KZ.prototype;function Bna(a){return!!(a&&a.$classData&&a.$classData.m.pY)}function LZ(){}LZ.prototype=new l;LZ.prototype.constructor=LZ;LZ.prototype.b=function(){return this};
+function ura(a,b){return b===pa(bb)?cma():b===pa(cb)?dma():b===pa($a)?ema():b===pa(db)?NB():b===pa(eb)?fma():b===pa(fb)?ri():b===pa(gb)?OB():b===pa(Za)?gma():b===pa(Ya)?hma():b===pa(Va)?jma():b===pa(MZ)?lma():b===pa(uE)?mma():(new An).Mg(b)}LZ.prototype.$classData=g({Jga:0},!1,"scala.reflect.ClassTag$",{Jga:1,d:1,k:1,h:1});var Nva=void 0;function vra(){Nva||(Nva=(new LZ).b());return Nva}function JB(){}JB.prototype=new l;JB.prototype.constructor=JB;JB.prototype.b=function(){return this};
+JB.prototype.$classData=g({eha:0},!1,"scala.util.Either$",{eha:1,d:1,k:1,h:1});var Zla=void 0;function KB(){}KB.prototype=new l;KB.prototype.constructor=KB;KB.prototype.b=function(){return this};KB.prototype.l=function(){return"Left"};KB.prototype.$classData=g({fha:0},!1,"scala.util.Left$",{fha:1,d:1,k:1,h:1});var $la=void 0;function LB(){}LB.prototype=new l;LB.prototype.constructor=LB;LB.prototype.b=function(){return this};LB.prototype.l=function(){return"Right"};
+LB.prototype.$classData=g({gha:0},!1,"scala.util.Right$",{gha:1,d:1,k:1,h:1});var ama=void 0;function bC(){this.Wu=this.yj=this.$V=null}bC.prototype=new l;bC.prototype.constructor=bC;c=bC.prototype;c.y=function(a){return this.wq(a)};c.Wm=function(a){return PA(this,a)};c.gk=function(a){return NZ(this,a)};c.vk=function(a){a=Ova(this,a);var b=this.$V;return!a.z()&&!!b.y(a.R())};c.Ia=function(a){return this.wq(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ul=function(a){return OZ(new PZ,this,a)};
+c.wq=function(a){return this.yj.y(Ova(this,a).R())};c.Ja=function(a){return!!this.wq(a)};c.Za=function(a){return this.vk(a)};function Ova(a,b){pma();return Qk(a.Wu.Od(),oa(b))?(new H).i(b):C()}c.gb=function(a,b){return RA(this,a,b)};c.za=function(a){return NZ(this,a)};c.$classData=g({kha:0},!1,"scala.util.control.Exception$$anon$1",{kha:1,d:1,Ha:1,fa:1});function fT(){this.ty=this.da=null}fT.prototype=new l;fT.prototype.constructor=fT;c=fT.prototype;c.y=function(a){return this.wq(a)};
+c.Wm=function(a){return PA(this,a)};c.gk=function(a){return NZ(this,a)};c.vk=function(a){return this.da.Zl.Za(a)};c.Ia=function(a){return this.wq(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ul=function(a){return OZ(new PZ,this,a)};c.wq=function(a){return this.ty.y(a)};c.Ja=function(a){return!!this.wq(a)};c.Za=function(a){return this.vk(a)};c.gb=function(a,b){return RA(this,a,b)};c.za=function(a){return NZ(this,a)};
+c.$classData=g({oha:0},!1,"scala.util.control.Exception$Catch$$anon$2",{oha:1,d:1,Ha:1,fa:1});function QZ(){this.pH=!1}QZ.prototype=new l;QZ.prototype.constructor=QZ;QZ.prototype.b=function(){this.pH=!1;return this};QZ.prototype.$classData=g({qha:0},!1,"scala.util.control.NoStackTrace$",{qha:1,d:1,k:1,h:1});var Pva=void 0;function Ub(){this.IY=this.aw=null}Ub.prototype=new l;Ub.prototype.constructor=Ub;Ub.prototype.Ap=function(a,b){var d=ig();Ub.prototype.uda.call(this,jg(d,a),b);return this};
+Ub.prototype.uda=function(a,b){this.aw=a;this.IY=b;return this};Ub.prototype.l=function(){return this.aw.nA};function mg(a,b){if(null===b)return C();a=kg(new lg,a.aw,b,La(b));if(Hba(a)){Qva||(Qva=(new RZ).b());x();var d=u();for(b=Dra(a);0<b;){var e=Cra(a,b),d=Og(new Pg,e,d);b=-1+b|0}a=(new H).i(d)}else a=C();return a}Ub.prototype.$classData=g({uha:0},!1,"scala.util.matching.Regex",{uha:1,d:1,k:1,h:1});function RZ(){}RZ.prototype=new l;RZ.prototype.constructor=RZ;RZ.prototype.b=function(){return this};
+RZ.prototype.$classData=g({vha:0},!1,"scala.util.matching.Regex$",{vha:1,d:1,k:1,h:1});var Qva=void 0;function SZ(){lT.call(this);this.AX=this.Qa=null}SZ.prototype=new mT;SZ.prototype.constructor=SZ;SZ.prototype.y=function(a){return this.si(a)};function dpa(a,b){var d=new SZ;if(null===a)throw pg(qg(),null);d.Qa=a;d.AX=b;lT.prototype.Cp.call(d,a);return d}
+SZ.prototype.si=function(a){var b=zO(this.Qa),d=(new H).i(C()),e=b.xc;b.xc=d;try{var f=this.AX.si(a);if(te(f)){var h=f.ke;if(h.jn.z())return f;var k=zO(this.Qa).xc;if(k.z())var n=C();else{var r=k.R();if(r.z())var y=!0;else var E=iO(r.R().ke),Q=iO(h),y=!(E.Ac<Q.Ac);n=y?r:C()}return n.z()?(new ye).Mn(this.Qa,"end of input expected",h):n.R()}var R=zO(this.Qa).xc,da=R.z()?C():R.R();return da.z()?f:da.R()}finally{b.xc=e}};
+SZ.prototype.$classData=g({Bha:0},!1,"scala.util.parsing.combinator.Parsers$$anon$2",{Bha:1,CY:1,d:1,fa:1});function oe(){lT.call(this);this.Yu=null}oe.prototype=new mT;oe.prototype.constructor=oe;oe.prototype.y=function(a){return this.si(a)};oe.prototype.Nl=function(a,b){this.Yu=b;lT.prototype.Cp.call(this,a);return this};oe.prototype.si=function(a){return this.Yu.y(a)};oe.prototype.$classData=g({Cha:0},!1,"scala.util.parsing.combinator.Parsers$$anon$3",{Cha:1,CY:1,d:1,fa:1});
+function TZ(){this.da=null}TZ.prototype=new BT;TZ.prototype.constructor=TZ;TZ.prototype.b=function(){AT.prototype.uv.call(this,Nj());return this};TZ.prototype.Tg=function(){Nj();KE();Mj();return(new LE).b()};TZ.prototype.$classData=g({Jha:0},!1,"scala.collection.IndexedSeq$$anon$1",{Jha:1,qG:1,d:1,Ir:1});function tC(){}tC.prototype=new NT;tC.prototype.constructor=tC;tC.prototype.y=function(){return this};
+tC.prototype.$classData=g({dia:0},!1,"scala.collection.TraversableOnce$$anon$2",{dia:1,aq:1,d:1,fa:1});function UZ(){}UZ.prototype=new l;UZ.prototype.constructor=UZ;UZ.prototype.b=function(){return this};UZ.prototype.$classData=g({fia:0},!1,"scala.collection.convert.WrapAsScala$",{fia:1,d:1,Hsa:1,Gsa:1});var Rva=void 0;function VZ(){this.s=null}VZ.prototype=new yT;VZ.prototype.constructor=VZ;function Sva(){}Sva.prototype=VZ.prototype;function zT(){this.Qa=this.da=null}zT.prototype=new BT;
+zT.prototype.constructor=zT;zT.prototype.Tg=function(){return this.Qa.db()};zT.prototype.uv=function(a){if(null===a)throw pg(qg(),null);this.Qa=a;AT.prototype.uv.call(this,a);return this};zT.prototype.$classData=g({oia:0},!1,"scala.collection.generic.GenTraversableFactory$$anon$1",{oia:1,qG:1,d:1,Ir:1});function WZ(){}WZ.prototype=new Xra;WZ.prototype.constructor=WZ;function XZ(){}XZ.prototype=WZ.prototype;function YZ(){}YZ.prototype=new Xra;YZ.prototype.constructor=YZ;function Tva(){}
+Tva.prototype=YZ.prototype;YZ.prototype.db=function(){return this.wi()};function zB(){}zB.prototype=new l;zB.prototype.constructor=zB;zB.prototype.b=function(){return this};zB.prototype.l=function(){return"::"};zB.prototype.$classData=g({qia:0},!1,"scala.collection.immutable.$colon$colon$",{qia:1,d:1,k:1,h:1});var Pla=void 0;function ZZ(){}ZZ.prototype=new l;ZZ.prototype.constructor=ZZ;
+ZZ.prototype.b=function(){$Z=this;var a=Iv();Uva||(Uva=(new a_).b());var a=(new w).e(a,Uva),b;Vva||(Vva=(new b_).b());b=Vva;Wva||(Wva=(new c_).b());b=(new w).e(b,Wva);var d;Xva||(Xva=(new d_).b());d=Xva;Yva||(Yva=(new e_).b());d=(new w).e(d,Yva);var e;Zva||(Zva=(new f_).b());e=Zva;$va||($va=(new g_).b());e=(new w).e(e,$va);var f;awa||(awa=(new h_).b());f=awa;bwa||(bwa=(new i_).b());a=[a,b,d,e,(new w).e(f,bwa)];b=fc(new gc,hc());d=0;for(e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;return this};
+function j_(a,b,d){if(0<b.Ge(a,d))throw(new Re).c("More than Int.MaxValue elements.");return a}
+function Vra(a,b,d){var e=d.Xg(0),f=0>d.Ge(0,b),h=0<d.Ge(2,e);if(Em(Fm(),2,e))throw(new Re).c("step cannot be 0.");if(Em(Fm(),0,b)||f!==h)return 0;a=d.fn(0);if(Em(Fm(),0,d.Xg(a))){var k=d.fn(b);if(Em(Fm(),b,d.Xg(k))){var n=d.fn(2);if(Em(Fm(),2,d.Xg(n))){d=a>k&&0<n||a<k&&0>n||a===k;if(0===n)throw(new Re).c("step cannot be 0.");if(d)d=0;else{e=k>>31;b=a>>31;d=k-a|0;b=(-2147483648^d)>(-2147483648^k)?-1+(e-b|0)|0:e-b|0;f=n>>31;e=Sa();d=nf(e,d,b,n,f);e=e.Sb;f=k>>31;h=a>>31;b=k-a|0;var h=(-2147483648^b)>
+(-2147483648^k)?-1+(f-h|0)|0:f-h|0,r=n>>31,f=Sa();b=Vf(f,b,h,n,r);f=f.Sb;f=0!==b||0!==f?1:0;b=f>>31;f=d+f|0;d=(-2147483648^f)<(-2147483648^d)?1+(e+b|0)|0:e+b|0;d=(0===d?-1<(-2147483648^f):0<d)?-1:f}switch(n){case 1:break;case -1:break;default:b=k>>31,f=a>>31,e=k-a|0,b=(-2147483648^e)>(-2147483648^k)?-1+(b-f|0)|0:b-f|0,f=n>>31,Vf(Sa(),e,b,n,f)}return 0>d?jn(kn(),a,k,n,!1):d}}}k=d.Xg(1);a=d.Xg(2147483647);n=cwa(d,0);r=cwa(d,b);0<=ea(n,r)?(b=d.Hp(b,0),n=j_(d.vr(b,2),d,a),b=d.Hp(b,d.Sr(n,2)),a=Em(Fm(),
+e,b)?n:j_(d.Jj(n,k),d,a)):(n=d.Xg(-1),n=d.Hp(h?n:k,0),n=j_(d.vr(n,2),d,a),h=Em(Fm(),n,e)?0:d.Jj(0,d.Sr(n,2)),h=d.Jj(h,2),0>d.Ge(h,b)!==f?k=d.Jj(n,k):(f=d.Hp(b,h),f=j_(d.vr(f,2),d,a),e=Em(Fm(),f,e)?h:d.Jj(h,d.Sr(f,2)),k=d.Jj(n,d.Jj(f,Em(Fm(),e,b)?k:d.Xg(2)))),a=j_(k,d,a));return d.fn(a)}ZZ.prototype.$classData=g({$ia:0},!1,"scala.collection.immutable.NumericRange$",{$ia:1,d:1,k:1,h:1});var $Z=void 0;function Wra(){$Z||($Z=(new ZZ).b());return $Z}function k_(){}k_.prototype=new l;
+k_.prototype.constructor=k_;k_.prototype.b=function(){return this};function jn(a,b,d,e,f){throw(new Re).c(b+(f?" to ":" until ")+d+" by "+e+": seqs cannot contain more than Int.MaxValue elements.");}k_.prototype.$classData=g({aja:0},!1,"scala.collection.immutable.Range$",{aja:1,d:1,k:1,h:1});var dwa=void 0;function kn(){dwa||(dwa=(new k_).b());return dwa}function tg(){this.da=null}tg.prototype=new BT;tg.prototype.constructor=tg;tg.prototype.b=function(){AT.prototype.uv.call(this,sg());return this};
+tg.prototype.$classData=g({oja:0},!1,"scala.collection.immutable.Stream$StreamCanBuildFrom",{oja:1,qG:1,d:1,Ir:1});function DB(){}DB.prototype=new l;DB.prototype.constructor=DB;DB.prototype.b=function(){return this};DB.prototype.$classData=g({Lka:0},!1,"scala.collection.mutable.StringBuilder$",{Lka:1,d:1,k:1,h:1});var Tla=void 0;function l_(){this.Qi=null}l_.prototype=new bsa;l_.prototype.constructor=l_;function se(a){return(0,a.Qi)()}function I(a){var b=new l_;b.Qi=a;return b}
+l_.prototype.$classData=g({kla:0},!1,"scala.scalajs.runtime.AnonFunction0",{kla:1,ata:1,d:1,Qla:1});function p(){this.Qi=null}p.prototype=new NT;p.prototype.constructor=p;p.prototype.y=function(a){return(0,this.Qi)(a)};function m(a,b){a.Qi=b;return a}p.prototype.$classData=g({lla:0},!1,"scala.scalajs.runtime.AnonFunction1",{lla:1,aq:1,d:1,fa:1});function vb(){this.Qi=null}vb.prototype=new csa;vb.prototype.constructor=vb;function ub(a,b){a.Qi=b;return a}function sb(a,b,d){return(0,a.Qi)(b,d)}
+vb.prototype.$classData=g({mla:0},!1,"scala.scalajs.runtime.AnonFunction2",{mla:1,bta:1,d:1,Rla:1});function m_(){this.Qi=null}m_.prototype=new dsa;m_.prototype.constructor=m_;function Yt(a){var b=new m_;b.Qi=a;return b}m_.prototype.$classData=g({nla:0},!1,"scala.scalajs.runtime.AnonFunction3",{nla:1,cta:1,d:1,Sla:1});function n_(){this.Qi=null}n_.prototype=new esa;n_.prototype.constructor=n_;function Sc(a,b,d,e,f){return(0,a.Qi)(b,d,e,f)}function xx(a){var b=new n_;b.Qi=a;return b}
+n_.prototype.$classData=g({ola:0},!1,"scala.scalajs.runtime.AnonFunction4",{ola:1,dta:1,d:1,Tla:1});function o_(){this.Sb=0;this.sq=null}o_.prototype=new l;o_.prototype.constructor=o_;o_.prototype.b=function(){p_=this;this.sq=(new Xb).ha(0,0);return this};function Rz(){return Sa().sq}function ewa(a,b,d){return 0===(-2097152&d)?""+(4294967296*d+ +(b>>>0)):fwa(a,b,d,1E9,0,2)}
+function nf(a,b,d,e,f){if(0===(e|f))throw(new YT).c("/ by zero");if(d===b>>31){if(f===e>>31){if(-2147483648===b&&-1===e)return a.Sb=0,-2147483648;var h=b/e|0;a.Sb=h>>31;return h}return-2147483648===b&&-2147483648===e&&0===f?a.Sb=-1:a.Sb=0}if(h=0>d){var k=-b|0;d=0!==b?~d:-d|0}else k=b;if(b=0>f){var n=-e|0;e=0!==e?~f:-f|0}else n=e,e=f;k=gwa(a,k,d,n,e);if(h===b)return k;h=a.Sb;a.Sb=0!==k?~h:-h|0;return-k|0}
+function tE(a,b,d){return 0>d?-(4294967296*+((0!==b?~d:-d|0)>>>0)+ +((-b|0)>>>0)):4294967296*d+ +(b>>>0)}function CE(a,b){if(-9223372036854775808>b)return a.Sb=-2147483648,0;if(0x7fffffffffffffff<=b)return a.Sb=2147483647,-1;var d=b|0,e=b/4294967296|0;a.Sb=0>b&&0!==d?-1+e|0:e;return d}
+function gwa(a,b,d,e,f){return 0===(-2097152&d)?0===(-2097152&f)?(d=(4294967296*d+ +(b>>>0))/(4294967296*f+ +(e>>>0)),a.Sb=d/4294967296|0,d|0):a.Sb=0:0===f&&0===(e&(-1+e|0))?(e=31-ga(e)|0,a.Sb=d>>>e|0,b>>>e|0|d<<1<<(31-e|0)):0===e&&0===(f&(-1+f|0))?(b=31-ga(f)|0,a.Sb=0,d>>>b|0):fwa(a,b,d,e,f,0)|0}function pf(a,b,d,e,f){if(0===(e|f))throw(new YT).c("/ by zero");return 0===d?0===f?(a.Sb=0,+(b>>>0)/+(e>>>0)|0):a.Sb=0:gwa(a,b,d,e,f)}
+function GD(a,b,d){return d===b>>31?""+b:0>d?"-"+ewa(a,-b|0,0!==b?~d:-d|0):ewa(a,b,d)}function q_(a,b,d,e,f){return d===f?b===e?0:(-2147483648^b)<(-2147483648^e)?-1:1:d<f?-1:1}
+function fwa(a,b,d,e,f,h){var k=(0!==f?ga(f):32+ga(e)|0)-(0!==d?ga(d):32+ga(b)|0)|0,n=k,r=0===(32&n)?e<<n:0,y=0===(32&n)?(e>>>1|0)>>>(31-n|0)|0|f<<n:e<<n,n=b,E=d;for(b=d=0;0<=k&&0!==(-2097152&E);){var Q=n,R=E,da=r,ma=y;if(R===ma?(-2147483648^Q)>=(-2147483648^da):(-2147483648^R)>=(-2147483648^ma))Q=E,R=y,E=n-r|0,Q=(-2147483648^E)>(-2147483648^n)?-1+(Q-R|0)|0:Q-R|0,n=E,E=Q,32>k?d|=1<<k:b|=1<<k;k=-1+k|0;Q=y>>>1|0;r=r>>>1|0|y<<31;y=Q}k=E;if(k===f?(-2147483648^n)>=(-2147483648^e):(-2147483648^k)>=(-2147483648^
+f))k=4294967296*E+ +(n>>>0),e=4294967296*f+ +(e>>>0),1!==h&&(y=k/e,f=y/4294967296|0,r=d,d=y=r+(y|0)|0,b=(-2147483648^y)<(-2147483648^r)?1+(b+f|0)|0:b+f|0),0!==h&&(e=k%e,n=e|0,E=e/4294967296|0);if(0===h)return a.Sb=b,d;if(1===h)return a.Sb=E,n;a=""+n;return""+(4294967296*b+ +(d>>>0))+"000000000".substring(a.length|0)+a}
+function Vf(a,b,d,e,f){if(0===(e|f))throw(new YT).c("/ by zero");if(d===b>>31){if(f===e>>31){if(-1!==e){var h=b%e|0;a.Sb=h>>31;return h}return a.Sb=0}if(-2147483648===b&&-2147483648===e&&0===f)return a.Sb=0;a.Sb=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.Sb=k/4294967296|0,k|=0):a.Sb=f:0===e&&0===(b&(-1+b|0))?(a.Sb=0,k&=-1+b|0):0===b&&0===(e&(-1+e|0))?a.Sb=
+f&(-1+e|0):k=fwa(a,k,f,b,e,1)|0;return h?(h=a.Sb,a.Sb=0!==k?~h:-h|0,-k|0):k}o_.prototype.$classData=g({rla:0},!1,"scala.scalajs.runtime.RuntimeLong$",{rla:1,d:1,k:1,h:1});var p_=void 0;function Sa(){p_||(p_=(new o_).b());return p_}function r_(){}r_.prototype=new l;r_.prototype.constructor=r_;function s_(){}c=s_.prototype=r_.prototype;c.y=function(a){return this.gb(a,od().ZD)};c.Wm=function(a){return PA(this,a)};c.gk=function(a){return NZ(this,a)};c.Ia=function(a){return this.y(a)|0};c.l=function(){return"\x3cfunction1\x3e"};
+c.Ja=function(a){return!!this.y(a)};c.Ul=function(a){return OZ(new PZ,this,a)};c.za=function(a){return this.gk(a)};function t_(){this.tb=this.Pa=!1}t_.prototype=new l;t_.prototype.constructor=t_;t_.prototype.b=function(){return this};t_.prototype.l=function(){return"LazyBoolean "+(this.Pa?"of: "+this.tb:"thunk")};t_.prototype.$classData=g({Bla:0},!1,"scala.runtime.LazyBoolean",{Bla:1,d:1,k:1,h:1});function u_(){this.Pa=!1;this.tb=0}u_.prototype=new l;u_.prototype.constructor=u_;u_.prototype.b=function(){return this};
+u_.prototype.l=function(){return"LazyInt "+(this.Pa?"of: "+this.tb:"thunk")};u_.prototype.$classData=g({Cla:0},!1,"scala.runtime.LazyInt",{Cla:1,d:1,k:1,h:1});function Be(){this.Pa=!1;this.tb=null}Be.prototype=new l;Be.prototype.constructor=Be;Be.prototype.b=function(){return this};Be.prototype.l=function(){return"LazyRef "+(this.Pa?"of: "+this.tb:"thunk")};function De(a,b){a.tb=b;a.Pa=!0;return b}Be.prototype.$classData=g({Dla:0},!1,"scala.runtime.LazyRef",{Dla:1,d:1,k:1,h:1});
+var MZ=g({Fla:0},!1,"scala.runtime.Nothing$",{Fla:1,tc:1,d:1,h:1});function v_(){NS.call(this)}v_.prototype=new FY;v_.prototype.constructor=v_;v_.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};v_.prototype.$classData=g({vA:0},!1,"java.io.IOException",{vA:1,Wc:1,tc:1,d:1,h:1});function w_(){}w_.prototype=new l;w_.prototype.constructor=w_;function hwa(){}hwa.prototype=w_.prototype;w_.prototype.ap=function(){};function x_(){}x_.prototype=new l;x_.prototype.constructor=x_;
+function iwa(){}iwa.prototype=x_.prototype;x_.prototype.La=function(a){a.z()||a.R();return this};function RQ(){this.iq=null;this.Lh=0;this.Jo=null;this.Me=0;this.Ud=Rz();this.Ko=this.Rb=0}RQ.prototype=new LS;RQ.prototype.constructor=RQ;c=RQ.prototype;c.Hj=function(){return-64>=this.Rb||this.Rb>y_(this)?Rz():z_(this).Hj()};c.b=function(){this.iq=null;this.Me=this.Lh=0;this.Ud=Rz();this.Ko=this.Rb=0;return this};
+function A_(a,b){var d=a.Rb,e=d>>31,f=-d|0,d=0!==d?~e:-e|0,h=y_(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 YT).c("Rounding necessary");a=jwa(a);if(gf(kf(),a)<b)return a.Hj();throw(new YT).c("Rounding necessary");}c.o=function(a){if(a&&a.$classData&&a.$classData.m.mI&&a.Rb===this.Rb){if(64>this.Me){a=a.Ud;var b=a.oa,d=this.Ud;return a.ia===d.ia&&b===d.oa}return sE(Fm(),this.Jo,a.Jo)}return!1};
+function tY(a){if(0===a.Me){a=a.Ud;var b=a.oa;return!(-1===a.ia&&-1===b)}return!1}
+function kwa(a){if(tY(a))return a;var b=-1+tf().Mo.n.length|0,d=1,e=XT(a),f=a=a.Rb;a>>=31;a:for(;;){if(!B_(e,0)){var h=C_(e,tf().Mo.n[d]);if(0===h.lz.Wb){var e=h.hz,k=d,h=k>>31,n=a;a=f-k|0;f=(-2147483648^a)>(-2147483648^f)?-1+(n-h|0)|0:n-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 Xb).ha(d,a);break}d=Ra(d);e=Ra((new Xb).ha(d.ia,d.oa));d=e.ia;e=e.oa;return(new RQ).Uq(b,ZT(WT(),(new Xb).ha(d,e)))}
+function gva(a,b){var d=b.ei,e=D_(a)-d|0;if(!(y_(a)<d||0===d||0>=e))if(64>a.Me){var d=WT().jq.n[e],f=d.ia,h=d.oa,k=a.Rb,n=k>>31,r=e>>31,d=k-e|0,k=(-2147483648^d)>(-2147483648^k)?-1+(n-r|0)|0:n-r|0,e=a.Ud,r=e.ia,y=e.oa,n=Sa(),e=nf(n,r,y,f,h),n=n.Sb,E=Sa(),r=Vf(E,r,y,f,h),y=E.Sb;if(0!==r||0!==y){WT();if(0>y)var E=-r|0,Q=0!==r?~y:-y|0;else E=r,Q=y;E=(new Xb).ha(E<<1,E>>>31|0|Q<<1);f=(new Xb).ha(f,h);h=E.oa;Q=f.oa;(h===Q?(-2147483648^E.ia)>(-2147483648^f.ia):h>Q)?f=1:(h=E.oa,Q=f.oa,f=(h===Q?(-2147483648^
+E.ia)<(-2147483648^f.ia):h<Q)?-1:0);f=ea(0>y?-1:0===y&&0===r?0:1,5+f|0);f=jsa(WT(),1&e,f,b.zr);h=f>>31;f=e+f|0;e=(-2147483648^f)<(-2147483648^e)?1+(n+h|0)|0:n+h|0;0>e?(n=-f|0,h=0!==f?~e:-e|0):(n=f,h=e);n=tE(Sa(),n,h);(void 0!==ba.Math.log10?+ba.Math.log10(n):+ba.Math.log(n)/2.302585092994046)>=b.ei?(d=-1+d|0,k=-1!==d?k:-1+k|0,n=Sa(),e=nf(n,f,e,10,0),n=n.Sb,d=(new Xb).ha(d,k),e=(new Xb).ha(e,n)):(d=(new Xb).ha(d,k),e=(new Xb).ha(f,e))}else d=(new Xb).ha(d,k),e=(new Xb).ha(e,n);k=d;d=k.ia;k=k.oa;n=
+e;e=n.ia;n=n.oa;a.Rb=ZT(WT(),(new Xb).ha(d,k));a.Ko=b.ei;a.Ud=(new Xb).ha(e,n);a.Me=VT(WT(),(new Xb).ha(e,n));a.Jo=null}else f=Tf(tf(),(new Xb).ha(e,e>>31)),k=XT(a),k=rba(C_(k,f)),n=a.Rb,h=n>>31,r=e>>31,e=n-e|0,n=(-2147483648^e)>(-2147483648^n)?-1+(h-r|0)|0:h-r|0,0!==k.n[1].Wb?(h=E_(lwa(mwa(k.n[1])),f),f=B_(k.n[0],0)?1:0,h=ea(k.n[1].Wb,5+h|0),b=jsa(WT(),f,h,b.zr),0!==b&&(b=Cf(ff(),(new Xb).ha(b,b>>31)),f=k.n[0],k.n[0]=zf(Ef(),f,b)),D_((new RQ).Ln(k.n[0]))>d?(k.n[0]=nwa(k.n[0],ff().rq),b=e=-1+e|0,
+e=-1!==e?n:-1+n|0):(b=e,e=n)):(b=e,e=n),a.Rb=ZT(WT(),(new Xb).ha(b,e)),a.Ko=d,owa(a,k.n[0])}c.Uq=function(a,b){RQ.prototype.b.call(this);if(null===a)throw(new Ce).c("unscaledVal \x3d\x3d null");this.Rb=b;owa(this,a);return this};
+c.l=function(){if(null!==this.iq)return this.iq;if(32>this.Me)return this.iq=wba(qf(),this.Ud,this.Rb);var a=XT(this),b=of(qf(),a);if(0===this.Rb)return b;var d=0>XT(this).Wb?2:1,e=b.length|0,f=this.Rb,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.Rb&&(-1===f?2147483642<=(-2147483648^a):-1<f))if(0<=f)WT(),a=e-this.Rb|0,WT(),a=b.substring(0,a)+"."+b.substring(a);else{WT();
+WT();e=-1+d|0;WT();b=b.substring(0,e)+"0."+b.substring(e);d=1+d|0;e=WT().dW;f=(new Bl).b();h=!0;zr(f,"");for(var k=0,n=e.n.length;k<n;){var r=Oe(e.n[k]);h?(Ar(f,r),h=!1):(zr(f,""),Ar(f,r));k=1+k|0}zr(f,"");e=f.Bb.Yb;a=-1-a|0;WT();a=e.substring(0,a);a=""+b.substring(0,d)+a+b.substring(d)}else b=(1<=(e-d|0)?(WT(),WT(),b.substring(0,d)+"."+b.substring(d)):b)+"E",a=((0===f?0!==a:0<f)?b+"+":b)+GD(Sa(),a,f);return this.iq=a};
+function F_(a){if(64>a.Me){if(0>a.Ud.oa)return-1;var b=a.Ud;a=b.ia;b=b.oa;return(0===b?0!==a:0<b)?1:0}return XT(a).Wb}c.ha=function(a,b){RQ.prototype.b.call(this);this.Ud=(new Xb).ha(a,a>>31);this.Rb=b;WT();this.Me=32-ga(0>a?~a:a)|0;return this};function z_(a){if(0===a.Rb||tY(a))return XT(a);if(0>a.Rb){var b=XT(a),d=tf();a=a.Rb;var e=a>>31;return Of(b,Tf(d,(new Xb).ha(-a|0,0!==a?~e:-e|0)))}b=XT(a);d=tf();a=a.Rb;return nwa(b,Tf(d,(new Xb).ha(a,a>>31)))}
+function pwa(a,b){var d=a.Rb,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.Me?(e=a.Ud,f=e.oa,0===e.ia&&0===f?ksa(WT(),(new Xb).ha(b,d)):TT(WT(),a.Ud,ZT(WT(),(new Xb).ha(b,d)))):(new RQ).Uq(XT(a),ZT(WT(),(new Xb).ha(b,d)))}
+function D_(a){if(0===a.Ko){if(0===a.Me)var b=1;else if(64>a.Me){var d=a.Ud;if(0===d.ia&&-2147483648===d.oa)b=19;else{fA();b=WT().jq;if(0>d.oa)var e=d.ia,d=d.oa,e=(new Xb).ha(-e|0,0!==e?~d:-d|0);else e=d;b:{var d=0,f=b.n.length;for(;;){if(d===f){b=-1-d|0;break b}var h=(d+f|0)>>>1|0,k=b.n[h],n=Ra(k),r=n.ia,n=n.oa,y=e.oa;if(y===n?(-2147483648^e.ia)<(-2147483648^r):y<n)f=h;else{if(Em(Fm(),e,k)){b=h;break b}d=1+h|0}}}b=0>b?-1-b|0:1+b|0}}else b=1+Oa(.3010299956639812*(-1+a.Me|0))|0,e=XT(a),d=tf(),b=0!==
+nwa(e,Tf(d,(new Xb).ha(b,b>>31))).Wb?1+b|0:b;a.Ko=b}return a.Ko}function jwa(a){if(0===a.Rb||tY(a))return XT(a);if(0>a.Rb){var b=XT(a),d=tf();a=a.Rb;var e=a>>31;return Of(b,Tf(d,(new Xb).ha(-a|0,0!==a?~e:-e|0)))}if(a.Rb>y_(a)||a.Rb>G_(XT(a)))throw(new YT).c("Rounding necessary");b=XT(a);d=tf();a=a.Rb;a=Tf(d,(new Xb).ha(a,a>>31));a=rba(C_(b,a));if(0!==a.n[1].Wb)throw(new YT).c("Rounding necessary");return a.n[0]}function owa(a,b){a.Jo=b;a.Me=gf(kf(),b);64>a.Me&&(a.Ud=b.Hj())}
+function y_(a){return 0<a.Ko?a.Ko:1+Oa(.3010299956639812*(-1+a.Me|0))|0}
+c.Am=function(){var a=F_(this),b=this.Me,d=b>>31,e=Sa(),f=CE(e,this.Rb/.3010299956639812),e=e.Sb,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=mwa(XT(this));b=1076;if(0>=this.Rb)f=tf(),e=-this.Rb|0,e=Of(d,Tf(f,(new Xb).ha(e,e>>31)));else{var e=tf(),h=this.Rb,e=Tf(e,(new Xb).ha(h,h>>31)),f=100-f|0;0<f?(b=b-f|0,f=Sf(d,f)):f=d;f=C_(f,e);d=E_(lwa(f.lz),e);b=-2+b|0;
+f=Sf(f.hz,2);e=ff();d=1+(ea(d,3+d|0)/2|0)|0;d=Cf(e,(new Xb).ha(d,d>>31));e=zf(Ef(),f,d)}var f=G_(e),d=-54+gf(kf(),e)|0,k,n;if(0<d){if(e=Rf(e,d).Hj(),h=e.oa,e=e.ia,k=h,h=e,n=k,1===(1&e)&&f<d||3===(3&e)){var r=2+e|0,e=r;k=-2147483646>(-2147483648^r)?1+k|0:k}}else e=e.Hj(),h=e.ia,n=e.oa,k=-d|0,e=0===(32&k)?h<<k:0,k=0===(32&k)?(h>>>1|0)>>>(31-k|0)|0|n<<k:h<<k,h=e,n=k,3===(3&e)&&(e=r=2+e|0,k=-2147483646>(-2147483648^r)?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|n<<31;k=n>>1;n=63+b|0;h=e&(0===(32&n)?-1>>>n|0|-2<<(31-n|0):-1>>>n|0);n=k&(0===(32&n)?-1>>>n|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===n?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 Xb).ha(f,b);a.Xp?(a.lt[a.vE]=b.oa,a.lt[a.DF]=b.ia,a=+a.mE[0]):a=Mna(b);return a};
+c.BE=function(a,b){RQ.prototype.b.call(this);this.Ud=a;this.Rb=b;this.Me=VT(WT(),a);return this};c.r=function(){if(0===this.Lh)if(64>this.Me){this.Lh=this.Ud.ia;var a=this.Ud.oa;this.Lh=ea(33,this.Lh)+a|0;this.Lh=ea(17,this.Lh)+this.Rb|0}else this.Lh=ea(17,this.Jo.r())+this.Rb|0;return this.Lh};c.c=function(a){RQ.prototype.wp.call(this,fE(Ia(),a),0,a.length|0);return this};c.Ti=function(){return-32>=this.Rb||this.Rb>y_(this)?0:z_(this).Ti()};
+function qwa(a,b){var d=a.Rb-b.Rb|0;if(tY(a)&&0>=d)return b;if(tY(b)&&(tY(a)||0<=d))return a;if(0===d){var d=a.Me,e=b.Me;if(64>(1+(d>e?d:e)|0)){var d=WT(),f=a.Ud,e=f.ia,f=f.oa,h=b.Ud;b=h.oa;h=e+h.ia|0;return TT(d,(new Xb).ha(h,(-2147483648^h)<(-2147483648^e)?1+(f+b|0)|0:f+b|0),a.Rb)}d=XT(a);b=XT(b);return(new RQ).Uq(zf(Ef(),d,b),a.Rb)}return 0<d?isa(WT(),a,b,d):isa(WT(),b,a,-d|0)}c.Ln=function(a){RQ.prototype.Uq.call(this,a,0);return this};
+c.Hq=function(){var a=this.Me,b=a>>31,d=Sa(),e=CE(d,this.Rb/.3010299956639812),d=d.Sb,e=a-e|0,a=(-2147483648^e)>(-2147483648^a)?-1+(b-d|0)|0:b-d|0,b=fa(F_(this));return(-1===a?2147483499>(-2147483648^e):-1>a)||0===b?fa(0*b):(0===a?-2147483519<(-2147483648^e):0<a)?fa(Infinity*b):fa(this.Am())};
+c.wp=function(a,b,d){RQ.prototype.b.call(this);var e=-1+(b+d|0)|0;if(null===a)throw(new Ce).c("in \x3d\x3d null");if(e>=a.n.length||0>b||0>=d||0>e)throw(new BY).c("Bad offset/length: offset\x3d"+b+" len\x3d"+d+" in.length\x3d"+a.n.length);d=b;if(b<=e&&43===a.n[b]){d=1+d|0;if(d<e){WT();b=[Oe(43),Oe(45)];for(var f=Oe(a.n[d]),h=0;;){if(h<(b.length|0))var k=b[h],k=!1===Em(Fm(),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 BY).c("For input string: "+a.l());}else{b=
+d<=e&&45===a.n[d];if((1+d|0)<e){WT();f=[Oe(43),Oe(45)];h=Oe(a.n[1+d|0]);for(k=0;;){if(k<(f.length|0))var n=f[k],n=!1===Em(Fm(),n,h);else n=!1;if(n)k=1+k|0;else break}f=k!==(f.length|0)}else f=!1;if(b&&f)throw(new BY).c("For input string: "+a.l());}h=d;for(b=!1;;){if(d<=e){WT();f=[Oe(46),Oe(101),Oe(69)];k=Oe(a.n[d]);for(n=0;;){if(n<(f.length|0))var r=f[n],r=!1===Em(Fm(),r,k);else r=!1;if(r)n=1+n|0;else break}f=n===(f.length|0)}else f=!1;if(f)b||48===a.n[d]||(b=!0),d=1+d|0;else break}f=(new aT).wp((new $S).Gm(a).cs,
+h,d).l();h=d-h|0;if(d<=e&&46===a.n[d]){for(k=d=1+d|0;;){if(d<=e){WT();for(var n=[Oe(101),Oe(69)],r=Oe(a.n[d]),y=0;;){if(y<(n.length|0))var E=n[y],E=!1===Em(Fm(),E,r);else E=!1;if(E)y=1+y|0;else break}n=y===(n.length|0)}else n=!1;if(n)b||48===a.n[d]||(b=!0),d=1+d|0;else break}this.Rb=d-k|0;b=""+f+(new aT).wp((new $S).Gm(a).cs,k,k+this.Rb|0).l();f=h+this.Rb|0}else this.Rb=0,b=f,f=h;f|=0;if(d<=e){WT();h=[Oe(101),Oe(69)];k=Oe(a.n[d]);for(n=0;;)if(n<(h.length|0)?(r=h[n],r=!1===Em(Fm(),r,k)):r=!1,r)n=1+
+n|0;else break;h=n!==(h.length|0)}else h=!1;if(h&&(d=1+d|0,h=(1+d|0)<=e&&45!==a.n[1+d|0],d=d<=e&&43===a.n[d]&&h?1+d|0:d,d=Pna(Ia(),a,d,(1+e|0)-d|0),a=this.Rb,e=a>>31,h=gi(ei(),d,10),d=h>>31,k=this.Rb=h=a-h|0,h!==k||((-2147483648^h)>(-2147483648^a)?-1+(e-d|0)|0:e-d|0)!==k>>31))throw(new BY).c("Scale out of range");19>f?(this.Ud=Tba(Gh(),b),this.Me=VT(WT(),this.Ud)):owa(this,(new df).c(b));return this};function XT(a){null===a.Jo&&(a.Jo=Cf(ff(),a.Ud));return a.Jo}
+function rwa(a,b){var d=F_(a),e=F_(b);if(d===e){if(a.Rb===b.Rb&&64>a.Me&&64>b.Me){var d=a.Ud,e=d.ia,d=d.oa,f=b.Ud,h=f.oa;if(d===h?(-2147483648^e)<(-2147483648^f.ia):d<h)return-1;e=a.Ud;a=e.ia;e=e.oa;b=b.Ud;d=b.oa;return(e===d?(-2147483648^a)>(-2147483648^b.ia):e>d)?1:0}var f=a.Rb,h=f>>31,e=b.Rb,k=e>>31,e=f-e|0,f=(-2147483648^e)>(-2147483648^f)?-1+(h-k|0)|0:h-k|0,h=y_(a)-y_(b)|0,k=h>>31,n=1+e|0,r=0===n?1+f|0:f;if(k===r?(-2147483648^h)>(-2147483648^n):k>r)return d;k=h>>31;n=-1+e|0;r=-1!==n?f:-1+f|0;
+if(k===r?(-2147483648^h)<(-2147483648^n):k<r)return-d|0;a=XT(a);b=XT(b);if(0>f)d=tf(),a=Of(a,Tf(d,(new Xb).ha(-e|0,0!==e?~f:-f|0)));else if(0===f?0!==e:0<f)b=Of(b,Tf(tf(),(new Xb).ha(e,f)));return E_(a,b)}return d<e?-1:1}var hsa=g({mI:0},!1,"java.math.BigDecimal",{mI:1,bl:1,d:1,h:1,Md:1});RQ.prototype.$classData=hsa;function df(){this.Cb=null;this.Lh=this.My=this.Wb=this.cc=0}df.prototype=new LS;df.prototype.constructor=df;
+function Uf(a,b){if(0>b)throw(new YT).c("Negative exponent");if(0===b)return ff().un;if(1===b||a.o(ff().un)||a.o(ff().fk))return a;if(B_(a,0)){a:{tf();var d=ff().un,e=a;for(;;)if(1<b)a=0!==(1&b)?Of(d,e):d,1===e.cc?e=Of(e,e):(d=la(Xa(db),[e.cc<<1]),d=Bba(e.Cb,e.cc,d),e=new df,df.prototype.b.call(e),0===d.n.length?(e.Wb=0,e.cc=1,e.Cb=Bf(Af(),0,(new J).j([]))):(e.Wb=1,e.cc=d.n.length,e.Cb=d,ef(e))),b>>=1,d=a;else{b=Of(d,e);break a}}return b}for(d=1;!B_(a,d);)d=1+d|0;return Of(lsa(ff(),ea(d,b)),Uf(Rf(a,
+d),b))}c=df.prototype;c.Hj=function(){if(1<this.cc)var a=this.Cb.n[0],b=this.Cb.n[1];else a=this.Cb.n[0],b=0;var d=this.Wb,e=d>>31,f=65535&d,h=d>>>16|0,k=65535&a,n=a>>>16|0,r=ea(f,k),k=ea(h,k),y=ea(f,n),f=r+((k+y|0)<<16)|0,r=(r>>>16|0)+y|0,b=(((ea(d,b)+ea(e,a)|0)+ea(h,n)|0)+(r>>>16|0)|0)+(((65535&r)+k|0)>>>16|0)|0;return(new Xb).ha(f,b)};c.b=function(){this.My=-2;this.Lh=0;return this};
+function nwa(a,b){if(0===b.Wb)throw(new YT).c("BigInteger divide by zero");var d=b.Wb;if(1===b.cc&&1===b.Cb.n[0])return 0<b.Wb?a:zba(a);var e=a.Wb,f=a.cc,h=b.cc;if(2===(f+h|0))return a=a.Cb.n[0],b=b.Cb.n[0],f=Sa(),b=nf(f,a,0,b,0),a=f.Sb,e!==d&&(d=b,e=a,b=-d|0,a=0!==d?~e:-e|0),Cf(ff(),(new Xb).ha(b,a));var k=f!==h?f>h?1:-1:xf(Ef(),a.Cb,b.Cb,f);if(0===k)return e===d?ff().un:ff().Lx;if(-1===k)return ff().fk;var k=1+(f-h|0)|0,n=la(Xa(db),[k]),d=e===d?1:-1;1===h?yba(sf(),n,a.Cb,f,b.Cb.n[0]):xba(sf(),n,
+k,a.Cb,f,b.Cb,h);d=cf(new df,d,k,n);ef(d);return d}c.o=function(a){if(a&&a.$classData&&a.$classData.m.nI){var b;if(b=this.Wb===a.Wb&&this.cc===a.cc){a=a.Cb;b=(new H_).P(0,this.cc,1);b=Ye(new Ze,b,0,b.sa());for(var d=!0;d&&b.ra();)d=b.ka()|0,d=this.Cb.n[d]===a.n[d];b=d}a=b}else a=!1;return a};c.l=function(){return of(qf(),this)};c.ha=function(a,b){df.prototype.b.call(this);this.Wb=a;this.cc=1;this.Cb=Bf(Af(),b,(new J).j([]));return this};
+function hf(a){if(-2===a.My){if(0===a.Wb)var b=-1;else for(b=0;0===a.Cb.n[b];)b=1+b|0;a.My=b}return a.My}function mwa(a){return 0>a.Wb?cf(new df,1,a.cc,a.Cb):a}
+function C_(a,b){var d=b.Wb;if(0===d)throw(new YT).c("BigInteger divide by zero");var e=b.cc;b=b.Cb;if(1===e){sf();b=b.n[0];var f=a.Cb,h=a.cc,e=a.Wb;1===h?(f=f.n[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=$e(new We,Cf(ff(),(new Xb).ha(a,h)),Cf(ff(),(new Xb).ha(b,f)))):(d=e===d?1:-1,a=la(Xa(db),[h]),b=yba(0,a,f,h,b),b=Bf(Af(),b,(new J).j([])),d=cf(new df,d,h,a),e=cf(new df,e,1,b),ef(d),ef(e),d=$e(new We,d,e));return d}h=
+a.Cb;f=a.cc;if(0>(f!==e?f>e?1:-1:xf(Ef(),h,b,f)))return $e(new We,ff().fk,a);a=a.Wb;var k=1+(f-e|0)|0,d=a===d?1:-1,n=la(Xa(db),[k]);b=xba(sf(),n,k,h,f,b,e);d=cf(new df,d,k,n);e=cf(new df,a,e,b);ef(d);ef(e);return $e(new We,d,e)}function ef(a){a:for(;;){if(0<a.cc&&(a.cc=-1+a.cc|0,0===a.Cb.n[a.cc]))continue a;break}0===a.Cb.n[a.cc]&&(a.Wb=0);a.cc=1+a.cc|0}
+function B_(a,b){var d=b>>5;if(0===b)return 0!==(1&a.Cb.n[0]);if(0>b)throw(new YT).c("Negative bit address");if(d>=a.cc)return 0>a.Wb;if(0>a.Wb&&d<hf(a))return!1;var e=a.Cb.n[d];0>a.Wb&&(e=hf(a)===d?-e|0:~e);return 0!==(e&1<<(31&b))}function G_(a){if(0===a.Wb)return-1;var b=hf(a);a=a.Cb.n[b];return(b<<5)+(0===a?32:31-ga(a&(-a|0))|0)|0}function zba(a){return 0===a.Wb?a:cf(new df,-a.Wb|0,a.cc,a.Cb)}function cf(a,b,d,e){df.prototype.b.call(a);a.Wb=b;a.cc=d;a.Cb=e;return a}
+function lwa(a){if(0!==a.Wb){kf();var b=a.cc,d=1+b|0,e=la(Xa(db),[d]);sba(0,e,a.Cb,b);a=cf(new df,a.Wb,d,e);ef(a)}return a}
+c.Jd=function(a,b){df.prototype.b.call(this);ff();if(null===a)throw(new Ce).b();if(2>b||36<b)throw(new BY).c("Radix out of range");if(null===a)throw(new Ce).b();if(""===a)throw(new BY).c("Zero length BigInteger");if(""===a||"+"===a||"-"===a)throw(new BY).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 n=k;;){var r=65535&(a.charCodeAt(n)|
+0);if(43===r||45===r)throw(new BY).c("Illegal embedded sign character");if(n===h)break;n=1+n|0}var h=qf().LH.n[b],n=f/h|0,y=f%h|0;0!==y&&(n=1+n|0);f=la(Xa(db),[n]);n=qf().wH.n[-2+b|0];r=0;for(y=k+(0===y?h:y)|0;k<d;){var E=gi(ei(),a.substring(k,y),b),k=Qf(tf(),f,f,r,n);Ef();for(var Q=f,R=r,da=E,E=0;0!==da&&E<R;){var ma=da,da=ma+Q.n[E]|0,ma=(-2147483648^da)<(-2147483648^ma)?1:0;Q.n[E]=da;da=ma;E=1+E|0}k=k+da|0;f.n[r]=k;r=1+r|0;k=y;y=k+h|0}this.Wb=e;this.cc=r;this.Cb=f;ef(this);return this};
+c.r=function(){if(0===this.Lh){var a=this.cc,b=-1+a|0;if(!(0>=a))for(a=0;;){var d=a;this.Lh=ea(33,this.Lh)+this.Cb.n[d]|0;if(a===b)break;a=1+a|0}this.Lh=ea(this.Lh,this.Wb)}return this.Lh};c.c=function(a){df.prototype.Jd.call(this,a,10);return this};function Sf(a,b){return 0===b||0===a.Wb?a:0<b?tba(kf(),a,b):uba(kf(),a,-b|0)}c.Ti=function(){return ea(this.Wb,this.Cb.n[0])};function Of(a,b){return 0===b.Wb||0===a.Wb?ff().fk:Pf(tf(),a,b)}
+function msa(a,b,d){df.prototype.b.call(a);a.Wb=b;b=d.oa;0===b?(a.cc=1,a.Cb=Bf(Af(),d.ia,(new J).j([]))):(a.cc=2,a.Cb=Bf(Af(),d.ia,(new J).j([b])));return a}function Rf(a,b){return 0===b||0===a.Wb?a:0<b?uba(kf(),a,b):tba(kf(),a,-b|0)}function E_(a,b){return a.Wb>b.Wb?1:a.Wb<b.Wb?-1:a.cc>b.cc?a.Wb:a.cc<b.cc?-b.Wb|0:ea(a.Wb,xf(Ef(),a.Cb,b.Cb,a.cc))}var Xe=g({nI:0},!1,"java.math.BigInteger",{nI:1,bl:1,d:1,h:1,Md:1});df.prototype.$classData=Xe;function dU(){CY.call(this)}dU.prototype=new DY;
+dU.prototype.constructor=dU;dU.prototype.Jd=function(a,b){CY.prototype.Jd.call(this,a,b);return this};var nsa=g({b0:0},!1,"java.math.RoundingMode",{b0:1,Tn:1,d:1,Md:1,h:1});dU.prototype.$classData=nsa;function Db(){this.ma=this.pe=null;this.Tj=!1}Db.prototype=new l;Db.prototype.constructor=Db;c=Db.prototype;c.wc=function(){return this.ma};c.l=function(){return"["+this.pe.ng.Ab(" ")+"]"};c.oo=function(){return uj(A())};function Cb(a,b,d,e){a.pe=b;a.ma=d;a.Tj=e;return a}
+c.Au=function(){return Cb(new Db,this.pe,this.ma,this.Tj)};function zb(a){return!!(a&&a.$classData&&a.$classData.m.yI)}c.$classData=g({yI:0},!1,"org.nlogo.core.CommandBlock",{yI:1,d:1,xx:1,kq:1,No:1});function Gb(){this.ma=this.Al=null}Gb.prototype=new l;Gb.prototype.constructor=Gb;c=Gb.prototype;c.wc=function(){return this.ma};c.l=function(){return"["+this.Al.l()+"]"};c.oo=function(){var a=this.Al.oo();return Xi(A())===a?xj(A()):M(A())===a?yj(A()):Rm(A(),a,Xi(A()))||Rm(A(),a,M(A()))?vj(A()):wj(A())};
+function Eb(a,b,d){a.Al=b;a.ma=d;return a}c.Au=function(a){return Eb(new Gb,this.Al,a)};function Ab(a){return!!(a&&a.$classData&&a.$classData.m.OI)}c.$classData=g({OI:0},!1,"org.nlogo.core.ReporterBlock",{OI:1,d:1,xx:1,kq:1,No:1});function Jb(){this.ma=this.wa=this.Gd=null}Jb.prototype=new l;Jb.prototype.constructor=Jb;c=Jb.prototype;c.Hy=function(){return this.Gd};c.wc=function(){return this.ma};c.l=function(){return this.Gd.l()+"["+this.wa.Ab(", ")+"]"};
+c.Cj=function(a,b,d){this.Gd=a;this.wa=b;this.ma=d;return this};function Mda(a,b){var d=a.Gd,e=b.Wn();e.z()?e=C():(e=e.R(),e=(new H).i(e.wc().Ya));e=(e.z()?a.ma.Ya:e.R())|0;return(new Jb).Cj(d,b,Xl(new Yl,a.ma.Ua,e,a.ma.bb))}function Lda(a,b){var d=new Jb;Jb.prototype.Cj.call(d,a,G(t(),u()),b);return d}c.$classData=g({h1:0},!1,"org.nlogo.core.Statement",{h1:1,d:1,pI:1,kq:1,No:1});function I_(){this.p=this.g=this.f=null;this.a=0}I_.prototype=new l;I_.prototype.constructor=I_;function J_(){}
+c=J_.prototype=I_.prototype;c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/output.scala: 6");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/output.scala: 6");return this.g};function K_(){this.p=this.g=this.f=this.wa=null;this.a=0}K_.prototype=new l;K_.prototype.constructor=K_;function L_(){}c=L_.prototype=K_.prototype;c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.G=function(){return qc(A(),this.wa.wb(),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/plotting.scala: 10");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.Ea=function(a){this.wa=a;L(this);return this};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/plotting.scala: 10");return this.g};function M_(){this.jd=0;this.p=this.g=this.f=this.wa=null;this.a=0}M_.prototype=new l;M_.prototype.constructor=M_;function N_(){}c=N_.prototype=M_.prototype;c.Tq=function(a,b){this.jd=a;this.wa=b;L(this);return this};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.G=function(){var a=this.wa.wb(),b=this.jd,d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/plotting.scala: 50");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/plotting.scala: 50");return this.g};function O_(){this.p=this.g=this.f=null;this.a=0}O_.prototype=new l;O_.prototype.constructor=O_;function swa(){}c=swa.prototype=O_.prototype;c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.G=function(){var a=A();x();var b=[mr()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/output.scala: 12");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/output.scala: 12");return this.g};function wN(){this.yF=this.zF=this.LW=null;this.a=0}wN.prototype=new l;wN.prototype.constructor=wN;c=wN.prototype;c.Ig=function(a,b){pC(this,a,b)};c.jb=function(){return this};c.ka=function(){return this.co()};c.zn=function(){return zp(new xp,this)};c.Rg=function(){return this};c.z=function(){return!this.ra()};
+c.wb=function(){var a=x().s;return rC(this,a)};function twa(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/Tokenizer.scala: 68");return a.yF}c.Qc=function(a,b,d){return ec(this,a,b,d)};c.Ab=function(a){return ec(this,"",a,"")};c.l=function(){return nT(this)};c.ta=function(a){pT(this,a)};c.Ib=function(a,b){return Xk(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return rC(this,a)};c.Da=function(){return Fr(this)};
+c.ae=function(){var a=P_().s;return rC(this,a)};c.co=function(){var a=this.LW.yD(twa(this));if(null===a)throw(new q).i(a);var b=a.ja(),a=a.na();this.zF=(new H).i(b);this.a=(1|this.a)<<24>>24;this.yF=a;this.a=(2|this.a)<<24>>24;return(new w).e(b,a)};c.ra=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/Tokenizer.scala: 67");return!this.zF.ab(Zl())};c.Zf=function(){return ec(this,"","","")};
+function soa(a,b,d){a.LW=b;a.zF=C();a.a=(1|a.a)<<24>>24;a.yF=d;a.a=(2|a.a)<<24>>24;return a}c.Oc=function(){return Vv(this)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return Vv(this)};c.md=function(){var a=Yk(),a=Zk(a);return rC(this,a)};c.Ff=function(a,b){return Xk(this,a,b)};c.He=function(a,b,d){rT(this,a,b,d)};c.Ng=function(){return!1};c.lp=function(a){return sT(this,a)};c.De=function(){for(var a=fc(new gc,hc());this.ra();){var b=this.co();ic(a,b)}return a.Va};
+c.og=function(a){return wC(this,a)};c.Ce=function(a){return xC(this,a)};c.Ye=function(){return nd(this)};c.$classData=g({s2:0},!1,"org.nlogo.lex.Tokenizer$TokenLexIterator",{s2:1,d:1,Rc:1,Ga:1,Fa:1});function XN(){this.Qw=null}XN.prototype=new qta;XN.prototype.constructor=XN;XN.prototype.y=function(a){return this.tf(a)};XN.prototype.HE=function(a){this.Qw=a;return this};
+XN.prototype.tf=function(a){var b=Zf();a=a.W;a=yea(this.Qw).gc(a.toUpperCase());a.z()?a=C():(a=a.R(),a=(new H).i(se(a)));if(a.z())return C();a=a.R();return(new H).i((new w).e(b,a))};XN.prototype.$classData=g({I2:0},!1,"org.nlogo.parse.CommandHandler",{I2:1,e3:1,d:1,ms:1,fa:1});function mn(){NS.call(this);this.Pw=null}mn.prototype=new FY;mn.prototype.constructor=mn;mn.prototype.Wf=function(a){this.Pw=a;NS.prototype.ic.call(this,null,null,0,!0);return this};
+mn.prototype.$classData=g({kC:0},!1,"org.nlogo.parse.ExpressionParser$MissingPrefixException",{kC:1,Wc:1,tc:1,d:1,h:1});function Zm(){NS.call(this);this.Pw=null}Zm.prototype=new FY;Zm.prototype.constructor=Zm;Zm.prototype.Wf=function(a){this.Pw=a;NS.prototype.ic.call(this,null,null,0,!0);return this};Zm.prototype.$classData=g({lC:0},!1,"org.nlogo.parse.ExpressionParser$UnexpectedTokenException",{lC:1,Wc:1,tc:1,d:1,h:1});function YN(){this.Qw=null}YN.prototype=new qta;YN.prototype.constructor=YN;
+YN.prototype.y=function(a){return this.tf(a)};YN.prototype.HE=function(a){this.Qw=a;return this};YN.prototype.tf=function(a){var b=$f();a=a.W;a=zea(this.Qw).gc(a.toUpperCase());a.z()?a=C():(a=a.R(),a=(new H).i(se(a)));if(a.z())return C();a=a.R();return(new H).i((new w).e(b,a))};YN.prototype.$classData=g({h3:0},!1,"org.nlogo.parse.ReporterHandler",{h3:1,e3:1,d:1,ms:1,fa:1});function yp(){this.OG=this.v_=this.zi=null;this.a=!1}yp.prototype=new l;yp.prototype.constructor=yp;c=yp.prototype;
+c.Ig=function(a,b){pC(this,a,b)};c.jb=function(){return this};c.ka=function(){return uwa(this)};c.zn=function(){return zp(new xp,this)};c.Rg=function(){return this};c.z=function(){return!this.ra()};c.wb=function(){var a=x().s;return rC(this,a)};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.Ab=function(a){return ec(this,"",a,"")};c.l=function(){return nT(this)};c.ta=function(a){pT(this,a)};c.Ib=function(a,b){return Xk(this,a,b)};
+function uwa(a){var b=a.zi.ka(),b=a.v_.u_(b,vwa(a));if(null===b)throw(new q).i(b);var d=b.ja();a.OG=b.na();a.a=!0;return d}c.pg=function(){Mj();var a=Nj().pc;return rC(this,a)};c.Da=function(){return Fr(this)};c.ae=function(){var a=P_().s;return rC(this,a)};function vwa(a){if(!a.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/TransformableTokenStream.scala: 13");return a.OG}c.ra=function(){return this.zi.ra()};c.Zf=function(){return ec(this,"","","")};
+c.Oc=function(){return Vv(this)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return Vv(this)};c.md=function(){var a=Yk(),a=Zk(a);return rC(this,a)};c.Ff=function(a,b){return Xk(this,a,b)};c.He=function(a,b,d){rT(this,a,b,d)};c.Ng=function(){return!1};c.lp=function(a){return sT(this,a)};c.De=function(){for(var a=fc(new gc,hc());this.ra();){var b=uwa(this);ic(a,b)}return a.Va};c.og=function(a){return wC(this,a)};c.Ce=function(a){return xC(this,a)};c.Ye=function(){return nd(this)};
+c.$classData=g({j3:0},!1,"org.nlogo.parse.SimpleTransformIterator",{j3:1,d:1,Rc:1,Ga:1,Fa:1});function Q_(){this.fo=this.go=this.ho=this.fw=null;this.a=0}Q_.prototype=new l;Q_.prototype.constructor=Q_;c=Q_.prototype;c.b=function(){R_=this;var a=(new Be).b();if(a.Pa)a=a.tb;else{if(null===a)throw(new Ce).b();a=a.Pa?a.tb:De(a,(new vV).b())}this.fw=a;this.a=(2|this.a)<<24>>24;return this};c.Uv=function(){null===Up().ho&&null===Up().ho&&(Up().ho=(new S_).zp(this));return Up().ho};
+c.IF=function(){null===Up().fo&&null===Up().fo&&(Up().fo=(new T_).zp(this));return Up().fo};c.JF=function(){null===Up().go&&null===Up().go&&(Up().go=(new U_).zp(this));return Up().go};c.iz=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 84");return this.fw};c.$classData=g({f4:0},!1,"org.nlogo.tortoise.compiler.CompilationRequest$",{f4:1,d:1,y5:1,k:1,h:1});var R_=void 0;
+function Up(){R_||(R_=(new Q_).b());return R_}function V_(){this.hm=null;this.a=!1}V_.prototype=new l;V_.prototype.constructor=V_;c=V_.prototype;c.b=function(){W_=this;var a=mq();null===mq().Wz&&null===mq().Wz&&(mq().Wz=(new X_).tk(a));this.hm=mq().Wz;this.a=!0;return this};c.y=function(a){return SP(this,a)};c.Ia=function(a){return SP(this,a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ta=function(a){return SP(this,a)};c.Ja=function(a){return!!SP(this,a)};
+c.Yz=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 81");return this.hm};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return TP(this,b)};c.$classData=g({g4:0},!1,"org.nlogo.tortoise.compiler.CompilationRequest$optionalSeqReader$",{g4:1,d:1,CC:1,kc:1,fa:1});var W_=void 0;function Dta(){W_||(W_=(new V_).b());return W_}function Y_(){this.fo=this.go=this.ho=this.fw=null;this.a=0}Y_.prototype=new l;
+Y_.prototype.constructor=Y_;c=Y_.prototype;c.b=function(){Z_=this;var a=(new Be).b();if(a.Pa)a=a.tb;else{if(null===a)throw(new Ce).b();a=a.Pa?a.tb:De(a,(new MV).b())}this.fw=a;this.a=(1|this.a)<<24>>24;return this};c.Uv=function(){null===Gp().ho&&null===Gp().ho&&(Gp().ho=(new S_).zp(this));return Gp().ho};c.IF=function(){null===Gp().fo&&null===Gp().fo&&(Gp().fo=(new T_).zp(this));return Gp().fo};c.JF=function(){null===Gp().go&&null===Gp().go&&(Gp().go=(new U_).zp(this));return Gp().go};
+c.iz=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 52");return this.fw};c.$classData=g({A4:0},!1,"org.nlogo.tortoise.compiler.ExportRequest$",{A4:1,d:1,y5:1,k:1,h:1});var Z_=void 0;function Gp(){Z_||(Z_=(new Y_).b());return Z_}function WO(){this.p=this.g=this.f=null;this.a=0}WO.prototype=new l;WO.prototype.constructor=WO;c=WO.prototype;c.b=function(){L(this);return this};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){x();var a=[$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 149");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 149");return this.g};c.$classData=g({rC:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_anyother",{rC:1,d:1,aa:1,A:1,E:1});function XO(){this.p=this.g=this.f=null;this.a=0}XO.prototype=new l;XO.prototype.constructor=XO;c=XO.prototype;c.b=function(){L(this);return this};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){x();var a=[$i(A()),vj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 234");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 234");return this.g};c.$classData=g({yR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_anyotherwith",{yR:1,d:1,aa:1,A:1,E:1});function YO(){this.p=this.g=this.f=null;this.a=0}YO.prototype=new l;YO.prototype.constructor=YO;c=YO.prototype;c.b=function(){L(this);return this};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){x();var a=[$i(A()),vj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 249");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 249");return this.g};c.$classData=g({zR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_anywith",{zR:1,d:1,aa:1,A:1,E:1});function bP(){this.p=this.g=this.f=null;this.a=0}bP.prototype=new l;bP.prototype.constructor=bP;c=bP.prototype;c.b=function(){L(this);return this};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){x();var a=[$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 164");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 164");return this.g};c.$classData=g({sC:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_countother",{sC:1,d:1,aa:1,A:1,E:1});function cP(){this.p=this.g=this.f=null;this.a=0}cP.prototype=new l;cP.prototype.constructor=cP;c=cP.prototype;c.b=function(){L(this);return this};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){x();var a=[$i(A()),vj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 179");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 179");return this.g};c.$classData=g({AR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_countotherwith",{AR:1,d:1,aa:1,A:1,E:1});function dP(){this.p=this.g=this.f=this.la=null;this.a=0}dP.prototype=new l;dP.prototype.constructor=dP;c=dP.prototype;
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 94");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 94");return this.g};c.$classData=g({tC:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_crofast",{tC:1,d:1,pa:1,A:1,E:1});function eP(){this.p=this.g=this.f=this.la=null;this.a=0}eP.prototype=new l;eP.prototype.constructor=eP;c=eP.prototype;c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 79");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 79");return this.g};c.$classData=g({uC:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_crtfast",{uC:1,d:1,pa:1,A:1,E:1});function hP(){this.p=this.g=this.f=null;this.a=0}hP.prototype=new l;hP.prototype.constructor=hP;c=hP.prototype;c.b=function(){L(this);return this};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 34");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 34");return this.g};c.$classData=g({vC:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_fdlessthan1",{vC:1,d:1,pa:1,A:1,E:1});function gP(){this.p=this.g=this.f=null;this.a=0}gP.prototype=new l;gP.prototype.constructor=gP;c=gP.prototype;c.b=function(){L(this);return this};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 20");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 20");return this.g};c.$classData=g({wC:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_fdone",{wC:1,d:1,pa:1,A:1,E:1});function iP(){this.p=this.g=this.f=this.la=null;this.a=0}iP.prototype=new l;iP.prototype.constructor=iP;c=iP.prototype;c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 49");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 49");return this.g};c.$classData=g({BR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_hatchfast",{BR:1,d:1,pa:1,A:1,E:1});function RV(){this.p=this.g=this.f=this.tl=null;this.a=0}RV.prototype=new l;RV.prototype.constructor=RV;c=RV.prototype;c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.G=function(){x();var a=[$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 341");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.c=function(a){this.tl=a;L(this);return this};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 341");return this.g};c.$classData=g({CR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_nsum",{CR:1,d:1,aa:1,A:1,E:1});function PV(){this.p=this.g=this.f=this.tl=null;this.a=0}PV.prototype=new l;PV.prototype.constructor=PV;c=PV.prototype;c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.G=function(){x();var a=[$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 351");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.c=function(a){this.tl=a;L(this);return this};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 351");return this.g};c.$classData=g({DR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_nsum4",{DR:1,d:1,aa:1,A:1,E:1});function lP(){this.p=this.g=this.f=null;this.a=0}lP.prototype=new l;lP.prototype.constructor=lP;c=lP.prototype;c.b=function(){L(this);return this};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){x();var a=[$i(A()),vj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Vi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 194");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 194");return this.g};c.$classData=g({ER:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_oneofwith",{ER:1,d:1,aa:1,A:1,E:1});function mP(){this.p=this.g=this.f=null;this.a=0}mP.prototype=new l;mP.prototype.constructor=mP;c=mP.prototype;c.b=function(){L(this);return this};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){x();var a=[$i(A()),vj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=$i(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 209");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 209");return this.g};function ut(a){return!!(a&&a.$classData&&a.$classData.m.FR)}c.$classData=g({FR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_otherwith",{FR:1,d:1,aa:1,A:1,E:1});function $_(){this.p=this.g=this.f=null;this.a=0}$_.prototype=new l;$_.prototype.constructor=$_;
+function a0(){}c=a0.prototype=$_.prototype;c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Vi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 109");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 109");return this.g};function DP(){this.p=this.g=this.f=null;this.a=0}DP.prototype=new l;
+DP.prototype.constructor=DP;c=DP.prototype;c.b=function(){L(this);return this};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){var a=nj(A());x();var b=[M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,b,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 361");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 361");return this.g};
+c.$classData=g({xC:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchcol",{xC:1,d:1,aa:1,A:1,E:1});function EP(){this.p=this.g=this.f=null;this.a=0}EP.prototype=new l;EP.prototype.constructor=EP;c=EP.prototype;c.b=function(){L(this);return this};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){var a=nj(A());x();var b=[M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,b,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 366");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 366");return this.g};
+c.$classData=g({yC:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchrow",{yC:1,d:1,aa:1,A:1,E:1});function xP(){this.p=this.g=this.f=this.la=null;this.a=0}xP.prototype=new l;xP.prototype.constructor=xP;c=xP.prototype;c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"--P-",e,!1,!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 64");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 64");return this.g};
+c.$classData=g({zC:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_sproutfast",{zC:1,d:1,pa:1,A:1,E:1});function T_(){this.hm=null;this.a=!1}T_.prototype=new l;T_.prototype.constructor=T_;c=T_.prototype;c.y=function(a){return SP(this,a)};c.Ia=function(a){return SP(this,a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ta=function(a){return SP(this,a)};c.Ja=function(a){return!!SP(this,a)};
+c.Yz=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 47");return this.hm};c.zp=function(){this.hm=m(new p,function(){return function(a){var b=iv();if(0===(32&b.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 89");return nha(b.MW,a)}}(this));this.a=!0;return this};c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){return TP(this,b)};c.$classData=g({z5:0},!1,"org.nlogo.tortoise.compiler.RequestSharedImplicits$optionLinkShapes$",{z5:1,d:1,CC:1,kc:1,fa:1});function U_(){this.hm=null;this.a=!1}U_.prototype=new l;U_.prototype.constructor=U_;c=U_.prototype;c.y=function(a){return SP(this,a)};c.Ia=function(a){return SP(this,a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ta=function(a){return SP(this,a)};c.Ja=function(a){return!!SP(this,a)};
+c.Yz=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 43");return this.hm};c.zp=function(){this.hm=m(new p,function(){return function(a){var b=iv();if(0===(16&b.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 81");return nha(b.J_,a)}}(this));this.a=!0;return this};c.za=function(a){return rb(this,a)};
+c.Fc=function(a,b){return TP(this,b)};c.$classData=g({A5:0},!1,"org.nlogo.tortoise.compiler.RequestSharedImplicits$optionVectorShapes$",{A5:1,d:1,CC:1,kc:1,fa:1});function S_(){this.hm=null;this.a=!1}S_.prototype=new l;S_.prototype.constructor=S_;c=S_.prototype;c.y=function(a){return SP(this,a)};c.Ia=function(a){return SP(this,a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ta=function(a){return SP(this,a)};c.Ja=function(a){return!!SP(this,a)};
+c.Yz=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 39");return this.hm};c.zp=function(){this.hm=lq(mq());this.a=!0;return this};c.za=function(a){return rb(this,a)};c.Fc=function(a,b){return TP(this,b)};c.$classData=g({B5:0},!1,"org.nlogo.tortoise.compiler.RequestSharedImplicits$optionalStringReader$",{B5:1,d:1,CC:1,kc:1,fa:1});function b0(){this.Kg=this.im=this.ki=null;this.a=0}b0.prototype=new l;
+b0.prototype.constructor=b0;c=b0.prototype;c.Gq=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 78");return this.Kg};c.Tw=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 77");return this.im};
+function wwa(a){var b=new b0;b.ki=a;b.im="circle";b.a=(1|b.a)<<24>>24;var d=(new vu).hb(a.Kk),d=(new w).e("x",d),e=(new vu).hb(a.Lk),e=(new w).e("y",e);a=(new vu).hb(a.TD());a=[d,e,(new w).e("diam",a)];for(var d=fc(new gc,Cu()),e=0,f=a.length|0;e<f;)ic(d,a[e]),e=1+e|0;b.Kg=(new qu).bc(d.Va);b.a=(2|b.a)<<24>>24;return b}c.rf=function(){return pu(this)};c.yq=function(){return GP(this)};
+c.$classData=g({b6:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$CircleConverter",{b6:1,d:1,Bx:1,ns:1,mm:1});function c0(){this.Kg=this.im=this.ki=null;this.a=0}c0.prototype=new l;c0.prototype.constructor=c0;c=c0.prototype;c.Gq=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 87");return this.Kg};
+function xwa(a){var b=new c0;b.ki=a;b.im="line";b.a=(1|b.a)<<24>>24;var d=(new vu).hb(a.zw().ni()),d=(new w).e("x1",d),e=(new vu).hb(a.zw().Gc()),e=(new w).e("y1",e),f=(new vu).hb(a.Uu().ni()),f=(new w).e("x2",f);a=(new vu).hb(a.Uu().Gc());a=[d,e,f,(new w).e("y2",a)];d=fc(new gc,Cu());e=0;for(f=a.length|0;e<f;)ic(d,a[e]),e=1+e|0;b.Kg=(new qu).bc(d.Va);b.a=(2|b.a)<<24>>24;return b}
+c.Tw=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 86");return this.im};c.rf=function(){return pu(this)};c.yq=function(){return GP(this)};c.$classData=g({c6:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$LineConverter",{c6:1,d:1,Bx:1,ns:1,mm:1});function d0(){this.Kg=this.ki=null;this.a=!1}d0.prototype=new l;d0.prototype.constructor=d0;c=d0.prototype;
+c.Gq=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 96");return this.Kg};function ywa(a){var b=new d0;b.ki=a;a=u();b.Kg=(new qu).bc(Wg(Xg(),a));b.a=!0;return b}c.Tw=function(){return nq(oa(this.ki)).toLowerCase()};c.rf=function(){return pu(this)};c.yq=function(){return GP(this)};
+c.$classData=g({d6:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$OtherConverter",{d6:1,d:1,Bx:1,ns:1,mm:1});function e0(){this.Kg=this.im=this.ki=null;this.a=0}e0.prototype=new l;e0.prototype.constructor=e0;c=e0.prototype;c.Gq=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 60");return this.Kg};
+function zwa(a){var b=new e0;b.ki=a;b.im="polygon";b.a=(1|b.a)<<24>>24;var d=Xba(a),e=Awa(),f=t(),d=(new zu).Ea(d.ya(e,f.s)),d=(new w).e("xcors",d);a=Wba(a);e=Awa();f=t();a=(new zu).Ea(a.ya(e,f.s));a=[d,(new w).e("ycors",a)];d=fc(new gc,Cu());e=0;for(f=a.length|0;e<f;)ic(d,a[e]),e=1+e|0;b.Kg=(new qu).bc(d.Va);b.a=(2|b.a)<<24>>24;return b}
+c.Tw=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 59");return this.im};c.rf=function(){return pu(this)};c.yq=function(){return GP(this)};c.$classData=g({e6:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$PolygonConverter",{e6:1,d:1,Bx:1,ns:1,mm:1});function f0(){this.Kg=this.im=this.ki=null;this.a=0}f0.prototype=new l;f0.prototype.constructor=f0;c=f0.prototype;
+c.Gq=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 68");return this.Kg};c.Tw=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 67");return this.im};
+function Bwa(a){var b=new f0;b.ki=a;b.im="rectangle";b.a=(1|b.a)<<24>>24;var d=(new vu).hb(a.Ww().ni()),d=(new w).e("xmin",d),e=(new vu).hb(a.Ww().Gc()),e=(new w).e("ymin",e),f=(new vu).hb(a.Pv().ni()),f=(new w).e("xmax",f);a=(new vu).hb(a.Pv().Gc());a=[d,e,f,(new w).e("ymax",a)];d=fc(new gc,Cu());e=0;for(f=a.length|0;e<f;)ic(d,a[e]),e=1+e|0;b.Kg=(new qu).bc(d.Va);b.a=(2|b.a)<<24>>24;return b}c.rf=function(){return pu(this)};c.yq=function(){return GP(this)};
+c.$classData=g({f6:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$RectangleConverter",{f6:1,d:1,Bx:1,ns:1,mm:1});function g0(){}g0.prototype=new nW;g0.prototype.constructor=g0;g0.prototype.b=function(){return this};g0.prototype.Jp=function(a){return"Expected an array of ints, found "+a};g0.prototype.ep=function(a){if(Du(a))return a=a.zi,fq(),oq().y(a);fq();a="Expected all coordinates to be ints, found "+a;return gq(Vp(),a)};
+g0.prototype.$classData=g({m6:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$tortoiseJs2SeqInt$",{m6:1,mq:1,d:1,kc:1,fa:1});var Cwa=void 0;function Pta(){Cwa||(Cwa=(new g0).b());return Cwa}function OP(){pW.call(this)}OP.prototype=new Tta;OP.prototype.constructor=OP;OP.prototype.GU=function(a){fq();return oq().y(a)};OP.prototype.tk=function(a){this.UG=OB();if(null===a)throw pg(qg(),null);this.da=a;return this};OP.prototype.HU=function(a){fq();return oq().y(a)};
+OP.prototype.$classData=g({x6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJs2Double$",{x6:1,v6:1,d:1,kc:1,fa:1});function MP(){pW.call(this)}MP.prototype=new Tta;MP.prototype.constructor=MP;MP.prototype.GU=function(a){if(tu(uu(),a))return fq(),a=Oa(a),oq().y(a);fq();a="The value "+a+" could not be converted to an Int";return gq(Vp(),a)};MP.prototype.tk=function(a){this.UG=NB();if(null===a)throw pg(qg(),null);this.da=a;return this};MP.prototype.HU=function(a){fq();return oq().y(a)};
+MP.prototype.$classData=g({y6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJs2Int$",{y6:1,v6:1,d:1,kc:1,fa:1});function X_(){this.Qa=null}X_.prototype=new nW;X_.prototype.constructor=X_;X_.prototype.Jp=function(a){return"expected an array of strings, found "+a};X_.prototype.tk=function(a){if(null===a)throw pg(qg(),null);this.Qa=a;return this};X_.prototype.ep=function(a){return lq(this.Qa).Ta(a)};
+X_.prototype.$classData=g({C6:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJsAsStringSeq$",{C6:1,mq:1,d:1,kc:1,fa:1});function av(){}av.prototype=new nW;av.prototype.constructor=av;av.prototype.b=function(){return this};av.prototype.Jp=function(a){return"Expected vector shapes as array of objects, got "+a};av.prototype.ep=function(a){return dv(iv(),a)};
+av.prototype.$classData=g({L6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$$anon$2",{L6:1,mq:1,d:1,kc:1,fa:1});function bv(){}bv.prototype=new nW;bv.prototype.constructor=bv;bv.prototype.b=function(){return this};bv.prototype.Jp=function(a){return"Expected link shapes as array of objects, got "+a};bv.prototype.ep=function(a){iv();if(Ku(a)){var b=(new Be).b();a=(b.Pa?b.tb:iha(b)).Ra(a)}else fq(),a="Expected shape as json object, got "+a,a=gq(Vp(),a);return a};
+bv.prototype.$classData=g({M6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$$anon$3",{M6:1,mq:1,d:1,kc:1,fa:1});function h0(){this.Kg=this.ki=null;this.a=!1}h0.prototype=new l;h0.prototype.constructor=h0;h0.prototype.Gq=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 139");return this.Kg};
+function mha(a){var b=new h0;b.ki=a;var d=(new xu).c(a.we()),d=(new w).e("name",d),e=lha(new fv,a.yE()),e=pu(e),e=(new w).e("direction-indicator",e),f=(new w).e("curviness",(new wu).Bj(a.kk));a=a.BF();var h=m(new p,function(){return function(a){return(iv(),Dpa(a)).rf()}}(b)),k=t();a=(new zu).Ea(a.ya(h,k.s));d=[d,e,f,(new w).e("lines",a)];e=fc(new gc,Cu());f=0;for(a=d.length|0;f<a;)ic(e,d[f]),f=1+f|0;b.Kg=(new qu).bc(e.Va);b.a=!0;return b}h0.prototype.rf=function(){return pu(this)};
+h0.prototype.yq=function(){return aha()};h0.prototype.$classData=g({N6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$LinkShapeConverter",{N6:1,d:1,I6:1,ns:1,mm:1});function fv(){this.Kg=this.ki=null;this.a=!1}fv.prototype=new l;fv.prototype.constructor=fv;fv.prototype.Gq=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 130");return this.Kg};
+function lha(a,b){a.ki=b;var d=(new xu).c(b.we()),d=(new w).e("name",d),e=(new vu).hb(b.pk),e=(new w).e("editableColorIndex",e),f=(new yu).ud(b.UF()),f=(new w).e("rotate",f);b=b.Ah;var h=m(new p,function(){return function(a){iu||(iu=(new hu).b());return(a&&a.$classData&&a.$classData.m.KA?zwa(a):a&&a.$classData&&a.$classData.m.LA?Bwa(a):a&&a.$classData&&a.$classData.m.IA?wwa(a):a&&a.$classData&&a.$classData.m.JA?xwa(a):ywa(a)).rf()}}(a)),k=t();b=(new zu).Ea(b.ya(h,k.s).wb());d=[d,e,f,(new w).e("elements",
+b)];e=fc(new gc,Cu());f=0;for(b=d.length|0;f<b;)ic(e,d[f]),f=1+f|0;a.Kg=(new qu).bc(e.Va);a.a=!0;return a}fv.prototype.rf=function(){return pu(this)};fv.prototype.yq=function(){return aha()};fv.prototype.$classData=g({O6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$VectorShapeConverter",{O6:1,d:1,I6:1,ns:1,mm:1});function vW(){}vW.prototype=new nW;vW.prototype.constructor=vW;vW.prototype.b=function(){return this};vW.prototype.Jp=function(a){return a+" is not a valid shape element list"};
+vW.prototype.ep=function(a){a:{iu||(iu=(new hu).b());var b=(new jv).c("type");if(Ku(a)&&(b=a.eh.gc(b.va),!b.z()&&(b=b.R(),Fu(b)&&(b=b.Lc,ou||(ou=(new ju).b()),b=ou.QF().gc(b),!b.z())))){a=b.R().y(a);break a}fq();a+=" is not an Element";a=gq(Vp(),a)}return a};vW.prototype.$classData=g({S6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$tortoiseJs2ElementSeq$",{S6:1,mq:1,d:1,kc:1,fa:1});var Wta=void 0;function tW(){}tW.prototype=new nW;tW.prototype.constructor=tW;tW.prototype.b=function(){return this};
+tW.prototype.Jp=function(a){return a+" was not an array of floats"};tW.prototype.ep=function(a){a=NP().Ta(a);if(P(a))return(new Kp).i(fa(+a.ga));if(Hp(a))return a;throw(new q).i(a);};tW.prototype.$classData=g({T6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$tortoiseJs2FloatSeq$",{T6:1,mq:1,d:1,kc:1,fa:1});var Vta=void 0;function xW(){}xW.prototype=new nW;xW.prototype.constructor=xW;xW.prototype.b=function(){return this};
+xW.prototype.Jp=function(a){return"Expected link lines as array of objects, got "+a};xW.prototype.ep=function(a){iv();if(Ku(a)){var b=(new Be).b();if(b.Pa)b=b.tb;else{if(null===b)throw(new Ce).b();b=b.Pa?b.tb:De(b,(new sW).b())}a=b.Ra(a)}else fq(),a="Expected link line json, found: "+a,a=gq(Vp(),a);return a};xW.prototype.$classData=g({U6:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$tortoiseJs2LinkLineSeq$",{U6:1,mq:1,d:1,kc:1,fa:1});var Xta=void 0;function i0(){}i0.prototype=new nW;
+i0.prototype.constructor=i0;i0.prototype.b=function(){return this};i0.prototype.Jp=function(a){return"expected an array of Widgets, found "+a};i0.prototype.ep=function(a){Bua||(Bua=(new kX).b());return Bua.Ta(a)};i0.prototype.$classData=g({T7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$readWidgetsJson$",{T7:1,mq:1,d:1,kc:1,fa:1});var Dwa=void 0;function Cta(){Dwa||(Dwa=(new i0).b());return Dwa}function $W(){}$W.prototype=new l;$W.prototype.constructor=$W;c=$W.prototype;c.zc=function(a){return this.us(a)};
+c.b=function(){return this};c.y=function(a){return this.us(a)};c.Ia=function(a){return this.us(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!this.us(a)};c.us=function(a){return(new xu).c(na(a.R()))};c.za=function(a){return rb(this,a)};c.$classData=g({X7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$charOption2Json$",{X7:1,d:1,U7:1,Cc:1,fa:1});var wua=void 0;function fX(){qW.call(this)}fX.prototype=new Uta;fX.prototype.constructor=fX;
+fX.prototype.b=function(){qW.prototype.RV.call(this,WP(),Cua());return this};fX.prototype.$classData=g({Z7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$chooseables2TortoiseJs$",{Z7:1,D6:1,d:1,Cc:1,fa:1});var zua=void 0;function UW(){qW.call(this)}UW.prototype=new Uta;UW.prototype.constructor=UW;UW.prototype.b=function(){qW.prototype.RV.call(this,WP(),Hua());return this};UW.prototype.$classData=g({g8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$pens2TortoiseJs$",{g8:1,D6:1,d:1,Cc:1,fa:1});
+var tua=void 0;function j0(){}j0.prototype=new l;j0.prototype.constructor=j0;c=j0.prototype;c.zc=function(a){return(new xu).c(a.R())};c.b=function(){return this};c.y=function(a){return(new xu).c(a.R())};c.Ia=function(a){return(new xu).c(a.R())|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ja=function(a){return!!(new xu).c(a.R())};c.us=function(a){return(new xu).c(a.R())};c.za=function(a){return rb(this,a)};
+c.$classData=g({i8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$stringOption2Json$",{i8:1,d:1,U7:1,Cc:1,fa:1});var Ewa=void 0;function TW(){Ewa||(Ewa=(new j0).b());return Ewa}function Rw(){}Rw.prototype=new l;Rw.prototype.constructor=Rw;c=Rw.prototype;c.b=function(){return this};c.y=function(a){return Uw(a)};c.Ia=function(a){return Uw(a)|0};c.l=function(){return"\x3cfunction1\x3e"};function Uw(a){var b=new k0,d=RS(),e=(new l0).b();a=se(Nma(d,e).Sm).Xb(a);b.Uw=a;return b}c.Ja=function(a){return!!Uw(a)};
+c.za=function(a){return rb(this,a)};c.$classData=g({c9:0},!1,"play.api.libs.json.JsObject$",{c9:1,d:1,fa:1,k:1,h:1});var sia=void 0;function uw(){this.$j=null}uw.prototype=new gx;uw.prototype.constructor=uw;c=uw.prototype;c.o=function(a){return a&&a.$classData&&a.$classData.m.KC?this.$j===a.$j:!1};c.l=function(){return Jv((new Kv).Ea((new J).j(["NestedSuiteSelector(",")"])),(new J).j([this.$j]))};c.c=function(a){this.$j=a;if(null===a)throw(new Ce).c("suiteId was null");return this};
+c.r=function(){var a=this.$j;return Ha(Ia(),a)};c.$classData=g({KC:0},!1,"sbt.testing.NestedSuiteSelector",{KC:1,ps:1,d:1,k:1,h:1});function vw(){this.ak=this.$j=null}vw.prototype=new gx;vw.prototype.constructor=vw;c=vw.prototype;c.Kd=function(a,b){this.$j=a;this.ak=b;if(null===a)throw(new Ce).c("suiteId was null");if(null===b)throw(new Ce).c("testName was null");return this};c.o=function(a){return a&&a.$classData&&a.$classData.m.LC?this.$j===a.$j&&this.ak===a.ak:!1};
+c.l=function(){return Jv((new Kv).Ea((new J).j(["NestedTestSelector(",", ",")"])),(new J).j([this.$j,this.ak]))};c.r=function(){var a;a=this.$j;a=ea(31,17)+Ha(Ia(),a)|0;var b=this.ak;return a=ea(31,a)+Ha(Ia(),b)|0};c.$classData=g({LC:0},!1,"sbt.testing.NestedTestSelector",{LC:1,ps:1,d:1,k:1,h:1});function DX(){CY.call(this)}DX.prototype=new DY;DX.prototype.constructor=DX;DX.prototype.Jd=function(a,b){CY.prototype.Jd.call(this,a,b);return this};
+var Mua=g({p9:0},!1,"sbt.testing.Status",{p9:1,Tn:1,d:1,Md:1,h:1});DX.prototype.$classData=Mua;function sw(){}sw.prototype=new gx;sw.prototype.constructor=sw;c=sw.prototype;c.b=function(){return this};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.NC)};c.l=function(){return"SuiteSelector"};c.r=function(){return 29};c.$classData=g({NC:0},!1,"sbt.testing.SuiteSelector",{NC:1,ps:1,d:1,k:1,h:1});function tw(){this.ak=null}tw.prototype=new gx;tw.prototype.constructor=tw;c=tw.prototype;
+c.o=function(a){return a&&a.$classData&&a.$classData.m.OC?this.ak===a.ak:!1};c.l=function(){return Jv((new Kv).Ea((new J).j(["TestSelector(",")"])),(new J).j([this.ak]))};c.c=function(a){this.ak=a;if(null===a)throw(new Ce).c("testName was null");return this};c.r=function(){var a=this.ak;return Ha(Ia(),a)};c.$classData=g({OC:0},!1,"sbt.testing.TestSelector",{OC:1,ps:1,d:1,k:1,h:1});function ww(){this.gs=null}ww.prototype=new gx;ww.prototype.constructor=ww;c=ww.prototype;
+c.o=function(a){return a&&a.$classData&&a.$classData.m.PC?this.gs===a.gs:!1};c.l=function(){return Jv((new Kv).Ea((new J).j(["TestWildcardSelector(",")"])),(new J).j([this.gs]))};c.c=function(a){this.gs=a;if(null===a)throw(new Ce).c("testWildcard was null");return this};c.r=function(){var a=this.gs;return Ha(Ia(),a)};c.$classData=g({PC:0},!1,"sbt.testing.TestWildcardSelector",{PC:1,ps:1,d:1,k:1,h:1});function m0(){this.da=null}m0.prototype=new l;m0.prototype.constructor=m0;
+function jqa(a){var b=new m0;if(null===a)throw pg(qg(),null);b.da=a;return b}m0.prototype.$classData=g({w9:0},!1,"scalaz.Align$$anon$4",{w9:1,d:1,ppa:1,Qk:1,sj:1});function EX(){this.da=null}EX.prototype=new l;EX.prototype.constructor=EX;EX.prototype.KE=function(a){if(null===a)throw pg(qg(),null);this.da=a;return this};EX.prototype.$classData=g({B9:0},!1,"scalaz.Apply$$anon$6",{B9:1,d:1,rs:1,Qk:1,sj:1});function n0(){this.da=null}n0.prototype=new l;n0.prototype.constructor=n0;
+function Pua(a){var b=new n0;if(null===a)throw pg(qg(),null);b.da=a;return b}n0.prototype.$classData=g({N9:0},!1,"scalaz.Bitraverse$$anon$8",{N9:1,d:1,tpa:1,xca:1,wca:1});function o0(){this.da=null}o0.prototype=new l;o0.prototype.constructor=o0;function Fwa(a){var b=new o0;if(null===a)throw pg(qg(),null);b.da=a;return b}o0.prototype.$classData=g({Q9:0},!1,"scalaz.Choice$$anon$2",{Q9:1,d:1,upa:1,ZS:1,Ix:1});function p0(){this.da=null}p0.prototype=new l;p0.prototype.constructor=p0;
+function lqa(a){var b=new p0;if(null===a)throw pg(qg(),null);b.da=a;return b}p0.prototype.$classData=g({R9:0},!1,"scalaz.Cobind$$anon$2",{R9:1,d:1,yca:1,Qk:1,sj:1});function q0(){}q0.prototype=new Rua;q0.prototype.constructor=q0;function Gwa(){}Gwa.prototype=q0.prototype;function r0(){}r0.prototype=new Sua;r0.prototype.constructor=r0;function Hwa(){}Hwa.prototype=r0.prototype;function s0(){}s0.prototype=new Dia;s0.prototype.constructor=s0;
+s0.prototype.b=function(){ox.prototype.b.call(this);t0=this;(new OX).b();return this};function Tua(){var a=Xx();return(new Zx).Kn(m(new p,function(){return function(a){return a}}(a)))}s0.prototype.$classData=g({e$:0},!1,"scalaz.Endo$",{e$:1,fna:1,d:1,k:1,h:1});var t0=void 0;function Xx(){t0||(t0=(new s0).b());return t0}function px(){}px.prototype=new l;px.prototype.constructor=px;c=px.prototype;c.ME=function(){Pd(this);Od(this);Ed(this);return this};c.ro=function(){};c.so=function(){};c.yg=function(){};
+c.$classData=g({g$:0},!1,"scalaz.EndoInstances$$anon$1",{g$:1,d:1,Ro:1,Qo:1,Eg:1});function u0(){this.da=null}u0.prototype=new l;u0.prototype.constructor=u0;function pqa(a){var b=new u0;if(null===a)throw pg(qg(),null);b.da=a;return b}u0.prototype.$classData=g({i$:0},!1,"scalaz.Enum$$anon$3",{i$:1,d:1,ypa:1,Eca:1,$S:1});function v0(){}v0.prototype=new Uua;v0.prototype.constructor=v0;function Iwa(){}Iwa.prototype=v0.prototype;function w0(){}w0.prototype=new Wua;w0.prototype.constructor=w0;
+function Jwa(){}Jwa.prototype=w0.prototype;function x0(){this.da=null}x0.prototype=new l;x0.prototype.constructor=x0;function Kqa(a){var b=new x0;if(null===a)throw pg(qg(),null);b.da=a;return b}x0.prototype.$classData=g({K$:0},!1,"scalaz.IsEmpty$$anon$3",{K$:1,d:1,zpa:1,cD:1,Jx:1});function y0(){}y0.prototype=new Xua;y0.prototype.constructor=y0;function Kwa(){}Kwa.prototype=y0.prototype;function z0(){}z0.prototype=new Yua;z0.prototype.constructor=z0;function Lwa(){}Lwa.prototype=z0.prototype;
+z0.prototype.b=function(){Bd(new SR);return this};function A0(){}A0.prototype=new ava;A0.prototype.constructor=A0;function Mwa(){}Mwa.prototype=A0.prototype;function B0(){}B0.prototype=new Vua;B0.prototype.constructor=B0;function Nwa(){}Nwa.prototype=B0.prototype;function C0(){this.da=null}C0.prototype=new l;C0.prototype.constructor=C0;C0.prototype.$classData=g({taa:0},!1,"scalaz.SemiLattice$$anon$3",{taa:1,d:1,Epa:1,vca:1,eD:1});function D0(){}D0.prototype=new dva;D0.prototype.constructor=D0;
+function Owa(){}Owa.prototype=D0.prototype;function E0(){}E0.prototype=new eva;E0.prototype.constructor=E0;function Pwa(){}Pwa.prototype=E0.prototype;function de(){}de.prototype=new l;de.prototype.constructor=de;c=de.prototype;c.$d=function(a){return Hd(this,a)};c.jg=function(){};c.rh=function(a){return""+ +a};c.nh=function(){};c.zg=function(){};c.fe=function(){Dd(this);Qy(this);Nd(this);return this};c.$classData=g({fba:0},!1,"scalaz.std.AnyValInstances$$anon$14",{fba:1,d:1,Fg:1,qg:1,xh:1});
+function ee(){}ee.prototype=new l;ee.prototype.constructor=ee;c=ee.prototype;c.$d=function(a){return Hd(this,a)};c.jg=function(){};c.rh=function(a){return""+ +a};c.nh=function(){};c.zg=function(){};c.fe=function(){Dd(this);Qy(this);Nd(this);return this};c.$classData=g({gba:0},!1,"scalaz.std.AnyValInstances$$anon$15",{gba:1,d:1,Fg:1,qg:1,xh:1});function F0(){this.da=null}F0.prototype=new l;F0.prototype.constructor=F0;F0.prototype.Yg=function(a){if(null===a)throw pg(qg(),null);this.da=a;hx(this);return this};
+F0.prototype.Zp=function(){};F0.prototype.$classData=g({rba:0},!1,"scalaz.std.EitherInstances$$anon$14",{rba:1,d:1,PS:1,oq:1,pq:1});function G0(){this.da=null}G0.prototype=new l;G0.prototype.constructor=G0;G0.prototype.Yg=function(a){if(null===a)throw pg(qg(),null);this.da=a;hx(this);return this};G0.prototype.Zp=function(){};G0.prototype.$classData=g({sba:0},!1,"scalaz.std.EitherInstances$$anon$15",{sba:1,d:1,PS:1,oq:1,pq:1});function H0(){this.da=null}H0.prototype=new l;
+H0.prototype.constructor=H0;H0.prototype.Yg=function(a){if(null===a)throw pg(qg(),null);this.da=a;hx(this);return this};H0.prototype.Zp=function(){};H0.prototype.$classData=g({tba:0},!1,"scalaz.std.EitherInstances$$anon$16",{tba:1,d:1,PS:1,oq:1,pq:1});function I0(){this.Qy=null}I0.prototype=new l;I0.prototype.constructor=I0;I0.prototype.b=function(){J0=this;this.oG((new K0).nv(this));return this};I0.prototype.oG=function(a){this.Qy=a};
+I0.prototype.$classData=g({mca:0},!1,"scalaz.std.list$",{mca:1,d:1,Jba:1,Mba:1,Iba:1});var J0=void 0;function pq(){J0||(J0=(new I0).b());return J0}function L0(){}L0.prototype=new l;L0.prototype.constructor=L0;L0.prototype.b=function(){Qwa=this;this.pG(Rwa());return this};L0.prototype.pG=function(){};L0.prototype.$classData=g({tca:0},!1,"scalaz.std.option$",{tca:1,d:1,Oba:1,Qba:1,Nba:1});var Qwa=void 0;function Ru(){Qwa||(Qwa=(new L0).b())}function vg(a){return"string"===typeof a}
+var qa=g({kda:0},!1,"java.lang.String",{kda:1,d:1,h:1,Hv:1,Md:1},void 0,void 0,vg);function eD(){NS.call(this)}eD.prototype=new nva;eD.prototype.constructor=eD;eD.prototype.i=function(a){NS.prototype.ic.call(this,""+a,a&&a.$classData&&a.$classData.m.tc?a:null,0,!0);return this};eD.prototype.$classData=g({Dda:0},!1,"java.lang.AssertionError",{Dda:1,Lda:1,tc:1,d:1,h:1});
+var ta=g({Fda:0},!1,"java.lang.Byte",{Fda:1,bl:1,d:1,h:1,Md:1},void 0,void 0,function(a){return sa(a)}),za=g({Jda:0},!1,"java.lang.Double",{Jda:1,bl:1,d:1,h:1,Md:1},void 0,void 0,function(a){return"number"===typeof a}),ya=g({Mda:0},!1,"java.lang.Float",{Mda:1,bl:1,d:1,h:1,Md:1},void 0,void 0,function(a){return xa(a)}),wa=g({Oda:0},!1,"java.lang.Integer",{Oda:1,bl:1,d:1,h:1,Md:1},void 0,void 0,function(a){return Qa(a)});function Dla(a){return!!(a&&a.$classData&&a.$classData.m.Gra)}
+var Ea=g({Sda:0},!1,"java.lang.Long",{Sda:1,bl:1,d:1,h:1,Md:1},void 0,void 0,function(a){return Da(a)});function M0(){NS.call(this)}M0.prototype=new FY;M0.prototype.constructor=M0;function Swa(){}Swa.prototype=M0.prototype;function Ag(){NS.call(this)}Ag.prototype=new FY;Ag.prototype.constructor=Ag;function N0(){}N0.prototype=Ag.prototype;Ag.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};
+Ag.prototype.$classData=g({ge:0},!1,"java.lang.RuntimeException",{ge:1,Wc:1,tc:1,d:1,h:1});var va=g({$da:0},!1,"java.lang.Short",{$da:1,bl:1,d:1,h:1,Md:1},void 0,void 0,function(a){return ua(a)});function un(){this.Xo=null}un.prototype=new l;un.prototype.constructor=un;c=un.prototype;c.b=function(){un.prototype.rv.call(this,(new O0).b());return this};c.Bw=function(a,b){return this.Xo.Yb.substring(a,b)};c.YE=function(a){un.prototype.c.call(this,na(a));return this};c.l=function(){return this.Xo.Yb};
+c.uD=function(a){var b=this.Xo;b.Yb=""+b.Yb+a;return this};function Era(a,b){a=a.Xo;a.Yb=""+a.Yb+b}c.sa=function(){return this.Xo.sa()};c.rv=function(a){this.Xo=a;return this};c.c=function(a){un.prototype.rv.call(this,(new O0).c(a));return this};c.$classData=g({aea:0},!1,"java.lang.StringBuffer",{aea:1,d:1,Hv:1,jW:1,h:1});function O0(){this.Yb=null}O0.prototype=new l;O0.prototype.constructor=O0;c=O0.prototype;c.b=function(){this.Yb="";return this};c.Bw=function(a,b){return this.Yb.substring(a,b)};
+c.l=function(){return this.Yb};c.YE=function(a){O0.prototype.c.call(this,na(a));return this};c.uD=function(a){this.Yb=""+this.Yb+a;return this};c.hb=function(a){O0.prototype.b.call(this);if(0>a)throw(new P0).b();return this};c.sa=function(){return this.Yb.length|0};function YS(a,b){b=ba.String.fromCharCode(b);a.Yb=""+a.Yb+b}c.c=function(a){O0.prototype.b.call(this);if(null===a)throw(new Ce).b();this.Yb=a;return this};
+function Twa(a){for(var b=a.Yb,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.Yb=d;return a}function Uwa(a,b){return 65535&(a.Yb.charCodeAt(b)|0)}
+c.$classData=g({bea:0},!1,"java.lang.StringBuilder",{bea:1,d:1,Hv:1,jW:1,h:1});function WS(){this.W=this.ve=null}WS.prototype=new l;WS.prototype.constructor=WS;function Vwa(){}Vwa.prototype=WS.prototype;WS.prototype.o=function(a){a:{ska();if(a&&a.$classData&&a.$classData.m.Eea){var b=this.ve,d=a.ve;if(null===b?null===d:Fa(b,d)){b=this.W;a=a.W;a=null===b?null===a:Fa(b,a);break a}}a=!1}return a};WS.prototype.e=function(a,b){this.ve=a;this.W=b;return this};
+WS.prototype.l=function(){return this.ve+"\x3d"+this.W};WS.prototype.r=function(){return qka(ska(),this)};function sD(){this.bq=this.Dn=null;this.Fv=!1}sD.prototype=new l;sD.prototype.constructor=sD;c=sD.prototype;c.b=function(){sD.prototype.tda.call(this,null);return this};function Wwa(a,b,d){null===a.Dn?a.bq=""+a.bq+b+d:Xwa(a,[b,d])}
+function Ena(a,b,d){b=a.toExponential(b);a=0===a&&0>1/a?"-"+b:b;b=a.length|0;a=101!==(65535&(a.charCodeAt(-3+b|0)|0))?a:a.substring(0,-1+b|0)+"0"+a.substring(-1+b|0);if(!d||0<=(a.indexOf(".")|0))return a;d=a.indexOf("e")|0;return a.substring(0,d)+"."+a.substring(d)}function Q0(a,b){for(var d="",e=0;e!==b;)d=""+d+a,e=1+e|0;return d}function Gna(a,b,d,e){var f=e.length|0;f>=d?uD(a,e):0!==(1&b)?Wwa(a,e,Q0(" ",d-f|0)):Wwa(a,Q0(" ",d-f|0),e)}function ID(a,b){return 0!==(256&a)?b.toUpperCase():b}
+c.l=function(){if(this.Fv)throw(new tD).b();return null===this.Dn?this.bq:this.Dn.l()};function KD(a){return(0!==(1&a)?"-":"")+(0!==(2&a)?"#":"")+(0!==(4&a)?"+":"")+(0!==(8&a)?" ":"")+(0!==(16&a)?"0":"")+(0!==(32&a)?",":"")+(0!==(64&a)?"(":"")+(0!==(128&a)?"\x3c":"")}c.tda=function(a){this.Dn=a;this.bq="";this.Fv=!1;return this};function Cna(a,b){if(void 0===a)return b;a=+ba.parseInt(a,10);return 2147483647>=a?Oa(a):-1}function Ywa(a,b,d,e){null===a.Dn?a.bq=a.bq+(""+b+d)+e:Xwa(a,[b,d,e])}
+function HD(a,b,d,e,f){var h=(e.length|0)+(f.length|0)|0;h>=d?Wwa(a,e,f):0!==(16&b)?Ywa(a,e,Q0("0",d-h|0),f):0!==(1&b)?Ywa(a,e,f,Q0(" ",d-h|0)):Ywa(a,Q0(" ",d-h|0),e,f)}function Dna(a,b,d,e){Gna(a,b,d,ID(b,e!==e?"NaN":0<e?0!==(4&b)?"+Infinity":0!==(8&b)?" Infinity":"Infinity":0!==(64&b)?"(Infinity)":"-Infinity"))}function DD(a,b,d,e,f,h){if(null===b)AD(a,e,f,h,"null");else{a=new R0;b=oa(b);a.Yo=d;a.dU=b;NS.prototype.ic.call(a,null,null,0,!0);if(null===b)throw(new Ce).b();throw a;}}
+function Xwa(a,b){try{for(var d=0,e=b.length|0;d<e;)a.Dn.uD(b[d]),d=1+d|0}catch(f){if(!(f&&f.$classData&&f.$classData.m.vA))throw f;}}function Fna(a,b,d){b=a.toFixed(b);a=0===a&&0>1/a?"-"+b:b;return d&&0>(a.indexOf(".")|0)?a+".":a}function AD(a,b,d,e,f){e=0>e?f:f.substring(0,e);Gna(a,b,d,ID(b,e))}function ED(a){throw(new JD).c(KD(a));}function uD(a,b){null===a.Dn?a.bq=""+a.bq+b:Xwa(a,[b])}
+function zD(a,b,d){a=KD(a&d);d=new S0;d.rp=a;d.Yo=b;NS.prototype.ic.call(d,null,null,0,!0);if(null===a)throw(new Ce).b();throw d;}
+function FD(a,b,d,e){if((e.length|0)>=d&&0===(108&b))uD(a,ID(b,e));else if(0===(124&b))AD(a,b,d,-1,e);else{if(45!==(65535&(e.charCodeAt(0)|0)))var f=0!==(4&b)?"+":0!==(8&b)?" ":"";else 0!==(64&b)?(e=e.substring(1)+")",f="("):(e=e.substring(1),f="-");if(0!==(32&b)){for(var h=e.length|0,k=0;;){if(k!==h)var n=65535&(e.charCodeAt(k)|0),n=48<=n&&57>=n;else n=!1;if(n)k=1+k|0;else break}k=-3+k|0;if(!(0>=k)){for(h=e.substring(k);3<k;)n=-3+k|0,h=e.substring(n,k)+","+h,k=n;e=e.substring(0,k)+","+h}}HD(a,b,
+d,f,ID(b,e))}}c.ap=function(){if(!this.Fv&&null!==this.Dn){var a=this.Dn;if(a&&a.$classData&&a.$classData.m.ks)try{a.ap()}catch(b){if(!(b&&b.$classData&&b.$classData.m.vA))throw b;}}this.Fv=!0};c.$classData=g({pea:0},!1,"java.util.Formatter",{pea:1,d:1,ks:1,Gv:1,lI:1});function jB(){NS.call(this)}jB.prototype=new FY;jB.prototype.constructor=jB;jB.prototype.$q=function(a,b){NS.prototype.ic.call(this,a,b,0,!0);return this};
+jB.prototype.$classData=g({sF:0},!1,"java.util.concurrent.ExecutionException",{sF:1,Wc:1,tc:1,d:1,h:1});function T0(){CY.call(this)}T0.prototype=new DY;T0.prototype.constructor=T0;function U0(){}U0.prototype=T0.prototype;var tva=g({Gp:0},!1,"java.util.concurrent.TimeUnit",{Gp:1,Tn:1,d:1,Md:1,h:1});T0.prototype.$classData=tva;function wY(){this.bi=0}wY.prototype=new LS;wY.prototype.constructor=wY;wY.prototype.l=function(){return""+this.bi};wY.prototype.hb=function(a){this.bi=a;return this};
+wY.prototype.$classData=g({Sea:0},!1,"java.util.concurrent.atomic.AtomicInteger",{Sea:1,bl:1,d:1,h:1,k:1});function V0(){}V0.prototype=new jla;V0.prototype.constructor=V0;V0.prototype.b=function(){return this};function Bf(a,b,d){a=la(Xa(db),[1+d.sa()|0]);a.n[0]=b;b=1;for(d=d.Sa();d.ra();){var e=d.ka()|0;a.n[b]=e;b=1+b|0}return a}function Lv(a,b,d,e,f,h){a=oa(b);if(a.Ni.isArrayClass&&Qk(oa(e),a))Pa(b,d,e,f,h);else for(a=d,d=d+h|0;a<d;)qD(W(),e,f,pD(W(),b,a)),a=1+a|0,f=1+f|0}
+V0.prototype.$classData=g({hfa:0},!1,"scala.Array$",{hfa:1,Ura:1,d:1,k:1,h:1});var Zwa=void 0;function Af(){Zwa||(Zwa=(new V0).b());return Zwa}function W0(){}W0.prototype=new l;W0.prototype.constructor=W0;function $wa(){}$wa.prototype=W0.prototype;W0.prototype.Ia=function(a){return a};W0.prototype.l=function(){return"\x3cfunction1\x3e"};W0.prototype.Ja=function(a){return!!a};W0.prototype.za=function(a){return m(new p,function(a,d){return function(e){return d.y(a.y(e))}}(this,a))};function X0(){}
+X0.prototype=new l;X0.prototype.constructor=X0;function axa(){}axa.prototype=X0.prototype;X0.prototype.Ia=function(a){return a};X0.prototype.l=function(){return"\x3cfunction1\x3e"};X0.prototype.Ja=function(a){return!!a};X0.prototype.za=function(a){return m(new p,function(a,d){return function(e){return d.y(a.y(e))}}(this,a))};function Y0(){this.qo=null}Y0.prototype=new l;Y0.prototype.constructor=Y0;Y0.prototype.b=function(){Z0=this;this.qo=(new Zz).b();return this};
+Y0.prototype.Bt=function(a){throw(new me).$q("problem in scala.concurrent internal callback",a);};Y0.prototype.Xu=function(a){if(a&&a.$classData&&a.$classData.m.Mfa){var b=this.qo.R();null===b?(b=u(),Ava(new rZ,this,Og(new Pg,a,b)).Xm()):$z(this.qo,Og(new Pg,a,b))}else a.Xm()};Y0.prototype.$classData=g({Lfa:0},!1,"scala.concurrent.Future$InternalCallbackExecutor$",{Lfa:1,d:1,rz:1,dsa:1,tF:1});var Z0=void 0;function je(){Z0||(Z0=(new Y0).b());return Z0}function EB(){}EB.prototype=new l;
+EB.prototype.constructor=EB;EB.prototype.b=function(){return this};EB.prototype.$classData=g({gga:0},!1,"scala.math.Equiv$",{gga:1,d:1,jsa:1,k:1,h:1});var Ula=void 0;function IB(){}IB.prototype=new l;IB.prototype.constructor=IB;IB.prototype.b=function(){return this};IB.prototype.$classData=g({rga:0},!1,"scala.math.Ordering$",{rga:1,d:1,ksa:1,k:1,h:1});var Yla=void 0;function eZ(){}eZ.prototype=new l;eZ.prototype.constructor=eZ;eZ.prototype.b=function(){return this};eZ.prototype.l=function(){return"\x3c?\x3e"};
+eZ.prototype.$classData=g({$ga:0},!1,"scala.reflect.NoManifest$",{$ga:1,d:1,cj:1,k:1,h:1});var yva=void 0;function Ke(){lT.call(this);this.qp=this.Qa=null}Ke.prototype=new mT;Ke.prototype.constructor=Ke;c=Ke.prototype;c.y=function(a){return this.si(a)};c.bs=function(a){return iba(this,a)};c.Nl=function(a,b){if(null===a)throw pg(qg(),null);this.Qa=a;this.qp=b;lT.prototype.Cp.call(this,a);return this};c.si=function(a){return this.qp.y(a)};
+c.$classData=g({Aha:0},!1,"scala.util.parsing.combinator.Parsers$$anon$1",{Aha:1,CY:1,d:1,fa:1,wsa:1});function $0(){}$0.prototype=new l;$0.prototype.constructor=$0;function a1(){}c=a1.prototype=$0.prototype;c.jb=function(){return this};c.Ig=function(a,b){pC(this,a,b)};c.zn=function(){return zp(new xp,this)};c.Rg=function(){return this};c.wb=function(){var a=x().s;return rC(this,a)};c.z=function(){return!this.ra()};c.Ab=function(a){return ec(this,"",a,"")};
+c.Qc=function(a,b,d){return ec(this,a,b,d)};c.l=function(){return nT(this)};c.ta=function(a){pT(this,a)};c.Ib=function(a,b){return Xk(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return rC(this,a)};c.ae=function(){var a=P_().s;return rC(this,a)};c.Da=function(){return Fr(this)};c.Zf=function(){return ec(this,"","","")};c.Oc=function(){return Vv(this)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return this.Oc()};c.md=function(){var a=Yk(),a=Zk(a);return rC(this,a)};
+c.Ff=function(a,b){return Xk(this,a,b)};c.Ng=function(){return!1};c.He=function(a,b,d){rT(this,a,b,d)};c.De=function(){for(var a=fc(new gc,hc());this.ra();){var b=this.ka();ic(a,b)}return a.Va};c.lp=function(a){return sT(this,a)};c.og=function(a){return wC(this,a)};c.Ce=function(a){return xC(this,a)};c.Ye=function(){return nd(this)};function d1(){}d1.prototype=new l;d1.prototype.constructor=d1;d1.prototype.b=function(){return this};
+d1.prototype.$classData=g({gia:0},!1,"scala.collection.convert.Wrappers$",{gia:1,d:1,Isa:1,k:1,h:1});var bxa=void 0;function zC(){bxa||(bxa=(new d1).b());return bxa}function e1(){}e1.prototype=new Ura;e1.prototype.constructor=e1;function f1(){}f1.prototype=e1.prototype;function g1(){}g1.prototype=new XZ;g1.prototype.constructor=g1;g1.prototype.b=function(){return this};g1.prototype.Su=function(){return hc()};
+g1.prototype.$classData=g({Qia:0},!1,"scala.collection.immutable.Map$",{Qia:1,fZ:1,Bz:1,Az:1,d:1});var cxa=void 0;function sp(){cxa||(cxa=(new g1).b());return cxa}function h1(){this.Vd=this.W=this.ve=null}h1.prototype=new l;h1.prototype.constructor=h1;c=h1.prototype;c.ka=function(){return this.Vd};function dxa(a){return"(kv: "+a.ve+", "+a.W+")"+(null!==a.Vd?" -\x3e "+dxa(a.Vd):"")}c.e=function(a,b){this.ve=a;this.W=b;return this};c.l=function(){return dxa(this)};c.Vi=function(){return this.ve};
+c.nr=function(a){this.Vd=a};c.$classData=g({Wja:0},!1,"scala.collection.mutable.DefaultEntry",{Wja:1,d:1,Dz:1,k:1,h:1});function i1(){this.Va=this.Sd=null}i1.prototype=new l;i1.prototype.constructor=i1;function exa(a,b){a.Sd=b;a.Va=b;return a}c=i1.prototype;c.cd=function(a){this.Va.cd(a);return this};c.Ba=function(){return this.Va};c.mg=function(a,b){JT(this,a,b)};c.Ma=function(a){this.Va.cd(a);return this};c.oc=function(){};c.Xb=function(a){return IC(this,a)};
+c.$classData=g({$ja:0},!1,"scala.collection.mutable.GrowingBuilder",{$ja:1,d:1,sd:1,qd:1,pd:1});function j1(){this.Vd=this.Xf=this.Wh=this.W=this.ve=null}j1.prototype=new l;j1.prototype.constructor=j1;c=j1.prototype;c.ka=function(){return this.Vd};c.e=function(a,b){this.ve=a;this.W=b;this.Xf=this.Wh=null;return this};c.Vi=function(){return this.ve};c.nr=function(a){this.Vd=a};c.$classData=g({kka:0},!1,"scala.collection.mutable.LinkedEntry",{kka:1,d:1,Dz:1,k:1,h:1});
+function k1(){this.Vd=this.Xf=this.Wh=this.ve=null}k1.prototype=new l;k1.prototype.constructor=k1;c=k1.prototype;c.ka=function(){return this.Vd};c.i=function(a){this.ve=a;this.Xf=this.Wh=null;return this};c.Vi=function(){return this.ve};c.nr=function(a){this.Vd=a};c.$classData=g({uka:0},!1,"scala.collection.mutable.LinkedHashSet$Entry",{uka:1,d:1,Dz:1,k:1,h:1});function UO(){}UO.prototype=new Tva;UO.prototype.constructor=UO;UO.prototype.b=function(){return this};UO.prototype.wi=function(){return(new zv).b()};
+UO.prototype.Su=function(){return(new zv).b()};UO.prototype.$classData=g({Aka:0},!1,"scala.collection.mutable.Map$",{Aka:1,pia:1,Bz:1,Az:1,d:1});var wpa=void 0;function QD(){this.YX=null}QD.prototype=new l;QD.prototype.constructor=QD;QD.prototype.b=function(){this.YX=ba.Promise.resolve(void 0);return this};QD.prototype.Bt=function(a){PS(a)};QD.prototype.Xu=function(a){this.YX.then(function(a,d){return function(){try{d.Xm()}catch(a){var b=qn(qg(),a);if(null!==b)PS(b);else throw a;}}}(this,a))};
+QD.prototype.$classData=g({Uka:0},!1,"scala.scalajs.concurrent.QueueExecutionContext$PromisesExecutionContext",{Uka:1,d:1,iY:1,rz:1,tF:1});function PD(){}PD.prototype=new l;PD.prototype.constructor=PD;PD.prototype.b=function(){return this};PD.prototype.Bt=function(a){PS(a)};PD.prototype.Xu=function(a){ba.setTimeout(function(a,d){return function(){try{d.Xm()}catch(a){var b=qn(qg(),a);if(null!==b)PS(b);else throw a;}}}(this,a),0)};
+PD.prototype.$classData=g({Vka:0},!1,"scala.scalajs.concurrent.QueueExecutionContext$TimeoutsExecutionContext",{Vka:1,d:1,iY:1,rz:1,tF:1});function ND(){}ND.prototype=new l;ND.prototype.constructor=ND;ND.prototype.b=function(){return this};ND.prototype.Bt=function(a){PS(a)};ND.prototype.Xu=function(a){try{a.Xm()}catch(b){if(a=qn(qg(),b),null!==a)PS(a);else throw b;}};ND.prototype.$classData=g({Wka:0},!1,"scala.scalajs.concurrent.RunNowExecutionContext$",{Wka:1,d:1,iY:1,rz:1,tF:1});var Ina=void 0;
+function l1(){this.wF=this.Ns=null;this.gv=0}l1.prototype=new l;l1.prototype.constructor=l1;c=l1.prototype;c.Ig=function(a,b){pC(this,a,b)};c.jb=function(){return this};c.ka=function(){return this.co()};c.zn=function(){return zp(new xp,this)};c.Rg=function(){return this};c.z=function(){return!this.ra()};c.wb=function(){var a=x().s;return rC(this,a)};c.Im=function(a){this.Ns=a;this.wF=ba.Object.keys(a);this.gv=0;return this};c.Qc=function(a,b,d){return ec(this,a,b,d)};
+c.Ab=function(a){return ec(this,"",a,"")};c.l=function(){return nT(this)};c.ta=function(a){pT(this,a)};c.Ib=function(a,b){return Xk(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return rC(this,a)};c.Da=function(){return Fr(this)};c.ae=function(){var a=P_().s;return rC(this,a)};c.co=function(){var a=this.wF[this.gv];this.gv=1+this.gv|0;var b=this.Ns;if(Au().Zm.call(b,a))b=b[a];else throw(new Bu).c("key not found: "+a);return(new w).e(a,b)};c.ra=function(){return this.gv<(this.wF.length|0)};
+c.Zf=function(){return ec(this,"","","")};c.Oc=function(){return Vv(this)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return Vv(this)};c.md=function(){var a=Yk(),a=Zk(a);return rC(this,a)};c.Ff=function(a,b){return Xk(this,a,b)};c.He=function(a,b,d){rT(this,a,b,d)};c.Ng=function(){return!1};c.lp=function(a){return sT(this,a)};c.De=function(){for(var a=fc(new gc,hc());this.ra();){var b=this.co();ic(a,b)}return a.Va};c.og=function(a){return wC(this,a)};
+c.Ce=function(a){return xC(this,a)};c.Ye=function(){return nd(this)};c.$classData=g({fla:0},!1,"scala.scalajs.js.WrappedDictionary$DictionaryIterator",{fla:1,d:1,Rc:1,Ga:1,Fa:1});function KT(){this.Ns=null}KT.prototype=new l;KT.prototype.constructor=KT;c=KT.prototype;c.b=function(){this.Ns={};return this};c.cd=function(a){return fxa(this,a)};function fxa(a,b){a.Ns[b.ja()]=b.na();return a}c.Ba=function(){return(new Sw).Im(this.Ns)};c.mg=function(a,b){JT(this,a,b)};
+c.Ma=function(a){return fxa(this,a)};c.oc=function(){};c.Xb=function(a){return IC(this,a)};c.$classData=g({gla:0},!1,"scala.scalajs.js.WrappedDictionary$WrappedDictionaryBuilder",{gla:1,d:1,sd:1,qd:1,pd:1});function Xb(){this.oa=this.ia=0}Xb.prototype=new LS;Xb.prototype.constructor=Xb;c=Xb.prototype;c.Hj=function(){return Ra(this)};c.fy=function(){return this.ia<<24>>24};c.o=function(a){return Da(a)?this.ia===a.ia&&this.oa===a.oa:!1};
+c.P=function(a,b,d){Xb.prototype.ha.call(this,a|b<<22,b>>10|d<<12);return this};c.l=function(){return GD(Sa(),this.ia,this.oa)};c.ha=function(a,b){this.ia=a;this.oa=b;return this};c.hb=function(a){Xb.prototype.ha.call(this,a,a>>31);return this};c.Iz=function(){return this.ia<<16>>16};c.Am=function(){return tE(Sa(),this.ia,this.oa)};c.r=function(){return this.ia^this.oa};c.Ti=function(){return this.ia};c.Hq=function(){return fa(tE(Sa(),this.ia,this.oa))};
+function Da(a){return!!(a&&a.$classData&&a.$classData.m.c_)}c.$classData=g({c_:0},!1,"scala.scalajs.runtime.RuntimeLong",{c_:1,bl:1,d:1,h:1,Md:1});function m1(){this.Sk=this.fv=null;this.fd=this.hf=0;this.Vt=this.bp=!1}m1.prototype=new iwa;m1.prototype.constructor=m1;c=m1.prototype;c.xr=function(){this.Cq();if(!this.Vt)throw(new v_).c("Mark invalid");this.fd=0};
+c.xw=function(a){if(0>a.oa)throw(new Re).c("n negative");this.Cq();if(this.fd<this.hf){var b=this.hf-this.fd|0,d=b>>31,e=a.oa;a=((e===d?(-2147483648^a.ia)<(-2147483648^b):e<d)?a:(new Xb).ha(b,d)).ia;this.fd=this.fd+a|0;return(new Xb).ha(a,a>>31)}this.Vt=!1;return this.fv.xw(a)};c.Cq=function(){if(this.bp)throw(new v_).c("Operation on closed stream");};
+c.PF=function(a,b,d){this.Cq();if(0>b||0>d||d>(a.n.length-b|0))throw(new O).b();if(0===d)return 0;if(this.fd<this.hf||gxa(this)){var e=this.hf-this.fd|0;d=d<e?d:e;Pa(this.Sk,this.fd,a,b,d);this.fd=this.fd+d|0;return d}return-1};function Yca(a){var b=new m1;b.fv=a;x_.prototype.La.call(b,C());b.Sk=la(Xa($a),[65536]);b.hf=0;b.fd=0;b.bp=!1;b.Vt=!1;return b}c.jz=function(){this.Cq();if(this.fd<this.hf||gxa(this)){var a=this.Sk.n[this.fd];this.fd=1+this.fd|0;return a}return-1};
+function moa(a,b){a.Cq();var d=a.Sk;a.Sk.n.length<b&&(a.Sk=la(Xa($a),[b]));0===a.fd&&a.Sk===d||Pa(d,a.fd,a.Sk,0,a.hf-a.fd|0);a.hf=a.hf-a.fd|0;a.fd=0;a.Vt=!0}c.ap=function(){this.bp||(this.bp=!0,this.fv.ap())};function gxa(a){if(a.Vt&&a.hf<a.Sk.n.length){var b=a.fv.PF(a.Sk,a.hf,a.Sk.n.length-a.hf|0);0<b&&(a.hf=a.hf+b|0);return 0<b}a.Vt=!1;b=a.Sk;a.hf=a.fv.PF(b,0,b.n.length);a.fd=0;return 0<a.hf}c.$classData=g({kI:0},!1,"java.io.BufferedReader",{kI:1,R_:1,d:1,Yda:1,ks:1,Gv:1});function n1(){}
+n1.prototype=new hwa;n1.prototype.constructor=n1;function hxa(){}hxa.prototype=n1.prototype;n1.prototype.pda=function(){return this};function hm(){this.qz=null;this.bp=!1;this.fd=0}hm.prototype=new iwa;hm.prototype.constructor=hm;c=hm.prototype;c.xw=function(a){var b=(this.qz.length|0)-this.fd|0,d=b>>31,e=a.oa;a=((e===d?(-2147483648^a.ia)<(-2147483648^b):e<d)?a:(new Xb).ha(b,d)).ia;b=-this.fd|0;a=a>b?a:b;this.fd=this.fd+a|0;return(new Xb).ha(a,a>>31)};
+c.Cq=function(){if(this.bp)throw(new v_).c("Operation on closed stream");};c.PF=function(a,b,d){this.Cq();if(0>b||0>d||d>(a.n.length-b|0))throw(new O).b();if(0===d)return 0;var e=(this.qz.length|0)-this.fd|0;d=d<e?d:e;for(e=0;e<d;)a.n[b+e|0]=65535&(this.qz.charCodeAt(this.fd+e|0)|0),e=1+e|0;this.fd=this.fd+d|0;return 0===d?-1:d};c.c=function(a){this.qz=a;x_.prototype.La.call(this,C());this.bp=!1;this.fd=0;return this};c.ap=function(){this.bp=!0};
+c.$classData=g({S_:0},!1,"java.io.StringReader",{S_:1,R_:1,d:1,Yda:1,ks:1,Gv:1});function o1(){this.Xl=this.Tf=this.va=null;this.Zg=this.$g=!1}o1.prototype=new l;o1.prototype.constructor=o1;c=o1.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.m.qI){if(this.va===a.va&&this.Tf===a.Tf)var b=this.Xl,d=a.Xl,b=null===b?null===d:b.o(d);else b=!1;return b&&this.$g===a.$g?this.Zg===a.Zg:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.va;case 1:return this.Tf;case 2:return this.Xl;case 3:return this.$g;case 4:return this.Zg;default:throw(new O).c(""+a);}};c.l=function(){var a=t(),b=[this.va,this.Tf,this.Xl.Ab(" "),this.Zg];return G(a,(new J).j(b)).Qc("Breed(",", ",")")};function Ro(a,b,d,e,f){var h=new o1;h.va=a;h.Tf=b;h.Xl=d;h.$g=e;h.Zg=f;return h}
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.va)),a=V().ca(a,fC(V(),this.Tf)),a=V().ca(a,fC(V(),this.Xl)),a=V().ca(a,this.$g?1231:1237),a=V().ca(a,this.Zg?1231:1237);return V().xb(a,5)};c.x=function(){return Y(new Z,this)};c.$classData=g({qI:0},!1,"org.nlogo.core.Breed",{qI:1,d:1,t:1,q:1,k:1,h:1});function IW(){}IW.prototype=new NT;IW.prototype.constructor=IW;IW.prototype.b=function(){return this};IW.prototype.y=function(a){return Lba(a)};IW.prototype.l=function(){return"ChooseableList"};
+IW.prototype.$classData=g({q0:0},!1,"org.nlogo.core.ChooseableList$",{q0:1,aq:1,d:1,fa:1,k:1,h:1});var jua=void 0;function lc(){this.eo=this.Is=this.Bs=this.Nv=this.Xh=this.Pt=null;this.pl=!1;this.Fn=null;this.vw=!1}lc.prototype=new l;lc.prototype.constructor=lc;c=lc.prototype;c.u=function(){return"CompilationOperand"};c.v=function(){return 9};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.zI){var b=this.Pt,d=a.Pt;(null===b?null===d:DO(b,d))&&this.Xh===a.Xh&&this.Nv===a.Nv&&this.Bs===a.Bs?(b=this.Is,d=a.Is,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.eo,d=a.eo,b=null===b?null===d:DO(b,d)):b=!1;b&&this.pl===a.pl?(b=this.Fn,d=a.Fn,b=null===b?null===d:b.o(d)):b=!1;return b?this.vw===a.vw:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Pt;case 1:return this.Xh;case 2:return this.Nv;case 3:return this.Bs;case 4:return this.Is;case 5:return this.eo;case 6:return this.pl;case 7:return this.Fn;case 8:return this.vw;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Pt)),a=V().ca(a,fC(V(),this.Xh)),a=V().ca(a,fC(V(),this.Nv)),a=V().ca(a,fC(V(),this.Bs)),a=V().ca(a,fC(V(),this.Is)),a=V().ca(a,fC(V(),this.eo)),a=V().ca(a,this.pl?1231:1237),a=V().ca(a,fC(V(),this.Fn)),a=V().ca(a,this.vw?1231:1237);return V().xb(a,9)};c.x=function(){return Y(new Z,this)};c.$classData=g({zI:0},!1,"org.nlogo.core.CompilationOperand",{zI:1,d:1,t:1,q:1,k:1,h:1});function kd(){NS.call(this);this.Cm=this.oe=0;this.nV=null}
+kd.prototype=new N0;kd.prototype.constructor=kd;kd.prototype.gt=function(a,b,d,e){this.oe=b;this.Cm=d;this.nV=e;NS.prototype.ic.call(this,a,null,0,!0);return this};kd.prototype.l=function(){return this.Lc+" at position "+this.oe+" in "+this.nV};kd.prototype.Wf=function(a){Ne();var b=a.sb,d=$l();bn(0,null!==b&&b===d);kd.prototype.gt.call(this,a.W,a.ma.Ua,a.ma.Ya,a.ma.bb);return this};function $p(a){return!!(a&&a.$classData&&a.$classData.m.AI)}
+kd.prototype.$classData=g({AI:0},!1,"org.nlogo.core.CompilerException",{AI:1,ge:1,Wc:1,tc:1,d:1,h:1});function $n(){this.va=null}$n.prototype=new l;$n.prototype.constructor=$n;c=$n.prototype;c.u=function(){return"Let"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.DI?this.va===a.va:!1};c.w=function(a){switch(a){case 0:return this.va;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.c=function(a){this.va=a;return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({DI:0},!1,"org.nlogo.core.Let",{DI:1,d:1,t:1,q:1,k:1,h:1});function Pj(){this.Zy=this.ah=this.th=this.mi=this.nf=this.Kc=this.je=null}Pj.prototype=new l;Pj.prototype.constructor=Pj;c=Pj.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.m.FI){if(this.je===a.je)var b=this.Kc,d=a.Kc,b=null===b?null===d:b.o(d);else b=!1;b&&this.nf===a.nf&&this.mi===a.mi?(b=this.th,d=a.th,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.ah,d=a.ah,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.Zy,a=a.Zy,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.je;case 1:return this.Kc;case 2:return this.nf;case 3:return this.mi;case 4:return this.th;case 5:return this.ah;case 6:return this.Zy;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function ppa(a){var b=a.Kc,d=(new p1).Vq(a),e=t(),b=b.lc(d,e.s);a=m(new p,function(){return function(a){return a.Wt()}}(a));d=t();return b.ya(a,d.s)}function wga(a){return rg(a.Kc,(new q1).Vq(a)).R()}c.r=function(){return T(S(),this)};
+function Rj(a,b,d,e,f,h,k,n){a.je=b;a.Kc=d;a.nf=e;a.mi=f;a.th=h;a.ah=k;a.Zy=n;if(rg(d,(new r1).Vq(a)).z())throw(new s1).c("Every model must have at least a view...");return a}c.x=function(){return Y(new Z,this)};function tpa(a){var b=a.Kc,d=(new t1).Vq(a),e=t(),b=b.lc(d,e.s);a=m(new p,function(){return function(a){var b=a.Wt(),d=a.nx();return"set "+b+" "+Rba(a,d)}}(a));d=t();return b.ya(a,d.s)}c.$classData=g({FI:0},!1,"org.nlogo.core.Model",{FI:1,d:1,t:1,q:1,k:1,h:1});
+function s1(){NS.call(this)}s1.prototype=new N0;s1.prototype.constructor=s1;s1.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};s1.prototype.$classData=g({P0:0},!1,"org.nlogo.core.Model$InvalidModelError",{P0:1,ge:1,Wc:1,tc:1,d:1,h:1});function PU(){this.cb=null;this.Db=this.Sl=this.Ol=0;this.Em=!1;this.Cg=this.Bg=null}PU.prototype=new l;PU.prototype.constructor=PU;c=PU.prototype;c.u=function(){return"Pen"};c.v=function(){return 7};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.HA?this.cb===a.cb&&this.Ol===a.Ol&&this.Sl===a.Sl&&this.Db===a.Db&&this.Em===a.Em&&this.Bg===a.Bg&&this.Cg===a.Cg:!1};c.w=function(a){switch(a){case 0:return this.cb;case 1:return this.Ol;case 2:return this.Sl;case 3:return this.Db;case 4:return this.Em;case 5:return this.Bg;case 6:return this.Cg;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+function Usa(a,b,d,e,f,h,k,n){a.cb=b;a.Ol=d;a.Sl=e;a.Db=f;a.Em=h;a.Bg=k;a.Cg=n;return a}c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.cb)),a=V().ca(a,BE(V(),this.Ol)),a=V().ca(a,this.Sl),a=V().ca(a,this.Db),a=V().ca(a,this.Em?1231:1237),a=V().ca(a,fC(V(),this.Bg)),a=V().ca(a,fC(V(),this.Cg));return V().xb(a,7)};c.x=function(){return Y(new Z,this)};c.$classData=g({HA:0},!1,"org.nlogo.core.Pen",{HA:1,d:1,t:1,q:1,k:1,h:1});
+function u1(){this.NW=this.EX=this.w_=this.zV=this.jX=this.Jg=this.Yf=this.rg=this.Xi=this.Ij=this.jj=this.Ik=this.uk=null;this.a=0}u1.prototype=new l;u1.prototype.constructor=u1;c=u1.prototype;c.u=function(){return"Program"};function gp(a){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Program.scala: 36");return a.w_}c.v=function(){return 8};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.LI){var b=this.uk,d=a.uk;(null===b?null===d:b.o(d))?(b=this.Ik,d=a.Ik,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.jj,d=a.jj,b=null===b?null===d:DO(b,d)):b=!1;b?(b=this.Ij,d=a.Ij,b=null===b?null===d:DO(b,d)):b=!1;b?(b=this.Xi,d=a.Xi,b=null===b?null===d:DO(b,d)):b=!1;b?(b=this.rg,d=a.rg,b=null===b?null===d:DO(b,d)):b=!1;b?(b=this.Yf,d=a.Yf,b=null===b?null===d:DO(b,d)):b=!1;return b?this.Jg===a.Jg:!1}return!1};
+function hp(a){if(0===(16&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Program.scala: 40");return a.NW}c.w=function(a){switch(a){case 0:return this.uk;case 1:return this.Ik;case 2:return this.jj;case 3:return this.Ij;case 4:return this.Xi;case 5:return this.rg;case 6:return this.Yf;case 7:return this.Jg;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+function ota(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Program.scala: 31");return a.jX}c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function fp(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Program.scala: 34");return a.zV}
+function Aea(a){if(0===(8&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Program.scala: 38");return a.EX}
+function So(a,b,d,e,f,h,k,n){var r=new u1;r.uk=a;r.Ik=b;r.jj=d;r.Ij=e;r.Xi=f;r.rg=h;r.Yf=k;r.Jg=n;r.jX=foa(zP(n));r.a=(1|r.a)<<24>>24;h=ota(r);h=Jc(h);h=Qo(h);k=m(new p,function(){return function(a){return a.toUpperCase()}}(r));n=t();a=a.ya(k,n.s);k=t();a=h.$c(a,k.s);h=t();r.zV=a.$c(b,h.s);r.a=(2|r.a)<<24>>24;b=Jc(d);r.w_=Qo(b);r.a=(4|r.a)<<24>>24;e=Jc(e);r.EX=Qo(e);r.a=(8|r.a)<<24>>24;f=Jc(f);r.NW=Qo(f);r.a=(16|r.a)<<24>>24;return r}
+c.$classData=g({LI:0},!1,"org.nlogo.core.Program",{LI:1,d:1,t:1,q:1,k:1,h:1});function Lb(){this.ma=this.wa=this.ye=null}Lb.prototype=new l;Lb.prototype.constructor=Lb;c=Lb.prototype;c.Hy=function(){return this.ye};function Tm(a,b,d){Lb.prototype.bd.call(a,b,G(t(),u()),d);return a}c.wc=function(){return this.ma};c.bd=function(a,b,d){this.ye=a;this.wa=b;this.ma=d;return this};c.l=function(){return this.ye.l()+"["+this.wa.Ab(", ")+"]"};
+function Hda(a,b){var d=a.ye,e=b.Wn();e.z()?e=C():(e=e.R(),e=(new H).i(e.wc().Ya));e=(e.z()?a.ma.Ya:e.R())|0;return(new Lb).bd(d,b,Xl(new Yl,a.ma.Ua,e,a.ma.bb))}c.oo=function(){return this.ye.G().yr};c.Au=function(a){return(new Lb).bd(this.ye,this.wa,a)};function yb(a){return!!(a&&a.$classData&&a.$classData.m.NI)}c.$classData=g({NI:0},!1,"org.nlogo.core.ReporterApp",{NI:1,d:1,pI:1,kq:1,No:1,xx:1});function qi(){this.uq=this.zq=this.Kq=this.wr=0}qi.prototype=new l;qi.prototype.constructor=qi;c=qi.prototype;
+c.u=function(){return"RgbColor"};c.v=function(){return 4};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.QI?this.wr===a.wr&&this.Kq===a.Kq&&this.zq===a.zq&&this.uq===a.uq:!1};c.w=function(a){switch(a){case 0:return this.wr;case 1:return this.Kq;case 2:return this.zq;case 3:return this.uq;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function mca(a,b,d,e,f){a.wr=b;a.Kq=d;a.zq=e;a.uq=f;return a}
+c.r=function(){var a=-889275714,a=V().ca(a,this.wr),a=V().ca(a,this.Kq),a=V().ca(a,this.zq),a=V().ca(a,this.uq);return V().xb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({QI:0},!1,"org.nlogo.core.Shape$RgbColor",{QI:1,d:1,t:1,q:1,k:1,h:1});function yt(){this.Kr=this.Og=null}yt.prototype=new l;yt.prototype.constructor=yt;c=yt.prototype;c.u=function(){return"ShapeList"};c.v=function(){return 2};
+c.o=function(a){if(this===a)return!0;if(ixa(a)&&this.Og===a.Og){var b=this.Kr;a=a.Kr;return null===b?null===a:DO(b,a)}return!1};c.w=function(a){switch(a){case 0:return this.Og;case 1:return this.Kr;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function kga(a,b,d){a.Og=b;a.Kr=d;return a}c.r=function(){return T(S(),this)};
+function jxa(a){var b=a.Kr.gc(wsa(zt())).wb(),d=HT((new Lc).Of(a.Kr).Dg.Wj().Oc(),m(new p,function(){return function(a){var b=zt();return a.we()===wsa(b)}}(a)),!0);a=m(new p,function(){return function(a){return a.we()}}(a));var e=gua(),d=Ko(d,a,e);a=t();return b.$c(d,a.s)}c.x=function(){return Y(new Z,this)};function ixa(a){return!!(a&&a.$classData&&a.$classData.m.SI)}c.$classData=g({SI:0},!1,"org.nlogo.core.ShapeList",{SI:1,d:1,t:1,q:1,k:1,h:1});function Yl(){this.Ya=this.Ua=0;this.bb=null}
+Yl.prototype=new l;Yl.prototype.constructor=Yl;c=Yl.prototype;c.u=function(){return"SourceLocation"};c.v=function(){return 3};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.aJ?this.Ua===a.Ua&&this.Ya===a.Ya&&this.bb===a.bb:!1};c.w=function(a){switch(a){case 0:return this.Ua;case 1:return this.Ya;case 2:return this.bb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function Xl(a,b,d,e){a.Ua=b;a.Ya=d;a.bb=e;return a}
+c.r=function(){var a=-889275714,a=V().ca(a,this.Ua),a=V().ca(a,this.Ya),a=V().ca(a,fC(V(),this.bb));return V().xb(a,3)};c.x=function(){return Y(new Z,this)};c.$classData=g({aJ:0},!1,"org.nlogo.core.SourceLocation",{aJ:1,d:1,t:1,q:1,k:1,h:1});function v1(){this.f=this.va=null}v1.prototype=new l;v1.prototype.constructor=v1;c=v1.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.m.fJ&&this.va===a.va){var b=this.f;a=a.f;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.va;case 1:return this.f;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Uoa(a,b){var d=new v1;d.va=a;d.f=b;return d}
+c.$classData=g({fJ:0},!1,"org.nlogo.core.StructureDeclarations$Identifier",{fJ:1,d:1,t:1,q:1,k:1,h:1});function Xo(){this.Fq=this.et=this.Fm=this.Pp=this.he=this.dc=null}Xo.prototype=new l;Xo.prototype.constructor=Xo;c=Xo.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.m.jJ){var b=this.dc,d=a.dc;(null===b?null===d:b.o(d))?(b=this.he,d=a.he,b=null===b?null===d:DO(b,d)):b=!1;b?(b=this.Pp,d=a.Pp,b=null===b?null===d:DO(b,d)):b=!1;b?(b=this.Fm,d=a.Fm,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.et,d=a.et,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.Fq,a=a.Fq,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.dc;case 1:return this.he;case 2:return this.Pp;case 3:return this.Fm;case 4:return this.et;case 5:return this.Fq;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Wo(a,b,d,e,f,h,k){a.dc=b;a.he=d;a.Pp=e;a.Fm=f;a.et=h;a.Fq=k;return a}c.$classData=g({jJ:0},!1,"org.nlogo.core.StructureResults",{jJ:1,d:1,t:1,q:1,k:1,h:1});
+function F(){this.Wa=this.Op=0;this.Na=null;this.yr=0;this.ut=this.Ls=null;this.pt=!1;this.p=this.g=null;this.As=this.mt=!1}F.prototype=new l;F.prototype.constructor=F;function D(a,b,d,e,f,h,k,n,r,y,E,Q){a.Op=b;a.Wa=d;a.Na=e;a.yr=f;a.Ls=h;a.ut=k;a.pt=n;a.g=r;a.p=y;a.mt=E;a.As=Q;ZD(Ne(),null===r||4===(r.length|0));Ne();y.z()?b=!0:(b=y.R(),b=4===(b.length|0)||"?"===b);ZD(0,b);return a}c=F.prototype;c.u=function(){return"Syntax"};c.v=function(){return 11};
+function Om(a){for(a=a.Na;!a.z();){var b=a.Y()|0;if(Rm(A(),b,Si()))return!0;a=a.$()}return!1}
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.kJ){if(this.Op===a.Op&&this.Wa===a.Wa)var b=this.Na,d=a.Na,b=null===b?null===d:b.o(d);else b=!1;b&&this.yr===a.yr?(b=this.Ls,d=a.Ls,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.ut,d=a.ut,b=null===b?null===d:b.o(d)):b=!1;b&&this.pt===a.pt&&this.g===a.g?(b=this.p,d=a.p,b=null===b?null===d:b.o(d)):b=!1;return b&&this.mt===a.mt?this.As===a.As:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Op;case 1:return this.Wa;case 2:return this.Na;case 3:return this.yr;case 4:return this.Ls;case 5:return this.ut;case 6:return this.pt;case 7:return this.g;case 8:return this.p;case 9:return this.mt;case 10:return this.As;default:throw(new O).c(""+a);}};function Qm(a){return Im(a)+(Pm(a)?1:0)|0}c.l=function(){return X(W(),this)};function Lm(a){a=PN(a.Na);if(a.z())return!1;a=a.R()|0;return Rm(A(),a,Bj())}
+function Fn(a){var b=a.Ls;return(b.z()?Jm(a.Na):b.R())|0}function Pm(a){return a.Wa!==B()}function Im(a){return Lm(a)?-1+Fn(a)|0:Fn(a)}c.r=function(){var a=-889275714,a=V().ca(a,this.Op),a=V().ca(a,this.Wa),a=V().ca(a,fC(V(),this.Na)),a=V().ca(a,this.yr),a=V().ca(a,fC(V(),this.Ls)),a=V().ca(a,fC(V(),this.ut)),a=V().ca(a,this.pt?1231:1237),a=V().ca(a,fC(V(),this.g)),a=V().ca(a,fC(V(),this.p)),a=V().ca(a,this.mt?1231:1237),a=V().ca(a,this.As?1231:1237);return V().xb(a,11)};
+c.x=function(){return Y(new Z,this)};c.$classData=g({kJ:0},!1,"org.nlogo.core.Syntax",{kJ:1,d:1,t:1,q:1,k:1,h:1});function w1(){this.Tm=this.Nm=this.Qm=this.Mm=this.Pm=0;this.hn=this.gn=!1}w1.prototype=new l;w1.prototype.constructor=w1;c=w1.prototype;c.u=function(){return"WorldDimensions"};c.v=function(){return 7};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.pJ?this.Pm===a.Pm&&this.Mm===a.Mm&&this.Qm===a.Qm&&this.Nm===a.Nm&&this.Tm===a.Tm&&this.gn===a.gn&&this.hn===a.hn:!1};
+c.w=function(a){switch(a){case 0:return this.Pm;case 1:return this.Mm;case 2:return this.Qm;case 3:return this.Nm;case 4:return this.Tm;case 5:return this.gn;case 6:return this.hn;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function hta(a,b,d,e,f,h,k){var n=new w1;n.Pm=a;n.Mm=b;n.Qm=d;n.Nm=e;n.Tm=f;n.gn=h;n.hn=k;return n}
+c.r=function(){var a=-889275714,a=V().ca(a,this.Pm),a=V().ca(a,this.Mm),a=V().ca(a,this.Qm),a=V().ca(a,this.Nm),a=V().ca(a,BE(V(),this.Tm)),a=V().ca(a,this.gn?1231:1237),a=V().ca(a,this.hn?1231:1237);return V().xb(a,7)};c.x=function(){return Y(new Z,this)};c.$classData=g({pJ:0},!1,"org.nlogo.core.WorldDimensions",{pJ:1,d:1,t:1,q:1,k:1,h:1});function x1(){K_.call(this)}x1.prototype=new L_;x1.prototype.constructor=x1;function kxa(){}kxa.prototype=x1.prototype;
+x1.prototype.b=function(){var a=[M(A()),M(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};function Dn(){this.Ii=null;this.yv=this.cF=!1;this.ma=this.fr=this.aA=this.ch=null;this.xa=0}Dn.prototype=new l;Dn.prototype.constructor=Dn;c=Dn.prototype;c.QV=function(a,b,d,e){this.ch=a;this.aA=b;this.fr=d;this.ma=e;return this};c.wc=function(){return this.ma};
+c.YG=function(){if(0===(1&this.xa)<<24>>24){var a=this.ch,b=this.aA,d=t(),a=b.Tc(a,d.s),b=Zl(),d=t();this.Ii=a.yc(b,d.s);this.xa=(1|this.xa)<<24>>24}return this.Ii};c.oo=function(){throw(new Sk).b();};c.Qz=function(){return 0===(1&this.xa)<<24>>24?this.YG():this.Ii};
+function lxa(a){if(0===(2&a.xa)<<24>>24){var b=a.aA.ok(m(new p,function(){return function(a){a=a.sb;var b=ul();return null!==a&&a===b}}(a))).Lg();if(b.z())b=!1;else{var b=b.R(),d=b.sb,e=Zf();null!==d&&d===e?b=!0:(b=b.sb,d=xl(),b=null!==b&&b===d)}a.cF=b;a.xa=(2|a.xa)<<24>>24}return a.cF}c.bF=function(){0===(4&this.xa)<<24>>24&&0===(4&this.xa)<<24>>24&&(this.yv=!1,this.xa=(4|this.xa)<<24>>24);return this.yv};c.Au=function(a){return(new Dn).QV(this.ch,this.aA,this.fr,a)};
+c.zv=function(){return 0===(2&this.xa)<<24>>24?lxa(this):this.cF};c.$classData=g({WQ:0},!1,"org.nlogo.parse.AmbiguousDelayedBlock",{WQ:1,d:1,gR:1,xx:1,kq:1,No:1});function Cn(){this.ma=this.fr=this.sD=this.HD=this.by=this.Fe=this.ch=this.Ii=null;this.xa=this.yv=!1;this.a=0}Cn.prototype=new l;Cn.prototype.constructor=Cn;c=Cn.prototype;c.wc=function(){return this.ma};
+c.YG=function(){if(!this.xa){var a=this.ch,b=this.by,d=t(),a=b.Tc(a,d.s),b=this.HD,d=t(),a=a.yc(b,d.s),b=Zl(),d=t();this.Ii=a.yc(b,d.s);this.xa=!0}return this.Ii};c.oo=function(){throw(new Sk).b();};c.Qz=function(){return this.xa?this.Ii:this.YG()};c.bF=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/DelayedBlock.scala: 56");return this.yv};
+c.Au=function(a){return(new Cn).PV(this.ch,this.Fe,this.by,this.HD,this.sD,this.fr,a)};c.zv=function(){var a=this.by.ok(m(new p,function(){return function(a){a=a.sb;var b=ul();return null!==a&&a===b}}(this))).Lg();if(a.z())a=C();else var a=a.R().sb,b=Zf(),a=(new H).i(null!==a&&a===b);return!(!a.z()&&!a.R())};c.PV=function(a,b,d,e,f,h,k){this.ch=a;this.Fe=b;this.by=d;this.HD=e;this.sD=f;this.fr=h;this.ma=k;b.Rk();this.a=(1|this.a)<<24>>24;this.yv=!0;this.a=(2|this.a)<<24>>24;return this};
+c.$classData=g({XQ:0},!1,"org.nlogo.parse.ArrowLambdaBlock",{XQ:1,d:1,gR:1,xx:1,kq:1,No:1});function Zc(){this.Ef=this.Jm=this.xk=this.Zb=null}Zc.prototype=new l;Zc.prototype.constructor=Zc;c=Zc.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.m.YQ){if(this.Zb===a.Zb)var b=this.xk,d=a.xk,b=null===b?null===d:DO(b,d);else b=!1;b?(b=this.Jm,d=a.Jm,b=null===b?null===d:b.o(d)):b=!1;return b?this.Ef===a.Ef:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Zb;case 1:return this.xk;case 2:return this.Jm;case 3:return this.Ef;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Xc(a,b,d,e,f){a.Zb=b;a.xk=d;a.Jm=e;a.Ef=f;return a}c.$classData=g({YQ:0},!1,"org.nlogo.parse.AstFormat",{YQ:1,d:1,t:1,q:1,k:1,h:1});function SN(){this.jk=null}SN.prototype=new l;SN.prototype.constructor=SN;c=SN.prototype;c.u=function(){return"AstPath"};
+c.v=function(){return 1};function Qc(a,b){a=a.jk;var d=t();return(new SN).Ea(a.yc(b,d.s))}c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.ZQ){var b=this.jk;a=a.jk;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.jk;default:throw(new O).c(""+a);}};
+function Joa(a,b){a:for(;;){if(b.z())return(new H).i(a);var d=b.Y(),e=d;if(a&&a.$classData&&a.$classData.m.KI){var f=a;if(e&&e.$classData&&e.$classData.m.pma&&(e=e.we(),f.Gi.we()===e)){a=f.pe;b=b.$();continue a}}e=d;if(a&&a.$classData&&a.$classData.m.MA&&(f=a,Koa(e))){a=e.Ac;if(a>=f.ng.sa())return C();a=f.ng.X(a);b=b.$();continue a}e=d;if(JE(a)&&(f=a,UN(e))){a=e.Ac;if(a>=f.wa.sa()||!yb(f.wa.X(a)))return C();a=f.wa.X(a);b=b.$();continue a}e=d;if(JE(a)&&(f=a,TN(e))){a=e.Ac;if(a>=f.wa.sa()||!Ab(f.wa.X(a)))return C();
+a=f.wa.X(a);b=b.$();continue a}e=d;if(JE(a)&&(f=a,RN(e))){a=e.Ac;if(a>=f.wa.sa()||!zb(f.wa.X(a)))return C();a=f.wa.X(a).pe;b=b.$();continue a}if(Ab(a)&&UN(d)&&0===d.Ac){a=a.Al;b=b.$();continue a}return C()}}c.l=function(){return"AstPath("+this.jk.Ab(", ")+")"};c.Ea=function(a){this.jk=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({ZQ:0},!1,"org.nlogo.parse.AstPath",{ZQ:1,d:1,t:1,q:1,k:1,h:1});function KN(){this.Qa=null}KN.prototype=new NT;
+KN.prototype.constructor=KN;KN.prototype.y=function(a){return(new MN).Zk(this.Qa,!!a)};KN.prototype.l=function(){return"ReporterContext"};KN.prototype.$classData=g({M2:0},!1,"org.nlogo.parse.ControlFlowVerifier$ReporterContext$",{M2:1,aq:1,d:1,fa:1,k:1,h:1});function y1(){this.Pz=this.t_=null;this.a=0}y1.prototype=new l;y1.prototype.constructor=y1;
+y1.prototype.b=function(){z1=this;toa||(toa=(new vN).b());this.t_=toa;this.a=(1|this.a)<<24>>24;this.Pz=(new VE).Kd("/system/tokens-core.txt","org.nlogo.core.prim.");this.a=(2|this.a)<<24>>24;return this};function Ic(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/parse/FrontEnd.scala: 11");return a.t_}y1.prototype.$classData=g({T2:0},!1,"org.nlogo.parse.FrontEnd$",{T2:1,d:1,rma:1,sma:1,uma:1,dma:1});var z1=void 0;
+function LO(){z1||(z1=(new y1).b());return z1}function yo(){this.zo=this.Yk=this.gp=null;this.nt=!1}yo.prototype=new l;yo.prototype.constructor=yo;c=yo.prototype;c.u=function(){return"Occurrence"};c.v=function(){return 4};function xo(a,b,d,e,f){a.gp=b;a.Yk=d;a.zo=e;a.nt=f;return a}
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.iR){var b=this.gp,d=a.gp;(null===b?null===d:b.o(d))?(b=this.Yk,d=a.Yk,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.zo,d=a.zo,b=null===b?null===d:b.o(d)):b=!1;return b?this.nt===a.nt:!1}return!1};c.w=function(a){switch(a){case 0:return this.gp;case 1:return this.Yk;case 2:return this.zo;case 3:return this.nt;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.gp)),a=V().ca(a,fC(V(),this.Yk)),a=V().ca(a,fC(V(),this.zo)),a=V().ca(a,this.nt?1231:1237);return V().xb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({iR:0},!1,"org.nlogo.parse.StructureChecker$Occurrence",{iR:1,d:1,t:1,q:1,k:1,h:1});function Dp(){this.Kj=this.vj=this.Kc=this.nf=this.je=this.$f=null}Dp.prototype=new l;Dp.prototype.constructor=Dp;c=Dp.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.m.nR){var b=this.$f,d=a.$f;(null===b?null===d:b.o(d))&&this.je===a.je&&this.nf===a.nf?(b=this.Kc,d=a.Kc,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.vj,d=a.vj,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.Kj,a=a.Kj,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.$f;case 1:return this.je;case 2:return this.nf;case 3:return this.Kc;case 4:return this.vj;case 5:return this.Kj;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function Cp(a,b,d,e,f,h,k){a.$f=b;a.je=d;a.nf=e;a.Kc=f;a.vj=h;a.Kj=k;return a}c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({nR:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$ModelCompilation",{nR:1,d:1,t:1,q:1,k:1,h:1});
+function A1(){this.cU=this.bU=this.ah=this.th=this.Kj=this.vj=this.Kc=this.mi=this.nf=this.je=null;this.a=0}A1.prototype=new l;A1.prototype.constructor=A1;c=A1.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.m.oR){if(this.je===a.je)var b=this.nf,d=a.nf,b=null===b?null===d:b.o(d);else b=!1;b?(b=this.mi,d=a.mi,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Kc,d=a.Kc,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.vj,d=a.vj,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Kj,d=a.Kj,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.th,d=a.th,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.ah,a=a.ah,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.je;case 1:return this.nf;case 2:return this.mi;case 3:return this.Kc;case 4:return this.vj;case 5:return this.Kj;case 6:return this.th;case 7:return this.ah;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function Nea(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 67");return a.bU}
+function Jfa(a,b,d,e,f,h,k,n){var r=new A1;r.je=a;r.nf=b;r.mi=d;r.Kc=e;r.vj=f;r.Kj=h;r.th=k;r.ah=n;r.bU=f.z()?G(t(),u()):f.R();r.a=(1|r.a)<<24>>24;r.cU=h.z()?G(t(),u()):h.R();r.a=(2|r.a)<<24>>24;return r}c.Oz=function(){var a=this.je,b=this.Kc.wb(),d=this.nf,d=d.z()?"":d.R(),e=this.th;e.z()?e=C():(e=e.R(),e=(new H).i(e.wb()));var e=e.z()?ssa():e.R(),f=this.ah;f.z()?f=C():(f=f.R(),f=(new H).i(f.wb()));var f=f.z()?qsa():f.R(),h=G(t(),u());return Rj(new Pj,a,b,d,"NetLogo 6.1",e,f,h)};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Oea(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 68");return a.cU}c.$classData=g({oR:0},!1,"org.nlogo.tortoise.compiler.CompilationRequest",{oR:1,d:1,t:1,q:1,k:1,h:1});function xV(){this.F_=this.dc=this.he=this.$f=this.Kc=this.Xw=this.Vv=this.Cu=this.Du=null;this.a=0}xV.prototype=new l;xV.prototype.constructor=xV;c=xV.prototype;
+c.u=function(){return"CompiledModel"};function Iea(a,b){return mxa(a).y(m(new p,function(a,b){return function(f){var h=nxa(a),k=oxa(a),n=Zp();return OO(f,b,!0,h,k,!1,n)}}(a,b)))}c.v=function(){return 3};function Jea(a,b){return mxa(a).y(m(new p,function(a,b){return function(f){var h=nxa(a),k=oxa(a),n=Zp();return OO(f,b,!1,h,k,!1,n)}}(a,b)))}
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.pR){if(this.Du===a.Du)var b=this.Cu,d=a.Cu,b=null===b?null===d:b.o(d);else b=!1;return b?this.Vv===a.Vv:!1}return!1};function oxa(a){if(0===(16&a.a)<<24>>24)throw(new v).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.Du;case 1:return this.Cu;case 2:return this.Vv;default:throw(new O).c(""+a);}};
+function rta(a){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompiledModel.scala: 23");return a.$f}c.l=function(){return X(W(),this)};function mxa(a){if(0===(32&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompiledModel.scala: 37");return a.F_}c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function nxa(a){if(0===(8&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompiledModel.scala: 23");return a.he}
+function Eta(a,b,d,e){a.Du=b;a.Cu=d;a.Vv=e;if(null!==d)b=(new B1).Hm(d.Kc,d.$f,d.he,d.dc);else throw(new q).i(d);a.Xw=b;a.a=(1|a.a)<<24>>24;a.Kc=a.Xw.Oa;a.a=(2|a.a)<<24>>24;a.$f=a.Xw.fb;a.a=(4|a.a)<<24>>24;a.he=a.Xw.Gf;a.a=(8|a.a)<<24>>24;a.dc=a.Xw.ds;a.a=(16|a.a)<<24>>24;a.F_=m(new p,function(a){return function(b){var d;Xp();var e=a.Vv;try{fq();var r=b.y(e);d=oq().y(r)}catch(y){if($p(y))fq(),d=gq(Vp(),y);else throw y;}return d}}(a));a.a=(32|a.a)<<24>>24;return a}
+c.$classData=g({pR:0},!1,"org.nlogo.tortoise.compiler.CompiledModel",{pR:1,d:1,t:1,q:1,k:1,h:1});function C1(){this.St=this.xt=null}C1.prototype=new l;C1.prototype.constructor=C1;c=C1.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.m.qR){var b=this.xt,d=a.xt;if(null===b?null===d:b.o(d))return b=this.St,a=a.St,null===b?null===a:b.o(a)}return!1};function Sga(a,b){var d=new C1;d.xt=a;d.St=b;return d}
+c.w=function(a){switch(a){case 0:return this.xt;case 1:return this.St;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({qR:0},!1,"org.nlogo.tortoise.compiler.CompiledPen",{qR:1,d:1,t:1,q:1,k:1,h:1});function Vt(){this.gq=this.lj=null}Vt.prototype=new l;Vt.prototype.constructor=Vt;function pxa(){}c=pxa.prototype=Vt.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.m.nC){var b=this.lj,d=a.lj;if(null===b?null===d:b.o(d))return b=this.gq,a=a.gq,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.lj;case 1:return this.gq;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.jv=function(a,b){this.lj=a;this.gq=b;return this};c.x=function(){return Y(new Z,this)};
+c.$classData=g({nC:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget",{nC:1,d:1,t:1,q:1,k:1,h:1});function JO(){this.Tx=this.Sx=this.Aj=null;this.xa=!1;this.a=0}JO.prototype=new l;JO.prototype.constructor=JO;JO.prototype.b=function(){return this};function ega(a){null===a.Sx&&null===a.Sx&&(a.Sx=(new FP).JE(a));return a.Sx}function ed(a){a.xa||a.xa||(a.Aj=NO(Yp()),a.xa=!0);return a.Aj}JO.prototype.$classData=g({q4:0},!1,"org.nlogo.tortoise.compiler.Compiler$$anon$1",{q4:1,d:1,Cma:1,Bma:1,wma:1,Dma:1});
+function pr(){this.Wo=0;this.Bc=null}pr.prototype=new l;pr.prototype.constructor=pr;c=pr.prototype;c.u=function(){return"CompilerContext"};c.v=function(){return 2};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.rR?this.Wo===a.Wo&&this.Bc===a.Bc:!1};c.w=function(a){switch(a){case 0:return this.Wo;case 1:return this.Bc;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.yp=function(a,b){this.Wo=a;this.Bc=b;return this};
+c.c=function(a){pr.prototype.yp.call(this,0,a);return this};c.r=function(){var a=-889275714,a=V().ca(a,this.Wo),a=V().ca(a,fC(V(),this.Bc));return V().xb(a,2)};c.x=function(){return Y(new Z,this)};c.$classData=g({rR:0},!1,"org.nlogo.tortoise.compiler.CompilerContext",{rR:1,d:1,t:1,q:1,k:1,h:1});function PO(){this.up=!1;this.yt=this.rr=null;this.Np=!1}PO.prototype=new l;PO.prototype.constructor=PO;c=PO.prototype;c.u=function(){return"CompilerFlags"};c.v=function(){return 4};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.sR?this.up===a.up&&this.rr===a.rr&&this.yt===a.yt?this.Np===a.Np:!1:!1};c.w=function(a){switch(a){case 0:return this.up;case 1:return this.rr;case 2:return this.yt;case 3:return this.Np;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function spa(a,b,d,e,f){a.up=b;a.rr=d;a.yt=e;a.Np=f;return a}
+c.r=function(){var a=-889275714,a=V().ca(a,this.up?1231:1237),a=V().ca(a,fC(V(),this.rr)),a=V().ca(a,fC(V(),this.yt)),a=V().ca(a,this.Np?1231:1237);return V().xb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({sR:0},!1,"org.nlogo.tortoise.compiler.CompilerFlags",{sR:1,d:1,t:1,q:1,k:1,h:1});function D1(){this.dc=this.he=this.$f=this.wv=this.Kc=this.Fs=null}D1.prototype=new l;D1.prototype.constructor=D1;c=D1.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.m.tR){var b=this.Fs,d=a.Fs;(null===b?null===d:b.o(d))?(b=this.Kc,d=a.Kc,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.wv,d=a.wv,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.$f,d=a.$f,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.he,d=a.he,b=null===b?null===d:DO(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.Fs;case 1:return this.Kc;case 2:return this.wv;case 3:return this.$f;case 4:return this.he;case 5:return this.dc;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};function upa(a,b,d,e,f,h){var k=new D1;k.Fs=a;k.Kc=b;k.wv=d;k.$f=e;k.he=f;k.dc=h;return k}c.x=function(){return Y(new Z,this)};c.$classData=g({tR:0},!1,"org.nlogo.tortoise.compiler.CompilerLike$Compilation",{tR:1,d:1,t:1,q:1,k:1,h:1});
+function E1(){this.mi=this.ah=this.th=this.Kc=this.nf=this.je=null}E1.prototype=new l;E1.prototype.constructor=E1;c=E1.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.m.uR){if(this.je===a.je)var b=this.nf,d=a.nf,b=null===b?null===d:b.o(d);else b=!1;b?(b=this.Kc,d=a.Kc,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.th,d=a.th,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.ah,d=a.ah,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.mi,a=a.mi,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.je;case 1:return this.nf;case 2:return this.Kc;case 3:return this.th;case 4:return this.ah;case 5:return this.mi;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function Mta(a,b,d,e,f,h){var k=new E1;k.je=a;k.nf=b;k.Kc=d;k.th=e;k.ah=f;k.mi=h;return k}
+c.Oz=function(){var a=this.je,b=this.Kc.wb(),d=this.nf,d=d.z()?"":d.R(),e=this.th;e.z()?e=C():(e=e.R(),e=(new H).i(e.wb()));var e=e.z()?ssa():e.R(),f=this.ah;f.z()?f=C():(f=f.R(),f=(new H).i(f.wb()));var f=f.z()?qsa():f.R(),h=this.mi,h=h.z()?"NetLogo 6.1.0":h.R(),k=G(t(),u());return Rj(new Pj,a,b,d,h,e,f,k)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({uR:0},!1,"org.nlogo.tortoise.compiler.ExportRequest",{uR:1,d:1,t:1,q:1,k:1,h:1});
+function lr(){this.Xx=this.va=this.cw=null}lr.prototype=new l;lr.prototype.constructor=lr;c=lr.prototype;c.u=function(){return"ExtensionPrim"};c.v=function(){return 3};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.vR?this.cw===a.cw&&this.va===a.va?this.Xx===a.Xx:!1:!1};c.w=function(a){switch(a){case 0:return this.cw;case 1:return this.va;case 2:return this.Xx;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};function hfa(a,b,d,e){a.cw=b;a.va=d;a.Xx=e;return a}c.$classData=g({vR:0},!1,"org.nlogo.tortoise.compiler.ExtensionPrim",{vR:1,d:1,t:1,q:1,k:1,h:1});function Ny(){}Ny.prototype=new NT;Ny.prototype.constructor=Ny;Ny.prototype.b=function(){return this};Ny.prototype.y=function(a){return(new iq).c(a)};Ny.prototype.l=function(){return"FailureString"};Ny.prototype.$classData=g({C4:0},!1,"org.nlogo.tortoise.compiler.FailureString$",{C4:1,aq:1,d:1,fa:1,k:1,h:1});
+var Aja=void 0;function uP(){$_.call(this)}uP.prototype=new a0;uP.prototype.constructor=uP;uP.prototype.b=function(){L(this);return this};uP.prototype.$classData=g({GR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patcheast",{GR:1,Oo:1,d:1,aa:1,A:1,E:1});function oP(){$_.call(this)}oP.prototype=new a0;oP.prototype.constructor=oP;oP.prototype.b=function(){L(this);return this};oP.prototype.$classData=g({HR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchhereinternal",{HR:1,Oo:1,d:1,aa:1,A:1,E:1});
+function wP(){$_.call(this)}wP.prototype=new a0;wP.prototype.constructor=wP;wP.prototype.b=function(){L(this);return this};wP.prototype.$classData=g({IR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchne",{IR:1,Oo:1,d:1,aa:1,A:1,E:1});function qP(){$_.call(this)}qP.prototype=new a0;qP.prototype.constructor=qP;qP.prototype.b=function(){L(this);return this};qP.prototype.$classData=g({JR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchnorth",{JR:1,Oo:1,d:1,aa:1,A:1,E:1});
+function tP(){$_.call(this)}tP.prototype=new a0;tP.prototype.constructor=tP;tP.prototype.b=function(){L(this);return this};tP.prototype.$classData=g({KR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchnw",{KR:1,Oo:1,d:1,aa:1,A:1,E:1});function vP(){$_.call(this)}vP.prototype=new a0;vP.prototype.constructor=vP;vP.prototype.b=function(){L(this);return this};vP.prototype.$classData=g({LR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchse",{LR:1,Oo:1,d:1,aa:1,A:1,E:1});
+function pP(){$_.call(this)}pP.prototype=new a0;pP.prototype.constructor=pP;pP.prototype.b=function(){L(this);return this};pP.prototype.$classData=g({MR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchsouth",{MR:1,Oo:1,d:1,aa:1,A:1,E:1});function sP(){$_.call(this)}sP.prototype=new a0;sP.prototype.constructor=sP;sP.prototype.b=function(){L(this);return this};sP.prototype.$classData=g({NR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchsw",{NR:1,Oo:1,d:1,aa:1,A:1,E:1});
+function rP(){$_.call(this)}rP.prototype=new a0;rP.prototype.constructor=rP;rP.prototype.b=function(){L(this);return this};rP.prototype.$classData=g({OR:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchwest",{OR:1,Oo:1,d:1,aa:1,A:1,E:1});function et(){this.ot=!1;this.tr=null}et.prototype=new l;et.prototype.constructor=et;c=et.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.m.RR&&this.ot===a.ot){var b=this.tr;a=a.tr;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.ot;case 1:return this.tr;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){var a=-889275714,a=V().ca(a,this.ot?1231:1237),a=V().ca(a,fC(V(),this.tr));return V().xb(a,2)};c.x=function(){return Y(new Z,this)};function Xfa(a,b,d){a.ot=b;a.tr=d;return a}
+c.$classData=g({RR:0},!1,"org.nlogo.tortoise.compiler.ProcedureContext",{RR:1,d:1,t:1,q:1,k:1,h:1});function F1(){}F1.prototype=new NT;F1.prototype.constructor=F1;F1.prototype.b=function(){return this};F1.prototype.y=function(a){return(new vu).hb(a|0)};F1.prototype.l=function(){return"JsInt"};F1.prototype.$classData=g({X6:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsInt$",{X6:1,aq:1,d:1,fa:1,k:1,h:1});var qxa=void 0;function Awa(){qxa||(qxa=(new F1).b());return qxa}function G1(){}
+G1.prototype=new NT;G1.prototype.constructor=G1;G1.prototype.b=function(){return this};G1.prototype.y=function(a){return(new dr).Bh(a)};G1.prototype.l=function(){return"JsDefined"};G1.prototype.$classData=g({X8:0},!1,"play.api.libs.json.JsDefined$",{X8:1,aq:1,d:1,fa:1,k:1,h:1});var rxa=void 0;function H1(){rxa||(rxa=(new G1).b())}function I1(){this.aj=null}I1.prototype=new l;I1.prototype.constructor=I1;c=I1.prototype;c.u=function(){return"JsLookup"};c.v=function(){return 1};
+c.o=function(a){var b;cr();b=this.aj;a&&a.$classData&&a.$classData.m.qS?(a=null===a?null:a.aj,b=null===b?null===a:b.o(a)):b=!1;return b};c.w=function(a){a:switch(cr(),a){case 0:a=this.aj;break a;default:throw(new O).c(""+a);}return a};c.l=function(){cr();var a=this.aj;return X(W(),sxa(a))};function sxa(a){var b=new I1;b.aj=a;return b}c.r=function(){return this.aj.r()};c.x=function(){cr();return Y(new Z,sxa(this.aj))};c.$classData=g({qS:0},!1,"play.api.libs.json.JsLookup",{qS:1,d:1,t:1,q:1,k:1,h:1});
+function J1(){}J1.prototype=new NT;J1.prototype.constructor=J1;J1.prototype.b=function(){return this};J1.prototype.y=function(a){return sxa(a)};J1.prototype.l=function(){return"JsLookup"};
+function fr(a,b,d){if(Ew(b)){a=null===b?null:b.W;if(ex(a)){a=txa(a);a=pd(new rd,a).Uc(d);if(Xj(a))return a.Q;if(C()===a)throw(new Bu).c(""+d);throw(new q).i(a);}throw pg(qg(),(new nr).c(lla(nla(),a," is not a JsObject")));}if(b&&b.$classData&&b.$classData.m.HC)throw qg(),d=se(b.mp),pg(0,(new nr).c(""+d));throw(new q).i(b);}
+function br(a,b,d){var e=!1,f=null;if(Ew(b)){var e=!0,h=f=null===b?null:b.W;if(ex(h))return b=txa(h).gc(d),b.z()?b=C():(b=b.R(),b=(new H).i((new dr).Bh(b))),b.z()?(new yX).nc(I(function(a,b,d){return function(){return Jv((new Kv).Ea((new J).j(["'","' is undefined on object: ",""])),(new J).j([d,b]))}}(a,h,d))):b.R()}return e?(new yX).nc(I(function(a,b){return function(){return Jv((new Kv).Ea((new J).j([""," is not an object"])),(new J).j([b]))}}(a,f))):b}
+J1.prototype.$classData=g({$8:0},!1,"play.api.libs.json.JsLookup$",{$8:1,aq:1,d:1,fa:1,k:1,h:1});var uxa=void 0;function cr(){uxa||(uxa=(new J1).b());return uxa}function K1(){this.dh=null}K1.prototype=new l;K1.prototype.constructor=K1;function vxa(){}c=vxa.prototype=K1.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.m.FC){var b=this.dh;a=a.dh;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.dh;default:throw(new O).c(""+a);}};c.l=function(){return ec(this.dh,"","","")};c.br=function(a){this.dh=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({FC:0},!1,"play.api.libs.json.JsPath",{FC:1,d:1,t:1,q:1,k:1,h:1});function AX(){this.wa=this.Om=null;this.xa=!1}AX.prototype=new l;AX.prototype.constructor=AX;c=AX.prototype;c.u=function(){return"JsonValidationError"};c.v=function(){return 2};
+c.tv=function(a,b){this.Om=a;this.wa=b;return this};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.vS){var b=this.Om,d=a.Om;if(null===b?null===d:b.o(d))return b=this.wa,a=a.wa,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Om;case 1:return this.wa;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({vS:0},!1,"play.api.libs.json.JsonValidationError",{vS:1,d:1,t:1,q:1,k:1,h:1});function L1(){}L1.prototype=new l;L1.prototype.constructor=L1;function wxa(){}wxa.prototype=L1.prototype;function sz(){}sz.prototype=new Lwa;sz.prototype.constructor=sz;sz.prototype.b=function(){z0.prototype.b.call(this);return this};sz.prototype.$classData=g({u9:0},!1,"scalaz.$eq$eq$greater$greater$",{u9:1,Lna:1,Mna:1,Nna:1,Ona:1,d:1});var Wja=void 0;
+function xxa(a,b,d){return a.Jf(I(function(a,b){return function(){return b}}(a,b)),I(function(a,b){return function(){return a.Yd(I(function(a,b){return function(){return b}}(a,b)))}}(a,d)))}function Gy(a,b,d,e){e=a.Yd(I(function(a,b){return function(){return b}}(a,e)));return Nua(a,b,d,e)}function ER(a){a.Fh(yxa(a))}function M1(){this.da=null}M1.prototype=new l;M1.prototype.constructor=M1;function yxa(a){var b=new M1;if(null===a)throw pg(qg(),null);b.da=a;return b}
+M1.prototype.$classData=g({y9:0},!1,"scalaz.Applicative$$anon$6",{y9:1,d:1,$C:1,rs:1,Qk:1,sj:1});function FR(a){a.Pj(zxa(a))}function N1(a,b,d){ux();b=(new vx).nc(b);return a.yh(se(d),m(new p,function(a,b){return function(d){return a.hd(U(b),d)}}(a,b)))}function O1(a,b){return a.yh(b,m(new p,function(){return function(a){return a}}(a)))}function P1(){this.da=null}P1.prototype=new l;P1.prototype.constructor=P1;function zxa(a){var b=new P1;if(null===a)throw pg(qg(),null);b.da=a;return b}
+P1.prototype.$classData=g({L9:0},!1,"scalaz.Bind$$anon$4",{L9:1,d:1,aD:1,rs:1,Qk:1,sj:1});function Q1(){this.da=null}Q1.prototype=new l;Q1.prototype.constructor=Q1;function Qua(a){var b=new Q1;if(null===a)throw pg(qg(),null);b.da=a;return b}Q1.prototype.$classData=g({S9:0},!1,"scalaz.Comonad$$anon$2",{S9:1,d:1,vpa:1,yca:1,Qk:1,sj:1});
+function Axa(a,b,d){return Gy(a.da,d,b,ub(new vb,function(a){return function(b,d){return a.rx.Jf(I(function(a,b){return function(){return b}}(a,d)),I(function(a,b){return function(){return b}}(a,b)))}}(a)))}function R1(){this.vc=null}R1.prototype=new l;R1.prototype.constructor=R1;function Md(a,b){Id();a=Fia(a.vc,I(function(a,b){return function(){return b.vc}}(a,b)));return Kd(a)}c=R1.prototype;c.u=function(){return"Cord"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.CS?this.vc===a.vc:!1};c.w=function(a){switch(a){case 0:return this.vc;default:throw(new O).c(""+a);}};c.l=function(){var a=(new Bl).hb(this.vc.st()|0);this.vc.ta(m(new p,function(a,d){return function(a){var b=d.Bb;b.Yb=""+b.Yb+a}}(this,a)));return a.Bb.Yb};function Gqa(a,b){Id();a=yx(a.vc,b);return Kd(a)}function Kd(a){var b=new R1;b.vc=a;return b}c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({CS:0},!1,"scalaz.Cord",{CS:1,d:1,t:1,q:1,k:1,h:1});function kx(){}kx.prototype=new l;kx.prototype.constructor=kx;c=kx.prototype;c.Gt=function(){};c.nw=function(){};c.Zp=function(){};c.LE=function(){hx(this);Bd(this);iz(this);return this};c.$classData=g({$9:0},!1,"scalaz.DisjunctionInstances2$$anon$2",{$9:1,d:1,Dx:1,oq:1,pq:1,fu:1});function S1(){this.nn=null}S1.prototype=new l;S1.prototype.constructor=S1;c=S1.prototype;c.sc=function(a,b){return Bia(this,a,b)};
+function Xia(a){var b=new S1;b.nn=a;Gd(b);By(b);return b}c.Ee=function(){return this.nn.Ee()};c.wf=function(){};c.Rf=function(){};c.$classData=g({c$:0},!1,"scalaz.DualInstances$$anon$1",{c$:1,d:1,Yma:1,Uf:1,If:1,Zma:1});function T1(){}T1.prototype=new Hwa;T1.prototype.constructor=T1;function Bxa(){}Bxa.prototype=T1.prototype;function Zx(){this.Ar=null}Zx.prototype=new l;Zx.prototype.constructor=Zx;c=Zx.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.m.FS){var b=this.Ar;a=a.Ar;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Ar;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Kn=function(a){this.Ar=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({FS:0},!1,"scalaz.Endo",{FS:1,d:1,t:1,q:1,k:1,h:1});function U1(){}U1.prototype=new l;U1.prototype.constructor=U1;
+function Cxa(){}Cxa.prototype=U1.prototype;U1.prototype.wb=function(){var a=u(),b=Mp(this);a:for(;;){if(!Qp(b)){if(Op(b)){a=Og(new Pg,b.gd,a);b=b.ld;continue a}throw(new q).i(b);}return a}};function Bja(a,b,d){for(;;)if(Op(a)){var e=a;a=e.ld;b=(new Pp).Vb(d.y(e.gd),b)}else{if(Qp(a))return b;throw(new q).i(a);}}U1.prototype.l=function(){Np();Lx();var a=(new Mx).b(),b=new LR;b.is=a;Nd(b);return b.$d(this).l()};
+function Mp(a){var b=Np().Wd;for(;;)if(Op(a))b=(new Pp).Vb(a.gd,b),a=a.ld;else{if(Qp(a))return b;throw(new q).i(a);}}function Dxa(a,b,d){for(;;){if(Qp(a))return b;if(Op(a)){var e=a;a=e.ld;b=sb(d,b,e.gd)}else throw(new q).i(a);}}function zja(a,b){a=Mp(a);a:for(;;){if(!Qp(a)){if(Op(a)){b=(new Pp).Vb(a.gd,b);a=a.ld;continue a}throw(new q).i(a);}return b}}function V1(){this.Wd=this.aF=null}V1.prototype=new Cqa;V1.prototype.constructor=V1;
+V1.prototype.b=function(){BR.prototype.b.call(this);W1=this;this.Wd=(new X1).b();(new SX).b();return this};V1.prototype.$classData=g({x$:0},!1,"scalaz.IList$",{x$:1,ona:1,nna:1,d:1,k:1,h:1});var W1=void 0;function Np(){W1||(W1=(new V1).b());return W1}function Y1(){}Y1.prototype=new Kwa;Y1.prototype.constructor=Y1;function Exa(){}Exa.prototype=Y1.prototype;function My(){this.Sc=this.Ic=null}My.prototype=new l;My.prototype.constructor=My;c=My.prototype;c.u=function(){return"OneAnd"};c.v=function(){return 2};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.VS?Em(Fm(),this.Ic,a.Ic)&&Em(Fm(),this.Sc,a.Sc):!1};c.e=function(a,b){this.Ic=a;this.Sc=b;return this};c.w=function(a){switch(a){case 0:return this.Ic;case 1:return this.Sc;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({VS:0},!1,"scalaz.OneAnd",{VS:1,d:1,t:1,q:1,k:1,h:1});function Z1(){}Z1.prototype=new Mwa;
+Z1.prototype.constructor=Z1;function Fxa(){}Fxa.prototype=Z1.prototype;function $1(){}$1.prototype=new Nwa;$1.prototype.constructor=$1;function a2(){}a2.prototype=$1.prototype;function b2(){}b2.prototype=new Jwa;b2.prototype.constructor=b2;function Gxa(){}Gxa.prototype=b2.prototype;
+function c2(a,b,d,e){Hxa||(Hxa=(new d2).b());e2();var f=kja(),f=Ixa(f);e=Jxa(f,e);a=m(new p,function(a,b,d,e){return function(f){var E=f2(a,b,m(new p,function(a,b){return function(a){a=b.y(a);var d=Zy().ug;e2();return jja(a,d)}}(a,d)),e);e2();var Q=kja(),E=py(E,f,Q);f=Kxa().cv;a:for(;;){E=Yia(E,f);if(g2(E)){E=se(E.ga);continue a}if(!h2(E))throw(new q).i(E);return E.um}}}(a,b,d,e));b=Zy().ug;return $y(new az,a,b)}function Jy(a){a.cm(Lxa(a))}function Mxa(a,b,d,e){return py(a.sl(b,e),d,Zy().ug)}
+function i2(a,b,d,e){var f=e.Ee();return j2(a,b,f,ub(new vb,function(a,b,d){return function(e,f){return d.sc(e,I(function(a,b,d){return function(){return b.y(d)}}(a,b,f)))}}(a,d,e))).ja()}function f2(a,b,d,e){var f=new ez;f.ZH=e;if(null===a)throw pg(qg(),null);f.da=a;return f.da.rl(b,d,f.ZH)}function j2(a,b,d,e){return Mxa(a,b,d,m(new p,function(a,b){return function(d){fva||(fva=(new hY).b());return Nja(fva,m(new p,function(a,b,d){return function(a){return sb(b,a,d)}}(a,b,d)))}}(a,e)))}
+function k2(){this.da=null}k2.prototype=new l;k2.prototype.constructor=k2;function Lxa(a){var b=new k2;if(null===a)throw pg(qg(),null);b.da=a;return b}k2.prototype.$classData=g({Iaa:0},!1,"scalaz.Traverse$$anon$6",{Iaa:1,d:1,Sca:1,Qk:1,sj:1,bD:1});function l2(){}l2.prototype=new Owa;l2.prototype.constructor=l2;function Nxa(){}Nxa.prototype=l2.prototype;function m2(){}m2.prototype=new l;m2.prototype.constructor=m2;function Oxa(){}Oxa.prototype=m2.prototype;
+function kua(a,b){if(P(a))return(new Kp).i(b.y(a.ga));if(Hp(a))return a;throw(new q).i(a);}m2.prototype.Ow=function(){if(Hp(this))return C();if(P(this))return(new H).i(this.ga);throw(new q).i(this);};
+function Rga(a,b,d){b=(new w).e(a,se(b));var e=b.ub,f=b.Fb;if(P(e)&&(e=e.ga,P(f)))return(new Kp).i(f.ga.y(e));f=b.ub;e=b.Fb;if(Hp(f)&&P(e))return f;f=b.Fb;if(P(b.ub)&&Hp(f))return f;e=b.ub;f=b.Fb;if(Hp(e)&&(e=e.fc,Hp(f)))return(new Ip).i(d.sc(f.fc,I(function(a,b){return function(){return b}}(a,e))));throw(new q).i(b);}function n2(){}n2.prototype=new Pwa;n2.prototype.constructor=n2;function Pxa(){}Pxa.prototype=n2.prototype;function hz(){}hz.prototype=new l;hz.prototype.constructor=hz;
+hz.prototype.Gt=function(){};hz.prototype.nw=function(){};hz.prototype.Zp=function(){};hz.prototype.$classData=g({Saa:0},!1,"scalaz.ValidationInstances3$$anon$3",{Saa:1,d:1,Dx:1,oq:1,pq:1,fu:1});function o2(){this.UD=null}o2.prototype=new l;o2.prototype.constructor=o2;c=o2.prototype;c.gi=function(){};c.$d=function(a){return Hd(this,a)};c.jg=function(){};c.rh=function(a){return""+!!a};c.nh=function(){};c.zg=function(){};c.fe=function(){Dd(this);Qy(this);rR(this);Nd(this);return this};
+function Ija(){var a;a=Uy();null===Uy().wu&&null===Uy().wu&&(Uy().wu=(new o2).fe(a));a=Uy().wu;if(null===a.UD&&null===a.UD){var b=new iY;Gd(b);By(b);a.UD=b}}c.$classData=g({pba:0},!1,"scalaz.std.AnyValInstances$booleanInstance$",{pba:1,d:1,pi:1,Fg:1,qg:1,xh:1});function p2(){}p2.prototype=new l;p2.prototype.constructor=p2;c=p2.prototype;c.Yg=function(){hx(this);Bd(this);iz(this);return this};c.Gt=function(){};c.nw=function(){};c.Zp=function(){};
+c.$classData=g({Aba:0},!1,"scalaz.std.EitherInstances$$anon$4",{Aba:1,d:1,Dx:1,oq:1,pq:1,fu:1});function q2(){}q2.prototype=new l;q2.prototype.constructor=q2;c=q2.prototype;c.Gt=function(){};c.nw=function(){};c.Zp=function(){};c.ov=function(){hx(this);Bd(this);iz(this);return this};c.$classData=g({Xba:0},!1,"scalaz.std.TupleInstances1$$anon$23",{Xba:1,d:1,Dx:1,oq:1,pq:1,fu:1});function r2(){this.cv=null}r2.prototype=new l;r2.prototype.constructor=r2;r2.prototype.b=function(){s2=this;Xqa(this);return this};
+r2.prototype.$Y=function(a){this.cv=a};r2.prototype.aZ=function(){};r2.prototype.$classData=g({dca:0},!1,"scalaz.std.function$",{dca:1,d:1,Bba:1,Cba:1,Fba:1,Gba:1});var s2=void 0;function Kxa(){s2||(s2=(new r2).b());return s2}function t2(){}t2.prototype=new l;t2.prototype.constructor=t2;t2.prototype.Gt=function(){};t2.prototype.nw=function(){};t2.prototype.Zp=function(){};t2.prototype.$classData=g({hca:0},!1,"scalaz.std.java.util.MapInstances$$anon$1",{hca:1,d:1,Dx:1,oq:1,pq:1,fu:1});
+function Iz(){this.W=this.va=null;this.Rv=Rz()}Iz.prototype=new l;Iz.prototype.constructor=Iz;c=Iz.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.m.eT){if(this.va===a.va)var b=this.W,d=a.W,b=null===b?null===d:b.o(d);else b=!1;if(b)return b=this.Rv,d=b.oa,a=a.Rv,b.ia===a.ia&&d===a.oa}return!1};
+c.w=function(a){switch(a){case 0:return this.va;case 1:return this.W;case 2:return this.Rv;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.va)),a=V().ca(a,fC(V(),this.W)),a=V().ca(a,DE(V(),this.Rv));return V().xb(a,3)};c.x=function(){return Y(new Z,this)};c.$classData=g({eT:0},!1,"utest.framework.Result",{eT:1,d:1,t:1,q:1,k:1,h:1});function Jz(){this.Ad=this.W=null}Jz.prototype=new l;Jz.prototype.constructor=Jz;c=Jz.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.m.fT&&Em(Fm(),this.W,a.W)){var b=this.Ad;a=a.Ad;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.W;case 1:return this.Ad;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.sa=function(){return this.Ad.Ib(1,ub(new vb,function(){return function(a,b){return(a|0)+b.sa()|0}}(this)))|0};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.$classData=g({fT:0},!1,"utest.framework.Tree",{fT:1,d:1,t:1,q:1,k:1,h:1});function YT(){NS.call(this)}YT.prototype=new N0;YT.prototype.constructor=YT;YT.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};function u2(a){return!!(a&&a.$classData&&a.$classData.m.kW)}YT.prototype.$classData=g({kW:0},!1,"java.lang.ArithmeticException",{kW:1,ge:1,Wc:1,tc:1,d:1,h:1});function Re(){NS.call(this)}Re.prototype=new N0;Re.prototype.constructor=Re;
+function v2(){}v2.prototype=Re.prototype;Re.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};Re.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};Re.prototype.$classData=g({Ui:0},!1,"java.lang.IllegalArgumentException",{Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function me(){NS.call(this)}me.prototype=new N0;me.prototype.constructor=me;function Qxa(){}Qxa.prototype=me.prototype;me.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};
+me.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};me.prototype.$q=function(a,b){NS.prototype.ic.call(this,a,b,0,!0);return this};me.prototype.$classData=g({mW:0},!1,"java.lang.IllegalStateException",{mW:1,ge:1,Wc:1,tc:1,d:1,h:1});function O(){NS.call(this)}O.prototype=new N0;O.prototype.constructor=O;function Rxa(){}Rxa.prototype=O.prototype;O.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};
+O.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};O.prototype.$classData=g({oF:0},!1,"java.lang.IndexOutOfBoundsException",{oF:1,ge:1,Wc:1,tc:1,d:1,h:1});function WD(){NS.call(this)}WD.prototype=new Swa;WD.prototype.constructor=WD;WD.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};WD.prototype.$classData=g({Nda:0},!1,"java.lang.InstantiationException",{Nda:1,Zda:1,Wc:1,tc:1,d:1,h:1});function w2(){}w2.prototype=new hwa;
+w2.prototype.constructor=w2;w2.prototype.b=function(){return this};w2.prototype.$classData=g({Rda:0},!1,"java.lang.JSConsoleBasedPrintStream$DummyOutputStream",{Rda:1,Q_:1,d:1,ks:1,Gv:1,lI:1});function P0(){NS.call(this)}P0.prototype=new N0;P0.prototype.constructor=P0;P0.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};P0.prototype.$classData=g({Vda:0},!1,"java.lang.NegativeArraySizeException",{Vda:1,ge:1,Wc:1,tc:1,d:1,h:1});function XD(){NS.call(this)}XD.prototype=new Swa;
+XD.prototype.constructor=XD;XD.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};XD.prototype.$classData=g({Wda:0},!1,"java.lang.NoSuchMethodException",{Wda:1,Zda:1,Wc:1,tc:1,d:1,h:1});function Ce(){NS.call(this)}Ce.prototype=new N0;Ce.prototype.constructor=Ce;Ce.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};Ce.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};
+Ce.prototype.$classData=g({Xda:0},!1,"java.lang.NullPointerException",{Xda:1,ge:1,Wc:1,tc:1,d:1,h:1});function Sk(){NS.call(this)}Sk.prototype=new N0;Sk.prototype.constructor=Sk;Sk.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};Sk.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};Sk.prototype.$classData=g({hea:0},!1,"java.lang.UnsupportedOperationException",{hea:1,ge:1,Wc:1,tc:1,d:1,h:1});function x2(){}x2.prototype=new rva;
+x2.prototype.constructor=x2;function Sxa(){}Sxa.prototype=x2.prototype;x2.prototype.o=function(a){return a===this?!0:a&&a.$classData&&a.$classData.m.rF?a.Da()===this.Da()&&this.EU(a):!1};x2.prototype.r=function(){var a=RS(),b=this.Sn();return se(BC(a,b).Sm).Ib(0,ub(new vb,function(){return function(a,b){a|=0;return Ga(b)+a|0}}(this)))|0};function VS(){WS.call(this);this.Qa=null}VS.prototype=new Vwa;VS.prototype.constructor=VS;
+VS.prototype.$classData=g({uea:0},!1,"java.util.HashMap$EntrySet$$anon$2$$anon$1",{uea:1,Kra:1,d:1,Eea:1,k:1,h:1});function Bu(){NS.call(this)}Bu.prototype=new N0;Bu.prototype.constructor=Bu;Bu.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};Bu.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};Bu.prototype.$classData=g({Hea:0},!1,"java.util.NoSuchElementException",{Hea:1,ge:1,Wc:1,tc:1,d:1,h:1});function PY(){CY.call(this)}PY.prototype=new U0;
+PY.prototype.constructor=PY;c=PY.prototype;c.b=function(){CY.prototype.Jd.call(this,"NANOSECONDS",0);return this};c.Wr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,-129542144,13);return(new Xb).ha(a,b.Sb)};c.Ur=function(a){var b=Sa();a=nf(b,a.ia,a.oa,817405952,838);return(new Xb).ha(a,b.Sb)};c.Xr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,1E9,0);return(new Xb).ha(a,b.Sb)};c.Vr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,1E3,0);return(new Xb).ha(a,b.Sb)};
+c.Tr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,-1857093632,20116);return(new Xb).ha(a,b.Sb)};c.yo=function(a){var b=Sa();a=nf(b,a.ia,a.oa,1E6,0);return(new Xb).ha(a,b.Sb)};c.Bq=function(a,b){return b.ql(a)};c.ql=function(a){return a};c.$classData=g({Lea:0},!1,"java.util.concurrent.TimeUnit$$anon$1",{Lea:1,Gp:1,Tn:1,d:1,Md:1,h:1});function QY(){CY.call(this)}QY.prototype=new U0;QY.prototype.constructor=QY;c=QY.prototype;c.b=function(){CY.prototype.Jd.call(this,"MICROSECONDS",1);return this};
+c.Wr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,6E7,0);return(new Xb).ha(a,b.Sb)};c.Ur=function(a){var b=Sa();a=nf(b,a.ia,a.oa,-694967296,0);return(new Xb).ha(a,b.Sb)};c.Xr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,1E6,0);return(new Xb).ha(a,b.Sb)};c.Vr=function(a){return a};c.Tr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,500654080,20);return(new Xb).ha(a,b.Sb)};c.yo=function(a){var b=Sa();a=nf(b,a.ia,a.oa,1E3,0);return(new Xb).ha(a,b.Sb)};c.Bq=function(a,b){return b.Vr(a)};
+c.ql=function(a){return WY(Nz(),a,(new Xb).ha(1E3,0),(new Xb).ha(-1511828489,2147483))};c.$classData=g({Mea:0},!1,"java.util.concurrent.TimeUnit$$anon$2",{Mea:1,Gp:1,Tn:1,d:1,Md:1,h:1});function RY(){CY.call(this)}RY.prototype=new U0;RY.prototype.constructor=RY;c=RY.prototype;c.b=function(){CY.prototype.Jd.call(this,"MILLISECONDS",2);return this};c.Wr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,6E4,0);return(new Xb).ha(a,b.Sb)};
+c.Ur=function(a){var b=Sa();a=nf(b,a.ia,a.oa,36E5,0);return(new Xb).ha(a,b.Sb)};c.Xr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,1E3,0);return(new Xb).ha(a,b.Sb)};c.Vr=function(a){return WY(Nz(),a,(new Xb).ha(1E3,0),(new Xb).ha(-1511828489,2147483))};c.Tr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,864E5,0);return(new Xb).ha(a,b.Sb)};c.yo=function(a){return a};c.Bq=function(a,b){return b.yo(a)};c.ql=function(a){return WY(Nz(),a,(new Xb).ha(1E6,0),(new Xb).ha(2077252342,2147))};
+c.$classData=g({Nea:0},!1,"java.util.concurrent.TimeUnit$$anon$3",{Nea:1,Gp:1,Tn:1,d:1,Md:1,h:1});function SY(){CY.call(this)}SY.prototype=new U0;SY.prototype.constructor=SY;c=SY.prototype;c.b=function(){CY.prototype.Jd.call(this,"SECONDS",3);return this};c.Wr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,60,0);return(new Xb).ha(a,b.Sb)};c.Ur=function(a){var b=Sa();a=nf(b,a.ia,a.oa,3600,0);return(new Xb).ha(a,b.Sb)};c.Xr=function(a){return a};
+c.Vr=function(a){return WY(Nz(),a,(new Xb).ha(1E6,0),(new Xb).ha(2077252342,2147))};c.Tr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,86400,0);return(new Xb).ha(a,b.Sb)};c.yo=function(a){return WY(Nz(),a,(new Xb).ha(1E3,0),(new Xb).ha(-1511828489,2147483))};c.Bq=function(a,b){return b.Xr(a)};c.ql=function(a){return WY(Nz(),a,(new Xb).ha(1E9,0),(new Xb).ha(633437444,2))};c.$classData=g({Oea:0},!1,"java.util.concurrent.TimeUnit$$anon$4",{Oea:1,Gp:1,Tn:1,d:1,Md:1,h:1});function TY(){CY.call(this)}
+TY.prototype=new U0;TY.prototype.constructor=TY;c=TY.prototype;c.b=function(){CY.prototype.Jd.call(this,"MINUTES",4);return this};c.Wr=function(a){return a};c.Ur=function(a){var b=Sa();a=nf(b,a.ia,a.oa,60,0);return(new Xb).ha(a,b.Sb)};c.Xr=function(a){return WY(Nz(),a,(new Xb).ha(60,0),(new Xb).ha(572662306,35791394))};c.Vr=function(a){return WY(Nz(),a,(new Xb).ha(6E7,0),(new Xb).ha(-895955376,35))};c.Tr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,1440,0);return(new Xb).ha(a,b.Sb)};
+c.yo=function(a){return WY(Nz(),a,(new Xb).ha(6E4,0),(new Xb).ha(1692789776,35791))};c.Bq=function(a,b){return b.Wr(a)};c.ql=function(a){return WY(Nz(),a,(new Xb).ha(-129542144,13),(new Xb).ha(153722867,0))};c.$classData=g({Pea:0},!1,"java.util.concurrent.TimeUnit$$anon$5",{Pea:1,Gp:1,Tn:1,d:1,Md:1,h:1});function UY(){CY.call(this)}UY.prototype=new U0;UY.prototype.constructor=UY;c=UY.prototype;c.b=function(){CY.prototype.Jd.call(this,"HOURS",5);return this};
+c.Wr=function(a){return WY(Nz(),a,(new Xb).ha(60,0),(new Xb).ha(572662306,35791394))};c.Ur=function(a){return a};c.Xr=function(a){return WY(Nz(),a,(new Xb).ha(3600,0),(new Xb).ha(1011703407,596523))};c.Vr=function(a){return WY(Nz(),a,(new Xb).ha(-694967296,0),(new Xb).ha(-1732919508,0))};c.Tr=function(a){var b=Sa();a=nf(b,a.ia,a.oa,24,0);return(new Xb).ha(a,b.Sb)};c.yo=function(a){return WY(Nz(),a,(new Xb).ha(36E5,0),(new Xb).ha(-2047687697,596))};c.Bq=function(a,b){return b.Ur(a)};
+c.ql=function(a){return WY(Nz(),a,(new Xb).ha(817405952,838),(new Xb).ha(2562047,0))};c.$classData=g({Qea:0},!1,"java.util.concurrent.TimeUnit$$anon$6",{Qea:1,Gp:1,Tn:1,d:1,Md:1,h:1});function VY(){CY.call(this)}VY.prototype=new U0;VY.prototype.constructor=VY;c=VY.prototype;c.b=function(){CY.prototype.Jd.call(this,"DAYS",6);return this};c.Wr=function(a){return WY(Nz(),a,(new Xb).ha(1440,0),(new Xb).ha(381774870,1491308))};
+c.Ur=function(a){return WY(Nz(),a,(new Xb).ha(24,0),(new Xb).ha(1431655765,89478485))};c.Xr=function(a){return WY(Nz(),a,(new Xb).ha(86400,0),(new Xb).ha(579025220,24855))};c.Vr=function(a){return WY(Nz(),a,(new Xb).ha(500654080,20),(new Xb).ha(106751991,0))};c.Tr=function(a){return a};c.yo=function(a){return WY(Nz(),a,(new Xb).ha(864E5,0),(new Xb).ha(-622191233,24))};c.Bq=function(a,b){return b.Tr(a)};c.ql=function(a){return WY(Nz(),a,(new Xb).ha(-1857093632,20116),(new Xb).ha(106751,0))};
+c.$classData=g({Rea:0},!1,"java.util.concurrent.TimeUnit$$anon$7",{Rea:1,Gp:1,Tn:1,d:1,Md:1,h:1});function y2(){this.Dp=null}y2.prototype=new l;y2.prototype.constructor=y2;c=y2.prototype;c.u=function(){return"Box"};c.v=function(){return 1};c.o=function(a){if(a&&a.$classData&&a.$classData.m.zW){var b=this.Dp;a=a.Dp;return null===b?null===a:Fa(b,a)}return!1};c.w=function(a){switch(a){case 0:return this.Dp;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.i=function(a){this.Dp=a;return this};
+c.r=function(){return null===this.Dp?0:Ga(this.Dp)};c.x=function(){return Y(new Z,this)};c.$classData=g({zW:0},!1,"java.util.package$Box",{zW:1,d:1,t:1,q:1,k:1,h:1});function q(){NS.call(this);this.Tv=this.iX=null;this.BD=!1}q.prototype=new N0;q.prototype.constructor=q;
+q.prototype.Vf=function(){if(!this.BD&&!this.BD){var a;if(null===this.Tv)a="null";else try{a=na(this.Tv)+" ("+("of class "+oa(this.Tv).tg())+")"}catch(b){if(null!==qn(qg(),b))a="an instance of class "+oa(this.Tv).tg();else throw b;}this.iX=a;this.BD=!0}return this.iX};q.prototype.i=function(a){this.Tv=a;NS.prototype.ic.call(this,null,null,0,!0);return this};q.prototype.$classData=g({kfa:0},!1,"scala.MatchError",{kfa:1,ge:1,Wc:1,tc:1,d:1,h:1});function z2(){}z2.prototype=new l;
+z2.prototype.constructor=z2;function Txa(){}Txa.prototype=z2.prototype;z2.prototype.wb=function(){return this.z()?u():Og(new Pg,this.R(),u())};z2.prototype.ba=function(){return!this.z()};z2.prototype.ab=function(a){return!this.z()&&Em(Fm(),this.R(),a)};function uU(a){return!!(a&&a.$classData&&a.$classData.m.bY)}function VA(){}VA.prototype=new l;VA.prototype.constructor=VA;c=VA.prototype;c.b=function(){return this};c.y=function(a){this.su(a)};c.Wm=function(){return od().GY};c.gk=function(){return this};
+c.Ia=function(a){return this.su(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ul=function(a){return a};c.Ja=function(a){return!!this.su(a)};c.Za=function(){return!1};c.gb=function(a,b){return RA(this,a,b)};c.su=function(a){throw(new q).i(a);};c.za=function(){return this};c.$classData=g({pfa:0},!1,"scala.PartialFunction$$anon$1",{pfa:1,d:1,Ha:1,fa:1,k:1,h:1});function A2(){this.uF=this.Zl=null}A2.prototype=new l;A2.prototype.constructor=A2;function NZ(a,b){var d=new A2;d.Zl=a;d.uF=b;return d}
+c=A2.prototype;c.y=function(a){return this.uF.y(this.Zl.y(a))};c.Wm=function(a){return PA(this,a)};c.gk=function(a){return NZ(this,a)};c.Ia=function(a){return this.y(a)|0};c.l=function(){return"\x3cfunction1\x3e"};c.Ul=function(a){return OZ(new PZ,this,a)};c.Ja=function(a){return!!this.y(a)};c.Za=function(a){return this.Zl.Za(a)};c.gb=function(a,b){var d=this.Zl.gb(a,od().Br);return QA(od(),d)?b.y(a):this.uF.y(d)};c.za=function(a){return NZ(this,a)};
+c.$classData=g({rfa:0},!1,"scala.PartialFunction$AndThen",{rfa:1,d:1,Ha:1,fa:1,k:1,h:1});function rd(){this.FX=null}rd.prototype=new NT;rd.prototype.constructor=rd;rd.prototype.y=function(a){return this.Uc(a)};function pd(a,b){a.FX=b;return a}rd.prototype.Uc=function(a){a=this.FX.gb(a,od().Br);return QA(od(),a)?C():(new H).i(a)};rd.prototype.$classData=g({sfa:0},!1,"scala.PartialFunction$Lifted",{sfa:1,aq:1,d:1,fa:1,k:1,h:1});function fZ(){}fZ.prototype=new axa;fZ.prototype.constructor=fZ;
+fZ.prototype.b=function(){return this};fZ.prototype.y=function(a){return a};fZ.prototype.$classData=g({vfa:0},!1,"scala.Predef$$anon$1",{vfa:1,Xra:1,d:1,fa:1,k:1,h:1});function gZ(){}gZ.prototype=new $wa;gZ.prototype.constructor=gZ;gZ.prototype.b=function(){return this};gZ.prototype.y=function(a){return a};gZ.prototype.$classData=g({wfa:0},!1,"scala.Predef$$anon$2",{wfa:1,Wra:1,d:1,fa:1,k:1,h:1});function Kv(){this.yk=null}Kv.prototype=new l;Kv.prototype.constructor=Kv;c=Kv.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.m.dY){var b=this.yk;a=a.yk;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.yk;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function Uxa(a,b){if(a.yk.sa()!==(1+b.sa()|0))throw(new Re).c("wrong number of arguments ("+b.sa()+") for interpolated string with "+a.yk.sa()+" parts");}
+function Jv(a,b){var d=function(){return function(a){zva||(zva=(new qZ).b());var b;a:{var d=a.length|0,e=Qha(Ia(),a,92);switch(e){case -1:b=a;break a;default:b=(new O0).b();b:{var f=e,e=0;for(;;)if(0<=f){if(f>e){var E=b,e=Na(null===a?"null":a,e,f);E.Yb=""+E.Yb+e}e=1+f|0;if(e>=d)throw(new B2).Jd(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 B2).Jd(a,f);}e=1+e|0;YS(b,f);f=e;Ia();var E=a,Q=Ona(92),E=E.indexOf(Q,e)|0,e=f,f=E}else{e<d&&(f=b,a=Na(null===a?"null":a,e,d),f.Yb=""+f.Yb+a);b=b.Yb;
+break b}}}}return b}}(a);Uxa(a,b);a=a.yk.Sa();b=b.Sa();for(var e=a.ka(),e=(new O0).c(d(e));b.ra();){var f=b.ka();e.Yb=""+e.Yb+f;f=a.ka();f=d(f);e.Yb=""+e.Yb+f}return e.Yb}c.Ea=function(a){this.yk=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({dY:0},!1,"scala.StringContext",{dY:1,d:1,t:1,q:1,k:1,h:1});function C2(){}C2.prototype=new l;C2.prototype.constructor=C2;function Vxa(){}Vxa.prototype=C2.prototype;
+function Jj(){this.wz=this.Pf=null;this.ay=!1;this.Qa=null}Jj.prototype=new a1;Jj.prototype.constructor=Jj;c=Jj.prototype;c.ka=function(){return this.Rm()};function Kj(a){a.ay||a.ay||(a.Pf=a.Qa.Pf.zn(),a.ay=!0);return a.Pf}function Wxa(a){if(Kj(a).ra()){var b=Kj(a).ka(),b=null===b?0:b.W;if(10!==b){if(13===b)return Kj(a).ra()?(b=Kj(a).Y(),b=10===(null===b?0:b.W)):b=!1,b&&Kj(a).ka(),!1;Cl(a.wz,b);return!0}}return!1}c.sv=function(a){if(null===a)throw pg(qg(),null);this.Qa=a;this.wz=(new Bl).b();return this};
+c.Rm=function(){var a=this.wz.Bb,b=a.Yb,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.Yb=b;Wxa(this););return this.wz.Bb.Yb};c.ra=function(){return Kj(this).ra()};c.$classData=g({bga:0},!1,"scala.io.Source$LineIterator",{bga:1,od:1,d:1,Rc:1,Ga:1,Fa:1});var Yxa=function Xxa(b,d){return d.Ni.isArrayClass?(d=Oz(d),"Array["+Xxa(b,d)+"]"):d.tg()};function D2(){}D2.prototype=new l;D2.prototype.constructor=D2;function Zxa(){}Zxa.prototype=D2.prototype;
+function E2(){this.Mf=null}E2.prototype=new l;E2.prototype.constructor=E2;c=E2.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.m.rY){var b=this.Mf;a=a.Mf;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Mf;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function gV(a){var b=new E2;b.Mf=a;return b}c.$classData=g({rY:0},!1,"scala.util.Either$RightProjection",{rY:1,d:1,t:1,q:1,k:1,h:1});function F2(){}F2.prototype=new l;F2.prototype.constructor=F2;function $xa(){}$xa.prototype=F2.prototype;function Fva(a){return!!(a&&a.$classData&&a.$classData.m.wY)}function WB(){NS.call(this)}WB.prototype=new OS;WB.prototype.constructor=WB;WB.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};
+WB.prototype.av=function(){Pva||(Pva=(new QZ).b());return Pva.pH?NS.prototype.av.call(this):this};WB.prototype.$classData=g({hha:0},!1,"scala.util.control.BreakControl",{hha:1,tc:1,d:1,h:1,xY:1,pha:1});function G2(){this.da=this.fb=this.Oa=null}G2.prototype=new l;G2.prototype.constructor=G2;c=G2.prototype;c.u=function(){return"~"};c.v=function(){return 2};function Je(a,b,d){var e=new G2;e.Oa=b;e.fb=d;if(null===a)throw pg(qg(),null);e.da=a;return e}
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.yY&&a.da===this.da?Em(Fm(),this.Oa,a.Oa)&&Em(Fm(),this.fb,a.fb):!1};c.w=function(a){switch(a){case 0:return this.Oa;case 1:return this.fb;default:throw(new O).c(""+a);}};c.l=function(){return"("+this.Oa+"~"+this.fb+")"};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({yY:0},!1,"scala.util.parsing.combinator.Parsers$$tilde",{yY:1,d:1,t:1,q:1,k:1,h:1});
+function DO(a,b){if(b&&b.$classData&&b.$classData.m.Qg){var d;if(!(d=a===b)&&(d=a.Da()===b.Da()))try{var e=a.Sa();for(a=!0;a&&e.ra();){var f=e.ka();if(null===f)throw(new q).i(f);var h=f.na(),k=b.gc(f.ja());b:{if(Xj(k)){var n=k.Q;if(Em(Fm(),h,n)){a=!0;break b}}a=!1}}d=a}catch(r){if(r&&r.$classData&&r.$classData.m.Ida)d=!1;else throw r;}b=d}else b=!1;return b}function BP(a,b,d){return a.mf(m(new p,function(a,b){return function(a){return Em(Fm(),b,a)}}(a,b)),d)}
+function H2(a,b){return b&&b.$classData&&b.$classData.m.le?a.Ze(b):!1}function I2(a,b){return 0<=b&&b<a.sa()}function J2(){this.s=null}J2.prototype=new yT;J2.prototype.constructor=J2;J2.prototype.b=function(){xT.prototype.b.call(this);return this};J2.prototype.db=function(){Ok();return(new mc).b()};J2.prototype.$classData=g({Lha:0},!1,"scala.collection.Iterable$",{Lha:1,kg:1,ze:1,d:1,lg:1,Ae:1});var aya=void 0;function Mc(){aya||(aya=(new J2).b());return aya}function cc(){this.Yu=this.Qa=null}
+cc.prototype=new a1;cc.prototype.constructor=cc;cc.prototype.ka=function(){return this.Yu.y(this.Qa.ka())};cc.prototype.Nf=function(a,b){if(null===a)throw pg(qg(),null);this.Qa=a;this.Yu=b;return this};cc.prototype.ra=function(){return this.Qa.ra()};cc.prototype.$classData=g({Oha:0},!1,"scala.collection.Iterator$$anon$10",{Oha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function qo(){this.qp=this.Qa=this.se=null}qo.prototype=new a1;qo.prototype.constructor=qo;qo.prototype.ka=function(){return(this.ra()?this.se:yB().Sd).ka()};
+qo.prototype.Nf=function(a,b){if(null===a)throw pg(qg(),null);this.Qa=a;this.qp=b;this.se=yB().Sd;return this};qo.prototype.ra=function(){for(;!this.se.ra();){if(!this.Qa.ra())return!1;this.se=this.qp.y(this.Qa.ka()).Rg()}return!0};qo.prototype.$classData=g({Pha:0},!1,"scala.collection.Iterator$$anon$11",{Pha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function vo(){this.Lq=null;this.Ll=!1;this.zX=this.Qa=null}vo.prototype=new a1;vo.prototype.constructor=vo;
+vo.prototype.ka=function(){return this.ra()?(this.Ll=!1,this.Lq):yB().Sd.ka()};vo.prototype.Nf=function(a,b){if(null===a)throw pg(qg(),null);this.Qa=a;this.zX=b;this.Ll=!1;return this};vo.prototype.ra=function(){if(!this.Ll){do{if(!this.Qa.ra())return!1;this.Lq=this.Qa.ka()}while(!this.zX.y(this.Lq));this.Ll=!0}return!0};vo.prototype.$classData=g({Qha:0},!1,"scala.collection.Iterator$$anon$12",{Qha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function kp(){this.Qr=0;this.BX=this.Qa=this.uV=null}kp.prototype=new a1;
+kp.prototype.constructor=kp;kp.prototype.ka=function(){if(this.ra()){if(1===this.Qr)return this.Qa.ka();this.Qr=1;return this.uV}return yB().Sd.ka()};kp.prototype.Nf=function(a,b){if(null===a)throw pg(qg(),null);this.Qa=a;this.BX=b;this.Qr=-1;return this};kp.prototype.ra=function(){if(1===this.Qr)return this.Qa.ra();if(0===this.Qr)return!0;for(;this.Qa.ra();){var a=this.Qa.ka();if(!this.BX.y(a))return this.uV=a,this.Qr=0,!0}this.Qr=1;return!1};
+kp.prototype.$classData=g({Rha:0},!1,"scala.collection.Iterator$$anon$17",{Rha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function oC(){}oC.prototype=new a1;oC.prototype.constructor=oC;oC.prototype.ka=function(){throw(new Bu).c("next on empty iterator");};oC.prototype.b=function(){return this};oC.prototype.ra=function(){return!1};oC.prototype.$classData=g({Sha:0},!1,"scala.collection.Iterator$$anon$2",{Sha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function lp(){this.lE=!1;this.jV=this.Wx=null}lp.prototype=new a1;
+lp.prototype.constructor=lp;lp.prototype.ka=function(){this.lE?this.lE=!1:this.Wx=this.jV.y(this.Wx);return this.Wx};lp.prototype.ra=function(){return!0};function Eea(a,b,d){a.jV=d;a.lE=!0;a.Wx=b;return a}lp.prototype.$classData=g({Tha:0},!1,"scala.collection.Iterator$$anon$7",{Tha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function K2(){this.Gz=null;this.Aw=this.ua=0;this.zs=null;this.rH=this.Vs=!1;this.Qa=this.NF=null}K2.prototype=new a1;K2.prototype.constructor=K2;
+K2.prototype.ka=function(){this.Vs||bya(this);if(!this.Vs)throw(new Bu).c("next on empty iterator");this.Vs=!1;var a=this.zs,b=x().s;return K(a,b)};function cya(a,b,d,e,f){if(0<b&&(0===d||L2(e,f)>dya(a))){if(0!==d){var h=a.Aw;eya(a.zs,0,h<d?h:d)}0===d?b=L2(e,f):(d=L2(e,f)-dya(a)|0,b=b<d?b:d);fya(a.zs,e.Gk(b));return a.Vs=!0}return!1}function dya(a){a=a.Aw-a.ua|0;return 0<a?a:0}K2.prototype.ra=function(){return this.Vs||bya(this)};
+function gya(a,b){for(var d=(new u_).b(),e=(new t_).b(),f=a.zs.Zc,h=(new M2).b(),k=0;k<b&&a.Gz.ra();)N2(h,a.Gz.ka()),k=1+k|0;k=b-h.sa()|0;if(0<k&&a.NF.ba()){x();for(var n=(new mc).b(),r=0;r<k;){var y=se(a.NF.R());pc(n,y);r=1+r|0}k=n.wb();n=t();h=h.$c(k,n.s)}if(h.z())return!1;if(a.rH)return e=L2(h,d),b=a.ua,cya(a,e<b?e:b,f,h,d);if(e.Pa)e=e.tb;else{k=h;if(null===e)throw(new Ce).b();e.Pa?e=e.tb:(b=L2(k,d)<b,e.tb=b,e.Pa=!0,e=b)}if(e)return!1;if(0===f)return cya(a,L2(h,d),f,h,d);e=a.Aw;b=a.ua;return cya(a,
+e<b?e:b,f,h,d)}function L2(a,b){if(b.Pa)b=b.tb;else{if(null===b)throw(new Ce).b();b.Pa?b=b.tb:(a=a.sa(),b.tb=a,b.Pa=!0,b=a)}return b}function bya(a){return a.Gz.ra()?O2(a.zs)?gya(a,a.ua):gya(a,a.Aw):!1}function hya(a,b){var d=new K2;d.Gz=b;d.ua=2;d.Aw=2;if(null===a)throw pg(qg(),null);d.Qa=a;d.zs=G(P_(),u());d.Vs=!1;d.rH=!0;d.NF=C();return d}K2.prototype.$classData=g({Uha:0},!1,"scala.collection.Iterator$GroupedIterator",{Uha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function P2(){}P2.prototype=new l;
+P2.prototype.constructor=P2;P2.prototype.b=function(){return this};P2.prototype.$classData=g({Vha:0},!1,"scala.collection.JavaConverters$",{Vha:1,d:1,Esa:1,Csa:1,Fsa:1,Dsa:1});var iya=void 0;function RS(){iya||(iya=(new P2).b());return iya}function Q2(){this.hj=null}Q2.prototype=new a1;Q2.prototype.constructor=Q2;Q2.prototype.ka=function(){if(this.ra()){var a=this.hj.Y();this.hj=this.hj.$();return a}return yB().Sd.ka()};function hv(a){var b=new Q2;b.hj=a;return b}
+Q2.prototype.wb=function(){var a=this.hj.wb();this.hj=this.hj.Hw(0);return a};Q2.prototype.ra=function(){return!this.hj.z()};Q2.prototype.$classData=g({Wha:0},!1,"scala.collection.LinearSeqLike$$anon$1",{Wha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function R2(){this.Pf=null}R2.prototype=new a1;R2.prototype.constructor=R2;R2.prototype.ka=function(){return this.Pf.ka().ja()};R2.prototype.ra=function(){return this.Pf.ra()};R2.prototype.Of=function(a){this.Pf=a.Sa();return this};
+R2.prototype.$classData=g({Xha:0},!1,"scala.collection.MapLike$$anon$1",{Xha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function S2(){this.Pf=null}S2.prototype=new a1;S2.prototype.constructor=S2;S2.prototype.ka=function(){return this.Pf.ka().na()};S2.prototype.ra=function(){return this.Pf.ra()};S2.prototype.Of=function(a){this.Pf=a.Sa();return this};S2.prototype.$classData=g({Yha:0},!1,"scala.collection.MapLike$$anon$2",{Yha:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function T2(){}T2.prototype=new f1;
+T2.prototype.constructor=T2;T2.prototype.b=function(){return this};T2.prototype.Wk=function(){return hh()};T2.prototype.db=function(){return ih(new rh,hh())};T2.prototype.$classData=g({aia:0},!1,"scala.collection.Set$",{aia:1,Nt:1,Mt:1,ze:1,d:1,Ae:1});var jya=void 0;function kya(){jya||(jya=(new T2).b());return jya}function xB(){this.s=null}xB.prototype=new yT;xB.prototype.constructor=xB;xB.prototype.b=function(){xT.prototype.b.call(this);Ola=this;(new VB).b();return this};
+xB.prototype.db=function(){lya||(lya=(new U2).b());return(new mc).b()};xB.prototype.$classData=g({bia:0},!1,"scala.collection.Traversable$",{bia:1,kg:1,ze:1,d:1,lg:1,Ae:1});var Ola=void 0;function V2(){this.cH=null}V2.prototype=new a1;V2.prototype.constructor=V2;V2.prototype.ka=function(){return this.co()};V2.prototype.co=function(){var a=this.cH.ka();return(new w).e(a.ve,a.W)};V2.prototype.ra=function(){return this.cH.ra()};
+V2.prototype.$classData=g({jia:0},!1,"scala.collection.convert.Wrappers$JMapWrapperLike$$anon$2",{jia:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function W2(){}W2.prototype=new f1;W2.prototype.constructor=W2;function X2(){}X2.prototype=W2.prototype;W2.prototype.Wk=function(){return this.oy()};W2.prototype.db=function(){return ih(new rh,this.oy())};function Y2(){}Y2.prototype=new f1;Y2.prototype.constructor=Y2;function Z2(){}Z2.prototype=Y2.prototype;Y2.prototype.db=function(){return exa(new i1,this.Wk())};
+function $2(){this.s=null}$2.prototype=new yT;$2.prototype.constructor=$2;$2.prototype.b=function(){xT.prototype.b.call(this);return this};$2.prototype.db=function(){return(new mc).b()};$2.prototype.$classData=g({Fia:0},!1,"scala.collection.immutable.Iterable$",{Fia:1,kg:1,ze:1,d:1,lg:1,Ae:1});var mya=void 0;function Ok(){mya||(mya=(new $2).b());return mya}function a3(){this.hj=null}a3.prototype=new a1;a3.prototype.constructor=a3;c=a3.prototype;
+c.ka=function(){if(!this.ra())return yB().Sd.ka();var a=Yma(this.hj),b=a.Y();this.hj=Xma(new NC,this,I(function(a,b){return function(){return b.$()}}(this,a)));return b};c.wb=function(){var a=this.Oc(),b=x().s;return K(a,b)};function nya(a){var b=new a3;b.hj=Xma(new NC,b,I(function(a,b){return function(){return b}}(b,a)));return b}c.ra=function(){var a=Yma(this.hj);return nd(a)};c.Oc=function(){var a=Yma(this.hj);this.hj=Xma(new NC,this,I(function(){return function(){sg();return qT()}}(this)));return a};
+c.$classData=g({qja:0},!1,"scala.collection.immutable.StreamIterator",{qja:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function b3(){this.PG=null;this.lf=this.Lv=0;this.Qa=null}b3.prototype=new a1;b3.prototype.constructor=b3;b3.prototype.ka=function(){return this.Rm()};
+b3.prototype.Rm=function(){if(this.lf>=this.Lv)throw(new Bu).c("next on empty iterator");for(var a=this.lf;;){if(this.lf<this.Lv)var b=this.Qa.To(this.lf),b=!(10===b||12===b);else b=!1;if(b)this.lf=1+this.lf|0;else break}var b=this.lf=1+this.lf|0,d=this.Lv;return this.PG.substring(a,b<d?b:d)};b3.prototype.ra=function(){return this.lf<this.Lv};function oya(a){var b=new b3;if(null===a)throw pg(qg(),null);b.Qa=a;b.PG=a.l();b.Lv=b.PG.length|0;b.lf=0;return b}
+b3.prototype.$classData=g({sja:0},!1,"scala.collection.immutable.StringLike$$anon$1",{sja:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function U2(){this.s=null}U2.prototype=new yT;U2.prototype.constructor=U2;U2.prototype.b=function(){xT.prototype.b.call(this);return this};U2.prototype.db=function(){return(new mc).b()};U2.prototype.$classData=g({uja:0},!1,"scala.collection.immutable.Traversable$",{uja:1,kg:1,ze:1,d:1,lg:1,Ae:1});var lya=void 0;
+function c3(){this.eb=null;this.Ck=0;this.Et=this.bG=this.zz=null;this.Wp=0;this.Cr=null}c3.prototype=new a1;c3.prototype.constructor=c3;function pya(){}pya.prototype=c3.prototype;
+c3.prototype.ka=function(){if(null!==this.Cr){var a=this.Cr.ka();this.Cr.ra()||(this.Cr=null);return a}a:{var a=this.Et,b=this.Wp;for(;;){b===(-1+a.n.length|0)?(this.Ck=-1+this.Ck|0,0<=this.Ck?(this.Et=this.zz.n[this.Ck],this.Wp=this.bG.n[this.Ck],this.zz.n[this.Ck]=null):(this.Et=null,this.Wp=0)):this.Wp=1+this.Wp|0;if((a=a.n[b])&&a.$classData&&a.$classData.m.kZ||a&&a.$classData&&a.$classData.m.mZ){a=this.vV(a);break a}if(d3(a)||e3(a))0<=this.Ck&&(this.zz.n[this.Ck]=this.Et,this.bG.n[this.Ck]=this.Wp),
+this.Ck=1+this.Ck|0,this.Et=qya(a),this.Wp=0,a=qya(a),b=0;else{this.Cr=a.Sa();a=this.ka();break a}}}return a};c3.prototype.ra=function(){return null!==this.Cr||0<=this.Ck};function qya(a){if(d3(a))return a.ue;if(!e3(a))throw(new q).i(a);return a.te}c3.prototype.MV=function(a){this.eb=a;this.Ck=0;this.zz=la(Xa(Xa(rya)),[6]);this.bG=la(Xa(db),[6]);this.Et=this.eb;this.Wp=0;this.Cr=null;return this};function f3(){this.Ai=0;this.Qa=null}f3.prototype=new a1;f3.prototype.constructor=f3;
+f3.prototype.ka=function(){return 0<this.Ai?(this.Ai=-1+this.Ai|0,this.Qa.X(this.Ai)):yB().Sd.ka()};f3.prototype.ra=function(){return 0<this.Ai};f3.prototype.it=function(a){if(null===a)throw pg(qg(),null);this.Qa=a;this.Ai=a.sa();return this};f3.prototype.$classData=g({xja:0},!1,"scala.collection.immutable.Vector$$anon$1",{xja:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function g3(){this.Iu=0;this.Qa=null}g3.prototype=new a1;g3.prototype.constructor=g3;g3.prototype.ka=function(){this.Iu=-1+this.Iu|0;return this.Qa.fj.n[this.Iu]};
+g3.prototype.ra=function(){return 0<this.Iu};g3.prototype.$classData=g({Tja:0},!1,"scala.collection.mutable.ArrayStack$$anon$1",{Tja:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function RC(){this.yj=this.vc=null}RC.prototype=new l;RC.prototype.constructor=RC;function QC(a,b,d){a.yj=d;a.vc=b;return a}c=RC.prototype;c.o=function(a){return null!==a&&(a===this||a===this.vc||Fa(a,this.vc))};c.cd=function(a){this.vc.Ma(a);return this};c.l=function(){return""+this.vc};c.Ba=function(){return this.yj.y(this.vc.Ba())};
+c.mg=function(a,b){this.vc.mg(a,b)};c.Ma=function(a){this.vc.Ma(a);return this};c.r=function(){return this.vc.r()};c.oc=function(a){this.vc.oc(a)};c.Xb=function(a){this.vc.Xb(a);return this};c.$classData=g({Vja:0},!1,"scala.collection.mutable.Builder$$anon$1",{Vja:1,d:1,sd:1,qd:1,pd:1,Cfa:1});function h3(){this.Ai=0;this.Qa=null}h3.prototype=new a1;h3.prototype.constructor=h3;h3.prototype.ka=function(){return this.ra()?(this.Ai=1+this.Ai|0,pba(this.Qa.Tb.n[-1+this.Ai|0])):yB().Sd.ka()};
+h3.prototype.ra=function(){for(;this.Ai<this.Qa.Tb.n.length&&null===this.Qa.Tb.n[this.Ai];)this.Ai=1+this.Ai|0;return this.Ai<this.Qa.Tb.n.length};h3.prototype.$classData=g({Yja:0},!1,"scala.collection.mutable.FlatHashTable$$anon$1",{Yja:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function i3(){this.Pf=null}i3.prototype=new a1;i3.prototype.constructor=i3;i3.prototype.ka=function(){return this.Pf.ka().ve};i3.prototype.ra=function(){return this.Pf.ra()};i3.prototype.cr=function(a){this.Pf=sya(a);return this};
+i3.prototype.$classData=g({cka:0},!1,"scala.collection.mutable.HashMap$$anon$3",{cka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function j3(){this.Pf=null}j3.prototype=new a1;j3.prototype.constructor=j3;j3.prototype.ka=function(){return this.Pf.ka().W};j3.prototype.ra=function(){return this.Pf.ra()};j3.prototype.cr=function(a){this.Pf=sya(a);return this};j3.prototype.$classData=g({dka:0},!1,"scala.collection.mutable.HashMap$$anon$4",{dka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});
+function k3(){this.mF=null;this.dt=0;this.Eq=null}k3.prototype=new a1;k3.prototype.constructor=k3;k3.prototype.ka=function(){var a=this.Eq;for(this.Eq=this.Eq.ka();null===this.Eq&&0<this.dt;)this.dt=-1+this.dt|0,this.Eq=this.mF.n[this.dt];return a};function sya(a){var b=new k3;b.mF=a.Tb;b.dt=kD(a);b.Eq=b.mF.n[b.dt];return b}k3.prototype.ra=function(){return null!==this.Eq};k3.prototype.$classData=g({hka:0},!1,"scala.collection.mutable.HashTable$$anon$1",{hka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});
+function l3(){this.s=null}l3.prototype=new yT;l3.prototype.constructor=l3;l3.prototype.b=function(){xT.prototype.b.call(this);return this};l3.prototype.db=function(){return(new M2).b()};l3.prototype.$classData=g({jka:0},!1,"scala.collection.mutable.Iterable$",{jka:1,kg:1,ze:1,d:1,lg:1,Ae:1});var tya=void 0;function uya(){tya||(tya=(new l3).b());return tya}function m3(){this.yk=null}m3.prototype=new l;m3.prototype.constructor=m3;function vya(){}c=vya.prototype=m3.prototype;
+c.b=function(){this.yk=(new mc).b();return this};c.cd=function(a){return wya(this,a)};function wya(a,b){var d=a.yk;x();b=(new J).j([b]);var e=x().s;pc(d,K(b,e));return a}c.mg=function(a,b){JT(this,a,b)};c.Ma=function(a){return wya(this,a)};c.oc=function(){};c.Xb=function(a){pc(this.yk,a);return this};function n3(){this.se=null}n3.prototype=new a1;n3.prototype.constructor=n3;c=n3.prototype;c.ka=function(){return this.co()};
+c.co=function(){if(this.ra()){var a=(new w).e(this.se.ve,this.se.W);this.se=this.se.Xf;return a}return yB().Sd.ka()};c.ra=function(){return null!==this.se};c.dr=function(a){this.se=a.xi;return this};c.$classData=g({nka:0},!1,"scala.collection.mutable.LinkedHashMap$$anon$1",{nka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function o3(){this.se=null}o3.prototype=new a1;o3.prototype.constructor=o3;o3.prototype.ka=function(){if(this.ra()){var a=this.se.ve;this.se=this.se.Xf;return a}return yB().Sd.ka()};
+o3.prototype.ra=function(){return null!==this.se};o3.prototype.dr=function(a){this.se=a.xi;return this};o3.prototype.$classData=g({oka:0},!1,"scala.collection.mutable.LinkedHashMap$$anon$2",{oka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function p3(){this.se=null}p3.prototype=new a1;p3.prototype.constructor=p3;p3.prototype.ka=function(){if(this.ra()){var a=this.se.W;this.se=this.se.Xf;return a}return yB().Sd.ka()};p3.prototype.ra=function(){return null!==this.se};p3.prototype.dr=function(a){this.se=a.xi;return this};
+p3.prototype.$classData=g({pka:0},!1,"scala.collection.mutable.LinkedHashMap$$anon$3",{pka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function q3(){this.se=null}q3.prototype=new a1;q3.prototype.constructor=q3;q3.prototype.ka=function(){if(this.ra()){var a=this.se.ve;this.se=this.se.Xf;return a}return yB().Sd.ka()};q3.prototype.ra=function(){return null!==this.se};q3.prototype.$classData=g({tka:0},!1,"scala.collection.mutable.LinkedHashSet$$anon$1",{tka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function r3(){this.eb=null}
+r3.prototype=new a1;r3.prototype.constructor=r3;r3.prototype.ka=function(){var a=this.eb.xj;this.eb=this.eb.Ei;return a};r3.prototype.ra=function(){return nd(this.eb)};r3.prototype.$classData=g({xka:0},!1,"scala.collection.mutable.LinkedListLike$$anon$1",{xka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function s3(){this.Ju=null}s3.prototype=new a1;s3.prototype.constructor=s3;s3.prototype.ka=function(){if(this.ra()){var a=this.Ju.Y();this.Ju=this.Ju.$();return a}throw(new Bu).c("next on empty Iterator");};
+s3.prototype.ra=function(){return this.Ju!==u()};s3.prototype.$classData=g({zka:0},!1,"scala.collection.mutable.ListBuffer$$anon$1",{zka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function gc(){this.Va=this.Sd=null}gc.prototype=new l;gc.prototype.constructor=gc;function ic(a,b){a.Va=a.Va.Li(b);return a}c=gc.prototype;c.cd=function(a){return ic(this,a)};c.Ba=function(){return this.Va};c.mg=function(a,b){JT(this,a,b)};function fc(a,b){a.Sd=b;a.Va=b;return a}c.Ma=function(a){return ic(this,a)};c.oc=function(){};
+c.Xb=function(a){return IC(this,a)};c.$classData=g({Cka:0},!1,"scala.collection.mutable.MapBuilder",{Cka:1,d:1,ji:1,sd:1,qd:1,pd:1});function t3(){this.eb=null;this.Gu=0}t3.prototype=new a1;t3.prototype.constructor=t3;t3.prototype.ka=function(){if(!this.ra())throw(new Bu).b();this.Gu=-1+this.Gu|0;var a=this.eb.xj;this.eb=0===this.Gu?null:this.eb.Ei;return a};t3.prototype.ra=function(){return 0<this.Gu?nd(this.eb):!1};
+t3.prototype.$classData=g({Eka:0},!1,"scala.collection.mutable.MutableList$$anon$1",{Eka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function rh(){this.Va=this.Sd=null}rh.prototype=new l;rh.prototype.constructor=rh;c=rh.prototype;c.cd=function(a){return sh(this,a)};c.Ba=function(){return this.Va};c.mg=function(a,b){JT(this,a,b)};function sh(a,b){a.Va=a.Va.Sg(b);return a}function ih(a,b){a.Sd=b;a.Va=b;return a}c.Ma=function(a){return sh(this,a)};c.oc=function(){};c.Xb=function(a){return IC(this,a)};
+c.$classData=g({Jka:0},!1,"scala.collection.mutable.SetBuilder",{Jka:1,d:1,ji:1,sd:1,qd:1,pd:1});function u3(){this.eH=this.O_=this.N_=0}u3.prototype=new Tra;u3.prototype.constructor=u3;u3.prototype.b=function(){this.N_=50;this.O_=100;this.eH=32;return this};u3.prototype.$classData=g({Nka:0},!1,"scala.collection.mutable.UnrolledBuffer$",{Nka:1,Psa:1,Qsa:1,d:1,k:1,h:1});var xya=void 0;function MD(){xya||(xya=(new u3).b());return xya}function v3(){this.fd=0;this.or=null}v3.prototype=new a1;
+v3.prototype.constructor=v3;v3.prototype.ka=function(){if(this.ra()){var a=pD(W(),this.or.Sh,this.fd);yya(this);return a}return yB().Sd.ka()};v3.prototype.ra=function(){return null!==this.or};function yya(a){for(a.fd=1+a.fd|0;a.fd>=a.or.xd&&(a.fd=0,a.or=a.or.Vd,null!==a.or););}v3.prototype.$classData=g({Oka:0},!1,"scala.collection.mutable.UnrolledBuffer$$anon$1",{Oka:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function w3(){this.Va=this.RG=null;this.xd=this.wm=0}w3.prototype=new l;w3.prototype.constructor=w3;c=w3.prototype;
+c.Bp=function(a){this.RG=a;this.xd=this.wm=0;return this};c.cd=function(a){return zya(this,a)};function zya(a,b){var d=1+a.xd|0;if(a.wm<d){for(var e=0===a.wm?16:a.wm<<1;e<d;)e<<=1;d=e;a.Va=Aya(a,d);a.wm=d}a.Va.Bf(a.xd,b);a.xd=1+a.xd|0;return a}
+function Aya(a,b){var d=a.RG.Od();b=d===pa(bb)?(new x3).Mq(la(Xa(bb),[b])):d===pa(cb)?(new y3).Qq(la(Xa(cb),[b])):d===pa($a)?(new z3).Gm(la(Xa($a),[b])):d===pa(db)?(new A3).Oq(la(Xa(db),[b])):d===pa(eb)?(new B3).Pq(la(Xa(eb),[b])):d===pa(fb)?(new OA).xp(la(Xa(fb),[b])):d===pa(gb)?(new C3).Nq(la(Xa(gb),[b])):d===pa(Za)?(new D3).Rq(la(Xa(Za),[b])):d===pa(Ya)?(new E3).Sq(la(Xa(Ba),[b])):(new ci).$h(a.RG.bh(b));0<a.xd&&Lv(Af(),a.Va.qa,0,b.qa,0,a.xd);return b}
+c.Ba=function(){var a;0!==this.wm&&this.wm===this.xd?(this.wm=0,a=this.Va):a=Aya(this,this.xd);return a};c.mg=function(a,b){JT(this,a,b)};c.Ma=function(a){return zya(this,a)};c.oc=function(a){this.wm<a&&(this.Va=Aya(this,a),this.wm=a)};c.Xb=function(a){return IC(this,a)};c.$classData=g({Rka:0},!1,"scala.collection.mutable.WrappedArrayBuilder",{Rka:1,d:1,ji:1,sd:1,qd:1,pd:1});function sC(){NS.call(this);this.gH=this.GW=null}sC.prototype=new OS;sC.prototype.constructor=sC;sC.prototype.av=function(){return this};
+sC.prototype.e=function(a,b){this.GW=a;this.gH=b;NS.prototype.ic.call(this,null,null,0,!0);return this};sC.prototype.$classData=g({LG:0},!1,"scala.runtime.NonLocalReturnControl",{LG:1,tc:1,d:1,h:1,xY:1,pha:1});function Z(){this.rU=this.yu=0;this.P_=null}Z.prototype=new a1;Z.prototype.constructor=Z;Z.prototype.ka=function(){var a=this.P_.w(this.yu);this.yu=1+this.yu|0;return a};function Y(a,b){a.P_=b;a.yu=0;a.rU=b.v();return a}Z.prototype.ra=function(){return this.yu<this.rU};
+Z.prototype.$classData=g({Lla:0},!1,"scala.runtime.ScalaRunTime$$anon$1",{Lla:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function F3(){}F3.prototype=new l;F3.prototype.constructor=F3;c=F3.prototype;c.b=function(){return this};c.u=function(){return"Link"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Link"};c.r=function(){return 2368538};c.x=function(){return Y(new Z,this)};c.$classData=g({d0:0},!1,"org.nlogo.core.AgentKind$Link$",{d0:1,d:1,wx:1,t:1,q:1,k:1,h:1});var Bya=void 0;
+function Hi(){Bya||(Bya=(new F3).b());return Bya}function G3(){}G3.prototype=new l;G3.prototype.constructor=G3;c=G3.prototype;c.b=function(){return this};c.u=function(){return"Observer"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Observer"};c.r=function(){return 413251318};c.x=function(){return Y(new Z,this)};c.$classData=g({e0:0},!1,"org.nlogo.core.AgentKind$Observer$",{e0:1,d:1,wx:1,t:1,q:1,k:1,h:1});var Cya=void 0;
+function Ei(){Cya||(Cya=(new G3).b());return Cya}function H3(){}H3.prototype=new l;H3.prototype.constructor=H3;c=H3.prototype;c.b=function(){return this};c.u=function(){return"Patch"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Patch"};c.r=function(){return 76886056};c.x=function(){return Y(new Z,this)};c.$classData=g({f0:0},!1,"org.nlogo.core.AgentKind$Patch$",{f0:1,d:1,wx:1,t:1,q:1,k:1,h:1});var Dya=void 0;
+function Gi(){Dya||(Dya=(new H3).b());return Dya}function I3(){}I3.prototype=new l;I3.prototype.constructor=I3;c=I3.prototype;c.b=function(){return this};c.u=function(){return"Turtle"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Turtle"};c.r=function(){return-1778555556};c.x=function(){return Y(new Z,this)};c.$classData=g({g0:0},!1,"org.nlogo.core.AgentKind$Turtle$",{g0:1,d:1,wx:1,t:1,q:1,k:1,h:1});var Eya=void 0;
+function Fi(){Eya||(Eya=(new I3).b());return Eya}function eg(){this.Yi=this.ij=null}eg.prototype=new s_;eg.prototype.constructor=eg;c=eg.prototype;c.Av=function(a){if(Fya(a)){var b=a.Xd;if(this.ij===a.qe&&this.Yi.y(b))return!0}return J3(a)&&(b=a.Xd,this.ij===a.qe&&this.Yi.y(b))?!0:!1};c.iv=function(a,b){this.ij=a;this.Yi=b;return this};c.Za=function(a){return this.Av(a)};c.gb=function(a,b){return this.qu(a,b)};
+c.qu=function(a,b){if(Fya(a)){var d=a.Xd;if(this.ij===a.qe&&this.Yi.y(d))return a}return J3(a)&&(d=a.Xd,this.ij===a.qe&&this.Yi.y(d))?a:b.y(a)};c.$classData=g({l0:0},!1,"org.nlogo.core.BreedIdentifierHandler$$anonfun$breedPrimsMatching$1",{l0:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function gg(){this.Yi=this.ij=null}gg.prototype=new s_;gg.prototype.constructor=gg;c=gg.prototype;
+c.Av=function(a){if(Gya(a)){var b=a.Xd;if(this.ij===a.qe&&this.Yi.y(b))return!0}return J3(a)&&(b=a.Xd,this.ij===a.qe&&this.Yi.y(b))?!0:!1};c.iv=function(a,b){this.ij=a;this.Yi=b;return this};c.Za=function(a){return this.Av(a)};c.gb=function(a,b){return this.qu(a,b)};c.qu=function(a,b){if(Gya(a)){var d=a.Xd;if(this.ij===a.qe&&this.Yi.y(d))return a}return J3(a)&&(d=a.Xd,this.ij===a.qe&&this.Yi.y(d))?a:b.y(a)};
+c.$classData=g({m0:0},!1,"org.nlogo.core.BreedIdentifierHandler$$anonfun$breedPrimsMatching$2",{m0:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function hg(){this.Yi=this.ij=null}hg.prototype=new s_;hg.prototype.constructor=hg;c=hg.prototype;c.Av=function(a){if(Hya(a)){var b=a.Xd;if(this.ij===a.qe&&this.Yi.y(b))return!0}return!1};c.iv=function(a,b){this.ij=a;this.Yi=b;return this};c.Za=function(a){return this.Av(a)};c.gb=function(a,b){return this.qu(a,b)};
+c.qu=function(a,b){if(Hya(a)){var d=a.Xd;if(this.ij===a.qe&&this.Yi.y(d))return a}return b.y(a)};c.$classData=g({n0:0},!1,"org.nlogo.core.BreedIdentifierHandler$$anonfun$breedPrimsMatching$3",{n0:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function og(){this.mr=this.Qa=null}og.prototype=new s_;og.prototype.constructor=og;og.prototype.Za=function(a){return this.mr===raa(this.Qa,a)?this.Qa.Dv(a):!1};
+og.prototype.gb=function(a,b){return this.mr===raa(this.Qa,a)&&this.Qa.Dv(a)?(new bc).Id(this.Qa.Pg,a.va,this.Qa.qe):b.y(a)};og.prototype.$classData=g({o0:0},!1,"org.nlogo.core.BreedIdentifierHandler$BreedPrimSpec$$anonfun$process$2",{o0:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function ag(){this.Vl=this.Pg=this.qe=this.Xd=null;this.a=!1}ag.prototype=new l;ag.prototype.constructor=ag;c=ag.prototype;c.u=function(){return"DirectedLinkPrimitive"};c.ey=function(a){return a.Yf};c.v=function(){return 3};
+c.o=function(a){return this===a?!0:Fya(a)?this.Xd===a.Xd&&this.qe===a.qe?this.Pg===a.Pg:!1:!1};c.w=function(a){switch(a){case 0:return this.Xd;case 1:return this.qe;case 2:return this.Pg;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.az=function(a){this.Vl=a;this.a=!0};c.$y=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/BreedIdentifierHandler.scala: 133");return this.Vl};
+c.Cd=function(a,b,d){this.Xd=a;this.qe=b;this.Pg=d;Qb(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.Dv=function(a){return a.Zg};function Fya(a){return!!(a&&a.$classData&&a.$classData.m.rI)}c.$classData=g({rI:0},!1,"org.nlogo.core.BreedIdentifierHandler$DirectedLinkPrimitive",{rI:1,d:1,wA:1,t:1,q:1,k:1,h:1});function cg(){this.Vl=this.Pg=this.qe=this.Xd=null;this.a=!1}cg.prototype=new l;cg.prototype.constructor=cg;c=cg.prototype;c.u=function(){return"LinkPrimitive"};
+c.ey=function(a){return a.Yf};c.v=function(){return 3};c.o=function(a){return this===a?!0:J3(a)?this.Xd===a.Xd&&this.qe===a.qe?this.Pg===a.Pg:!1:!1};c.w=function(a){switch(a){case 0:return this.Xd;case 1:return this.qe;case 2:return this.Pg;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.az=function(a){this.Vl=a;this.a=!0};
+c.$y=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/BreedIdentifierHandler.scala: 143");return this.Vl};c.Cd=function(a,b,d){this.Xd=a;this.qe=b;this.Pg=d;Qb(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.Dv=function(){return!0};function J3(a){return!!(a&&a.$classData&&a.$classData.m.sI)}
+c.$classData=g({sI:0},!1,"org.nlogo.core.BreedIdentifierHandler$LinkPrimitive",{sI:1,d:1,wA:1,t:1,q:1,k:1,h:1});function Yf(){this.Vl=this.Pg=this.qe=this.Xd=null;this.a=!1}Yf.prototype=new l;Yf.prototype.constructor=Yf;c=Yf.prototype;c.u=function(){return"TurtlePrimitive"};c.ey=function(a){return a.rg};c.v=function(){return 3};c.o=function(a){return this===a?!0:Hya(a)?this.Xd===a.Xd&&this.qe===a.qe?this.Pg===a.Pg:!1:!1};
+c.w=function(a){switch(a){case 0:return this.Xd;case 1:return this.qe;case 2:return this.Pg;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.az=function(a){this.Vl=a;this.a=!0};c.$y=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/BreedIdentifierHandler.scala: 128");return this.Vl};c.Cd=function(a,b,d){this.Xd=a;this.qe=b;this.Pg=d;Qb(this);return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.Dv=function(){return!0};function Hya(a){return!!(a&&a.$classData&&a.$classData.m.tI)}c.$classData=g({tI:0},!1,"org.nlogo.core.BreedIdentifierHandler$TurtlePrimitive",{tI:1,d:1,wA:1,t:1,q:1,k:1,h:1});function bg(){this.Vl=this.Pg=this.qe=this.Xd=null;this.a=!1}bg.prototype=new l;bg.prototype.constructor=bg;c=bg.prototype;c.u=function(){return"UndirectedLinkPrimitive"};c.ey=function(a){return a.Yf};c.v=function(){return 3};
+c.o=function(a){return this===a?!0:Gya(a)?this.Xd===a.Xd&&this.qe===a.qe?this.Pg===a.Pg:!1:!1};c.w=function(a){switch(a){case 0:return this.Xd;case 1:return this.qe;case 2:return this.Pg;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.az=function(a){this.Vl=a;this.a=!0};c.$y=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/BreedIdentifierHandler.scala: 138");return this.Vl};
+c.Cd=function(a,b,d){this.Xd=a;this.qe=b;this.Pg=d;Qb(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.Dv=function(a){return!a.Zg};function Gya(a){return!!(a&&a.$classData&&a.$classData.m.uI)}c.$classData=g({uI:0},!1,"org.nlogo.core.BreedIdentifierHandler$UndirectedLinkPrimitive",{uI:1,d:1,wA:1,t:1,q:1,k:1,h:1});function K3(){this.Bc=null;this.kb=this.Na=this.lb=this.Wa=0;this.cb=null;this.tp=!1;this.So=this.An=null;this.jp=!1}K3.prototype=new l;
+K3.prototype.constructor=K3;c=K3.prototype;c.u=function(){return"Button"};c.v=function(){return 10};c.o=function(a){if(this===a)return!0;if(Ut(a)){var b=this.Bc,d=a.Bc;(null===b?null===d:b.o(d))&&this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb?(b=this.cb,d=a.cb,b=null===b?null===d:b.o(d)):b=!1;b&&this.tp===a.tp&&this.An===a.An?(b=this.So,d=a.So,b=null===b?null===d:b.o(d)):b=!1;return b?this.jp===a.jp:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Bc;case 1:return this.Wa;case 2:return this.lb;case 3:return this.Na;case 4:return this.kb;case 5:return this.cb;case 6:return this.tp;case 7:return this.An;case 8:return this.So;case 9:return this.jp;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function Bsa(a,b,d,e,f,h,k,n,r,y){var E=new K3;E.Bc=a;E.Wa=b;E.lb=d;E.Na=e;E.kb=f;E.cb=h;E.tp=k;E.An=n;E.So=r;E.jp=y;return E}
+c.zm=function(a){var b=this.Bc;a=b.z()?C():(new H).i(a.y(b.R()));return Bsa(a,this.Wa,this.lb,this.Na,this.kb,this.cb,this.tp,this.An,this.So,this.jp)};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Bc)),a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,fC(V(),this.cb)),a=V().ca(a,this.tp?1231:1237),a=V().ca(a,fC(V(),this.An)),a=V().ca(a,fC(V(),this.So)),a=V().ca(a,this.jp?1231:1237);return V().xb(a,10)};c.x=function(){return Y(new Z,this)};
+function Ut(a){return!!(a&&a.$classData&&a.$classData.m.vI)}var Csa=g({vI:0},!1,"org.nlogo.core.Button",{vI:1,d:1,on:1,t:1,q:1,k:1,h:1});K3.prototype.$classData=Csa;function yg(){this.W=null}yg.prototype=new l;yg.prototype.constructor=yg;c=yg.prototype;c.u=function(){return"ChooseableBoolean"};c.qv=function(a){this.W=a;return this};c.lm=function(){return this.W};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.yA?this.W===a.W:!1};
+c.w=function(a){switch(a){case 0:return this.W;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({yA:0},!1,"org.nlogo.core.ChooseableBoolean",{yA:1,d:1,xA:1,t:1,q:1,k:1,h:1});function xg(){this.W=null}xg.prototype=new l;xg.prototype.constructor=xg;c=xg.prototype;c.u=function(){return"ChooseableDouble"};c.lm=function(){return this.W};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.zA?sE(Fm(),this.W,a.W):!1};c.w=function(a){switch(a){case 0:return this.W;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.ZE=function(a){this.W=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({zA:0},!1,"org.nlogo.core.ChooseableDouble",{zA:1,d:1,xA:1,t:1,q:1,k:1,h:1});function L3(){this.W=null}L3.prototype=new l;L3.prototype.constructor=L3;c=L3.prototype;
+c.u=function(){return"ChooseableList"};c.lm=function(){return this.W};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.AA){var b=this.W;a=a.W;return null===b?null===a:H2(b,a)}return!1};function Lba(a){var b=new L3;b.W=a;return b}c.w=function(a){switch(a){case 0:return this.W;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({AA:0},!1,"org.nlogo.core.ChooseableList",{AA:1,d:1,xA:1,t:1,q:1,k:1,h:1});function wg(){this.W=null}wg.prototype=new l;wg.prototype.constructor=wg;c=wg.prototype;c.u=function(){return"ChooseableString"};c.lm=function(){return this.W};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.BA?this.W===a.W:!1};c.w=function(a){switch(a){case 0:return this.W;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.c=function(a){this.W=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({BA:0},!1,"org.nlogo.core.ChooseableString",{BA:1,d:1,xA:1,t:1,q:1,k:1,h:1});function DN(){this.va=null}DN.prototype=new l;DN.prototype.constructor=DN;c=DN.prototype;c.u=function(){return"ClosedLambdaVariable"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.wI?this.va===a.va:!1};
+c.w=function(a){switch(a){case 0:return this.va;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.c=function(a){this.va=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({wI:0},!1,"org.nlogo.core.ClosedLambdaVariable",{wI:1,d:1,r0:1,t:1,q:1,k:1,h:1});function CN(){this.ed=null}CN.prototype=new l;CN.prototype.constructor=CN;c=CN.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.m.xI){var b=this.ed;a=a.ed;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.ed;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.ft=function(a){this.ed=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({xI:0},!1,"org.nlogo.core.ClosedLet",{xI:1,d:1,r0:1,t:1,q:1,k:1,h:1});function UE(){this.Qa=null}UE.prototype=new s_;
+UE.prototype.constructor=UE;
+function Iya(a,b,d){if(null!==b){var e=b.Oa;if("boolean"===typeof e)return""+!!e}if(null!==b&&(e=b.Oa,"number"===typeof e))return a=+e,d=Sa(),b=CE(d,a),d=d.Sb,tE(Sa(),b,d)===a&&-2097152<=d&&(2097152===d?0===b:2097152>d)?GD(Sa(),b,d):""+a;if(null!==b&&(e=b.Oa,Qa(e)))throw(new Re).c("java.lang.Integer: "+e);if(null!==b){var e=b.Oa,f=!!b.fb;if(vg(e))return f?'"'+Lg(Mg(),e)+'"':e}if(null!==b&&(e=b.Oa,vh()===e))return"nobody";if(null!==b){var h=b.Oa,e=!!b.fb,f=!!b.Gf;if(zg(h))return a=a.Qa,b=Qj(h.xc),
+vaa(a,b,e,f)}return d.y(b)}UE.prototype.Za=function(a){a:if(null!==a&&"boolean"===typeof a.Oa||null!==a&&"number"===typeof a.Oa||null!==a&&Qa(a.Oa)||null!==a&&vg(a.Oa))a=!0;else{if(null!==a){var b=a.Oa;if(vh()===b){a=!0;break a}}a=null!==a&&zg(a.Oa)?!0:!1}return a};UE.prototype.gb=function(a,b){return Iya(this,a,b)};UE.prototype.$classData=g({B0:0},!1,"org.nlogo.core.Dump$$anonfun$dumpObject$1",{B0:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function M3(){}M3.prototype=new l;M3.prototype.constructor=M3;c=M3.prototype;
+c.b=function(){return this};c.u=function(){return"Horizontal"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Horizontal"};c.r=function(){return-913872828};c.x=function(){return Y(new Z,this)};c.$classData=g({F0:0},!1,"org.nlogo.core.Horizontal$",{F0:1,d:1,CI:1,t:1,q:1,k:1,h:1});var Jya=void 0;function ata(){Jya||(Jya=(new M3).b());return Jya}function r1(){}r1.prototype=new s_;r1.prototype.constructor=r1;c=r1.prototype;c.gr=function(a){return xQ(a)};c.Vq=function(){return this};
+c.vq=function(a,b){return xQ(a)?a:b.y(a)};c.Za=function(a){return this.gr(a)};c.gb=function(a,b){return this.vq(a,b)};c.$classData=g({L0:0},!1,"org.nlogo.core.Model$$anonfun$1",{L0:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function t1(){}t1.prototype=new s_;t1.prototype.constructor=t1;c=t1.prototype;c.gr=function(a){return!!(a&&a.$classData&&a.$classData.m.$t)};c.Vq=function(){return this};c.vq=function(a,b){return a&&a.$classData&&a.$classData.m.$t?a:b.y(a)};c.Za=function(a){return this.gr(a)};
+c.gb=function(a,b){return this.vq(a,b)};c.$classData=g({M0:0},!1,"org.nlogo.core.Model$$anonfun$interfaceGlobalCommands$1",{M0:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function p1(){}p1.prototype=new s_;p1.prototype.constructor=p1;c=p1.prototype;c.gr=function(a){return!!(a&&a.$classData&&a.$classData.m.Zt)};c.Vq=function(){return this};c.vq=function(a,b){return a&&a.$classData&&a.$classData.m.Zt?a:b.y(a)};c.Za=function(a){return this.gr(a)};c.gb=function(a,b){return this.vq(a,b)};
+c.$classData=g({N0:0},!1,"org.nlogo.core.Model$$anonfun$interfaceGlobals$1",{N0:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function q1(){}q1.prototype=new s_;q1.prototype.constructor=q1;c=q1.prototype;c.gr=function(a){return xQ(a)};c.Vq=function(){return this};c.vq=function(a,b){return xQ(a)?a:b.y(a)};c.Za=function(a){return this.gr(a)};c.gb=function(a,b){return this.vq(a,b)};c.$classData=g({O0:0},!1,"org.nlogo.core.Model$$anonfun$view$1",{O0:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});
+function N3(){this.Bc=null;this.kb=this.Na=this.lb=this.Wa=0;this.cb=null;this.Td=this.ei=0}N3.prototype=new l;N3.prototype.constructor=N3;c=N3.prototype;c.u=function(){return"Monitor"};c.v=function(){return 8};c.o=function(a){if(this===a)return!0;if(Wt(a)){var b=this.Bc,d=a.Bc;(null===b?null===d:b.o(d))&&this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb?(b=this.cb,d=a.cb,b=null===b?null===d:b.o(d)):b=!1;return b&&this.ei===a.ei?this.Td===a.Td:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Bc;case 1:return this.Wa;case 2:return this.lb;case 3:return this.Na;case 4:return this.kb;case 5:return this.cb;case 6:return this.ei;case 7:return this.Td;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function Osa(a,b,d,e,f,h,k,n){var r=new N3;r.Bc=a;r.Wa=b;r.lb=d;r.Na=e;r.kb=f;r.cb=h;r.ei=k;r.Td=n;return r}
+c.zm=function(a){var b=this.Bc;a=b.z()?C():(new H).i(a.y(b.R()));return Osa(a,this.Wa,this.lb,this.Na,this.kb,this.cb,this.ei,this.Td)};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Bc)),a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,fC(V(),this.cb)),a=V().ca(a,this.ei),a=V().ca(a,this.Td);return V().xb(a,8)};c.x=function(){return Y(new Z,this)};function Wt(a){return!!(a&&a.$classData&&a.$classData.m.GI)}
+var Psa=g({GI:0},!1,"org.nlogo.core.Monitor",{GI:1,d:1,on:1,t:1,q:1,k:1,h:1});N3.prototype.$classData=Psa;function IU(){this.W=0;this.Ci=null}IU.prototype=new l;IU.prototype.constructor=IU;c=IU.prototype;c.u=function(){return"NumericInput"};c.v=function(){return 2};c.o=function(a){return this===a?!0:GU(a)?this.W===a.W?this.Ci===a.Ci:!1:!1};c.iU=function(){return""+this.W};c.w=function(a){switch(a){case 0:return this.W;case 1:return this.Ci;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.we=function(){return this.Ci.wj()};c.r=function(){var a=-889275714,a=V().ca(a,BE(V(),this.W)),a=V().ca(a,fC(V(),this.Ci));return V().xb(a,2)};c.x=function(){return Y(new Z,this)};function LU(a,b,d){a.W=b;a.Ci=d;return a}function GU(a){return!!(a&&a.$classData&&a.$classData.m.HI)}c.$classData=g({HI:0},!1,"org.nlogo.core.NumericInput",{HI:1,d:1,j0:1,t:1,q:1,k:1,h:1});function O3(){this.cb=null;this.a=!1}O3.prototype=new l;O3.prototype.constructor=O3;c=O3.prototype;
+c.b=function(){this.cb="Color";this.a=!0;return this};c.u=function(){return"ColorLabel"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"ColorLabel"};c.r=function(){return-1029938831};c.x=function(){return Y(new Z,this)};c.wj=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/InputBox.scala: 31");return this.cb};
+c.$classData=g({U0:0},!1,"org.nlogo.core.NumericInput$ColorLabel$",{U0:1,d:1,W0:1,t:1,q:1,k:1,h:1});var Kya=void 0;function KU(){Kya||(Kya=(new O3).b());return Kya}function P3(){this.cb=null;this.a=!1}P3.prototype=new l;P3.prototype.constructor=P3;c=P3.prototype;c.b=function(){this.cb="Number";this.a=!0;return this};c.u=function(){return"NumberLabel"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"NumberLabel"};c.r=function(){return-1907359477};
+c.x=function(){return Y(new Z,this)};c.wj=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/InputBox.scala: 30");return this.cb};c.$classData=g({V0:0},!1,"org.nlogo.core.NumericInput$NumberLabel$",{V0:1,d:1,W0:1,t:1,q:1,k:1,h:1});var Lya=void 0;function JU(){Lya||(Lya=(new P3).b());return Lya}function Q3(){this.Td=this.kb=this.Na=this.lb=this.Wa=0}Q3.prototype=new l;Q3.prototype.constructor=Q3;c=Q3.prototype;c.u=function(){return"Output"};
+c.v=function(){return 5};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.GA?this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb&&this.Td===a.Td:!1};c.w=function(a){switch(a){case 0:return this.Wa;case 1:return this.lb;case 2:return this.Na;case 3:return this.kb;case 4:return this.Td;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function Qsa(a,b,d,e,f){var h=new Q3;h.Wa=a;h.lb=b;h.Na=d;h.kb=e;h.Td=f;return h}c.zm=function(){return this};
+c.r=function(){var a=-889275714,a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,this.Td);return V().xb(a,5)};c.x=function(){return Y(new Z,this)};var Rsa=g({GA:0},!1,"org.nlogo.core.Output",{GA:1,d:1,on:1,t:1,q:1,k:1,h:1});Q3.prototype.$classData=Rsa;function QU(){this.cb=null;this.kb=this.Na=this.lb=this.Wa=0;this.Io=this.Go=null;this.oj=this.pj=this.mj=this.nj=0;this.Xn=this.yn=!1;this.ko=this.Cg=this.Bg=null}QU.prototype=new l;
+QU.prototype.constructor=QU;function Ysa(a,b,d,e,f,h,k,n,r,y,E,Q,R,da,ma,ra,Ca){a.cb=b;a.Wa=d;a.lb=e;a.Na=f;a.kb=h;a.Go=k;a.Io=n;a.nj=r;a.mj=y;a.pj=E;a.oj=Q;a.yn=R;a.Xn=da;a.Bg=ma;a.Cg=ra;a.ko=Ca;return a}c=QU.prototype;c.u=function(){return"Plot"};c.v=function(){return 16};
+c.o=function(a){if(this===a)return!0;if(Ot(a)){var b=this.cb,d=a.cb;(null===b?null===d:b.o(d))&&this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb?(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.nj===a.nj&&this.mj===a.mj&&this.pj===a.pj&&this.oj===a.oj&&this.yn===a.yn&&this.Xn===a.Xn&&this.Bg===a.Bg&&this.Cg===a.Cg)return b=this.ko,a=a.ko,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.cb;case 1:return this.Wa;case 2:return this.lb;case 3:return this.Na;case 4:return this.kb;case 5:return this.Go;case 6:return this.Io;case 7:return this.nj;case 8:return this.mj;case 9:return this.pj;case 10:return this.oj;case 11:return this.yn;case 12:return this.Xn;case 13:return this.Bg;case 14:return this.Cg;case 15:return this.ko;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+function Mya(a,b){var d=b.y(a.Bg),e=b.y(a.Cg),f=a.ko;b=function(a,b){return function(a){var d=b.y(a.Bg),e=b.y(a.Cg);return Usa(new PU,a.cb,a.Ol,a.Sl,a.Db,a.Em,d,e)}}(a,b);var h=x().s;if(h===x().s)if(f===u())b=u();else{for(var h=f.Y(),k=h=Og(new Pg,b(h),u()),f=f.$();f!==u();)var n=f.Y(),n=Og(new Pg,b(n),u()),k=k.Ka=n,f=f.$();b=h}else{for(h=Nc(f,h);!f.z();)k=f.Y(),h.Ma(b(k)),f=f.$();b=h.Ba()}return Ysa(new QU,a.cb,a.Wa,a.lb,a.Na,a.kb,a.Go,a.Io,a.nj,a.mj,a.pj,a.oj,a.yn,a.Xn,d,e,b)}
+c.zm=function(a){return Mya(this,a)};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.cb)),a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,fC(V(),this.Go)),a=V().ca(a,fC(V(),this.Io)),a=V().ca(a,BE(V(),this.nj)),a=V().ca(a,BE(V(),this.mj)),a=V().ca(a,BE(V(),this.pj)),a=V().ca(a,BE(V(),this.oj)),a=V().ca(a,this.yn?1231:1237),a=V().ca(a,this.Xn?1231:1237),a=V().ca(a,fC(V(),this.Bg)),a=V().ca(a,fC(V(),this.Cg)),a=V().ca(a,fC(V(),this.ko));return V().xb(a,16)};
+c.x=function(){return Y(new Z,this)};function Ot(a){return!!(a&&a.$classData&&a.$classData.m.II)}var Xsa=g({II:0},!1,"org.nlogo.core.Plot",{II:1,d:1,on:1,t:1,q:1,k:1,h:1});QU.prototype.$classData=Xsa;function si(){this.Ho=0;this.Rn=!1;this.Vk=null}si.prototype=new l;si.prototype.constructor=si;c=si.prototype;c.u=function(){return"LinkLine"};c.kF=function(){return this.Rn};c.v=function(){return 3};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.VI&&this.Ho===a.Ho&&this.Rn===a.Rn){var b=this.Vk;a=a.Vk;return null===b?null===a:b.o(a)}return!1};c.lH=function(){return this.Ho};c.w=function(a){switch(a){case 0:return this.Ho;case 1:return this.Rn;case 2:return this.Vk;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.QD=function(){return this.Vk};
+c.r=function(){var a=-889275714,a=V().ca(a,BE(V(),this.Ho)),a=V().ca(a,this.Rn?1231:1237),a=V().ca(a,fC(V(),this.Vk));return V().xb(a,3)};c.x=function(){return Y(new Z,this)};c.hv=function(a,b,d){this.Ho=a;this.Rn=b;this.Vk=d;return this};c.$classData=g({VI:0},!1,"org.nlogo.core.ShapeParser$LinkLine",{VI:1,d:1,c1:1,t:1,q:1,k:1,h:1});function MU(){this.Ci=this.W=null;this.lr=!1}MU.prototype=new l;MU.prototype.constructor=MU;c=MU.prototype;c.u=function(){return"StringInput"};c.v=function(){return 3};
+c.o=function(a){return this===a?!0:HU(a)?this.W===a.W&&this.Ci===a.Ci?this.lr===a.lr:!1:!1};c.iU=function(){var a=Nn();return ac(a,this.W,!1,!1)};c.w=function(a){switch(a){case 0:return this.W;case 1:return this.Ci;case 2:return this.lr;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.we=function(){return this.Ci.wj()};function Lsa(a,b,d,e){a.W=b;a.Ci=d;a.lr=e;return a}
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.W)),a=V().ca(a,fC(V(),this.Ci)),a=V().ca(a,this.lr?1231:1237);return V().xb(a,3)};c.x=function(){return Y(new Z,this)};function HU(a){return!!(a&&a.$classData&&a.$classData.m.bJ)}c.$classData=g({bJ:0},!1,"org.nlogo.core.StringInput",{bJ:1,d:1,j0:1,t:1,q:1,k:1,h:1});function R3(){this.cb=null;this.a=!1}R3.prototype=new l;R3.prototype.constructor=R3;c=R3.prototype;c.b=function(){this.cb="String (commands)";this.a=!0;return this};c.u=function(){return"CommandLabel"};
+c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"CommandLabel"};c.r=function(){return 2102450825};c.x=function(){return Y(new Z,this)};c.wj=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/InputBox.scala: 56");return this.cb};c.$classData=g({l1:0},!1,"org.nlogo.core.StringInput$CommandLabel$",{l1:1,d:1,cJ:1,t:1,q:1,k:1,h:1});var Nya=void 0;function Ksa(){Nya||(Nya=(new R3).b());return Nya}
+function S3(){this.cb=null;this.a=!1}S3.prototype=new l;S3.prototype.constructor=S3;c=S3.prototype;c.b=function(){this.cb="String (reporter)";this.a=!0;return this};c.u=function(){return"ReporterLabel"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"ReporterLabel"};c.r=function(){return 1026604659};c.x=function(){return Y(new Z,this)};
+c.wj=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/InputBox.scala: 55");return this.cb};c.$classData=g({m1:0},!1,"org.nlogo.core.StringInput$ReporterLabel$",{m1:1,d:1,cJ:1,t:1,q:1,k:1,h:1});var Oya=void 0;function Jsa(){Oya||(Oya=(new S3).b());return Oya}function T3(){this.cb=null;this.a=!1}T3.prototype=new l;T3.prototype.constructor=T3;c=T3.prototype;c.b=function(){this.cb="String";this.a=!0;return this};c.u=function(){return"StringLabel"};
+c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"StringLabel"};c.r=function(){return 139409731};c.x=function(){return Y(new Z,this)};c.wj=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/InputBox.scala: 54");return this.cb};c.$classData=g({n1:0},!1,"org.nlogo.core.StringInput$StringLabel$",{n1:1,d:1,cJ:1,t:1,q:1,k:1,h:1});var Pya=void 0;function Isa(){Pya||(Pya=(new T3).b());return Pya}
+function U3(){this.Tf=this.$l=null;this.Zg=this.$g=!1}U3.prototype=new l;U3.prototype.constructor=U3;c=U3.prototype;c.u=function(){return"Breed"};c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(io(a)){var b=this.$l,d=a.$l;(null===b?null===d:b.o(d))?(b=this.Tf,d=a.Tf,b=null===b?null===d:b.o(d)):b=!1;return b&&this.$g===a.$g?this.Zg===a.Zg:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.$l;case 1:return this.Tf;case 2:return this.$g;case 3:return this.Zg;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};function Xoa(a,b,d,e){var f=new U3;f.$l=a;f.Tf=b;f.$g=d;f.Zg=e;return f}c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.$l)),a=V().ca(a,fC(V(),this.Tf)),a=V().ca(a,this.$g?1231:1237),a=V().ca(a,this.Zg?1231:1237);return V().xb(a,4)};c.x=function(){return Y(new Z,this)};
+function io(a){return!!(a&&a.$classData&&a.$classData.m.dJ)}c.$classData=g({dJ:0},!1,"org.nlogo.core.StructureDeclarations$Breed",{dJ:1,d:1,yx:1,t:1,q:1,k:1,h:1});function wO(){this.ag=this.f=null}wO.prototype=new l;wO.prototype.constructor=wO;c=wO.prototype;c.IE=function(a,b){this.f=a;this.ag=b;return this};c.u=function(){return"Extensions"};c.v=function(){return 2};
+c.o=function(a){if(this===a)return!0;if(so(a)){var b=this.f,d=a.f;if(null===b?null===d:b.o(d))return b=this.ag,a=a.ag,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.f;case 1:return this.ag;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function so(a){return!!(a&&a.$classData&&a.$classData.m.eJ)}
+c.$classData=g({eJ:0},!1,"org.nlogo.core.StructureDeclarations$Extensions",{eJ:1,d:1,yx:1,t:1,q:1,k:1,h:1});function AO(){this.ag=this.f=null}AO.prototype=new l;AO.prototype.constructor=AO;c=AO.prototype;c.IE=function(a,b){this.f=a;this.ag=b;return this};c.u=function(){return"Includes"};c.v=function(){return 2};c.o=function(a){if(this===a)return!0;if(to(a)){var b=this.f,d=a.f;if(null===b?null===d:b.o(d))return b=this.ag,a=a.ag,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.f;case 1:return this.ag;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function to(a){return!!(a&&a.$classData&&a.$classData.m.gJ)}c.$classData=g({gJ:0},!1,"org.nlogo.core.StructureDeclarations$Includes",{gJ:1,d:1,yx:1,t:1,q:1,k:1,h:1});function CO(){this.va=null;this.Qn=!1;this.Ii=this.Nn=null}CO.prototype=new l;CO.prototype.constructor=CO;c=CO.prototype;c.u=function(){return"Procedure"};
+c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(uo(a)){var b=this.va,d=a.va;(null===b?null===d:b.o(d))&&this.Qn===a.Qn?(b=this.Nn,d=a.Nn,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.Ii,a=a.Ii,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.va;case 1:return this.Qn;case 2:return this.Nn;case 3:return this.Ii;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.va)),a=V().ca(a,this.Qn?1231:1237),a=V().ca(a,fC(V(),this.Nn)),a=V().ca(a,fC(V(),this.Ii));return V().xb(a,4)};c.x=function(){return Y(new Z,this)};function uo(a){return!!(a&&a.$classData&&a.$classData.m.hJ)}c.$classData=g({hJ:0},!1,"org.nlogo.core.StructureDeclarations$Procedure",{hJ:1,d:1,yx:1,t:1,q:1,k:1,h:1});function rO(){this.ag=this.Og=null}rO.prototype=new l;rO.prototype.constructor=rO;c=rO.prototype;c.u=function(){return"Variables"};
+c.v=function(){return 2};c.o=function(a){if(this===a)return!0;if(ro(a)){var b=this.Og,d=a.Og;if(null===b?null===d:b.o(d))return b=this.ag,a=a.ag,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Og;case 1:return this.ag;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function ro(a){return!!(a&&a.$classData&&a.$classData.m.iJ)}
+c.$classData=g({iJ:0},!1,"org.nlogo.core.StructureDeclarations$Variables",{iJ:1,d:1,yx:1,t:1,q:1,k:1,h:1});function V3(){this.cb=null;this.Db=this.Td=this.kb=this.Na=this.lb=this.Wa=0;this.Yr=!1}V3.prototype=new l;V3.prototype.constructor=V3;c=V3.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.m.OA){var b=this.cb,d=a.cb;return(null===b?null===d:b.o(d))&&this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb&&this.Td===a.Td&&this.Db===a.Db?this.Yr===a.Yr:!1}return!1};c.w=function(a){switch(a){case 0:return this.cb;case 1:return this.Wa;case 2:return this.lb;case 3:return this.Na;case 4:return this.kb;case 5:return this.Td;case 6:return this.Db;case 7:return this.Yr;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};function eta(a,b,d,e,f,h,k,n){var r=new V3;r.cb=a;r.Wa=b;r.lb=d;r.Na=e;r.kb=f;r.Td=h;r.Db=k;r.Yr=n;return r}c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.cb)),a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,this.Td),a=V().ca(a,BE(V(),this.Db)),a=V().ca(a,this.Yr?1231:1237);return V().xb(a,8)};c.zm=function(){return this};c.x=function(){return Y(new Z,this)};
+var fta=g({OA:0},!1,"org.nlogo.core.TextBox",{OA:1,d:1,on:1,t:1,q:1,k:1,h:1});V3.prototype.$classData=fta;function Gl(){this.ma=this.W=this.sb=this.Zb=null}Gl.prototype=new l;Gl.prototype.constructor=Gl;function Fl(a,b,d,e,f){a.Zb=b;a.sb=d;a.W=e;a.ma=f;return a}c=Gl.prototype;c.u=function(){return"Token"};c.v=function(){return 3};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.lJ?this.Zb===a.Zb&&this.sb===a.sb?Em(Fm(),this.W,a.W):!1:!1};
+c.w=function(a){switch(a){case 0:return this.Zb;case 1:return this.sb;case 2:return this.W;default:throw(new O).c(""+a);}};function eh(a,b,d,e){a=Fl(new Gl,d,e,b,a.ma);b.K(a);return a}c.wc=function(){return this.ma};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};var Oda=g({lJ:0},!1,"org.nlogo.core.Token",{lJ:1,d:1,No:1,t:1,q:1,k:1,h:1});Gl.prototype.$classData=Oda;function W3(){}W3.prototype=new l;W3.prototype.constructor=W3;c=W3.prototype;
+c.b=function(){return this};c.u=function(){return"Bad"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Bad"};c.r=function(){return 66533};c.x=function(){return Y(new Z,this)};c.$classData=g({s1:0},!1,"org.nlogo.core.TokenType$Bad$",{s1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var Qya=void 0;function $l(){Qya||(Qya=(new W3).b());return Qya}function tl(){}tl.prototype=new l;tl.prototype.constructor=tl;c=tl.prototype;c.b=function(){return this};c.u=function(){return"CloseBrace"};
+c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"CloseBrace"};c.r=function(){return-94940357};c.x=function(){return Y(new Z,this)};c.$classData=g({t1:0},!1,"org.nlogo.core.TokenType$CloseBrace$",{t1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var sl=void 0;function X3(){}X3.prototype=new l;X3.prototype.constructor=X3;c=X3.prototype;c.b=function(){return this};c.u=function(){return"CloseBracket"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"CloseBracket"};
+c.r=function(){return-1043360848};c.x=function(){return Y(new Z,this)};c.$classData=g({u1:0},!1,"org.nlogo.core.TokenType$CloseBracket$",{u1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var Rya=void 0;function xl(){Rya||(Rya=(new X3).b());return Rya}function Y3(){}Y3.prototype=new l;Y3.prototype.constructor=Y3;c=Y3.prototype;c.b=function(){return this};c.u=function(){return"CloseParen"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"CloseParen"};c.r=function(){return-82501102};
+c.x=function(){return Y(new Z,this)};c.$classData=g({v1:0},!1,"org.nlogo.core.TokenType$CloseParen$",{v1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var Sya=void 0;function vl(){Sya||(Sya=(new Y3).b());return Sya}function rl(){}rl.prototype=new l;rl.prototype.constructor=rl;c=rl.prototype;c.b=function(){return this};c.u=function(){return"Comma"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Comma"};c.r=function(){return 65290933};c.x=function(){return Y(new Z,this)};
+c.$classData=g({w1:0},!1,"org.nlogo.core.TokenType$Comma$",{w1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var ql=void 0;function Z3(){}Z3.prototype=new l;Z3.prototype.constructor=Z3;c=Z3.prototype;c.b=function(){return this};c.u=function(){return"Command"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Command"};c.r=function(){return-1679919317};c.x=function(){return Y(new Z,this)};c.$classData=g({x1:0},!1,"org.nlogo.core.TokenType$Command$",{x1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});
+var Tya=void 0;function Zf(){Tya||(Tya=(new Z3).b());return Tya}function $3(){}$3.prototype=new l;$3.prototype.constructor=$3;c=$3.prototype;c.b=function(){return this};c.u=function(){return"Comment"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Comment"};c.r=function(){return-1679915457};c.x=function(){return Y(new Z,this)};c.$classData=g({y1:0},!1,"org.nlogo.core.TokenType$Comment$",{y1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var Uya=void 0;
+function zl(){Uya||(Uya=(new $3).b());return Uya}function a4(){}a4.prototype=new l;a4.prototype.constructor=a4;c=a4.prototype;c.b=function(){return this};c.u=function(){return"Eof"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Eof"};c.r=function(){return 69852};c.x=function(){return Y(new Z,this)};c.$classData=g({z1:0},!1,"org.nlogo.core.TokenType$Eof$",{z1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var Vya=void 0;function Ec(){Vya||(Vya=(new a4).b());return Vya}
+function b4(){}b4.prototype=new l;b4.prototype.constructor=b4;c=b4.prototype;c.b=function(){return this};c.u=function(){return"Extension"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Extension"};c.r=function(){return 1391410207};c.x=function(){return Y(new Z,this)};c.$classData=g({A1:0},!1,"org.nlogo.core.TokenType$Extension$",{A1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var Wya=void 0;function Vca(){Wya||(Wya=(new b4).b());return Wya}function c4(){}c4.prototype=new l;
+c4.prototype.constructor=c4;c=c4.prototype;c.b=function(){return this};c.u=function(){return"Ident"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Ident"};c.r=function(){return 70496720};c.x=function(){return Y(new Z,this)};c.$classData=g({B1:0},!1,"org.nlogo.core.TokenType$Ident$",{B1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var Xya=void 0;function yl(){Xya||(Xya=(new c4).b());return Xya}function d4(){}d4.prototype=new l;d4.prototype.constructor=d4;c=d4.prototype;
+c.b=function(){return this};c.u=function(){return"Keyword"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Keyword"};c.r=function(){return 850245065};c.x=function(){return Y(new Z,this)};c.$classData=g({C1:0},!1,"org.nlogo.core.TokenType$Keyword$",{C1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var Yya=void 0;function fO(){Yya||(Yya=(new d4).b());return Yya}function e4(){}e4.prototype=new l;e4.prototype.constructor=e4;c=e4.prototype;c.b=function(){return this};c.u=function(){return"Literal"};
+c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Literal"};c.r=function(){return 1847113871};c.x=function(){return Y(new Z,this)};c.$classData=g({D1:0},!1,"org.nlogo.core.TokenType$Literal$",{D1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var Zya=void 0;function cm(){Zya||(Zya=(new e4).b());return Zya}function f4(){}f4.prototype=new l;f4.prototype.constructor=f4;c=f4.prototype;c.b=function(){return this};c.u=function(){return"OpenBrace"};c.v=function(){return 0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"OpenBrace"};c.r=function(){return-771509783};c.x=function(){return Y(new Z,this)};c.$classData=g({E1:0},!1,"org.nlogo.core.TokenType$OpenBrace$",{E1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var $ya=void 0;function Ica(){$ya||($ya=(new f4).b());return $ya}function g4(){}g4.prototype=new l;g4.prototype.constructor=g4;c=g4.prototype;c.b=function(){return this};c.u=function(){return"OpenBracket"};c.v=function(){return 0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"OpenBracket"};c.r=function(){return 1608449758};c.x=function(){return Y(new Z,this)};c.$classData=g({F1:0},!1,"org.nlogo.core.TokenType$OpenBracket$",{F1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var aza=void 0;function wl(){aza||(aza=(new g4).b());return aza}function h4(){}h4.prototype=new l;h4.prototype.constructor=h4;c=h4.prototype;c.b=function(){return this};c.u=function(){return"OpenParen"};c.v=function(){return 0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"OpenParen"};c.r=function(){return-759070528};c.x=function(){return Y(new Z,this)};c.$classData=g({G1:0},!1,"org.nlogo.core.TokenType$OpenParen$",{G1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var bza=void 0;function ul(){bza||(bza=(new h4).b());return bza}function i4(){}i4.prototype=new l;i4.prototype.constructor=i4;c=i4.prototype;c.b=function(){return this};c.u=function(){return"Reporter"};c.v=function(){return 0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Reporter"};c.r=function(){return-362395391};c.x=function(){return Y(new Z,this)};c.$classData=g({H1:0},!1,"org.nlogo.core.TokenType$Reporter$",{H1:1,d:1,Mi:1,t:1,q:1,k:1,h:1});var cza=void 0;function $f(){cza||(cza=(new i4).b());return cza}function j4(){}j4.prototype=new Asa;j4.prototype.constructor=j4;c=j4.prototype;c.b=function(){tU.prototype.hb.call(this,0);return this};c.u=function(){return"Continuous"};c.v=function(){return 0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Continuous"};c.r=function(){return-1922388177};c.x=function(){return Y(new Z,this)};c.$classData=g({J1:0},!1,"org.nlogo.core.UpdateMode$Continuous$",{J1:1,nJ:1,d:1,k:1,h:1,t:1,q:1});var dza=void 0;function jta(){dza||(dza=(new j4).b());return dza}function k4(){}k4.prototype=new Asa;k4.prototype.constructor=k4;c=k4.prototype;c.b=function(){tU.prototype.hb.call(this,1);return this};c.u=function(){return"TickBased"};c.v=function(){return 0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"TickBased"};c.r=function(){return 1899965430};c.x=function(){return Y(new Z,this)};c.$classData=g({K1:0},!1,"org.nlogo.core.UpdateMode$TickBased$",{K1:1,nJ:1,d:1,k:1,h:1,t:1,q:1});var eza=void 0;function kta(){eza||(eza=(new k4).b());return eza}function l4(){}l4.prototype=new l;l4.prototype.constructor=l4;c=l4.prototype;c.b=function(){return this};c.u=function(){return"Vertical"};c.v=function(){return 0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Vertical"};c.r=function(){return-1919497322};c.x=function(){return Y(new Z,this)};c.$classData=g({L1:0},!1,"org.nlogo.core.Vertical$",{L1:1,d:1,CI:1,t:1,q:1,k:1,h:1});var fza=void 0;function bta(){fza||(fza=(new l4).b());return fza}function UU(){this.kb=this.Na=this.lb=this.Wa=0;this.Os=null;this.Td=0;this.fq=null;this.Lr=!1;this.Rr=null;this.Mm=this.Pm=this.Jq=0;this.gn=!1;this.Nm=this.Qm=0;this.hn=!1;this.a=this.Tm=0}UU.prototype=new l;
+UU.prototype.constructor=UU;c=UU.prototype;c.u=function(){return"View"};c.v=function(){return 10};function Bga(a){if(0===(64&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Widget.scala: 134");return a.Tm}
+c.o=function(a){if(this===a)return!0;if(xQ(a)){if(this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb)var b=this.Os,d=a.Os,b=null===b?null===d:b.o(d);else b=!1;b&&this.Td===a.Td&&this.fq===a.fq&&this.Lr===a.Lr?(b=this.Rr,d=a.Rr,b=null===b?null===d:b.o(d)):b=!1;return b?this.Jq===a.Jq:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Wa;case 1:return this.lb;case 2:return this.Na;case 3:return this.kb;case 4:return this.Os;case 5:return this.Td;case 6:return this.fq;case 7:return this.Lr;case 8:return this.Rr;case 9:return this.Jq;default:throw(new O).c(""+a);}};function xga(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Widget.scala: 126");return a.Pm}c.l=function(){return X(W(),this)};
+function Dga(a){if(0===(32&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Widget.scala: 132");return a.hn}function Aga(a){if(0===(16&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Widget.scala: 131");return a.Nm}
+function gta(a,b,d,e,f,h,k,n,r,y,E){a.Wa=b;a.lb=d;a.Na=e;a.kb=f;a.Os=h;a.Td=k;a.fq=n;a.Lr=r;a.Rr=y;a.Jq=E;a.Pm=h.Pm;a.a=(1|a.a)<<24>>24;a.Mm=h.Mm;a.a=(2|a.a)<<24>>24;a.gn=h.gn;a.a=(4|a.a)<<24>>24;a.Qm=h.Qm;a.a=(8|a.a)<<24>>24;a.Nm=h.Nm;a.a=(16|a.a)<<24>>24;a.hn=h.hn;a.a=(32|a.a)<<24>>24;a.Tm=h.Tm;a.a=(64|a.a)<<24>>24;return a}c.zm=function(){return this};
+c.r=function(){var a=-889275714,a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,fC(V(),this.Os)),a=V().ca(a,this.Td),a=V().ca(a,fC(V(),this.fq)),a=V().ca(a,this.Lr?1231:1237),a=V().ca(a,fC(V(),this.Rr)),a=V().ca(a,BE(V(),this.Jq));return V().xb(a,10)};function yga(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Widget.scala: 127");return a.Mm}
+function zga(a){if(0===(8&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Widget.scala: 130");return a.Qm}c.x=function(){return Y(new Z,this)};function Cga(a){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Widget.scala: 128");return a.gn}function xQ(a){return!!(a&&a.$classData&&a.$classData.m.oJ)}var ita=g({oJ:0},!1,"org.nlogo.core.View",{oJ:1,d:1,on:1,t:1,q:1,k:1,h:1});
+UU.prototype.$classData=ita;function OU(){this.Hb=null}OU.prototype=new l;OU.prototype.constructor=OU;c=OU.prototype;c.u=function(){return"BooleanLine"};c.v=function(){return 1};c.Fi=function(a){return this.ur(a)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.qJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Iq=function(a){return a?"1":"0"};
+c.kj=function(a){return"1"===a||"0"===a};c.ur=function(a){return"1"===a};c.r=function(){return T(S(),this)};c.La=function(a){this.Hb=a;return this};c.yi=function(a){return this.Iq(!!a)};c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};c.$classData=g({qJ:0},!1,"org.nlogo.core.model.BooleanLine",{qJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function EU(){this.Hb=null}EU.prototype=new l;EU.prototype.constructor=EU;c=EU.prototype;c.u=function(){return"CharLine"};c.v=function(){return 1};
+c.Fi=function(a){a=65535&(a.charCodeAt(0)|0);return Oe(a)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.rJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.kj=function(a){return 1<=(a.length|0)};c.r=function(){return T(S(),this)};c.La=function(a){this.Hb=a;return this};c.yi=function(a){return ba.String.fromCharCode(null===a?0:a.W)};
+c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};c.$classData=g({rJ:0},!1,"org.nlogo.core.model.CharLine",{rJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function RU(){this.Hb=null}RU.prototype=new l;RU.prototype.constructor=RU;c=RU.prototype;c.u=function(){return"DoubleLine"};c.v=function(){return 1};c.Fi=function(a){a=(new Tb).c(a);return Bh(Ch(),a.U)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.sJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.kj=function(a){try{var b=(new Tb).c(a),d=Ch(),e=(new Gz).i(Bh(d,b.U))}catch(f){if(a=qn(qg(),f),null!==a){b=jw(kw(),a);if(b.z())throw pg(qg(),a);a=b.R();e=(new Fz).Dd(a)}else throw f;}return e.Ky()};c.r=function(){return T(S(),this)};c.La=function(a){this.Hb=a;return this};c.yi=function(a){return""+ +a};c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};
+c.$classData=g({sJ:0},!1,"org.nlogo.core.model.DoubleLine",{sJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function AU(){this.Hb=null}AU.prototype=new l;AU.prototype.constructor=AU;c=AU.prototype;c.u=function(){return"EscapedStringLine"};c.v=function(){return 1};c.Fi=function(a){return Oi(Mg(),a)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.tJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.kj=function(){return!0};c.r=function(){return T(S(),this)};c.La=function(a){this.Hb=a;return this};c.yi=function(a){return Lg(Mg(),a)};c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};c.$classData=g({tJ:0},!1,"org.nlogo.core.model.EscapedStringLine",{tJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function wU(){this.Hb=null}wU.prototype=new l;wU.prototype.constructor=wU;c=wU.prototype;c.u=function(){return"IntLine"};c.v=function(){return 1};
+c.Fi=function(a){a=(new Tb).c(a);return gi(ei(),a.U,10)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.uJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.kj=function(a){try{var b=(new Tb).c(a),d=ei(),e=(new Gz).i(gi(d,b.U,10))}catch(f){if(a=qn(qg(),f),null!==a){b=jw(kw(),a);if(b.z())throw pg(qg(),a);a=b.R();e=(new Fz).Dd(a)}else throw f;}return e.Ky()};
+c.r=function(){return T(S(),this)};c.La=function(a){this.Hb=a;return this};c.yi=function(a){return""+(a|0)};c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};c.$classData=g({uJ:0},!1,"org.nlogo.core.model.IntLine",{uJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function TU(){this.Hb=null}TU.prototype=new l;TU.prototype.constructor=TU;c=TU.prototype;c.u=function(){return"InvertedBooleanLine"};c.v=function(){return 1};c.Fi=function(a){return this.ur(a)};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.vJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Iq=function(a){return a?"0":"1"};c.kj=function(a){return"0"===a||"1"===a};c.ur=function(a){return"0"===a};c.r=function(){return T(S(),this)};c.La=function(a){this.Hb=a;return this};c.yi=function(a){return this.Iq(!!a)};
+c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};c.$classData=g({vJ:0},!1,"org.nlogo.core.model.InvertedBooleanLine",{vJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function DU(){this.jr=null}DU.prototype=new l;DU.prototype.constructor=DU;c=DU.prototype;c.u=function(){return"MapLine"};c.v=function(){return 1};c.Fi=function(a){return rg(this.jr,gza(a)).R()};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.wJ){var b=this.jr;a=a.jr;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.jr;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.kj=function(a){for(var b=this.jr,d=fc(new gc,hc());!b.z();){var e=b.Y();ic(d,e);b=b.$()}return d.Va.ab(a)};c.br=function(a){this.jr=a;return this};c.r=function(){return T(S(),this)};c.yi=function(a){return rg(this.jr,hza(a)).R()};c.x=function(){return Y(new Z,this)};c.Mh=function(){return C()};c.$classData=g({wJ:0},!1,"org.nlogo.core.model.MapLine",{wJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});
+function m4(){this.hH=null}m4.prototype=new s_;m4.prototype.constructor=m4;function hza(a){var b=new m4;b.hH=a;return b}c=m4.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Em(Fm(),e,this.hH))return d}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&(a=a.na(),Em(Fm(),a,this.hH))?!0:!1};c.$classData=g({P1:0},!1,"org.nlogo.core.model.MapLine$$anonfun$format$1",{P1:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});
+function n4(){this.AF=null}n4.prototype=new s_;n4.prototype.constructor=n4;c=n4.prototype;c.Dc=function(a,b){if(null!==a){var d=a.na();if(a.ja()===this.AF)return d}return b.y(a)};function gza(a){var b=new n4;b.AF=a;return b}c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&a.ja()===this.AF?!0:!1};c.$classData=g({Q1:0},!1,"org.nlogo.core.model.MapLine$$anonfun$parse$1",{Q1:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});
+function yU(){this.Nr=this.pr=null}yU.prototype=new l;yU.prototype.constructor=yU;c=yU.prototype;c.u=function(){return"OptionLine"};c.v=function(){return 2};c.Fi=function(a){return this.pr===a?C():(new H).i(this.Nr.Fi(a))};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.xJ&&this.pr===a.pr){var b=this.Nr;a=a.Nr;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.pr;case 1:return this.Nr;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.kj=function(a){return this.pr===a||this.Nr.kj(a)};c.r=function(){return T(S(),this)};c.yi=function(a){if(C()===a)a=this.pr;else if(Xj(a))a=this.Nr.yi(a.Q);else throw(new q).i(a);return a};c.x=function(){return Y(new Z,this)};function xU(a,b){a.pr="NIL";a.Nr=b;return a}c.Mh=function(){return C()};c.$classData=g({xJ:0},!1,"org.nlogo.core.model.OptionLine",{xJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function NU(){this.Hb=null}NU.prototype=new l;NU.prototype.constructor=NU;
+c=NU.prototype;c.u=function(){return"OptionalEscapedStringLine"};c.v=function(){return 1};c.Fi=function(a){return"NIL"===a?"":Oi(Mg(),a)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.yJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.kj=function(a){if(null===a)throw(new Ce).b();return""!==a};c.r=function(){return T(S(),this)};
+c.La=function(a){this.Hb=a;return this};c.yi=function(a){if(null===a)throw(new Ce).b();return""===a?"NIL":Lg(Mg(),a)};c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};c.$classData=g({yJ:0},!1,"org.nlogo.core.model.OptionalEscapedStringLine",{yJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function CU(){this.Yv=null}CU.prototype=new l;CU.prototype.constructor=CU;c=CU.prototype;c.u=function(){return"ReservedLine"};c.v=function(){return 1};c.Fi=function(){};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.zJ?this.Yv===a.Yv:!1};c.w=function(a){switch(a){case 0:return this.Yv;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.kj=function(){return!0};c.c=function(a){this.Yv=a;return this};c.r=function(){return T(S(),this)};c.yi=function(){return this.Yv};c.x=function(){return Y(new Z,this)};c.Mh=function(){return C()};c.$classData=g({zJ:0},!1,"org.nlogo.core.model.ReservedLine",{zJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});
+function vU(){this.ol=null}vU.prototype=new l;vU.prototype.constructor=vU;c=vU.prototype;c.u=function(){return"SpecifiedLine"};c.v=function(){return 1};c.Fi=function(){};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.AJ?this.ol===a.ol:!1};c.w=function(a){switch(a){case 0:return this.ol;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.kj=function(a){return a===this.ol};c.c=function(a){this.ol=a;return this};c.r=function(){return T(S(),this)};c.yi=function(){return this.ol};
+c.x=function(){return Y(new Z,this)};c.Mh=function(){return C()};c.$classData=g({AJ:0},!1,"org.nlogo.core.model.SpecifiedLine",{AJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function SU(){this.Hb=null}SU.prototype=new l;SU.prototype.constructor=SU;c=SU.prototype;c.u=function(){return"StringBooleanLine"};c.v=function(){return 1};c.Fi=function(a){return this.ur(a)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.BJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Iq=function(a){return a?"true":"false"};c.kj=function(a){return"true"===a||"false"===a};c.ur=function(a){return"true"===a};c.r=function(){return T(S(),this)};c.La=function(a){this.Hb=a;return this};c.yi=function(a){return this.Iq(!!a)};c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};
+c.$classData=g({BJ:0},!1,"org.nlogo.core.model.StringBooleanLine",{BJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function zU(){this.Hb=null}zU.prototype=new l;zU.prototype.constructor=zU;c=zU.prototype;c.u=function(){return"StringLine"};c.v=function(){return 1};c.Fi=function(a){return a};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.CJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.kj=function(){return!0};c.r=function(){return T(S(),this)};c.La=function(a){this.Hb=a;return this};c.yi=function(a){return a};c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};c.$classData=g({CJ:0},!1,"org.nlogo.core.model.StringLine",{CJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function BU(){this.Hb=null}BU.prototype=new l;BU.prototype.constructor=BU;c=BU.prototype;c.u=function(){return"TNilBooleanLine"};c.v=function(){return 1};c.Fi=function(a){return this.ur(a)};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.DJ){var b=this.Hb;a=a.Hb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Iq=function(a){return a?"T":"NIL"};c.kj=function(a){return"T"===a||"NIL"===a};c.ur=function(a){return"T"===a};c.r=function(){return T(S(),this)};c.La=function(a){this.Hb=a;return this};c.yi=function(a){return this.Iq(!!a)};
+c.x=function(){return Y(new Z,this)};c.Mh=function(){return this.Hb};c.$classData=g({DJ:0},!1,"org.nlogo.core.model.TNilBooleanLine",{DJ:1,d:1,bk:1,t:1,q:1,k:1,h:1});function nm(){this.vs=null}nm.prototype=new l;nm.prototype.constructor=nm;c=nm.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.m.YA){var b=this.vs;a=a.vs;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.vs;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ea=function(a){this.vs=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.Rk=function(){var a=this.vs,b=m(new p,function(){return function(a){return a.Zb.toUpperCase()}}(this)),d=t();return a.ya(b,d.s)};c.$classData=g({YA:0},!1,"org.nlogo.core.prim.Lambda$BracketedArguments",{YA:1,d:1,XA:1,t:1,q:1,k:1,h:1});function an(){this.Uo=null}
+an.prototype=new l;an.prototype.constructor=an;c=an.prototype;c.u=function(){return"ConciseArguments"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(EN(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 O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ea=function(a){this.Uo=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.Rk=function(){return this.Uo};
+function EN(a){return!!(a&&a.$classData&&a.$classData.m.LK)}c.$classData=g({LK:0},!1,"org.nlogo.core.prim.Lambda$ConciseArguments",{LK:1,d:1,XA:1,t:1,q:1,k:1,h:1});function sm(){this.$r=!1;this.Uo=null;this.a=!1}sm.prototype=new l;sm.prototype.constructor=sm;c=sm.prototype;c.u=function(){return"NoArguments"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.ZA?this.$r===a.$r:!1};
+c.w=function(a){switch(a){case 0:return this.$r;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){var a=-889275714,a=V().ca(a,this.$r?1231:1237);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};c.ud=function(a){this.$r=a;this.Uo=G(t(),u());this.a=!0;return this};c.Rk=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/Lambda.scala: 26");return this.Uo};
+c.$classData=g({ZA:0},!1,"org.nlogo.core.prim.Lambda$NoArguments",{ZA:1,d:1,XA:1,t:1,q:1,k:1,h:1});function um(){this.Hi=null}um.prototype=new l;um.prototype.constructor=um;c=um.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.m.$A){var b=this.Hi;a=a.Hi;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hi;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.Wf=function(a){this.Hi=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.Rk=function(){var a=t(),b=[this.Hi.Zb.toUpperCase()];return G(a,(new J).j(b))};c.$classData=g({$A:0},!1,"org.nlogo.core.prim.Lambda$UnbracketedArgument",{$A:1,d:1,XA:1,t:1,q:1,k:1,h:1});function o4(){this.a=this.dp=!1}o4.prototype=new l;o4.prototype.constructor=o4;c=o4.prototype;c.b=function(){this.a=this.dp=!0;return this};c.u=function(){return"Accept"};
+c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Accept"};c.KF=function(){return cl()};c.r=function(){return 1955373352};c.x=function(){return Y(new Z,this)};c.mx=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/LexStates.scala: 11");return this.dp};c.$classData=g({h2:0},!1,"org.nlogo.lex.Accept$",{h2:1,d:1,VQ:1,t:1,q:1,k:1,h:1});var iza=void 0;function cl(){iza||(iza=(new o4).b());return iza}
+function p4(){this.a=this.dp=!1}p4.prototype=new l;p4.prototype.constructor=p4;c=p4.prototype;c.b=function(){this.dp=!1;this.a=!0;return this};c.u=function(){return"Error"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Error"};c.KF=function(a){return a};c.r=function(){return 67232232};c.x=function(){return Y(new Z,this)};
+c.mx=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/LexStates.scala: 26");return this.dp};c.$classData=g({l2:0},!1,"org.nlogo.lex.Error$",{l2:1,d:1,VQ:1,t:1,q:1,k:1,h:1});var jza=void 0;function il(){jza||(jza=(new p4).b());return jza}function q4(){this.a=this.dp=!1}q4.prototype=new l;q4.prototype.constructor=q4;c=q4.prototype;c.b=function(){this.dp=!1;this.a=!0;return this};c.u=function(){return"Finished"};c.v=function(){return 0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"Finished"};c.KF=function(a){return cl()===a?cl():dl()};c.r=function(){return-609016686};c.x=function(){return Y(new Z,this)};c.mx=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/lex/LexStates.scala: 16");return this.dp};c.$classData=g({m2:0},!1,"org.nlogo.lex.Finished$",{m2:1,d:1,VQ:1,t:1,q:1,k:1,h:1});var kza=void 0;function dl(){kza||(kza=(new q4).b());return kza}
+function zN(){}zN.prototype=new s_;zN.prototype.constructor=zN;c=zN.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.Gc();if(!Rm(A(),Ti(),e))return d}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null===a||(a=a.Gc(),Rm(A(),Ti(),a))?!1:!0};c.$classData=g({x2:0},!1,"org.nlogo.parse.AgentTypeChecker$AgentTypeCheckerVisitor$$anonfun$1",{x2:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function aV(){}aV.prototype=new s_;
+aV.prototype.constructor=aV;aV.prototype.Za=function(a){return this.Fp(a|0)};aV.prototype.Fp=function(a){return-1!==a};aV.prototype.gb=function(a,b){a|=0;return-1!==a?(new $U).ha(a,nc()):b.y(a)};aV.prototype.$classData=g({z2:0},!1,"org.nlogo.parse.AgentVariableReporterHandler$$anonfun$$nestedInanonfun$getAgentVariableReporter$16$1",{z2:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Rc(){this.Ac=0}Rc.prototype=new l;Rc.prototype.constructor=Rc;c=Rc.prototype;c.u=function(){return"Stmt"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:Koa(a)?this.Ac===a.Ac:!1};c.w=function(a){switch(a){case 0:return this.Ac;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.hb=function(a){this.Ac=a;return this};c.r=function(){var a=-889275714,a=V().ca(a,this.Ac);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};function Koa(a){return!!(a&&a.$classData&&a.$classData.m.dR)}c.$classData=g({dR:0},!1,"org.nlogo.parse.AstPath$Stmt",{dR:1,d:1,gC:1,t:1,q:1,k:1,h:1});
+function JN(){this.xe=!1;this.da=null}JN.prototype=new l;JN.prototype.constructor=JN;c=JN.prototype;c.u=function(){return"BlockContext"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.hC&&a.da===this.da?this.xe===a.xe:!1};c.w=function(a){switch(a){case 0:return this.xe;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.sy=function(){return(new JN).Zk(this.da,!0)};c.Zk=function(a,b){this.xe=b;if(null===a)throw pg(qg(),null);this.da=a;return this};
+c.r=function(){var a=-889275714,a=V().ca(a,this.xe?1231:1237);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};c.$classData=g({hC:0},!1,"org.nlogo.parse.ControlFlowVerifier$BlockContext",{hC:1,d:1,iC:1,t:1,q:1,k:1,h:1});function NN(){this.xe=!1;this.da=null}NN.prototype=new l;NN.prototype.constructor=NN;c=NN.prototype;c.u=function(){return"CommandContext"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Eoa(a)&&a.da===this.da?this.xe===a.xe:!1};
+c.w=function(a){switch(a){case 0:return this.xe;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.sy=function(){return(new NN).Zk(this.da,!0)};c.Zk=function(a,b){this.xe=b;if(null===a)throw pg(qg(),null);this.da=a;return this};c.r=function(){var a=-889275714,a=V().ca(a,this.xe?1231:1237);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};function Eoa(a){return!!(a&&a.$classData&&a.$classData.m.eR)}
+c.$classData=g({eR:0},!1,"org.nlogo.parse.ControlFlowVerifier$CommandContext",{eR:1,d:1,iC:1,t:1,q:1,k:1,h:1});function LN(){this.xe=!1;this.da=null}LN.prototype=new l;LN.prototype.constructor=LN;c=LN.prototype;c.u=function(){return"CommandLambdaContext"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Foa(a)&&a.da===this.da?this.xe===a.xe:!1};c.w=function(a){switch(a){case 0:return this.xe;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.sy=function(){return(new LN).Zk(this.da,!0)};c.Zk=function(a,b){this.xe=b;if(null===a)throw pg(qg(),null);this.da=a;return this};c.r=function(){var a=-889275714,a=V().ca(a,this.xe?1231:1237);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};function Foa(a){return!!(a&&a.$classData&&a.$classData.m.fR)}c.$classData=g({fR:0},!1,"org.nlogo.parse.ControlFlowVerifier$CommandLambdaContext",{fR:1,d:1,iC:1,t:1,q:1,k:1,h:1});function MN(){this.xe=!1;this.da=null}MN.prototype=new l;
+MN.prototype.constructor=MN;c=MN.prototype;c.u=function(){return"ReporterContext"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.jC&&a.da===this.da?this.xe===a.xe:!1};c.w=function(a){switch(a){case 0:return this.xe;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.sy=function(){return(new MN).Zk(this.da,!0)};c.Zk=function(a,b){this.xe=b;if(null===a)throw pg(qg(),null);this.da=a;return this};
+c.r=function(){var a=-889275714,a=V().ca(a,this.xe?1231:1237);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};c.$classData=g({jC:0},!1,"org.nlogo.parse.ControlFlowVerifier$ReporterContext",{jC:1,d:1,iC:1,t:1,q:1,k:1,h:1});function co(){this.k_=null}co.prototype=new s_;co.prototype.constructor=co;co.prototype.Wf=function(a){this.k_=a;return this};co.prototype.Za=function(a){return up(a)};co.prototype.gb=function(a,b){up(a)?(a=(new r4).ft(a.ed),a.K(this.k_)):a=b.y(a);return a};
+co.prototype.$classData=g({Z2:0},!1,"org.nlogo.parse.LetVariableScope$$anonfun$1",{Z2:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function jO(){this.Ac=0;this.da=null}jO.prototype=new l;jO.prototype.constructor=jO;function Toa(a,b,d){a.Ac=d;if(null===b)throw pg(qg(),null);a.da=b;return a}c=jO.prototype;c.u=function(){return"Pos"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.hR&&a.da===this.da?this.Ac===a.Ac:!1};
+c.w=function(a){switch(a){case 0:return this.Ac;default:throw(new O).c(""+a);}};c.l=function(){return"0."+this.Ac};c.r=function(){var a=-889275714,a=V().ca(a,this.Ac);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};c.$classData=g({hR:0},!1,"org.nlogo.parse.SeqReader$Pos",{hR:1,d:1,xsa:1,t:1,q:1,k:1,h:1});function xO(){}xO.prototype=new s_;xO.prototype.constructor=xO;c=xO.prototype;c.Wq=function(){return this};c.Pl=function(a){if(null!==a){var b=a.sb;a=a.W;if(yl()===b&&"BREED"===a)return!0}return!1};
+c.Bl=function(a,b){if(null!==a){var d=a.sb,e=a.W;if(yl()===d&&"BREED"===e)return a}return b.y(a)};c.Za=function(a){return this.Pl(a)};c.gb=function(a,b){return this.Bl(a,b)};c.$classData=g({o3:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$breedKeyword$1",{o3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function pO(){}pO.prototype=new s_;pO.prototype.constructor=pO;c=pO.prototype;c.Wq=function(){return this};c.Pl=function(a){if(null!==a){var b=a.sb;a=a.W;if(fO()===b&&vg(a)&&mp(Ia(),a,"-OWN"))return!0}return!1};
+c.Bl=function(a,b){if(null!==a){var d=a.sb,e=a.W;if(fO()===d&&vg(e)&&mp(Ia(),e,"-OWN"))return a}return b.y(a)};c.Za=function(a){return this.Pl(a)};c.gb=function(a,b){return this.Bl(a,b)};c.$classData=g({p3:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$breedVariables$1",{p3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function vO(){this.mr=null}vO.prototype=new s_;vO.prototype.constructor=vO;c=vO.prototype;c.Pl=function(a){if(null!==a){var b=a.sb;a=a.W;if(fO()===b&&this.mr===a)return!0}return!1};
+c.Bl=function(a,b){if(null!==a){var d=a.sb,e=a.W;if(fO()===d&&this.mr===e)return a}return b.y(a)};c.Za=function(a){return this.Pl(a)};c.gb=function(a,b){return this.Bl(a,b)};c.$classData=g({q3:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$keyword$1",{q3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function BO(){}BO.prototype=new s_;BO.prototype.constructor=BO;c=BO.prototype;c.Wq=function(){return this};c.Pl=function(a){if(null!==a){a=a.sb;var b=fO();null===a||a!==b?(b=Ec(),a=!(null!==a&&a===b)):a=!1;if(a)return!0}return!1};
+c.Bl=function(a,b){if(null!==a){var d=a.sb,e=fO();null===d||d!==e?(e=Ec(),d=!(null!==d&&d===e)):d=!1;if(d)return a}return b.y(a)};c.Za=function(a){return this.Pl(a)};c.gb=function(a,b){return this.Bl(a,b)};c.$classData=g({r3:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$nonKeyword$1",{r3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function tO(){}tO.prototype=new s_;tO.prototype.constructor=tO;c=tO.prototype;c.Wq=function(){return this};c.Pl=function(a){if(null!==a){var b=a.sb;a=a.W;if(cm()===b&&vg(a))return!0}return!1};
+c.Bl=function(a,b){if(null!==a){var d=a.sb,e=a.W;if(cm()===d&&vg(e))return a}return b.y(a)};c.Za=function(a){return this.Pl(a)};c.gb=function(a,b){return this.Bl(a,b)};c.$classData=g({s3:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$string$1",{s3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function uO(){this.ZG=null}uO.prototype=new s_;uO.prototype.constructor=uO;c=uO.prototype;c.Pl=function(a){return null!==a&&this.ZG===a.sb?!0:!1};c.Bl=function(a,b){return null!==a&&this.ZG===a.sb?a:b.y(a)};c.Za=function(a){return this.Pl(a)};
+c.gb=function(a,b){return this.Bl(a,b)};c.$classData=g({t3:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$tokenType$1",{t3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function To(){}To.prototype=new s_;To.prototype.constructor=To;c=To.prototype;c.b=function(){return this};c.Bv=function(a){return to(a)};c.Za=function(a){return this.Bv(a)};c.gb=function(a,b){return this.ru(a,b)};c.ru=function(a,b){return to(a)?a.ag:b.y(a)};
+c.$classData=g({v3:0},!1,"org.nlogo.parse.StructureConverter$$anonfun$1",{v3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Uo(){}Uo.prototype=new s_;Uo.prototype.constructor=Uo;c=Uo.prototype;c.Bv=function(a){return uo(a)};c.Za=function(a){return this.Bv(a)};c.gb=function(a,b){return this.ru(a,b)};c.ru=function(a,b){if(uo(a)){Yo();b=Soa(a);var d=a.Ii.de(2).Xe();a=Fl(new Gl,"",Ec(),"",a.Ii.nd().ma);var e=t();b=(new w).e(b,d.yc(a,e.s))}else b=b.y(a);return b};c.La=function(){return this};
+c.$classData=g({w3:0},!1,"org.nlogo.parse.StructureConverter$$anonfun$2",{w3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Vo(){}Vo.prototype=new s_;Vo.prototype.constructor=Vo;c=Vo.prototype;c.b=function(){return this};c.Bv=function(a){return so(a)};c.Za=function(a){return this.Bv(a)};c.gb=function(a,b){return this.ru(a,b)};c.ru=function(a,b){if(so(a)){a=a.ag;b=m(new p,function(){return function(a){return a.f}}(this));var d=t();return a.ya(b,d.s)}return b.y(a)};
+c.$classData=g({x3:0},!1,"org.nlogo.parse.StructureConverter$$anonfun$convert$4",{x3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function s4(){}s4.prototype=new l;s4.prototype.constructor=s4;c=s4.prototype;c.b=function(){return this};c.u=function(){return"BreedCommand"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"BreedCommand"};c.r=function(){return 1500620631};c.x=function(){return Y(new Z,this)};
+c.$classData=g({C3:0},!1,"org.nlogo.parse.SymbolType$BreedCommand$",{C3:1,d:1,Nh:1,t:1,q:1,k:1,h:1});var lza=void 0;function jo(){lza||(lza=(new s4).b());return lza}function t4(){}t4.prototype=new l;t4.prototype.constructor=t4;c=t4.prototype;c.b=function(){return this};c.u=function(){return"BreedReporter"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"BreedReporter"};c.r=function(){return-549904811};c.x=function(){return Y(new Z,this)};
+c.$classData=g({D3:0},!1,"org.nlogo.parse.SymbolType$BreedReporter$",{D3:1,d:1,Nh:1,t:1,q:1,k:1,h:1});var mza=void 0;function ko(){mza||(mza=(new t4).b());return mza}function u4(){}u4.prototype=new l;u4.prototype.constructor=u4;c=u4.prototype;c.b=function(){return this};c.u=function(){return"LinkBreed"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"LinkBreed"};c.r=function(){return 352830842};c.x=function(){return Y(new Z,this)};
+c.$classData=g({G3:0},!1,"org.nlogo.parse.SymbolType$LinkBreed$",{G3:1,d:1,Nh:1,t:1,q:1,k:1,h:1});var nza=void 0;function Bo(){nza||(nza=(new u4).b());return nza}function v4(){}v4.prototype=new l;v4.prototype.constructor=v4;c=v4.prototype;c.b=function(){return this};c.u=function(){return"LinkBreedSingular"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"LinkBreedSingular"};c.r=function(){return-1843994703};c.x=function(){return Y(new Z,this)};
+c.$classData=g({H3:0},!1,"org.nlogo.parse.SymbolType$LinkBreedSingular$",{H3:1,d:1,Nh:1,t:1,q:1,k:1,h:1});var oza=void 0;function Go(){oza||(oza=(new v4).b());return oza}function w4(){}w4.prototype=new l;w4.prototype.constructor=w4;c=w4.prototype;c.b=function(){return this};c.u=function(){return"PrimitiveCommand"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"PrimitiveCommand"};c.r=function(){return 1944693892};c.x=function(){return Y(new Z,this)};
+c.$classData=g({K3:0},!1,"org.nlogo.parse.SymbolType$PrimitiveCommand$",{K3:1,d:1,Nh:1,t:1,q:1,k:1,h:1});var pza=void 0;function dp(){pza||(pza=(new w4).b());return pza}function x4(){}x4.prototype=new l;x4.prototype.constructor=x4;c=x4.prototype;c.b=function(){return this};c.u=function(){return"PrimitiveReporter"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"PrimitiveReporter"};c.r=function(){return 331464392};c.x=function(){return Y(new Z,this)};
+c.$classData=g({L3:0},!1,"org.nlogo.parse.SymbolType$PrimitiveReporter$",{L3:1,d:1,Nh:1,t:1,q:1,k:1,h:1});var qza=void 0;function ep(){qza||(qza=(new x4).b());return qza}function y4(){}y4.prototype=new l;y4.prototype.constructor=y4;c=y4.prototype;c.b=function(){return this};c.u=function(){return"ProcedureSymbol"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"ProcedureSymbol"};c.r=function(){return-1314721237};c.x=function(){return Y(new Z,this)};
+c.$classData=g({M3:0},!1,"org.nlogo.parse.SymbolType$ProcedureSymbol$",{M3:1,d:1,Nh:1,t:1,q:1,k:1,h:1});var rza=void 0;function Fo(){rza||(rza=(new y4).b());return rza}function z4(){}z4.prototype=new l;z4.prototype.constructor=z4;c=z4.prototype;c.b=function(){return this};c.u=function(){return"TurtleBreed"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"TurtleBreed"};c.r=function(){return-1704002184};c.x=function(){return Y(new Z,this)};
+c.$classData=g({P3:0},!1,"org.nlogo.parse.SymbolType$TurtleBreed$",{P3:1,d:1,Nh:1,t:1,q:1,k:1,h:1});var sza=void 0;function Do(){sza||(sza=(new z4).b());return sza}function A4(){}A4.prototype=new l;A4.prototype.constructor=A4;c=A4.prototype;c.b=function(){return this};c.u=function(){return"TurtleBreedSingular"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"TurtleBreedSingular"};c.r=function(){return-1875035729};c.x=function(){return Y(new Z,this)};
+c.$classData=g({Q3:0},!1,"org.nlogo.parse.SymbolType$TurtleBreedSingular$",{Q3:1,d:1,Nh:1,t:1,q:1,k:1,h:1});var tza=void 0;function Ho(){tza||(tza=(new A4).b());return tza}function qV(){}qV.prototype=new s_;qV.prototype.constructor=qV;c=qV.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({Z3:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compilation2JsonWriter$writer$macro$2$1$$anonfun$apply$8",{Z3:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Bq(){this.LX=this.yU=this.BU=this.Qa=null}Bq.prototype=new s_;Bq.prototype.constructor=Bq;c=Bq.prototype;c.wD=function(a,b){return yb(a)?(b=ed(this.Qa),zq(b,a,this.BU,this.yU,this.LX)):b.y(a)};c.Za=function(a){return this.eF(a)};c.gb=function(a,b){return this.wD(a,b)};c.eF=function(a){return yb(a)};
+c.$classData=g({e4:0},!1,"org.nlogo.tortoise.compiler.CommandPrims$$anonfun$args$2$1",{e4:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function B4(){Vt.call(this);this.pU=null}B4.prototype=new pxa;B4.prototype.constructor=B4;function Mga(a,b,d){var e=new B4;e.pU=b;Vt.prototype.jv.call(e,a,d);return e}B4.prototype.$classData=g({mC:0},!1,"org.nlogo.tortoise.compiler.CompiledPlot",{mC:1,nC:1,d:1,t:1,q:1,k:1,h:1});function EV(){}EV.prototype=new s_;EV.prototype.constructor=EV;c=EV.prototype;
+c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};c.$classData=g({n4:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$compiledPen2Json$writer$macro$2$1$$anonfun$apply$1",{n4:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function JV(){}JV.prototype=new l;JV.prototype.constructor=JV;c=JV.prototype;c.b=function(){return this};c.u=function(){return"NoPropagation"};
+c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"NoPropagation"};c.r=function(){return-824474325};c.x=function(){return Y(new Z,this)};c.$classData=g({t4:0},!1,"org.nlogo.tortoise.compiler.CompilerFlags$NoPropagation$",{t4:1,d:1,u4:1,t:1,q:1,k:1,h:1});var Lta=void 0;function C4(){}C4.prototype=new l;C4.prototype.constructor=C4;c=C4.prototype;c.b=function(){return this};c.u=function(){return"WidgetPropagation"};c.v=function(){return 0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"WidgetPropagation"};c.r=function(){return 1268345032};c.x=function(){return Y(new Z,this)};c.$classData=g({v4:0},!1,"org.nlogo.tortoise.compiler.CompilerFlags$WidgetPropagation$",{v4:1,d:1,u4:1,t:1,q:1,k:1,h:1});var uza=void 0;function afa(){uza||(uza=(new C4).b());return uza}function D4(){this.gg=null}D4.prototype=new l;D4.prototype.constructor=D4;c=D4.prototype;c.u=function(){return"FailureCompilerException"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.oC?this.gg===a.gg:!1};c.w=function(a){switch(a){case 0:return this.gg;default:throw(new O).c(""+a);}};function aq(a){var b=new D4;b.gg=a;return b}c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({oC:0},!1,"org.nlogo.tortoise.compiler.FailureCompilerException",{oC:1,d:1,SR:1,t:1,q:1,k:1,h:1});function bq(){this.gg=null}bq.prototype=new l;
+bq.prototype.constructor=bq;c=bq.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.m.pC){var b=this.gg;a=a.gg;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.gg;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Dd=function(a){this.gg=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({pC:0},!1,"org.nlogo.tortoise.compiler.FailureException",{pC:1,d:1,SR:1,t:1,q:1,k:1,h:1});function iq(){this.ol=null}iq.prototype=new l;iq.prototype.constructor=iq;c=iq.prototype;c.u=function(){return"FailureString"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.qC?this.ol===a.ol:!1};c.w=function(a){switch(a){case 0:return this.ol;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.c=function(a){this.ol=a;return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({qC:0},!1,"org.nlogo.tortoise.compiler.FailureString",{qC:1,d:1,SR:1,t:1,q:1,k:1,h:1});function fu(){this.Gg=this.wa=null}fu.prototype=new l;fu.prototype.constructor=fu;c=fu.prototype;c.u=function(){return"JsFunction"};c.v=function(){return 2};c.tv=function(a,b){this.wa=a;this.Gg=b;return this};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.wR){var b=this.wa,d=a.wa;if(null===b?null===d:b.o(d))return b=this.Gg,a=a.Gg,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.Gg;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.WX=function(a){return'"'+a+'":'+this.XG()};c.r=function(){return T(S(),this)};c.XG=function(){return qr(id(),this.wa,this.Gg.Ab("\n"))};c.x=function(){return Y(new Z,this)};
+c.$classData=g({wR:0},!1,"org.nlogo.tortoise.compiler.JavascriptObject$JsFunction",{wR:1,d:1,F4:1,t:1,q:1,k:1,h:1});function E4(){this.Iv=null}E4.prototype=new l;E4.prototype.constructor=E4;c=E4.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.m.xR){var b=this.Iv;a=a.Iv;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Iv;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};function Afa(a){var b=new E4;b.Iv=a;return b}c.WX=function(a){a=[(new w).e(a,this.Iv)];for(var b=fc(new gc,Cu()),d=0,e=a.length|0;d<e;)ic(b,a[d]),d=1+d|0;a=(new qu).bc(b.Va);a=td(ud(),vd(ud(),a));a=(new Tb).c(a);b=a.U.length|0;a=Le(Me(),a.U,1,b);a=(new Tb).c(a);return dm(a,1)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({xR:0},!1,"org.nlogo.tortoise.compiler.JavascriptObject$JsonValueElement",{xR:1,d:1,F4:1,t:1,q:1,k:1,h:1});function Mr(){}Mr.prototype=new s_;Mr.prototype.constructor=Mr;Mr.prototype.b=function(){return this};Mr.prototype.Za=function(){return!0};Mr.prototype.gb=function(a){if(zg(a)){var b=gw(),d=x().s;a=K(a,d);var d=(new Mr).b(),e=x();a=a.ya(d,e.s);return hw(b,a)}return vh()===a?Lfa():a};
+Mr.prototype.$classData=g({I4:0},!1,"org.nlogo.tortoise.compiler.LiteralConverter$$anonfun$org$nlogo$tortoise$compiler$LiteralConverter$$nlValueToJSValue$1$1",{I4:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Os(){}Os.prototype=new s_;Os.prototype.constructor=Os;Os.prototype.b=function(){return this};Os.prototype.Za=function(a){return!!(a&&a.$classData&&a.$classData.m.mC)};Os.prototype.gb=function(a,b){return a&&a.$classData&&a.$classData.m.mC?a:b.y(a)};
+Os.prototype.$classData=g({l5:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$$anonfun$1",{l5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Qs(){}Qs.prototype=new s_;Qs.prototype.constructor=Qs;c=Qs.prototype;c.b=function(){return this};c.xD=function(a,b){return vza(a)?a.bw:b.y(a)};c.fF=function(a){return vza(a)};c.Za=function(a){return this.fF(a)};c.gb=function(a,b){return this.xD(a,b)};c.$classData=g({m5:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$$anonfun$2",{m5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});
+function Rs(){}Rs.prototype=new s_;Rs.prototype.constructor=Rs;c=Rs.prototype;c.b=function(){return this};c.xD=function(a,b){return wza(a)?a.Om:b.y(a)};c.fF=function(a){return wza(a)};c.Za=function(a){return this.fF(a)};c.gb=function(a,b){return this.xD(a,b)};c.$classData=g({n5:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$$anonfun$3",{n5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Xs(){this.Om=null}Xs.prototype=new l;Xs.prototype.constructor=Xs;c=Xs.prototype;c.u=function(){return"ErrorAlert"};
+c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(wza(a)){var b=this.Om;a=a.Om;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Om;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ea=function(a){this.Om=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function wza(a){return!!(a&&a.$classData&&a.$classData.m.PR)}
+c.$classData=g({PR:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$ErrorAlert",{PR:1,d:1,o5:1,t:1,q:1,k:1,h:1});function at(){this.bw=null}at.prototype=new l;at.prototype.constructor=at;c=at.prototype;c.u=function(){return"SuccessfulComponent"};c.v=function(){return 1};c.o=function(a){return this===a?!0:vza(a)?this.bw===a.bw:!1};c.w=function(a){switch(a){case 0:return this.bw;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.c=function(a){this.bw=a;return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function vza(a){return!!(a&&a.$classData&&a.$classData.m.QR)}c.$classData=g({QR:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$SuccessfulComponent",{QR:1,d:1,o5:1,t:1,q:1,k:1,h:1});function F4(){this.tq=null}F4.prototype=new s_;F4.prototype.constructor=F4;c=F4.prototype;c.On=function(a){return xza(a)||yza(a)||zza(a)||Aza(a)||Bza(a)||$q(a)||yP(a)};
+c.wn=function(a,b){return xza(a)||yza(a)?(new w).e("SelfManager.self()."+this.tq+"Variable",a.va.toLowerCase()):zza(a)||Aza(a)?(b=this.tq,a=ch(a),(new w).e("SelfManager.self()."+b+"Variable",a.toLowerCase())):Bza(a)?(new w).e("SelfManager.self()."+this.tq+"Variable",a.tl.toLowerCase()):$q(a)?(b=this.tq,a=ch(a),(new w).e("SelfManager.self()."+b+"PatchVariable",a.toLowerCase())):yP(a)?(b=this.tq,a=ch(a),(new w).e("world.observer."+b+"Global",a.toLowerCase())):b.y(a)};
+function Oaa(a){var b=new F4;b.tq=a;return b}c.Za=function(a){return this.On(a)};c.gb=function(a,b){return this.wn(a,b)};c.$classData=g({s5:0},!1,"org.nlogo.tortoise.compiler.PrimUtils$VariablePrims$$anonfun$procedureAndVarName$1",{s5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function it(){this.KX=this.xU=this.AU=this.Qa=null}it.prototype=new s_;it.prototype.constructor=it;c=it.prototype;c.wD=function(a,b){return yb(a)?(b=ed(this.Qa),zq(b,a,this.AU,this.xU,this.KX)):b.y(a)};c.Za=function(a){return this.eF(a)};
+c.gb=function(a,b){return this.wD(a,b)};c.eF=function(a){return yb(a)};c.$classData=g({x5:0},!1,"org.nlogo.tortoise.compiler.ReporterPrims$$anonfun$args$1$1",{x5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function lt(){}lt.prototype=new s_;lt.prototype.constructor=lt;c=lt.prototype;c.b=function(){return this};c.On=function(a){return Cza(a)||ln(a)||Dza(a)||Eza(a)||Fza(a)||Gza(a)||Hza(a)};c.wn=function(a,b){return Cza(a)?"+":ln(a)?"-":Dza(a)?"*":Eza(a)?"%":Fza(a)?"\x26\x26":Gza(a)?"||":Hza(a)?"!\x3d":b.y(a)};
+c.Za=function(a){return this.On(a)};c.gb=function(a,b){return this.wn(a,b)};c.$classData=g({D5:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$InfixReporter$$anonfun$unapply$2",{D5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Dq(){}Dq.prototype=new s_;Dq.prototype.constructor=Dq;c=Dq.prototype;c.b=function(){return this};
+c.dF=function(a){return Iza(a)||Jza(a)||Kza(a)||Lza(a)||Mza(a)||Nza(a)||Oza(a)||Pza(a)||Qza(a)||!!(a&&a.$classData&&a.$classData.m.wC)||!!(a&&a.$classData&&a.$classData.m.vC)||fP(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)||hAa(a)||iAa(a)||jAa(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)||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)||$Aa(a)||aBa(a)||bBa(a)||cBa(a)||dBa(a)||eBa(a)||fBa(a)||gBa(a)||hBa(a)||iBa(a)||jBa(a)||kBa(a)||lBa(a)||mBa(a)};
+c.vD=function(a,b){return Iza(a)?"PrintPrims.print":Jza(a)?"PrintPrims.show(SelfManager.self)":Kza(a)?"PrintPrims.type":Lza(a)?"PrintPrims.write":Mza(a)?"OutputPrims.clear":Nza(a)?"OutputPrims.print":Oza(a)?"OutputPrims.show(SelfManager.self)":Pza(a)?"OutputPrims.type":Qza(a)?"OutputPrims.write":a&&a.$classData&&a.$classData.m.wC?"SelfManager.self()._optimalFdOne":a&&a.$classData&&a.$classData.m.vC?"SelfManager.self()._optimalFdLessThan1":fP(a)?"SelfManager.self().fd":Rza(a)?"SelfManager.self().jumpIfAble":
+Sza(a)?"SelfManager.self().die":Tza(a)?"SelfManager.self().face":Uza(a)?"SelfManager.self().faceXY":Vza(a)?"SelfManager.self().followMe":Wza(a)?"SelfManager.self().goHome":Xza(a)?"SelfManager.self().moveTo":Yza(a)?"SelfManager.self().penManager.lowerPen":Zza(a)?"SelfManager.self().penManager.useEraser":$za(a)?"SelfManager.self().penManager.raisePen":aAa(a)?"SelfManager.self().rideMe":bAa(a)?"SelfManager.self().right":cAa(a)?"SelfManager.self().setXY":dAa(a)?"SelfManager.self().stamp":eAa(a)?"SelfManager.self().stampErase":
+fAa(a)?"SelfManager.self().tie":gAa(a)?"SelfManager.self().untie":hAa(a)?"SelfManager.self().watchMe":iAa(a)?"plotManager.disableAutoplotting":jAa(a)?"plotManager.enableAutoplotting":kAa(a)?"plotManager.clearAllPlots":lAa(a)?"plotManager.clearPlot":mAa(a)?"plotManager.createTemporaryPen":nAa(a)?"plotManager.drawHistogramFrom":oAa(a)?"plotManager.lowerPen":pAa(a)?"plotManager.resetPen":qAa(a)?"plotManager.raisePen":rAa(a)?"plotManager.plotValue":sAa(a)?"plotManager.plotPoint":tAa(a)?"plotManager.setCurrentPen":
+uAa(a)?"plotManager.setCurrentPlot":vAa(a)?"plotManager.setHistogramBarCount":wAa(a)?"plotManager.setPenColor":xAa(a)?"plotManager.setPenInterval":yAa(a)?"plotManager.setPenMode":zAa(a)?"plotManager.setXRange":AAa(a)?"plotManager.setYRange":BAa(a)?"plotManager.setupPlots":CAa(a)?"plotManager.updatePlots":DAa(a)?"InspectionPrims.inspect":EAa(a)?"InspectionPrims.stopInspecting":FAa(a)?"InspectionPrims.clearDead":GAa(a)?"world.clearAll":HAa(a)?"world.clearDrawing":IAa(a)?"world.observer.clearCodeGlobals":
+JAa(a)?"world.clearPatches":KAa(a)?"world.turtleManager.clearTurtles":LAa(a)?"world.ticker.clear":MAa(a)?"world.clearLinks":NAa(a)?"world.resize":OAa(a)?"world.setPatchSize":PAa(a)?"world.ticker.reset":QAa(a)?"world.ticker.tick":RAa(a)?"world.ticker.tickAdvance":SAa(a)?"workspace.timer.reset":TAa(a)?"workspace.rng.setSeed":UAa(a)?"world.observer.follow":VAa(a)?"world.observer.ride":WAa(a)?"world.observer.watch":XAa(a)?"world.observer.resetPerspective":YAa(a)?"LayoutManager.layoutSpring":ZAa(a)?"LayoutManager.layoutCircle":
+$Aa(a)?"LayoutManager.layoutRadial":aBa(a)?"LayoutManager.layoutTutte":bBa(a)?"world.changeTopology":cBa(a)?"Tasks.apply":dBa(a)?"Prims.stdout":eBa(a)?"UserDialogPrims.confirm":fBa(a)?"ImportExportPrims.exportOutput":gBa(a)?"ImportExportPrims.exportPlot":hBa(a)?"ImportExportPrims.exportAllPlots":iBa(a)?"ImportExportPrims.exportView":jBa(a)?"ImportExportPrims.exportWorld":kBa(a)?"Prims.wait":lBa(a)?"ImportExportPrims.importDrawing":mBa(a)?"notImplemented('display', undefined)":b.y(a)};c.Za=function(a){return this.dF(a)};
+c.gb=function(a,b){return this.vD(a,b)};c.$classData=g({E5:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$NormalCommand$$anonfun$unapply$6",{E5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function mt(){}mt.prototype=new s_;mt.prototype.constructor=mt;c=mt.prototype;c.b=function(){return this};
+c.On=function(a){return nBa(a)||oBa(a)||VO(a)||!!(a&&a.$classData&&a.$classData.m.rC)||!!(a&&a.$classData&&a.$classData.m.sC)||!!(a&&a.$classData&&a.$classData.m.yC)||!!(a&&a.$classData&&a.$classData.m.xC)||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)||CBa(a)||DBa(a)||EBa(a)||FBa(a)||GBa(a)||HBa(a)||IBa(a)||QV(a)||OV(a)||nP(a)||JBa(a)||KBa(a)||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)||$Ba(a)||aCa(a)||bCa(a)||cCa(a)||dCa(a)||eCa(a)||fCa(a)||gCa(a)||hCa(a)||iCa(a)||jCa(a)||kCa(a)||lCa(a)||mCa(a)||nCa(a)||kP(a)||oCa(a)||NV(a)||pCa(a)||qCa(a)||rCa(a)||sCa(a)||tCa(a)||uCa(a)||vCa(a)||wCa(a)||xCa(a)||yCa(a)||zCa(a)||ACa(a)||BCa(a)||CCa(a)||DCa(a)||ECa(a)||FCa(a)||GCa(a)||HCa(a)||ICa(a)||JCa(a)||KCa(a)||LCa(a)||MCa(a)||NCa(a)||OCa(a)||PCa(a)||QCa(a)||RCa(a)||SCa(a)||TCa(a)||UCa(a)||VCa(a)||WCa(a)||XCa(a)||YCa(a)||ZCa(a)||$Ca(a)||aDa(a)||bDa(a)||cDa(a)||dDa(a)||Ls(a)||
+ZO(a)||eDa(a)||fDa(a)||CP(a)||gDa(a)||hDa(a)||iDa(a)||jDa(a)||kDa(a)||lDa(a)||mDa(a)||nDa(a)||oDa(a)||pDa(a)||qDa(a)||rDa(a)||sDa(a)||tDa(a)||uDa(a)||$O(a)||aP(a)||vDa(a)||wDa(a)||xDa(a)||yDa(a)||zDa(a)||ADa(a)||BDa(a)||CDa(a)||DDa(a)||EDa(a)||FDa(a)};
+c.wn=function(a,b){return nBa(a)?"SelfPrims.linkHeading":oBa(a)?"SelfPrims.linkLength":VO(a)?"SelfPrims.other":a&&a.$classData&&a.$classData.m.rC?"SelfPrims._optimalAnyOther":a&&a.$classData&&a.$classData.m.sC?"SelfPrims._optimalCountOther":a&&a.$classData&&a.$classData.m.yC?"world._optimalPatchRow":a&&a.$classData&&a.$classData.m.xC?"world._optimalPatchCol":pBa(a)?"SelfManager.self().bothEnds":qBa(a)?"SelfManager.self().canMove":rBa(a)?"SelfManager.self().distance":sBa(a)?"SelfManager.self().distanceXY":
+tBa(a)?"SelfManager.self().dx":uBa(a)?"SelfManager.self().dy":vBa(a)?"SelfManager.myself":wBa(a)?"SelfManager.self().otherEnd":xBa(a)?"SelfManager.self().patchAhead":yBa(a)?"SelfManager.self().patchAtHeadingAndDistance":zBa(a)?"SelfManager.self().getPatchHere":ABa(a)?"SelfManager.self().patchLeftAndAhead":BBa(a)?"SelfManager.self().patchRightAndAhead":CBa(a)?"SelfManager.self":DBa(a)?"SelfManager.self().towards":EBa(a)?"SelfManager.self().towardsXY":FBa(a)?"SelfManager.self().turtlesAt":GBa(a)?"SelfManager.self().turtlesHere":
+HBa(a)?"SelfManager.self().inCone":IBa(a)?"SelfManager.self().inRadius":QV(a)?"SelfManager.self().getNeighbors":OV(a)?"SelfManager.self().getNeighbors4":nP(a)?"SelfManager.self().patchAt":JBa(a)?"ListPrims.butFirst":KBa(a)?"ListPrims.butLast":LBa(a)?"ListPrims.empty":MBa(a)?"ListPrims.first":NBa(a)?"ListPrims.fput":OBa(a)?"ListPrims.insertItem":PBa(a)?"ListPrims.item":QBa(a)?"ListPrims.last":RBa(a)?"ListPrims.length":SBa(a)?"ListPrims.lput":TBa(a)?"ListPrims.max":UBa(a)?"ListPrims.mean":VBa(a)?"ListPrims.median":
+WBa(a)?"ListPrims.member":XBa(a)?"ListPrims.min":YBa(a)?"ListPrims.modes":ZBa(a)?"ListPrims.nOf":$Ba(a)?"ListPrims.position":aCa(a)?"ListPrims.removeDuplicates":bCa(a)?"ListPrims.removeItem":cCa(a)?"ListPrims.remove":dCa(a)?"ListPrims.replaceItem":eCa(a)?"ListPrims.reverse":fCa(a)?"ListPrims.shuffle":gCa(a)?"ListPrims.sort":hCa(a)?"ListPrims.sortBy":iCa(a)?"ListPrims.standardDeviation":jCa(a)?"ListPrims.sublist":kCa(a)?"ListPrims.substring":lCa(a)?"ListPrims.upToNOf":mCa(a)?"ListPrims.variance":nCa(a)?
+"ListPrims.list":kP(a)?"ListPrims.oneOf":oCa(a)?"ListPrims.sentence":NV(a)?"ListPrims.sum":pCa(a)?"plotManager.isAutoplotting":qCa(a)?"plotManager.getPlotName":rCa(a)?"plotManager.hasPenWithName":sCa(a)?"plotManager.getPlotXMax":tCa(a)?"plotManager.getPlotXMin":uCa(a)?"plotManager.getPlotYMax":vCa(a)?"plotManager.getPlotYMin":wCa(a)?"MousePrims.isDown":xCa(a)?"MousePrims.isInside":yCa(a)?"MousePrims.getX":zCa(a)?"MousePrims.getY":ACa(a)?"NLMath.abs":BCa(a)?"NLMath.acos":CCa(a)?"NLMath.asin":DCa(a)?
+"NLMath.atan":ECa(a)?"NLMath.ceil":FCa(a)?"NLMath.cos":GCa(a)?"NLMath.exp":HCa(a)?"NLMath.floor":ICa(a)?"NLMath.toInt":JCa(a)?"NLMath.ln":KCa(a)?"NLMath.log":LCa(a)?"NLMath.mod":MCa(a)?"NLMath.pow":NCa(a)?"NLMath.precision":OCa(a)?"NLMath.round":PCa(a)?"NLMath.sin":QCa(a)?"NLMath.sqrt":RCa(a)?"NLMath.subtractHeadings":SCa(a)?"NLMath.tan":TCa(a)?"ColorModel.nearestColorNumberOfHSB":UCa(a)?"ColorModel.nearestColorNumberOfRGB":VCa(a)?"ColorModel.colorToHSB":WCa(a)?"ColorModel.colorToRGB":XCa(a)?"ColorModel.hsbToRGB":
+YCa(a)?"ColorModel.genRGBFromComponents":ZCa(a)?"ColorModel.scaleColor":$Ca(a)?"ColorModel.areRelatedByShade":aDa(a)?"ColorModel.wrapColor":bDa(a)?"Prims.div":cDa(a)?"world.turtleManager.getTurtle":dDa(a)?"world.getPatchAt":Ls(a)?"Prims.equality":ZO(a)?"!Prims.equality":eDa(a)?"world.turtles":fDa(a)?"world.links":CP(a)?"world.patches":gDa(a)?"world.ticker.tickCount":hDa(a)?"workspace.timer.elapsed":iDa(a)?"Tasks.map":jDa(a)?"Prims.random":kDa(a)?"Prims.generateNewSeed":lDa(a)?"Random.save":mDa(a)?
+"Prims.randomExponential":nDa(a)?"Prims.randomFloat":oDa(a)?"Prims.randomNormal":pDa(a)?"Prims.randomPoisson":qDa(a)?"Prims.randomGamma":rDa(a)?"Prims.linkSet":sDa(a)?"Prims.patchSet":tDa(a)?"Prims.turtleSet":uDa(a)?"Prims.turtlesOn":$O(a)?"Prims.gt":aP(a)?"Prims.lt":vDa(a)?"Prims.gte":wDa(a)?"Prims.lte":xDa(a)?"world.linkManager.getLink":yDa(a)?"Tasks.apply":zDa(a)?"Prims.boom":ADa(a)?"world.observer.subject":BDa(a)?"Prims.dateAndTime":CDa(a)?"Prims.nanoTime":DDa(a)?"UserDialogPrims.yesOrNo":EDa(a)?
+"UserDialogPrims.input":FDa(a)?"Prims.readFromString":b.y(a)};c.Za=function(a){return this.On(a)};c.gb=function(a,b){return this.wn(a,b)};c.$classData=g({F5:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$NormalReporter$$anonfun$unapply$3",{F5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Cq(){}Cq.prototype=new s_;Cq.prototype.constructor=Cq;c=Cq.prototype;c.b=function(){return this};c.dF=function(a){return GDa(a)||GN(a)||HDa(a)||IDa(a)||JDa(a)||KDa(a)||LDa(a)||MDa(a)};
+c.vD=function(a,b){return GDa(a)?"":GN(a)?"throw new Exception.StopInterrupt":HDa(a)?"":IDa(a)?"SelfManager.self().hideTurtle(true);":JDa(a)?"SelfManager.self().hideTurtle(false);":KDa(a)?"throw new Error(\"Unfortunately, no perfect equivalent to `import-pcolors` can be implemented in NetLogo Web.  However, the \\'import-a\\' and \\'fetch\\' extensions offer primitives that can accomplish this in both NetLogo and NetLogo Web.\")":LDa(a)?"throw new Error(\"Unfortunately, no perfect equivalent to `import-pcolors-rgb` can be implemented in NetLogo Web.  However, the \\'import-a\\' and \\'fetch\\' extensions offer primitives that can accomplish this in both NetLogo and NetLogo Web.\")":
+MDa(a)?"throw new Error(\"Unfortunately, no perfect equivalent to `import-world` can be implemented in NetLogo Web.  However, the \\'import-a\\' and \\'fetch\\' extensions offer primitives that can accomplish this in both NetLogo and NetLogo Web.\")":b.y(a)};c.Za=function(a){return this.dF(a)};c.gb=function(a,b){return this.vD(a,b)};c.$classData=g({G5:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$SimpleCommand$$anonfun$unapply$5",{G5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function kt(){}kt.prototype=new s_;
+kt.prototype.constructor=kt;c=kt.prototype;c.b=function(){return this};c.On=function(a){return!!(a&&a.$classData&&a.$classData.m.a2)||NDa(a)||ODa(a)||PDa(a)||QDa(a)||RDa(a)||SDa(a)||TDa(a)||UDa(a)||VDa(a)||WDa(a)||XDa(a)||YDa(a)||ZDa(a)||$Da(a)||aEa(a)||bEa(a)||cEa(a)||dEa(a)||eEa(a)||fEa(a)||gEa(a)||hEa(a)};
+c.wn=function(a,b){return a&&a.$classData&&a.$classData.m.a2?"Nobody":NDa(a)?"ColorModel.BASE_COLORS":ODa(a)?"Meta.behaviorSpaceName":PDa(a)?"Meta.behaviorSpaceRun":QDa(a)?"Object.keys(world.linkShapeMap)":RDa(a)?"world.topology.maxPxcor":SDa(a)?"world.topology.maxPycor":TDa(a)?"world.topology.minPxcor":UDa(a)?"world.topology.minPycor":VDa(a)?"Meta.isApplet":WDa(a)?"Meta.version":XDa(a)?"Meta.isWeb":YDa(a)?"new LinkSet([], world)":ZDa(a)?"new PatchSet([], world)":$Da(a)?"new TurtleSet([], world)":
+aEa(a)?"world.patchSize":bEa(a)?"Prims.randomPatchCoord(world.topology.minPxcor, world.topology.maxPxcor)":cEa(a)?"Prims.randomPatchCoord(world.topology.minPycor, world.topology.maxPycor)":dEa(a)?"Prims.randomCoord(world.topology.minPxcor, world.topology.maxPxcor)":eEa(a)?"Prims.randomCoord(world.topology.minPycor, world.topology.maxPycor)":fEa(a)?"Object.keys(world.turtleShapeMap)":gEa(a)?"world.topology.height":hEa(a)?"world.topology.width":b.y(a)};c.Za=function(a){return this.On(a)};
+c.gb=function(a,b){return this.wn(a,b)};c.$classData=g({H5:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$SimpleReporter$$anonfun$unapply$1",{H5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function nt(){}nt.prototype=new s_;nt.prototype.constructor=nt;c=nt.prototype;c.b=function(){return this};c.On=function(a){return iEa(a)||jEa(a)||kEa(a)||lEa(a)||mEa(a)||nEa(a)||oEa(a)||pEa(a)||qEa(a)||rEa(a)||sEa(a)||tEa(a)||uEa(a)||vEa(a)||wEa(a)||xEa(a)||yEa(a)};
+c.wn=function(a,b){return iEa(a)?"isValidAgent()":jEa(a)?"isAgentSet()":kEa(a)?"isCommandLambda()":lEa(a)?"isReporterLambda()":mEa(a)?"isBoolean()":nEa(a)?"isBreed("+hd(id(),a.la)+")":oEa(a)?"isDirectedLink()":pEa(a)?"isValidLink()":qEa(a)?"isLinkSet()":rEa(a)?"isList()":sEa(a)?"isNumber()":tEa(a)?"isPatch()":uEa(a)?"isPatchSet()":vEa(a)?"isString()":wEa(a)?"isValidTurtle()":xEa(a)?"isTurtleSet()":yEa(a)?"isUndirectedLink()":b.y(a)};c.Za=function(a){return this.On(a)};
+c.gb=function(a,b){return this.wn(a,b)};c.$classData=g({I5:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$TypeCheck$$anonfun$unapply$4",{I5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Us(){this.Mw=this.Kf=this.Gg=this.Ne=null;this.a=!1}Us.prototype=new l;Us.prototype.constructor=Us;c=Us.prototype;c.u=function(){return"JsDeclare"};c.Nw=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 14");return this.Mw};
+c.v=function(){return 3};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.TR&&this.Ne===a.Ne&&this.Gg===a.Gg){var b=this.Kf;a=a.Kf;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Ne;case 1:return this.Gg;case 2:return this.Kf;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ms=function(){return this.Kf};c.$k=function(a,b,d){this.Ne=a;this.Gg=b;this.Kf=d;this.Mw="var "+a+" \x3d "+b+";";this.a=!0;return this};
+c.r=function(){return T(S(),this)};c.mo=function(){return this.Ne};c.x=function(){return Y(new Z,this)};var zEa=g({TR:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$JsDeclare",{TR:1,d:1,zx:1,t:1,q:1,k:1,h:1});Us.prototype.$classData=zEa;function Ct(){this.Kf=this.ew=this.Hl=this.Ne=null}Ct.prototype=new l;Ct.prototype.constructor=Ct;c=Ct.prototype;c.u=function(){return"JsDepend"};c.Nw=function(){return"var "+this.Ne+" \x3d tortoise_require('"+this.Hl+"')"+this.ew+"("+this.Kf.Ab(", ")+");"};
+function qga(a,b){a.Ne="Extensions";a.Hl="extensions/all";a.ew=".initialize";a.Kf=b;return a}c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.UR&&this.Ne===a.Ne&&this.Hl===a.Hl&&this.ew===a.ew){var b=this.Kf;a=a.Kf;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Ne;case 1:return this.Hl;case 2:return this.ew;case 3:return this.Kf;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ms=function(){return this.Kf};
+c.r=function(){return T(S(),this)};c.mo=function(){return this.Ne};c.x=function(){return Y(new Z,this)};var AEa=g({UR:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$JsDepend",{UR:1,d:1,zx:1,t:1,q:1,k:1,h:1});Ct.prototype.$classData=AEa;function Ts(){this.Kf=this.Hl=this.Ne=null;this.a=!1}Ts.prototype=new l;Ts.prototype.constructor=Ts;c=Ts.prototype;c.u=function(){return"JsRequire"};c.Kd=function(a,b){this.Ne=a;this.Hl=b;this.Kf=G(t(),u());this.a=!0;return this};
+c.Nw=function(){return"var "+this.Ne+" \x3d tortoise_require('"+this.Hl+"');"};c.v=function(){return 2};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.VR?this.Ne===a.Ne&&this.Hl===a.Hl:!1};c.w=function(a){switch(a){case 0:return this.Ne;case 1:return this.Hl;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ms=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 24");return this.Kf};
+c.r=function(){return T(S(),this)};c.mo=function(){return this.Ne};c.x=function(){return Y(new Z,this)};var BEa=g({VR:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$JsRequire",{VR:1,d:1,zx:1,t:1,q:1,k:1,h:1});Ts.prototype.$classData=BEa;function Vs(){this.Kf=this.Gg=this.Ne=null}Vs.prototype=new l;Vs.prototype.constructor=Vs;c=Vs.prototype;c.u=function(){return"JsStatement"};c.Nw=function(){return this.Gg};c.v=function(){return 3};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.WR&&this.Ne===a.Ne&&this.Gg===a.Gg){var b=this.Kf;a=a.Kf;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Ne;case 1:return this.Gg;case 2:return this.Kf;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ms=function(){return this.Kf};c.$k=function(a,b,d){this.Ne=a;this.Gg=b;this.Kf=d;return this};c.r=function(){return T(S(),this)};c.mo=function(){return this.Ne};
+c.x=function(){return Y(new Z,this)};var CEa=g({WR:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$JsStatement",{WR:1,d:1,zx:1,t:1,q:1,k:1,h:1});Vs.prototype.$classData=CEa;function At(){this.Mw=this.Ne=this.Kf=this.Zx=this.wa=null;this.a=0}At.prototype=new l;At.prototype.constructor=At;c=At.prototype;c.u=function(){return"WorkspaceInit"};
+c.Nw=function(){if(0===(4&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 37");return this.Mw};c.v=function(){return 2};
+c.tv=function(a,b){this.wa=a;this.Zx=b;var d=G(t(),(new J).j(["modelConfig","modelConfig.plots"])),e=t();this.Kf=d.$c(b,e.s);this.a=(1|this.a)<<24>>24;this.Ne="workspace";this.a=(2|this.a)<<24>>24;b=m(new p,function(){return function(a){return a.Qc("(",", ",")")}}(this));d=t();this.Mw="var workspace \x3d tortoise_require('engine/workspace')(modelConfig)"+a.ya(b,d.s).Ab("")+";";this.a=(4|this.a)<<24>>24;return this};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.XR){var b=this.wa,d=a.wa;if(null===b?null===d:b.o(d))return b=this.Zx,a=a.Zx,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.Zx;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ms=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 35");return this.Kf};
+c.r=function(){return T(S(),this)};c.mo=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 36");return this.Ne};c.x=function(){return Y(new Z,this)};var DEa=g({XR:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$WorkspaceInit",{XR:1,d:1,zx:1,t:1,q:1,k:1,h:1});At.prototype.$classData=DEa;function G4(){}G4.prototype=new l;G4.prototype.constructor=G4;c=G4.prototype;c.b=function(){return this};
+c.u=function(){return"NotCompiled"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"NotCompiled"};c.r=function(){return 1487347812};c.x=function(){return Y(new Z,this)};c.$classData=g({O5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$NotCompiled$",{O5:1,d:1,Ax:1,t:1,q:1,k:1,h:1});var EEa=void 0;function Qga(){EEa||(EEa=(new G4).b());return EEa}function Tt(){this.Es=this.ik=this.hk=null}Tt.prototype=new l;Tt.prototype.constructor=Tt;c=Tt.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.m.AC&&this.hk===a.hk&&this.ik===a.ik){var b=this.Es;a=a.Es;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.hk;case 1:return this.ik;case 2:return this.Es;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.$k=function(a,b,d){this.hk=a;this.ik=b;this.Es=d;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({AC:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$PlotWidgetCompilation",{AC:1,d:1,Ax:1,t:1,q:1,k:1,h:1});function Zt(){this.Hs=this.Cs=this.Ds=null}Zt.prototype=new l;Zt.prototype.constructor=Zt;c=Zt.prototype;c.u=function(){return"SliderCompilation"};c.v=function(){return 3};c.o=function(a){return this===a?!0:eu(a)?this.Ds===a.Ds&&this.Cs===a.Cs&&this.Hs===a.Hs:!1};
+c.w=function(a){switch(a){case 0:return this.Ds;case 1:return this.Cs;case 2:return this.Hs;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.KD=function(){var a=t(),b=(new w).e("compiledMin",this.Ds),d=(new w).e("compiledMax",this.Cs),b=[b,d,(new w).e("compiledStep",this.Hs)];return G(a,(new J).j(b))};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function eu(a){return!!(a&&a.$classData&&a.$classData.m.YR)}
+c.$classData=g({YR:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$SliderCompilation",{YR:1,d:1,Ax:1,t:1,q:1,k:1,h:1});function au(){this.Gs=null}au.prototype=new l;au.prototype.constructor=au;c=au.prototype;c.u=function(){return"SourceCompilation"};c.v=function(){return 1};c.o=function(a){return this===a?!0:du(a)?this.Gs===a.Gs:!1};c.w=function(a){switch(a){case 0:return this.Gs;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.KD=function(){var a=t(),b=[(new w).e("compiledSource",this.Gs)];return G(a,(new J).j(b))};c.c=function(a){this.Gs=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function du(a){return!!(a&&a.$classData&&a.$classData.m.ZR)}c.$classData=g({ZR:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$SourceCompilation",{ZR:1,d:1,Ax:1,t:1,q:1,k:1,h:1});function $t(){this.ik=this.hk=null}$t.prototype=new l;$t.prototype.constructor=$t;c=$t.prototype;
+c.Kd=function(a,b){this.hk=a;this.ik=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.m.BC?this.hk===a.hk&&this.ik===a.ik:!1};c.w=function(a){switch(a){case 0:return this.hk;case 1:return this.ik;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({BC:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$UpdateableCompilation",{BC:1,d:1,Ax:1,t:1,q:1,k:1,h:1});function dW(){}dW.prototype=new s_;dW.prototype.constructor=dW;c=dW.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({R5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$2$3$$anonfun$apply$6",{R5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function eW(){}eW.prototype=new s_;eW.prototype.constructor=eW;c=eW.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({T5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$4$1$$anonfun$apply$7",{T5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function fW(){}fW.prototype=new s_;fW.prototype.constructor=fW;c=fW.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({V5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$6$1$$anonfun$apply$8",{V5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function gW(){}gW.prototype=new s_;gW.prototype.constructor=gW;c=gW.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({X5:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$8$1$$anonfun$apply$9",{X5:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function uW(){this.Yw=0;this.xv=!1;this.Ku=null;this.Ho=0;this.Rn=!1;this.Vk=null;this.a=0}uW.prototype=new l;uW.prototype.constructor=uW;c=uW.prototype;c.kF=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 82");return this.Rn};
+c.u=function(){return"JsonLinkLine"};c.v=function(){return 3};c.lH=function(){if(0===(1&this.a)<<24>>24)throw(new v).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.m.bS&&this.Yw===a.Yw&&this.xv===a.xv){var b=this.Ku;a=a.Ku;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Yw;case 1:return this.xv;case 2:return this.Ku;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.QD=function(){if(0===(4&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 83");return this.Vk};c.r=function(){var a=-889275714,a=V().ca(a,BE(V(),this.Yw)),a=V().ca(a,this.xv?1231:1237),a=V().ca(a,fC(V(),this.Ku));return V().xb(a,3)};
+c.x=function(){return Y(new Z,this)};c.hv=function(a,b,d){this.Yw=a;this.xv=b;this.Ku=d;this.Ho=a;this.a=(1|this.a)<<24>>24;this.Rn=b;this.a=(2|this.a)<<24>>24;this.Vk=d;this.a=(4|this.a)<<24>>24;return this};c.$classData=g({bS:0},!1,"org.nlogo.tortoise.compiler.json.JsonLinkLine",{bS:1,d:1,c1:1,t:1,q:1,k:1,h:1});function Uu(){}Uu.prototype=new s_;Uu.prototype.constructor=Uu;Uu.prototype.b=function(){return this};
+Uu.prototype.Za=function(a){var b=!1;return"number"===typeof a&&(b=!0,tu(uu(),+a))?!0:b||Qa(a)||Da(a)||"boolean"===typeof a||vg(a)?!0:!1};Uu.prototype.gb=function(a,b){var d=!1,e=null;return"number"===typeof a&&(d=!0,e=a,tu(uu(),+e))?(new vu).hb(Oa(+e)):d?(new wu).Bj(+e):Qa(a)?(new vu).hb(a|0):Da(a)?(new vu).hb(a.ia):"boolean"===typeof a?(new yu).ud(!!a):vg(a)?(new xu).c(a):b.y(a)};
+Uu.prototype.$classData=g({q6:0},!1,"org.nlogo.tortoise.compiler.json.JsonSerializer$$anonfun$1",{q6:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Vu(){}Vu.prototype=new s_;Vu.prototype.constructor=Vu;Vu.prototype.b=function(){return this};Vu.prototype.Za=function(a){return ixa(a)||!!(a&&a.$classData&&a.$classData.m.au)||zg(a)};
+Vu.prototype.gb=function(a,b){if(ixa(a)){a=jxa(a);b=m(new p,function(){return function(a){var b=a.we();a=kha(iv(),a).rf();return(new w).e(b,a)}}(this));var d=t();a=a.ya(b,d.s);return(new qu).bc(Wg(Xg(),a))}if(a&&a.$classData&&a.$classData.m.au)return kha(iv(),a).rf();if(zg(a)){b=a.xc;Mj();a=Nj().pc;a=Nc(b,a);for(b=Qj(b);b.oi;)d=b.ka(),a.Ma(Xu(Ft(),d));return(new zu).Ea(a.Ba().wb())}return b.y(a)};
+Vu.prototype.$classData=g({r6:0},!1,"org.nlogo.tortoise.compiler.json.JsonSerializer$$anonfun$2",{r6:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Wu(){}Wu.prototype=new s_;Wu.prototype.constructor=Wu;Wu.prototype.b=function(){return this};Wu.prototype.Za=function(a){if(FEa(a)){var b=a.na();if(null!==a.ja()&&null!==b)return!0}return a&&a.$classData&&a.$classData.m.me||Xj(a)&&null!==a.Q||C()===a?!0:!1};
+Wu.prototype.gb=function(a,b){if(FEa(a)){var d=a.ja(),e=a.na();if(null!==d&&null!==e)return x(),a=[Xu(Ft(),d),Xu(Ft(),e)],a=(new J).j(a),b=x().s,(new zu).Ea(K(a,b))}if(a&&a.$classData&&a.$classData.m.me){b=a.pg();Mj();a=Nj().pc;a=Nc(b,a);for(b=Qj(b);b.oi;){d=b.ka();if(null===d)throw(new q).i(d);a.Ma(Xu(Ft(),d))}return(new zu).Ea(a.Ba().wb())}return Xj(a)&&(d=a.Q,null!==d)?Xu(Ft(),d):C()===a?su():b.y(a)};
+Wu.prototype.$classData=g({s6:0},!1,"org.nlogo.tortoise.compiler.json.JsonSerializer$$anonfun$3",{s6:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function zu(){this.Va=null}zu.prototype=new l;zu.prototype.constructor=zu;c=zu.prototype;c.u=function(){return"JsArray"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(Hu(a)){var b=this.Va;a=a.Va;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Va;default:throw(new O).c(""+a);}};c.l=function(){return sd(this)};
+c.Ea=function(a){this.Va=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Hu(a){return!!(a&&a.$classData&&a.$classData.m.gS)}c.$classData=g({gS:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsArray",{gS:1,d:1,os:1,t:1,q:1,k:1,h:1});function yu(){this.tm=!1}yu.prototype=new l;yu.prototype.constructor=yu;c=yu.prototype;c.u=function(){return"JsBool"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Gu(a)?this.tm===a.tm:!1};
+c.w=function(a){switch(a){case 0:return this.tm;default:throw(new O).c(""+a);}};c.l=function(){return sd(this)};c.r=function(){var a=-889275714,a=V().ca(a,this.tm?1231:1237);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};c.ud=function(a){this.tm=a;return this};function Gu(a){return!!(a&&a.$classData&&a.$classData.m.hS)}c.$classData=g({hS:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsBool",{hS:1,d:1,os:1,t:1,q:1,k:1,h:1});function wu(){this.Dl=0}wu.prototype=new l;
+wu.prototype.constructor=wu;c=wu.prototype;c.u=function(){return"JsDouble"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Eu(a)?this.Dl===a.Dl:!1};c.Bj=function(a){this.Dl=a;return this};c.w=function(a){switch(a){case 0:return this.Dl;default:throw(new O).c(""+a);}};c.l=function(){return sd(this)};c.r=function(){var a=-889275714,a=V().ca(a,BE(V(),this.Dl));return V().xb(a,1)};c.x=function(){return Y(new Z,this)};function Eu(a){return!!(a&&a.$classData&&a.$classData.m.iS)}
+c.$classData=g({iS:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsDouble",{iS:1,d:1,os:1,t:1,q:1,k:1,h:1});function vu(){this.zi=0}vu.prototype=new l;vu.prototype.constructor=vu;c=vu.prototype;c.u=function(){return"JsInt"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Du(a)?this.zi===a.zi:!1};c.w=function(a){switch(a){case 0:return this.zi;default:throw(new O).c(""+a);}};c.l=function(){return sd(this)};c.hb=function(a){this.zi=a;return this};
+c.r=function(){var a=-889275714,a=V().ca(a,this.zi);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};function Du(a){return!!(a&&a.$classData&&a.$classData.m.jS)}c.$classData=g({jS:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsInt",{jS:1,d:1,os:1,t:1,q:1,k:1,h:1});function H4(){}H4.prototype=new l;H4.prototype.constructor=H4;c=H4.prototype;c.b=function(){return this};c.u=function(){return"JsNull"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return sd(this)};
+c.r=function(){return-2067765616};c.x=function(){return Y(new Z,this)};c.$classData=g({Y6:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsNull$",{Y6:1,d:1,os:1,t:1,q:1,k:1,h:1});var GEa=void 0;function su(){GEa||(GEa=(new H4).b());return GEa}function qu(){this.eh=null}qu.prototype=new l;qu.prototype.constructor=qu;c=qu.prototype;c.u=function(){return"JsObject"};c.v=function(){return 1};c.bc=function(a){this.eh=a;return this};
+c.o=function(a){if(this===a)return!0;if(Ku(a)){var b=this.eh;a=a.eh;return null===b?null===a:DO(b,a)}return!1};c.w=function(a){switch(a){case 0:return this.eh;default:throw(new O).c(""+a);}};c.l=function(){return sd(this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Ku(a){return!!(a&&a.$classData&&a.$classData.m.kS)}c.$classData=g({kS:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsObject",{kS:1,d:1,os:1,t:1,q:1,k:1,h:1});function xu(){this.Lc=null}
+xu.prototype=new l;xu.prototype.constructor=xu;c=xu.prototype;c.u=function(){return"JsString"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Fu(a)?this.Lc===a.Lc:!1};c.w=function(a){switch(a){case 0:return this.Lc;default:throw(new O).c(""+a);}};c.l=function(){return sd(this)};c.c=function(a){this.Lc=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Fu(a){return!!(a&&a.$classData&&a.$classData.m.lS)}
+c.$classData=g({lS:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsString",{lS:1,d:1,os:1,t:1,q:1,k:1,h:1});function RW(){}RW.prototype=new s_;RW.prototype.constructor=RW;c=RW.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({x7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$10$1$$anonfun$apply$5",{x7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function SW(){}SW.prototype=new s_;SW.prototype.constructor=SW;c=SW.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({z7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$12$1$$anonfun$apply$6",{z7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function VW(){}VW.prototype=new s_;VW.prototype.constructor=VW;c=VW.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({B7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$14$1$$anonfun$apply$7",{B7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function XW(){}XW.prototype=new s_;XW.prototype.constructor=XW;c=XW.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({D7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$16$1$$anonfun$apply$8",{D7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function YW(){}YW.prototype=new s_;YW.prototype.constructor=YW;c=YW.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({F7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$18$1$$anonfun$apply$9",{F7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function aX(){}aX.prototype=new s_;aX.prototype.constructor=aX;c=aX.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({H7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$2$1$$anonfun$apply$1",{H7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function bX(){}bX.prototype=new s_;bX.prototype.constructor=bX;c=bX.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({J7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$20$1$$anonfun$apply$10",{J7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function eX(){}eX.prototype=new s_;eX.prototype.constructor=eX;c=eX.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({L7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$22$1$$anonfun$apply$11",{L7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function gX(){}gX.prototype=new s_;gX.prototype.constructor=gX;c=gX.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({N7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$4$1$$anonfun$apply$2",{N7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function iX(){}iX.prototype=new s_;iX.prototype.constructor=iX;c=iX.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({P7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$6$1$$anonfun$apply$3",{P7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function jX(){}jX.prototype=new s_;jX.prototype.constructor=jX;c=jX.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({R7:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$8$1$$anonfun$apply$4",{R7:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function qX(){}qX.prototype=new s_;qX.prototype.constructor=qX;c=qX.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({b8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$dims2Json$writer$macro$2$3$$anonfun$apply$2",{b8:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function uX(){}uX.prototype=new s_;uX.prototype.constructor=uX;c=uX.prototype;c.Dc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Xj(e))return(new w).e(d,e.Q)}return b.y(a)};c.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&Xj(a.na())?!0:!1};
+c.$classData=g({f8:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$pen2Json$writer$macro$2$1$$anonfun$apply$1",{f8:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function GQ(){}GQ.prototype=new s_;GQ.prototype.constructor=GQ;c=GQ.prototype;c.b=function(){return this};c.vk=function(){return!0};c.xn=function(){var a=u(),b=Jm(a),b=la(Xa(Ad),[b]),d;d=0;for(a=hv(a);a.ra();){var e=a.ka();b.n[d]=e;d=1+d|0}return(new w).e(!1,b)};c.Za=function(a){return this.vk(a)};c.gb=function(a,b){return this.xn(a,b)};
+c.$classData=g({l8:0},!1,"org.scalajs.testinterface.HTMLRunner$$anonfun$scheduleTask$7",{l8:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Yv(){}Yv.prototype=new s_;Yv.prototype.constructor=Yv;Yv.prototype.b=function(){return this};Yv.prototype.Za=function(a){return yd(a)};Yv.prototype.gb=function(a,b){return yd(a)?a:b.y(a)};Yv.prototype.$classData=g({y8:0},!1,"org.scalajs.testinterface.TestDetector$$anonfun$tryLoadFromExportsNamespace$1$1",{y8:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function Xv(){}
+Xv.prototype=new s_;Xv.prototype.constructor=Xv;Xv.prototype.b=function(){return this};Xv.prototype.Za=function(a){return Qk(pa(zd),a.am)};Xv.prototype.gb=function(a,b){return Qk(pa(zd),a.am)?Vha(a):b.y(a)};Xv.prototype.$classData=g({z8:0},!1,"org.scalajs.testinterface.TestDetector$$anonfun$tryLoadFromReflect$1$1",{z8:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function YQ(){this.hU=this.np=null}YQ.prototype=new l;YQ.prototype.constructor=YQ;c=YQ.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.m.EC){var b=this.np;a=a.np;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.np;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.xq=function(){return this.hU};c.qV=function(a){return a.y(this.np)};c.Ea=function(a){this.np=a;this.hU=C();return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({EC:0},!1,"play.api.libs.json.JsError",{EC:1,d:1,e9:1,t:1,q:1,k:1,h:1});function I4(){this.dh=null}I4.prototype=new vxa;I4.prototype.constructor=I4;I4.prototype.b=function(){K1.prototype.br.call(this,(x(),u()));return this};I4.prototype.$classData=g({d9:0},!1,"play.api.libs.json.JsPath$",{d9:1,FC:1,d:1,t:1,q:1,k:1,h:1});var HEa=void 0;function XQ(){HEa||(HEa=(new I4).b());return HEa}function TQ(){this.dh=this.W=null}TQ.prototype=new l;TQ.prototype.constructor=TQ;c=TQ.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.m.GC&&Em(Fm(),this.W,a.W)){var b=this.dh;a=a.dh;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.W;case 1:return this.dh;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.xq=function(){return(new H).i(this.W)};c.qV=function(a,b){return b.y(this.W)};
+function SQ(a,b){var d=(new K1).br((XQ(),u()));a.W=b;a.dh=d;return a}c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({GC:0},!1,"play.api.libs.json.JsSuccess",{GC:1,d:1,e9:1,t:1,q:1,k:1,h:1});function dy(){this.um=null}dy.prototype=new wxa;dy.prototype.constructor=dy;c=dy.prototype;c.u=function(){return"\\/-"};c.v=function(){return 1};c.o=function(a){return this===a?!0:h2(a)?Em(Fm(),this.um,a.um):!1};
+c.w=function(a){switch(a){case 0:return this.um;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.i=function(a){this.um=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function h2(a){return!!(a&&a.$classData&&a.$classData.m.zS)}c.$classData=g({zS:0},!1,"scalaz.$bslash$div$minus",{zS:1,r9:1,d:1,t:1,q:1,k:1,h:1});function ey(){this.ga=null}ey.prototype=new wxa;ey.prototype.constructor=ey;c=ey.prototype;c.u=function(){return"-\\/"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:g2(a)?Em(Fm(),this.ga,a.ga):!1};c.w=function(a){switch(a){case 0:return this.ga;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.i=function(a){this.ga=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function g2(a){return!!(a&&a.$classData&&a.$classData.m.AS)}c.$classData=g({AS:0},!1,"scalaz.$minus$bslash$div",{AS:1,r9:1,d:1,t:1,q:1,k:1,h:1});function JR(a){a.bm(IEa(a))}function J4(){this.da=null}
+J4.prototype=new l;J4.prototype.constructor=J4;function IEa(a){var b=new J4;if(null===a)throw pg(qg(),null);b.da=a;return b}J4.prototype.$classData=g({M9:0},!1,"scalaz.BindRec$$anon$4",{M9:1,d:1,spa:1,aD:1,rs:1,Qk:1,sj:1});function K4(){}K4.prototype=new Bxa;K4.prototype.constructor=K4;function JEa(){}JEa.prototype=K4.prototype;function Ip(){this.fc=null}Ip.prototype=new Oxa;Ip.prototype.constructor=Ip;c=Ip.prototype;c.u=function(){return"Failure"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:Hp(a)?Em(Fm(),this.fc,a.fc):!1};c.w=function(a){switch(a){case 0:return this.fc;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.i=function(a){this.fc=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Hp(a){return!!(a&&a.$classData&&a.$classData.m.GS)}c.$classData=g({GS:0},!1,"scalaz.Failure",{GS:1,Paa:1,d:1,t:1,q:1,k:1,h:1});
+function L4(){this.Zi=this.fh=this.Fd=this.Qb=this.Xa=this.Aa=this.Cf=null}L4.prototype=new rx;L4.prototype.constructor=L4;c=L4.prototype;c.u=function(){return"Four"};c.v=function(){return 5};c.fx=function(){dn(en(),"Digit overflow")};c.o=function(a){return this===a?!0:Ix(a)?Em(Fm(),this.Cf,a.Cf)&&Em(Fm(),this.Aa,a.Aa)&&Em(Fm(),this.Xa,a.Xa)&&Em(Fm(),this.Qb,a.Qb)&&Em(Fm(),this.Fd,a.Fd):!1};
+c.w=function(a){switch(a){case 0:return this.Cf;case 1:return this.Aa;case 2:return this.Xa;case 3:return this.Qb;case 4:return this.Fd;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.ta=function(a){a.y(this.Aa);a.y(this.Xa);a.y(this.Qb);a.y(this.Fd)};c.st=function(){return this.Zi};c.jx=function(){dn(en(),"Digit overflow")};function KEa(a,b,d,e,f,h,k){a.Cf=b;a.Aa=d;a.Xa=e;a.Qb=f;a.Fd=h;a.fh=k;a.Zi=b;return a}
+c.Ty=function(a,b){Ex();var d=a.y(this.Aa),e=a.y(this.Xa),f=a.y(this.Qb);a=a.y(this.Fd);return KEa(new L4,b.cf(b.cf(b.cf(b.jm(d),e),f),a),d,e,f,a,b)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Ix(a){return!!(a&&a.$classData&&a.$classData.m.IS)}c.$classData=g({IS:0},!1,"scalaz.Four",{IS:1,RC:1,d:1,t:1,q:1,k:1,h:1});function hy(){this.sp=this.ss=null}hy.prototype=new cy;hy.prototype.constructor=hy;c=hy.prototype;c.u=function(){return"Gosub"};c.v=function(){return 2};
+function gy(a,b,d){a.ss=b;a.sp=d;return a}c.o=function(a){if(this===a)return!0;if(aja(a)){var b=this.ss,d=a.ss;if(null===b?null===d:b.o(d))return b=this.sp,a=a.sp,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.ss;case 1:return this.sp;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function aja(a){return!!(a&&a.$classData&&a.$classData.m.KS)}
+c.$classData=g({KS:0},!1,"scalaz.Free$Gosub",{KS:1,JS:1,d:1,t:1,q:1,k:1,h:1});function fy(){this.ga=null}fy.prototype=new cy;fy.prototype.constructor=fy;c=fy.prototype;c.u=function(){return"Return"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Zia(a)?Em(Fm(),this.ga,a.ga):!1};c.w=function(a){switch(a){case 0:return this.ga;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.i=function(a){this.ga=a;return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};function Zia(a){return!!(a&&a.$classData&&a.$classData.m.LS)}c.$classData=g({LS:0},!1,"scalaz.Free$Return",{LS:1,JS:1,d:1,t:1,q:1,k:1,h:1});function M4(){this.ga=null}M4.prototype=new cy;M4.prototype.constructor=M4;c=M4.prototype;c.u=function(){return"Suspend"};c.v=function(){return 1};c.o=function(a){return this===a?!0:$ia(a)?Em(Fm(),this.ga,a.ga):!1};c.w=function(a){switch(a){case 0:return this.ga;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.i=function(a){this.ga=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function $ia(a){return!!(a&&a.$classData&&a.$classData.m.MS)}c.$classData=g({MS:0},!1,"scalaz.Free$Suspend",{MS:1,JS:1,d:1,t:1,q:1,k:1,h:1});function Pp(){this.ld=this.gd=null}Pp.prototype=new Cxa;Pp.prototype.constructor=Pp;c=Pp.prototype;c.u=function(){return"ICons"};c.v=function(){return 2};
+c.o=function(a){if(this===a)return!0;if(Op(a)&&Em(Fm(),this.gd,a.gd)){var b=this.ld;a=a.ld;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.gd;case 1:return this.ld;default:throw(new O).c(""+a);}};c.Vb=function(a,b){this.gd=a;this.ld=b;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Op(a){return!!(a&&a.$classData&&a.$classData.m.NS)}c.$classData=g({NS:0},!1,"scalaz.ICons",{NS:1,w$:1,d:1,t:1,q:1,k:1,h:1});
+function X1(){}X1.prototype=new Cxa;X1.prototype.constructor=X1;c=X1.prototype;c.b=function(){return this};c.u=function(){return"INil"};c.v=function(){return 0};c.o=function(a){return Qp(a)};c.w=function(a){throw(new O).c(""+a);};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Qp(a){return!!(a&&a.$classData&&a.$classData.m.OS)}c.$classData=g({OS:0},!1,"scalaz.INil",{OS:1,w$:1,d:1,t:1,q:1,k:1,h:1});function N4(){}N4.prototype=new Exa;N4.prototype.constructor=N4;
+function LEa(){}LEa.prototype=N4.prototype;function xR(){this.Zi=this.fh=this.Aa=this.Cf=null}xR.prototype=new rx;xR.prototype.constructor=xR;c=xR.prototype;c.u=function(){return"One"};c.v=function(){return 2};c.fx=function(a){return rqa(new vR,this.fh.cf(this.Cf,a),this.Aa,a,this.fh)};c.o=function(a){return this===a?!0:Bx(a)?Em(Fm(),this.Cf,a.Cf)&&Em(Fm(),this.Aa,a.Aa):!1};c.w=function(a){switch(a){case 0:return this.Cf;case 1:return this.Aa;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.ta=function(a){a.y(this.Aa)};c.st=function(){return this.Zi};c.jx=function(a){return rqa(new vR,this.fh.cp(a,this.Cf),a,this.Aa,this.fh)};c.Ty=function(a,b){return Sx(Ex(),a.y(this.Aa),b)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Bx(a){return!!(a&&a.$classData&&a.$classData.m.US)}c.$classData=g({US:0},!1,"scalaz.One",{US:1,RC:1,d:1,t:1,q:1,k:1,h:1});function O4(){}O4.prototype=new Fxa;O4.prototype.constructor=O4;
+function MEa(){}MEa.prototype=O4.prototype;function P4(){}P4.prototype=new Gxa;P4.prototype.constructor=P4;function NEa(){}NEa.prototype=P4.prototype;function Kp(){this.ga=null}Kp.prototype=new Oxa;Kp.prototype.constructor=Kp;c=Kp.prototype;c.u=function(){return"Success"};c.v=function(){return 1};c.o=function(a){return this===a?!0:P(a)?Em(Fm(),this.ga,a.ga):!1};c.w=function(a){switch(a){case 0:return this.ga;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.i=function(a){this.ga=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function P(a){return!!(a&&a.$classData&&a.$classData.m.WS)}c.$classData=g({WS:0},!1,"scalaz.Success",{WS:1,Paa:1,d:1,t:1,q:1,k:1,h:1});function Q4(){this.Zi=this.fh=this.Qb=this.Xa=this.Aa=this.Cf=null}Q4.prototype=new rx;Q4.prototype.constructor=Q4;c=Q4.prototype;c.u=function(){return"Three"};function OEa(a,b,d,e,f,h){a.Cf=b;a.Aa=d;a.Xa=e;a.Qb=f;a.fh=h;a.Zi=b;return a}c.v=function(){return 4};
+c.fx=function(a){return KEa(new L4,this.fh.cf(this.Cf,a),this.Aa,this.Xa,this.Qb,a,this.fh)};c.o=function(a){return this===a?!0:Hx(a)?Em(Fm(),this.Cf,a.Cf)&&Em(Fm(),this.Aa,a.Aa)&&Em(Fm(),this.Xa,a.Xa)&&Em(Fm(),this.Qb,a.Qb):!1};c.w=function(a){switch(a){case 0:return this.Cf;case 1:return this.Aa;case 2:return this.Xa;case 3:return this.Qb;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.ta=function(a){a.y(this.Aa);a.y(this.Xa);a.y(this.Qb)};c.st=function(){return this.Zi};
+c.jx=function(a){return KEa(new L4,this.fh.cp(a,this.Cf),a,this.Aa,this.Xa,this.Qb,this.fh)};c.Ty=function(a,b){Ex();var d=a.y(this.Aa),e=a.y(this.Xa);a=a.y(this.Qb);return OEa(new Q4,b.cf(b.cf(b.jm(d),e),a),d,e,a,b)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Hx(a){return!!(a&&a.$classData&&a.$classData.m.XS)}c.$classData=g({XS:0},!1,"scalaz.Three",{XS:1,RC:1,d:1,t:1,q:1,k:1,h:1});function vR(){this.Zi=this.fh=this.Xa=this.Aa=this.Cf=null}vR.prototype=new rx;
+vR.prototype.constructor=vR;function rqa(a,b,d,e,f){a.Cf=b;a.Aa=d;a.Xa=e;a.fh=f;a.Zi=b;return a}c=vR.prototype;c.u=function(){return"Two"};c.v=function(){return 3};c.fx=function(a){return OEa(new Q4,this.fh.cf(this.Cf,a),this.Aa,this.Xa,a,this.fh)};c.o=function(a){return this===a?!0:Fx(a)?Em(Fm(),this.Cf,a.Cf)&&Em(Fm(),this.Aa,a.Aa)&&Em(Fm(),this.Xa,a.Xa):!1};c.w=function(a){switch(a){case 0:return this.Cf;case 1:return this.Aa;case 2:return this.Xa;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.ta=function(a){a.y(this.Aa);a.y(this.Xa)};c.st=function(){return this.Zi};c.jx=function(a){return OEa(new Q4,this.fh.cp(a,this.Cf),a,this.Aa,this.Xa,this.fh)};c.Ty=function(a,b){return Oia(Ex(),a.y(this.Aa),a.y(this.Xa),b)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Fx(a){return!!(a&&a.$classData&&a.$classData.m.YS)}c.$classData=g({YS:0},!1,"scalaz.Two",{YS:1,RC:1,d:1,t:1,q:1,k:1,h:1});function R4(){}R4.prototype=new Nxa;
+R4.prototype.constructor=R4;function PEa(){}PEa.prototype=R4.prototype;function Wd(){this.da=null}Wd.prototype=new l;Wd.prototype.constructor=Wd;c=Wd.prototype;c.sc=function(a,b){dz();a=null===a?0:a.W;b=se(b);b=65535&ea(a,null===b?0:b.W);return Oe(b)};c.gi=function(){};c.jg=function(){};c.Ee=function(){dz();return Oe(1)};c.wf=function(){};c.zg=function(){};c.fe=function(a){if(null===a)throw pg(qg(),null);this.da=a;Gd(this);By(this);Dd(this);Qy(this);rR(this);return this};c.Rf=function(){};
+c.$classData=g({bba:0},!1,"scalaz.std.AnyValInstances$$anon$10",{bba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1});function Zd(){this.da=null}Zd.prototype=new l;Zd.prototype.constructor=Zd;c=Zd.prototype;c.sc=function(a,b){dz();b=se(b);return ea(a|0,b|0)<<16>>16};c.gi=function(){};c.jg=function(){};c.Ee=function(){dz();return 1};c.wf=function(){};c.zg=function(){};c.fe=function(a){if(null===a)throw pg(qg(),null);this.da=a;Gd(this);By(this);Dd(this);Qy(this);rR(this);return this};c.Rf=function(){};
+c.$classData=g({cba:0},!1,"scalaz.std.AnyValInstances$$anon$11",{cba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1});function ae(){this.da=null}ae.prototype=new l;ae.prototype.constructor=ae;c=ae.prototype;c.sc=function(a,b){dz();b=se(b);return ea(a|0,b|0)};c.gi=function(){};c.jg=function(){};c.Ee=function(){dz();return 1};c.wf=function(){};c.zg=function(){};c.fe=function(a){if(null===a)throw pg(qg(),null);this.da=a;Gd(this);By(this);Dd(this);Qy(this);rR(this);return this};c.Rf=function(){};
+c.$classData=g({dba:0},!1,"scalaz.std.AnyValInstances$$anon$12",{dba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1});function ce(){this.da=null}ce.prototype=new l;ce.prototype.constructor=ce;c=ce.prototype;c.sc=function(a,b){dz();var d=Ra(a);a=d.ia;d=d.oa;b=se(b);b=Ra(b);var e=b.ia,f=65535&a,h=a>>>16|0,k=65535&e,n=e>>>16|0,r=ea(f,k),k=ea(h,k),y=ea(f,n),f=r+((k+y|0)<<16)|0,r=(r>>>16|0)+y|0;a=(((ea(a,b.oa)+ea(d,e)|0)+ea(h,n)|0)+(r>>>16|0)|0)+(((65535&r)+k|0)>>>16|0)|0;return(new Xb).ha(f,a)};c.gi=function(){};
+c.jg=function(){};c.Ee=function(){dz();return(new Xb).ha(1,0)};c.wf=function(){};c.zg=function(){};c.fe=function(a){if(null===a)throw pg(qg(),null);this.da=a;Gd(this);By(this);Dd(this);Qy(this);rR(this);return this};c.Rf=function(){};c.$classData=g({eba:0},!1,"scalaz.std.AnyValInstances$$anon$13",{eba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1});function Ud(){this.da=null}Ud.prototype=new l;Ud.prototype.constructor=Ud;c=Ud.prototype;c.sc=function(a,b){dz();b=se(b);return ea(a|0,b|0)<<24>>24};c.gi=function(){};
+c.jg=function(){};c.Ee=function(){dz();return 1};c.wf=function(){};c.zg=function(){};c.fe=function(a){if(null===a)throw pg(qg(),null);this.da=a;Gd(this);By(this);Dd(this);Qy(this);rR(this);return this};c.Rf=function(){};c.$classData=g({oba:0},!1,"scalaz.std.AnyValInstances$$anon$9",{oba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1});function S4(){this.Qa=null}S4.prototype=new s_;S4.prototype.constructor=S4;S4.prototype.Za=function(){return!0};S4.prototype.gb=function(){return this.Qa.bZ};
+S4.prototype.$classData=g({Sba:0},!1,"scalaz.std.PartialFunctionInstances$$anon$1$$anonfun$1",{Sba:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function QEa(a,b,d,e){return e.hd(d.y(b.ub),m(new p,function(){return function(a){return(new T4).i(a)}}(a)))}function U4(){}U4.prototype=new l;U4.prototype.constructor=U4;c=U4.prototype;c.sc=function(a,b){dz();b=se(b);return Of(a,b)};c.$d=function(a){return Hd(this,a)};c.jg=function(){};c.Ee=function(){dz();return ff().un};c.rh=function(a){return na(a)};c.nh=function(){};
+c.wf=function(){};c.zg=function(){};c.SE=function(){Gd(this);By(this);Dd(this);Qy(this);Nd(this);return this};c.Rf=function(){};c.$classData=g({gca:0},!1,"scalaz.std.java.math.BigIntegerInstances$$anon$2",{gca:1,d:1,Uf:1,If:1,Fg:1,qg:1,xh:1});function ge(){}ge.prototype=new l;ge.prototype.constructor=ge;c=ge.prototype;c.sc=function(a,b){dz();b=se(b);return(new IZ).Ln(Of(a.re,b.re))};c.$d=function(a){return Hd(this,a)};c.jg=function(){};c.Ee=function(){dz();return HZ(JZ(),1)};c.rh=function(a){return na(a)};
+c.VE=function(){Gd(this);By(this);Dd(this);Qy(this);Nd(this);return this};c.nh=function(){};c.wf=function(){};c.zg=function(){};c.Rf=function(){};c.$classData=g({rca:0},!1,"scalaz.std.math.BigInts$$anon$2",{rca:1,d:1,Uf:1,If:1,Fg:1,qg:1,xh:1});function Hz(){}Hz.prototype=new s_;Hz.prototype.constructor=Hz;c=Hz.prototype;c.vk=function(){return!0};c.xn=function(a){return(new Fz).Dd(a)};c.Za=function(a){return this.vk(a)};c.gb=function(a,b){return this.xn(a,b)};
+c.$classData=g({Yca:0},!1,"utest.framework.TestTreeSeq$$anonfun$$nestedInanonfun$runFuture$1$1",{Yca:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function V4(){this.h_=this.Qa=null}V4.prototype=new s_;V4.prototype.constructor=V4;c=V4.prototype;c.vk=function(){return!0};c.xn=function(a){return lra(a)?(new H).i(a):(new H).i(REa(this.h_,a&&a.$classData&&a.$classData.m.sF&&"Boxed Error"===a.Lc?a.Mf:a))};function jka(a,b){var d=new V4;if(null===a)throw pg(qg(),null);d.Qa=a;d.h_=b;return d}c.Za=function(a){return this.vk(a)};
+c.gb=function(a,b){return this.xn(a,b)};c.$classData=g({Zca:0},!1,"utest.framework.TestTreeSeq$$anonfun$1",{Zca:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function uY(){}uY.prototype=new s_;uY.prototype.constructor=uY;c=uY.prototype;c.Dc=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.Za=function(a){return this.Ec(a)};c.gb=function(a,b){return this.Dc(a,b)};c.Ec=function(a){return null!==a&&""!==a.na()?!0:!1};
+c.$classData=g({gda:0},!1,"utest.runner.MasterRunner$$anonfun$1",{gda:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function W4(){this.PW=null}W4.prototype=new s_;W4.prototype.constructor=W4;c=W4.prototype;c.vk=function(){return!0};c.xn=function(a){for(var b=this.PW,d=0,e=b.n.length;d<e;)b.n[d].$G(a),d=1+d|0};function sra(a){var b=new W4;b.PW=a;return b}c.Za=function(a){return this.vk(a)};c.gb=function(a,b){return this.xn(a,b)};
+c.$classData=g({jda:0},!1,"utest.runner.Task$$anonfun$1",{jda:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function w(){this.Fb=this.ub=null}w.prototype=new l;w.prototype.constructor=w;function SEa(){}c=SEa.prototype=w.prototype;c.u=function(){return"Tuple2"};c.ni=function(){return this.ja()|0};c.v=function(){return 2};c.o=function(a){return this===a?!0:FEa(a)?Em(Fm(),this.ja(),a.ja())&&Em(Fm(),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 O).c(""+a);}return a};c.e=function(a,b){this.ub=a;this.Fb=b;return this};c.l=function(){return"("+this.ja()+","+this.na()+")"};c.na=function(){return this.Fb};c.Gc=function(){return this.na()|0};c.r=function(){return T(S(),this)};c.ja=function(){return this.ub};c.x=function(){return Y(new Z,this)};function FEa(a){return!!(a&&a.$classData&&a.$classData.m.hD)}
+var Bm=g({hD:0},!1,"scala.Tuple2",{hD:1,d:1,Bfa:1,t:1,q:1,k:1,h:1});w.prototype.$classData=Bm;function bc(){this.Gf=this.fb=this.Oa=null}bc.prototype=new l;bc.prototype.constructor=bc;c=bc.prototype;c.u=function(){return"Tuple3"};c.v=function(){return 3};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.KT?Em(Fm(),this.Oa,a.Oa)&&Em(Fm(),this.fb,a.fb)&&Em(Fm(),this.Gf,a.Gf):!1};
+c.w=function(a){a:switch(a){case 0:a=this.Oa;break a;case 1:a=this.fb;break a;case 2:a=this.Gf;break a;default:throw(new O).c(""+a);}return a};c.l=function(){return"("+this.Oa+","+this.fb+","+this.Gf+")"};c.Id=function(a,b,d){this.Oa=a;this.fb=b;this.Gf=d;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({KT:0},!1,"scala.Tuple3",{KT:1,d:1,$ra:1,t:1,q:1,k:1,h:1});function B1(){this.ds=this.Gf=this.fb=this.Oa=null}B1.prototype=new l;
+B1.prototype.constructor=B1;c=B1.prototype;c.u=function(){return"Tuple4"};c.v=function(){return 4};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.LT?Em(Fm(),this.Oa,a.Oa)&&Em(Fm(),this.fb,a.fb)&&Em(Fm(),this.Gf,a.Gf)&&Em(Fm(),this.ds,a.ds):!1};c.w=function(a){return Fra(this,a)};c.l=function(){return"("+this.Oa+","+this.fb+","+this.Gf+","+this.ds+")"};c.Hm=function(a,b,d,e){this.Oa=a;this.fb=b;this.Gf=d;this.ds=e;return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.$classData=g({LT:0},!1,"scala.Tuple4",{LT:1,d:1,asa:1,t:1,q:1,k:1,h:1});function RT(){NS.call(this)}RT.prototype=new Rxa;RT.prototype.constructor=RT;RT.prototype.hb=function(a){NS.prototype.ic.call(this,"Array index out of range: "+a,null,0,!0);return this};RT.prototype.$classData=g({Cda:0},!1,"java.lang.ArrayIndexOutOfBoundsException",{Cda:1,oF:1,ge:1,Wc:1,tc:1,d:1,h:1});function BY(){NS.call(this)}BY.prototype=new v2;BY.prototype.constructor=BY;
+BY.prototype.c=function(a){NS.prototype.ic.call(this,a,null,0,!0);return this};var wma=g({pF:0},!1,"java.lang.NumberFormatException",{pF:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});BY.prototype.$classData=wma;function hE(){NS.call(this)}hE.prototype=new Rxa;hE.prototype.constructor=hE;hE.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};hE.prototype.hb=function(a){NS.prototype.ic.call(this,"String index out of range: "+a,null,0,!0);return this};
+hE.prototype.$classData=g({cea:0},!1,"java.lang.StringIndexOutOfBoundsException",{cea:1,oF:1,ge:1,Wc:1,tc:1,d:1,h:1});function tD(){NS.call(this)}tD.prototype=new Qxa;tD.prototype.constructor=tD;tD.prototype.b=function(){NS.prototype.ic.call(this,null,null,0,!0);return this};tD.prototype.$classData=g({rea:0},!1,"java.util.FormatterClosedException",{rea:1,mW:1,ge:1,Wc:1,tc:1,d:1,h:1});function X4(){NS.call(this)}X4.prototype=new v2;X4.prototype.constructor=X4;function Y4(){}Y4.prototype=X4.prototype;
+function BA(){this.Ad=null}BA.prototype=new l;BA.prototype.constructor=BA;c=BA.prototype;c.u=function(){return"DisjunctNode"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(DA(a)){var b=this.Ad;a=a.Ad;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Ad;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ea=function(a){this.Ad=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function DA(a){return!!(a&&a.$classData&&a.$classData.m.AW)}c.$classData=g({AW:0},!1,"java.util.regex.GroupStartMap$DisjunctNode",{AW:1,d:1,BW:1,t:1,q:1,k:1,h:1});function vA(){this.qr=0}vA.prototype=new l;vA.prototype.constructor=vA;c=vA.prototype;c.u=function(){return"OriginallyGroupped"};c.v=function(){return 1};c.o=function(a){return this===a?!0:tA(a)?this.qr===a.qr:!1};c.w=function(a){switch(a){case 0:return this.qr;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.hb=function(a){this.qr=a;return this};c.r=function(){var a=-889275714,a=V().ca(a,this.qr);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};function tA(a){return!!(a&&a.$classData&&a.$classData.m.CW)}c.$classData=g({CW:0},!1,"java.util.regex.GroupStartMap$OriginallyGroupped",{CW:1,d:1,Zea:1,t:1,q:1,k:1,h:1});function qA(){this.Na=this.Wa=null}qA.prototype=new l;qA.prototype.constructor=qA;c=qA.prototype;c.Kd=function(a,b){this.Wa=a;this.Na=b;return this};c.u=function(){return"OriginallyWrapped"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:oA(a)?this.Wa===a.Wa&&this.Na===a.Na:!1};c.w=function(a){switch(a){case 0:return this.Wa;case 1:return this.Na;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function oA(a){return!!(a&&a.$classData&&a.$classData.m.DW)}c.$classData=g({DW:0},!1,"java.util.regex.GroupStartMap$OriginallyWrapped",{DW:1,d:1,Zea:1,t:1,q:1,k:1,h:1});
+function uA(){this.Ad=null}uA.prototype=new l;uA.prototype.constructor=uA;c=uA.prototype;c.u=function(){return"ParentNode"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(CA(a)){var b=this.Ad;a=a.Ad;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Ad;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Ea=function(a){this.Ad=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function CA(a){return!!(a&&a.$classData&&a.$classData.m.EW)}c.$classData=g({EW:0},!1,"java.util.regex.GroupStartMap$ParentNode",{EW:1,d:1,BW:1,t:1,q:1,k:1,h:1});function wA(){this.Rp=null}wA.prototype=new l;wA.prototype.constructor=wA;c=wA.prototype;c.u=function(){return"RegexLeaf"};c.v=function(){return 1};c.o=function(a){return this===a?!0:pA(a)?this.Rp===a.Rp:!1};c.w=function(a){switch(a){case 0:return this.Rp;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.c=function(a){this.Rp=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function pA(a){return!!(a&&a.$classData&&a.$classData.m.FW)}c.$classData=g({FW:0},!1,"java.util.regex.GroupStartMap$RegexLeaf",{FW:1,d:1,BW:1,t:1,q:1,k:1,h:1});function Z4(){}Z4.prototype=new Txa;Z4.prototype.constructor=Z4;c=Z4.prototype;c.b=function(){return this};c.u=function(){return"None"};c.v=function(){return 0};c.z=function(){return!0};c.R=function(){throw(new Bu).c("None.get");};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"None"};c.r=function(){return 2433880};c.x=function(){return Y(new Z,this)};c.$classData=g({lfa:0},!1,"scala.None$",{lfa:1,bY:1,d:1,t:1,q:1,k:1,h:1});var TEa=void 0;function C(){TEa||(TEa=(new Z4).b());return TEa}function UA(){}UA.prototype=new s_;UA.prototype.constructor=UA;UA.prototype.b=function(){return this};UA.prototype.Za=function(){return!0};UA.prototype.gb=function(){return od().Br};
+UA.prototype.$classData=g({qfa:0},!1,"scala.PartialFunction$$anonfun$1",{qfa:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function PZ(){this.Ss=this.Rs=null}PZ.prototype=new s_;PZ.prototype.constructor=PZ;c=PZ.prototype;c.y=function(a){return this.Rs.gb(a,this.Ss)};c.gk=function(a){return UEa(this,a)};c.Ul=function(a){return OZ(new PZ,this.Rs,this.Ss.Ul(a))};function UEa(a,b){return OZ(new PZ,a.Rs.gk(b),a.Ss.gk(b))}c.Za=function(a){return this.Rs.Za(a)||this.Ss.Za(a)};
+c.gb=function(a,b){var d=this.Rs.gb(a,od().Br);return QA(od(),d)?this.Ss.gb(a,b):d};c.za=function(a){return UEa(this,a)};function OZ(a,b,d){a.Rs=b;a.Ss=d;return a}c.$classData=g({tfa:0},!1,"scala.PartialFunction$OrElse",{tfa:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});function H(){this.Q=null}H.prototype=new Txa;H.prototype.constructor=H;c=H.prototype;c.u=function(){return"Some"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Xj(a)?Em(Fm(),this.Q,a.Q):!1};c.z=function(){return!1};
+c.w=function(a){switch(a){case 0:return this.Q;default:throw(new O).c(""+a);}};c.R=function(){return this.Q};c.l=function(){return X(W(),this)};c.i=function(a){this.Q=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Xj(a){return!!(a&&a.$classData&&a.$classData.m.cY)}c.$classData=g({cY:0},!1,"scala.Some",{cY:1,bY:1,d:1,t:1,q:1,k:1,h:1});function B2(){NS.call(this)}B2.prototype=new v2;B2.prototype.constructor=B2;
+B2.prototype.Jd=function(a,b){ZD(Ne(),0<=b&&b<(a.length|0));if(b===(-1+(a.length|0)|0))var d="at terminal";else d=65535&(a.charCodeAt(1+b|0)|0),d="'\\"+Oe(d)+"' not one of [\\b, \\t, \\n, \\f, \\r, \\\\, \\\", \\'] at";NS.prototype.ic.call(this,"invalid escape "+d+" index "+b+' in "'+a+'". Use \\\\ for literal \\.',null,0,!0);return this};B2.prototype.$classData=g({Efa:0},!1,"scala.StringContext$InvalidEscapeException",{Efa:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function T4(){this.ub=null}T4.prototype=new l;
+T4.prototype.constructor=T4;c=T4.prototype;c.u=function(){return"Tuple1"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.eY?Em(Fm(),this.ub,a.ub):!1};c.w=function(a){a:switch(a){case 0:a=this.ub;break a;default:throw(new O).c(""+a);}return a};c.l=function(){return"("+this.ub+")"};c.i=function(a){this.ub=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({eY:0},!1,"scala.Tuple1",{eY:1,d:1,Yra:1,t:1,q:1,k:1,h:1});function $4(){}$4.prototype=new Vxa;$4.prototype.constructor=$4;function a5(){}a5.prototype=$4.prototype;function hB(){this.fl=Rz();this.Bo=null}hB.prototype=new Vxa;hB.prototype.constructor=hB;c=hB.prototype;c.o=function(a){if(a&&a.$classData&&a.$classData.m.YF){var b=this.Bo.ql(this.fl),d=b.ia,b=b.oa;a=a.Bo.ql(a.fl);return d===a.ia&&b===a.oa}return this===a};
+c.l=function(){var a=this.fl+" ",b=gB().p_.y(this.Bo),d=this.fl,e=d.oa;return a+(b+(1===d.ia&&0===e?"":"s"))};c.Hg=function(a){return this.Bn(a)};
+function zla(a,b,d){a.fl=b;a.Bo=d;Nz().mu===d?b=b5(a,(new Xb).ha(-1,2147483647)):Nz().Kx===d?b=b5(a,(new Xb).ha(-1511828489,2147483)):Nz().lu===d?b=b5(a,(new Xb).ha(2077252342,2147)):Nz().nu===d?b=b5(a,(new Xb).ha(633437444,2)):Nz().Mx===d?b=b5(a,(new Xb).ha(153722867,0)):Nz().tx===d?b=b5(a,(new Xb).ha(2562047,0)):Nz().js===d?b=b5(a,(new Xb).ha(106751,0)):(d=Nz().js.Bq(b,d),b=d.ia,d=d.oa,b=(-1===d?2147376897<=(-2147483648^b):-1<d)&&(0===d?-2147376897>=(-2147483648^b):0>d));if(!b)throw(new Re).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.m.YF){var b=this.Bo.ql(this.fl),d=b.ia,b=b.oa,d=(new c5).AE((new Xb).ha(d,b)),b=a.Bo.ql(a.fl);a=b.ia;var b=b.oa,d=d.vc,e=Ra((new Xb).ha(d.ia,d.oa)),d=e.ia,e=e.oa,b=Ra((new Xb).ha(a,b));a=b.ia;b=b.oa;return q_(Sa(),d,e,a,b)}return-a.Bn(this)|0};
+function b5(a,b){var d=b.ia,e=b.oa,e=0!==d?~e:-e|0,f=a.fl,h=f.oa;return(e===h?(-2147483648^(-d|0))<=(-2147483648^f.ia):e<h)?(d=a.fl,a=d.ia,d=d.oa,e=b.oa,d===e?(-2147483648^a)<=(-2147483648^b.ia):d<e):!1}c.r=function(){return this.Bo.ql(this.fl).ia};c.$classData=g({YF:0},!1,"scala.concurrent.duration.FiniteDuration",{YF:1,XF:1,d:1,k:1,h:1,Ym:1,Md:1});function nB(){this.aj=null}nB.prototype=new l;nB.prototype.constructor=nB;c=nB.prototype;c.Sw=function(){return!1};c.l=function(){return Hva(this)};
+c.Kl=function(){return this};c.Mp=function(a,b){AZ(Eva(b,a),this.aj)};c.mH=function(){return this};c.iH=function(){return(new H).i(this.aj)};c.di=function(){return this};c.kE=function(){return this};c.At=function(a,b){return wla(this,a,b)};c.$classData=g({Xfa:0},!1,"scala.concurrent.impl.Promise$KeptPromise$Failed",{Xfa:1,d:1,Yfa:1,nY:1,jY:1,WF:1,gY:1});function mB(){this.aj=null}mB.prototype=new l;mB.prototype.constructor=mB;c=mB.prototype;c.Sw=function(){return!1};c.l=function(){return Hva(this)};
+c.Kl=function(a,b){return qla(this,a,b)};c.Mp=function(a,b){AZ(Eva(b,a),this.aj)};c.mH=function(a,b,d){return ula(this,a,b,d)};c.di=function(a,b){return sla(this,a,b)};c.iH=function(){return(new H).i(this.aj)};c.kE=function(a,b){return vla(this,a,b)};c.At=function(){return this};c.$classData=g({Zfa:0},!1,"scala.concurrent.impl.Promise$KeptPromise$Successful",{Zfa:1,d:1,Yfa:1,nY:1,jY:1,WF:1,gY:1});function d5(){this.GX=this.GD=this.Px=this.Ox=null}d5.prototype=new l;d5.prototype.constructor=d5;
+function VEa(){}c=VEa.prototype=d5.prototype;c.Ig=function(a,b){pC(this,a,b)};c.jb=function(){return this};c.ka=function(){var a=this.Yy();return Oe(a)};c.b=function(){this.GD=null;null===this.Px&&null===this.Px&&(this.Px=(new dT).sv(this));this.GX=this.Px;return this};c.zn=function(){return zp(new xp,this)};c.Rg=function(){return this};c.z=function(){return!this.ra()};c.wb=function(){var a=x().s;return rC(this,a)};c.Yy=function(){return this.GX.Yy()};
+function Hra(a){null===a.Ox&&null===a.Ox&&(a.Ox=(new cT).sv(a));return a.Ox}c.Qc=function(a,b,d){return ec(this,a,b,d)};c.Ab=function(a){return ec(this,"",a,"")};c.l=function(){return nT(this)};c.ta=function(a){pT(this,a)};c.Ib=function(a,b){return Xk(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return rC(this,a)};c.Da=function(){return Fr(this)};c.ae=function(){var a=P_().s;return rC(this,a)};c.ra=function(){return this.Pf.ra()};c.Zf=function(){return ec(this,"","","")};c.Oc=function(){return Vv(this)};
+function Gla(a){return a}c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return Vv(this)};c.md=function(){var a=Yk(),a=Zk(a);return rC(this,a)};c.Ff=function(a,b){return Xk(this,a,b)};c.He=function(a,b,d){rT(this,a,b,d)};c.Ng=function(){return!1};c.lp=function(a){return sT(this,a)};c.De=function(){for(var a=fc(new gc,hc());this.Pf.ra();){var b=this.Yy();ic(a,Oe(b))}return a.Va};c.og=function(a){return wC(this,a)};c.Ce=function(a){return xC(this,a)};c.Ye=function(){return nd(this)};
+c.ap=function(){null!==this.GD&&se(this.GD)};function cwa(a,b){var d=a.Xg(0);if(0>a.Ge(b,d))return-1;d=a.Xg(0);return 0<a.Ge(b,d)?1:0}function Fz(){this.Xk=null}Fz.prototype=new $xa;Fz.prototype.constructor=Fz;c=Fz.prototype;c.u=function(){return"Failure"};c.Ky=function(){return!1};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(dw(a)){var b=this.Xk;a=a.Xk;return null===b?null===a:b.o(a)}return!1};c.SW=function(){return this};
+c.w=function(a){switch(a){case 0:return this.Xk;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.ta=function(){};c.Dd=function(a){this.Xk=a;return this};c.sE=function(a){return se(a)};c.iE=function(){return(new Gz).i(this.Xk)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.Ow=function(){return C()};c.gF=function(){return!0};
+c.SX=function(a){try{return a.Za(this.Xk)?(new Gz).i(a.y(this.Xk)):this}catch(d){a=qn(qg(),d);if(null!==a){var b=jw(kw(),a);if(!b.z())return a=b.R(),(new Fz).Dd(a);throw pg(qg(),a);}throw d;}};function dw(a){return!!(a&&a.$classData&&a.$classData.m.sY)}c.$classData=g({sY:0},!1,"scala.util.Failure",{sY:1,wY:1,d:1,t:1,q:1,k:1,h:1});function Dh(){this.Q=null}Dh.prototype=new Zxa;Dh.prototype.constructor=Dh;c=Dh.prototype;c.u=function(){return"Left"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:am(a)?Em(Fm(),this.Q,a.Q):!1};c.w=function(a){switch(a){case 0:return this.Q;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.i=function(a){this.Q=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function am(a){return!!(a&&a.$classData&&a.$classData.m.tY)}c.$classData=g({tY:0},!1,"scala.util.Left",{tY:1,dha:1,d:1,t:1,q:1,k:1,h:1});function Fh(){this.Q=null}Fh.prototype=new Zxa;Fh.prototype.constructor=Fh;
+c=Fh.prototype;c.u=function(){return"Right"};c.v=function(){return 1};c.o=function(a){return this===a?!0:bm(a)?Em(Fm(),this.Q,a.Q):!1};c.w=function(a){switch(a){case 0:return this.Q;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.i=function(a){this.Q=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function bm(a){return!!(a&&a.$classData&&a.$classData.m.uY)}c.$classData=g({uY:0},!1,"scala.util.Right",{uY:1,dha:1,d:1,t:1,q:1,k:1,h:1});
+function Gz(){this.Q=null}Gz.prototype=new $xa;Gz.prototype.constructor=Gz;c=Gz.prototype;c.u=function(){return"Success"};c.Ky=function(){return!0};c.v=function(){return 1};c.o=function(a){return this===a?!0:cw(a)?Em(Fm(),this.Q,a.Q):!1};c.SW=function(a){try{return(new Gz).i(a.y(this.Q))}catch(d){a=qn(qg(),d);if(null!==a){var b=jw(kw(),a);if(!b.z())return a=b.R(),(new Fz).Dd(a);throw pg(qg(),a);}throw d;}};c.w=function(a){switch(a){case 0:return this.Q;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.ta=function(a){a.y(this.Q)};c.i=function(a){this.Q=a;return this};c.sE=function(){return this.Q};c.iE=function(){return(new Fz).Dd((new Sk).c("Success.failed"))};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.Ow=function(){return(new H).i(this.Q)};c.gF=function(){return!1};c.SX=function(){return this};function cw(a){return!!(a&&a.$classData&&a.$classData.m.vY)}c.$classData=g({vY:0},!1,"scala.util.Success",{vY:1,wY:1,d:1,t:1,q:1,k:1,h:1});
+function aC(){this.gE=null}aC.prototype=new s_;aC.prototype.constructor=aC;c=aC.prototype;c.vk=function(a){return uma($B(),a,this.gE)};c.xn=function(a,b){if(uma($B(),a,this.gE))throw pg(qg(),a);return b.y(a)};c.Za=function(a){return this.vk(a)};c.Ea=function(a){this.gE=a;return this};c.gb=function(a,b){return this.xn(a,b)};c.$classData=g({lha:0},!1,"scala.util.control.Exception$$anonfun$pfFromExceptions$1",{lha:1,Pb:1,d:1,fa:1,Ha:1,k:1,h:1});
+function xr(){this.Km=this.mda=this.JG=null;this.bo=0;this.ay=!1}xr.prototype=new a1;xr.prototype.constructor=xr;c=xr.prototype;c.ka=function(){return this.Rm()};c.Pr=function(a){e5(this);return this.Km.Pr(a)};c.l=function(){return nT(this)};c.qk=function(){e5(this);return this.Km.qk()};c.Rm=function(){var a=this.bo;switch(a){case 0:if(!this.ra())throw(new Bu).b();this.Rm();break;case 1:this.bo=2;break;case 2:this.bo=0;this.Rm();break;case 3:throw(new Bu).b();default:throw(new q).i(a);}return Ih(this.Km)};
+function e5(a){var b=a.bo;switch(b){case 0:if(!a.ra())throw(new me).b();break;case 1:break;case 2:break;case 3:throw(new me).b();default:throw(new q).i(b);}}c.ra=function(){var a=this.bo;switch(a){case 0:this.bo=Hh(this.Km)?1:3;break;case 1:break;case 2:this.bo=0;this.ra();break;case 3:break;default:throw(new q).i(a);}return 1===this.bo};c.KG=function(){return this.JG};c.nl=function(){e5(this);return this.Km.nl()};c.Vu=function(a){e5(this);return this.Km.Vu(a)};
+c.$classData=g({yha:0},!1,"scala.util.matching.Regex$MatchIterator",{yha:1,od:1,d:1,Rc:1,Ga:1,Fa:1,xha:1});function yr(){this.Qa=this.dG=null}yr.prototype=new a1;yr.prototype.constructor=yr;yr.prototype.ka=function(){return tfa(this)};yr.prototype.ra=function(){return this.Qa.ra()};function tfa(a){a.Qa.Rm();var b=a.Qa.Km,d=new jT;d.Bc=a.Qa.JG;d.Qv=b;d.Ua=b.nl();d.Ya=b.qk();Jra(d);Kra(d);return d}
+yr.prototype.$classData=g({zha:0},!1,"scala.util.matching.Regex$MatchIterator$$anon$1",{zha:1,od:1,d:1,Rc:1,Ga:1,Fa:1,usa:1});function qe(){this.ke=this.Vm=this.da=null}qe.prototype=new Ema;qe.prototype.constructor=qe;c=qe.prototype;c.u=function(){return"Success"};c.v=function(){return 2};c.o=function(a){return this===a?!0:te(a)&&a.da===this.da?Em(Fm(),this.Vm,a.Vm)?this.ke===a.ke:!1:!1};c.w=function(a){switch(a){case 0:return this.Vm;case 1:return this.ke;default:throw(new O).c(""+a);}};
+c.l=function(){return"["+iO(this.ke)+"] parsed: "+this.Vm};c.pV=function(a){return a.y(this.Vm).y(this.ke)};c.tD=function(){return this};function pe(a,b,d,e){a.Vm=d;a.ke=e;kC.prototype.Cp.call(a,b);return a}c.r=function(){return T(S(),this)};c.TW=function(a){return pe(new qe,this.da,a.y(this.Vm),this.ke)};c.x=function(){return Y(new Z,this)};function te(a){return!!(a&&a.$classData&&a.$classData.m.DY)}
+c.$classData=g({DY:0},!1,"scala.util.parsing.combinator.Parsers$Success",{DY:1,BY:1,d:1,t:1,q:1,k:1,h:1});function f5(a,b){if(b&&b.$classData&&b.$classData.m.ih){var d;if(!(d=a===b)&&(d=a.Da()===b.Da()))try{d=a.QG(b)}catch(e){if(e&&e.$classData&&e.$classData.m.Ida)d=!1;else throw e;}a=d}else a=!1;return a}function xp(){this.Lq=null;this.Ll=!1;this.Qa=null}xp.prototype=new a1;xp.prototype.constructor=xp;c=xp.prototype;c.ka=function(){return this.Ll?(this.Ll=!1,this.Lq):this.Qa.ka()};c.zn=function(){return this};
+c.Y=function(){this.Ll||(this.Lq=this.ka(),this.Ll=!0);return this.Lq};c.ra=function(){return this.Ll||this.Qa.ra()};function zp(a,b){if(null===b)throw pg(qg(),null);a.Qa=b;a.Ll=!1;return a}c.$classData=g({Nha:0},!1,"scala.collection.Iterator$$anon$1",{Nha:1,od:1,d:1,Rc:1,Ga:1,Fa:1,Gha:1});function g5(a,b,d){d=d.gf(a.Ed());a.ta(m(new p,function(a,b,d){return function(a){return d.Xb(b.y(a).jb())}}(a,b,d)));return d.Ba()}function K(a,b){b=b.Tg();asa(b,a);b.Xb(a.hc());return b.Ba()}
+function WEa(a,b){var d=a.db(),e=(new vC).ud(!1);a.ta(m(new p,function(a,b,d,e){return function(a){e.Ca||b.y(a)||(e.Ca=!0);return e.Ca?d.Ma(a):void 0}}(a,b,d,e)));return d.Ba()}function h5(a){if(a.z())throw(new Sk).c("empty.init");var b=a.Y(),b=(new jl).i(b),d=(new vC).ud(!1),e=a.db();IT(e,a,-1);a.ta(m(new p,function(a,b,d,e){return function(a){d.Ca?e.Ma(b.Ca):d.Ca=!0;b.Ca=a}}(a,b,d,e)));return e.Ba()}function i5(a){return a.Qc(a.qf()+"(",", ",")")}
+function Wj(a){return a.z()?C():(new H).i(a.Y())}function j5(a,b,d){var e=a.db();a.ta(m(new p,function(a,b,d,e){return function(a){return!!b.y(a)!==d?e.Ma(a):void 0}}(a,b,d,e)));return e.Ba()}function PN(a){return a.z()?C():(new H).i(a.nd())}function Gt(a,b,d){d=d.gf(a.Ed());if(b&&b.$classData&&b.$classData.m.Pd){var e=b.jb().Da();IT(d,a,e)}d.Xb(a.hc());d.Xb(b.jb());return d.Ba()}
+function Kt(a,b){var d=a.db(),e=a.db();a.ta(m(new p,function(a,b,d,e){return function(a){return(b.y(a)?d:e).Ma(a)}}(a,b,d,e)));return(new w).e(d.Ba(),e.Ba())}function XEa(a){var b=a.Y(),b=(new jl).i(b);a.ta(m(new p,function(a,b){return function(a){b.Ca=a}}(a,b)));return b.Ca}function YEa(a){if(a.z())throw(new Sk).c("empty.tail");return a.de(1)}
+function Vga(a,b){var d=(new zv).b();a.ta(m(new p,function(a,b,d){return function(k){var n=b.y(k);return d.rE(n,I(function(a){return function(){return a.db()}}(a))).Ma(k)}}(a,b,d)));b=fc(new gc,hc());Zb(new $b,d,m(new p,function(){return function(a){return null!==a}}(a))).ta(m(new p,function(a,b){return function(a){if(null!==a)return b.Ma((new w).e(a.ja(),a.na().Ba()));throw(new q).i(a);}}(a,b)));return b.Va}
+function kr(a,b,d){d=Nc(a,d);a.ta(m(new p,function(a,b,d){return function(a){return d.Ma(b.y(a))}}(a,b,d)));return d.Ba()}function Nc(a,b){b=b.gf(a.Ed());asa(b,a);return b}function k5(a,b,d){d=d.gf(a.Ed());a.ta(b.Wm(m(new p,function(a,b){return function(a){return b.Ma(a)}}(a,d))));return d.Ba()}
+function l5(a){a=oa(a.Ed()).tg();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 Ce).b();d=""===h?e:""+e+Oe(46)+d;if(f)return d}}}function m5(){this.s=null}m5.prototype=new Sva;m5.prototype.constructor=m5;function n5(){}n5.prototype=m5.prototype;function o5(){c3.call(this)}o5.prototype=new pya;o5.prototype.constructor=o5;o5.prototype.vV=function(a){return p5(a)};
+o5.prototype.$classData=g({xia:0},!1,"scala.collection.immutable.HashMap$HashTrieMap$$anon$1",{xia:1,vja:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function q5(){c3.call(this)}q5.prototype=new pya;q5.prototype.constructor=q5;q5.prototype.vV=function(a){return a.ig};q5.prototype.$classData=g({Cia:0},!1,"scala.collection.immutable.HashSet$HashTrieSet$$anon$1",{Cia:1,vja:1,od:1,d:1,Rc:1,Ga:1,Fa:1});function r5(){}r5.prototype=new XZ;r5.prototype.constructor=r5;r5.prototype.b=function(){return this};
+r5.prototype.Su=function(){return Cu()};r5.prototype.$classData=g({Jia:0},!1,"scala.collection.immutable.ListMap$",{Jia:1,fZ:1,Bz:1,Az:1,d:1,k:1,h:1});var ZEa=void 0;function Xg(){ZEa||(ZEa=(new r5).b());return ZEa}function s5(){}s5.prototype=new X2;s5.prototype.constructor=s5;s5.prototype.b=function(){return this};s5.prototype.oy=function(){return hh()};s5.prototype.$classData=g({dja:0},!1,"scala.collection.immutable.Set$",{dja:1,gZ:1,Nt:1,Mt:1,ze:1,d:1,Ae:1});var $Ea=void 0;
+function Yk(){$Ea||($Ea=(new s5).b());return $Ea}function t5(){this.yk=null}t5.prototype=new vya;t5.prototype.constructor=t5;t5.prototype.b=function(){m3.prototype.b.call(this);return this};t5.prototype.Ba=function(){return aFa(this)};function aFa(a){return a.yk.ec.Oc().zj(m(new p,function(){return function(a){return a.Oc()}}(a)),(sg(),(new tg).b()))}function u5(a){return!!(a&&a.$classData&&a.$classData.m.qZ)}
+t5.prototype.$classData=g({qZ:0},!1,"scala.collection.immutable.Stream$StreamBuilder",{qZ:1,Xsa:1,d:1,ji:1,sd:1,qd:1,pd:1});function LE(){this.Mu=this.ir=this.vu=0;this.aV=this.ZU=this.XU=this.VU=this.TU=this.Pu=null}LE.prototype=new l;LE.prototype.constructor=LE;c=LE.prototype;c.mc=function(){return this.XU};c.b=function(){this.Pu=la(Xa(Va),[32]);this.Mu=1;this.ir=this.vu=0;return this};c.Lf=function(){return this.Mu};c.cd=function(a){return ME(this,a)};c.kp=function(a){this.aV=a};c.Je=function(){return this.Pu};
+c.dd=function(a){this.VU=a};c.Bd=function(){return this.ZU};
+function ME(a,b){if(a.ir>=a.Pu.n.length){var d=32+a.vu|0,e=a.vu^d;if(1024>e)1===a.Lf()&&(a.qc(la(Xa(Va),[32])),a.zb().n[0]=a.Je(),a.mk(1+a.Lf()|0)),a.Vc(la(Xa(Va),[32])),a.zb().n[31&(d>>>5|0)]=a.Je();else if(32768>e)2===a.Lf()&&(a.dd(la(Xa(Va),[32])),a.Ub().n[0]=a.zb(),a.mk(1+a.Lf()|0)),a.Vc(la(Xa(Va),[32])),a.qc(la(Xa(Va),[32])),a.zb().n[31&(d>>>5|0)]=a.Je(),a.Ub().n[31&(d>>>10|0)]=a.zb();else if(1048576>e)3===a.Lf()&&(a.Ke(la(Xa(Va),[32])),a.mc().n[0]=a.Ub(),a.mk(1+a.Lf()|0)),a.Vc(la(Xa(Va),[32])),
+a.qc(la(Xa(Va),[32])),a.dd(la(Xa(Va),[32])),a.zb().n[31&(d>>>5|0)]=a.Je(),a.Ub().n[31&(d>>>10|0)]=a.zb(),a.mc().n[31&(d>>>15|0)]=a.Ub();else if(33554432>e)4===a.Lf()&&(a.zh(la(Xa(Va),[32])),a.Bd().n[0]=a.mc(),a.mk(1+a.Lf()|0)),a.Vc(la(Xa(Va),[32])),a.qc(la(Xa(Va),[32])),a.dd(la(Xa(Va),[32])),a.Ke(la(Xa(Va),[32])),a.zb().n[31&(d>>>5|0)]=a.Je(),a.Ub().n[31&(d>>>10|0)]=a.zb(),a.mc().n[31&(d>>>15|0)]=a.Ub(),a.Bd().n[31&(d>>>20|0)]=a.mc();else if(1073741824>e)5===a.Lf()&&(a.kp(la(Xa(Va),[32])),a.Vh().n[0]=
+a.Bd(),a.mk(1+a.Lf()|0)),a.Vc(la(Xa(Va),[32])),a.qc(la(Xa(Va),[32])),a.dd(la(Xa(Va),[32])),a.Ke(la(Xa(Va),[32])),a.zh(la(Xa(Va),[32])),a.zb().n[31&(d>>>5|0)]=a.Je(),a.Ub().n[31&(d>>>10|0)]=a.zb(),a.mc().n[31&(d>>>15|0)]=a.Ub(),a.Bd().n[31&(d>>>20|0)]=a.mc(),a.Vh().n[31&(d>>>25|0)]=a.Bd();else throw(new Re).b();a.vu=d;a.ir=0}a.Pu.n[a.ir]=b;a.ir=1+a.ir|0;return a}c.Ba=function(){return NE(this)};c.mg=function(a,b){JT(this,a,b)};c.qc=function(a){this.TU=a};c.zh=function(a){this.ZU=a};c.zb=function(){return this.TU};
+c.Vh=function(){return this.aV};function NE(a){var b=a.vu+a.ir|0;if(0===b)return Mj().zl;var d=(new v5).P(0,b,0);Ue(d,a,a.Mu);1<a.Mu&&mba(d,0,-1+b|0);return d}c.Ma=function(a){return ME(this,a)};c.oc=function(){};c.mk=function(a){this.Mu=a};c.Ub=function(){return this.VU};c.Vc=function(a){this.Pu=a};c.Xb=function(a){return IC(this,a)};c.Ke=function(a){this.XU=a};c.$classData=g({yja:0},!1,"scala.collection.immutable.VectorBuilder",{yja:1,d:1,ji:1,sd:1,qd:1,pd:1,uZ:1});
+function w5(){this.cE=this.ia=this.Vo=this.bE=0;this.oi=!1;this.SD=0;this.bV=this.$U=this.YU=this.WU=this.UU=this.VD=null}w5.prototype=new a1;w5.prototype.constructor=w5;c=w5.prototype;
+c.ka=function(){if(!this.oi)throw(new Bu).c("reached iterator end");var a=this.VD.n[this.ia];this.ia=1+this.ia|0;if(this.ia===this.cE)if((this.Vo+this.ia|0)<this.bE){var b=32+this.Vo|0,d=this.Vo^b;if(1024>d)this.Vc(this.zb().n[31&(b>>>5|0)]);else if(32768>d)this.qc(this.Ub().n[31&(b>>>10|0)]),this.Vc(this.zb().n[0]);else if(1048576>d)this.dd(this.mc().n[31&(b>>>15|0)]),this.qc(this.Ub().n[0]),this.Vc(this.zb().n[0]);else if(33554432>d)this.Ke(this.Bd().n[31&(b>>>20|0)]),this.dd(this.mc().n[0]),this.qc(this.Ub().n[0]),
+this.Vc(this.zb().n[0]);else if(1073741824>d)this.zh(this.Vh().n[31&(b>>>25|0)]),this.Ke(this.Bd().n[0]),this.dd(this.mc().n[0]),this.qc(this.Ub().n[0]),this.Vc(this.zb().n[0]);else throw(new Re).b();this.Vo=b;b=this.bE-this.Vo|0;this.cE=32>b?b:32;this.ia=0}else this.oi=!1;return a};c.mc=function(){return this.YU};c.Lf=function(){return this.SD};c.kp=function(a){this.bV=a};c.ha=function(a,b){this.bE=b;this.Vo=-32&a;this.ia=31&a;a=b-this.Vo|0;this.cE=32>a?a:32;this.oi=(this.Vo+this.ia|0)<b;return this};
+c.Je=function(){return this.VD};c.dd=function(a){this.WU=a};c.Bd=function(){return this.$U};c.qc=function(a){this.UU=a};c.ra=function(){return this.oi};c.zh=function(a){this.$U=a};c.zb=function(){return this.UU};c.Vh=function(){return this.bV};c.mk=function(a){this.SD=a};c.Ub=function(){return this.WU};c.Vc=function(a){this.VD=a};c.Ke=function(a){this.YU=a};c.$classData=g({zja:0},!1,"scala.collection.immutable.VectorIterator",{zja:1,od:1,d:1,Rc:1,Ga:1,Fa:1,uZ:1});function OE(){}OE.prototype=new Tva;
+OE.prototype.constructor=OE;OE.prototype.b=function(){return this};OE.prototype.wi=function(){return(new x5).b()};OE.prototype.Su=function(){return(new x5).b()};OE.prototype.$classData=g({mka:0},!1,"scala.collection.mutable.LinkedHashMap$",{mka:1,pia:1,Bz:1,Az:1,d:1,k:1,h:1});var koa=void 0;function y5(){}y5.prototype=new Z2;y5.prototype.constructor=y5;y5.prototype.b=function(){return this};y5.prototype.Wk=function(){return(new z5).b()};
+y5.prototype.$classData=g({Ika:0},!1,"scala.collection.mutable.Set$",{Ika:1,iZ:1,Nt:1,Mt:1,ze:1,d:1,Ae:1});var bFa=void 0;function A5(){this.uu=!1}A5.prototype=new hxa;A5.prototype.constructor=A5;function cFa(){}cFa.prototype=A5.prototype;A5.prototype.uD=function(a){zS(this,null===a?"null":na(a));return this};A5.prototype.qda=function(){n1.prototype.pda.call(this);return this};function B5(){this.Dy=this.cA=this.ky=this.Sy=null}B5.prototype=new l;B5.prototype.constructor=B5;c=B5.prototype;c.u=function(){return"BoundedNumericConstraintSpecification"};
+c.v=function(){return 4};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.BI?sE(Fm(),this.Sy,a.Sy)&&sE(Fm(),this.ky,a.ky)&&sE(Fm(),this.cA,a.cA)&&sE(Fm(),this.Dy,a.Dy):!1};c.w=function(a){switch(a){case 0:return this.Sy;case 1:return this.ky;case 2:return this.cA;case 3:return this.Dy;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function dFa(a,b,d,e){var f=new B5;f.Sy=a;f.ky=b;f.cA=d;f.Dy=e;return f}c.$classData=g({BI:0},!1,"org.nlogo.core.ConstraintSpecification$BoundedNumericConstraintSpecification",{BI:1,d:1,v0:1,u0:1,t:1,q:1,k:1,h:1});g({w0:0},!1,"org.nlogo.core.ConstraintSpecification$UnboundedNumericConstraintSpecification",{w0:1,d:1,v0:1,u0:1,t:1,q:1,k:1,h:1});function C5(){this.Jg=this.Pz=this.aU=null;this.a=0}C5.prototype=new l;C5.prototype.constructor=C5;c=C5.prototype;
+c.b=function(){D5=this;this.Jg=AP();this.a=(8|this.a)<<24>>24;this.a=(1|this.a)<<24>>24;this.aU=IE();this.a=(2|this.a)<<24>>24;osa||(osa=(new eU).b());this.Pz=osa;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 O).c(""+a);};c.l=function(){return"NetLogoCore"};
+function cp(a){if(0===(4&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Dialect.scala: 22");return a.Pz}function zP(a){if(0===(2&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/Dialect.scala: 21");return a.aU}c.r=function(){return 1784079495};c.x=function(){return Y(new Z,this)};c.$classData=g({Q0:0},!1,"org.nlogo.core.NetLogoCore$",{Q0:1,d:1,ama:1,ima:1,t:1,q:1,k:1,h:1});var D5=void 0;
+function AP(){D5||(D5=(new C5).b());return D5}function ii(){this.Db=null;this.jc=this.rc=!1;this.En=this.Lk=this.Kk=0}ii.prototype=new l;ii.prototype.constructor=ii;c=ii.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.m.TI){var b=this.Db,d=a.Db;return(null===b?null===d:b.o(d))&&this.rc===a.rc&&this.jc===a.jc&&this.Kk===a.Kk&&this.Lk===a.Lk?this.En===a.En:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Db;case 1:return this.rc;case 2:return this.jc;case 3:return this.Kk;case 4:return this.Lk;case 5:return this.En;default:throw(new O).c(""+a);}};c.EE=function(a,b,d,e,f,h){this.Db=a;this.rc=b;this.jc=d;this.Kk=e;this.Lk=f;this.En=h;return this};c.l=function(){return X(W(),this)};c.TD=function(){return this.En};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Db)),a=V().ca(a,this.rc?1231:1237),a=V().ca(a,this.jc?1231:1237),a=V().ca(a,this.Kk),a=V().ca(a,this.Lk),a=V().ca(a,this.En);return V().xb(a,6)};c.Il=function(){return this.rc};c.x=function(){return Y(new Z,this)};c.$classData=g({TI:0},!1,"org.nlogo.core.ShapeParser$Circle",{TI:1,d:1,IA:1,lq:1,t:1,q:1,k:1,h:1});function ki(){this.Db=null;this.jc=!1;this.Gn=this.vo=null}ki.prototype=new l;ki.prototype.constructor=ki;c=ki.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.m.UI){var b=this.Db,d=a.Db;(null===b?null===d:b.o(d))&&this.jc===a.jc?(b=this.vo,d=a.vo,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.Gn,a=a.Gn,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Db;case 1:return this.jc;case 2:return this.vo;case 3:return this.Gn;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Uu=function(){return this.Gn};
+function bca(a,b,d,e,f){a.Db=b;a.jc=d;a.vo=e;a.Gn=f;return a}c.zw=function(){return this.vo};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Db)),a=V().ca(a,this.jc?1231:1237),a=V().ca(a,fC(V(),this.vo)),a=V().ca(a,fC(V(),this.Gn));return V().xb(a,4)};c.Il=function(){return!1};c.x=function(){return Y(new Z,this)};c.$classData=g({UI:0},!1,"org.nlogo.core.ShapeParser$Line",{UI:1,d:1,JA:1,lq:1,t:1,q:1,k:1,h:1});function pi(){this.va=null;this.kk=0;this.Jn=this.Yn=null}pi.prototype=new l;
+pi.prototype.constructor=pi;c=pi.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.m.WI){if(this.va===a.va&&this.kk===a.kk)var b=this.Yn,d=a.Yn,b=null===b?null===d:b.o(d);else b=!1;if(b)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.va;case 1:return this.kk;case 2:return this.Yn;case 3:return this.Jn;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.yE=function(){return this.Jn};c.we=function(){return this.va};function lca(a,b,d,e,f){a.va=b;a.kk=d;a.Yn=e;a.Jn=f;return a}c.BF=function(){return this.Yn};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.va)),a=V().ca(a,BE(V(),this.kk)),a=V().ca(a,fC(V(),this.Yn)),a=V().ca(a,fC(V(),this.Jn));return V().xb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({WI:0},!1,"org.nlogo.core.ShapeParser$LinkShape",{WI:1,d:1,PI:1,au:1,t:1,q:1,k:1,h:1});
+function ni(){this.Db=null;this.jc=this.rc=!1;this.lo=null}ni.prototype=new l;ni.prototype.constructor=ni;c=ni.prototype;c.u=function(){return"Polygon"};function eca(a,b,d,e,f){a.Db=b;a.rc=d;a.jc=e;a.lo=f;return a}c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.XI){var b=this.Db,d=a.Db;if((null===b?null===d:b.o(d))&&this.rc===a.rc&&this.jc===a.jc)return b=this.lo,a=a.lo,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Db;case 1:return this.rc;case 2:return this.jc;case 3:return this.lo;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.fz=function(){return this.lo};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Db)),a=V().ca(a,this.rc?1231:1237),a=V().ca(a,this.jc?1231:1237),a=V().ca(a,fC(V(),this.lo));return V().xb(a,4)};c.Il=function(){return this.rc};c.x=function(){return Y(new Z,this)};
+c.$classData=g({XI:0},!1,"org.nlogo.core.ShapeParser$Polygon",{XI:1,d:1,KA:1,lq:1,t:1,q:1,k:1,h:1});function li(){this.Db=null;this.jc=this.rc=!1;this.Zn=this.Do=null}li.prototype=new l;li.prototype.constructor=li;c=li.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.m.YI){var b=this.Db,d=a.Db;(null===b?null===d:b.o(d))&&this.rc===a.rc&&this.jc===a.jc?(b=this.Do,d=a.Do,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.Ww=function(){return this.Do};c.w=function(a){switch(a){case 0:return this.Db;case 1:return this.rc;case 2:return this.jc;case 3:return this.Do;case 4:return this.Zn;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+function cca(a,b,d,e,f,h){a.Db=b;a.rc=d;a.jc=e;a.Do=f;a.Zn=h;return a}c.Pv=function(){return this.Zn};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Db)),a=V().ca(a,this.rc?1231:1237),a=V().ca(a,this.jc?1231:1237),a=V().ca(a,fC(V(),this.Do)),a=V().ca(a,fC(V(),this.Zn));return V().xb(a,5)};c.Il=function(){return this.rc};c.x=function(){return Y(new Z,this)};c.$classData=g({YI:0},!1,"org.nlogo.core.ShapeParser$Rectangle",{YI:1,d:1,LA:1,lq:1,t:1,q:1,k:1,h:1});
+function Ai(){this.va=null;this.po=!1;this.pk=0;this.Ah=null}Ai.prototype=new l;Ai.prototype.constructor=Ai;c=Ai.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.m.ZI&&this.va===a.va&&this.po===a.po&&this.pk===a.pk){var b=this.Ah;a=a.Ah;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.va;case 1:return this.po;case 2:return this.pk;case 3:return this.Ah;default:throw(new O).c(""+a);}};c.UF=function(){return this.po};c.l=function(){return X(W(),this)};c.we=function(){return this.va};c.XE=function(a,b,d,e){this.va=a;this.po=b;this.pk=d;this.Ah=e;return this};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.va)),a=V().ca(a,this.po?1231:1237),a=V().ca(a,this.pk),a=V().ca(a,fC(V(),this.Ah));return V().xb(a,4)};
+c.x=function(){return Y(new Z,this)};c.$classData=g({ZI:0},!1,"org.nlogo.core.ShapeParser$VectorShape",{ZI:1,d:1,RI:1,au:1,t:1,q:1,k:1,h:1});function bd(){this.Ac=0}bd.prototype=new l;bd.prototype.constructor=bd;c=bd.prototype;c.u=function(){return"CmdBlk"};c.v=function(){return 1};c.o=function(a){return this===a?!0:RN(a)?this.Ac===a.Ac:!1};c.w=function(a){switch(a){case 0:return this.Ac;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.hb=function(a){this.Ac=a;return this};
+c.r=function(){var a=-889275714,a=V().ca(a,this.Ac);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};function RN(a){return!!(a&&a.$classData&&a.$classData.m.$Q)}c.$classData=g({$Q:0},!1,"org.nlogo.parse.AstPath$CmdBlk",{$Q:1,d:1,aR:1,gC:1,t:1,q:1,k:1,h:1});function $c(){this.Ac=0}$c.prototype=new l;$c.prototype.constructor=$c;c=$c.prototype;c.u=function(){return"RepArg"};c.v=function(){return 1};c.o=function(a){return this===a?!0:UN(a)?this.Ac===a.Ac:!1};
+c.w=function(a){switch(a){case 0:return this.Ac;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.hb=function(a){this.Ac=a;return this};c.r=function(){var a=-889275714,a=V().ca(a,this.Ac);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};function UN(a){return!!(a&&a.$classData&&a.$classData.m.bR)}c.$classData=g({bR:0},!1,"org.nlogo.parse.AstPath$RepArg",{bR:1,d:1,aR:1,gC:1,t:1,q:1,k:1,h:1});function dd(){this.Ac=0}dd.prototype=new l;dd.prototype.constructor=dd;c=dd.prototype;
+c.u=function(){return"RepBlk"};c.v=function(){return 1};c.o=function(a){return this===a?!0:TN(a)?this.Ac===a.Ac:!1};c.w=function(a){switch(a){case 0:return this.Ac;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.hb=function(a){this.Ac=a;return this};c.r=function(){var a=-889275714,a=V().ca(a,this.Ac);return V().xb(a,1)};c.x=function(){return Y(new Z,this)};function TN(a){return!!(a&&a.$classData&&a.$classData.m.cR)}
+c.$classData=g({cR:0},!1,"org.nlogo.parse.AstPath$RepBlk",{cR:1,d:1,aR:1,gC:1,t:1,q:1,k:1,h:1});function Eo(){this.la=null}Eo.prototype=new l;Eo.prototype.constructor=Eo;c=Eo.prototype;c.u=function(){return"BreedVariable"};c.v=function(){return 1};c.o=function(a){return this===a?!0:no(a)?this.la===a.la:!1};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.c=function(a){this.la=a;return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};function no(a){return!!(a&&a.$classData&&a.$classData.m.kR)}c.$classData=g({kR:0},!1,"org.nlogo.parse.SymbolType$BreedVariable",{kR:1,d:1,Nh:1,rn:1,t:1,q:1,k:1,h:1});function E5(){}E5.prototype=new l;E5.prototype.constructor=E5;c=E5.prototype;c.b=function(){return this};c.u=function(){return"GlobalVariable"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"GlobalVariable"};c.r=function(){return 1869525855};
+c.x=function(){return Y(new Z,this)};c.$classData=g({E3:0},!1,"org.nlogo.parse.SymbolType$GlobalVariable$",{E3:1,d:1,Nh:1,rn:1,t:1,q:1,k:1,h:1});var eFa=void 0;function Ao(){eFa||(eFa=(new E5).b());return eFa}function F5(){}F5.prototype=new l;F5.prototype.constructor=F5;c=F5.prototype;c.b=function(){return this};c.u=function(){return"LambdaVariable"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"LambdaVariable"};c.r=function(){return 128622467};
+c.x=function(){return Y(new Z,this)};c.$classData=g({F3:0},!1,"org.nlogo.parse.SymbolType$LambdaVariable$",{F3:1,d:1,Nh:1,rn:1,t:1,q:1,k:1,h:1});var fFa=void 0;function qm(){fFa||(fFa=(new F5).b());return fFa}function Co(){this.la=null}Co.prototype=new l;Co.prototype.constructor=Co;c=Co.prototype;c.u=function(){return"LinkBreedVariable"};c.v=function(){return 1};c.o=function(a){return this===a?!0:po(a)?this.la===a.la:!1};
+c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.c=function(a){this.la=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function po(a){return!!(a&&a.$classData&&a.$classData.m.lR)}c.$classData=g({lR:0},!1,"org.nlogo.parse.SymbolType$LinkBreedVariable",{lR:1,d:1,Nh:1,rn:1,t:1,q:1,k:1,h:1});function G5(){}G5.prototype=new l;G5.prototype.constructor=G5;c=G5.prototype;c.b=function(){return this};
+c.u=function(){return"LinkVariable"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"LinkVariable"};c.r=function(){return 68329654};c.x=function(){return Y(new Z,this)};c.$classData=g({I3:0},!1,"org.nlogo.parse.SymbolType$LinkVariable$",{I3:1,d:1,Nh:1,rn:1,t:1,q:1,k:1,h:1});var gFa=void 0;function oo(){gFa||(gFa=(new G5).b());return gFa}function bo(){this.ed=null}bo.prototype=new l;bo.prototype.constructor=bo;c=bo.prototype;c.u=function(){return"LocalVariable"};
+c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(up(a)){var b=this.ed;a=a.ed;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.ed;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.ft=function(a){this.ed=a;return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function up(a){return!!(a&&a.$classData&&a.$classData.m.mR)}
+c.$classData=g({mR:0},!1,"org.nlogo.parse.SymbolType$LocalVariable",{mR:1,d:1,Nh:1,rn:1,t:1,q:1,k:1,h:1});function H5(){}H5.prototype=new l;H5.prototype.constructor=H5;c=H5.prototype;c.b=function(){return this};c.u=function(){return"PatchVariable"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"PatchVariable"};c.r=function(){return 1484111556};c.x=function(){return Y(new Z,this)};
+c.$classData=g({J3:0},!1,"org.nlogo.parse.SymbolType$PatchVariable$",{J3:1,d:1,Nh:1,rn:1,t:1,q:1,k:1,h:1});var hFa=void 0;function zo(){hFa||(hFa=(new H5).b());return hFa}function I5(){}I5.prototype=new l;I5.prototype.constructor=I5;c=I5.prototype;c.b=function(){return this};c.u=function(){return"ProcedureVariable"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"ProcedureVariable"};c.r=function(){return 530675279};c.x=function(){return Y(new Z,this)};
+c.$classData=g({N3:0},!1,"org.nlogo.parse.SymbolType$ProcedureVariable$",{N3:1,d:1,Nh:1,rn:1,t:1,q:1,k:1,h:1});var iFa=void 0;function vc(){iFa||(iFa=(new I5).b());return iFa}function Jo(){}Jo.prototype=new l;Jo.prototype.constructor=Jo;Jo.prototype.b=function(){return this};
+function jFa(a){if(dp()===a||ep()===a)return 0;if(jo()===a||ko()===a)return 2;if(Do()===a||Ho()===a||Bo()===a||Go()===a)return 4;if(Ao()===a)return 5;if(mo()===a||zo()===a||oo()===a)return 6;if(no(a)||po(a))return 7;if(Fo()===a)return 9;if(up(a)||qm()===a||vc()===a)return 10;throw(new q).i(a);}Jo.prototype.Ge=function(a,b){(null===a?null===b:a.o(b))?b=0:(a=jFa(a),b=jFa(b),b=a===b?0:a<b?-1:1);return b};
+Jo.prototype.$classData=g({O3:0},!1,"org.nlogo.parse.SymbolType$SymbolTypeOrdering$",{O3:1,d:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});var Io=void 0;function J5(){}J5.prototype=new l;J5.prototype.constructor=J5;c=J5.prototype;c.b=function(){return this};c.u=function(){return"TurtleVariable"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return"TurtleVariable"};c.r=function(){return 1254064120};c.x=function(){return Y(new Z,this)};
+c.$classData=g({R3:0},!1,"org.nlogo.parse.SymbolType$TurtleVariable$",{R3:1,d:1,Nh:1,rn:1,t:1,q:1,k:1,h:1});var kFa=void 0;function mo(){kFa||(kFa=(new J5).b());return kFa}function Jt(){}Jt.prototype=new l;Jt.prototype.constructor=Jt;Jt.prototype.b=function(){return this};Jt.prototype.Ge=function(a,b){var d=t(),e=[pa(BEa),pa(AEa),pa(CEa),pa(zEa),pa(DEa)],d=G(d,(new J).j(e)),e=oa(a),f=oa(b);e===f?(a=a.mo(),b=b.mo(),b=a===b?0:a<b?-1:1):b=d.Ml(e)-d.Ml(f)|0;return b};
+Jt.prototype.$classData=g({N5:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$$anon$1",{N5:1,d:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});function iW(){this.Db=null;this.jc=this.rc=!1;this.En=this.Nu=this.Lk=this.Kk=0;this.a=!1}iW.prototype=new l;iW.prototype.constructor=iW;c=iW.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.m.$R){var b=this.Db,d=a.Db;return(null===b?null===d:b.o(d))&&this.rc===a.rc&&this.jc===a.jc&&this.Kk===a.Kk&&this.Lk===a.Lk?this.Nu===a.Nu:!1}return!1};c.w=function(a){switch(a){case 0:return this.Db;case 1:return this.rc;case 2:return this.jc;case 3:return this.Kk;case 4:return this.Lk;case 5:return this.Nu;default:throw(new O).c(""+a);}};
+c.EE=function(a,b,d,e,f,h){this.Db=a;this.rc=b;this.jc=d;this.Kk=e;this.Lk=f;this.En=this.Nu=h;this.a=!0;return this};c.l=function(){return X(W(),this)};c.TD=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 26");return this.En};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Db)),a=V().ca(a,this.rc?1231:1237),a=V().ca(a,this.jc?1231:1237),a=V().ca(a,this.Kk),a=V().ca(a,this.Lk),a=V().ca(a,this.Nu);return V().xb(a,6)};c.Il=function(){return this.rc};c.x=function(){return Y(new Z,this)};c.$classData=g({$R:0},!1,"org.nlogo.tortoise.compiler.json.JsonCircle",{$R:1,d:1,IA:1,lq:1,t:1,q:1,k:1,h:1});function kW(){this.Db=null;this.jc=this.rc=!1;this.dx=this.$w=this.cx=this.Zw=0;this.Gn=this.vo=null;this.a=0}
+kW.prototype=new l;kW.prototype.constructor=kW;c=kW.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.m.aS){var b=this.Db,d=a.Db;return(null===b?null===d:b.o(d))&&this.rc===a.rc&&this.jc===a.jc&&this.Zw===a.Zw&&this.cx===a.cx&&this.$w===a.$w?this.dx===a.dx:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Db;case 1:return this.rc;case 2:return this.jc;case 3:return this.Zw;case 4:return this.cx;case 5:return this.$w;case 6:return this.dx;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Uu=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 40");return this.Gn};
+c.FE=function(a,b,d,e,f,h,k){this.Db=a;this.rc=b;this.jc=d;this.Zw=e;this.cx=f;this.$w=h;this.dx=k;this.vo=(new ji).ha(e,f);this.a=(1|this.a)<<24>>24;this.Gn=(new ji).ha(h,k);this.a=(2|this.a)<<24>>24;return this};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Db)),a=V().ca(a,this.rc?1231:1237),a=V().ca(a,this.jc?1231:1237),a=V().ca(a,this.Zw),a=V().ca(a,this.cx),a=V().ca(a,this.$w),a=V().ca(a,this.dx);return V().xb(a,7)};
+c.zw=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 39");return this.vo};c.Il=function(){return this.rc};c.x=function(){return Y(new Z,this)};c.$classData=g({aS:0},!1,"org.nlogo.tortoise.compiler.json.JsonLine",{aS:1,d:1,JA:1,lq:1,t:1,q:1,k:1,h:1});function K5(){this.va=null;this.kk=0;this.Jn=this.Yn=this.Ou=this.Ov=null;this.a=0}K5.prototype=new l;K5.prototype.constructor=K5;c=K5.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.m.cS){if(this.va===a.va&&this.kk===a.kk)var b=this.Ov,d=a.Ov,b=null===b?null===d:b.o(d);else b=!1;if(b)return b=this.Ou,a=a.Ou,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.va;case 1:return this.kk;case 2:return this.Ov;case 3:return this.Ou;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.yE=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 93");return this.Jn};function Zta(a,b,d,e){var f=new K5;f.va=a;f.kk=b;f.Ov=d;f.Ou=e;f.Yn=d;f.a=(1|f.a)<<24>>24;f.Jn=e;f.a=(2|f.a)<<24>>24;return f}c.we=function(){return this.va};
+c.BF=function(){if(0===(1&this.a)<<24>>24)throw(new v).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().ca(a,fC(V(),this.va)),a=V().ca(a,BE(V(),this.kk)),a=V().ca(a,fC(V(),this.Ov)),a=V().ca(a,fC(V(),this.Ou));return V().xb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({cS:0},!1,"org.nlogo.tortoise.compiler.json.JsonLinkShape",{cS:1,d:1,PI:1,au:1,t:1,q:1,k:1,h:1});
+function L5(){this.Db=null;this.jc=this.rc=!1;this.lo=this.ex=this.ax=null;this.a=!1}L5.prototype=new l;L5.prototype.constructor=L5;c=L5.prototype;c.u=function(){return"JsonPolygon"};c.v=function(){return 5};function Qta(a,b,d,e,f){var h=new L5;h.Db=a;h.rc=b;h.jc=d;h.ax=e;h.ex=f;a=t();h.lo=e.Te(f,a.s);h.a=!0;return h}
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.dS){var b=this.Db,d=a.Db;(null===b?null===d:b.o(d))&&this.rc===a.rc&&this.jc===a.jc?(b=this.ax,d=a.ax,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.ex,a=a.ex,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Db;case 1:return this.rc;case 2:return this.jc;case 3:return this.ax;case 4:return this.ex;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.fz=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 64");return this.lo};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.Db)),a=V().ca(a,this.rc?1231:1237),a=V().ca(a,this.jc?1231:1237),a=V().ca(a,fC(V(),this.ax)),a=V().ca(a,fC(V(),this.ex));return V().xb(a,5)};c.Il=function(){return this.rc};c.x=function(){return Y(new Z,this)};
+c.$classData=g({dS:0},!1,"org.nlogo.tortoise.compiler.json.JsonPolygon",{dS:1,d:1,KA:1,lq:1,t:1,q:1,k:1,h:1});function jW(){this.Db=null;this.jc=this.rc=!1;this.oj=this.mj=this.pj=this.nj=0;this.Zn=this.Do=null;this.a=0}jW.prototype=new l;jW.prototype.constructor=jW;c=jW.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.m.eS){var b=this.Db,d=a.Db;return(null===b?null===d:b.o(d))&&this.rc===a.rc&&this.jc===a.jc&&this.nj===a.nj&&this.pj===a.pj&&this.mj===a.mj?this.oj===a.oj:!1}return!1};c.Ww=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 53");return this.Do};
+c.w=function(a){switch(a){case 0:return this.Db;case 1:return this.rc;case 2:return this.jc;case 3:return this.nj;case 4:return this.pj;case 5:return this.mj;case 6:return this.oj;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.FE=function(a,b,d,e,f,h,k){this.Db=a;this.rc=b;this.jc=d;this.nj=e;this.pj=f;this.mj=h;this.oj=k;this.Do=(new ji).ha(e,f);this.a=(1|this.a)<<24>>24;this.Zn=(new ji).ha(h,k);this.a=(2|this.a)<<24>>24;return this};
+c.Pv=function(){if(0===(2&this.a)<<24>>24)throw(new v).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().ca(a,fC(V(),this.Db)),a=V().ca(a,this.rc?1231:1237),a=V().ca(a,this.jc?1231:1237),a=V().ca(a,this.nj),a=V().ca(a,this.pj),a=V().ca(a,this.mj),a=V().ca(a,this.oj);return V().xb(a,7)};c.Il=function(){return this.rc};c.x=function(){return Y(new Z,this)};
+c.$classData=g({eS:0},!1,"org.nlogo.tortoise.compiler.json.JsonRectangle",{eS:1,d:1,LA:1,lq:1,t:1,q:1,k:1,h:1});function wW(){this.va=null;this.jw=!1;this.pk=0;this.Ah=null;this.a=this.po=!1}wW.prototype=new l;wW.prototype.constructor=wW;c=wW.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.m.fS&&this.va===a.va&&this.jw===a.jw&&this.pk===a.pk){var b=this.Ah;a=a.Ah;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.va;case 1:return this.jw;case 2:return this.pk;case 3:return this.Ah;default:throw(new O).c(""+a);}};c.UF=function(){if(!this.a)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 73");return this.po};c.l=function(){return X(W(),this)};c.we=function(){return this.va};c.XE=function(a,b,d,e){this.va=a;this.jw=b;this.pk=d;this.Ah=e;this.po=b;this.a=!0;return this};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.va)),a=V().ca(a,this.jw?1231:1237),a=V().ca(a,this.pk),a=V().ca(a,fC(V(),this.Ah));return V().xb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({fS:0},!1,"org.nlogo.tortoise.compiler.json.JsonVectorShape",{fS:1,d:1,RI:1,au:1,t:1,q:1,k:1,h:1});function Qw(){this.W=null}Qw.prototype=new l;Qw.prototype.constructor=Qw;c=Qw.prototype;c.u=function(){return"JsArray"};c.v=function(){return 1};
+c.o=function(a){if(this===a)return!0;if(via(a)){var b=this.W;a=a.W;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.W;default:throw(new O).c(""+a);}};c.l=function(){return Kw(this)};function ria(a,b){a.W=b;return a}c.Vj=function(a){return a.il(this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function via(a){return!!(a&&a.$classData&&a.$classData.m.oS)}
+c.$classData=g({oS:0},!1,"play.api.libs.json.JsArray",{oS:1,d:1,Po:1,sn:1,t:1,q:1,k:1,h:1});function M5(){this.W=!1;this.MX=0}M5.prototype=new l;M5.prototype.constructor=M5;function lFa(){}c=lFa.prototype=M5.prototype;c.v=function(){return this.MX};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.DC)&&this.W===a.W};c.w=function(a){if(0===a)return this.W;throw(new q).i(a);};c.l=function(){return Kw(this)};c.Vj=function(a){return a.il(this)};c.r=function(){return this.W?1231:1237};
+c.ud=function(a){this.W=a;this.MX=1;return this};function dr(){this.W=null}dr.prototype=new l;dr.prototype.constructor=dr;c=dr.prototype;c.u=function(){return"JsDefined"};c.v=function(){return 1};c.o=function(a){var b;H1();b=this.W;Ew(a)?(a=null===a?null:a.W,b=null===b?null===a:b.o(a)):b=!1;return b};c.w=function(a){a:switch(H1(),a){case 0:a=this.W;break a;default:throw(new O).c(""+a);}return a};c.l=function(){H1();var a=this.W;return X(W(),(new dr).Bh(a))};c.Vj=function(a){return hr(this,a)};
+c.r=function(){return this.W.r()};c.Bh=function(a){this.W=a;return this};c.x=function(){H1();return Y(new Z,(new dr).Bh(this.W))};function Ew(a){return!!(a&&a.$classData&&a.$classData.m.pS)}c.$classData=g({pS:0},!1,"play.api.libs.json.JsDefined",{pS:1,d:1,a9:1,sn:1,t:1,q:1,k:1,h:1});function N5(){}N5.prototype=new l;N5.prototype.constructor=N5;c=N5.prototype;c.b=function(){return this};c.u=function(){return"JsNull"};c.v=function(){return 0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return Kw(this)};
+c.Vj=function(a){return a.il(this)};c.r=function(){return-2067765616};c.x=function(){return Y(new Z,this)};c.$classData=g({b9:0},!1,"play.api.libs.json.JsNull$",{b9:1,d:1,Po:1,sn:1,t:1,q:1,k:1,h:1});var mFa=void 0;function mia(){mFa||(mFa=(new N5).b());return mFa}function Ow(){this.W=null}Ow.prototype=new l;Ow.prototype.constructor=Ow;c=Ow.prototype;c.u=function(){return"JsNumber"};c.v=function(){return 1};
+c.o=function(a){if(this===a)return!0;if(Yw(a)){var b=this.W;a=a.W;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.W;default:throw(new O).c(""+a);}};c.l=function(){return Kw(this)};c.Vj=function(a){return a.il(this)};function Nw(a,b){a.W=b;return a}c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Yw(a){return!!(a&&a.$classData&&a.$classData.m.rS)}
+c.$classData=g({rS:0},!1,"play.api.libs.json.JsNumber",{rS:1,d:1,Po:1,sn:1,t:1,q:1,k:1,h:1});function k0(){this.Uw=this.W=this.mV=null;this.xa=0}k0.prototype=new l;k0.prototype.constructor=k0;c=k0.prototype;c.u=function(){return"JsObject"};c.v=function(){return 1};function txa(a){if(0===(2&a.xa)&&0===(2&a.xa)){var b=a.Uw;a.W=b&&b.$classData&&b.$classData.m.Rj?b:b.De(Ne().ml);a.xa=(2|a.xa)<<24>>24}return a.W}
+function nFa(a){0===(1&a.xa)&&0===(1&a.xa)&&(a.mV=a.Uw.Nc(),a.xa=(1|a.xa)<<24>>24);return a.mV}c.o=function(a){if(ex(a)){var b=nFa(this).md();a=nFa(a).md();return null===b?null===a:f5(b,a)}return!1};c.w=function(a){switch(a){case 0:return this.Uw;default:throw(new O).c(""+a);}};c.l=function(){return Kw(this)};c.Vj=function(a){return a.il(this)};c.r=function(){var a=nFa(this).md(),b=S();return gC(b,a,b.Hz)};c.x=function(){return Y(new Z,this)};
+function ex(a){return!!(a&&a.$classData&&a.$classData.m.sS)}c.$classData=g({sS:0},!1,"play.api.libs.json.JsObject",{sS:1,d:1,Po:1,sn:1,t:1,q:1,k:1,h:1});function Lw(){this.W=null}Lw.prototype=new l;Lw.prototype.constructor=Lw;c=Lw.prototype;c.u=function(){return"JsString"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Xw(a)?this.W===a.W:!1};c.w=function(a){switch(a){case 0:return this.W;default:throw(new O).c(""+a);}};c.l=function(){return Kw(this)};c.Vj=function(a){return a.il(this)};
+c.r=function(){return T(S(),this)};c.c=function(a){this.W=a;return this};c.x=function(){return Y(new Z,this)};function Xw(a){return!!(a&&a.$classData&&a.$classData.m.uS)}c.$classData=g({uS:0},!1,"play.api.libs.json.JsString",{uS:1,d:1,Po:1,sn:1,t:1,q:1,k:1,h:1});function O5(){this.Pla=this.vx=this.Qx=this.px=this.Bda=this.lda=this.ux=this.dh=null}O5.prototype=new l;O5.prototype.constructor=O5;
+O5.prototype.b=function(){P5=this;bqa(this);this.dh=this;m(new p,function(){return function(a){return a}}(this));iqa||(iqa=(new dR).b());m(new p,function(){return function(a){Ne();var b=(new J).j([a]);a=b.qa.length|0;a=la(Xa(iia),[a]);var d;d=0;for(b=Ye(new Ze,b,0,b.qa.length|0);b.ra();){var e=b.ka();a.n[d]=e;d=1+d|0}return ria(new Qw,Dt(0,a))}}(this));hqa||(hqa=(new cR).b());return this};function jr(){var a=PQ();null===PQ().px&&null===PQ().px&&(PQ().px=(new WQ).Yq(a));return PQ().px}
+function er(){var a=PQ();null===PQ().Qx&&null===PQ().Qx&&(PQ().Qx=(new aR).Yq(a));return PQ().Qx}function efa(){var a=PQ();null===PQ().ux&&null===PQ().ux&&(PQ().ux=(new ZQ).Yq(a));return PQ().ux}function dfa(){var a=PQ();null===PQ().vx&&null===PQ().vx&&(PQ().vx=(new $Q).Yq(a));return PQ().vx}O5.prototype.$classData=g({h9:0},!1,"play.api.libs.json.Reads$",{h9:1,d:1,Hma:1,Mma:1,Ima:1,Lma:1,Jma:1,Kma:1});var P5=void 0;function PQ(){P5||(P5=(new O5).b());return P5}function Q5(){}Q5.prototype=new Gwa;
+Q5.prototype.constructor=Q5;Q5.prototype.b=function(){jx.prototype.b.call(this);return this};function oFa(){var a=Xja();return m(new p,function(){return function(a){return(new ey).i(a)}}(a))}Q5.prototype.$classData=g({s9:0},!1,"scalaz.$bslash$div$",{s9:1,Sma:1,Tma:1,Uma:1,Vma:1,d:1,k:1,h:1});var pFa=void 0;function Xja(){pFa||(pFa=(new Q5).b());return pFa}function R5(){this.da=null}R5.prototype=new l;R5.prototype.constructor=R5;c=R5.prototype;c.hd=function(a,b){return xxa(this,a,b)};c.Gh=function(){};
+c.KE=function(a){if(null===a)throw pg(qg(),null);this.da=a;Ed(this);ky(this);DR(this);ER(this);return this};c.Kh=function(a,b,d){return f2(d,a,b,this)};c.Ch=function(a){return jy(this,a)};c.mh=function(){};
+function qFa(a,b,d){b=(new w).e(se(d),se(b));var e=b.ub;d=b.Fb;if(h2(e)&&(e=e.um,h2(d)))return(new dy).i(e.y(d.um));e=b.ub;d=b.Fb;if(h2(e)&&(e=e.um,g2(d)))return(new ey).i(a.da.hd(d.ga,e));e=b.ub;d=b.Fb;if(g2(e)&&(e=e.ga,h2(d)))return(new ey).i(a.da.hd(e,m(new p,function(a,b){return function(a){return a.y(b)}}(a,d.um))));e=b.ub;d=b.Fb;if(g2(e)&&(e=e.ga,g2(d)))return(new ey).i(a.da.Jf(I(function(a,b){return function(){return b}}(a,d.ga)),I(function(a,b){return function(){return b}}(a,e))));throw(new q).i(b);
+}c.Yd=function(a){return(new dy).i(se(a))};c.yg=function(){};c.Jf=function(a,b){return qFa(this,a,b)};c.Fh=function(){};c.$classData=g({A9:0},!1,"scalaz.Apply$$anon$3",{A9:1,d:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1});function S5(){this.da=null}S5.prototype=new l;S5.prototype.constructor=S5;function rFa(a){var b=new S5;if(null===a)throw pg(qg(),null);b.da=a;return b}S5.prototype.$classData=g({D9:0},!1,"scalaz.Arrow$$anon$3",{D9:1,d:1,qpa:1,Fca:1,Ix:1,Gca:1,dD:1,ZS:1});function oz(){}oz.prototype=new a2;
+oz.prototype.constructor=oz;oz.prototype.b=function(){return this};oz.prototype.$classData=g({E$:0},!1,"scalaz.IndexedReaderWriterStateT$",{E$:1,XC:1,YC:1,TC:1,UC:1,VC:1,d:1,WC:1});var Sja=void 0;function T5(){}T5.prototype=new LEa;T5.prototype.constructor=T5;function sFa(){}sFa.prototype=T5.prototype;function U5(){this.da=null}U5.prototype=new l;U5.prototype.constructor=U5;function tFa(a){var b=new U5;if(null===a)throw pg(qg(),null);b.da=a;return b}
+U5.prototype.$classData=g({U$:0},!1,"scalaz.Monad$$anon$4",{U$:1,d:1,Bca:1,$C:1,rs:1,Qk:1,sj:1,aD:1});function V5(){}V5.prototype=new MEa;V5.prototype.constructor=V5;function uFa(){}uFa.prototype=V5.prototype;function W5(){}W5.prototype=new NEa;W5.prototype.constructor=W5;function vFa(){}vFa.prototype=W5.prototype;function wFa(a,b,d,e){b=a.Zz(b,d,Zy().ug);return Aqa(a,b,ub(new vb,function(a,b){return function(d,e){return b.sc(d,I(function(a,b){return function(){return b}}(a,e)))}}(a,e)))}
+function X5(){this.da=null}X5.prototype=new l;X5.prototype.constructor=X5;function Ly(a){var b=new X5;if(null===a)throw pg(qg(),null);b.da=a;return b}X5.prototype.$classData=g({Kaa:0},!1,"scalaz.Traverse1$$anon$5",{Kaa:1,d:1,jra:1,Sca:1,Qk:1,sj:1,bD:1,zca:1});function oW(){}oW.prototype=new PEa;oW.prototype.constructor=oW;oW.prototype.b=function(){return this};oW.prototype.$classData=g({Laa:0},!1,"scalaz.Unapply$",{Laa:1,toa:1,uoa:1,voa:1,woa:1,xoa:1,yoa:1,d:1});var Sta=void 0;
+function Y5(){this.In=null}Y5.prototype=new l;Y5.prototype.constructor=Y5;function St(a){var b=new Y5;b.In=a;Ed(b);ky(b);DR(b);ER(b);return b}c=Y5.prototype;c.hd=function(a,b){return kua(a,b)};c.Gh=function(){};c.Kh=function(a,b,d){return f2(d,a,b,this)};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Yd=function(a){return(new Kp).i(se(a))};c.yg=function(){};c.Jf=function(a,b){return Rga(se(a),b,this.In)};c.Fh=function(){};
+c.$classData=g({Raa:0},!1,"scalaz.ValidationInstances3$$anon$2",{Raa:1,d:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1});function pz(){}pz.prototype=new a2;pz.prototype.constructor=pz;pz.prototype.b=function(){return this};pz.prototype.$classData=g({Vaa:0},!1,"scalaz.package$IndexedReaderWriterState$",{Vaa:1,XC:1,YC:1,TC:1,UC:1,VC:1,d:1,WC:1});var Tja=void 0;function rz(){}rz.prototype=new a2;rz.prototype.constructor=rz;rz.prototype.b=function(){return this};
+rz.prototype.$classData=g({Waa:0},!1,"scalaz.package$ReaderWriterState$",{Waa:1,XC:1,YC:1,TC:1,UC:1,VC:1,d:1,WC:1});var Vja=void 0;function qz(){}qz.prototype=new a2;qz.prototype.constructor=qz;qz.prototype.b=function(){return this};qz.prototype.$classData=g({Xaa:0},!1,"scalaz.package$ReaderWriterStateT$",{Xaa:1,XC:1,YC:1,TC:1,UC:1,VC:1,d:1,WC:1});var Uja=void 0;function Rd(){this.da=null}Rd.prototype=new l;Rd.prototype.constructor=Rd;c=Rd.prototype;c.sc=function(a,b){dz();return a?!0:!!se(b)};
+c.gi=function(){};c.jg=function(){};c.Ee=function(){dz();return!1};c.wf=function(){};c.mw=function(){};c.zg=function(){};c.fe=function(a){if(null===a)throw pg(qg(),null);this.da=a;Gd(this);By(this);Dd(this);Qy(this);rR(this);this.mw(Oua(this));return this};c.Rf=function(){};c.$classData=g({hba:0},!1,"scalaz.std.AnyValInstances$$anon$2",{hba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,BS:1});function Sd(){this.da=null}Sd.prototype=new l;Sd.prototype.constructor=Sd;c=Sd.prototype;
+c.sc=function(a,b){dz();return a?!!se(b):!1};c.gi=function(){};c.jg=function(){};c.Ee=function(){dz();return!0};c.wf=function(){};c.mw=function(){};c.zg=function(){};c.fe=function(a){if(null===a)throw pg(qg(),null);this.da=a;Gd(this);By(this);Dd(this);Qy(this);rR(this);this.mw(Oua(this));return this};c.Rf=function(){};c.$classData=g({iba:0},!1,"scalaz.std.AnyValInstances$$anon$3",{iba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,BS:1});function Td(){}Td.prototype=new l;Td.prototype.constructor=Td;c=Td.prototype;
+c.sc=function(a,b){return((a|0)+(se(b)|0)|0)<<24>>24};c.$d=function(a){return Hd(this,a)};c.gi=function(){};c.jg=function(){};c.rh=function(a){return""+(a|0)};c.Ee=function(){return 0};c.nh=function(){};c.wf=function(){};c.zg=function(){};c.fe=function(){Gd(this);By(this);Dd(this);Qy(this);rR(this);Nd(this);return this};c.Rf=function(){};c.$classData=g({jba:0},!1,"scalaz.std.AnyValInstances$$anon$4",{jba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,xh:1});function Vd(){}Vd.prototype=new l;
+Vd.prototype.constructor=Vd;c=Vd.prototype;c.sc=function(a,b){a=null===a?0:a.W;b=se(b);return Oe(65535&(a+(null===b?0:b.W)|0))};c.$d=function(a){return Hd(this,a)};c.gi=function(){};c.jg=function(){};c.rh=function(a){return ba.String.fromCharCode(null===a?0:a.W)};c.Ee=function(){return Oe(0)};c.nh=function(){};c.wf=function(){};c.zg=function(){};c.fe=function(){Gd(this);By(this);Dd(this);Qy(this);rR(this);Nd(this);return this};c.Rf=function(){};
+c.$classData=g({kba:0},!1,"scalaz.std.AnyValInstances$$anon$5",{kba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,xh:1});function Yd(){}Yd.prototype=new l;Yd.prototype.constructor=Yd;c=Yd.prototype;c.sc=function(a,b){return((a|0)+(se(b)|0)|0)<<16>>16};c.$d=function(a){return Hd(this,a)};c.gi=function(){};c.jg=function(){};c.rh=function(a){return""+(a|0)};c.Ee=function(){return 0};c.nh=function(){};c.wf=function(){};c.zg=function(){};c.fe=function(){Gd(this);By(this);Dd(this);Qy(this);rR(this);Nd(this);return this};
+c.Rf=function(){};c.$classData=g({lba:0},!1,"scalaz.std.AnyValInstances$$anon$6",{lba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,xh:1});function $d(){}$d.prototype=new l;$d.prototype.constructor=$d;c=$d.prototype;c.sc=function(a,b){return(a|0)+(se(b)|0)|0};c.$d=function(a){return Hd(this,a)};c.gi=function(){};c.jg=function(){};c.rh=function(a){return""+(a|0)};c.Ee=function(){return 0};c.nh=function(){};c.wf=function(){};c.zg=function(){};c.fe=function(){Gd(this);By(this);Dd(this);Qy(this);rR(this);Nd(this);return this};
+c.Rf=function(){};c.$classData=g({mba:0},!1,"scalaz.std.AnyValInstances$$anon$7",{mba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,xh:1});function be(){}be.prototype=new l;be.prototype.constructor=be;c=be.prototype;c.sc=function(a,b){var d=Ra(a);a=Ra(se(b));b=d.ia;var d=d.oa,e=a.oa;a=b+a.ia|0;return(new Xb).ha(a,(-2147483648^a)<(-2147483648^b)?1+(d+e|0)|0:d+e|0)};c.$d=function(a){return Hd(this,a)};c.gi=function(){};c.jg=function(){};c.rh=function(a){var b=Ra(a);a=b.ia;b=b.oa;return GD(Sa(),a,b)};c.Ee=function(){return Rz()};
+c.nh=function(){};c.wf=function(){};c.zg=function(){};c.fe=function(){Gd(this);By(this);Dd(this);Qy(this);rR(this);Nd(this);return this};c.Rf=function(){};c.$classData=g({nba:0},!1,"scalaz.std.AnyValInstances$$anon$8",{nba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,xh:1});function Z5(){}Z5.prototype=new l;Z5.prototype.constructor=Z5;c=Z5.prototype;c.Hk=function(a){return Vx(this,a)};c.jl=function(){};c.Gr=function(){};c.sk=function(a,b,d){return wqa(this,a,b,d)};c.Lt=function(){};
+c.Ri=function(a,b,d){return Tia(this,a,b,d)};c.It=function(){};c.$classData=g({Tba:0},!1,"scalaz.std.SetInstances$$anon$1",{Tba:1,d:1,xl:1,yl:1,hu:1,ku:1,qs:1,hna:1});function $5(){}$5.prototype=new l;$5.prototype.constructor=$5;c=$5.prototype;c.hd=function(a,b){return xxa(this,a,b)};c.Gh=function(){};c.Kh=function(a,b,d){return f2(d,a,b,this)};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Yd=function(a){dz();return xFa(rc().GT,a)};c.QE=function(){Ed(this);ky(this);DR(this);ER(this);return this};
+c.yg=function(){};c.Jf=function(a,b){dz();if(se(b).z()||se(a).z())rc(),a=qT();else{var d=se(b).Y(),e=se(a),d=d.y(e.Y());a=LC(new MC,d,I(function(a,b,d){return function(){return a.Jf(I(function(a,b){return function(){dz();return se(b).$()}}(a,b)),I(function(a,b){return function(){dz();return se(b).$()}}(a,d)))}}(this,a,b)))}return a};c.Fh=function(){};c.$classData=g({Vba:0},!1,"scalaz.std.StreamInstances$$anon$2",{Vba:1,d:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1});function a6(){}a6.prototype=new l;
+a6.prototype.constructor=a6;c=a6.prototype;c.sc=function(a,b){b=se(b);return zf(Ef(),a,b)};c.$d=function(a){return Hd(this,a)};c.gi=function(){};c.jg=function(){};c.rh=function(a){return of(qf(),a)};c.Ee=function(){return ff().fk};c.nh=function(){};c.wf=function(){};c.zg=function(){};c.SE=function(){Gd(this);By(this);Dd(this);Qy(this);rR(this);Nd(this);return this};c.Rf=function(){};c.$classData=g({fca:0},!1,"scalaz.std.java.math.BigIntegerInstances$$anon$1",{fca:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,xh:1});
+function b6(){}b6.prototype=new l;b6.prototype.constructor=b6;c=b6.prototype;c.sc=function(a,b){b=se(b);return UQ(new VQ,qwa(a.Hc,b.Hc),a.Uy)};c.$d=function(a){return Hd(this,a)};c.gi=function(){};c.jg=function(){};c.rh=function(a){return a.Hc.l()};c.Ee=function(){return oia(Mw(),Rz())};c.nh=function(){};c.wf=function(){};c.zg=function(){};c.UE=function(){Gd(this);By(this);Dd(this);Qy(this);rR(this);Nd(this);return this};c.Rf=function(){};
+c.$classData=g({nca:0},!1,"scalaz.std.math.BigDecimalInstances$$anon$1",{nca:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,xh:1});function fe(){}fe.prototype=new l;fe.prototype.constructor=fe;c=fe.prototype;c.sc=function(a,b){b=se(b);a=a.re;b=b.re;return(new IZ).Ln(zf(Ef(),a,b))};c.$d=function(a){return Hd(this,a)};c.gi=function(){};c.jg=function(){};c.rh=function(a){a=a.re;return of(qf(),a)};c.Ee=function(){return Lva(JZ(),Rz())};c.VE=function(){Gd(this);By(this);Dd(this);Qy(this);rR(this);Nd(this);return this};
+c.nh=function(){};c.wf=function(){};c.zg=function(){};c.Rf=function(){};c.$classData=g({qca:0},!1,"scalaz.std.math.BigInts$$anon$1",{qca:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,xh:1});function yz(){NS.call(this);this.dz=null}yz.prototype=new FY;yz.prototype.constructor=yz;c=yz.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.m.cT){var b=this.dz;a=a.dz;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.dz;default:throw(new O).c(""+a);}};c.Ea=function(a){this.dz=a;a="["+a.Ab(".")+"]";NS.prototype.ic.call(this,a,null,0,!0);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({cT:0},!1,"utest.NoSuchTestException",{cT:1,Wc:1,tc:1,d:1,h:1,t:1,q:1,k:1});function c6(){NS.call(this);this.bz=this.py=null}c6.prototype=new FY;c6.prototype.constructor=c6;c=c6.prototype;c.u=function(){return"SkippedOuterFailure"};
+c.v=function(){return 2};c.o=function(a){if(this===a)return!0;if(lra(a)){var b=this.py,d=a.py;if(null===b?null===d:b.o(d))return b=this.bz,a=a.bz,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.py;case 1:return this.bz;default:throw(new O).c(""+a);}};function REa(a,b){var d=new c6;d.py=a;d.bz=b;a=a.Ab(".");NS.prototype.ic.call(d,a,b,0,!0);return d}c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function lra(a){return!!(a&&a.$classData&&a.$classData.m.dT)}c.$classData=g({dT:0},!1,"utest.SkippedOuterFailure",{dT:1,Wc:1,tc:1,d:1,h:1,t:1,q:1,k:1});function eA(){this.sU=null}eA.prototype=new l;eA.prototype.constructor=eA;eA.prototype.Ge=function(a,b){return this.sU.Ge(a,b)};eA.prototype.$classData=g({mea:0},!1,"java.util.Arrays$$anon$3",{mea:1,d:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});function wD(){NS.call(this);this.rp=null}wD.prototype=new Y4;wD.prototype.constructor=wD;
+wD.prototype.Vf=function(){return"Flags \x3d '"+this.rp+"'"};wD.prototype.c=function(a){this.rp=a;NS.prototype.ic.call(this,null,null,0,!0);if(null===a)throw(new Ce).b();return this};wD.prototype.$classData=g({nea:0},!1,"java.util.DuplicateFormatFlagsException",{nea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function S0(){NS.call(this);this.rp=null;this.Yo=0}S0.prototype=new Y4;S0.prototype.constructor=S0;S0.prototype.Vf=function(){return"Conversion \x3d "+Oe(this.Yo)+", Flags \x3d "+this.rp};
+S0.prototype.$classData=g({oea:0},!1,"java.util.FormatFlagsConversionMismatchException",{oea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function d6(){this.Ej=null}d6.prototype=new zra;d6.prototype.constructor=d6;function yFa(){}c=yFa.prototype=d6.prototype;c.zt=function(a,b){a=this.Ej.Qp((new y2).i(a),b);return a.z()?null:a.R()};c.b=function(){d6.prototype.TV.call(this,(new zv).b());return this};c.TV=function(a){this.Ej=a;return this};c.yy=function(a){a=this.Ej.gc((new y2).i(a));return a.z()?null:a.R()};
+c.Da=function(){return this.Ej.Da()};function e6(a,b){b=(new y2).i(b);var d=a.Ej.gc(b);if(d.z())return null;d=d.R();a.Ej.uh(b);return d}c.ym=function(){this.Ej.ym()};c.$classData=g({sW:0},!1,"java.util.HashMap",{sW:1,jea:1,d:1,uW:1,k:1,h:1,Zd:1,Ld:1});function SS(){this.Dg=null}SS.prototype=new Sxa;SS.prototype.constructor=SS;SS.prototype.Da=function(){return this.Dg.Ej.Da()};SS.prototype.ar=function(a){if(null===a)throw pg(qg(),null);this.Dg=a;return this};SS.prototype.Sn=function(){return TS(this)};
+SS.prototype.$classData=g({sea:0},!1,"java.util.HashMap$EntrySet",{sea:1,rW:1,qW:1,d:1,rF:1,nW:1,vW:1,Mra:1});function CD(){NS.call(this);this.Yo=0}CD.prototype=new Y4;CD.prototype.constructor=CD;CD.prototype.Vf=function(){return"Code point \x3d 0x"+(+(this.Yo>>>0)).toString(16)};CD.prototype.hb=function(a){this.Yo=a;NS.prototype.ic.call(this,null,null,0,!0);return this};CD.prototype.$classData=g({wea:0},!1,"java.util.IllegalFormatCodePointException",{wea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});
+function R0(){NS.call(this);this.Yo=0;this.dU=null}R0.prototype=new Y4;R0.prototype.constructor=R0;R0.prototype.Vf=function(){return ba.String.fromCharCode(this.Yo)+" !\x3d "+this.dU.tg()};R0.prototype.$classData=g({xea:0},!1,"java.util.IllegalFormatConversionException",{xea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function JD(){NS.call(this);this.rp=null}JD.prototype=new Y4;JD.prototype.constructor=JD;JD.prototype.Vf=function(){return"Flags \x3d '"+this.rp+"'"};
+JD.prototype.c=function(a){this.rp=a;NS.prototype.ic.call(this,null,null,0,!0);if(null===a)throw(new Ce).b();return this};JD.prototype.$classData=g({yea:0},!1,"java.util.IllegalFormatFlagsException",{yea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function BD(){NS.call(this);this.CX=0}BD.prototype=new Y4;BD.prototype.constructor=BD;BD.prototype.Vf=function(){return""+this.CX};BD.prototype.hb=function(a){this.CX=a;NS.prototype.ic.call(this,null,null,0,!0);return this};
+BD.prototype.$classData=g({zea:0},!1,"java.util.IllegalFormatPrecisionException",{zea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function LD(){NS.call(this);this.M_=0}LD.prototype=new Y4;LD.prototype.constructor=LD;LD.prototype.Vf=function(){return""+this.M_};LD.prototype.hb=function(a){this.M_=a;NS.prototype.ic.call(this,null,null,0,!0);return this};LD.prototype.$classData=g({Aea:0},!1,"java.util.IllegalFormatWidthException",{Aea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});
+function yD(){NS.call(this);this.Tp=null}yD.prototype=new Y4;yD.prototype.constructor=yD;yD.prototype.Vf=function(){return"Format specifier '"+this.Tp+"'"};yD.prototype.c=function(a){this.Tp=a;NS.prototype.ic.call(this,null,null,0,!0);if(null===a)throw(new Ce).b();return this};yD.prototype.$classData=g({Fea:0},!1,"java.util.MissingFormatArgumentException",{Fea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function xD(){NS.call(this);this.Tp=null}xD.prototype=new Y4;xD.prototype.constructor=xD;
+xD.prototype.Vf=function(){return this.Tp};xD.prototype.c=function(a){this.Tp=a;NS.prototype.ic.call(this,null,null,0,!0);if(null===a)throw(new Ce).b();return this};xD.prototype.$classData=g({Gea:0},!1,"java.util.MissingFormatWidthException",{Gea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function vD(){NS.call(this);this.Tp=null}vD.prototype=new Y4;vD.prototype.constructor=vD;vD.prototype.Vf=function(){return"Conversion \x3d '"+this.Tp+"'"};
+vD.prototype.c=function(a){this.Tp=a;NS.prototype.ic.call(this,null,null,0,!0);if(null===a)throw(new Ce).b();return this};vD.prototype.$classData=g({Jea:0},!1,"java.util.UnknownFormatConversionException",{Jea:1,Vn:1,Ui:1,ge:1,Wc:1,tc:1,d:1,h:1});function tZ(){this.dq=null}tZ.prototype=new l;tZ.prototype.constructor=tZ;c=tZ.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.m.kY){var b=this.dq;a=a.dq;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.dq;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Hg=function(a){return this.dq.Bn(a.dq)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({kY:0},!1,"scala.concurrent.duration.Deadline",{kY:1,d:1,Ym:1,Md:1,t:1,q:1,k:1,h:1});function wZ(){}wZ.prototype=new a5;
+wZ.prototype.constructor=wZ;c=wZ.prototype;c.b=function(){return this};c.o=function(){return!1};c.l=function(){return"Duration.Undefined"};c.Hg=function(a){return this.Bn(a)};c.Bn=function(a){return a===this?0:1};c.$classData=g({Qfa:0},!1,"scala.concurrent.duration.Duration$$anon$1",{Qfa:1,lY:1,XF:1,d:1,k:1,h:1,Ym:1,Md:1});function xZ(){}xZ.prototype=new a5;xZ.prototype.constructor=xZ;c=xZ.prototype;c.b=function(){return this};c.l=function(){return"Duration.Inf"};c.Hg=function(a){return this.Bn(a)};
+c.Bn=function(a){return a===gB().PT?-1:a===this?0:1};c.$classData=g({Rfa:0},!1,"scala.concurrent.duration.Duration$$anon$2",{Rfa:1,lY:1,XF:1,d:1,k:1,h:1,Ym:1,Md:1});function yZ(){}yZ.prototype=new a5;yZ.prototype.constructor=yZ;c=yZ.prototype;c.b=function(){return this};c.l=function(){return"Duration.MinusInf"};c.Hg=function(a){return this.Bn(a)};c.Bn=function(a){return a===this?0:-1};c.$classData=g({Sfa:0},!1,"scala.concurrent.duration.Duration$$anon$3",{Sfa:1,lY:1,XF:1,d:1,k:1,h:1,Ym:1,Md:1});
+function f6(){d5.call(this);this.Pf=null}f6.prototype=new VEa;f6.prototype.constructor=f6;function Hla(a){var b=new f6;d5.prototype.b.call(b);b.Pf=a.Sa();return b}f6.prototype.$classData=g({aga:0},!1,"scala.io.Source$$anon$1",{aga:1,hsa:1,d:1,Rc:1,Ga:1,Fa:1,ks:1,Gv:1});function g6(){this.yj=this.da=null}g6.prototype=new l;g6.prototype.constructor=g6;g6.prototype.Ge=function(a,b){return this.da.Ge(this.yj.y(a),this.yj.y(b))};
+g6.prototype.$classData=g({sga:0},!1,"scala.math.Ordering$$anon$5",{sga:1,d:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});function An(){this.am=null}An.prototype=new l;An.prototype.constructor=An;c=An.prototype;c.bh=function(a){var b=this.Od();return b===pa(bb)?la(Xa(bb),[a]):b===pa(cb)?la(Xa(cb),[a]):b===pa($a)?la(Xa($a),[a]):b===pa(db)?la(Xa(db),[a]):b===pa(eb)?la(Xa(eb),[a]):b===pa(fb)?la(Xa(fb),[a]):b===pa(gb)?la(Xa(gb),[a]):b===pa(Za)?la(Xa(Za),[a]):b===pa(Ya)?la(Xa(Ba),[a]):nka(pka(),this.Od(),a)};
+c.o=function(a){var b;a&&a.$classData&&a.$classData.m.bj?(b=this.Od(),a=a.Od(),b=b===a):b=!1;return b};c.l=function(){return Yxa(this,this.am)};c.Od=function(){return this.am};c.Mg=function(a){this.am=a;return this};c.r=function(){return fC(V(),this.am)};c.$classData=g({Kga:0},!1,"scala.reflect.ClassTag$GenericClassTag",{Kga:1,d:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});function we(){kT.call(this)}we.prototype=new Lra;we.prototype.constructor=we;c=we.prototype;c.u=function(){return"Error"};c.v=function(){return 2};
+c.Mn=function(a,b,d){kT.prototype.Mn.call(this,a,b,d);return this};c.o=function(a){return this===a?!0:ue(a)&&a.da===this.da?this.gl===a.gl?this.ke===a.ke:!1:!1};c.w=function(a){switch(a){case 0:return this.gl;case 1:return this.ke;default:throw(new O).c(""+a);}};c.l=function(){var a=iO(this.ke),b=this.gl,d=iO(this.ke);return"["+a+"] error: "+b+"\n\n"+jba(d)};c.tD=function(){return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function ue(a){return!!(a&&a.$classData&&a.$classData.m.zY)}c.$classData=g({zY:0},!1,"scala.util.parsing.combinator.Parsers$Error",{zY:1,aG:1,BY:1,d:1,t:1,q:1,k:1,h:1});function ye(){kT.call(this)}ye.prototype=new Lra;ye.prototype.constructor=ye;c=ye.prototype;c.u=function(){return"Failure"};c.v=function(){return 2};c.Mn=function(a,b,d){kT.prototype.Mn.call(this,a,b,d);return this};c.o=function(a){return this===a?!0:ve(a)&&a.da===this.da?this.gl===a.gl?this.ke===a.ke:!1:!1};
+c.w=function(a){switch(a){case 0:return this.gl;case 1:return this.ke;default:throw(new O).c(""+a);}};c.l=function(){var a=iO(this.ke),b=this.gl,d=iO(this.ke);return"["+a+"] failure: "+b+"\n\n"+jba(d)};c.tD=function(a){a=se(a);if(te(a))return a;if(a&&a.$classData&&a.$classData.m.aG){var b=iO(a.ke),d=iO(this.ke);return b.Ac<d.Ac?this:a}throw(new q).i(a);};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function ve(a){return!!(a&&a.$classData&&a.$classData.m.AY)}
+c.$classData=g({AY:0},!1,"scala.util.parsing.combinator.Parsers$Failure",{AY:1,aG:1,BY:1,d:1,t:1,q:1,k:1,h:1});function h6(){this.s=null}h6.prototype=new n5;h6.prototype.constructor=h6;h6.prototype.b=function(){xT.prototype.b.call(this);return this};h6.prototype.db=function(){Jn();return(new mc).b()};h6.prototype.$classData=g({Zha:0},!1,"scala.collection.Seq$",{Zha:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1});var zFa=void 0;function t(){zFa||(zFa=(new h6).b());return zFa}function i6(){this.s=null}
+i6.prototype=new n5;i6.prototype.constructor=i6;function j6(){}j6.prototype=i6.prototype;function k6(){}k6.prototype=new XZ;k6.prototype.constructor=k6;k6.prototype.b=function(){l6=this;Yra(new DT,ub(new vb,function(){return function(a){return a}}(this)));return this};
+function AFa(a,b,d,e,f,h,k){var n=31&(b>>>h|0),r=31&(e>>>h|0);if(n!==r)return a=1<<n|1<<r,b=la(Xa(m6),[2]),n<r?(b.n[0]=d,b.n[1]=f):(b.n[0]=f,b.n[1]=d),n6(new o6,a,b,k);r=la(Xa(m6),[1]);n=1<<n;r.n[0]=AFa(a,b,d,e,f,5+h|0,k);return n6(new o6,n,r,k)}k6.prototype.Su=function(){return p6()};k6.prototype.$classData=g({sia:0},!1,"scala.collection.immutable.HashMap$",{sia:1,fZ:1,Bz:1,Az:1,d:1,Osa:1,k:1,h:1});var l6=void 0;function q6(){l6||(l6=(new k6).b());return l6}function r6(){this.s=null}
+r6.prototype=new n5;r6.prototype.constructor=r6;r6.prototype.b=function(){xT.prototype.b.call(this);return this};r6.prototype.db=function(){return(new mc).b()};r6.prototype.$classData=g({cja:0},!1,"scala.collection.immutable.Seq$",{cja:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1});var BFa=void 0;function Jn(){BFa||(BFa=(new r6).b());return BFa}function s6(){}s6.prototype=new l;s6.prototype.constructor=s6;function t6(){}t6.prototype=s6.prototype;s6.prototype.mg=function(a,b){JT(this,a,b)};
+s6.prototype.oc=function(){};s6.prototype.Xb=function(a){return IC(this,a)};function u6(){this.s=null}u6.prototype=new n5;u6.prototype.constructor=u6;u6.prototype.b=function(){xT.prototype.b.call(this);return this};u6.prototype.db=function(){return(new J).b()};u6.prototype.$classData=g({Uja:0},!1,"scala.collection.mutable.Buffer$",{Uja:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1});var CFa=void 0;function Fc(){CFa||(CFa=(new u6).b());return CFa}function v6(){this.s=null}v6.prototype=new n5;
+v6.prototype.constructor=v6;v6.prototype.b=function(){xT.prototype.b.call(this);return this};v6.prototype.db=function(){return(new M2).b()};v6.prototype.$classData=g({ika:0},!1,"scala.collection.mutable.IndexedSeq$",{ika:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1});var DFa=void 0;function EFa(){DFa||(DFa=(new v6).b());return DFa}function In(){this.s=null}In.prototype=new n5;In.prototype.constructor=In;In.prototype.b=function(){xT.prototype.b.call(this);return this};In.prototype.db=function(){return(new M2).b()};
+In.prototype.$classData=g({Hka:0},!1,"scala.collection.mutable.Seq$",{Hka:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1});var Hn=void 0;function w6(){this.s=null}w6.prototype=new n5;w6.prototype.constructor=w6;w6.prototype.b=function(){xT.prototype.b.call(this);return this};w6.prototype.db=function(){return(new J).b()};w6.prototype.$classData=g({bla:0},!1,"scala.scalajs.js.WrappedArray$",{bla:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1});var FFa=void 0;function hn(){FFa||(FFa=(new w6).b());return FFa}
+function fG(){this.p=this.g=this.f=null;this.a=0}fG.prototype=new l;fG.prototype.constructor=fG;c=fG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_any"};c.v=function(){return 0};c.o=function(a){return qt(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 15");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 15");return this.g};function qt(a){return!!(a&&a.$classData&&a.$classData.m.FJ)}c.$classData=g({FJ:0},!1,"org.nlogo.core.prim._any",{FJ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function BK(){this.p=this.g=this.f=null;this.a=0}BK.prototype=new l;BK.prototype.constructor=BK;c=BK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_ask"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.PA)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[$i(A())|Vi(A()),uj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=md().Uc("?");A();var d=C();A();var e=C();A();A();return qc(A(),a,d,e,"OTPL",b,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 21");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 21");return this.g};
+c.$classData=g({PA:0},!1,"org.nlogo.core.prim._ask",{PA:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function CK(){this.p=this.g=this.f=null;this.a=0}CK.prototype=new l;CK.prototype.constructor=CK;c=CK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_askconcurrent"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.GJ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[$i(A()),uj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=md().Uc("?");A();var d=C();A();var e=C();A();A();return qc(A(),a,d,e,"OTPL",b,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 28");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 28");return this.g};c.$classData=g({GJ:0},!1,"org.nlogo.core.prim._askconcurrent",{GJ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function FK(){this.p=this.g=this.f=null;this.a=0}FK.prototype=new l;FK.prototype.constructor=FK;c=FK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_bk"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.QA)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 35");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 35");return this.g};
+c.$classData=g({QA:0},!1,"org.nlogo.core.prim._bk",{QA:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function WE(){this.p=this.g=this.f=this.la=null;this.a=0}WE.prototype=new l;WE.prototype.constructor=WE;c=WE.prototype;c.u=function(){return"_breed"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.RA?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=aj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 41");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 41");return this.g};c.$classData=g({RA:0},!1,"org.nlogo.core.prim._breed",{RA:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function XE(){this.p=this.g=this.f=this.va=null;this.a=0}XE.prototype=new l;XE.prototype.constructor=XE;c=XE.prototype;
+c.u=function(){return"_breedvariable"};c.v=function(){return 1};c.o=function(a){return this===a?!0:xza(a)?this.va===a.va:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.va;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=nc()|Ti(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 46");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.va=a;L(this);return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 46");return this.g};function xza(a){return!!(a&&a.$classData&&a.$classData.m.HJ)}c.$classData=g({HJ:0},!1,"org.nlogo.core.prim._breedvariable",{HJ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function cV(){this.p=this.g=this.f=this.fi=null;this.a=0}cV.prototype=new l;cV.prototype.constructor=cV;c=cV.prototype;c.u=function(){return"_call"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:Wq(a)?this.fi===a.fi:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.fi;default:throw(new O).c(""+a);}};c.l=function(){return"_call("+this.fi.we()+")"};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return yaa(this.fi)};c.CE=function(a){this.fi=a;L(this);this.L(a.M());return this};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 52");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 52");return this.g};
+function Wq(a){return!!(a&&a.$classData&&a.$classData.m.IJ)}c.$classData=g({IJ:0},!1,"org.nlogo.core.prim._call",{IJ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function bV(){this.p=this.g=this.f=this.fi=null;this.a=0}bV.prototype=new l;bV.prototype.constructor=bV;c=bV.prototype;c.u=function(){return"_callreport"};c.v=function(){return 1};c.o=function(a){return this===a?!0:ot(a)?this.fi===a.fi:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.fi;default:throw(new O).c(""+a);}};c.l=function(){return"_call("+this.fi.we()+")"};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return yaa(this.fi)};c.CE=function(a){this.fi=a;L(this);this.L(a.M());return this};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 60");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 60");return this.g};function ot(a){return!!(a&&a.$classData&&a.$classData.m.JJ)}c.$classData=g({JJ:0},!1,"org.nlogo.core.prim._callreport",{JJ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function IK(){this.p=this.g=this.f=this.ed=null;this.a=0}IK.prototype=new l;
+IK.prototype.constructor=IK;c=IK.prototype;c.b=function(){L(this);this.ed=(new $n).c("~CAREFULLY_ERROR");this.a=(1|this.a)<<24>>24;return this};c.u=function(){return"_carefully"};c.v=function(){return 0};function Yea(a){if(0===(1&a.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 70");return a.ed}c.o=function(a){return Nq(a)&&!0};c.L=function(a){this.g=a;this.a=(4|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(8|this.a)<<24>>24};c.G=function(){x();var a=[uj(A()),uj(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();A();var e=C();A();return qc(A(),a,b,d,"OTPL",e,!0,!0)};c.H=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 68");return this.f};c.K=function(a){this.f=a;this.a=(2|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(4&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 68");return this.g};function Nq(a){return!!(a&&a.$classData&&a.$classData.m.KJ)}c.$classData=g({KJ:0},!1,"org.nlogo.core.prim._carefully",{KJ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function vG(){this.p=this.g=this.f=null;this.a=0}vG.prototype=new l;vG.prototype.constructor=vG;c=vG.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_count"};c.v=function(){return 0};c.o=function(a){return pt(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 112");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 112");return this.g};
+function pt(a){return!!(a&&a.$classData&&a.$classData.m.OJ)}c.$classData=g({OJ:0},!1,"org.nlogo.core.prim._count",{OJ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function YE(){this.p=this.g=this.f=this.la=null;this.a=0}YE.prototype=new l;YE.prototype.constructor=YE;c=YE.prototype;c.b=function(){YE.prototype.c.call(this,"");return this};c.u=function(){return"_createorderedturtles"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Pq(a)?this.la===a.la:!1};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),uj(A())|Bj()],a=(new J).j(a),b=x().s,a=K(a,b),b=md().Uc("-T--");A();var d=C();A();var e=C();A();A();return qc(A(),a,d,e,"O---",b,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 118");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 118");return this.g};
+function Pq(a){return!!(a&&a.$classData&&a.$classData.m.PJ)}c.$classData=g({PJ:0},!1,"org.nlogo.core.prim._createorderedturtles",{PJ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ZE(){this.p=this.g=this.f=this.la=null;this.a=0}ZE.prototype=new l;ZE.prototype.constructor=ZE;c=ZE.prototype;c.b=function(){ZE.prototype.c.call(this,"");return this};c.u=function(){return"_createturtles"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Oq(a)?this.la===a.la:!1};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),uj(A())|Bj()],a=(new J).j(a),b=x().s,a=K(a,b),b=md().Uc("-T--");A();var d=C();A();var e=C();A();A();return qc(A(),a,d,e,"O---",b,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 126");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 126");return this.g};
+function Oq(a){return!!(a&&a.$classData&&a.$classData.m.QJ)}c.$classData=g({QJ:0},!1,"org.nlogo.core.prim._createturtles",{QJ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function iK(){this.p=this.g=this.f=null;this.a=0}iK.prototype=new l;iK.prototype.constructor=iK;c=iK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_done"};c.v=function(){return 0};c.o=function(a){return GDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();A();var e=C();A();return qc(A(),a,b,d,"OTPL",e,!1,!1)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 134");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 134");return this.g};function GDa(a){return!!(a&&a.$classData&&a.$classData.m.RJ)}c.$classData=g({RJ:0},!1,"org.nlogo.core.prim._done",{RJ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function CG(){this.p=this.g=this.f=this.ed=null;this.a=0}CG.prototype=new l;CG.prototype.constructor=CG;c=CG.prototype;c.b=function(){CG.prototype.La.call(this,C());return this};
+c.u=function(){return"_errormessage"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(st(a)){var b=this.ed;a=a.ed;return null===b?null===a:b.o(a)}return!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ed;default:throw(new O).c(""+a);}};c.l=function(){return"_errormessage()"};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 145");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};function Aoa(a,b){b=(new CG).La(b);return dh(a,b)}c.r=function(){return T(S(),this)};
+c.La=function(a){this.ed=a;L(this);return this};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 145");return this.g};function st(a){return!!(a&&a.$classData&&a.$classData.m.TJ)}c.$classData=g({TJ:0},!1,"org.nlogo.core.prim._errormessage",{TJ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function hV(){this.p=this.g=this.f=this.fm=null;this.a=0}hV.prototype=new l;
+hV.prototype.constructor=hV;c=hV.prototype;c.u=function(){return"_extern"};c.GE=function(a){this.fm=a;L(this);return this};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(Zq(a)){var b=this.fm;a=a.fm;return null===b?null===a:b.o(a)}return!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.fm;default:throw(new O).c(""+a);}};c.l=function(){return"_extern("+this.H().Zb.toUpperCase()+")"};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return this.fm};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 160");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 160");return this.g};function Zq(a){return!!(a&&a.$classData&&a.$classData.m.UJ)}c.$classData=g({UJ:0},!1,"org.nlogo.core.prim._extern",{UJ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function iV(){this.p=this.g=this.f=this.fm=null;this.a=0}iV.prototype=new l;iV.prototype.constructor=iV;c=iV.prototype;c.u=function(){return"_externreport"};
+c.GE=function(a){this.fm=a;L(this);return this};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(wt(a)){var b=this.fm;a=a.fm;return null===b?null===a:b.o(a)}return!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.fm;default:throw(new O).c(""+a);}};c.l=function(){return"_externreport("+this.H().Zb.toUpperCase()+")"};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return this.fm};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 164");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 164");return this.g};
+function wt(a){return!!(a&&a.$classData&&a.$classData.m.VJ)}c.$classData=g({VJ:0},!1,"org.nlogo.core.prim._externreport",{VJ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function iL(){this.p=this.g=this.f=null;this.a=0}iL.prototype=new l;iL.prototype.constructor=iL;c=iL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_fd"};c.v=function(){return 0};c.o=function(a){return fP(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 168");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 168");return this.g};function fP(a){return!!(a&&a.$classData&&a.$classData.m.WJ)}c.$classData=g({WJ:0},!1,"org.nlogo.core.prim._fd",{WJ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function $E(){this.p=this.g=this.f=this.la=null;this.a=0}$E.prototype=new l;$E.prototype.constructor=$E;c=$E.prototype;
+c.b=function(){$E.prototype.c.call(this,"");return this};c.u=function(){return"_hatch"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Uq(a)?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),uj(A())|Bj()],a=(new J).j(a),b=x().s,a=K(a,b),b=md().Uc("-T--");A();var d=C();A();var e=C();A();A();return qc(A(),a,d,e,"-T--",b,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 182");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 182");return this.g};function Uq(a){return!!(a&&a.$classData&&a.$classData.m.YJ)}c.$classData=g({YJ:0},!1,"org.nlogo.core.prim._hatch",{YJ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function hH(){this.p=this.g=this.f=null;this.a=0}hH.prototype=new l;hH.prototype.constructor=hH;c=hH.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_inradius"};c.v=function(){return 0};c.o=function(a){return IBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=aj(A())|nj(A());x();var b=[M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=aj(A())|nj(A()),e=2+z()|0;A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 190");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 190");return this.g};
+function IBa(a){return!!(a&&a.$classData&&a.$classData.m.ZJ)}c.$classData=g({ZJ:0},!1,"org.nlogo.core.prim._inradius",{ZJ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function WL(){this.p=this.g=this.f=null;this.a=0}WL.prototype=new l;WL.prototype.constructor=WL;c=WL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_jump"};c.v=function(){return 0};c.o=function(a){return Rza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 199");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 199");return this.g};function Rza(a){return!!(a&&a.$classData&&a.$classData.m.$J)}c.$classData=g({$J:0},!1,"org.nlogo.core.prim._jump",{$J:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function wm(){this.va=null;this.Tj=!1;this.p=this.g=this.f=null;this.a=0}wm.prototype=new l;wm.prototype.constructor=wm;c=wm.prototype;
+c.u=function(){return"_lambdavariable"};c.v=function(){return 2};c.o=function(a){return this===a?!0:Pn(a)?this.va===a.va&&this.Tj===a.Tj:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.va;case 1:return this.Tj;default:throw(new O).c(""+a);}};c.l=function(){return"_lambdavariable("+this.va+")"};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=nc(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 214");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){wm.prototype.WE.call(this,a,!1);return this};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.va)),a=V().ca(a,this.Tj?1231:1237);return V().xb(a,2)};c.x=function(){return Y(new Z,this)};c.WE=function(a,b){this.va=a;this.Tj=b;L(this);return this};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 214");return this.g};function Pn(a){return!!(a&&a.$classData&&a.$classData.m.aK)}
+c.$classData=g({aK:0},!1,"org.nlogo.core.prim._lambdavariable",{aK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function nK(){this.p=this.g=this.f=this.ed=null;this.a=0}nK.prototype=new l;nK.prototype.constructor=nK;c=nK.prototype;c.b=function(){nK.prototype.La.call(this,C());return this};c.u=function(){return"_let"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(Zn(a)){var b=this.ed;a=a.ed;return null===b?null===a:b.o(a)}return!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.ed;default:throw(new O).c(""+a);}};c.l=function(){var a=this.ed;a.z()?a=C():(a=a.R(),a=(new H).i(X(W(),a)));return"_let("+(a.z()?"":a.R())+")"};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc(),nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 229");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};function Uda(a,b){b=(new nK).La((new H).i(b));return dh(a,b)}c.La=function(a){this.ed=a;L(this);return this};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 229");return this.g};function Zn(a){return!!(a&&a.$classData&&a.$classData.m.cK)}c.$classData=g({cK:0},!1,"org.nlogo.core.prim._let",{cK:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function VN(){this.p=this.g=this.f=null;this.a=0}VN.prototype=new l;VN.prototype.constructor=VN;c=VN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_letname"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.dK)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nc(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 241");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 241");return this.g};
+c.$classData=g({dK:0},!1,"org.nlogo.core.prim._letname",{dK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function r4(){this.p=this.g=this.f=this.ed=null;this.a=0}r4.prototype=new l;r4.prototype.constructor=r4;c=r4.prototype;c.u=function(){return"_letvariable"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(Eq(a)){var b=this.ed;a=a.ed;return null===b?null===a:b.o(a)}return!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.ed;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.ft=function(a){this.ed=a;L(this);return this};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nc(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 246");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 246");return this.g};
+function Eq(a){return!!(a&&a.$classData&&a.$classData.m.eK)}c.$classData=g({eK:0},!1,"org.nlogo.core.prim._letvariable",{eK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function aF(){this.p=this.g=this.f=this.va=null;this.a=0}aF.prototype=new l;aF.prototype.constructor=aF;c=aF.prototype;c.u=function(){return"_linkbreedvariable"};c.v=function(){return 1};c.o=function(a){return this===a?!0:yza(a)?this.va===a.va:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.va;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nc()|Ti(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 251");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.va=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 251");return this.g};function yza(a){return!!(a&&a.$classData&&a.$classData.m.fK)}
+c.$classData=g({fK:0},!1,"org.nlogo.core.prim._linkbreedvariable",{fK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ZU(){this.jd=this.be=0;this.p=this.g=this.f=null;this.a=0}ZU.prototype=new l;ZU.prototype.constructor=ZU;c=ZU.prototype;c.u=function(){return"_linkvariable"};c.v=function(){return 2};c.o=function(a){return this===a?!0:Aza(a)?this.be===a.be&&this.jd===a.jd:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.be;case 1:return this.jd;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.ha=function(a,b){this.be=a;this.jd=b;L(this);return this};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=this.jd|Ti(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 257");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){var a=-889275714,a=V().ca(a,this.be),a=V().ca(a,this.jd);return V().xb(a,2)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 257");return this.g};function Aza(a){return!!(a&&a.$classData&&a.$classData.m.gK)}c.$classData=g({gK:0},!1,"org.nlogo.core.prim._linkvariable",{gK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function mI(){this.p=this.g=this.f=null;this.a=0}mI.prototype=new l;mI.prototype.constructor=mI;c=mI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_neighbors"};
+c.v=function(){return 0};c.o=function(a){return QV(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 277");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 277");return this.g};
+function QV(a){return!!(a&&a.$classData&&a.$classData.m.jK)}c.$classData=g({jK:0},!1,"org.nlogo.core.prim._neighbors",{jK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function nI(){this.p=this.g=this.f=null;this.a=0}nI.prototype=new l;nI.prototype.constructor=nI;c=nI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_neighbors4"};c.v=function(){return 0};c.o=function(a){return OV(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 283");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 283");return this.g};function OV(a){return!!(a&&a.$classData&&a.$classData.m.kK)}c.$classData=g({kK:0},!1,"org.nlogo.core.prim._neighbors4",{kK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function wI(){this.p=this.g=this.f=null;this.a=0}wI.prototype=new l;wI.prototype.constructor=wI;
+c=wI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_of"};c.v=function(){return 0};c.o=function(a){return rt(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=vj(A());x();var b=[Vi(A())|$i(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=nc(),e=1+z()|0,f=md().Uc("?");A();var h=C();A();var k=C();A();return D(new F,e,a,b,d,h,k,!0,"OTPL",f,f.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 315");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 315");return this.g};function rt(a){return!!(a&&a.$classData&&a.$classData.m.nK)}c.$classData=g({nK:0},!1,"org.nlogo.core.prim._of",{nK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function xI(){this.p=this.g=this.f=null;this.a=0}xI.prototype=new l;xI.prototype.constructor=xI;c=xI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_oneof"};
+c.v=function(){return 0};c.o=function(a){return kP(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[$i(A())|Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=nc(),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 326");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 326");return this.g};
+function kP(a){return!!(a&&a.$classData&&a.$classData.m.oK)}c.$classData=g({oK:0},!1,"org.nlogo.core.prim._oneof",{oK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function zI(){this.p=this.g=this.f=null;this.a=0}zI.prototype=new l;zI.prototype.constructor=zI;c=zI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_other"};c.v=function(){return 0};c.o=function(a){return VO(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=$i(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 340");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 340");return this.g};function VO(a){return!!(a&&a.$classData&&a.$classData.m.qK)}c.$classData=g({qK:0},!1,"org.nlogo.core.prim._other",{qK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function DI(){this.p=this.g=this.f=null;this.a=0}
+DI.prototype=new l;DI.prototype.constructor=DI;c=DI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_patchat"};c.v=function(){return 0};c.o=function(a){return nP(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=qj(A())|Wi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 346");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 346");return this.g};function nP(a){return!!(a&&a.$classData&&a.$classData.m.rK)}c.$classData=g({rK:0},!1,"org.nlogo.core.prim._patchat",{rK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function KI(){this.p=this.g=this.f=null;this.a=0}KI.prototype=new l;KI.prototype.constructor=KI;c=KI.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_patches"};c.v=function(){return 0};c.o=function(a){return CP(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 353");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 353");return this.g};
+function CP(a){return!!(a&&a.$classData&&a.$classData.m.sK)}c.$classData=g({sK:0},!1,"org.nlogo.core.prim._patches",{sK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function kV(){this.be=0;this.p=this.g=this.f=this.va=null;this.a=0}kV.prototype=new l;kV.prototype.constructor=kV;c=kV.prototype;c.u=function(){return"_procedurevariable"};c.v=function(){return 2};c.o=function(a){return this===a?!0:Hq(a)?this.be===a.be&&this.va===a.va:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.be;case 1:return this.va;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nc(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.yp=function(a,b){this.be=a;this.va=b;L(this);return this};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 367");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){var a=-889275714,a=V().ca(a,this.be),a=V().ca(a,fC(V(),this.va));return V().xb(a,2)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 367");return this.g};function Hq(a){return!!(a&&a.$classData&&a.$classData.m.uK)}c.$classData=g({uK:0},!1,"org.nlogo.core.prim._procedurevariable",{uK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function TI(){this.p=this.g=this.f=null;this.a=0}TI.prototype=new l;TI.prototype.constructor=TI;c=TI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_random"};
+c.v=function(){return 0};c.o=function(a){return jDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 372");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 372");return this.g};
+function jDa(a){return!!(a&&a.$classData&&a.$classData.m.vK)}c.$classData=g({vK:0},!1,"org.nlogo.core.prim._random",{vK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function sM(){this.p=this.g=this.f=null;this.a=0}sM.prototype=new l;sM.prototype.constructor=sM;c=sM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_repeat"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.TA)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[M(A()),uj(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 378");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 378");return this.g};c.$classData=g({TA:0},!1,"org.nlogo.core.prim._repeat",{TA:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function tM(){this.p=this.g=this.f=null;this.a=0}tM.prototype=new l;tM.prototype.constructor=tM;c=tM.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_report"};c.v=function(){return 0};c.o=function(a){return Xq(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 383");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 383");return this.g};
+function Xq(a){return!!(a&&a.$classData&&a.$classData.m.wK)}c.$classData=g({wK:0},!1,"org.nlogo.core.prim._report",{wK:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function BM(){this.p=this.g=this.f=null;this.a=0}BM.prototype=new l;BM.prototype.constructor=BM;c=BM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_run"};c.v=function(){return 0};c.o=function(a){return Yq(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())|tj(A()),Si()|nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(new H).i(1),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 418");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 418");return this.g};function Yq(a){return!!(a&&a.$classData&&a.$classData.m.yK)}c.$classData=g({yK:0},!1,"org.nlogo.core.prim._run",{yK:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function CM(){this.p=this.g=this.f=null;this.a=0}CM.prototype=new l;CM.prototype.constructor=CM;c=CM.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_set"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.UA)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc(),nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 434");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 434");return this.g};
+c.$classData=g({UA:0},!1,"org.nlogo.core.prim._set",{UA:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function bF(){this.p=this.g=this.f=this.la=null;this.a=0}bF.prototype=new l;bF.prototype.constructor=bF;c=bF.prototype;c.b=function(){bF.prototype.c.call(this,"");return this};c.u=function(){return"_sprout"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Qq(a)?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),uj(A())|Bj()],a=(new J).j(a),b=x().s,a=K(a,b),b=md().Uc("-T--");A();var d=C();A();var e=C();A();A();return qc(A(),a,d,e,"--P-",b,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 439");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 439");return this.g};function Qq(a){return!!(a&&a.$classData&&a.$classData.m.AK)}c.$classData=g({AK:0},!1,"org.nlogo.core.prim._sprout",{AK:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function VM(){this.p=this.g=this.f=null;this.a=0}VM.prototype=new l;VM.prototype.constructor=VM;c=VM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_stop"};c.v=function(){return 0};c.o=function(a){return GN(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 447");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 447");return this.g};function GN(a){return!!(a&&a.$classData&&a.$classData.m.BK)}c.$classData=g({BK:0},!1,"org.nlogo.core.prim._stop",{BK:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function KJ(){this.p=this.g=this.f=null;this.a=0}KJ.prototype=new l;KJ.prototype.constructor=KJ;c=KJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_turtle"};
+c.v=function(){return 0};c.o=function(a){return cDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=pj(A())|Wi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 460");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 460");return this.g};
+function cDa(a){return!!(a&&a.$classData&&a.$classData.m.EK)}c.$classData=g({EK:0},!1,"org.nlogo.core.prim._turtle",{EK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function WU(){this.tl=null;this.jd=0;this.p=this.g=this.f=null;this.a=0}WU.prototype=new l;WU.prototype.constructor=WU;c=WU.prototype;c.u=function(){return"_turtleorlinkvariable"};c.v=function(){return 2};c.o=function(a){return this===a?!0:Bza(a)?this.tl===a.tl&&this.jd===a.jd:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.tl;case 1:return this.jd;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=this.jd|Ti(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T-L",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 471");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.Jd=function(a,b){this.tl=a;this.jd=b;L(this);return this};c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.tl)),a=V().ca(a,this.jd);return V().xb(a,2)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 471");return this.g};function Bza(a){return!!(a&&a.$classData&&a.$classData.m.FK)}c.$classData=g({FK:0},!1,"org.nlogo.core.prim._turtleorlinkvariable",{FK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function MJ(){this.p=this.g=this.f=null;this.a=0}MJ.prototype=new l;MJ.prototype.constructor=MJ;c=MJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_turtles"};
+c.v=function(){return 0};c.o=function(a){return eDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=aj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 466");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 466");return this.g};
+function eDa(a){return!!(a&&a.$classData&&a.$classData.m.GK)}c.$classData=g({GK:0},!1,"org.nlogo.core.prim._turtles",{GK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function dO(){this.p=this.g=this.f=null;this.a=0}dO.prototype=new l;dO.prototype.constructor=dO;c=dO.prototype;c.b=function(){L(this);return this};c.u=function(){return"_unknownidentifier"};c.v=function(){return 0};c.o=function(a){return tm(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nc(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 487");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 487");return this.g};function tm(a){return!!(a&&a.$classData&&a.$classData.m.IK)}c.$classData=g({IK:0},!1,"org.nlogo.core.prim._unknownidentifier",{IK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function YJ(){this.p=this.g=this.f=null;this.a=0}YJ.prototype=new l;
+YJ.prototype.constructor=YJ;c=YJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_with"};c.v=function(){return 0};c.o=function(a){return tt(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=$i(A());x();var b=[xj(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=$i(A()),e=2+z()|0,f=md().Uc("?");A();var h=C();A();var k=C();A();return D(new F,e,a,b,d,h,k,!1,"OTPL",f,f.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 492");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 492");return this.g};function tt(a){return!!(a&&a.$classData&&a.$classData.m.JK)}c.$classData=g({JK:0},!1,"org.nlogo.core.prim._with",{JK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function dG(){this.p=this.g=this.f=null;this.a=0}dG.prototype=new l;dG.prototype.constructor=dG;c=dG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_all"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.aB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[$i(A()),xj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=md().Uc("?"),e=z();A();var f=B();A();var h=C();A();var k=C();A();A();return D(new F,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 9");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 9");return this.g};
+c.$classData=g({aB:0},!1,"org.nlogo.core.prim.etc._all",{aB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function fK(){this.p=this.g=this.f=null;this.a=0}fK.prototype=new l;fK.prototype.constructor=fK;c=fK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_apply"};c.v=function(){return 0};c.o=function(a){return cBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[tj(A()),Zi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 22");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 22");return this.g};function cBa(a){return!!(a&&a.$classData&&a.$classData.m.OK)}c.$classData=g({OK:0},!1,"org.nlogo.core.prim.etc._apply",{OK:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function MF(){this.p=this.g=this.f=null;this.a=0}MF.prototype=new l;MF.prototype.constructor=MF;c=MF.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_applyresult"};c.v=function(){return 0};c.o=function(a){return yDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[sj(A()),Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=nc(),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 27");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 27");return this.g};function yDa(a){return!!(a&&a.$classData&&a.$classData.m.PK)}c.$classData=g({PK:0},!1,"org.nlogo.core.prim.etc._applyresult",{PK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function jG(){this.p=this.g=this.f=null;this.a=0}jG.prototype=new l;jG.prototype.constructor=jG;c=jG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_atpoints"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.bB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=aj(A())|nj(A());x();var b=[Zi(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=$i(A()),e=2+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 29");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 29");return this.g};
+c.$classData=g({bB:0},!1,"org.nlogo.core.prim.etc._atpoints",{bB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function mG(){this.p=this.g=this.f=null;this.a=0}mG.prototype=new l;mG.prototype.constructor=mG;c=mG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_basecolors"};c.v=function(){return 0};c.o=function(a){return NDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Zi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 45");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 45");return this.g};function NDa(a){return!!(a&&a.$classData&&a.$classData.m.XK)}c.$classData=g({XK:0},!1,"org.nlogo.core.prim.etc._basecolors",{XK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function GK(){this.p=this.g=this.f=null;this.a=0}GK.prototype=new l;GK.prototype.constructor=GK;c=GK.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_beep"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.YK)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 50");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 50");return this.g};
+c.$classData=g({YK:0},!1,"org.nlogo.core.prim.etc._beep",{YK:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function nG(){this.p=this.g=this.f=null;this.a=0}nG.prototype=new l;nG.prototype.constructor=nG;c=nG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_behaviorspaceexperimentname"};c.v=function(){return 0};c.o=function(a){return ODa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 54");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 54");return this.g};function ODa(a){return!!(a&&a.$classData&&a.$classData.m.ZK)}c.$classData=g({ZK:0},!1,"org.nlogo.core.prim.etc._behaviorspaceexperimentname",{ZK:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function oG(){this.p=this.g=this.f=null;this.a=0}oG.prototype=new l;oG.prototype.constructor=oG;c=oG.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_behaviorspacerunnumber"};c.v=function(){return 0};c.o=function(a){return PDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 59");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 59");return this.g};
+function PDa(a){return!!(a&&a.$classData&&a.$classData.m.$K)}c.$classData=g({$K:0},!1,"org.nlogo.core.prim.etc._behaviorspacerunnumber",{$K:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function gK(){this.p=this.g=this.f=null;this.a=0}gK.prototype=new l;gK.prototype.constructor=gK;c=gK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_bench"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.aL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 64");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 64");return this.g};c.$classData=g({aL:0},!1,"org.nlogo.core.prim.etc._bench",{aL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function OF(){this.p=this.g=this.f=null;this.a=0}OF.prototype=new l;OF.prototype.constructor=OF;c=OF.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_block"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.bL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[zj()],a=(new J).j(a),b=x().s,a=K(a,b),b=Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 70");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 70");return this.g};c.$classData=g({bL:0},!1,"org.nlogo.core.prim.etc._block",{bL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function NF(){this.p=this.g=this.f=null;this.a=0}NF.prototype=new l;NF.prototype.constructor=NF;c=NF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_boom"};c.v=function(){return 0};
+c.o=function(a){return zDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nc(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 76");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 76");return this.g};
+function zDa(a){return!!(a&&a.$classData&&a.$classData.m.cL)}c.$classData=g({cL:0},!1,"org.nlogo.core.prim.etc._boom",{cL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function rG(){this.p=this.g=this.f=null;this.a=0}rG.prototype=new l;rG.prototype.constructor=rG;c=rG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_bothends"};c.v=function(){return 0};c.o=function(a){return pBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=$i(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 81");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 81");return this.g};function pBa(a){return!!(a&&a.$classData&&a.$classData.m.dL)}c.$classData=g({dL:0},!1,"org.nlogo.core.prim.etc._bothends",{dL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function cF(){this.p=this.g=this.f=this.la=null;this.a=0}cF.prototype=new l;
+cF.prototype.constructor=cF;c=cF.prototype;c.u=function(){return"_breedat"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.cB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=aj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 6");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 6");return this.g};c.$classData=g({cB:0},!1,"org.nlogo.core.prim.etc._breedat",{cB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function dF(){this.p=this.g=this.f=this.la=null;this.a=0}dF.prototype=new l;dF.prototype.constructor=dF;c=dF.prototype;c.u=function(){return"_breedhere"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.dB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=aj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 13");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 13");return this.g};c.$classData=g({dB:0},!1,"org.nlogo.core.prim.etc._breedhere",{dB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function eF(){this.p=this.g=this.f=this.la=null;this.a=0}eF.prototype=new l;eF.prototype.constructor=eF;c=eF.prototype;c.u=function(){return"_breedon"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.eB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[pj(A())|qj(A())|aj(A())|nj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=aj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 19");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 19");return this.g};c.$classData=g({eB:0},!1,"org.nlogo.core.prim.etc._breedon",{eB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function fF(){this.p=this.g=this.f=this.la=null;this.a=0}fF.prototype=new l;fF.prototype.constructor=fF;c=fF.prototype;c.u=function(){return"_breedsingular"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.fB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=pj(A())|Wi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 25");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 25");return this.g};c.$classData=g({fB:0},!1,"org.nlogo.core.prim.etc._breedsingular",{fB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function pG(){this.p=this.g=this.f=null;this.a=0}pG.prototype=new l;pG.prototype.constructor=pG;c=pG.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_butfirst"};c.v=function(){return 0};c.o=function(a){return JBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A())|Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 37");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 37");return this.g};
+function JBa(a){return!!(a&&a.$classData&&a.$classData.m.eL)}c.$classData=g({eL:0},!1,"org.nlogo.core.prim.etc._butfirst",{eL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function qG(){this.p=this.g=this.f=null;this.a=0}qG.prototype=new l;qG.prototype.constructor=qG;c=qG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_butlast"};c.v=function(){return 0};c.o=function(a){return KBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A())|Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 43");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 43");return this.g};function KBa(a){return!!(a&&a.$classData&&a.$classData.m.fL)}c.$classData=g({fL:0},!1,"org.nlogo.core.prim.etc._butlast",{fL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function sG(){this.p=this.g=this.f=null;this.a=0}sG.prototype=new l;sG.prototype.constructor=sG;c=sG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_canmove"};c.v=function(){return 0};c.o=function(a){return qBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 49");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 49");return this.g};function qBa(a){return!!(a&&a.$classData&&a.$classData.m.gL)}c.$classData=g({gL:0},!1,"org.nlogo.core.prim.etc._canmove",{gL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function hK(){this.p=this.g=this.f=null;this.a=0}hK.prototype=new l;hK.prototype.constructor=hK;c=hK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_changetopology"};
+c.v=function(){return 0};c.o=function(a){return bBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Xi(A()),Xi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 93");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 93");return this.g};
+function bBa(a){return!!(a&&a.$classData&&a.$classData.m.iL)}c.$classData=g({iL:0},!1,"org.nlogo.core.prim.etc._changetopology",{iL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function QF(){this.p=this.g=this.f=null;this.a=0}QF.prototype=new l;QF.prototype.constructor=QF;c=QF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_checksum"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.jL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"O---",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 98");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 98");return this.g};c.$classData=g({jL:0},!1,"org.nlogo.core.prim.etc._checksum",{jL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function PF(){this.p=this.g=this.f=null;this.a=0}PF.prototype=new l;PF.prototype.constructor=PF;c=PF.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_checksyntax"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.kL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 56");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 56");return this.g};c.$classData=g({kL:0},!1,"org.nlogo.core.prim.etc._checksyntax",{kL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function HK(){this.p=this.g=this.f=null;this.a=0}HK.prototype=new l;HK.prototype.constructor=HK;c=HK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_clearall"};c.v=function(){return 0};
+c.o=function(a){return GAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 104");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 104");return this.g};function GAa(a){return!!(a&&a.$classData&&a.$classData.m.lL)}c.$classData=g({lL:0},!1,"org.nlogo.core.prim.etc._clearall",{lL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function JK(){this.p=this.g=this.f=null;this.a=0}JK.prototype=new l;JK.prototype.constructor=JK;c=JK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_cleardrawing"};c.v=function(){return 0};c.o=function(a){return HAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 114");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 114");return this.g};function HAa(a){return!!(a&&a.$classData&&a.$classData.m.nL)}c.$classData=g({nL:0},!1,"org.nlogo.core.prim.etc._cleardrawing",{nL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function LK(){this.p=this.g=this.f=null;this.a=0}LK.prototype=new l;LK.prototype.constructor=LK;c=LK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_clearglobals"};
+c.v=function(){return 0};c.o=function(a){return IAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 119");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 119");return this.g};
+function IAa(a){return!!(a&&a.$classData&&a.$classData.m.oL)}c.$classData=g({oL:0},!1,"org.nlogo.core.prim.etc._clearglobals",{oL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function MK(){this.p=this.g=this.f=null;this.a=0}MK.prototype=new l;MK.prototype.constructor=MK;c=MK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_clearlinks"};c.v=function(){return 0};c.o=function(a){return MAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 124");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 124");return this.g};function MAa(a){return!!(a&&a.$classData&&a.$classData.m.pL)}c.$classData=g({pL:0},!1,"org.nlogo.core.prim.etc._clearlinks",{pL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function NK(){this.p=this.g=this.f=null;this.a=0}NK.prototype=new l;NK.prototype.constructor=NK;c=NK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_clearoutput"};
+c.v=function(){return 0};c.o=function(a){return Mza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 129");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 129");return this.g};function Mza(a){return!!(a&&a.$classData&&a.$classData.m.qL)}c.$classData=g({qL:0},!1,"org.nlogo.core.prim.etc._clearoutput",{qL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function OK(){this.p=this.g=this.f=null;this.a=0}OK.prototype=new l;OK.prototype.constructor=OK;c=OK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_clearpatches"};c.v=function(){return 0};c.o=function(a){return JAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 133");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 133");return this.g};function JAa(a){return!!(a&&a.$classData&&a.$classData.m.rL)}c.$classData=g({rL:0},!1,"org.nlogo.core.prim.etc._clearpatches",{rL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function QK(){this.p=this.g=this.f=null;this.a=0}QK.prototype=new l;QK.prototype.constructor=QK;c=QK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_clearticks"};
+c.v=function(){return 0};c.o=function(a){return LAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 138");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 138");return this.g};
+function LAa(a){return!!(a&&a.$classData&&a.$classData.m.tL)}c.$classData=g({tL:0},!1,"org.nlogo.core.prim.etc._clearticks",{tL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function RK(){this.p=this.g=this.f=null;this.a=0}RK.prototype=new l;RK.prototype.constructor=RK;c=RK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_clearturtles"};c.v=function(){return 0};c.o=function(a){return KAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 143");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 143");return this.g};function KAa(a){return!!(a&&a.$classData&&a.$classData.m.uL)}c.$classData=g({uL:0},!1,"org.nlogo.core.prim.etc._clearturtles",{uL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function wG(){this.p=this.g=this.f=null;this.a=0}wG.prototype=new l;wG.prototype.constructor=wG;c=wG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_dateandtime"};
+c.v=function(){return 0};c.o=function(a){return BDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 154");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 154");return this.g};
+function BDa(a){return!!(a&&a.$classData&&a.$classData.m.xL)}c.$classData=g({xL:0},!1,"org.nlogo.core.prim.etc._dateandtime",{xL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function TK(){this.p=this.g=this.f=null;this.a=0}TK.prototype=new l;TK.prototype.constructor=TK;c=TK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_die"};c.v=function(){return 0};c.o=function(a){return Sza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T-L",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 62");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 62");return this.g};function Sza(a){return!!(a&&a.$classData&&a.$classData.m.yL)}c.$classData=g({yL:0},!1,"org.nlogo.core.prim.etc._die",{yL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function UK(){this.p=this.g=this.f=null;this.a=0}UK.prototype=new l;UK.prototype.constructor=UK;c=UK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_diffuse"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.mB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Ti(),M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 159");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 159");return this.g};
+c.$classData=g({mB:0},!1,"org.nlogo.core.prim.etc._diffuse",{mB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function VK(){this.p=this.g=this.f=null;this.a=0}VK.prototype=new l;VK.prototype.constructor=VK;c=VK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_diffuse4"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.nB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Ti(),M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 165");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 165");return this.g};c.$classData=g({nB:0},!1,"org.nlogo.core.prim.etc._diffuse4",{nB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function WK(){this.p=this.g=this.f=null;this.a=0}WK.prototype=new l;WK.prototype.constructor=WK;c=WK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_display"};c.v=function(){return 0};
+c.o=function(a){return mBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 171");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 171");return this.g};function mBa(a){return!!(a&&a.$classData&&a.$classData.m.zL)}c.$classData=g({zL:0},!1,"org.nlogo.core.prim.etc._display",{zL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function xG(){this.p=this.g=this.f=null;this.a=0}xG.prototype=new l;xG.prototype.constructor=xG;c=xG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_distance"};c.v=function(){return 0};c.o=function(a){return rBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[pj(A())|qj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 67");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 67");return this.g};function rBa(a){return!!(a&&a.$classData&&a.$classData.m.AL)}c.$classData=g({AL:0},!1,"org.nlogo.core.prim.etc._distance",{AL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function yG(){this.p=this.g=this.f=null;this.a=0}yG.prototype=new l;yG.prototype.constructor=yG;c=yG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_distancexy"};
+c.v=function(){return 0};c.o=function(a){return sBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 175");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 175");return this.g};
+function sBa(a){return!!(a&&a.$classData&&a.$classData.m.BL)}c.$classData=g({BL:0},!1,"org.nlogo.core.prim.etc._distancexy",{BL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function XK(){this.p=this.g=this.f=null;this.a=0}XK.prototype=new l;XK.prototype.constructor=XK;c=XK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_downhill"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.oB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Ti()],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 182");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 182");return this.g};c.$classData=g({oB:0},!1,"org.nlogo.core.prim.etc._downhill",{oB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function YK(){this.p=this.g=this.f=null;this.a=0}YK.prototype=new l;YK.prototype.constructor=YK;c=YK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_downhill4"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.pB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Ti()],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 188");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 188");return this.g};
+c.$classData=g({pB:0},!1,"org.nlogo.core.prim.etc._downhill4",{pB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function RF(){this.p=this.g=this.f=null;this.a=0}RF.prototype=new l;RF.prototype.constructor=RF;c=RF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_dump"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.DL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"O---",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 194");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 194");return this.g};c.$classData=g({DL:0},!1,"org.nlogo.core.prim.etc._dump",{DL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function UF(){this.p=this.g=this.f=null;this.a=0}UF.prototype=new l;UF.prototype.constructor=UF;c=UF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_dump1"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.EL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 200");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 200");return this.g};
+c.$classData=g({EL:0},!1,"org.nlogo.core.prim.etc._dump1",{EL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function SF(){this.p=this.g=this.f=null;this.a=0}SF.prototype=new l;SF.prototype.constructor=SF;c=SF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_dumpextensionprims"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.FL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 205");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 205");return this.g};c.$classData=g({FL:0},!1,"org.nlogo.core.prim.etc._dumpextensionprims",{FL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function TF(){this.p=this.g=this.f=null;this.a=0}TF.prototype=new l;TF.prototype.constructor=TF;c=TF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_dumpextensions"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.GL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 210");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 210");return this.g};
+c.$classData=g({GL:0},!1,"org.nlogo.core.prim.etc._dumpextensions",{GL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function zG(){this.p=this.g=this.f=null;this.a=0}zG.prototype=new l;zG.prototype.constructor=zG;c=zG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_dx"};c.v=function(){return 0};c.o=function(a){return tBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 215");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 215");return this.g};function tBa(a){return!!(a&&a.$classData&&a.$classData.m.HL)}c.$classData=g({HL:0},!1,"org.nlogo.core.prim.etc._dx",{HL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function AG(){this.p=this.g=this.f=null;this.a=0}AG.prototype=new l;AG.prototype.constructor=AG;c=AG.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_dy"};c.v=function(){return 0};c.o=function(a){return uBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 221");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 221");return this.g};
+function uBa(a){return!!(a&&a.$classData&&a.$classData.m.IL)}c.$classData=g({IL:0},!1,"org.nlogo.core.prim.etc._dy",{IL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function BG(){this.p=this.g=this.f=null;this.a=0}BG.prototype=new l;BG.prototype.constructor=BG;c=BG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_empty"};c.v=function(){return 0};c.o=function(a){return LBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 82");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 82");return this.g};function LBa(a){return!!(a&&a.$classData&&a.$classData.m.JL)}c.$classData=g({JL:0},!1,"org.nlogo.core.prim.etc._empty",{JL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function ZK(){this.p=this.g=this.f=null;this.a=0}ZK.prototype=new l;ZK.prototype.constructor=ZK;c=ZK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_error"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.qB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 227");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 227");return this.g};c.$classData=g({qB:0},!1,"org.nlogo.core.prim.etc._error",{qB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function $K(){this.p=this.g=this.f=null;this.a=0}$K.prototype=new l;$K.prototype.constructor=$K;c=$K.prototype;c.b=function(){L(this);return this};c.u=function(){return"_every"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.rB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[M(A()),uj(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 232");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 232");return this.g};
+c.$classData=g({rB:0},!1,"org.nlogo.core.prim.etc._every",{rB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function jK(){this.p=this.g=this.f=null;this.a=0}jK.prototype=new l;jK.prototype.constructor=jK;c=jK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_experimentstepend"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.LL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 243");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 243");return this.g};c.$classData=g({LL:0},!1,"org.nlogo.core.prim.etc._experimentstepend",{LL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function kK(){this.p=this.g=this.f=null;this.a=0}kK.prototype=new l;kK.prototype.constructor=kK;c=kK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_exportdrawing"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.ML)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 88");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 88");return this.g};
+c.$classData=g({ML:0},!1,"org.nlogo.core.prim.etc._exportdrawing",{ML:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function bL(){this.p=this.g=this.f=null;this.a=0}bL.prototype=new l;bL.prototype.constructor=bL;c=bL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_exportinterface"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.NL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 248");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 248");return this.g};c.$classData=g({NL:0},!1,"org.nlogo.core.prim.etc._exportinterface",{NL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function cL(){this.p=this.g=this.f=null;this.a=0}cL.prototype=new l;cL.prototype.constructor=cL;c=cL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_exportoutput"};
+c.v=function(){return 0};c.o=function(a){return fBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 93");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 93");return this.g};
+function fBa(a){return!!(a&&a.$classData&&a.$classData.m.OL)}c.$classData=g({OL:0},!1,"org.nlogo.core.prim.etc._exportoutput",{OL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function eL(){this.p=this.g=this.f=null;this.a=0}eL.prototype=new l;eL.prototype.constructor=eL;c=eL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_exportview"};c.v=function(){return 0};c.o=function(a){return iBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 98");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 98");return this.g};function iBa(a){return!!(a&&a.$classData&&a.$classData.m.RL)}c.$classData=g({RL:0},!1,"org.nlogo.core.prim.etc._exportview",{RL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function fL(){this.p=this.g=this.f=null;this.a=0}fL.prototype=new l;fL.prototype.constructor=fL;c=fL.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_exportworld"};c.v=function(){return 0};c.o=function(a){return jBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 103");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 103");return this.g};
+function jBa(a){return!!(a&&a.$classData&&a.$classData.m.SL)}c.$classData=g({SL:0},!1,"org.nlogo.core.prim.etc._exportworld",{SL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function EG(){this.p=this.g=this.f=null;this.a=0}EG.prototype=new l;EG.prototype.constructor=EG;c=EG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_extracthsb"};c.v=function(){return 0};c.o=function(a){return VCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())|Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 108");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 108");return this.g};function VCa(a){return!!(a&&a.$classData&&a.$classData.m.TL)}c.$classData=g({TL:0},!1,"org.nlogo.core.prim.etc._extracthsb",{TL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function FG(){this.p=this.g=this.f=null;this.a=0}FG.prototype=new l;FG.prototype.constructor=FG;c=FG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_extractrgb"};c.v=function(){return 0};c.o=function(a){return WCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 114");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 114");return this.g};function WCa(a){return!!(a&&a.$classData&&a.$classData.m.UL)}c.$classData=g({UL:0},!1,"org.nlogo.core.prim.etc._extractrgb",{UL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function gL(){this.p=this.g=this.f=null;this.a=0}gL.prototype=new l;gL.prototype.constructor=gL;c=gL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_face"};
+c.v=function(){return 0};c.o=function(a){return Tza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[pj(A())|qj(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 253");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 253");return this.g};
+function Tza(a){return!!(a&&a.$classData&&a.$classData.m.VL)}c.$classData=g({VL:0},!1,"org.nlogo.core.prim.etc._face",{VL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function hL(){this.p=this.g=this.f=null;this.a=0}hL.prototype=new l;hL.prototype.constructor=hL;c=hL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_facexy"};c.v=function(){return 0};c.o=function(a){return Uza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 259");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 259");return this.g};function Uza(a){return!!(a&&a.$classData&&a.$classData.m.WL)}c.$classData=g({WL:0},!1,"org.nlogo.core.prim.etc._facexy",{WL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function GG(){this.p=this.g=this.f=null;this.a=0}GG.prototype=new l;GG.prototype.constructor=GG;c=GG.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_fileatend"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.XL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 265");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 265");return this.g};c.$classData=g({XL:0},!1,"org.nlogo.core.prim.etc._fileatend",{XL:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function jL(){this.p=this.g=this.f=null;this.a=0}jL.prototype=new l;jL.prototype.constructor=jL;c=jL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_fileclose"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.YL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 270");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 270");return this.g};
+c.$classData=g({YL:0},!1,"org.nlogo.core.prim.etc._fileclose",{YL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function kL(){this.p=this.g=this.f=null;this.a=0}kL.prototype=new l;kL.prototype.constructor=kL;c=kL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_filecloseall"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.ZL)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 274");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 274");return this.g};c.$classData=g({ZL:0},!1,"org.nlogo.core.prim.etc._filecloseall",{ZL:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function lL(){this.p=this.g=this.f=null;this.a=0}lL.prototype=new l;lL.prototype.constructor=lL;c=lL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_filedelete"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.$L)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 278");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 278");return this.g};
+c.$classData=g({$L:0},!1,"org.nlogo.core.prim.etc._filedelete",{$L:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function HG(){this.p=this.g=this.f=null;this.a=0}HG.prototype=new l;HG.prototype.constructor=HG;c=HG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_fileexists"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.aM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 283");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 283");return this.g};c.$classData=g({aM:0},!1,"org.nlogo.core.prim.etc._fileexists",{aM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function mL(){this.p=this.g=this.f=null;this.a=0}mL.prototype=new l;mL.prototype.constructor=mL;c=mL.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_fileflush"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.bM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 289");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 289");return this.g};
+c.$classData=g({bM:0},!1,"org.nlogo.core.prim.etc._fileflush",{bM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function nL(){this.p=this.g=this.f=null;this.a=0}nL.prototype=new l;nL.prototype.constructor=nL;c=nL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_fileopen"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.cM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 293");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 293");return this.g};c.$classData=g({cM:0},!1,"org.nlogo.core.prim.etc._fileopen",{cM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function oL(){this.p=this.g=this.f=null;this.a=0}oL.prototype=new l;oL.prototype.constructor=oL;c=oL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_fileprint"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.dM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 298");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 298");return this.g};
+c.$classData=g({dM:0},!1,"org.nlogo.core.prim.etc._fileprint",{dM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function IG(){this.p=this.g=this.f=null;this.a=0}IG.prototype=new l;IG.prototype.constructor=IG;c=IG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_fileread"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.eM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=mr(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 303");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 303");return this.g};c.$classData=g({eM:0},!1,"org.nlogo.core.prim.etc._fileread",{eM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function JG(){this.p=this.g=this.f=null;this.a=0}JG.prototype=new l;JG.prototype.constructor=JG;c=JG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_filereadchars"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.fM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 308");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 308");return this.g};
+c.$classData=g({fM:0},!1,"org.nlogo.core.prim.etc._filereadchars",{fM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function KG(){this.p=this.g=this.f=null;this.a=0}KG.prototype=new l;KG.prototype.constructor=KG;c=KG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_filereadline"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.gM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 314");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 314");return this.g};c.$classData=g({gM:0},!1,"org.nlogo.core.prim.etc._filereadline",{gM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function pL(){this.p=this.g=this.f=null;this.a=0}pL.prototype=new l;pL.prototype.constructor=pL;c=pL.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_fileshow"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.hM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 319");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 319");return this.g};
+c.$classData=g({hM:0},!1,"org.nlogo.core.prim.etc._fileshow",{hM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function qL(){this.p=this.g=this.f=null;this.a=0}qL.prototype=new l;qL.prototype.constructor=qL;c=qL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_filetype"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.iM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 324");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 324");return this.g};c.$classData=g({iM:0},!1,"org.nlogo.core.prim.etc._filetype",{iM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function rL(){this.p=this.g=this.f=null;this.a=0}rL.prototype=new l;rL.prototype.constructor=rL;c=rL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_filewrite"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.jM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[mr()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 329");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 329");return this.g};
+c.$classData=g({jM:0},!1,"org.nlogo.core.prim.etc._filewrite",{jM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function LG(){this.p=this.g=this.f=null;this.a=0}LG.prototype=new l;LG.prototype.constructor=LG;c=LG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_filter"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.sB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[sj(A()),Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 334");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 334");return this.g};c.$classData=g({sB:0},!1,"org.nlogo.core.prim.etc._filter",{sB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function MG(){this.p=this.g=this.f=null;this.a=0}MG.prototype=new l;MG.prototype.constructor=MG;c=MG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_first"};
+c.v=function(){return 0};c.o=function(a){return MBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=nc(),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 120");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 120");return this.g};
+function MBa(a){return!!(a&&a.$classData&&a.$classData.m.kM)}c.$classData=g({kM:0},!1,"org.nlogo.core.prim.etc._first",{kM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function sL(){this.p=this.g=this.f=null;this.a=0}sL.prototype=new l;sL.prototype.constructor=sL;c=sL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_follow"};c.v=function(){return 0};c.o=function(a){return UAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[pj(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 126");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 126");return this.g};function UAa(a){return!!(a&&a.$classData&&a.$classData.m.mM)}c.$classData=g({mM:0},!1,"org.nlogo.core.prim.etc._follow",{mM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function tL(){this.p=this.g=this.f=null;this.a=0}tL.prototype=new l;tL.prototype.constructor=tL;c=tL.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_followme"};c.v=function(){return 0};c.o=function(a){return Vza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 346");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 346");return this.g};
+function Vza(a){return!!(a&&a.$classData&&a.$classData.m.nM)}c.$classData=g({nM:0},!1,"org.nlogo.core.prim.etc._followme",{nM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function uL(){this.p=this.g=this.f=null;this.a=0}uL.prototype=new l;uL.prototype.constructor=uL;c=uL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_foreach"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.tB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Si()|Zi(A()),tj(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(new H).i(2),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 351");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 351");return this.g};c.$classData=g({tB:0},!1,"org.nlogo.core.prim.etc._foreach",{tB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function lK(){this.p=this.g=this.f=null;this.a=0}lK.prototype=new l;lK.prototype.constructor=lK;c=lK.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_foreverbuttonend"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.oM)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();A();var e=C();A();return qc(A(),a,b,d,"OTPL",e,!1,!1)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 359");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 359");return this.g};
+c.$classData=g({oM:0},!1,"org.nlogo.core.prim.etc._foreverbuttonend",{oM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function vL(){this.p=this.g=this.f=null;this.a=0}vL.prototype=new l;vL.prototype.constructor=vL;c=vL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hidelink"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.uB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"---L",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 369");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 369");return this.g};c.$classData=g({uB:0},!1,"org.nlogo.core.prim.etc._hidelink",{uB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function wL(){this.p=this.g=this.f=null;this.a=0}wL.prototype=new l;wL.prototype.constructor=wL;c=wL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hideturtle"};c.v=function(){return 0};
+c.o=function(a){return IDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 374");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 374");return this.g};function IDa(a){return!!(a&&a.$classData&&a.$classData.m.rM)}c.$classData=g({rM:0},!1,"org.nlogo.core.prim.etc._hideturtle",{rM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function yL(){this.p=this.g=this.f=null;this.a=0}yL.prototype=new l;yL.prototype.constructor=yL;c=yL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_home"};c.v=function(){return 0};c.o=function(a){return Wza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 379");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 379");return this.g};function Wza(a){return!!(a&&a.$classData&&a.$classData.m.tM)}c.$classData=g({tM:0},!1,"org.nlogo.core.prim.etc._home",{tM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function YG(){this.p=this.g=this.f=null;this.a=0}YG.prototype=new l;YG.prototype.constructor=YG;c=YG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hsb"};
+c.v=function(){return 0};c.o=function(a){return XCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 146");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 146");return this.g};
+function XCa(a){return!!(a&&a.$classData&&a.$classData.m.uM)}c.$classData=g({uM:0},!1,"org.nlogo.core.prim.etc._hsb",{uM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function PL(){this.p=this.g=this.f=null;this.a=0}PL.prototype=new l;PL.prototype.constructor=PL;c=PL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_if"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.vB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Xi(A()),uj(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 384");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 384");return this.g};c.$classData=g({vB:0},!1,"org.nlogo.core.prim.etc._if",{vB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function QL(){this.p=this.g=this.f=null;this.a=0}QL.prototype=new l;QL.prototype.constructor=QL;c=QL.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_ifelse"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.wB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=A();x();var b=[Xi(A()),uj(A())|Xi(A())|Si(),uj(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(new H).i(3),(new H).i(2),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 389");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 389");return this.g};c.$classData=g({wB:0},!1,"org.nlogo.core.prim.etc._ifelse",{wB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function mK(){this.p=this.g=this.f=null;this.a=0}mK.prototype=new l;mK.prototype.constructor=mK;c=mK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_ignore"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.yB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 410");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 410");return this.g};
+c.$classData=g({yB:0},!1,"org.nlogo.core.prim.etc._ignore",{yB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function RL(){this.p=this.g=this.f=null;this.a=0}RL.prototype=new l;RL.prototype.constructor=RL;c=RL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_importdrawing"};c.v=function(){return 0};c.o=function(a){return lBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 152");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 152");return this.g};function lBa(a){return!!(a&&a.$classData&&a.$classData.m.vM)}c.$classData=g({vM:0},!1,"org.nlogo.core.prim.etc._importdrawing",{vM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function SL(){this.p=this.g=this.f=null;this.a=0}SL.prototype=new l;SL.prototype.constructor=SL;c=SL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_importpatchcolors"};
+c.v=function(){return 0};c.o=function(a){return KDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 415");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 415");return this.g};
+function KDa(a){return!!(a&&a.$classData&&a.$classData.m.wM)}c.$classData=g({wM:0},!1,"org.nlogo.core.prim.etc._importpatchcolors",{wM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function TL(){this.p=this.g=this.f=null;this.a=0}TL.prototype=new l;TL.prototype.constructor=TL;c=TL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_importpcolorsrgb"};c.v=function(){return 0};c.o=function(a){return LDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 158");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 158");return this.g};function LDa(a){return!!(a&&a.$classData&&a.$classData.m.xM)}c.$classData=g({xM:0},!1,"org.nlogo.core.prim.etc._importpcolorsrgb",{xM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function UL(){this.p=this.g=this.f=null;this.a=0}UL.prototype=new l;
+UL.prototype.constructor=UL;c=UL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_importworld"};c.v=function(){return 0};c.o=function(a){return MDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 164");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 164");return this.g};
+function MDa(a){return!!(a&&a.$classData&&a.$classData.m.yM)}c.$classData=g({yM:0},!1,"org.nlogo.core.prim.etc._importworld",{yM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function gH(){this.p=this.g=this.f=null;this.a=0}gH.prototype=new l;gH.prototype.constructor=gH;c=gH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_incone"};c.v=function(){return 0};c.o=function(a){return HBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=aj(A())|nj(A());x();var b=[M(A()),M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=aj(A())|nj(A()),e=2+z()|0;A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 170");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 170");return this.g};function HBa(a){return!!(a&&a.$classData&&a.$classData.m.zM)}c.$classData=g({zM:0},!1,"org.nlogo.core.prim.etc._incone",{zM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function gF(){this.p=this.g=this.f=this.la=null;this.a=0}gF.prototype=new l;gF.prototype.constructor=gF;c=gF.prototype;c.b=function(){gF.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.m.zB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Vi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Vi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 31");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 31");return this.g};c.$classData=g({zB:0},!1,"org.nlogo.core.prim.etc._inlinkfrom",{zB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function hF(){this.p=this.g=this.f=this.la=null;this.a=0}hF.prototype=new l;hF.prototype.constructor=hF;
+c=hF.prototype;c.b=function(){hF.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.m.AB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Vi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 39");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 39");return this.g};c.$classData=g({AB:0},!1,"org.nlogo.core.prim.etc._inlinkneighbor",{AB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function iF(){this.p=this.g=this.f=this.la=null;this.a=0}iF.prototype=new l;iF.prototype.constructor=iF;c=iF.prototype;
+c.b=function(){iF.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.m.BB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=$i(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 47");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 47");return this.g};c.$classData=g({BB:0},!1,"org.nlogo.core.prim.etc._inlinkneighbors",{BB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function VL(){this.p=this.g=this.f=null;this.a=0}VL.prototype=new l;VL.prototype.constructor=VL;c=VL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_inspect"};
+c.v=function(){return 0};c.o=function(a){return DAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Vi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 427");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 427");return this.g};
+function DAa(a){return!!(a&&a.$classData&&a.$classData.m.BM)}c.$classData=g({BM:0},!1,"org.nlogo.core.prim.etc._inspect",{BM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function jF(){this.p=this.g=this.f=this.la=null;this.a=0}jF.prototype=new l;jF.prototype.constructor=jF;c=jF.prototype;c.u=function(){return"_isbreed"};c.v=function(){return 1};c.o=function(a){return this===a?!0:nEa(a)?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 54");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 54");return this.g};function nEa(a){return!!(a&&a.$classData&&a.$classData.m.IM)}c.$classData=g({IM:0},!1,"org.nlogo.core.prim.etc._isbreed",{IM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function AH(){this.p=this.g=this.f=null;this.a=0}AH.prototype=new l;AH.prototype.constructor=AH;c=AH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_item"};
+c.v=function(){return 0};c.o=function(a){return PBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=nc(),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 179");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 179");return this.g};
+function PBa(a){return!!(a&&a.$classData&&a.$classData.m.UM)}c.$classData=g({UM:0},!1,"org.nlogo.core.prim.etc._item",{UM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function BH(){this.p=this.g=this.f=null;this.a=0}BH.prototype=new l;BH.prototype.constructor=BH;c=BH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_last"};c.v=function(){return 0};c.o=function(a){return QBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=nc(),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 185");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 185");return this.g};function QBa(a){return!!(a&&a.$classData&&a.$classData.m.VM)}c.$classData=g({VM:0},!1,"org.nlogo.core.prim.etc._last",{VM:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function XL(){this.p=this.g=this.f=null;this.a=0}XL.prototype=new l;XL.prototype.constructor=XL;c=XL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_layoutcircle"};c.v=function(){return 0};c.o=function(a){return ZAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=A();x();var b=[aj(A())|Zi(A()),M(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 191");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 191");return this.g};function ZAa(a){return!!(a&&a.$classData&&a.$classData.m.WM)}c.$classData=g({WM:0},!1,"org.nlogo.core.prim.etc._layoutcircle",{WM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function YL(){this.p=this.g=this.f=null;this.a=0}YL.prototype=new l;YL.prototype.constructor=YL;c=YL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_layoutradial"};
+c.v=function(){return 0};c.o=function(a){return $Aa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[aj(A()),oj(A()),pj(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 196");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 196");return this.g};
+function $Aa(a){return!!(a&&a.$classData&&a.$classData.m.XM)}c.$classData=g({XM:0},!1,"org.nlogo.core.prim.etc._layoutradial",{XM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ZL(){this.p=this.g=this.f=null;this.a=0}ZL.prototype=new l;ZL.prototype.constructor=ZL;c=ZL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_layoutspring"};c.v=function(){return 0};c.o=function(a){return YAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[aj(A()),oj(A()),M(A()),M(A()),M(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 201");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 201");return this.g};function YAa(a){return!!(a&&a.$classData&&a.$classData.m.YM)}c.$classData=g({YM:0},!1,"org.nlogo.core.prim.etc._layoutspring",{YM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function $L(){this.p=this.g=this.f=null;this.a=0}$L.prototype=new l;$L.prototype.constructor=$L;c=$L.prototype;c.b=function(){L(this);return this};c.u=function(){return"_layouttutte"};c.v=function(){return 0};c.o=function(a){return aBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=A();x();var b=[aj(A()),oj(A()),M(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 207");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 207");return this.g};function aBa(a){return!!(a&&a.$classData&&a.$classData.m.ZM)}c.$classData=g({ZM:0},!1,"org.nlogo.core.prim.etc._layouttutte",{ZM:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function aM(){this.p=this.g=this.f=null;this.a=0}aM.prototype=new l;aM.prototype.constructor=aM;c=aM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_left"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.CB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 534");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 534");return this.g};
+c.$classData=g({CB:0},!1,"org.nlogo.core.prim.etc._left",{CB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function DH(){this.p=this.g=this.f=null;this.a=0}DH.prototype=new l;DH.prototype.constructor=DH;c=DH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_link"};c.v=function(){return 0};c.o=function(a){return xDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=rj(A())|Wi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 540");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 540");return this.g};function xDa(a){return!!(a&&a.$classData&&a.$classData.m.bN)}c.$classData=g({bN:0},!1,"org.nlogo.core.prim.etc._link",{bN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function kF(){this.p=this.g=this.f=this.la=null;this.a=0}kF.prototype=new l;
+kF.prototype.constructor=kF;c=kF.prototype;c.u=function(){return"_linkbreed"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.DB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=oj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 60");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 60");return this.g};c.$classData=g({DB:0},!1,"org.nlogo.core.prim.etc._linkbreed",{DB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function lF(){this.p=this.g=this.f=this.la=null;this.a=0}lF.prototype=new l;lF.prototype.constructor=lF;c=lF.prototype;c.u=function(){return"_linkbreedsingular"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.EB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=rj(A())|Wi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 65");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 65");return this.g};c.$classData=g({EB:0},!1,"org.nlogo.core.prim.etc._linkbreedsingular",{EB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function oK(){this.p=this.g=this.f=null;this.a=0}oK.prototype=new l;oK.prototype.constructor=oK;c=oK.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_linkcode"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.cN)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();return qc(A(),a,b,d,"---L",e,!1,!1)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 546");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 546");return this.g};
+c.$classData=g({cN:0},!1,"org.nlogo.core.prim.etc._linkcode",{cN:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function EH(){this.p=this.g=this.f=null;this.a=0}EH.prototype=new l;EH.prototype.constructor=EH;c=EH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_linkheading"};c.v=function(){return 0};c.o=function(a){return nBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 226");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 226");return this.g};function nBa(a){return!!(a&&a.$classData&&a.$classData.m.dN)}c.$classData=g({dN:0},!1,"org.nlogo.core.prim.etc._linkheading",{dN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function FH(){this.p=this.g=this.f=null;this.a=0}FH.prototype=new l;FH.prototype.constructor=FH;c=FH.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_linklength"};c.v=function(){return 0};c.o=function(a){return oBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 552");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 552");return this.g};
+function oBa(a){return!!(a&&a.$classData&&a.$classData.m.eN)}c.$classData=g({eN:0},!1,"org.nlogo.core.prim.etc._linklength",{eN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function mF(){this.p=this.g=this.f=this.la=null;this.a=0}mF.prototype=new l;mF.prototype.constructor=mF;c=mF.prototype;c.b=function(){mF.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.m.FB?this.la===a.la:!1};
+c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Vi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 71");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 71");return this.g};c.$classData=g({FB:0},!1,"org.nlogo.core.prim.etc._linkneighbor",{FB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function nF(){this.p=this.g=this.f=this.la=null;this.a=0}nF.prototype=new l;nF.prototype.constructor=nF;c=nF.prototype;c.b=function(){nF.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.m.GB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=$i(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 79");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 79");return this.g};c.$classData=g({GB:0},!1,"org.nlogo.core.prim.etc._linkneighbors",{GB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function IH(){this.p=this.g=this.f=null;this.a=0}IH.prototype=new l;IH.prototype.constructor=IH;c=IH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_links"};c.v=function(){return 0};
+c.o=function(a){return fDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=oj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 558");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 558");return this.g};
+function fDa(a){return!!(a&&a.$classData&&a.$classData.m.fN)}c.$classData=g({fN:0},!1,"org.nlogo.core.prim.etc._links",{fN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function GH(){this.p=this.g=this.f=null;this.a=0}GH.prototype=new l;GH.prototype.constructor=GH;c=GH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_linkset"};c.v=function(){return 0};c.o=function(a){return rDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Si()|rj(A())|oj(A())|Wi(A())|Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=oj(A()),d=(new H).i(1),e=(new H).i(0),f=z();A();var h=B();A();A();A();var k=C();A();return D(new F,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 232");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 232");return this.g};function rDa(a){return!!(a&&a.$classData&&a.$classData.m.gN)}c.$classData=g({gN:0},!1,"org.nlogo.core.prim.etc._linkset",{gN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function HH(){this.p=this.g=this.f=null;this.a=0}HH.prototype=new l;HH.prototype.constructor=HH;c=HH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_linkshapes"};c.v=function(){return 0};c.o=function(a){return QDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=Zi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 563");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 563");return this.g};function QDa(a){return!!(a&&a.$classData&&a.$classData.m.hN)}c.$classData=g({hN:0},!1,"org.nlogo.core.prim.etc._linkshapes",{hN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function oF(){this.p=this.g=this.f=this.la=null;this.a=0}oF.prototype=new l;oF.prototype.constructor=oF;c=oF.prototype;
+c.b=function(){oF.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.m.HB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Vi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=rj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 86");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 86");return this.g};c.$classData=g({HB:0},!1,"org.nlogo.core.prim.etc._linkwith",{HB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function bM(){this.p=this.g=this.f=null;this.a=0}bM.prototype=new l;bM.prototype.constructor=bM;c=bM.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_loop"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.IB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[uj(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 568");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 568");return this.g};
+c.$classData=g({IB:0},!1,"org.nlogo.core.prim.etc._loop",{IB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function NH(){this.p=this.g=this.f=null;this.a=0}NH.prototype=new l;NH.prototype.constructor=NH;c=NH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_map"};c.v=function(){return 0};c.o=function(a){return iDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[sj(A()),Si()|Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=(new H).i(2),e=z();A();var f=B();A();var h=C();A();A();A();var k=C();A();return D(new F,e,f,a,b,d,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 579");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 579");return this.g};function iDa(a){return!!(a&&a.$classData&&a.$classData.m.lN)}c.$classData=g({lN:0},!1,"org.nlogo.core.prim.etc._map",{lN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function PH(){this.p=this.g=this.f=null;this.a=0}PH.prototype=new l;PH.prototype.constructor=PH;
+c=PH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_maxnof"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.JB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),$i(A()),yj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=$i(A()),d=md().Uc("?"),e=z();A();var f=B();A();var h=C();A();var k=C();A();A();return D(new F,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 259");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 259");return this.g};c.$classData=g({JB:0},!1,"org.nlogo.core.prim.etc._maxnof",{JB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function QH(){this.p=this.g=this.f=null;this.a=0}QH.prototype=new l;QH.prototype.constructor=QH;c=QH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_maxoneof"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.KB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[$i(A()),yj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Vi(A()),d=md().Uc("?"),e=z();A();var f=B();A();var h=C();A();var k=C();A();A();return D(new F,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 267");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 267");return this.g};
+c.$classData=g({KB:0},!1,"org.nlogo.core.prim.etc._maxoneof",{KB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function RH(){this.p=this.g=this.f=null;this.a=0}RH.prototype=new l;RH.prototype.constructor=RH;c=RH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_maxpxcor"};c.v=function(){return 0};c.o=function(a){return RDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 586");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 586");return this.g};function RDa(a){return!!(a&&a.$classData&&a.$classData.m.nN)}c.$classData=g({nN:0},!1,"org.nlogo.core.prim.etc._maxpxcor",{nN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function SH(){this.p=this.g=this.f=null;this.a=0}SH.prototype=new l;SH.prototype.constructor=SH;c=SH.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_maxpycor"};c.v=function(){return 0};c.o=function(a){return SDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 591");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 591");return this.g};
+function SDa(a){return!!(a&&a.$classData&&a.$classData.m.oN)}c.$classData=g({oN:0},!1,"org.nlogo.core.prim.etc._maxpycor",{oN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function UH(){this.p=this.g=this.f=null;this.a=0}UH.prototype=new l;UH.prototype.constructor=UH;c=UH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_median"};c.v=function(){return 0};c.o=function(a){return VBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 281");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 281");return this.g};function VBa(a){return!!(a&&a.$classData&&a.$classData.m.qN)}c.$classData=g({qN:0},!1,"org.nlogo.core.prim.etc._median",{qN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function VH(){this.p=this.g=this.f=null;this.a=0}VH.prototype=new l;VH.prototype.constructor=VH;c=VH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_member"};c.v=function(){return 0};c.o=function(a){return WBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[nc(),Zi(A())|Yi(A())|$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 287");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 287");return this.g};function WBa(a){return!!(a&&a.$classData&&a.$classData.m.rN)}c.$classData=g({rN:0},!1,"org.nlogo.core.prim.etc._member",{rN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function XH(){this.p=this.g=this.f=null;this.a=0}XH.prototype=new l;XH.prototype.constructor=XH;c=XH.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_minnof"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.LB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),$i(A()),yj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=$i(A()),d=md().Uc("?"),e=z();A();var f=B();A();var h=C();A();var k=C();A();A();return D(new F,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 299");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 299");return this.g};c.$classData=g({LB:0},!1,"org.nlogo.core.prim.etc._minnof",{LB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function YH(){this.p=this.g=this.f=null;this.a=0}YH.prototype=new l;YH.prototype.constructor=YH;c=YH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_minoneof"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.MB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[$i(A()),yj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Vi(A()),d=md().Uc("?"),e=z();A();var f=B();A();var h=C();A();var k=C();A();A();return D(new F,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 307");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 307");return this.g};
+c.$classData=g({MB:0},!1,"org.nlogo.core.prim.etc._minoneof",{MB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ZH(){this.p=this.g=this.f=null;this.a=0}ZH.prototype=new l;ZH.prototype.constructor=ZH;c=ZH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_minpxcor"};c.v=function(){return 0};c.o=function(a){return TDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 596");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 596");return this.g};function TDa(a){return!!(a&&a.$classData&&a.$classData.m.tN)}c.$classData=g({tN:0},!1,"org.nlogo.core.prim.etc._minpxcor",{tN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function $H(){this.p=this.g=this.f=null;this.a=0}$H.prototype=new l;$H.prototype.constructor=$H;c=$H.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_minpycor"};c.v=function(){return 0};c.o=function(a){return UDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 601");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 601");return this.g};
+function UDa(a){return!!(a&&a.$classData&&a.$classData.m.uN)}c.$classData=g({uN:0},!1,"org.nlogo.core.prim.etc._minpycor",{uN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function pK(){this.p=this.g=this.f=null;this.a=0}pK.prototype=new l;pK.prototype.constructor=pK;c=pK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_mkdir"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.vN)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 606");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 606");return this.g};c.$classData=g({vN:0},!1,"org.nlogo.core.prim.etc._mkdir",{vN:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function cI(){this.p=this.g=this.f=null;this.a=0}cI.prototype=new l;cI.prototype.constructor=cI;c=cI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_mousedown"};
+c.v=function(){return 0};c.o=function(a){return wCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 611");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 611");return this.g};
+function wCa(a){return!!(a&&a.$classData&&a.$classData.m.yN)}c.$classData=g({yN:0},!1,"org.nlogo.core.prim.etc._mousedown",{yN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function dI(){this.p=this.g=this.f=null;this.a=0}dI.prototype=new l;dI.prototype.constructor=dI;c=dI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_mouseinside"};c.v=function(){return 0};c.o=function(a){return xCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 616");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 616");return this.g};function xCa(a){return!!(a&&a.$classData&&a.$classData.m.zN)}c.$classData=g({zN:0},!1,"org.nlogo.core.prim.etc._mouseinside",{zN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function eI(){this.p=this.g=this.f=null;this.a=0}eI.prototype=new l;
+eI.prototype.constructor=eI;c=eI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_mousexcor"};c.v=function(){return 0};c.o=function(a){return yCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 621");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 621");return this.g};function yCa(a){return!!(a&&a.$classData&&a.$classData.m.AN)}c.$classData=g({AN:0},!1,"org.nlogo.core.prim.etc._mousexcor",{AN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function fI(){this.p=this.g=this.f=null;this.a=0}fI.prototype=new l;fI.prototype.constructor=fI;c=fI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_mouseycor"};
+c.v=function(){return 0};c.o=function(a){return zCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 626");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 626");return this.g};
+function zCa(a){return!!(a&&a.$classData&&a.$classData.m.BN)}c.$classData=g({BN:0},!1,"org.nlogo.core.prim.etc._mouseycor",{BN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function cM(){this.p=this.g=this.f=null;this.a=0}cM.prototype=new l;cM.prototype.constructor=cM;c=cM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_moveto"};c.v=function(){return 0};c.o=function(a){return Xza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[pj(A())|qj(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 329");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 329");return this.g};function Xza(a){return!!(a&&a.$classData&&a.$classData.m.CN)}c.$classData=g({CN:0},!1,"org.nlogo.core.prim.etc._moveto",{CN:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function pF(){this.p=this.g=this.f=this.la=null;this.a=0}pF.prototype=new l;
+pF.prototype.constructor=pF;c=pF.prototype;c.b=function(){pF.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.m.NB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=oj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 94");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 94");return this.g};c.$classData=g({NB:0},!1,"org.nlogo.core.prim.etc._myinlinks",{NB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function qF(){this.p=this.g=this.f=this.la=null;this.a=0}qF.prototype=new l;qF.prototype.constructor=qF;c=qF.prototype;c.b=function(){qF.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.m.OB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=oj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 101");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 101");return this.g};c.$classData=g({OB:0},!1,"org.nlogo.core.prim.etc._mylinks",{OB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function rF(){this.p=this.g=this.f=this.la=null;this.a=0}rF.prototype=new l;rF.prototype.constructor=rF;c=rF.prototype;c.b=function(){rF.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.m.PB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=oj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 108");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 108");return this.g};c.$classData=g({PB:0},!1,"org.nlogo.core.prim.etc._myoutlinks",{PB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function gI(){this.p=this.g=this.f=null;this.a=0}gI.prototype=new l;gI.prototype.constructor=gI;c=gI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_myself"};c.v=function(){return 0};
+c.o=function(a){return vBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Vi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-TPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 335");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 335");return this.g};
+function vBa(a){return!!(a&&a.$classData&&a.$classData.m.EN)}c.$classData=g({EN:0},!1,"org.nlogo.core.prim.etc._myself",{EN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function VF(){this.p=this.g=this.f=null;this.a=0}VF.prototype=new l;VF.prototype.constructor=VF;c=VF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_nanotime"};c.v=function(){return 0};c.o=function(a){return CDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 639");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 639");return this.g};function CDa(a){return!!(a&&a.$classData&&a.$classData.m.FN)}c.$classData=g({FN:0},!1,"org.nlogo.core.prim.etc._nanotime",{FN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function oI(){this.p=this.g=this.f=null;this.a=0}oI.prototype=new l;
+oI.prototype.constructor=oI;c=oI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_netlogoapplet"};c.v=function(){return 0};c.o=function(a){return VDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 644");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 644");return this.g};function VDa(a){return!!(a&&a.$classData&&a.$classData.m.GN)}c.$classData=g({GN:0},!1,"org.nlogo.core.prim.etc._netlogoapplet",{GN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function pI(){this.p=this.g=this.f=null;this.a=0}pI.prototype=new l;pI.prototype.constructor=pI;c=pI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_netlogoversion"};
+c.v=function(){return 0};c.o=function(a){return WDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 649");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 649");return this.g};
+function WDa(a){return!!(a&&a.$classData&&a.$classData.m.HN)}c.$classData=g({HN:0},!1,"org.nlogo.core.prim.etc._netlogoversion",{HN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function qI(){this.p=this.g=this.f=null;this.a=0}qI.prototype=new l;qI.prototype.constructor=qI;c=qI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_netlogoweb"};c.v=function(){return 0};c.o=function(a){return XDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 654");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 654");return this.g};function XDa(a){return!!(a&&a.$classData&&a.$classData.m.IN)}c.$classData=g({IN:0},!1,"org.nlogo.core.prim.etc._netlogoweb",{IN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function rI(){this.p=this.g=this.f=null;this.a=0}rI.prototype=new l;rI.prototype.constructor=rI;c=rI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_newseed"};c.v=function(){return 0};c.o=function(a){return kDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 659");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 659");return this.g};function kDa(a){return!!(a&&a.$classData&&a.$classData.m.JN)}c.$classData=g({JN:0},!1,"org.nlogo.core.prim.etc._newseed",{JN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function dM(){this.p=this.g=this.f=null;this.a=0}dM.prototype=new l;dM.prototype.constructor=dM;c=dM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_nodisplay"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.KN)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 664");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 664");return this.g};
+c.$classData=g({KN:0},!1,"org.nlogo.core.prim.etc._nodisplay",{KN:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function kI(){this.p=this.g=this.f=null;this.a=0}kI.prototype=new l;kI.prototype.constructor=kI;c=kI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_nof"};c.v=function(){return 0};c.o=function(a){return ZBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),$i(A())|Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=$i(A())|Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 341");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 341");return this.g};function ZBa(a){return!!(a&&a.$classData&&a.$classData.m.LN)}c.$classData=g({LN:0},!1,"org.nlogo.core.prim.etc._nof",{LN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function sI(){this.p=this.g=this.f=null;this.a=0}sI.prototype=new l;sI.prototype.constructor=sI;c=sI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_nolinks"};c.v=function(){return 0};c.o=function(a){return YDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=oj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 668");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 668");return this.g};function YDa(a){return!!(a&&a.$classData&&a.$classData.m.MN)}c.$classData=g({MN:0},!1,"org.nlogo.core.prim.etc._nolinks",{MN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function tI(){this.p=this.g=this.f=null;this.a=0}tI.prototype=new l;tI.prototype.constructor=tI;c=tI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_nopatches"};
+c.v=function(){return 0};c.o=function(a){return ZDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 673");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 673");return this.g};
+function ZDa(a){return!!(a&&a.$classData&&a.$classData.m.NN)}c.$classData=g({NN:0},!1,"org.nlogo.core.prim.etc._nopatches",{NN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function uI(){this.p=this.g=this.f=null;this.a=0}uI.prototype=new l;uI.prototype.constructor=uI;c=uI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_noturtles"};c.v=function(){return 0};c.o=function(a){return $Da(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=aj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 678");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 678");return this.g};function $Da(a){return!!(a&&a.$classData&&a.$classData.m.ON)}c.$classData=g({ON:0},!1,"org.nlogo.core.prim.etc._noturtles",{ON:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function lI(){this.p=this.g=this.f=null;this.a=0}lI.prototype=new l;
+lI.prototype.constructor=lI;c=lI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_nvalues"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.QB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),sj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 683");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 683");return this.g};c.$classData=g({QB:0},!1,"org.nlogo.core.prim.etc._nvalues",{QB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function qK(){this.p=this.g=this.f=null;this.a=0}qK.prototype=new l;qK.prototype.constructor=qK;c=qK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_observercode"};
+c.v=function(){return 0};c.o=function(a){return HDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();return qc(A(),a,b,d,"O---",e,!1,!1)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 689");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 689");return this.g};
+function HDa(a){return!!(a&&a.$classData&&a.$classData.m.PN)}c.$classData=g({PN:0},!1,"org.nlogo.core.prim.etc._observercode",{PN:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function AI(){this.p=this.g=this.f=null;this.a=0}AI.prototype=new l;AI.prototype.constructor=AI;c=AI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_otherend"};c.v=function(){return 0};c.o=function(a){return wBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Vi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T-L",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 347");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 347");return this.g};function wBa(a){return!!(a&&a.$classData&&a.$classData.m.QN)}c.$classData=g({QN:0},!1,"org.nlogo.core.prim.etc._otherend",{QN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function sF(){this.p=this.g=this.f=this.la=null;this.a=0}sF.prototype=new l;
+sF.prototype.constructor=sF;c=sF.prototype;c.b=function(){sF.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.m.RB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Vi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 115");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 115");return this.g};c.$classData=g({RB:0},!1,"org.nlogo.core.prim.etc._outlinkneighbor",{RB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function tF(){this.p=this.g=this.f=this.la=null;this.a=0}tF.prototype=new l;tF.prototype.constructor=tF;c=tF.prototype;
+c.b=function(){tF.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.m.SB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=$i(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 123");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 123");return this.g};c.$classData=g({SB:0},!1,"org.nlogo.core.prim.etc._outlinkneighbors",{SB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function uF(){this.p=this.g=this.f=this.la=null;this.a=0}uF.prototype=new l;uF.prototype.constructor=uF;c=uF.prototype;c.b=function(){uF.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.m.TB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Vi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Vi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 130");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/breed.scala: 130");return this.g};c.$classData=g({TB:0},!1,"org.nlogo.core.prim.etc._outlinkto",{TB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function BI(){this.p=this.g=this.f=null;this.a=0}BI.prototype=new l;BI.prototype.constructor=BI;c=BI.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_patch"};c.v=function(){return 0};c.o=function(a){return dDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=qj(A())|Wi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 695");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 695");return this.g};
+function dDa(a){return!!(a&&a.$classData&&a.$classData.m.VN)}c.$classData=g({VN:0},!1,"org.nlogo.core.prim.etc._patch",{VN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function CI(){this.p=this.g=this.f=null;this.a=0}CI.prototype=new l;CI.prototype.constructor=CI;c=CI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_patchahead"};c.v=function(){return 0};c.o=function(a){return xBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=qj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 353");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 353");return this.g};function xBa(a){return!!(a&&a.$classData&&a.$classData.m.WN)}c.$classData=g({WN:0},!1,"org.nlogo.core.prim.etc._patchahead",{WN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function EI(){this.p=this.g=this.f=null;this.a=0}EI.prototype=new l;EI.prototype.constructor=EI;c=EI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_patchatheadinganddistance"};c.v=function(){return 0};c.o=function(a){return yBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=qj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 360");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 360");return this.g};function yBa(a){return!!(a&&a.$classData&&a.$classData.m.XN)}c.$classData=g({XN:0},!1,"org.nlogo.core.prim.etc._patchatheadinganddistance",{XN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function rK(){this.p=this.g=this.f=null;this.a=0}rK.prototype=new l;rK.prototype.constructor=rK;c=rK.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_patchcode"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.YN)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();return qc(A(),a,b,d,"--P-",e,!1,!1)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 701");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 701");return this.g};
+c.$classData=g({YN:0},!1,"org.nlogo.core.prim.etc._patchcode",{YN:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function FI(){this.p=this.g=this.f=null;this.a=0}FI.prototype=new l;FI.prototype.constructor=FI;c=FI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_patchhere"};c.v=function(){return 0};c.o=function(a){return zBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=qj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 707");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 707");return this.g};function zBa(a){return!!(a&&a.$classData&&a.$classData.m.ZN)}c.$classData=g({ZN:0},!1,"org.nlogo.core.prim.etc._patchhere",{ZN:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function GI(){this.p=this.g=this.f=null;this.a=0}GI.prototype=new l;GI.prototype.constructor=GI;c=GI.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_patchleftandahead"};c.v=function(){return 0};c.o=function(a){return ABa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=qj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 713");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 713");return this.g};function ABa(a){return!!(a&&a.$classData&&a.$classData.m.$N)}c.$classData=g({$N:0},!1,"org.nlogo.core.prim.etc._patchleftandahead",{$N:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function HI(){this.p=this.g=this.f=null;this.a=0}HI.prototype=new l;HI.prototype.constructor=HI;c=HI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_patchrightandahead"};
+c.v=function(){return 0};c.o=function(a){return BBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=qj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 720");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 720");return this.g};
+function BBa(a){return!!(a&&a.$classData&&a.$classData.m.aO)}c.$classData=g({aO:0},!1,"org.nlogo.core.prim.etc._patchrightandahead",{aO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function II(){this.p=this.g=this.f=null;this.a=0}II.prototype=new l;II.prototype.constructor=II;c=II.prototype;c.b=function(){L(this);return this};c.u=function(){return"_patchset"};c.v=function(){return 0};c.o=function(a){return sDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Si()|qj(A())|nj(A())|Wi(A())|Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=nj(A()),d=(new H).i(1),e=(new H).i(0),f=z();A();var h=B();A();A();A();var k=C();A();return D(new F,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 367");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 367");return this.g};
+function sDa(a){return!!(a&&a.$classData&&a.$classData.m.bO)}c.$classData=g({bO:0},!1,"org.nlogo.core.prim.etc._patchset",{bO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function JI(){this.p=this.g=this.f=null;this.a=0}JI.prototype=new l;JI.prototype.constructor=JI;c=JI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_patchsize"};c.v=function(){return 0};c.o=function(a){return aEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 727");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 727");return this.g};function aEa(a){return!!(a&&a.$classData&&a.$classData.m.cO)}c.$classData=g({cO:0},!1,"org.nlogo.core.prim.etc._patchsize",{cO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function iM(){this.p=this.g=this.f=null;this.a=0}iM.prototype=new l;
+iM.prototype.constructor=iM;c=iM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_pendown"};c.v=function(){return 0};c.o=function(a){return Yza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 732");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 732");return this.g};
+function Yza(a){return!!(a&&a.$classData&&a.$classData.m.dO)}c.$classData=g({dO:0},!1,"org.nlogo.core.prim.etc._pendown",{dO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function jM(){this.p=this.g=this.f=null;this.a=0}jM.prototype=new l;jM.prototype.constructor=jM;c=jM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_penerase"};c.v=function(){return 0};c.o=function(a){return Zza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 737");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 737");return this.g};function Zza(a){return!!(a&&a.$classData&&a.$classData.m.eO)}c.$classData=g({eO:0},!1,"org.nlogo.core.prim.etc._penerase",{eO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function kM(){this.p=this.g=this.f=null;this.a=0}kM.prototype=new l;kM.prototype.constructor=kM;c=kM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_penup"};
+c.v=function(){return 0};c.o=function(a){return $za(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 742");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 742");return this.g};
+function $za(a){return!!(a&&a.$classData&&a.$classData.m.fO)}c.$classData=g({fO:0},!1,"org.nlogo.core.prim.etc._penup",{fO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function RI(){this.p=this.g=this.f=null;this.a=0}RI.prototype=new l;RI.prototype.constructor=RI;c=RI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_position"};c.v=function(){return 0};c.o=function(a){return $Ba(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc(),Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A())|Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 375");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 375");return this.g};function $Ba(a){return!!(a&&a.$classData&&a.$classData.m.uO)}c.$classData=g({uO:0},!1,"org.nlogo.core.prim.etc._position",{uO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function WF(){this.p=this.g=this.f=null;this.a=0}WF.prototype=new l;WF.prototype.constructor=WF;c=WF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_processors"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.yO)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 769");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 769");return this.g};c.$classData=g({yO:0},!1,"org.nlogo.core.prim.etc._processors",{yO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function uK(){this.p=this.g=this.f=null;this.a=0}uK.prototype=new l;uK.prototype.constructor=uK;c=uK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_pwd"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.zO)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 774");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 774");return this.g};
+c.$classData=g({zO:0},!1,"org.nlogo.core.prim.etc._pwd",{zO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function UI(){this.p=this.g=this.f=null;this.a=0}UI.prototype=new l;UI.prototype.constructor=UI;c=UI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randomexponential"};c.v=function(){return 0};c.o=function(a){return mDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 779");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 779");return this.g};function mDa(a){return!!(a&&a.$classData&&a.$classData.m.AO)}c.$classData=g({AO:0},!1,"org.nlogo.core.prim.etc._randomexponential",{AO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function VI(){this.p=this.g=this.f=null;this.a=0}VI.prototype=new l;
+VI.prototype.constructor=VI;c=VI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randomfloat"};c.v=function(){return 0};c.o=function(a){return nDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 785");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 785");return this.g};function nDa(a){return!!(a&&a.$classData&&a.$classData.m.BO)}c.$classData=g({BO:0},!1,"org.nlogo.core.prim.etc._randomfloat",{BO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function WI(){this.p=this.g=this.f=null;this.a=0}WI.prototype=new l;WI.prototype.constructor=WI;c=WI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randomgamma"};
+c.v=function(){return 0};c.o=function(a){return qDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 381");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 381");return this.g};
+function qDa(a){return!!(a&&a.$classData&&a.$classData.m.CO)}c.$classData=g({CO:0},!1,"org.nlogo.core.prim.etc._randomgamma",{CO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function XI(){this.p=this.g=this.f=null;this.a=0}XI.prototype=new l;XI.prototype.constructor=XI;c=XI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randomnormal"};c.v=function(){return 0};c.o=function(a){return oDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 791");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 791");return this.g};function oDa(a){return!!(a&&a.$classData&&a.$classData.m.DO)}c.$classData=g({DO:0},!1,"org.nlogo.core.prim.etc._randomnormal",{DO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function YI(){this.p=this.g=this.f=null;this.a=0}YI.prototype=new l;YI.prototype.constructor=YI;c=YI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randompoisson"};c.v=function(){return 0};c.o=function(a){return pDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 797");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 797");return this.g};function pDa(a){return!!(a&&a.$classData&&a.$classData.m.EO)}c.$classData=g({EO:0},!1,"org.nlogo.core.prim.etc._randompoisson",{EO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ZI(){this.p=this.g=this.f=null;this.a=0}ZI.prototype=new l;ZI.prototype.constructor=ZI;c=ZI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randompxcor"};
+c.v=function(){return 0};c.o=function(a){return bEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 803");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 803");return this.g};
+function bEa(a){return!!(a&&a.$classData&&a.$classData.m.FO)}c.$classData=g({FO:0},!1,"org.nlogo.core.prim.etc._randompxcor",{FO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function $I(){this.p=this.g=this.f=null;this.a=0}$I.prototype=new l;$I.prototype.constructor=$I;c=$I.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randompycor"};c.v=function(){return 0};c.o=function(a){return cEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 808");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 808");return this.g};function cEa(a){return!!(a&&a.$classData&&a.$classData.m.GO)}c.$classData=g({GO:0},!1,"org.nlogo.core.prim.etc._randompycor",{GO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function rM(){this.p=this.g=this.f=null;this.a=0}rM.prototype=new l;
+rM.prototype.constructor=rM;c=rM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randomseed"};c.v=function(){return 0};c.o=function(a){return TAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[M(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 813");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 813");return this.g};
+function TAa(a){return!!(a&&a.$classData&&a.$classData.m.HO)}c.$classData=g({HO:0},!1,"org.nlogo.core.prim.etc._randomseed",{HO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function XF(){this.p=this.g=this.f=null;this.a=0}XF.prototype=new l;XF.prototype.constructor=XF;c=XF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randomstate"};c.v=function(){return 0};c.o=function(a){return lDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 818");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 818");return this.g};function lDa(a){return!!(a&&a.$classData&&a.$classData.m.IO)}c.$classData=g({IO:0},!1,"org.nlogo.core.prim.etc._randomstate",{IO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function aJ(){this.p=this.g=this.f=null;this.a=0}aJ.prototype=new l;
+aJ.prototype.constructor=aJ;c=aJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randomxcor"};c.v=function(){return 0};c.o=function(a){return dEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 823");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 823");return this.g};function dEa(a){return!!(a&&a.$classData&&a.$classData.m.JO)}c.$classData=g({JO:0},!1,"org.nlogo.core.prim.etc._randomxcor",{JO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function bJ(){this.p=this.g=this.f=null;this.a=0}bJ.prototype=new l;bJ.prototype.constructor=bJ;c=bJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_randomycor"};
+c.v=function(){return 0};c.o=function(a){return eEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 828");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 828");return this.g};
+function eEa(a){return!!(a&&a.$classData&&a.$classData.m.KO)}c.$classData=g({KO:0},!1,"org.nlogo.core.prim.etc._randomycor",{KO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function dJ(){this.p=this.g=this.f=null;this.a=0}dJ.prototype=new l;dJ.prototype.constructor=dJ;c=dJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_readfromstring"};c.v=function(){return 0};c.o=function(a){return FDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=mr(),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 841");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 841");return this.g};function FDa(a){return!!(a&&a.$classData&&a.$classData.m.LO)}c.$classData=g({LO:0},!1,"org.nlogo.core.prim.etc._readfromstring",{LO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function eJ(){this.p=this.g=this.f=null;this.a=0}eJ.prototype=new l;eJ.prototype.constructor=eJ;c=eJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_reduce"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.VB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[sj(A()),Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=nc(),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 847");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 847");return this.g};c.$classData=g({VB:0},!1,"org.nlogo.core.prim.etc._reduce",{VB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function YF(){this.p=this.g=this.f=null;this.a=0}YF.prototype=new l;YF.prototype.constructor=YF;c=YF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_reference"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.MO)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Ti()],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 853");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 853");return this.g};
+c.$classData=g({MO:0},!1,"org.nlogo.core.prim.etc._reference",{MO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function vK(){this.p=this.g=this.f=null;this.a=0}vK.prototype=new l;vK.prototype.constructor=vK;c=vK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_reloadextensions"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.NO)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"OTPL",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 859");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 859");return this.g};c.$classData=g({NO:0},!1,"org.nlogo.core.prim.etc._reloadextensions",{NO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function gJ(){this.p=this.g=this.f=null;this.a=0}gJ.prototype=new l;gJ.prototype.constructor=gJ;c=gJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_remove"};c.v=function(){return 0};
+c.o=function(a){return cCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc(),Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A())|Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 393");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 393");return this.g};
+function cCa(a){return!!(a&&a.$classData&&a.$classData.m.PO)}c.$classData=g({PO:0},!1,"org.nlogo.core.prim.etc._remove",{PO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function hJ(){this.p=this.g=this.f=null;this.a=0}hJ.prototype=new l;hJ.prototype.constructor=hJ;c=hJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_removeduplicates"};c.v=function(){return 0};c.o=function(a){return aCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 399");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 399");return this.g};function aCa(a){return!!(a&&a.$classData&&a.$classData.m.QO)}c.$classData=g({QO:0},!1,"org.nlogo.core.prim.etc._removeduplicates",{QO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function iJ(){this.p=this.g=this.f=null;this.a=0}iJ.prototype=new l;iJ.prototype.constructor=iJ;c=iJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_removeitem"};c.v=function(){return 0};c.o=function(a){return bCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A())|Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 405");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 405");return this.g};function bCa(a){return!!(a&&a.$classData&&a.$classData.m.RO)}c.$classData=g({RO:0},!1,"org.nlogo.core.prim.etc._removeitem",{RO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function jJ(){this.p=this.g=this.f=null;this.a=0}jJ.prototype=new l;jJ.prototype.constructor=jJ;c=jJ.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_replaceitem"};c.v=function(){return 0};c.o=function(a){return dCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),Zi(A())|Yi(A()),nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A())|Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 411");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 411");return this.g};function dCa(a){return!!(a&&a.$classData&&a.$classData.m.SO)}c.$classData=g({SO:0},!1,"org.nlogo.core.prim.etc._replaceitem",{SO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function uM(){this.p=this.g=this.f=null;this.a=0}uM.prototype=new l;uM.prototype.constructor=uM;c=uM.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_resetperspective"};c.v=function(){return 0};c.o=function(a){return XAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"OTPL",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 864");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 864");return this.g};
+function XAa(a){return!!(a&&a.$classData&&a.$classData.m.TO)}c.$classData=g({TO:0},!1,"org.nlogo.core.prim.etc._resetperspective",{TO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function vM(){this.p=this.g=this.f=null;this.a=0}vM.prototype=new l;vM.prototype.constructor=vM;c=vM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_resetticks"};c.v=function(){return 0};c.o=function(a){return PAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 869");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 869");return this.g};function PAa(a){return!!(a&&a.$classData&&a.$classData.m.UO)}c.$classData=g({UO:0},!1,"org.nlogo.core.prim.etc._resetticks",{UO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function wM(){this.p=this.g=this.f=null;this.a=0}wM.prototype=new l;wM.prototype.constructor=wM;c=wM.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_resettimer"};c.v=function(){return 0};c.o=function(a){return SAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 874");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 874");return this.g};
+function SAa(a){return!!(a&&a.$classData&&a.$classData.m.VO)}c.$classData=g({VO:0},!1,"org.nlogo.core.prim.etc._resettimer",{VO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function xM(){this.p=this.g=this.f=null;this.a=0}xM.prototype=new l;xM.prototype.constructor=xM;c=xM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_resizeworld"};c.v=function(){return 0};c.o=function(a){return NAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A()),M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 417");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 417");return this.g};function NAa(a){return!!(a&&a.$classData&&a.$classData.m.WO)}c.$classData=g({WO:0},!1,"org.nlogo.core.prim.etc._resizeworld",{WO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function kJ(){this.p=this.g=this.f=null;this.a=0}kJ.prototype=new l;
+kJ.prototype.constructor=kJ;c=kJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_reverse"};c.v=function(){return 0};c.o=function(a){return eCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A())|Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 423");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 423");return this.g};function eCa(a){return!!(a&&a.$classData&&a.$classData.m.XO)}c.$classData=g({XO:0},!1,"org.nlogo.core.prim.etc._reverse",{XO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function lJ(){this.p=this.g=this.f=null;this.a=0}lJ.prototype=new l;lJ.prototype.constructor=lJ;c=lJ.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_rgb"};c.v=function(){return 0};c.o=function(a){return YCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 429");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 429");return this.g};function YCa(a){return!!(a&&a.$classData&&a.$classData.m.YO)}c.$classData=g({YO:0},!1,"org.nlogo.core.prim.etc._rgb",{YO:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function yM(){this.p=this.g=this.f=null;this.a=0}yM.prototype=new l;yM.prototype.constructor=yM;c=yM.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_ride"};c.v=function(){return 0};c.o=function(a){return VAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[pj(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 435");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 435");return this.g};
+function VAa(a){return!!(a&&a.$classData&&a.$classData.m.ZO)}c.$classData=g({ZO:0},!1,"org.nlogo.core.prim.etc._ride",{ZO:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function zM(){this.p=this.g=this.f=null;this.a=0}zM.prototype=new l;zM.prototype.constructor=zM;c=zM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_rideme"};c.v=function(){return 0};c.o=function(a){return aAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 878");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 878");return this.g};function aAa(a){return!!(a&&a.$classData&&a.$classData.m.$O)}c.$classData=g({$O:0},!1,"org.nlogo.core.prim.etc._rideme",{$O:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function AM(){this.p=this.g=this.f=null;this.a=0}AM.prototype=new l;AM.prototype.constructor=AM;c=AM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_right"};
+c.v=function(){return 0};c.o=function(a){return bAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 883");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 883");return this.g};
+function bAa(a){return!!(a&&a.$classData&&a.$classData.m.aP)}c.$classData=g({aP:0},!1,"org.nlogo.core.prim.etc._right",{aP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function nJ(){this.p=this.g=this.f=null;this.a=0}nJ.prototype=new l;nJ.prototype.constructor=nJ;c=nJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_runresult"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.WB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Yi(A())|sj(A()),Si()|nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=nc(),d=(new H).i(1),e=z();A();var f=B();A();var h=C();A();A();A();var k=C();A();return D(new F,e,f,a,b,d,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 895");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 895");return this.g};
+c.$classData=g({WB:0},!1,"org.nlogo.core.prim.etc._runresult",{WB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function qJ(){this.p=this.g=this.f=null;this.a=0}qJ.prototype=new l;qJ.prototype.constructor=qJ;c=qJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_self"};c.v=function(){return 0};c.o=function(a){return CBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Vi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-TPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 904");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 904");return this.g};function CBa(a){return!!(a&&a.$classData&&a.$classData.m.dP)}c.$classData=g({dP:0},!1,"org.nlogo.core.prim.etc._self",{dP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function DM(){this.p=this.g=this.f=null;this.a=0}DM.prototype=new l;DM.prototype.constructor=DM;c=DM.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_setcurdir"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.eP)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 910");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 910");return this.g};
+c.$classData=g({eP:0},!1,"org.nlogo.core.prim.etc._setcurdir",{eP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function GM(){this.p=this.g=this.f=null;this.a=0}GM.prototype=new l;GM.prototype.constructor=GM;c=GM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_setdefaultshape"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.XB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[aj(A())|oj(A()),Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 915");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 915");return this.g};c.$classData=g({XB:0},!1,"org.nlogo.core.prim.etc._setdefaultshape",{XB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function wK(){this.p=this.g=this.f=null;this.a=0}wK.prototype=new l;wK.prototype.constructor=wK;c=wK.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_setlinethickness"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.iP)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 924");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 924");return this.g};
+c.$classData=g({iP:0},!1,"org.nlogo.core.prim.etc._setlinethickness",{iP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function IM(){this.p=this.g=this.f=null;this.a=0}IM.prototype=new l;IM.prototype.constructor=IM;c=IM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_setpatchsize"};c.v=function(){return 0};c.o=function(a){return OAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 447");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 447");return this.g};function OAa(a){return!!(a&&a.$classData&&a.$classData.m.jP)}c.$classData=g({jP:0},!1,"org.nlogo.core.prim.etc._setpatchsize",{jP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function PM(){this.p=this.g=this.f=null;this.a=0}PM.prototype=new l;PM.prototype.constructor=PM;c=PM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_setxy"};
+c.v=function(){return 0};c.o=function(a){return cAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 453");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 453");return this.g};
+function cAa(a){return!!(a&&a.$classData&&a.$classData.m.qP)}c.$classData=g({qP:0},!1,"org.nlogo.core.prim.etc._setxy",{qP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function rJ(){this.p=this.g=this.f=null;this.a=0}rJ.prototype=new l;rJ.prototype.constructor=rJ;c=rJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_shadeof"};c.v=function(){return 0};c.o=function(a){return $Ca(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 459");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 459");return this.g};function $Ca(a){return!!(a&&a.$classData&&a.$classData.m.rP)}c.$classData=g({rP:0},!1,"org.nlogo.core.prim.etc._shadeof",{rP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function sJ(){this.p=this.g=this.f=null;this.a=0}sJ.prototype=new l;sJ.prototype.constructor=sJ;c=sJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_shapes"};c.v=function(){return 0};c.o=function(a){return fEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=Zi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 930");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 930");return this.g};function fEa(a){return!!(a&&a.$classData&&a.$classData.m.sP)}c.$classData=g({sP:0},!1,"org.nlogo.core.prim.etc._shapes",{sP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function RM(){this.p=this.g=this.f=null;this.a=0}RM.prototype=new l;RM.prototype.constructor=RM;c=RM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_showlink"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.YB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"---L",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 935");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 935");return this.g};
+c.$classData=g({YB:0},!1,"org.nlogo.core.prim.etc._showlink",{YB:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function SM(){this.p=this.g=this.f=null;this.a=0}SM.prototype=new l;SM.prototype.constructor=SM;c=SM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_showturtle"};c.v=function(){return 0};c.o=function(a){return JDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 940");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 940");return this.g};function JDa(a){return!!(a&&a.$classData&&a.$classData.m.uP)}c.$classData=g({uP:0},!1,"org.nlogo.core.prim.etc._showturtle",{uP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function tJ(){this.p=this.g=this.f=null;this.a=0}tJ.prototype=new l;tJ.prototype.constructor=tJ;c=tJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_shuffle"};
+c.v=function(){return 0};c.o=function(a){return fCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 465");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 465");return this.g};
+function fCa(a){return!!(a&&a.$classData&&a.$classData.m.vP)}c.$classData=g({vP:0},!1,"org.nlogo.core.prim.etc._shuffle",{vP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function wJ(){this.p=this.g=this.f=null;this.a=0}wJ.prototype=new l;wJ.prototype.constructor=wJ;c=wJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_sortby"};c.v=function(){return 0};c.o=function(a){return hCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[sj(A()),Zi(A())|$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=md().Uc("?"),e=z();A();var f=B();A();var h=C();A();var k=C();A();A();A();return D(new F,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 951");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 951");return this.g};function hCa(a){return!!(a&&a.$classData&&a.$classData.m.yP)}c.$classData=g({yP:0},!1,"org.nlogo.core.prim.etc._sortby",{yP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function xJ(){this.p=this.g=this.f=null;this.a=0}xJ.prototype=new l;xJ.prototype.constructor=xJ;c=xJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_sorton"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.ZB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[vj(A()),$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=md().Uc("?"),e=z();A();var f=B();A();var h=C();A();var k=C();A();A();A();return D(new F,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 958");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 958");return this.g};c.$classData=g({ZB:0},!1,"org.nlogo.core.prim.etc._sorton",{ZB:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ZF(){this.p=this.g=this.f=null;this.a=0}ZF.prototype=new l;ZF.prototype.constructor=ZF;c=ZF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_stacktrace"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.AP)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 965");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 965");return this.g};
+c.$classData=g({AP:0},!1,"org.nlogo.core.prim.etc._stacktrace",{AP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function TM(){this.p=this.g=this.f=null;this.a=0}TM.prototype=new l;TM.prototype.constructor=TM;c=TM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_stamp"};c.v=function(){return 0};c.o=function(a){return dAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T-L",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 970");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 970");return this.g};function dAa(a){return!!(a&&a.$classData&&a.$classData.m.BP)}c.$classData=g({BP:0},!1,"org.nlogo.core.prim.etc._stamp",{BP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function UM(){this.p=this.g=this.f=null;this.a=0}UM.prototype=new l;UM.prototype.constructor=UM;c=UM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_stamperase"};
+c.v=function(){return 0};c.o=function(a){return eAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T-L",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 975");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 975");return this.g};
+function eAa(a){return!!(a&&a.$classData&&a.$classData.m.CP)}c.$classData=g({CP:0},!1,"org.nlogo.core.prim.etc._stamperase",{CP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function xK(){this.p=this.g=this.f=null;this.a=0}xK.prototype=new l;xK.prototype.constructor=xK;c=xK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_stderr"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.EP)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 980");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 980");return this.g};c.$classData=g({EP:0},!1,"org.nlogo.core.prim.etc._stderr",{EP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function yK(){this.p=this.g=this.f=null;this.a=0}yK.prototype=new l;yK.prototype.constructor=yK;c=yK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_stdout"};
+c.v=function(){return 0};c.o=function(a){return dBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 985");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 985");return this.g};
+function dBa(a){return!!(a&&a.$classData&&a.$classData.m.FP)}c.$classData=g({FP:0},!1,"org.nlogo.core.prim.etc._stdout",{FP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function WM(){this.p=this.g=this.f=null;this.a=0}WM.prototype=new l;WM.prototype.constructor=WM;c=WM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_stopinspecting"};c.v=function(){return 0};c.o=function(a){return EAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Vi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 990");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 990");return this.g};function EAa(a){return!!(a&&a.$classData&&a.$classData.m.GP)}c.$classData=g({GP:0},!1,"org.nlogo.core.prim.etc._stopinspecting",{GP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function XM(){this.p=this.g=this.f=null;this.a=0}XM.prototype=new l;XM.prototype.constructor=XM;c=XM.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_stopinspectingdeadagents"};c.v=function(){return 0};c.o=function(a){return FAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 995");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 995");return this.g};
+function FAa(a){return!!(a&&a.$classData&&a.$classData.m.HP)}c.$classData=g({HP:0},!1,"org.nlogo.core.prim.etc._stopinspectingdeadagents",{HP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function AJ(){this.p=this.g=this.f=null;this.a=0}AJ.prototype=new l;AJ.prototype.constructor=AJ;c=AJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_subject"};c.v=function(){return 0};c.o=function(a){return ADa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Vi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 999");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 999");return this.g};function ADa(a){return!!(a&&a.$classData&&a.$classData.m.IP)}c.$classData=g({IP:0},!1,"org.nlogo.core.prim.etc._subject",{IP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function BJ(){this.p=this.g=this.f=null;this.a=0}BJ.prototype=new l;BJ.prototype.constructor=BJ;c=BJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_sublist"};c.v=function(){return 0};c.o=function(a){return jCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Zi(A()),M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 489");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 489");return this.g};function jCa(a){return!!(a&&a.$classData&&a.$classData.m.JP)}c.$classData=g({JP:0},!1,"org.nlogo.core.prim.etc._sublist",{JP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function CJ(){this.p=this.g=this.f=null;this.a=0}CJ.prototype=new l;CJ.prototype.constructor=CJ;c=CJ.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_substring"};c.v=function(){return 0};c.o=function(a){return kCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Yi(A()),M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 495");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 495");return this.g};function kCa(a){return!!(a&&a.$classData&&a.$classData.m.KP)}c.$classData=g({KP:0},!1,"org.nlogo.core.prim.etc._substring",{KP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function $F(){this.p=this.g=this.f=null;this.a=0}$F.prototype=new l;$F.prototype.constructor=$F;c=$F.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_symbolstring"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.MP)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Aj()],a=(new J).j(a),b=x().s,a=K(a,b),b=Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1010");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1010");return this.g};c.$classData=g({MP:0},!1,"org.nlogo.core.prim.etc._symbolstring",{MP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function zK(){this.p=this.g=this.f=null;this.a=0}zK.prototype=new l;zK.prototype.constructor=zK;c=zK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_thunkdidfinish"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.OP)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1022");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1022");return this.g};
+c.$classData=g({OP:0},!1,"org.nlogo.core.prim.etc._thunkdidfinish",{OP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function YM(){this.p=this.g=this.f=null;this.a=0}YM.prototype=new l;YM.prototype.constructor=YM;c=YM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_tick"};c.v=function(){return 0};c.o=function(a){return QAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1026");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1026");return this.g};function QAa(a){return!!(a&&a.$classData&&a.$classData.m.PP)}c.$classData=g({PP:0},!1,"org.nlogo.core.prim.etc._tick",{PP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ZM(){this.p=this.g=this.f=null;this.a=0}ZM.prototype=new l;ZM.prototype.constructor=ZM;c=ZM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_tickadvance"};
+c.v=function(){return 0};c.o=function(a){return RAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1031");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1031");return this.g};
+function RAa(a){return!!(a&&a.$classData&&a.$classData.m.QP)}c.$classData=g({QP:0},!1,"org.nlogo.core.prim.etc._tickadvance",{QP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function GJ(){this.p=this.g=this.f=null;this.a=0}GJ.prototype=new l;GJ.prototype.constructor=GJ;c=GJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_ticks"};c.v=function(){return 0};c.o=function(a){return gDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 501");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 501");return this.g};function gDa(a){return!!(a&&a.$classData&&a.$classData.m.RP)}c.$classData=g({RP:0},!1,"org.nlogo.core.prim.etc._ticks",{RP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function $M(){this.p=this.g=this.f=null;this.a=0}$M.prototype=new l;
+$M.prototype.constructor=$M;c=$M.prototype;c.b=function(){L(this);return this};c.u=function(){return"_tie"};c.v=function(){return 0};c.o=function(a){return fAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"---L",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1037");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1037");return this.g};
+function fAa(a){return!!(a&&a.$classData&&a.$classData.m.SP)}c.$classData=g({SP:0},!1,"org.nlogo.core.prim.etc._tie",{SP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function HJ(){this.p=this.g=this.f=null;this.a=0}HJ.prototype=new l;HJ.prototype.constructor=HJ;c=HJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_timer"};c.v=function(){return 0};c.o=function(a){return hDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1042");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1042");return this.g};function hDa(a){return!!(a&&a.$classData&&a.$classData.m.TP)}c.$classData=g({TP:0},!1,"org.nlogo.core.prim.etc._timer",{TP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function IJ(){this.p=this.g=this.f=null;this.a=0}IJ.prototype=new l;
+IJ.prototype.constructor=IJ;c=IJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_towards"};c.v=function(){return 0};c.o=function(a){return DBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[pj(A())|qj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 506");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 506");return this.g};function DBa(a){return!!(a&&a.$classData&&a.$classData.m.VP)}c.$classData=g({VP:0},!1,"org.nlogo.core.prim.etc._towards",{VP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function JJ(){this.p=this.g=this.f=null;this.a=0}JJ.prototype=new l;JJ.prototype.constructor=JJ;c=JJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_towardsxy"};
+c.v=function(){return 0};c.o=function(a){return EBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 513");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 513");return this.g};
+function EBa(a){return!!(a&&a.$classData&&a.$classData.m.WP)}c.$classData=g({WP:0},!1,"org.nlogo.core.prim.etc._towardsxy",{WP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function AK(){this.p=this.g=this.f=null;this.a=0}AK.prototype=new l;AK.prototype.constructor=AK;c=AK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_turtlecode"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.XP)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();return qc(A(),a,b,d,"-T--",e,!1,!1)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1053");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1053");return this.g};c.$classData=g({XP:0},!1,"org.nlogo.core.prim.etc._turtlecode",{XP:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function NJ(){this.p=this.g=this.f=null;this.a=0}NJ.prototype=new l;NJ.prototype.constructor=NJ;c=NJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_turtlesat"};
+c.v=function(){return 0};c.o=function(a){return FBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=aj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 520");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 520");return this.g};
+function FBa(a){return!!(a&&a.$classData&&a.$classData.m.YP)}c.$classData=g({YP:0},!1,"org.nlogo.core.prim.etc._turtlesat",{YP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function LJ(){this.p=this.g=this.f=null;this.a=0}LJ.prototype=new l;LJ.prototype.constructor=LJ;c=LJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_turtleset"};c.v=function(){return 0};c.o=function(a){return tDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Si()|pj(A())|aj(A())|Wi(A())|Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=aj(A()),d=(new H).i(1),e=(new H).i(0),f=z();A();var h=B();A();A();A();var k=C();A();return D(new F,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 527");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 527");return this.g};function tDa(a){return!!(a&&a.$classData&&a.$classData.m.ZP)}c.$classData=g({ZP:0},!1,"org.nlogo.core.prim.etc._turtleset",{ZP:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function OJ(){this.p=this.g=this.f=null;this.a=0}OJ.prototype=new l;OJ.prototype.constructor=OJ;c=OJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_turtleshere"};c.v=function(){return 0};c.o=function(a){return GBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=aj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 535");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 535");return this.g};function GBa(a){return!!(a&&a.$classData&&a.$classData.m.$P)}c.$classData=g({$P:0},!1,"org.nlogo.core.prim.etc._turtleshere",{$P:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function PJ(){this.p=this.g=this.f=null;this.a=0}PJ.prototype=new l;PJ.prototype.constructor=PJ;c=PJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_turtleson"};
+c.v=function(){return 0};c.o=function(a){return uDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Vi(A())|$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=aj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 541");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 541");return this.g};
+function uDa(a){return!!(a&&a.$classData&&a.$classData.m.aQ)}c.$classData=g({aQ:0},!1,"org.nlogo.core.prim.etc._turtleson",{aQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function bN(){this.p=this.g=this.f=null;this.a=0}bN.prototype=new l;bN.prototype.constructor=bN;c=bN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_untie"};c.v=function(){return 0};c.o=function(a){return gAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"---L",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1059");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1059");return this.g};function gAa(a){return!!(a&&a.$classData&&a.$classData.m.cQ)}c.$classData=g({cQ:0},!1,"org.nlogo.core.prim.etc._untie",{cQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function dN(){this.p=this.g=this.f=null;this.a=0}dN.prototype=new l;dN.prototype.constructor=dN;c=dN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_uphill"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.$B)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Ti()],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1070");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1070");return this.g};
+c.$classData=g({$B:0},!1,"org.nlogo.core.prim.etc._uphill",{$B:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function eN(){this.p=this.g=this.f=null;this.a=0}eN.prototype=new l;eN.prototype.constructor=eN;c=eN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_uphill4"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.aC)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Ti()],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-T--",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1076");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1076");return this.g};c.$classData=g({aC:0},!1,"org.nlogo.core.prim.etc._uphill4",{aC:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function QJ(){this.p=this.g=this.f=null;this.a=0}QJ.prototype=new l;QJ.prototype.constructor=QJ;c=QJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_uptonof"};c.v=function(){return 0};
+c.o=function(a){return lCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),$i(A())|Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=$i(A())|Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 547");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 547");return this.g};
+function lCa(a){return!!(a&&a.$classData&&a.$classData.m.eQ)}c.$classData=g({eQ:0},!1,"org.nlogo.core.prim.etc._uptonof",{eQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function RJ(){this.p=this.g=this.f=null;this.a=0}RJ.prototype=new l;RJ.prototype.constructor=RJ;c=RJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_userdirectory"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.fQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A())|Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1082");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1082");return this.g};c.$classData=g({fQ:0},!1,"org.nlogo.core.prim.etc._userdirectory",{fQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function SJ(){this.p=this.g=this.f=null;this.a=0}SJ.prototype=new l;SJ.prototype.constructor=SJ;
+c=SJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_userfile"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.gQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=Yi(A())|Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1087");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1087");return this.g};c.$classData=g({gQ:0},!1,"org.nlogo.core.prim.etc._userfile",{gQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function TJ(){this.p=this.g=this.f=null;this.a=0}TJ.prototype=new l;TJ.prototype.constructor=TJ;c=TJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_userinput"};c.v=function(){return 0};
+c.o=function(a){return EDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1092");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1092");return this.g};
+function EDa(a){return!!(a&&a.$classData&&a.$classData.m.hQ)}c.$classData=g({hQ:0},!1,"org.nlogo.core.prim.etc._userinput",{hQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function fN(){this.p=this.g=this.f=null;this.a=0}fN.prototype=new l;fN.prototype.constructor=fN;c=fN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_usermessage"};c.v=function(){return 0};c.o=function(a){return eBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1098");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1098");return this.g};function eBa(a){return!!(a&&a.$classData&&a.$classData.m.iQ)}c.$classData=g({iQ:0},!1,"org.nlogo.core.prim.etc._usermessage",{iQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function UJ(){this.p=this.g=this.f=null;this.a=0}UJ.prototype=new l;UJ.prototype.constructor=UJ;c=UJ.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_usernewfile"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.jQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=Yi(A())|Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1103");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1103");return this.g};c.$classData=g({jQ:0},!1,"org.nlogo.core.prim.etc._usernewfile",{jQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function VJ(){this.p=this.g=this.f=null;this.a=0}VJ.prototype=new l;VJ.prototype.constructor=VJ;c=VJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_useroneof"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.kQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc(),Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=nc(),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1108");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1108");return this.g};
+c.$classData=g({kQ:0},!1,"org.nlogo.core.prim.etc._useroneof",{kQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function WJ(){this.p=this.g=this.f=null;this.a=0}WJ.prototype=new l;WJ.prototype.constructor=WJ;c=WJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_useryesorno"};c.v=function(){return 0};c.o=function(a){return DDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1114");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1114");return this.g};function DDa(a){return!!(a&&a.$classData&&a.$classData.m.lQ)}c.$classData=g({lQ:0},!1,"org.nlogo.core.prim.etc._useryesorno",{lQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function gN(){this.p=this.g=this.f=null;this.a=0}gN.prototype=new l;
+gN.prototype.constructor=gN;c=gN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_wait"};c.v=function(){return 0};c.o=function(a){return kBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[M(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1120");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1120");return this.g};
+function kBa(a){return!!(a&&a.$classData&&a.$classData.m.nQ)}c.$classData=g({nQ:0},!1,"org.nlogo.core.prim.etc._wait",{nQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function hN(){this.p=this.g=this.f=null;this.a=0}hN.prototype=new l;hN.prototype.constructor=hN;c=hN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_watch"};c.v=function(){return 0};c.o=function(a){return WAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Vi(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 560");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 560");return this.g};function WAa(a){return!!(a&&a.$classData&&a.$classData.m.oQ)}c.$classData=g({oQ:0},!1,"org.nlogo.core.prim.etc._watch",{oQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function iN(){this.p=this.g=this.f=null;this.a=0}iN.prototype=new l;iN.prototype.constructor=iN;c=iN.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_watchme"};c.v=function(){return 0};c.o=function(a){return hAa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"-TPL",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1125");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1125");return this.g};
+function hAa(a){return!!(a&&a.$classData&&a.$classData.m.pQ)}c.$classData=g({pQ:0},!1,"org.nlogo.core.prim.etc._watchme",{pQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function jN(){this.p=this.g=this.f=null;this.a=0}jN.prototype=new l;jN.prototype.constructor=jN;c=jN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_while"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.bC)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[xj(A()),uj(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 566");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 566");return this.g};c.$classData=g({bC:0},!1,"org.nlogo.core.prim.etc._while",{bC:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function kN(){this.p=this.g=this.f=null;this.a=0}kN.prototype=new l;kN.prototype.constructor=kN;c=kN.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_withlocalrandomness"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.cC)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[uj(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();A();var e=C();A();return qc(A(),a,b,d,"OTPL",e,!0,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 571");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 571");return this.g};
+c.$classData=g({cC:0},!1,"org.nlogo.core.prim.etc._withlocalrandomness",{cC:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ZJ(){this.p=this.g=this.f=null;this.a=0}ZJ.prototype=new l;ZJ.prototype.constructor=ZJ;c=ZJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_withmax"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.dC)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=$i(A());x();var b=[yj(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=$i(A()),e=2+z()|0,f=md().Uc("?");A();var h=C();A();var k=C();A();A();return D(new F,e,a,b,d,h,k,!1,"OTPL",f,f.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 577");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 577");return this.g};c.$classData=g({dC:0},!1,"org.nlogo.core.prim.etc._withmax",{dC:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function $J(){this.p=this.g=this.f=null;this.a=0}$J.prototype=new l;$J.prototype.constructor=$J;c=$J.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_withmin"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.eC)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=$i(A());x();var b=[yj(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=$i(A()),e=2+z()|0,f=md().Uc("?");A();var h=C();A();var k=C();A();A();return D(new F,e,a,b,d,h,k,!1,"OTPL",f,f.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 587");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 587");return this.g};c.$classData=g({eC:0},!1,"org.nlogo.core.prim.etc._withmin",{eC:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function lN(){this.p=this.g=this.f=null;this.a=0}lN.prototype=new l;lN.prototype.constructor=lN;c=lN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_withoutinterruption"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.qQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[uj(A())],a=(new J).j(a),b=x().s,a=K(a,b);A();b=C();A();var d=C();A();A();var e=C();A();return qc(A(),a,b,d,"OTPL",e,!0,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 597");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 597");return this.g};
+c.$classData=g({qQ:0},!1,"org.nlogo.core.prim.etc._withoutinterruption",{qQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function bK(){this.p=this.g=this.f=null;this.a=0}bK.prototype=new l;bK.prototype.constructor=bK;c=bK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_worldheight"};c.v=function(){return 0};c.o=function(a){return gEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1130");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1130");return this.g};function gEa(a){return!!(a&&a.$classData&&a.$classData.m.rQ)}c.$classData=g({rQ:0},!1,"org.nlogo.core.prim.etc._worldheight",{rQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function cK(){this.p=this.g=this.f=null;this.a=0}cK.prototype=new l;cK.prototype.constructor=cK;c=cK.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_worldwidth"};c.v=function(){return 0};c.o=function(a){return hEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1135");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1135");return this.g};
+function hEa(a){return!!(a&&a.$classData&&a.$classData.m.sQ)}c.$classData=g({sQ:0},!1,"org.nlogo.core.prim.etc._worldwidth",{sQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function eK(){this.p=this.g=this.f=null;this.a=0}eK.prototype=new l;eK.prototype.constructor=eK;c=eK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_xor"};c.v=function(){return 0};c.o=function(a){return Hza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Xi(A());x();var b=[Xi(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=Xi(A()),e=-6+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 603");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 603");return this.g};function Hza(a){return!!(a&&a.$classData&&a.$classData.m.vQ)}c.$classData=g({vQ:0},!1,"org.nlogo.core.prim.etc._xor",{vQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function zL(){this.p=this.g=this.f=null;this.a=0}zL.prototype=new l;zL.prototype.constructor=zL;c=zL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetbroadcast"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.yQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=A();x();var b=[Yi(A()),nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 6");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 6");return this.g};c.$classData=g({yQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetbroadcast",{yQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function AL(){this.p=this.g=this.f=null;this.a=0}AL.prototype=new l;AL.prototype.constructor=AL;c=AL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetbroadcastclearoutput"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.zQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 10");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 10");return this.g};
+c.$classData=g({zQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetbroadcastclearoutput",{zQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function BL(){this.p=this.g=this.f=null;this.a=0}BL.prototype=new l;BL.prototype.constructor=BL;c=BL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetbroadcastmessage"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.AQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 14");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 14");return this.g};c.$classData=g({AQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetbroadcastmessage",{AQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function CL(){this.p=this.g=this.f=null;this.a=0}CL.prototype=new l;CL.prototype.constructor=CL;c=CL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetclearoverride"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.BQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=(new H).i("?");x();var b=[Yi(A()),Vi(A())|$i(A()),Yi(A())],b=(new J).j(b),d=x().s,b=K(b,d);A();d=C();A();var e=C();A();A();A();return qc(A(),b,d,e,"OTPL",a,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 18");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 18");return this.g};
+c.$classData=g({BQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetclearoverride",{BQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function DL(){this.p=this.g=this.f=null;this.a=0}DL.prototype=new l;DL.prototype.constructor=DL;c=DL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetclearoverrides"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.CQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 27");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 27");return this.g};c.$classData=g({CQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetclearoverrides",{CQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ZG(){this.p=this.g=this.f=null;this.a=0}ZG.prototype=new l;ZG.prototype.constructor=ZG;c=ZG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetclientslist"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.DQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Zi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 31");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 31");return this.g};
+c.$classData=g({DQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetclientslist",{DQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function $G(){this.p=this.g=this.f=null;this.a=0}$G.prototype=new l;$G.prototype.constructor=$G;c=$G.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetentermessage"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.EQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 35");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 35");return this.g};c.$classData=g({EQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetentermessage",{EQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function aH(){this.p=this.g=this.f=null;this.a=0}aH.prototype=new l;aH.prototype.constructor=aH;c=aH.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_hubnetexitmessage"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.FQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 39");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 39");return this.g};
+c.$classData=g({FQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetexitmessage",{FQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function EL(){this.p=this.g=this.f=null;this.a=0}EL.prototype=new l;EL.prototype.constructor=EL;c=EL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetfetchmessage"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.GQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 43");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 43");return this.g};c.$classData=g({GQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetfetchmessage",{GQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function FL(){this.p=this.g=this.f=null;this.a=0}FL.prototype=new l;FL.prototype.constructor=FL;c=FL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetkickallclients"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.HQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){return qc(A(),(A(),u()),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 47");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 47");return this.g};
+c.$classData=g({HQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetkickallclients",{HQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function GL(){this.p=this.g=this.f=null;this.a=0}GL.prototype=new l;GL.prototype.constructor=GL;c=GL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetkickclient"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.IQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 51");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 51");return this.g};c.$classData=g({IQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetkickclient",{IQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function bH(){this.p=this.g=this.f=null;this.a=0}bH.prototype=new l;bH.prototype.constructor=bH;c=bH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetmessage"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.JQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nc(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 55");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 55");return this.g};
+c.$classData=g({JQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetmessage",{JQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function cH(){this.p=this.g=this.f=null;this.a=0}cH.prototype=new l;cH.prototype.constructor=cH;c=cH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetmessagesource"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.KQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 59");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 59");return this.g};c.$classData=g({KQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetmessagesource",{KQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function dH(){this.p=this.g=this.f=null;this.a=0}dH.prototype=new l;dH.prototype.constructor=dH;c=dH.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_hubnetmessagetag"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.LQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Yi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 63");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 63");return this.g};
+c.$classData=g({LQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetmessagetag",{LQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function eH(){this.p=this.g=this.f=null;this.a=0}eH.prototype=new l;eH.prototype.constructor=eH;c=eH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetmessagewaiting"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.MQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Xi(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 67");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 67");return this.g};c.$classData=g({MQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetmessagewaiting",{MQ:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function HL(){this.p=this.g=this.f=null;this.a=0}HL.prototype=new l;HL.prototype.constructor=HL;c=HL.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_hubnetreset"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.NQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){A();var a=u();A();var b=C();A();var d=C();A();var e=C();A();A();return qc(A(),a,b,d,"O---",e,!1,!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 71");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 71");return this.g};
+c.$classData=g({NQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetreset",{NQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function IL(){this.p=this.g=this.f=null;this.a=0}IL.prototype=new l;IL.prototype.constructor=IL;c=IL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetresetperspective"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.OQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 75");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 75");return this.g};c.$classData=g({OQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetresetperspective",{OQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function JL(){this.p=this.g=this.f=null;this.a=0}JL.prototype=new l;JL.prototype.constructor=JL;c=JL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetsend"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.PQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Zi(A())|Yi(A()),Yi(A()),nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 79");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 79");return this.g};
+c.$classData=g({PQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetsend",{PQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function KL(){this.p=this.g=this.f=null;this.a=0}KL.prototype=new l;KL.prototype.constructor=KL;c=KL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetsendclearoutput"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.QQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Zi(A())|Yi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 87");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 87");return this.g};c.$classData=g({QQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendclearoutput",{QQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function LL(){this.p=this.g=this.f=null;this.a=0}LL.prototype=new l;LL.prototype.constructor=LL;c=LL.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_hubnetsendfollow"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.RQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=A();x();var b=[Yi(A()),Vi(A()),M(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 91");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 91");return this.g};c.$classData=g({RQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendfollow",{RQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function ML(){this.p=this.g=this.f=null;this.a=0}ML.prototype=new l;ML.prototype.constructor=ML;c=ML.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetsendmessage"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.SQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=A();x();var b=[Zi(A())|Yi(A()),nc()],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 95");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 95");return this.g};
+c.$classData=g({SQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendmessage",{SQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function NL(){this.p=this.g=this.f=null;this.a=0}NL.prototype=new l;NL.prototype.constructor=NL;c=NL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetsendoverride"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.TQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=(new H).i("?");x();var b=[Yi(A()),Vi(A())|$i(A()),Yi(A()),vj(A())],b=(new J).j(b),d=x().s,b=K(b,d);A();d=C();A();var e=C();A();A();A();return qc(A(),b,d,e,"OTPL",a,!1,!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 100");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 100");return this.g};c.$classData=g({TQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendoverride",{TQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function OL(){this.p=this.g=this.f=null;this.a=0}OL.prototype=new l;
+OL.prototype.constructor=OL;c=OL.prototype;c.b=function(){L(this);return this};c.u=function(){return"_hubnetsendwatch"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.UQ)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=A();x();var b=[Yi(A()),Vi(A())],b=(new J).j(b),d=x().s;return qc(a,K(b,d),(A(),C()),(A(),C()),(A(),"OTPL"),(A(),C()),(A(),!1),(A(),!0))};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 110");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/hubnet.scala: 110");return this.g};c.$classData=g({UQ:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendwatch",{UQ:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function gda(a){return!!(a&&a.$classData&&a.$classData.m.tma)}function x6(){M5.call(this)}x6.prototype=new lFa;x6.prototype.constructor=x6;x6.prototype.b=function(){M5.prototype.ud.call(this,!1);return this};
+x6.prototype.u=function(){return"JsFalse"};x6.prototype.x=function(){return Y(new Z,this)};x6.prototype.$classData=g({Z8:0},!1,"play.api.libs.json.JsFalse$",{Z8:1,DC:1,d:1,Po:1,sn:1,t:1,q:1,k:1,h:1});var GFa=void 0;function qia(){GFa||(GFa=(new x6).b());return GFa}function xd(){NS.call(this);this.qy=null}xd.prototype=new N0;xd.prototype.constructor=xd;c=xd.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.m.tS){var b=this.qy;a=a.qy;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.qy;default:throw(new O).c(""+a);}};c.Ea=function(a){this.qy=a;a=Jv((new Kv).Ea((new J).j(["JsResultException(errors:",")"])),(new J).j([a]));NS.prototype.ic.call(this,a,null,0,!0);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({tS:0},!1,"play.api.libs.json.JsResultException",{tS:1,ge:1,Wc:1,tc:1,d:1,h:1,t:1,q:1,k:1});function y6(){M5.call(this)}y6.prototype=new lFa;y6.prototype.constructor=y6;y6.prototype.b=function(){M5.prototype.ud.call(this,!0);return this};y6.prototype.u=function(){return"JsTrue"};y6.prototype.x=function(){return Y(new Z,this)};y6.prototype.$classData=g({f9:0},!1,"play.api.libs.json.JsTrue$",{f9:1,DC:1,d:1,Po:1,sn:1,t:1,q:1,k:1,h:1});var HFa=void 0;
+function pia(){HFa||(HFa=(new y6).b());return HFa}function HR(a){a.lw(IFa(a))}function z6(){this.da=null}z6.prototype=new l;z6.prototype.constructor=z6;function IFa(a){var b=new z6;if(null===a)throw pg(qg(),null);b.da=a;return b}z6.prototype.$classData=g({z9:0},!1,"scalaz.ApplicativePlus$$anon$4",{z9:1,d:1,uca:1,$C:1,rs:1,Qk:1,sj:1,cD:1,Jx:1});function JFa(a,b){return a.da.Yd(I(function(a,b){return function(){return a.rx.Yd(b)}}(a,b)))}function A6(){}A6.prototype=new Iwa;
+A6.prototype.constructor=A6;function KFa(){}KFa.prototype=A6.prototype;function B6(){}B6.prototype=new sFa;B6.prototype.constructor=B6;function LFa(){}LFa.prototype=B6.prototype;function MFa(a,b,d){return a.yh(b,m(new p,function(a,b){return function(d){return a.Yd(I(function(a,b,d){return function(){return b.y(d)}}(a,b,d)))}}(a,d)))}function GR(a){a.Qj(tFa(a))}function C6(){}C6.prototype=new vFa;C6.prototype.constructor=C6;function NFa(){}NFa.prototype=C6.prototype;function D6(){}D6.prototype=new Pxa;
+D6.prototype.constructor=D6;D6.prototype.b=function(){gz.prototype.b.call(this);return this};function gq(a,b){Lp();a=[];var d=Np().Wd,e=a.length|0;a:for(;;){if(0!==e){d=(new Pp).Vb(a[-1+e|0],d);e=-1+e|0;continue a}break}return(new Ip).i((new Rp).Vb(b,d))}function Vea(){var a=Vp();return m(new p,function(){return function(a){return(new Ip).i(a)}}(a))}function oq(){var a=Vp();return m(new p,function(){return function(a){return(new Kp).i(a)}}(a))}
+D6.prototype.$classData=g({Qaa:0},!1,"scalaz.Validation$",{Qaa:1,Aoa:1,Boa:1,Coa:1,Doa:1,Eoa:1,d:1,k:1,h:1});var OFa=void 0;function Vp(){OFa||(OFa=(new D6).b());return OFa}function Uz(){this.uu=!1;this.xu=this.aW=null}Uz.prototype=new cFa;Uz.prototype.constructor=Uz;Uz.prototype.qv=function(a){this.aW=a;(new w2).b();A5.prototype.qda.call(this);this.xu="";return this};function zS(a,b){AS(a,null===b?"null":b)}
+function AS(a,b){for(;""!==b;){var d=b.indexOf("\n")|0;if(0>d)a.xu=""+a.xu+b,b="";else{var e=""+a.xu+b.substring(0,d);ba.console&&(a.aW&&ba.console.error?ba.console.error(e):ba.console.log(e));a.xu="";b=b.substring(1+d|0)}}}Uz.prototype.ap=function(){};Uz.prototype.$classData=g({Qda:0},!1,"java.lang.JSConsoleBasedPrintStream",{Qda:1,Vla:1,Ula:1,Q_:1,d:1,ks:1,Gv:1,lI:1,jW:1});function l0(){this.er=this.Ej=null;this.oD=!1}l0.prototype=new yFa;l0.prototype.constructor=l0;c=l0.prototype;
+c.b=function(){l0.prototype.zda.call(this,(new x5).b(),!1);return this};c.zt=function(a,b){if(this.oD){var d=e6(this,a);d6.prototype.zt.call(this,a,b);a=d}else a=d6.prototype.zt.call(this,a,b);b=(new SS).ar(this);b=TS(b);b.Gy.ra()&&b.ka();return a};c.yy=function(a){var b=d6.prototype.yy.call(this,a);this.oD&&(a=(new y2).i(a),null!==b||this.Ej.ab((new y2).i(a)))&&(this.er.Sp(a),PE(this.er,a,b));return b};c.zda=function(a,b){this.er=a;this.oD=b;d6.prototype.TV.call(this,a);return this};
+c.$classData=g({Cea:0},!1,"java.util.LinkedHashMap",{Cea:1,sW:1,jea:1,d:1,uW:1,k:1,h:1,Zd:1,Ld:1});function ji(){w.call(this);this.jA=this.iA=0}ji.prototype=new SEa;ji.prototype.constructor=ji;c=ji.prototype;c.ni=function(){return this.iA};c.ha=function(a,b){this.iA=a;this.jA=b;w.prototype.e.call(this,null,null);return this};c.na=function(){return this.jA};c.Gc=function(){return this.jA};c.ja=function(){return this.iA};
+c.$classData=g({Ffa:0},!1,"scala.Tuple2$mcII$sp",{Ffa:1,hD:1,d:1,Bfa:1,t:1,q:1,k:1,h:1,Zra:1});function v(){NS.call(this);this.Wy=null}v.prototype=new N0;v.prototype.constructor=v;c=v.prototype;c.u=function(){return"UninitializedFieldError"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.fY?this.Wy===a.Wy:!1};c.w=function(a){switch(a){case 0:return this.Wy;default:throw(new O).c(""+a);}};
+c.c=function(a){this.Wy=a;NS.prototype.ic.call(this,a,null,0,!0);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({fY:0},!1,"scala.UninitializedFieldError",{fY:1,ge:1,Wc:1,tc:1,d:1,h:1,t:1,q:1,k:1});function FQ(){this.W=null}FQ.prototype=new uva;FQ.prototype.constructor=FQ;function CZ(a,b){for(;;){var d;b:for(d=b;;){var e=d.W;if(BZ(e))d=e;else break b}if(b===d||xY(a,b,d))return d;b=a.W;if(!BZ(b))return a}}c=FQ.prototype;
+c.b=function(){vY.prototype.i.call(this,u());return this};function Gva(a,b){a:for(;;){var d=a.W;if(Fva(d))AZ(b,d);else{if(BZ(d)){a=CZ(a,d);continue a}if(!Ng(d))throw(new q).i(d);if(!xY(a,d,Og(new Pg,b,d)))continue a}break}}c.Sw=function(a){kB||(kB=(new iB).b());a=dw(a)?Bla(a.Xk):a;var b;a:for(b=this;;){var d=b.W;if(Ng(d)){if(xY(b,d,a)){b=d;break a}}else if(BZ(d))b=CZ(b,d);else{b=null;break a}}if(null!==b){if(!b.z())for(;!b.z();)AZ(b.Y(),a),b=b.$();return!0}return!1};c.l=function(){return Hva(this)};
+c.Kl=function(a,b){return qla(this,a,b)};c.Mp=function(a,b){Gva(this,Eva(b,a))};c.mH=function(a,b,d){return ula(this,a,b,d)};c.di=function(a,b){return sla(this,a,b)};c.iH=function(){var a;a:for(a=this;;){var b=a.W;if(Fva(b)){a=(new H).i(b);break a}if(BZ(b))a=CZ(a,b);else{a=C();break a}}return a};c.kE=function(a,b){return vla(this,a,b)};c.At=function(a,b){return wla(this,a,b)};function BZ(a){return!!(a&&a.$classData&&a.$classData.m.oY)}
+c.$classData=g({oY:0},!1,"scala.concurrent.impl.Promise$DefaultPromise",{oY:1,yW:1,d:1,k:1,h:1,nY:1,jY:1,WF:1,gY:1});function e_(){}e_.prototype=new l;e_.prototype.constructor=e_;e_.prototype.b=function(){return this};e_.prototype.Ge=function(a,b){return(a|0)-(b|0)|0};e_.prototype.$classData=g({tga:0},!1,"scala.math.Ordering$Byte$",{tga:1,d:1,uga:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});var Yva=void 0;function g_(){}g_.prototype=new l;g_.prototype.constructor=g_;g_.prototype.b=function(){return this};
+g_.prototype.Ge=function(a,b){return(null===a?0:a.W)-(null===b?0:b.W)|0};g_.prototype.$classData=g({vga:0},!1,"scala.math.Ordering$Char$",{vga:1,d:1,wga:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});var $va=void 0;function a_(){}a_.prototype=new l;a_.prototype.constructor=a_;a_.prototype.b=function(){return this};a_.prototype.Ge=function(a,b){a|=0;b|=0;return a===b?0:a<b?-1:1};a_.prototype.$classData=g({xga:0},!1,"scala.math.Ordering$Int$",{xga:1,d:1,yga:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});var Uva=void 0;
+function i_(){}i_.prototype=new l;i_.prototype.constructor=i_;i_.prototype.b=function(){return this};i_.prototype.Ge=function(a,b){var d=Ra(a);a=d.ia;var d=d.oa,e=Ra(b);b=e.ia;e=e.oa;return q_(Sa(),a,d,b,e)};i_.prototype.$classData=g({zga:0},!1,"scala.math.Ordering$Long$",{zga:1,d:1,Aga:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});var bwa=void 0;function c_(){}c_.prototype=new l;c_.prototype.constructor=c_;c_.prototype.b=function(){return this};c_.prototype.Ge=function(a,b){return(a|0)-(b|0)|0};
+c_.prototype.$classData=g({Cga:0},!1,"scala.math.Ordering$Short$",{Cga:1,d:1,Dga:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});var Wva=void 0;function E6(){}E6.prototype=new l;E6.prototype.constructor=E6;E6.prototype.b=function(){return this};E6.prototype.Ge=function(a,b){return a===b?0:a<b?-1:1};E6.prototype.$classData=g({Ega:0},!1,"scala.math.Ordering$String$",{Ega:1,d:1,rsa:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1});var PFa=void 0;function gua(){PFa||(PFa=(new E6).b());return PFa}function F6(){this.sh=null}
+F6.prototype=new l;F6.prototype.constructor=F6;function G6(){}G6.prototype=F6.prototype;F6.prototype.o=function(a){return this===a};F6.prototype.l=function(){return this.sh};F6.prototype.r=function(){return Ka(this)};function H6(){}H6.prototype=new l;H6.prototype.constructor=H6;function QFa(){}QFa.prototype=H6.prototype;function I6(){this.pc=this.s=null}I6.prototype=new j6;I6.prototype.constructor=I6;I6.prototype.b=function(){xT.prototype.b.call(this);J6=this;this.pc=(new TZ).b();return this};
+I6.prototype.db=function(){KE();Mj();return(new LE).b()};I6.prototype.$classData=g({Iha:0},!1,"scala.collection.IndexedSeq$",{Iha:1,hZ:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1});var J6=void 0;function Nj(){J6||(J6=(new I6).b());return J6}function Ze(){this.lf=this.hf=0;this.Qa=null}Ze.prototype=new a1;Ze.prototype.constructor=Ze;c=Ze.prototype;c.ka=function(){this.lf>=this.hf&&yB().Sd.ka();var a=this.Qa.X(this.lf);this.lf=1+this.lf|0;return a};c.zn=function(){return this};
+c.Y=function(){this.lf>=this.hf&&yB().Sd.ka();return this.Qa.X(this.lf)};function Ye(a,b,d,e){a.hf=e;if(null===b)throw pg(qg(),null);a.Qa=b;a.lf=d;return a}c.ra=function(){return this.lf<this.hf};c.lp=function(a){return 0>=a?Ye(new Ze,this.Qa,this.lf,this.hf):(this.lf+a|0)>=this.hf?Ye(new Ze,this.Qa,this.hf,this.hf):Ye(new Ze,this.Qa,this.lf+a|0,this.hf)};c.$classData=g({Kha:0},!1,"scala.collection.IndexedSeqLike$Elements",{Kha:1,od:1,d:1,Rc:1,Ga:1,Fa:1,Gha:1,k:1,h:1});function K6(){}
+K6.prototype=new X2;K6.prototype.constructor=K6;K6.prototype.b=function(){return this};function RFa(a,b,d,e,f,h){var k=31&(b>>>h|0),n=31&(e>>>h|0);if(k!==n)return a=1<<k|1<<n,b=la(Xa(L6),[2]),k<n?(b.n[0]=d,b.n[1]=f):(b.n[0]=f,b.n[1]=d),M6(new N6,a,b,d.Da()+f.Da()|0);n=la(Xa(L6),[1]);k=1<<k;d=RFa(a,b,d,e,f,5+h|0);n.n[0]=d;return M6(new N6,k,n,d.dn)}K6.prototype.oy=function(){return O6()};
+K6.prototype.$classData=g({zia:0},!1,"scala.collection.immutable.HashSet$",{zia:1,gZ:1,Nt:1,Mt:1,ze:1,d:1,Ae:1,k:1,h:1});var SFa=void 0;function Wk(){SFa||(SFa=(new K6).b());return SFa}function P6(){this.s=null}P6.prototype=new j6;P6.prototype.constructor=P6;P6.prototype.b=function(){xT.prototype.b.call(this);return this};P6.prototype.db=function(){Mj();return(new LE).b()};P6.prototype.$classData=g({Eia:0},!1,"scala.collection.immutable.IndexedSeq$",{Eia:1,hZ:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1});
+var X1a=void 0;function KE(){X1a||(X1a=(new P6).b());return X1a}function Q6(){}Q6.prototype=new X2;Q6.prototype.constructor=Q6;Q6.prototype.b=function(){return this};Q6.prototype.oy=function(){return Y1a()};Q6.prototype.$classData=g({Nia:0},!1,"scala.collection.immutable.ListSet$",{Nia:1,gZ:1,Nt:1,Mt:1,ze:1,d:1,Ae:1,k:1,h:1});var Z1a=void 0;function Dm(){this.Ps=null;this.ZV=!1;this.eb=null}Dm.prototype=new t6;Dm.prototype.constructor=Dm;c=Dm.prototype;c.cd=function(a){return $1a(this,a)};c.l=function(){return"ArrayBuilder.generic"};
+function $1a(a,b){a.eb.push(a.ZV?null===b?0:b.W:null===b?a.Ps.Ni.eA:b);return a}c.Ba=function(){var a=this.Ps===pa(Ya)?pa(Ba):this.Ps===pa(uE)||this.Ps===pa(MZ)?pa(Va):this.Ps;return ka(Xa(a.Ni),this.eb)};c.Mg=function(a){this.Ps=a;this.ZV=a===pa($a);this.eb=[];return this};c.Ma=function(a){return $1a(this,a)};c.$classData=g({Eja:0},!1,"scala.collection.mutable.ArrayBuilder$generic",{Eja:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function R6(){this.eb=null;this.ua=this.$a=0}R6.prototype=new t6;
+R6.prototype.constructor=R6;c=R6.prototype;c.b=function(){this.ua=this.$a=0;return this};function a2a(a,b){b=la(Xa(Za),[b]);0<a.ua&&Lv(Af(),a.eb,0,b,0,a.ua);return b}c.o=function(a){return a&&a.$classData&&a.$classData.m.xZ?this.ua===a.ua&&this.eb===a.eb:!1};c.cd=function(a){return b2a(this,!!a)};c.l=function(){return"ArrayBuilder.ofBoolean"};c.Ba=function(){var a;0!==this.$a&&this.$a===this.ua?(this.$a=0,a=this.eb):a=a2a(this,this.ua);return a};c.pf=function(a){this.eb=a2a(this,a);this.$a=a};
+c.Ma=function(a){return b2a(this,!!a)};c.oc=function(a){this.$a<a&&this.pf(a)};c.kf=function(a){if(this.$a<a||0===this.$a){for(var b=0===this.$a?16:this.$a<<1;b<a;)b<<=1;this.pf(b)}};function b2a(a,b){a.kf(1+a.ua|0);a.eb.n[a.ua]=b;a.ua=1+a.ua|0;return a}c.Xb=function(a){a&&a.$classData&&a.$classData.m.zG?(this.kf(this.ua+a.sa()|0),Lv(Af(),a.qa,0,this.eb,this.ua,a.sa()),this.ua=this.ua+a.sa()|0,a=this):a=IC(this,a);return a};
+c.$classData=g({xZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofBoolean",{xZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function S6(){this.eb=null;this.ua=this.$a=0}S6.prototype=new t6;S6.prototype.constructor=S6;c=S6.prototype;c.b=function(){this.ua=this.$a=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.m.yZ?this.ua===a.ua&&this.eb===a.eb:!1};c.cd=function(a){return c2a(this,a|0)};function d2a(a,b){b=la(Xa(bb),[b]);0<a.ua&&Lv(Af(),a.eb,0,b,0,a.ua);return b}c.l=function(){return"ArrayBuilder.ofByte"};
+c.Ba=function(){var a;0!==this.$a&&this.$a===this.ua?(this.$a=0,a=this.eb):a=d2a(this,this.ua);return a};c.pf=function(a){this.eb=d2a(this,a);this.$a=a};c.Ma=function(a){return c2a(this,a|0)};function c2a(a,b){a.kf(1+a.ua|0);a.eb.n[a.ua]=b;a.ua=1+a.ua|0;return a}c.oc=function(a){this.$a<a&&this.pf(a)};c.kf=function(a){if(this.$a<a||0===this.$a){for(var b=0===this.$a?16:this.$a<<1;b<a;)b<<=1;this.pf(b)}};
+c.Xb=function(a){a&&a.$classData&&a.$classData.m.AG?(this.kf(this.ua+a.sa()|0),Lv(Af(),a.qa,0,this.eb,this.ua,a.sa()),this.ua=this.ua+a.sa()|0,a=this):a=IC(this,a);return a};c.$classData=g({yZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofByte",{yZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function T6(){this.eb=null;this.ua=this.$a=0}T6.prototype=new t6;T6.prototype.constructor=T6;c=T6.prototype;c.b=function(){this.ua=this.$a=0;return this};
+c.o=function(a){return a&&a.$classData&&a.$classData.m.zZ?this.ua===a.ua&&this.eb===a.eb:!1};c.cd=function(a){return e2a(this,null===a?0:a.W)};c.l=function(){return"ArrayBuilder.ofChar"};c.Ba=function(){var a;0!==this.$a&&this.$a===this.ua?(this.$a=0,a=this.eb):a=f2a(this,this.ua);return a};c.pf=function(a){this.eb=f2a(this,a);this.$a=a};c.Ma=function(a){return e2a(this,null===a?0:a.W)};c.oc=function(a){this.$a<a&&this.pf(a)};
+function f2a(a,b){b=la(Xa($a),[b]);0<a.ua&&Lv(Af(),a.eb,0,b,0,a.ua);return b}c.kf=function(a){if(this.$a<a||0===this.$a){for(var b=0===this.$a?16:this.$a<<1;b<a;)b<<=1;this.pf(b)}};function e2a(a,b){a.kf(1+a.ua|0);a.eb.n[a.ua]=b;a.ua=1+a.ua|0;return a}c.Xb=function(a){a&&a.$classData&&a.$classData.m.BG?(this.kf(this.ua+a.sa()|0),Lv(Af(),a.qa,0,this.eb,this.ua,a.sa()),this.ua=this.ua+a.sa()|0,a=this):a=IC(this,a);return a};
+c.$classData=g({zZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofChar",{zZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function U6(){this.eb=null;this.ua=this.$a=0}U6.prototype=new t6;U6.prototype.constructor=U6;c=U6.prototype;c.b=function(){this.ua=this.$a=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.m.AZ?this.ua===a.ua&&this.eb===a.eb:!1};c.cd=function(a){return g2a(this,+a)};c.l=function(){return"ArrayBuilder.ofDouble"};
+c.Ba=function(){var a;0!==this.$a&&this.$a===this.ua?(this.$a=0,a=this.eb):a=h2a(this,this.ua);return a};function h2a(a,b){b=la(Xa(gb),[b]);0<a.ua&&Lv(Af(),a.eb,0,b,0,a.ua);return b}c.pf=function(a){this.eb=h2a(this,a);this.$a=a};c.Ma=function(a){return g2a(this,+a)};c.oc=function(a){this.$a<a&&this.pf(a)};function g2a(a,b){a.kf(1+a.ua|0);a.eb.n[a.ua]=b;a.ua=1+a.ua|0;return a}c.kf=function(a){if(this.$a<a||0===this.$a){for(var b=0===this.$a?16:this.$a<<1;b<a;)b<<=1;this.pf(b)}};
+c.Xb=function(a){a&&a.$classData&&a.$classData.m.CG?(this.kf(this.ua+a.sa()|0),Lv(Af(),a.qa,0,this.eb,this.ua,a.sa()),this.ua=this.ua+a.sa()|0,a=this):a=IC(this,a);return a};c.$classData=g({AZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofDouble",{AZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function V6(){this.eb=null;this.ua=this.$a=0}V6.prototype=new t6;V6.prototype.constructor=V6;c=V6.prototype;c.b=function(){this.ua=this.$a=0;return this};
+c.o=function(a){return a&&a.$classData&&a.$classData.m.BZ?this.ua===a.ua&&this.eb===a.eb:!1};c.cd=function(a){return i2a(this,+a)};c.l=function(){return"ArrayBuilder.ofFloat"};c.Ba=function(){var a;0!==this.$a&&this.$a===this.ua?(this.$a=0,a=this.eb):a=j2a(this,this.ua);return a};c.pf=function(a){this.eb=j2a(this,a);this.$a=a};function i2a(a,b){a.kf(1+a.ua|0);a.eb.n[a.ua]=b;a.ua=1+a.ua|0;return a}c.Ma=function(a){return i2a(this,+a)};c.oc=function(a){this.$a<a&&this.pf(a)};
+function j2a(a,b){b=la(Xa(fb),[b]);0<a.ua&&Lv(Af(),a.eb,0,b,0,a.ua);return b}c.kf=function(a){if(this.$a<a||0===this.$a){for(var b=0===this.$a?16:this.$a<<1;b<a;)b<<=1;this.pf(b)}};c.Xb=function(a){a&&a.$classData&&a.$classData.m.DG?(this.kf(this.ua+a.sa()|0),Lv(Af(),a.qa,0,this.eb,this.ua,a.sa()),this.ua=this.ua+a.sa()|0,a=this):a=IC(this,a);return a};c.$classData=g({BZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofFloat",{BZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});
+function W6(){this.eb=null;this.ua=this.$a=0}W6.prototype=new t6;W6.prototype.constructor=W6;c=W6.prototype;c.b=function(){this.ua=this.$a=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.m.CZ?this.ua===a.ua&&this.eb===a.eb:!1};c.cd=function(a){return k2a(this,a|0)};c.l=function(){return"ArrayBuilder.ofInt"};c.Ba=function(){var a;0!==this.$a&&this.$a===this.ua?(this.$a=0,a=this.eb):a=l2a(this,this.ua);return a};c.pf=function(a){this.eb=l2a(this,a);this.$a=a};
+function k2a(a,b){a.kf(1+a.ua|0);a.eb.n[a.ua]=b;a.ua=1+a.ua|0;return a}c.Ma=function(a){return k2a(this,a|0)};function l2a(a,b){b=la(Xa(db),[b]);0<a.ua&&Lv(Af(),a.eb,0,b,0,a.ua);return b}c.oc=function(a){this.$a<a&&this.pf(a)};c.kf=function(a){if(this.$a<a||0===this.$a){for(var b=0===this.$a?16:this.$a<<1;b<a;)b<<=1;this.pf(b)}};c.Xb=function(a){a&&a.$classData&&a.$classData.m.EG?(this.kf(this.ua+a.sa()|0),Lv(Af(),a.qa,0,this.eb,this.ua,a.sa()),this.ua=this.ua+a.sa()|0,a=this):a=IC(this,a);return a};
+c.$classData=g({CZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofInt",{CZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function X6(){this.eb=null;this.ua=this.$a=0}X6.prototype=new t6;X6.prototype.constructor=X6;c=X6.prototype;c.b=function(){this.ua=this.$a=0;return this};function m2a(a,b){a.kf(1+a.ua|0);a.eb.n[a.ua]=b;a.ua=1+a.ua|0;return a}c.o=function(a){return a&&a.$classData&&a.$classData.m.DZ?this.ua===a.ua&&this.eb===a.eb:!1};c.cd=function(a){return m2a(this,Ra(a))};c.l=function(){return"ArrayBuilder.ofLong"};
+c.Ba=function(){var a;0!==this.$a&&this.$a===this.ua?(this.$a=0,a=this.eb):a=n2a(this,this.ua);return a};c.pf=function(a){this.eb=n2a(this,a);this.$a=a};function n2a(a,b){b=la(Xa(eb),[b]);0<a.ua&&Lv(Af(),a.eb,0,b,0,a.ua);return b}c.Ma=function(a){return m2a(this,Ra(a))};c.oc=function(a){this.$a<a&&this.pf(a)};c.kf=function(a){if(this.$a<a||0===this.$a){for(var b=0===this.$a?16:this.$a<<1;b<a;)b<<=1;this.pf(b)}};
+c.Xb=function(a){a&&a.$classData&&a.$classData.m.FG?(this.kf(this.ua+a.sa()|0),Lv(Af(),a.qa,0,this.eb,this.ua,a.sa()),this.ua=this.ua+a.sa()|0,a=this):a=IC(this,a);return a};c.$classData=g({DZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofLong",{DZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function JS(){this.eb=this.hV=null;this.ua=this.$a=0}JS.prototype=new t6;JS.prototype.constructor=JS;c=JS.prototype;c.Bp=function(a){this.hV=a;this.ua=this.$a=0;return this};
+c.o=function(a){return a&&a.$classData&&a.$classData.m.EZ?this.ua===a.ua&&this.eb===a.eb:!1};c.cd=function(a){return wra(this,a)};c.l=function(){return"ArrayBuilder.ofRef"};c.Ba=function(){return xra(this)};c.pf=function(a){this.eb=o2a(this,a);this.$a=a};function wra(a,b){a.kf(1+a.ua|0);a.eb.n[a.ua]=b;a.ua=1+a.ua|0;return a}function xra(a){return 0!==a.$a&&a.$a===a.ua?(a.$a=0,a.eb):o2a(a,a.ua)}c.Ma=function(a){return wra(this,a)};c.oc=function(a){this.$a<a&&this.pf(a)};
+c.kf=function(a){if(this.$a<a||0===this.$a){for(var b=0===this.$a?16:this.$a<<1;b<a;)b<<=1;this.pf(b)}};function o2a(a,b){b=a.hV.bh(b);0<a.ua&&Lv(Af(),a.eb,0,b,0,a.ua);return b}c.Xb=function(a){a&&a.$classData&&a.$classData.m.GG?(this.kf(this.ua+a.sa()|0),Lv(Af(),a.qa,0,this.eb,this.ua,a.sa()),this.ua=this.ua+a.sa()|0,a=this):a=IC(this,a);return a};c.$classData=g({EZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofRef",{EZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});
+function Y6(){this.eb=null;this.ua=this.$a=0}Y6.prototype=new t6;Y6.prototype.constructor=Y6;c=Y6.prototype;c.b=function(){this.ua=this.$a=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.m.FZ?this.ua===a.ua&&this.eb===a.eb:!1};function p2a(a,b){a.kf(1+a.ua|0);a.eb.n[a.ua]=b;a.ua=1+a.ua|0;return a}c.cd=function(a){return p2a(this,a|0)};c.l=function(){return"ArrayBuilder.ofShort"};c.Ba=function(){var a;0!==this.$a&&this.$a===this.ua?(this.$a=0,a=this.eb):a=q2a(this,this.ua);return a};
+c.pf=function(a){this.eb=q2a(this,a);this.$a=a};function q2a(a,b){b=la(Xa(cb),[b]);0<a.ua&&Lv(Af(),a.eb,0,b,0,a.ua);return b}c.Ma=function(a){return p2a(this,a|0)};c.oc=function(a){this.$a<a&&this.pf(a)};c.kf=function(a){if(this.$a<a||0===this.$a){for(var b=0===this.$a?16:this.$a<<1;b<a;)b<<=1;this.pf(b)}};c.Xb=function(a){a&&a.$classData&&a.$classData.m.HG?(this.kf(this.ua+a.sa()|0),Lv(Af(),a.qa,0,this.eb,this.ua,a.sa()),this.ua=this.ua+a.sa()|0,a=this):a=IC(this,a);return a};
+c.$classData=g({FZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofShort",{FZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function Z6(){this.ua=0}Z6.prototype=new t6;Z6.prototype.constructor=Z6;c=Z6.prototype;c.b=function(){this.ua=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.m.GZ?this.ua===a.ua:!1};c.cd=function(){return r2a(this)};c.l=function(){return"ArrayBuilder.ofUnit"};function r2a(a){a.ua=1+a.ua|0;return a}
+c.Ba=function(){for(var a=la(Xa(Ba),[this.ua]),b=0;b<this.ua;)a.n[b]=void 0,b=1+b|0;return a};c.Ma=function(){return r2a(this)};c.Xb=function(a){this.ua=this.ua+a.Da()|0;return this};c.$classData=g({GZ:0},!1,"scala.collection.mutable.ArrayBuilder$ofUnit",{GZ:1,an:1,d:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function $6(){}$6.prototype=new Z2;$6.prototype.constructor=$6;$6.prototype.b=function(){return this};$6.prototype.Wk=function(){return(new z5).b()};
+$6.prototype.$classData=g({fka:0},!1,"scala.collection.mutable.HashSet$",{fka:1,iZ:1,Nt:1,Mt:1,ze:1,d:1,Ae:1,k:1,h:1});var s2a=void 0;function a7(){}a7.prototype=new Z2;a7.prototype.constructor=a7;a7.prototype.b=function(){return this};a7.prototype.Wk=function(){return(new b7).b()};a7.prototype.$classData=g({ska:0},!1,"scala.collection.mutable.LinkedHashSet$",{ska:1,iZ:1,Nt:1,Mt:1,ze:1,d:1,Ae:1,k:1,h:1});var t2a=void 0;function pE(){NS.call(this);this.op=null}pE.prototype=new N0;
+pE.prototype.constructor=pE;c=pE.prototype;c.u=function(){return"JavaScriptException"};c.v=function(){return 1};c.av=function(){this.stackdata=this.op;return this};c.o=function(a){return this===a?!0:oE(a)?Em(Fm(),this.op,a.op):!1};c.w=function(a){switch(a){case 0:return this.op;default:throw(new O).c(""+a);}};c.Vf=function(){return na(this.op)};c.i=function(a){this.op=a;NS.prototype.ic.call(this,null,null,0,!0);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function oE(a){return!!(a&&a.$classData&&a.$classData.m.a_)}c.$classData=g({a_:0},!1,"scala.scalajs.js.JavaScriptException",{a_:1,ge:1,Wc:1,tc:1,d:1,h:1,t:1,q:1,k:1});function eG(){this.p=this.g=this.f=null;this.a=0}eG.prototype=new l;eG.prototype.constructor=eG;c=eG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_and"};c.v=function(){return 0};c.o=function(a){return Fza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=Xi(A());x();var b=[Xi(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=Xi(A()),e=-6+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 7");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 7");return this.g};function Fza(a){return!!(a&&a.$classData&&a.$classData.m.EJ)}c.$classData=g({EJ:0},!1,"org.nlogo.core.prim._and",{EJ:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function $m(){this.p=this.g=this.f=this.Bc=this.Uk=this.Fe=null;this.a=0}$m.prototype=new l;$m.prototype.constructor=$m;c=$m.prototype;c.u=function(){return"_commandlambda"};c.v=function(){return 3};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.o=function(a){if(this===a)return!0;if(On(a)){var b=this.Fe,d=a.Fe;(null===b?null===d:b.o(d))?(b=this.Uk,d=a.Uk,b=null===b?null===d:f5(b,d)):b=!1;if(b)return b=this.Bc,a=a.Bc,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Fe;case 1:return this.Uk;case 2:return this.Bc;default:throw(new O).c(""+a);}};c.l=function(){return"_commandlambda"+this.Fe.Rk().Qc("(",", ",")")};c.lv=function(a,b,d){this.Fe=a;this.Uk=b;this.Bc=d;L(this);return this};c.G=function(){var a=tj(A()),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.kv=function(a){$m.prototype.lv.call(this,a,G(Ne().ou,u()),C());return this};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 76");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};function Coa(a,b,d,e){b=(new $m).lv(b,d,e);return dh(a,b)}c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 76");return this.g};function On(a){return!!(a&&a.$classData&&a.$classData.m.LJ)}c.$classData=g({LJ:0},!1,"org.nlogo.core.prim._commandlambda",{LJ:1,d:1,KK:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function Xm(){this.p=this.g=this.f=this.W=null;this.a=0}Xm.prototype=new l;Xm.prototype.constructor=Xm;c=Xm.prototype;c.u=function(){return"_const"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:Mn(a)?Em(Fm(),this.W,a.W):!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.W;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=this.W,a="boolean"===typeof a?Xi(A()):"number"===typeof a?M(A()):zg(a)?Zi(A()):vg(a)?Yi(A()):nc(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.i=function(a){this.W=a;L(this);return this};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 96");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 96");return this.g};function Mn(a){return!!(a&&a.$classData&&a.$classData.m.MJ)}c.$classData=g({MJ:0},!1,"org.nlogo.core.prim._const",{MJ:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function Sm(){this.p=this.g=this.f=this.W=null;this.a=0}Sm.prototype=new l;Sm.prototype.constructor=Sm;c=Sm.prototype;c.u=function(){return"_constcodeblock"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(Hoa(a)){var b=this.W;a=a.W;return null===b?null===a:b.o(a)}return!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.W;default:throw(new O).c(""+a);}};
+c.l=function(){var a=this.W,b=m(new p,function(){return function(a){return a.Zb}}(this)),d=t();return a.ya(b,d.s).Qc("`[ "," "," ]`")};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=zj(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 107");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.Ea=function(a){this.W=a;L(this);return this};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 107");return this.g};
+function Hoa(a){return!!(a&&a.$classData&&a.$classData.m.NJ)}c.$classData=g({NJ:0},!1,"org.nlogo.core.prim._constcodeblock",{NJ:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function IF(){this.p=this.g=this.f=null;this.a=0}IF.prototype=new l;IF.prototype.constructor=IF;c=IF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_equal"};c.v=function(){return 0};c.o=function(a){return Ls(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=nc();x();var b=[nc()],b=(new J).j(b),d=x().s,b=K(b,d),d=Xi(A()),e=-5+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 137");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 137");return this.g};function Ls(a){return!!(a&&a.$classData&&a.$classData.m.SJ)}c.$classData=g({SJ:0},!1,"org.nlogo.core.prim._equal",{SJ:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function JF(){this.p=this.g=this.f=null;this.a=0}JF.prototype=new l;JF.prototype.constructor=JF;c=JF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_greaterthan"};c.v=function(){return 0};c.o=function(a){return $O(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A())|Yi(A())|Vi(A());x();var b=[M(A())|Yi(A())|Vi(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=Xi(A()),e=-4+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 174");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 174");return this.g};function $O(a){return!!(a&&a.$classData&&a.$classData.m.XJ)}c.$classData=g({XJ:0},!1,"org.nlogo.core.prim._greaterthan",{XJ:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function GF(){this.p=this.g=this.f=null;this.a=0}GF.prototype=new l;GF.prototype.constructor=GF;c=GF.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_lessthan"};c.v=function(){return 0};c.o=function(a){return aP(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A())|Yi(A())|Vi(A());x();var b=[M(A())|Yi(A())|Vi(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=Xi(A()),e=-4+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 221");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 221");return this.g};function aP(a){return!!(a&&a.$classData&&a.$classData.m.bK)}c.$classData=g({bK:0},!1,"org.nlogo.core.prim._lessthan",{bK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function JH(){this.p=this.g=this.f=null;this.a=0}JH.prototype=new l;JH.prototype.constructor=JH;c=JH.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_list"};c.v=function(){return 0};c.o=function(a){return nCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Si()|nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=(new H).i(2),e=(new H).i(0),f=z();A();var h=B();A();A();A();var k=C();A();return D(new F,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 261");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 261");return this.g};function nCa(a){return!!(a&&a.$classData&&a.$classData.m.hK)}c.$classData=g({hK:0},!1,"org.nlogo.core.prim._list",{hK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function EF(){this.p=this.g=this.f=null;this.a=0}EF.prototype=new l;EF.prototype.constructor=EF;c=EF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_minus"};
+c.v=function(){return 0};c.o=function(a){return ln(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A());x();var b=[M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=M(A()),e=-3+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 269");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 269");return this.g};
+function ln(a){return!!(a&&a.$classData&&a.$classData.m.iK)}c.$classData=g({iK:0},!1,"org.nlogo.core.prim._minus",{iK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function vI(){this.p=this.g=this.f=null;this.a=0}vI.prototype=new l;vI.prototype.constructor=vI;c=vI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_not"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.SA)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Xi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 294");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 294");return this.g};c.$classData=g({SA:0},!1,"org.nlogo.core.prim._not",{SA:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function BF(){this.p=this.g=this.f=null;this.a=0}BF.prototype=new l;BF.prototype.constructor=BF;c=BF.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_notequal"};c.v=function(){return 0};c.o=function(a){return ZO(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=nc();x();var b=[nc()],b=(new J).j(b),d=x().s,b=K(b,d),d=Xi(A()),e=-5+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 300");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 300");return this.g};function ZO(a){return!!(a&&a.$classData&&a.$classData.m.lK)}c.$classData=g({lK:0},!1,"org.nlogo.core.prim._notequal",{lK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function $U(){this.jd=this.be=0;this.p=this.g=this.f=null;this.a=0}$U.prototype=new l;$U.prototype.constructor=$U;c=$U.prototype;c.u=function(){return"_observervariable"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:yP(a)?this.be===a.be&&this.jd===a.jd:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.be;case 1:return this.jd;default:throw(new O).c(""+a);}};c.l=function(){return"_observervariable("+this.be+")"};c.ha=function(a,b){this.be=a;this.jd=b;L(this);return this};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=this.jd|Ti(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 308");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){var a=-889275714,a=V().ca(a,this.be),a=V().ca(a,this.jd);return V().xb(a,2)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 308");return this.g};function yP(a){return!!(a&&a.$classData&&a.$classData.m.mK)}c.$classData=g({mK:0},!1,"org.nlogo.core.prim._observervariable",{mK:1,d:1,aa:1,A:1,E:1,MI:1,t:1,q:1,k:1,h:1});function yI(){this.p=this.g=this.f=null;this.a=0}yI.prototype=new l;yI.prototype.constructor=yI;c=yI.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_or"};c.v=function(){return 0};c.o=function(a){return Gza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=Xi(A());x();var b=[Xi(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=Xi(A()),e=-6+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 332");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 332");return this.g};function Gza(a){return!!(a&&a.$classData&&a.$classData.m.pK)}c.$classData=g({pK:0},!1,"org.nlogo.core.prim._or",{pK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function YU(){this.jd=this.be=0;this.p=this.g=this.f=null;this.a=0}YU.prototype=new l;YU.prototype.constructor=YU;c=YU.prototype;c.u=function(){return"_patchvariable"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:$q(a)?this.be===a.be&&this.jd===a.jd:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.be;case 1:return this.jd;default:throw(new O).c(""+a);}};c.l=function(){return"_patchvariable("+this.be+")"};c.ha=function(a,b){this.be=a;this.jd=b;L(this);return this};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=this.jd|Ti(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 358");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){var a=-889275714,a=V().ca(a,this.be),a=V().ca(a,this.jd);return V().xb(a,2)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 358");return this.g};function $q(a){return!!(a&&a.$classData&&a.$classData.m.tK)}c.$classData=g({tK:0},!1,"org.nlogo.core.prim._patchvariable",{tK:1,d:1,aa:1,A:1,E:1,MI:1,t:1,q:1,k:1,h:1});function pn(){this.p=this.g=this.f=this.Bc=this.Uk=this.Fe=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.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.o=function(a){if(this===a)return!0;if(vt(a)){var b=this.Fe,d=a.Fe;(null===b?null===d:b.o(d))?(b=this.Uk,d=a.Uk,b=null===b?null===d:f5(b,d)):b=!1;if(b)return b=this.Bc,a=a.Bc,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fe;case 1:return this.Uk;case 2:return this.Bc;default:throw(new O).c(""+a);}};
+c.l=function(){return"_reporterlambda"+this.Fe.Rk().Qc("(",", ",")")};c.lv=function(a,b,d){this.Fe=a;this.Uk=b;this.Bc=d;L(this);return this};c.G=function(){x();var a=[zj(),sj(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=sj(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.kv=function(a){pn.prototype.lv.call(this,a,G(Ne().ou,u()),C());return this};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 388");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};function Boa(a,b,d,e){b=(new pn).lv(b,d,e);return dh(a,b)}c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 388");return this.g};function vt(a){return!!(a&&a.$classData&&a.$classData.m.xK)}c.$classData=g({xK:0},!1,"org.nlogo.core.prim._reporterlambda",{xK:1,d:1,KK:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function pJ(){this.p=this.g=this.f=null;this.a=0}pJ.prototype=new l;pJ.prototype.constructor=pJ;c=pJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_sentence"};
+c.v=function(){return 0};c.o=function(a){return oCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Si()|nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=(new H).i(2),e=(new H).i(0),f=z();A();var h=B();A();A();A();var k=C();A();return D(new F,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 426");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 426");return this.g};
+function oCa(a){return!!(a&&a.$classData&&a.$classData.m.zK)}c.$classData=g({zK:0},!1,"org.nlogo.core.prim._sentence",{zK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function EJ(){this.p=this.g=this.f=null;this.a=0}EJ.prototype=new l;EJ.prototype.constructor=EJ;c=EJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_sum"};c.v=function(){return 0};c.o=function(a){return NV(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 451");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 451");return this.g};function NV(a){return!!(a&&a.$classData&&a.$classData.m.CK)}c.$classData=g({CK:0},!1,"org.nlogo.core.prim._sum",{CK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function on(){this.p=this.g=this.f=null;this.a=0}on.prototype=new l;on.prototype.constructor=on;c=on.prototype;c.b=function(){L(this);return this};c.u=function(){return"_symbol"};c.v=function(){return 0};c.o=function(a){return fn(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=Aj(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 457");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 457");return this.g};function fn(a){return!!(a&&a.$classData&&a.$classData.m.DK)}c.$classData=g({DK:0},!1,"org.nlogo.core.prim._symbol",{DK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function XU(){this.jd=this.be=0;this.p=this.g=this.f=null;this.a=0}XU.prototype=new l;XU.prototype.constructor=XU;c=XU.prototype;c.u=function(){return"_turtlevariable"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:zza(a)?this.be===a.be&&this.jd===a.jd:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.be;case 1:return this.jd;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.ha=function(a,b){this.be=a;this.jd=b;L(this);return this};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=this.jd|Ti(),b=z();A();var d=B();A();var e=u();A();var f=C();A();var h=C();A();A();var k=C();A();return D(new F,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 475");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){var a=-889275714,a=V().ca(a,this.be),a=V().ca(a,this.jd);return V().xb(a,2)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 475");return this.g};function zza(a){return!!(a&&a.$classData&&a.$classData.m.HK)}c.$classData=g({HK:0},!1,"org.nlogo.core.prim._turtlevariable",{HK:1,d:1,aa:1,A:1,E:1,MI:1,t:1,q:1,k:1,h:1});function nn(){this.p=this.g=this.f=null;this.a=0}nn.prototype=new l;nn.prototype.constructor=nn;c=nn.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_unaryminus"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.VA)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 481");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 481");return this.g};c.$classData=g({VA:0},!1,"org.nlogo.core.prim._unaryminus",{VA:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function aK(){this.p=this.g=this.f=null;this.a=0}aK.prototype=new l;aK.prototype.constructor=aK;c=aK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_word"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.WA)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Si()|nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Yi(A()),d=(new H).i(2),e=(new H).i(0),f=z();A();var h=B();A();A();A();var k=C();A();return D(new F,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 503");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/misc.scala: 503");return this.g};
+c.$classData=g({WA:0},!1,"org.nlogo.core.prim._word",{WA:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function bG(){this.p=this.g=this.f=null;this.a=0}bG.prototype=new l;bG.prototype.constructor=bG;c=bG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_abs"};c.v=function(){return 0};c.o=function(a){return ACa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 10");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 10");return this.g};function ACa(a){return!!(a&&a.$classData&&a.$classData.m.MK)}c.$classData=g({MK:0},!1,"org.nlogo.core.prim.etc._abs",{MK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function cG(){this.p=this.g=this.f=null;this.a=0}cG.prototype=new l;
+cG.prototype.constructor=cG;c=cG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_acos"};c.v=function(){return 0};c.o=function(a){return BCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 16");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 16");return this.g};function BCa(a){return!!(a&&a.$classData&&a.$classData.m.NK)}c.$classData=g({NK:0},!1,"org.nlogo.core.prim.etc._acos",{NK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function gG(){this.p=this.g=this.f=null;this.a=0}gG.prototype=new l;gG.prototype.constructor=gG;c=gG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_approximatehsb"};
+c.v=function(){return 0};c.o=function(a){return TCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 17");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 17");return this.g};
+function TCa(a){return!!(a&&a.$classData&&a.$classData.m.QK)}c.$classData=g({QK:0},!1,"org.nlogo.core.prim.etc._approximatehsb",{QK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function hG(){this.p=this.g=this.f=null;this.a=0}hG.prototype=new l;hG.prototype.constructor=hG;c=hG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_approximatergb"};c.v=function(){return 0};c.o=function(a){return UCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 23");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 23");return this.g};function UCa(a){return!!(a&&a.$classData&&a.$classData.m.RK)}c.$classData=g({RK:0},!1,"org.nlogo.core.prim.etc._approximatergb",{RK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function iG(){this.p=this.g=this.f=null;this.a=0}iG.prototype=new l;iG.prototype.constructor=iG;c=iG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_asin"};c.v=function(){return 0};c.o=function(a){return CCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 33");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 33");return this.g};function CCa(a){return!!(a&&a.$classData&&a.$classData.m.SK)}c.$classData=g({SK:0},!1,"org.nlogo.core.prim.etc._asin",{SK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function kG(){this.p=this.g=this.f=null;this.a=0}kG.prototype=new l;kG.prototype.constructor=kG;c=kG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_atan"};
+c.v=function(){return 0};c.o=function(a){return DCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 39");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 39");return this.g};
+function DCa(a){return!!(a&&a.$classData&&a.$classData.m.TK)}c.$classData=g({TK:0},!1,"org.nlogo.core.prim.etc._atan",{TK:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function lG(){M_.call(this)}lG.prototype=new N_;lG.prototype.constructor=lG;c=lG.prototype;c.b=function(){var a=Xi(A());M_.prototype.Tq.call(this,a,(new J).j([]));return this};c.u=function(){return"_autoplot"};c.v=function(){return 0};c.o=function(a){return pCa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function pCa(a){return!!(a&&a.$classData&&a.$classData.m.UK)}c.$classData=g({UK:0},!1,"org.nlogo.core.prim.etc._autoplot",{UK:1,ls:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function DK(){K_.call(this)}DK.prototype=new L_;DK.prototype.constructor=DK;c=DK.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};c.u=function(){return"_autoplotoff"};c.v=function(){return 0};
+c.o=function(a){return iAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function iAa(a){return!!(a&&a.$classData&&a.$classData.m.VK)}c.$classData=g({VK:0},!1,"org.nlogo.core.prim.etc._autoplotoff",{VK:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function EK(){K_.call(this)}EK.prototype=new L_;EK.prototype.constructor=EK;c=EK.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};
+c.u=function(){return"_autoploton"};c.v=function(){return 0};c.o=function(a){return jAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function jAa(a){return!!(a&&a.$classData&&a.$classData.m.WK)}c.$classData=g({WK:0},!1,"org.nlogo.core.prim.etc._autoploton",{WK:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function tG(){this.p=this.g=this.f=null;this.a=0}tG.prototype=new l;
+tG.prototype.constructor=tG;c=tG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_ceil"};c.v=function(){return 0};c.o=function(a){return ECa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 87");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 87");return this.g};function ECa(a){return!!(a&&a.$classData&&a.$classData.m.hL)}c.$classData=g({hL:0},!1,"org.nlogo.core.prim.etc._ceil",{hL:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function KK(){K_.call(this)}KK.prototype=new L_;KK.prototype.constructor=KK;c=KK.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};c.u=function(){return"_clearallplots"};
+c.v=function(){return 0};c.o=function(a){return kAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function kAa(a){return!!(a&&a.$classData&&a.$classData.m.mL)}c.$classData=g({mL:0},!1,"org.nlogo.core.prim.etc._clearallplots",{mL:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function PK(){K_.call(this)}PK.prototype=new L_;PK.prototype.constructor=PK;c=PK.prototype;
+c.b=function(){K_.prototype.Ea.call(this,u());return this};c.u=function(){return"_clearplot"};c.v=function(){return 0};c.o=function(a){return lAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function lAa(a){return!!(a&&a.$classData&&a.$classData.m.sL)}c.$classData=g({sL:0},!1,"org.nlogo.core.prim.etc._clearplot",{sL:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function uG(){this.p=this.g=this.f=null;this.a=0}uG.prototype=new l;uG.prototype.constructor=uG;c=uG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_cos"};c.v=function(){return 0};c.o=function(a){return FCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 148");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 148");return this.g};function FCa(a){return!!(a&&a.$classData&&a.$classData.m.vL)}c.$classData=g({vL:0},!1,"org.nlogo.core.prim.etc._cos",{vL:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function SK(){K_.call(this)}SK.prototype=new L_;SK.prototype.constructor=SK;c=SK.prototype;c.b=function(){var a=[Yi(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};
+c.u=function(){return"_createtemporaryplotpen"};c.v=function(){return 0};c.o=function(a){return mAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function mAa(a){return!!(a&&a.$classData&&a.$classData.m.wL)}c.$classData=g({wL:0},!1,"org.nlogo.core.prim.etc._createtemporaryplotpen",{wL:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function FF(){this.p=this.g=this.f=null;this.a=0}FF.prototype=new l;
+FF.prototype.constructor=FF;c=FF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_div"};c.v=function(){return 0};c.o=function(a){return bDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A());x();var b=[M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=M(A()),e=-2+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 74");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 74");return this.g};function bDa(a){return!!(a&&a.$classData&&a.$classData.m.CL)}c.$classData=g({CL:0},!1,"org.nlogo.core.prim.etc._div",{CL:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function DG(){this.p=this.g=this.f=null;this.a=0}DG.prototype=new l;DG.prototype.constructor=DG;c=DG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_exp"};
+c.v=function(){return 0};c.o=function(a){return GCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 237");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 237");return this.g};
+function GCa(a){return!!(a&&a.$classData&&a.$classData.m.KL)}c.$classData=g({KL:0},!1,"org.nlogo.core.prim.etc._exp",{KL:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function dL(){K_.call(this)}dL.prototype=new L_;dL.prototype.constructor=dL;c=dL.prototype;c.b=function(){var a=[Yi(A()),Yi(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_exportplot"};c.v=function(){return 0};c.o=function(a){return gBa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function gBa(a){return!!(a&&a.$classData&&a.$classData.m.PL)}c.$classData=g({PL:0},!1,"org.nlogo.core.prim.etc._exportplot",{PL:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function aL(){K_.call(this)}aL.prototype=new L_;aL.prototype.constructor=aL;c=aL.prototype;c.b=function(){var a=[Yi(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_exportplots"};c.v=function(){return 0};
+c.o=function(a){return hBa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function hBa(a){return!!(a&&a.$classData&&a.$classData.m.QL)}c.$classData=g({QL:0},!1,"org.nlogo.core.prim.etc._exportplots",{QL:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function WG(){this.p=this.g=this.f=null;this.a=0}WG.prototype=new l;WG.prototype.constructor=WG;c=WG.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_floor"};c.v=function(){return 0};c.o=function(a){return HCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 340");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 340");return this.g};
+function HCa(a){return!!(a&&a.$classData&&a.$classData.m.lM)}c.$classData=g({lM:0},!1,"org.nlogo.core.prim.etc._floor",{lM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function XG(){this.p=this.g=this.f=null;this.a=0}XG.prototype=new l;XG.prototype.constructor=XG;c=XG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_fput"};c.v=function(){return 0};c.o=function(a){return NBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc(),Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 363");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 363");return this.g};function NBa(a){return!!(a&&a.$classData&&a.$classData.m.pM)}c.$classData=g({pM:0},!1,"org.nlogo.core.prim.etc._fput",{pM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function KF(){this.p=this.g=this.f=null;this.a=0}KF.prototype=new l;KF.prototype.constructor=KF;c=KF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_greaterorequal"};c.v=function(){return 0};c.o=function(a){return vDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A())|Yi(A())|Vi(A());x();var b=[M(A())|Yi(A())|Vi(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=Xi(A()),e=-4+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 138");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 138");return this.g};function vDa(a){return!!(a&&a.$classData&&a.$classData.m.qM)}c.$classData=g({qM:0},!1,"org.nlogo.core.prim.etc._greaterorequal",{qM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function xL(){K_.call(this)}xL.prototype=new L_;xL.prototype.constructor=xL;c=xL.prototype;
+c.b=function(){var a=[Zi(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_histogram"};c.v=function(){return 0};c.o=function(a){return nAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function nAa(a){return!!(a&&a.$classData&&a.$classData.m.sM)}c.$classData=g({sM:0},!1,"org.nlogo.core.prim.etc._histogram",{sM:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function fH(){this.p=this.g=this.f=null;this.a=0}fH.prototype=new l;fH.prototype.constructor=fH;c=fH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_ifelsevalue"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.xB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Xi(A()),vj(A()),vj(A())|Xi(A())|Si()],a=(new J).j(a),b=x().s,a=K(a,b),b=nc(),d=(new H).i(3),e=-7+z()|0;A();var f=B();A();var h=C();A();A();A();var k=C();A();return D(new F,e,f,a,b,d,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 399");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 399");return this.g};c.$classData=g({xB:0},!1,"org.nlogo.core.prim.etc._ifelsevalue",{xB:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function iH(){this.p=this.g=this.f=null;this.a=0}iH.prototype=new l;iH.prototype.constructor=iH;c=iH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_insertitem"};
+c.v=function(){return 0};c.o=function(a){return OBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),Zi(A())|Yi(A()),nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A())|Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 421");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 421");return this.g};
+function OBa(a){return!!(a&&a.$classData&&a.$classData.m.AM)}c.$classData=g({AM:0},!1,"org.nlogo.core.prim.etc._insertitem",{AM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function jH(){this.p=this.g=this.f=null;this.a=0}jH.prototype=new l;jH.prototype.constructor=jH;c=jH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_int"};c.v=function(){return 0};c.o=function(a){return ICa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 432");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 432");return this.g};function ICa(a){return!!(a&&a.$classData&&a.$classData.m.CM)}c.$classData=g({CM:0},!1,"org.nlogo.core.prim.etc._int",{CM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function kH(){this.p=this.g=this.f=null;this.a=0}kH.prototype=new l;kH.prototype.constructor=kH;c=kH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isagent"};c.v=function(){return 0};c.o=function(a){return iEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 438");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 438");return this.g};function iEa(a){return!!(a&&a.$classData&&a.$classData.m.DM)}c.$classData=g({DM:0},!1,"org.nlogo.core.prim.etc._isagent",{DM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function lH(){this.p=this.g=this.f=null;this.a=0}lH.prototype=new l;lH.prototype.constructor=lH;c=lH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isagentset"};
+c.v=function(){return 0};c.o=function(a){return jEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 444");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 444");return this.g};
+function jEa(a){return!!(a&&a.$classData&&a.$classData.m.EM)}c.$classData=g({EM:0},!1,"org.nlogo.core.prim.etc._isagentset",{EM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function mH(){this.p=this.g=this.f=null;this.a=0}mH.prototype=new l;mH.prototype.constructor=mH;c=mH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isanonymouscommand"};c.v=function(){return 0};c.o=function(a){return kEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 456");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 456");return this.g};function kEa(a){return!!(a&&a.$classData&&a.$classData.m.FM)}c.$classData=g({FM:0},!1,"org.nlogo.core.prim.etc._isanonymouscommand",{FM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function nH(){this.p=this.g=this.f=null;this.a=0}nH.prototype=new l;nH.prototype.constructor=nH;c=nH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isanonymousreporter"};c.v=function(){return 0};c.o=function(a){return lEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 504");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 504");return this.g};function lEa(a){return!!(a&&a.$classData&&a.$classData.m.GM)}c.$classData=g({GM:0},!1,"org.nlogo.core.prim.etc._isanonymousreporter",{GM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function oH(){this.p=this.g=this.f=null;this.a=0}oH.prototype=new l;oH.prototype.constructor=oH;c=oH.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_isboolean"};c.v=function(){return 0};c.o=function(a){return mEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 450");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 450");return this.g};
+function mEa(a){return!!(a&&a.$classData&&a.$classData.m.HM)}c.$classData=g({HM:0},!1,"org.nlogo.core.prim.etc._isboolean",{HM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function pH(){this.p=this.g=this.f=null;this.a=0}pH.prototype=new l;pH.prototype.constructor=pH;c=pH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isdirectedlink"};c.v=function(){return 0};c.o=function(a){return oEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 462");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 462");return this.g};function oEa(a){return!!(a&&a.$classData&&a.$classData.m.JM)}c.$classData=g({JM:0},!1,"org.nlogo.core.prim.etc._isdirectedlink",{JM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function rH(){this.p=this.g=this.f=null;this.a=0}rH.prototype=new l;rH.prototype.constructor=rH;c=rH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_islink"};c.v=function(){return 0};c.o=function(a){return pEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 468");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 468");return this.g};function pEa(a){return!!(a&&a.$classData&&a.$classData.m.KM)}c.$classData=g({KM:0},!1,"org.nlogo.core.prim.etc._islink",{KM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function qH(){this.p=this.g=this.f=null;this.a=0}qH.prototype=new l;qH.prototype.constructor=qH;c=qH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_islinkset"};
+c.v=function(){return 0};c.o=function(a){return qEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 474");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 474");return this.g};
+function qEa(a){return!!(a&&a.$classData&&a.$classData.m.LM)}c.$classData=g({LM:0},!1,"org.nlogo.core.prim.etc._islinkset",{LM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function sH(){this.p=this.g=this.f=null;this.a=0}sH.prototype=new l;sH.prototype.constructor=sH;c=sH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_islist"};c.v=function(){return 0};c.o=function(a){return rEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 480");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 480");return this.g};function rEa(a){return!!(a&&a.$classData&&a.$classData.m.MM)}c.$classData=g({MM:0},!1,"org.nlogo.core.prim.etc._islist",{MM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function tH(){this.p=this.g=this.f=null;this.a=0}tH.prototype=new l;tH.prototype.constructor=tH;c=tH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isnumber"};c.v=function(){return 0};c.o=function(a){return sEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 486");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 486");return this.g};function sEa(a){return!!(a&&a.$classData&&a.$classData.m.NM)}c.$classData=g({NM:0},!1,"org.nlogo.core.prim.etc._isnumber",{NM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function vH(){this.p=this.g=this.f=null;this.a=0}vH.prototype=new l;vH.prototype.constructor=vH;c=vH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_ispatch"};
+c.v=function(){return 0};c.o=function(a){return tEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 492");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 492");return this.g};
+function tEa(a){return!!(a&&a.$classData&&a.$classData.m.OM)}c.$classData=g({OM:0},!1,"org.nlogo.core.prim.etc._ispatch",{OM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function uH(){this.p=this.g=this.f=null;this.a=0}uH.prototype=new l;uH.prototype.constructor=uH;c=uH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_ispatchset"};c.v=function(){return 0};c.o=function(a){return uEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 498");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 498");return this.g};function uEa(a){return!!(a&&a.$classData&&a.$classData.m.PM)}c.$classData=g({PM:0},!1,"org.nlogo.core.prim.etc._ispatchset",{PM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function wH(){this.p=this.g=this.f=null;this.a=0}wH.prototype=new l;wH.prototype.constructor=wH;c=wH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isstring"};c.v=function(){return 0};c.o=function(a){return vEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 510");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 510");return this.g};function vEa(a){return!!(a&&a.$classData&&a.$classData.m.QM)}c.$classData=g({QM:0},!1,"org.nlogo.core.prim.etc._isstring",{QM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function yH(){this.p=this.g=this.f=null;this.a=0}yH.prototype=new l;yH.prototype.constructor=yH;c=yH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isturtle"};
+c.v=function(){return 0};c.o=function(a){return wEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 516");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 516");return this.g};
+function wEa(a){return!!(a&&a.$classData&&a.$classData.m.RM)}c.$classData=g({RM:0},!1,"org.nlogo.core.prim.etc._isturtle",{RM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function xH(){this.p=this.g=this.f=null;this.a=0}xH.prototype=new l;xH.prototype.constructor=xH;c=xH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isturtleset"};c.v=function(){return 0};c.o=function(a){return xEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 522");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 522");return this.g};function xEa(a){return!!(a&&a.$classData&&a.$classData.m.SM)}c.$classData=g({SM:0},!1,"org.nlogo.core.prim.etc._isturtleset",{SM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function zH(){this.p=this.g=this.f=null;this.a=0}zH.prototype=new l;zH.prototype.constructor=zH;c=zH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_isundirectedlink"};c.v=function(){return 0};c.o=function(a){return yEa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Xi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 528");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 528");return this.g};function yEa(a){return!!(a&&a.$classData&&a.$classData.m.TM)}c.$classData=g({TM:0},!1,"org.nlogo.core.prim.etc._isundirectedlink",{TM:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function CH(){this.p=this.g=this.f=null;this.a=0}CH.prototype=new l;CH.prototype.constructor=CH;c=CH.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_length"};c.v=function(){return 0};c.o=function(a){return RBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())|Yi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 212");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 212");return this.g};
+function RBa(a){return!!(a&&a.$classData&&a.$classData.m.$M)}c.$classData=g({$M:0},!1,"org.nlogo.core.prim.etc._length",{$M:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function HF(){this.p=this.g=this.f=null;this.a=0}HF.prototype=new l;HF.prototype.constructor=HF;c=HF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_lessorequal"};c.v=function(){return 0};c.o=function(a){return wDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A())|Yi(A())|Vi(A());x();var b=[M(A())|Yi(A())|Vi(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=Xi(A()),e=-4+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 218");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 218");return this.g};function wDa(a){return!!(a&&a.$classData&&a.$classData.m.aN)}c.$classData=g({aN:0},!1,"org.nlogo.core.prim.etc._lessorequal",{aN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function KH(){this.p=this.g=this.f=null;this.a=0}KH.prototype=new l;KH.prototype.constructor=KH;c=KH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_ln"};c.v=function(){return 0};c.o=function(a){return JCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 241");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 241");return this.g};function JCa(a){return!!(a&&a.$classData&&a.$classData.m.iN)}c.$classData=g({iN:0},!1,"org.nlogo.core.prim.etc._ln",{iN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function LH(){this.p=this.g=this.f=null;this.a=0}LH.prototype=new l;LH.prototype.constructor=LH;c=LH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_log"};
+c.v=function(){return 0};c.o=function(a){return KCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 247");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 247");return this.g};
+function KCa(a){return!!(a&&a.$classData&&a.$classData.m.jN)}c.$classData=g({jN:0},!1,"org.nlogo.core.prim.etc._log",{jN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function MH(){this.p=this.g=this.f=null;this.a=0}MH.prototype=new l;MH.prototype.constructor=MH;c=MH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_lput"};c.v=function(){return 0};c.o=function(a){return SBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc(),Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 573");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 573");return this.g};function SBa(a){return!!(a&&a.$classData&&a.$classData.m.kN)}c.$classData=g({kN:0},!1,"org.nlogo.core.prim.etc._lput",{kN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function OH(){this.p=this.g=this.f=null;this.a=0}OH.prototype=new l;OH.prototype.constructor=OH;c=OH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_max"};c.v=function(){return 0};c.o=function(a){return TBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 253");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 253");return this.g};function TBa(a){return!!(a&&a.$classData&&a.$classData.m.mN)}c.$classData=g({mN:0},!1,"org.nlogo.core.prim.etc._max",{mN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function TH(){this.p=this.g=this.f=null;this.a=0}TH.prototype=new l;TH.prototype.constructor=TH;c=TH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_mean"};
+c.v=function(){return 0};c.o=function(a){return UBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 275");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 275");return this.g};
+function UBa(a){return!!(a&&a.$classData&&a.$classData.m.pN)}c.$classData=g({pN:0},!1,"org.nlogo.core.prim.etc._mean",{pN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function WH(){this.p=this.g=this.f=null;this.a=0}WH.prototype=new l;WH.prototype.constructor=WH;c=WH.prototype;c.b=function(){L(this);return this};c.u=function(){return"_min"};c.v=function(){return 0};c.o=function(a){return XBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 293");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 293");return this.g};function XBa(a){return!!(a&&a.$classData&&a.$classData.m.sN)}c.$classData=g({sN:0},!1,"org.nlogo.core.prim.etc._min",{sN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function aI(){this.p=this.g=this.f=null;this.a=0}aI.prototype=new l;aI.prototype.constructor=aI;c=aI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_mod"};c.v=function(){return 0};c.o=function(a){return LCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A());x();var b=[M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=M(A()),e=-2+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 315");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 315");return this.g};function LCa(a){return!!(a&&a.$classData&&a.$classData.m.wN)}c.$classData=g({wN:0},!1,"org.nlogo.core.prim.etc._mod",{wN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function bI(){this.p=this.g=this.f=null;this.a=0}bI.prototype=new l;bI.prototype.constructor=bI;c=bI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_modes"};
+c.v=function(){return 0};c.o=function(a){return YBa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 323");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 323");return this.g};
+function YBa(a){return!!(a&&a.$classData&&a.$classData.m.xN)}c.$classData=g({xN:0},!1,"org.nlogo.core.prim.etc._modes",{xN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function CF(){this.p=this.g=this.f=null;this.a=0}CF.prototype=new l;CF.prototype.constructor=CF;c=CF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_mult"};c.v=function(){return 0};c.o=function(a){return Dza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A());x();var b=[M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=M(A()),e=-2+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 631");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 631");return this.g};function Dza(a){return!!(a&&a.$classData&&a.$classData.m.DN)}c.$classData=g({DN:0},!1,"org.nlogo.core.prim.etc._mult",{DN:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function eM(){I_.call(this)}
+eM.prototype=new J_;eM.prototype.constructor=eM;c=eM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_outputprint"};c.v=function(){return 0};c.o=function(a){return Nza(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Nza(a){return!!(a&&a.$classData&&a.$classData.m.RN)}
+c.$classData=g({RN:0},!1,"org.nlogo.core.prim.etc._outputprint",{RN:1,cu:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function fM(){I_.call(this)}fM.prototype=new J_;fM.prototype.constructor=fM;c=fM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_outputshow"};c.v=function(){return 0};c.o=function(a){return Oza(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function Oza(a){return!!(a&&a.$classData&&a.$classData.m.SN)}c.$classData=g({SN:0},!1,"org.nlogo.core.prim.etc._outputshow",{SN:1,cu:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function gM(){I_.call(this)}gM.prototype=new J_;gM.prototype.constructor=gM;c=gM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_outputtype"};c.v=function(){return 0};c.o=function(a){return Pza(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};function Pza(a){return!!(a&&a.$classData&&a.$classData.m.TN)}c.$classData=g({TN:0},!1,"org.nlogo.core.prim.etc._outputtype",{TN:1,cu:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function hM(){O_.call(this)}hM.prototype=new swa;hM.prototype.constructor=hM;c=hM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_outputwrite"};c.v=function(){return 0};c.o=function(a){return Qza(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Qza(a){return!!(a&&a.$classData&&a.$classData.m.UN)}c.$classData=g({UN:0},!1,"org.nlogo.core.prim.etc._outputwrite",{UN:1,e2:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function lM(){K_.call(this)}lM.prototype=new L_;lM.prototype.constructor=lM;c=lM.prototype;c.b=function(){var a=[M(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_plot"};c.v=function(){return 0};
+c.o=function(a){return rAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function rAa(a){return!!(a&&a.$classData&&a.$classData.m.gO)}c.$classData=g({gO:0},!1,"org.nlogo.core.prim.etc._plot",{gO:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function LI(){M_.call(this)}LI.prototype=new N_;LI.prototype.constructor=LI;c=LI.prototype;
+c.b=function(){var a=Yi(A());M_.prototype.Tq.call(this,a,(new J).j([]));return this};c.u=function(){return"_plotname"};c.v=function(){return 0};c.o=function(a){return qCa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function qCa(a){return!!(a&&a.$classData&&a.$classData.m.hO)}c.$classData=g({hO:0},!1,"org.nlogo.core.prim.etc._plotname",{hO:1,ls:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function mM(){K_.call(this)}mM.prototype=new L_;mM.prototype.constructor=mM;c=mM.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};c.u=function(){return"_plotpendown"};c.v=function(){return 0};c.o=function(a){return oAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function oAa(a){return!!(a&&a.$classData&&a.$classData.m.iO)}
+c.$classData=g({iO:0},!1,"org.nlogo.core.prim.etc._plotpendown",{iO:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function MI(){M_.call(this)}MI.prototype=new N_;MI.prototype.constructor=MI;c=MI.prototype;c.b=function(){var a=Xi(A()),b=[Yi(A())];M_.prototype.Tq.call(this,a,(new J).j(b));return this};c.u=function(){return"_plotpenexists"};c.v=function(){return 0};c.o=function(a){return rCa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};function rCa(a){return!!(a&&a.$classData&&a.$classData.m.jO)}c.$classData=g({jO:0},!1,"org.nlogo.core.prim.etc._plotpenexists",{jO:1,ls:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function sK(){K_.call(this)}sK.prototype=new L_;sK.prototype.constructor=sK;c=sK.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};c.u=function(){return"_plotpenhide"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.kO)&&!0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({kO:0},!1,"org.nlogo.core.prim.etc._plotpenhide",{kO:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function nM(){K_.call(this)}nM.prototype=new L_;nM.prototype.constructor=nM;c=nM.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};c.u=function(){return"_plotpenreset"};c.v=function(){return 0};c.o=function(a){return pAa(a)&&!0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function pAa(a){return!!(a&&a.$classData&&a.$classData.m.lO)}c.$classData=g({lO:0},!1,"org.nlogo.core.prim.etc._plotpenreset",{lO:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function tK(){K_.call(this)}tK.prototype=new L_;tK.prototype.constructor=tK;c=tK.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};c.u=function(){return"_plotpenshow"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.mO)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({mO:0},!1,"org.nlogo.core.prim.etc._plotpenshow",{mO:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function oM(){K_.call(this)}oM.prototype=new L_;oM.prototype.constructor=oM;c=oM.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};
+c.u=function(){return"_plotpenup"};c.v=function(){return 0};c.o=function(a){return qAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function qAa(a){return!!(a&&a.$classData&&a.$classData.m.nO)}c.$classData=g({nO:0},!1,"org.nlogo.core.prim.etc._plotpenup",{nO:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function NI(){M_.call(this)}NI.prototype=new N_;NI.prototype.constructor=NI;c=NI.prototype;
+c.b=function(){var a=M(A());M_.prototype.Tq.call(this,a,(new J).j([]));return this};c.u=function(){return"_plotxmax"};c.v=function(){return 0};c.o=function(a){return sCa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function sCa(a){return!!(a&&a.$classData&&a.$classData.m.oO)}c.$classData=g({oO:0},!1,"org.nlogo.core.prim.etc._plotxmax",{oO:1,ls:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function OI(){M_.call(this)}OI.prototype=new N_;OI.prototype.constructor=OI;c=OI.prototype;c.b=function(){var a=M(A());M_.prototype.Tq.call(this,a,(new J).j([]));return this};c.u=function(){return"_plotxmin"};c.v=function(){return 0};c.o=function(a){return tCa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function tCa(a){return!!(a&&a.$classData&&a.$classData.m.pO)}
+c.$classData=g({pO:0},!1,"org.nlogo.core.prim.etc._plotxmin",{pO:1,ls:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function pM(){K_.call(this)}pM.prototype=new L_;pM.prototype.constructor=pM;c=pM.prototype;c.b=function(){var a=[M(A()),M(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_plotxy"};c.v=function(){return 0};c.o=function(a){return sAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};function sAa(a){return!!(a&&a.$classData&&a.$classData.m.qO)}c.$classData=g({qO:0},!1,"org.nlogo.core.prim.etc._plotxy",{qO:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function PI(){M_.call(this)}PI.prototype=new N_;PI.prototype.constructor=PI;c=PI.prototype;c.b=function(){var a=M(A());M_.prototype.Tq.call(this,a,(new J).j([]));return this};c.u=function(){return"_plotymax"};c.v=function(){return 0};c.o=function(a){return uCa(a)&&!0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function uCa(a){return!!(a&&a.$classData&&a.$classData.m.rO)}c.$classData=g({rO:0},!1,"org.nlogo.core.prim.etc._plotymax",{rO:1,ls:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function QI(){M_.call(this)}QI.prototype=new N_;QI.prototype.constructor=QI;c=QI.prototype;c.b=function(){var a=M(A());M_.prototype.Tq.call(this,a,(new J).j([]));return this};c.u=function(){return"_plotymin"};
+c.v=function(){return 0};c.o=function(a){return vCa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function vCa(a){return!!(a&&a.$classData&&a.$classData.m.sO)}c.$classData=g({sO:0},!1,"org.nlogo.core.prim.etc._plotymin",{sO:1,ls:1,d:1,aa:1,A:1,E:1,t:1,q:1,k:1,h:1});function DF(){this.p=this.g=this.f=null;this.a=0}DF.prototype=new l;DF.prototype.constructor=DF;c=DF.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_plus"};c.v=function(){return 0};c.o=function(a){return Cza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){var a=M(A());x();var b=[M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=M(A()),e=-3+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 747");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 747");return this.g};function Cza(a){return!!(a&&a.$classData&&a.$classData.m.tO)}c.$classData=g({tO:0},!1,"org.nlogo.core.prim.etc._plus",{tO:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function LF(){this.p=this.g=this.f=null;this.a=0}LF.prototype=new l;LF.prototype.constructor=LF;c=LF.prototype;c.b=function(){L(this);return this};c.u=function(){return"_pow"};
+c.v=function(){return 0};c.o=function(a){return MCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){var a=M(A());x();var b=[M(A())],b=(new J).j(b),d=x().s,b=K(b,d),d=M(A()),e=-1+z()|0;A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 755");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 755");return this.g};
+function MCa(a){return!!(a&&a.$classData&&a.$classData.m.vO)}c.$classData=g({vO:0},!1,"org.nlogo.core.prim.etc._pow",{vO:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function SI(){this.p=this.g=this.f=null;this.a=0}SI.prototype=new l;SI.prototype.constructor=SI;c=SI.prototype;c.b=function(){L(this);return this};c.u=function(){return"_precision"};c.v=function(){return 0};c.o=function(a){return NCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 763");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 763");return this.g};function NCa(a){return!!(a&&a.$classData&&a.$classData.m.wO)}c.$classData=g({wO:0},!1,"org.nlogo.core.prim.etc._precision",{wO:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function qM(){I_.call(this)}
+qM.prototype=new J_;qM.prototype.constructor=qM;c=qM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_print"};c.v=function(){return 0};c.o=function(a){return Iza(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Iza(a){return!!(a&&a.$classData&&a.$classData.m.xO)}c.$classData=g({xO:0},!1,"org.nlogo.core.prim.etc._print",{xO:1,cu:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function cJ(){this.p=this.g=this.f=null;this.a=0}cJ.prototype=new l;cJ.prototype.constructor=cJ;c=cJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_range"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.UB)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())|Si()],a=(new J).j(a),b=x().s,a=K(a,b),b=md().Uc(1),d=md().Uc(1),e=Zi(A()),f=z();A();var h=B();A();A();A();var k=C();A();return D(new F,f,h,a,e,b,d,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 833");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 833");return this.g};c.$classData=g({UB:0},!1,"org.nlogo.core.prim.etc._range",{UB:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function fJ(){this.p=this.g=this.f=null;this.a=0}fJ.prototype=new l;fJ.prototype.constructor=fJ;c=fJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_remainder"};c.v=function(){return 0};
+c.o=function(a){return Eza(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 387");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 387");return this.g};
+function Eza(a){return!!(a&&a.$classData&&a.$classData.m.OO)}c.$classData=g({OO:0},!1,"org.nlogo.core.prim.etc._remainder",{OO:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function mJ(){this.p=this.g=this.f=null;this.a=0}mJ.prototype=new l;mJ.prototype.constructor=mJ;c=mJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_round"};c.v=function(){return 0};c.o=function(a){return OCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 889");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 889");return this.g};function OCa(a){return!!(a&&a.$classData&&a.$classData.m.bP)}c.$classData=g({bP:0},!1,"org.nlogo.core.prim.etc._round",{bP:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function oJ(){this.p=this.g=this.f=null;this.a=0}oJ.prototype=new l;oJ.prototype.constructor=oJ;c=oJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_scalecolor"};c.v=function(){return 0};c.o=function(a){return ZCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),M(A()),M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 441");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 441");return this.g};function ZCa(a){return!!(a&&a.$classData&&a.$classData.m.cP)}c.$classData=g({cP:0},!1,"org.nlogo.core.prim.etc._scalecolor",{cP:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function EM(){K_.call(this)}EM.prototype=new L_;EM.prototype.constructor=EM;c=EM.prototype;
+c.b=function(){var a=[Yi(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_setcurrentplot"};c.v=function(){return 0};c.o=function(a){return uAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function uAa(a){return!!(a&&a.$classData&&a.$classData.m.fP)}c.$classData=g({fP:0},!1,"org.nlogo.core.prim.etc._setcurrentplot",{fP:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function FM(){K_.call(this)}FM.prototype=new L_;FM.prototype.constructor=FM;c=FM.prototype;c.b=function(){var a=[Yi(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_setcurrentplotpen"};c.v=function(){return 0};c.o=function(a){return tAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function tAa(a){return!!(a&&a.$classData&&a.$classData.m.gP)}
+c.$classData=g({gP:0},!1,"org.nlogo.core.prim.etc._setcurrentplotpen",{gP:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function HM(){K_.call(this)}HM.prototype=new L_;HM.prototype.constructor=HM;c=HM.prototype;c.b=function(){var a=[M(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_sethistogramnumbars"};c.v=function(){return 0};c.o=function(a){return vAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};function vAa(a){return!!(a&&a.$classData&&a.$classData.m.hP)}c.$classData=g({hP:0},!1,"org.nlogo.core.prim.etc._sethistogramnumbars",{hP:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function JM(){K_.call(this)}JM.prototype=new L_;JM.prototype.constructor=JM;c=JM.prototype;c.b=function(){var a=[M(A())|Zi(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_setplotpencolor"};c.v=function(){return 0};c.o=function(a){return wAa(a)&&!0};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function wAa(a){return!!(a&&a.$classData&&a.$classData.m.kP)}c.$classData=g({kP:0},!1,"org.nlogo.core.prim.etc._setplotpencolor",{kP:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function KM(){K_.call(this)}KM.prototype=new L_;KM.prototype.constructor=KM;c=KM.prototype;c.b=function(){var a=[M(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_setplotpeninterval"};
+c.v=function(){return 0};c.o=function(a){return xAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function xAa(a){return!!(a&&a.$classData&&a.$classData.m.lP)}c.$classData=g({lP:0},!1,"org.nlogo.core.prim.etc._setplotpeninterval",{lP:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function LM(){K_.call(this)}LM.prototype=new L_;LM.prototype.constructor=LM;c=LM.prototype;
+c.b=function(){var a=[M(A())];K_.prototype.Ea.call(this,(new J).j(a));return this};c.u=function(){return"_setplotpenmode"};c.v=function(){return 0};c.o=function(a){return yAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function yAa(a){return!!(a&&a.$classData&&a.$classData.m.mP)}c.$classData=g({mP:0},!1,"org.nlogo.core.prim.etc._setplotpenmode",{mP:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});
+function OM(){K_.call(this)}OM.prototype=new L_;OM.prototype.constructor=OM;c=OM.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};c.u=function(){return"_setupplots"};c.v=function(){return 0};c.o=function(a){return BAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function BAa(a){return!!(a&&a.$classData&&a.$classData.m.pP)}
+c.$classData=g({pP:0},!1,"org.nlogo.core.prim.etc._setupplots",{pP:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function QM(){I_.call(this)}QM.prototype=new J_;QM.prototype.constructor=QM;c=QM.prototype;c.b=function(){L(this);return this};c.u=function(){return"_show"};c.v=function(){return 0};c.o=function(a){return Jza(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+function Jza(a){return!!(a&&a.$classData&&a.$classData.m.tP)}c.$classData=g({tP:0},!1,"org.nlogo.core.prim.etc._show",{tP:1,cu:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function uJ(){this.p=this.g=this.f=null;this.a=0}uJ.prototype=new l;uJ.prototype.constructor=uJ;c=uJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_sin"};c.v=function(){return 0};c.o=function(a){return PCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};
+c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 945");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 945");return this.g};function PCa(a){return!!(a&&a.$classData&&a.$classData.m.wP)}c.$classData=g({wP:0},!1,"org.nlogo.core.prim.etc._sin",{wP:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function vJ(){this.p=this.g=this.f=null;this.a=0}vJ.prototype=new l;vJ.prototype.constructor=vJ;c=vJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_sort"};c.v=function(){return 0};c.o=function(a){return gCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[Zi(A())|$i(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=Zi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 471");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 471");return this.g};function gCa(a){return!!(a&&a.$classData&&a.$classData.m.xP)}c.$classData=g({xP:0},!1,"org.nlogo.core.prim.etc._sort",{xP:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function yJ(){this.p=this.g=this.f=null;this.a=0}yJ.prototype=new l;yJ.prototype.constructor=yJ;c=yJ.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_sqrt"};c.v=function(){return 0};c.o=function(a){return QCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 477");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 477");return this.g};
+function QCa(a){return!!(a&&a.$classData&&a.$classData.m.zP)}c.$classData=g({zP:0},!1,"org.nlogo.core.prim.etc._sqrt",{zP:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function zJ(){this.p=this.g=this.f=null;this.a=0}zJ.prototype=new l;zJ.prototype.constructor=zJ;c=zJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_standarddeviation"};c.v=function(){return 0};c.o=function(a){return iCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 483");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 483");return this.g};function iCa(a){return!!(a&&a.$classData&&a.$classData.m.DP)}c.$classData=g({DP:0},!1,"org.nlogo.core.prim.etc._standarddeviation",{DP:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});
+function DJ(){this.p=this.g=this.f=null;this.a=0}DJ.prototype=new l;DJ.prototype.constructor=DJ;c=DJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_subtractheadings"};c.v=function(){return 0};c.o=function(a){return RCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A()),M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1004");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1004");return this.g};function RCa(a){return!!(a&&a.$classData&&a.$classData.m.LP)}c.$classData=g({LP:0},!1,"org.nlogo.core.prim.etc._subtractheadings",{LP:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function FJ(){this.p=this.g=this.f=null;this.a=0}FJ.prototype=new l;FJ.prototype.constructor=FJ;c=FJ.prototype;c.b=function(){L(this);return this};
+c.u=function(){return"_tan"};c.v=function(){return 0};c.o=function(a){return SCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1016");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1016");return this.g};
+function SCa(a){return!!(a&&a.$classData&&a.$classData.m.NP)}c.$classData=g({NP:0},!1,"org.nlogo.core.prim.etc._tan",{NP:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function aG(){this.p=this.g=this.f=null;this.a=0}aG.prototype=new l;aG.prototype.constructor=aG;c=aG.prototype;c.b=function(){L(this);return this};c.u=function(){return"_tostring"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.m.UP)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[nc()],a=(new J).j(a),b=x().s,a=K(a,b),b=Yi(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1047");return this.f};
+c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1047");return this.g};c.$classData=g({UP:0},!1,"org.nlogo.core.prim.etc._tostring",{UP:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function aN(){I_.call(this)}aN.prototype=new J_;aN.prototype.constructor=aN;c=aN.prototype;
+c.b=function(){L(this);return this};c.u=function(){return"_type"};c.v=function(){return 0};c.o=function(a){return Kza(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Kza(a){return!!(a&&a.$classData&&a.$classData.m.bQ)}c.$classData=g({bQ:0},!1,"org.nlogo.core.prim.etc._type",{bQ:1,cu:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function cN(){K_.call(this)}cN.prototype=new L_;
+cN.prototype.constructor=cN;c=cN.prototype;c.b=function(){K_.prototype.Ea.call(this,u());return this};c.u=function(){return"_updateplots"};c.v=function(){return 0};c.o=function(a){return CAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function CAa(a){return!!(a&&a.$classData&&a.$classData.m.dQ)}
+c.$classData=g({dQ:0},!1,"org.nlogo.core.prim.etc._updateplots",{dQ:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function XJ(){this.p=this.g=this.f=null;this.a=0}XJ.prototype=new l;XJ.prototype.constructor=XJ;c=XJ.prototype;c.b=function(){L(this);return this};c.u=function(){return"_variance"};c.v=function(){return 0};c.o=function(a){return mCa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};
+c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.G=function(){x();var a=[Zi(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 554");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/java.scala: 554");return this.g};function mCa(a){return!!(a&&a.$classData&&a.$classData.m.mQ)}c.$classData=g({mQ:0},!1,"org.nlogo.core.prim.etc._variance",{mQ:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function dK(){this.p=this.g=this.f=null;this.a=0}dK.prototype=new l;
+dK.prototype.constructor=dK;c=dK.prototype;c.b=function(){L(this);return this};c.u=function(){return"_wrapcolor"};c.v=function(){return 0};c.o=function(a){return aDa(a)&&!0};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.G=function(){x();var a=[M(A())],a=(new J).j(a),b=x().s,a=K(a,b),b=M(A()),d=z();A();var e=B();A();var f=C();A();var h=C();A();A();A();var k=C();A();return D(new F,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1140");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/etc.scala: 1140");return this.g};function aDa(a){return!!(a&&a.$classData&&a.$classData.m.tQ)}c.$classData=g({tQ:0},!1,"org.nlogo.core.prim.etc._wrapcolor",{tQ:1,d:1,aa:1,A:1,E:1,yb:1,t:1,q:1,k:1,h:1});function mN(){O_.call(this)}mN.prototype=new swa;mN.prototype.constructor=mN;c=mN.prototype;c.b=function(){L(this);return this};c.u=function(){return"_write"};
+c.v=function(){return 0};c.o=function(a){return Lza(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function Lza(a){return!!(a&&a.$classData&&a.$classData.m.uQ)}c.$classData=g({uQ:0},!1,"org.nlogo.core.prim.etc._write",{uQ:1,e2:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function vz(){}vz.prototype=new JEa;vz.prototype.constructor=vz;vz.prototype.b=function(){return this};
+vz.prototype.$classData=g({d$:0},!1,"scalaz.EitherT$",{d$:1,$ma:1,ana:1,bna:1,cna:1,dna:1,ena:1,d:1,k:1,h:1});var $ja=void 0;function c7(){}c7.prototype=new KFa;c7.prototype.constructor=c7;c7.prototype.b=function(){var a=new d7;Ed(a);ky(a);DR(a);ER(a);FR(a);GR(a);iR(a);HX(a);JR(a);return this};c7.prototype.$classData=g({t$:0},!1,"scalaz.Free$",{t$:1,ina:1,jna:1,kna:1,lna:1,mna:1,d:1,roa:1,hoa:1,ioa:1});var u2a=void 0;function e2(){u2a||(u2a=(new c7).b())}function e7(){}e7.prototype=new LFa;
+e7.prototype.constructor=e7;function v2a(){}v2a.prototype=e7.prototype;function f7(){}f7.prototype=new NFa;f7.prototype.constructor=f7;function w2a(){}w2a.prototype=f7.prototype;function Qd(){}Qd.prototype=new l;Qd.prototype.constructor=Qd;c=Qd.prototype;c.sc=function(){};c.$d=function(a){return Hd(this,a)};c.gi=function(){};c.jg=function(){};c.rh=function(){return"undefined"};c.Ee=function(){};c.nh=function(){};c.wf=function(){};c.mw=function(){};c.zg=function(){};
+c.fe=function(){Gd(this);By(this);Dd(this);Qy(this);rR(this);Nd(this);this.mw(Oua(this));var a=new C0;if(null===this)throw pg(qg(),null);a.da=this;return this};c.Rf=function(){};c.$classData=g({aba:0},!1,"scalaz.std.AnyValInstances$$anon$1",{aba:1,d:1,Uf:1,If:1,pi:1,Fg:1,qg:1,xh:1,goa:1,BS:1});function g7(){this.bZ=null}g7.prototype=new l;g7.prototype.constructor=g7;c=g7.prototype;c.mG=function(){};c.pw=function(){};c.nG=function(){};c.ow=function(){};c.lG=function(){};c.gG=function(){};c.eG=function(){};
+c.$classData=g({Rba:0},!1,"scalaz.std.PartialFunctionInstances$$anon$1",{Rba:1,d:1,C9:1,zaa:1,Fx:1,Daa:1,naa:1,Ex:1,E9:1,P9:1});function wS(){}wS.prototype=new l;wS.prototype.constructor=wS;wS.prototype.pv=function(){return this};wS.prototype.$classData=g({Jca:0},!1,"scalaz.syntax.Syntaxes$traverse$",{Jca:1,d:1,Pca:1,Qca:1,Kca:1,Lca:1,Mca:1,Nca:1,aT:1,bT:1});function VQ(){this.Uy=this.Hc=null;this.iy=0}VQ.prototype=new Mva;VQ.prototype.constructor=VQ;c=VQ.prototype;
+c.Ev=function(){try{return A_(this.Hc,32),!0}catch(a){if(u2(a))return!1;throw a;}};c.Hj=function(){return this.Hc.Hj()};function UQ(a,b,d){a.Hc=b;a.Uy=d;if(null===b)throw(new Re).c("null value for BigDecimal");if(null===d)throw(new Re).c("null MathContext for BigDecimal");a.iy=1565550863;return a}c.jF=function(){try{return A_(this.Hc,16),!0}catch(a){if(u2(a))return!1;throw a;}};c.fy=function(){return this.Hc.Ti()<<24>>24};
+c.o=function(a){if(a&&a.$classData&&a.$classData.m.ZF)return h7(this,a);if(a&&a.$classData&&a.$classData.m.$F){var b=a.re,b=gf(kf(),b),d=D_(this.Hc);if(b>3.3219280948873626*(-2+(d-this.Hc.Rb|0)|0)){var e;if(0>=this.Hc.Rb||0>=kwa(this.Hc).Rb)try{e=(new H).i((new IZ).Ln(jwa(this.Hc)))}catch(f){if(u2(f))e=C();else throw f;}else e=C();if(e.z())return!1;e=e.R();return 0===E_(a.re,e.re)}return!1}return"number"===typeof a?(e=+a,Infinity!==e&&-Infinity!==e&&(a=this.Hc.Am(),Infinity!==a&&-Infinity!==a&&a===
+e)?(e=Mw(),h7(this,Pw(a,e.lk))):!1):xa(a)?(e=+a,Infinity!==e&&-Infinity!==e&&(a=this.Hc.Hq(),Infinity!==a&&-Infinity!==a&&a===e)?(e=Mw(),h7(this,Pw(a,e.lk))):!1):this.Ly()&&cba(this,a)};c.iF=function(){return this.Ev()&&0<=A_(this.Hc,32).ia&&65535>=A_(this.Hc,32).ia};c.l=function(){return this.Hc.l()};c.hF=function(){try{return A_(this.Hc,8),!0}catch(a){if(u2(a))return!1;throw a;}};c.Hg=function(a){return rwa(this.Hc,a.Hc)};c.y_=function(){return this.Hc};
+c.Iz=function(){return this.Hc.Ti()<<16>>16};c.Am=function(){return this.Hc.Am()};c.r=function(){if(1565550863===this.iy){if((0>=this.Hc.Rb||0>=kwa(this.Hc).Rb)&&4934>(D_(this.Hc)-this.Hc.Rb|0))var a=(new IZ).Ln(z_(this.Hc)).r();else{a=this.Hc.Am();if(Infinity!==a&&-Infinity!==a)var b=Mw(),a=h7(this,Pw(a,b.lk));else a=!1;a?a=BE(V(),this.Hc.Am()):(a=kwa(this.Hc),a=S().vt(z_(pwa(a,a.Rb)).r(),a.Rb))}this.iy=a}return this.iy};c.Ti=function(){return this.Hc.Ti()};
+c.Ly=function(){try{return A_(this.Hc,64),!0}catch(a){if(u2(a))return!1;throw a;}};c.Hq=function(){return this.Hc.Hq()};function h7(a,b){return 0===rwa(a.Hc,b.Hc)}var Jva=g({ZF:0},!1,"scala.math.BigDecimal",{ZF:1,pY:1,bl:1,d:1,h:1,Fga:1,qY:1,k:1,Ym:1,Md:1});VQ.prototype.$classData=Jva;function IZ(){this.re=null}IZ.prototype=new Mva;IZ.prototype.constructor=IZ;c=IZ.prototype;c.Ev=function(){var a=HZ(JZ(),-2147483648);return 0<=this.Hg(a)?(a=HZ(JZ(),2147483647),0>=this.Hg(a)):!1};c.Hj=function(){return this.re.Hj()};
+c.jF=function(){var a=HZ(JZ(),-32768);return 0<=this.Hg(a)?(a=HZ(JZ(),32767),0>=this.Hg(a)):!1};c.fy=function(){return this.re.Ti()<<24>>24};
+c.o=function(a){if(a&&a.$classData&&a.$classData.m.$F)return 0===E_(this.re,a.re);if(a&&a.$classData&&a.$classData.m.ZF)return a.o(this);if("number"===typeof a){a=+a;var b=this.re,b=gf(kf(),b);if(53>=b)b=!0;else var d=G_(this.re),b=1024>=b&&d>=(-53+b|0)&&1024>d;return b&&!x2a(this)?(b=this.re,Bh(Ch(),of(qf(),b))===a):!1}return xa(a)?(a=+a,b=this.re,b=gf(kf(),b),24>=b?b=!0:(d=G_(this.re),b=128>=b&&d>=(-24+b|0)&&128>d),b&&!x2a(this)?(b=this.re,b=of(qf(),b),fa(Bh(Ch(),b))===a):!1):this.Ly()&&cba(this,
+a)};function x2a(a){a=Rf(a.re,2147483647);return 0!==a.Wb&&!a.o(JZ().HY)}c.iF=function(){var a=HZ(JZ(),0);return 0<=this.Hg(a)?(a=HZ(JZ(),65535),0>=this.Hg(a)):!1};c.l=function(){var a=this.re;return of(qf(),a)};c.hF=function(){var a=HZ(JZ(),-128);return 0<=this.Hg(a)?(a=HZ(JZ(),127),0>=this.Hg(a)):!1};c.Hg=function(a){return E_(this.re,a.re)};c.y_=function(){return this.re};c.Iz=function(){return this.re.Ti()<<16>>16};c.Am=function(){var a=this.re;return Bh(Ch(),of(qf(),a))};
+c.r=function(){var a;if(this.Ly()){var b=this.Hj();a=b.ia;b=b.oa;a=(-1===b?0<=(-2147483648^a):-1<b)&&(0===b?-1>=(-2147483648^a):0>b)?a:DE(V(),(new Xb).ha(a,b))}else a=fC(V(),this.re);return a};c.Ti=function(){return this.re.Ti()};c.Ln=function(a){this.re=a;return this};c.Ly=function(){var a=Lva(JZ(),(new Xb).ha(0,-2147483648));return 0<=this.Hg(a)?(a=Lva(JZ(),(new Xb).ha(-1,2147483647)),0>=this.Hg(a)):!1};c.Hq=function(){var a=this.re,a=of(qf(),a);return fa(Bh(Ch(),a))};
+var Kva=g({$F:0},!1,"scala.math.BigInt",{$F:1,pY:1,bl:1,d:1,h:1,Fga:1,qY:1,k:1,Ym:1,Md:1});IZ.prototype.$classData=Kva;function i7(){this.sh=null}i7.prototype=new G6;i7.prototype.constructor=i7;i7.prototype.b=function(){this.sh="Boolean";return this};i7.prototype.bh=function(a){return la(Xa(Za),[a])};i7.prototype.Od=function(){return pa(Za)};i7.prototype.$classData=g({Oga:0},!1,"scala.reflect.ManifestFactory$BooleanManifest$",{Oga:1,Up:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var y2a=void 0;
+function gma(){y2a||(y2a=(new i7).b());return y2a}function j7(){this.sh=null}j7.prototype=new G6;j7.prototype.constructor=j7;j7.prototype.b=function(){this.sh="Byte";return this};j7.prototype.bh=function(a){return la(Xa(bb),[a])};j7.prototype.Od=function(){return pa(bb)};j7.prototype.$classData=g({Pga:0},!1,"scala.reflect.ManifestFactory$ByteManifest$",{Pga:1,Up:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var z2a=void 0;function cma(){z2a||(z2a=(new j7).b());return z2a}function k7(){this.sh=null}
+k7.prototype=new G6;k7.prototype.constructor=k7;k7.prototype.b=function(){this.sh="Char";return this};k7.prototype.bh=function(a){return la(Xa($a),[a])};k7.prototype.Od=function(){return pa($a)};k7.prototype.$classData=g({Qga:0},!1,"scala.reflect.ManifestFactory$CharManifest$",{Qga:1,Up:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var A2a=void 0;function ema(){A2a||(A2a=(new k7).b());return A2a}function l7(){this.sh=null}l7.prototype=new G6;l7.prototype.constructor=l7;
+l7.prototype.b=function(){this.sh="Double";return this};l7.prototype.bh=function(a){return la(Xa(gb),[a])};l7.prototype.Od=function(){return pa(gb)};l7.prototype.$classData=g({Rga:0},!1,"scala.reflect.ManifestFactory$DoubleManifest$",{Rga:1,Up:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var B2a=void 0;function OB(){B2a||(B2a=(new l7).b());return B2a}function m7(){this.sh=null}m7.prototype=new G6;m7.prototype.constructor=m7;m7.prototype.b=function(){this.sh="Float";return this};
+m7.prototype.bh=function(a){return la(Xa(fb),[a])};m7.prototype.Od=function(){return pa(fb)};m7.prototype.$classData=g({Sga:0},!1,"scala.reflect.ManifestFactory$FloatManifest$",{Sga:1,Up:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var C2a=void 0;function ri(){C2a||(C2a=(new m7).b());return C2a}function n7(){this.sh=null}n7.prototype=new G6;n7.prototype.constructor=n7;n7.prototype.b=function(){this.sh="Int";return this};n7.prototype.bh=function(a){return la(Xa(db),[a])};n7.prototype.Od=function(){return pa(db)};
+n7.prototype.$classData=g({Tga:0},!1,"scala.reflect.ManifestFactory$IntManifest$",{Tga:1,Up:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var D2a=void 0;function NB(){D2a||(D2a=(new n7).b());return D2a}function o7(){this.sh=null}o7.prototype=new G6;o7.prototype.constructor=o7;o7.prototype.b=function(){this.sh="Long";return this};o7.prototype.bh=function(a){return la(Xa(eb),[a])};o7.prototype.Od=function(){return pa(eb)};
+o7.prototype.$classData=g({Uga:0},!1,"scala.reflect.ManifestFactory$LongManifest$",{Uga:1,Up:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var E2a=void 0;function fma(){E2a||(E2a=(new o7).b());return E2a}function p7(){this.gm=null}p7.prototype=new QFa;p7.prototype.constructor=p7;function q7(){}q7.prototype=p7.prototype;p7.prototype.o=function(a){return this===a};p7.prototype.l=function(){return this.gm};p7.prototype.r=function(){return Ka(this)};function r7(){this.sh=null}r7.prototype=new G6;
+r7.prototype.constructor=r7;r7.prototype.b=function(){this.sh="Short";return this};r7.prototype.bh=function(a){return la(Xa(cb),[a])};r7.prototype.Od=function(){return pa(cb)};r7.prototype.$classData=g({Yga:0},!1,"scala.reflect.ManifestFactory$ShortManifest$",{Yga:1,Up:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var F2a=void 0;function dma(){F2a||(F2a=(new r7).b());return F2a}function s7(){this.sh=null}s7.prototype=new G6;s7.prototype.constructor=s7;s7.prototype.b=function(){this.sh="Unit";return this};
+s7.prototype.bh=function(a){return la(Xa(Ba),[a])};s7.prototype.Od=function(){return pa(Ya)};s7.prototype.$classData=g({Zga:0},!1,"scala.reflect.ManifestFactory$UnitManifest$",{Zga:1,Up:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var G2a=void 0;function hma(){G2a||(G2a=(new s7).b());return G2a}function t7(a,b){a=a.Sa();for(b=b.Sa();a.ra()&&b.ra();)if(!Em(Fm(),a.ka(),b.ka()))return!1;return!a.ra()&&!b.ra()}
+function dca(a){var b=a.Sa(),b=hya(b,b);return(new cc).Nf(b,m(new p,function(a){return function(b){var f=a.db();f.Xb(b);return f.Ba()}}(a)))}function rN(a,b){b=b.gf(a.Ed());var d=(new hC).hb(0);a.ta(m(new p,function(a,b,d){return function(a){b.Ma((new w).e(a,d.Ca));d.Ca=1+d.Ca|0}}(a,b,d)));return b.Ba()}function H2a(a,b){var d=a.db();if(!(0>=b)){d.mg(b,a);var e=0;for(a=a.Sa();e<b&&a.ra();)d.Ma(a.ka()),e=1+e|0}return d.Ba()}
+function I2a(a,b){var d=a.db();IT(d,a,-(0>b?0:b)|0);var e=0;for(a=a.Sa();e<b&&a.ra();)a.ka(),e=1+e|0;return d.Xb(a).Ba()}function J2a(a,b,d,e){var f=d;d=d+e|0;e=qC(W(),b);d=d<e?d:e;for(a=a.Sa();f<d&&a.ra();)qD(W(),b,f,a.ka()),f=1+f|0}function K2a(a,b){var d=a.db();0<=b&&IT(d,a,-b|0);b=a.Sa().lp(b);for(a=a.Sa();b.ra();)d.Ma(a.ka()),b.ka();return d.Ba()}function L2a(a,b){var d=a.db();d.mg(b,a);b=a.Sa().lp(b);for(a=a.Sa();b.ra();)b.ka(),a.ka();for(;a.ra();)d.Ma(a.ka());return d.Ba()}
+function qN(a,b,d){d=d.gf(a.Ed());a=a.Sa();for(b=b.Sa();a.ra()&&b.ra();)d.Ma((new w).e(a.ka(),b.ka()));return d.Ba()}function CC(){this.Qa=this.Rt=null}CC.prototype=new a1;CC.prototype.constructor=CC;c=CC.prototype;c.ka=function(){return this.Rt.ka()};c.u=function(){return"JIteratorWrapper"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.m.FY&&a.Qa===this.Qa?this.Rt===a.Rt:!1};c.w=function(a){switch(a){case 0:return this.Rt;default:throw(new O).c(""+a);}};
+function Mma(a,b,d){a.Rt=d;if(null===b)throw pg(qg(),null);a.Qa=b;return a}c.ra=function(){return this.Rt.ra()};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({FY:0},!1,"scala.collection.convert.Wrappers$JIteratorWrapper",{FY:1,od:1,d:1,Rc:1,Ga:1,Fa:1,t:1,q:1,k:1,h:1});function u7(){this.$v=this.s=null}u7.prototype=new n5;u7.prototype.constructor=u7;u7.prototype.b=function(){xT.prototype.b.call(this);v7=this;this.$v=(new FT).b();return this};
+u7.prototype.Wk=function(){return u()};u7.prototype.db=function(){return(new mc).b()};u7.prototype.$classData=g({Gia:0},!1,"scala.collection.immutable.List$",{Gia:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var v7=void 0;function x(){v7||(v7=(new u7).b());return v7}function w7(){this.s=null}w7.prototype=new n5;w7.prototype.constructor=w7;w7.prototype.b=function(){xT.prototype.b.call(this);return this};
+function xFa(a,b){var d=se(b);return LC(new MC,d,I(function(a,b){return function(){return xFa(sg(),b)}}(a,b)))}function M2a(a,b,d){return LC(new MC,b,I(function(a,b,d){return function(){return M2a(sg(),b+d|0,d)}}(a,b,d)))}function N2a(a,b,d,e){var f=b.Y();return LC(new MC,f,I(function(a,b,d,e){return function(){return HT(b.$(),d,e)}}(a,b,d,e)))}w7.prototype.Wk=function(){return qT()};
+function O2a(a,b,d,e,f){return LC(new MC,b,I(function(a,b,d,e){return function(){return b.$().lc(d,e)}}(a,d,e,f)))}w7.prototype.db=function(){return(new t5).b()};w7.prototype.$classData=g({kja:0},!1,"scala.collection.immutable.Stream$",{kja:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var P2a=void 0;function sg(){P2a||(P2a=(new w7).b());return P2a}function x7(){this.s=null}x7.prototype=new n5;x7.prototype.constructor=x7;x7.prototype.b=function(){xT.prototype.b.call(this);return this};
+x7.prototype.db=function(){return(new M2).b()};x7.prototype.$classData=g({Dja:0},!1,"scala.collection.mutable.ArrayBuffer$",{Dja:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var Q2a=void 0;function P_(){Q2a||(Q2a=(new x7).b());return Q2a}function y7(){this.s=null}y7.prototype=new n5;y7.prototype.constructor=y7;y7.prototype.b=function(){xT.prototype.b.call(this);return this};
+y7.prototype.db=function(){var a=(new M2).b();return QC(new RC,a,m(new p,function(){return function(a){var d=(new z7).hb(a.Zc);pC(a,d.ws,0);return d}}(this)))};y7.prototype.$classData=g({Qja:0},!1,"scala.collection.mutable.ArraySeq$",{Qja:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var R2a=void 0;function tra(){R2a||(R2a=(new y7).b());return R2a}function A7(){this.s=null}A7.prototype=new n5;A7.prototype.constructor=A7;A7.prototype.b=function(){xT.prototype.b.call(this);return this};
+A7.prototype.db=function(){return(new zR).b()};A7.prototype.$classData=g({Sja:0},!1,"scala.collection.mutable.ArrayStack$",{Sja:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var S2a=void 0;function T2a(){S2a||(S2a=(new A7).b());return S2a}function B7(){this.s=null}B7.prototype=new n5;B7.prototype.constructor=B7;B7.prototype.b=function(){xT.prototype.b.call(this);return this};B7.prototype.Wk=function(){return(new C7).b()};B7.prototype.db=function(){var a=(new D7).b();return QC(new RC,a,m(new p,function(){return function(a){return a.sg}}(this)))};
+B7.prototype.$classData=g({wka:0},!1,"scala.collection.mutable.LinkedList$",{wka:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var U2a=void 0;function E7(){this.s=null}E7.prototype=new n5;E7.prototype.constructor=E7;E7.prototype.b=function(){xT.prototype.b.call(this);return this};E7.prototype.db=function(){return exa(new i1,(new mc).b())};E7.prototype.$classData=g({yka:0},!1,"scala.collection.mutable.ListBuffer$",{yka:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var V2a=void 0;
+function F7(){this.s=null}F7.prototype=new n5;F7.prototype.constructor=F7;F7.prototype.b=function(){xT.prototype.b.call(this);return this};F7.prototype.db=function(){return(new D7).b()};F7.prototype.$classData=g({Dka:0},!1,"scala.collection.mutable.MutableList$",{Dka:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var W2a=void 0;function G7(){this.s=null}G7.prototype=new n5;G7.prototype.constructor=G7;G7.prototype.b=function(){xT.prototype.b.call(this);return this};
+G7.prototype.db=function(){var a=(new D7).b();return QC(new RC,a,m(new p,function(){return function(a){var d=a.sg,e=a.wk;a=a.Di;var f=new H7;D7.prototype.b.call(f);f.sg=d;f.wk=e;f.Di=a;return f}}(this)))};G7.prototype.$classData=g({Gka:0},!1,"scala.collection.mutable.Queue$",{Gka:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var X2a=void 0;function $pa(){X2a||(X2a=(new G7).b());return X2a}function FU(){this.td=null;this.kb=this.Na=this.lb=this.Wa=0;this.$o=this.cb=null;this.fp=0}FU.prototype=new l;
+FU.prototype.constructor=FU;c=FU.prototype;c.u=function(){return"Chooser"};c.v=function(){return 8};c.nx=function(){return mi(this.$o,this.fp).lm()};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.m.CA){var b=this.td,d=a.td;(null===b?null===d:b.o(d))&&this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb?(b=this.cb,d=a.cb,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.$o,d=a.$o,b=null===b?null===d:b.o(d)):b=!1;return b?this.fp===a.fp:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.td;case 1:return this.Wa;case 2:return this.lb;case 3:return this.Na;case 4:return this.kb;case 5:return this.cb;case 6:return this.$o;case 7:return this.fp;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Wt=function(){var a=this.td;return a.z()?"":a.R()};function Gsa(a,b,d,e,f,h,k,n,r){a.td=b;a.Wa=d;a.lb=e;a.Na=f;a.kb=h;a.cb=k;a.$o=n;a.fp=r;return a}c.zm=function(){return this};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.td)),a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,fC(V(),this.cb)),a=V().ca(a,fC(V(),this.$o)),a=V().ca(a,this.fp);return V().xb(a,8)};c.x=function(){return Y(new Z,this)};var Hsa=g({CA:0},!1,"org.nlogo.core.Chooser",{CA:1,d:1,on:1,Zt:1,FA:1,$t:1,DA:1,t:1,q:1,k:1,h:1});FU.prototype.$classData=Hsa;function I7(){this.td=null;this.kb=this.Na=this.lb=this.Wa=0;this.vm=null}I7.prototype=new l;
+I7.prototype.constructor=I7;function Msa(a,b,d,e,f,h){var k=new I7;k.td=a;k.Wa=b;k.lb=d;k.Na=e;k.kb=f;k.vm=h;return k}c=I7.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.m.EA){var b=this.td,d=a.td;if((null===b?null===d:b.o(d))&&this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb)return b=this.vm,a=a.vm,null===b?null===a:b.o(a)}return!1};
+c.nx=function(){var a=this.vm;if(GU(a)||HU(a))return a.W;throw(new q).i(a);};c.w=function(a){switch(a){case 0:return this.td;case 1:return this.Wa;case 2:return this.lb;case 3:return this.Na;case 4:return this.kb;case 5:return this.vm;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Wt=function(){var a=this.td;return a.z()?"":a.R()};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.td)),a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,fC(V(),this.vm));return V().xb(a,6)};c.zm=function(){return this};c.x=function(){return Y(new Z,this)};var Nsa=g({EA:0},!1,"org.nlogo.core.InputBox",{EA:1,d:1,on:1,Zt:1,FA:1,$t:1,DA:1,t:1,q:1,k:1,h:1});I7.prototype.$classData=Nsa;
+function J7(){this.td=null;this.kb=this.Na=this.lb=this.Wa=0;this.Lm=this.ao=this.cb=null;this.Hb=0;this.ip=this.eq=this.en=null;this.a=!1}J7.prototype=new l;J7.prototype.constructor=J7;c=J7.prototype;c.u=function(){return"Slider"};c.v=function(){return 12};c.nx=function(){return this.Hb};
+c.o=function(a){if(this===a)return!0;if(Xt(a)){var b=this.td,d=a.td;(null===b?null===d:b.o(d))&&this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb?(b=this.cb,d=a.cb,b=null===b?null===d:b.o(d)):b=!1;b&&this.ao===a.ao&&this.Lm===a.Lm&&this.Hb===a.Hb&&this.en===a.en?(b=this.eq,d=a.eq,b=null===b?null===d:b.o(d)):b=!1;return b?this.ip===a.ip:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.td;case 1:return this.Wa;case 2:return this.lb;case 3:return this.Na;case 4:return this.kb;case 5:return this.cb;case 6:return this.ao;case 7:return this.Lm;case 8:return this.Hb;case 9:return this.en;case 10:return this.eq;case 11:return this.ip;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Wt=function(){var a=this.td;return a.z()?"":a.R()};
+c.zm=function(a){var b=a.y(this.ao),d=a.y(this.Lm);a=a.y(this.en);return Zsa(this.td,this.Wa,this.lb,this.Na,this.kb,this.cb,b,d,this.Hb,a,this.eq,this.ip)};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.td)),a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,fC(V(),this.cb)),a=V().ca(a,fC(V(),this.ao)),a=V().ca(a,fC(V(),this.Lm)),a=V().ca(a,BE(V(),this.Hb)),a=V().ca(a,fC(V(),this.en)),a=V().ca(a,fC(V(),this.eq)),a=V().ca(a,fC(V(),this.ip));return V().xb(a,12)};c.x=function(){return Y(new Z,this)};
+function Zsa(a,b,d,e,f,h,k,n,r,y,E,Q){var R=new J7;R.td=a;R.Wa=b;R.lb=d;R.Na=e;R.kb=f;R.cb=h;R.ao=k;R.Lm=n;R.Hb=r;R.en=y;R.eq=E;R.ip=Q;a=yh(Jh(),k);a=gV(a).Mf;bm(a)&&(a=a.Q,b=yh(Jh(),R.Lm),b=gV(b).Mf,bm(b)&&(b=b.Q,d=yh(Jh(),R.en),d=gV(d).Mf,bm(d)&&(new Fh).i(dFa(a,R.Hb,b,d.Q))));R.a=!0;return R}function Xt(a){return!!(a&&a.$classData&&a.$classData.m.$I)}var $sa=g({$I:0},!1,"org.nlogo.core.Slider",{$I:1,d:1,on:1,Zt:1,FA:1,$t:1,DA:1,t:1,q:1,k:1,h:1});J7.prototype.$classData=$sa;
+function K7(){this.td=null;this.kb=this.Na=this.lb=this.Wa=0;this.cb=null;this.Lp=!1}K7.prototype=new l;K7.prototype.constructor=K7;c=K7.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.m.NA){var b=this.td,d=a.td;(null===b?null===d:b.o(d))&&this.Wa===a.Wa&&this.lb===a.lb&&this.Na===a.Na&&this.kb===a.kb?(b=this.cb,d=a.cb,b=null===b?null===d:b.o(d)):b=!1;return b?this.Lp===a.Lp:!1}return!1};c.nx=function(){return this.Lp};
+c.w=function(a){switch(a){case 0:return this.td;case 1:return this.Wa;case 2:return this.lb;case 3:return this.Na;case 4:return this.kb;case 5:return this.cb;case 6:return this.Lp;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.Wt=function(){var a=this.td;return a.z()?"":a.R()};c.zm=function(){return this};
+c.r=function(){var a=-889275714,a=V().ca(a,fC(V(),this.td)),a=V().ca(a,this.Wa),a=V().ca(a,this.lb),a=V().ca(a,this.Na),a=V().ca(a,this.kb),a=V().ca(a,fC(V(),this.cb)),a=V().ca(a,this.Lp?1231:1237);return V().xb(a,7)};function cta(a,b,d,e,f,h,k){var n=new K7;n.td=a;n.Wa=b;n.lb=d;n.Na=e;n.kb=f;n.cb=h;n.Lp=k;return n}c.x=function(){return Y(new Z,this)};var dta=g({NA:0},!1,"org.nlogo.core.Switch",{NA:1,d:1,on:1,Zt:1,FA:1,$t:1,DA:1,t:1,q:1,k:1,h:1});K7.prototype.$classData=dta;
+function MM(){K_.call(this)}MM.prototype=new kxa;MM.prototype.constructor=MM;c=MM.prototype;c.b=function(){x1.prototype.b.call(this);return this};c.u=function(){return"_setplotxrange"};c.v=function(){return 0};c.o=function(a){return zAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};c.x=function(){return Y(new Z,this)};function zAa(a){return!!(a&&a.$classData&&a.$classData.m.nP)}
+c.$classData=g({nP:0},!1,"org.nlogo.core.prim.etc._setplotxrange",{nP:1,f2:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function NM(){K_.call(this)}NM.prototype=new kxa;NM.prototype.constructor=NM;c=NM.prototype;c.b=function(){x1.prototype.b.call(this);return this};c.u=function(){return"_setplotyrange"};c.v=function(){return 0};c.o=function(a){return AAa(a)&&!0};c.w=function(a){throw(new O).c(""+a);};c.l=function(){return X(W(),this)};c.r=function(){return T(S(),this)};
+c.x=function(){return Y(new Z,this)};function AAa(a){return!!(a&&a.$classData&&a.$classData.m.oP)}c.$classData=g({oP:0},!1,"org.nlogo.core.prim.etc._setplotyrange",{oP:1,f2:1,Hf:1,d:1,pa:1,A:1,E:1,t:1,q:1,k:1,h:1});function L7(){this.rx=this.da=null}L7.prototype=new l;L7.prototype.constructor=L7;c=L7.prototype;c.hd=function(a,b){var d=this.da;b=this.rx.Ch(b);return d.hd(a,b)};c.Gh=function(){};c.Kh=function(a,b,d){return f2(d,a,b,this)};c.Ch=function(a){return jy(this,a)};c.mh=function(){};
+c.Yd=function(a){return JFa(this,a)};c.yg=function(){};c.Jf=function(a,b){return Axa(this,a,b)};function Jxa(a,b){var d=new L7;if(null===a)throw pg(qg(),null);d.da=a;d.rx=b;Ed(d);ky(d);DR(d);ER(d);return d}c.Fh=function(){};c.$classData=g({x9:0},!1,"scalaz.Applicative$$anon$1",{x9:1,d:1,Oma:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1,Pma:1,Qma:1});function M7(){}M7.prototype=new v2a;M7.prototype.constructor=M7;function Y2a(){}Y2a.prototype=M7.prototype;function Hy(){}Hy.prototype=new uFa;
+Hy.prototype.constructor=Hy;Hy.prototype.b=function(){xja=this;(new ZX).b();return this};Hy.prototype.$classData=g({eaa:0},!1,"scalaz.OneAnd$",{eaa:1,Xna:1,Yna:1,Zna:1,$na:1,aoa:1,boa:1,coa:1,d:1,k:1,h:1});var xja=void 0;function Z2a(a,b,d,e){return Gy(e,I(function(a,b,d){return function(){return d.y(b.Ic)}}(a,b,d)),I(function(a,b,d,e){return function(){return a.Hn.rl(b.Sc,d,e)}}(a,b,d,e)),ub(new vb,function(){return function(a,b){return(new My).e(a,b)}}(a)))}
+function yja(a,b,d,e){var f=(new R5).KE(e),h=b.Sc,k=d.za(oFa()),f=f2(a.Hn,h,k,f);if(g2(f))return Gy(e,I(function(a,b,d){return function(){return d.y(b.Ic)}}(a,b,d)),I(function(a,b){return function(){return b}}(a,f.ga)),ub(new vb,function(){return function(a,b){return(new My).e(a,b)}}(a)));if(h2(f))return f=f.um,e.hd(d.y(b.Ic),m(new p,function(a,b){return function(a){return(new My).e(a,b)}}(a,f)));throw(new q).i(f);}
+function $2a(a,b,d){a=m(new p,function(a,b,d){return function(k){var n=py(d.y(b.Ic),k,Zy().ug);if(null===n)throw(new q).i(n);k=n.ja();n=n.na();k=py(a.Hn.sl(b.Sc,d),k,Zy().ug);if(null===k)throw(new q).i(k);return(new w).e(k.ja(),(new My).e(n,k.na()))}}(a,b,d));b=Zy().ug;return $y(new az,a,b)}function kS(){}kS.prototype=new l;kS.prototype.constructor=kS;c=kS.prototype;c.mG=function(){};
+c.PE=function(){Cd(this);this.mG(bva(this));this.lG(Sqa(this));this.nG(cva(this));ix(this);this.eG(rFa(this));this.gG(Fwa(this));var a=new cY;if(null===this)throw pg(qg(),null);a.da=this;return this};c.pw=function(){};c.nG=function(){};c.ow=function(){};c.lG=function(){};c.gG=function(){};c.eG=function(){};c.$classData=g({Eba:0},!1,"scalaz.std.FunctionInstances$$anon$11",{Eba:1,d:1,C9:1,zaa:1,Fx:1,Daa:1,naa:1,Ex:1,E9:1,P9:1,eoa:1});function N7(){}N7.prototype=new l;N7.prototype.constructor=N7;c=N7.prototype;
+c.Qj=function(){};c.hd=function(a,b){return(new oS).TE(this,a,b)};c.Gh=function(){};c.yh=function(a,b){return(new pS).TE(this,a,b)};c.Kh=function(a,b,d){return f2(d,a,b,this)};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Yd=function(){return new qS};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.Fh=function(){};c.Pj=function(){};c.Fj=function(a){return O1(this,a)};
+c.$classData=g({ica:0},!1,"scalaz.std.java.util.concurrent.CallableInstances$$anon$1",{ica:1,d:1,ek:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1,ck:1,dk:1});function O7(){this.er=null}O7.prototype=new Sxa;O7.prototype.constructor=O7;function a3a(){}c=a3a.prototype=O7.prototype;c.b=function(){this.er=(new z5).b();return this};c.EU=function(a){var b=RS();a=a.Sn();b=se(BC(b,a).Sm);for(a=!0;a&&b.ra();)a=b.ka(),a=this.ab(a);return a};c.Da=function(){return this.jt().Da()};c.ab=function(a){return this.jt().ab((new y2).i(a))};
+c.Um=function(a){return this.jt().Um((new y2).i(a))};c.jt=function(){return this.er};c.vn=function(a){return this.jt().vn((new y2).i(a))};c.Sn=function(){var a=new XS;if(null===this)throw pg(qg(),null);a.da=this;a.lF=this.jt().FD().Sa();a.qt=C();return a};c.$classData=g({tW:0},!1,"java.util.HashSet",{tW:1,rW:1,qW:1,d:1,rF:1,nW:1,vW:1,Zd:1,Ld:1,k:1,h:1});function PB(){this.gm=null}PB.prototype=new q7;PB.prototype.constructor=PB;PB.prototype.b=function(){this.gm="Any";C();u();pa(Va);return this};
+PB.prototype.bh=function(a){return la(Xa(Va),[a])};PB.prototype.Od=function(){return pa(Va)};PB.prototype.$classData=g({Mga:0},!1,"scala.reflect.ManifestFactory$AnyManifest$",{Mga:1,vz:1,uz:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var ima=void 0;function QB(){this.gm=null}QB.prototype=new q7;QB.prototype.constructor=QB;QB.prototype.b=function(){this.gm="AnyVal";C();u();pa(Va);return this};QB.prototype.bh=function(a){return la(Xa(Va),[a])};QB.prototype.Od=function(){return pa(Va)};
+QB.prototype.$classData=g({Nga:0},!1,"scala.reflect.ManifestFactory$AnyValManifest$",{Nga:1,vz:1,uz:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var kma=void 0;function P7(){this.gm=null}P7.prototype=new q7;P7.prototype.constructor=P7;P7.prototype.b=function(){this.gm="Nothing";C();u();pa(MZ);return this};P7.prototype.bh=function(a){return la(Xa(Va),[a])};P7.prototype.Od=function(){return pa(MZ)};
+P7.prototype.$classData=g({Vga:0},!1,"scala.reflect.ManifestFactory$NothingManifest$",{Vga:1,vz:1,uz:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var b3a=void 0;function lma(){b3a||(b3a=(new P7).b());return b3a}function Q7(){this.gm=null}Q7.prototype=new q7;Q7.prototype.constructor=Q7;Q7.prototype.b=function(){this.gm="Null";C();u();pa(uE);return this};Q7.prototype.bh=function(a){return la(Xa(Va),[a])};Q7.prototype.Od=function(){return pa(uE)};
+Q7.prototype.$classData=g({Wga:0},!1,"scala.reflect.ManifestFactory$NullManifest$",{Wga:1,vz:1,uz:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var c3a=void 0;function mma(){c3a||(c3a=(new Q7).b());return c3a}function R7(){this.gm=null}R7.prototype=new q7;R7.prototype.constructor=R7;R7.prototype.b=function(){this.gm="Object";C();u();pa(Va);return this};R7.prototype.bh=function(a){return la(Xa(Va),[a])};R7.prototype.Od=function(){return pa(Va)};
+R7.prototype.$classData=g({Xga:0},!1,"scala.reflect.ManifestFactory$ObjectManifest$",{Xga:1,vz:1,uz:1,d:1,Bk:1,bj:1,Oj:1,cj:1,k:1,h:1,q:1});var d3a=void 0;function jma(){d3a||(d3a=(new R7).b());return d3a}function S7(){this.zl=this.s=null}S7.prototype=new j6;S7.prototype.constructor=S7;S7.prototype.b=function(){xT.prototype.b.call(this);T7=this;this.zl=(new v5).P(0,0,0);return this};S7.prototype.Wk=function(){return this.zl};S7.prototype.db=function(){return(new LE).b()};
+S7.prototype.$classData=g({wja:0},!1,"scala.collection.immutable.Vector$",{wja:1,hZ:1,ii:1,hi:1,kg:1,ze:1,d:1,lg:1,Ae:1,k:1,h:1});var T7=void 0;function Mj(){T7||(T7=(new S7).b());return T7}function yF(){this.p=this.g=this.f=this.la=null;this.a=0}yF.prototype=new l;yF.prototype.constructor=yF;c=yF.prototype;c.b=function(){yF.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.m.jB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.G=function(){return VU(this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 35");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.kt=function(){return aj(A())};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 35");return this.g};c.$classData=g({jB:0},!1,"org.nlogo.core.prim.etc._createlinkswith",{jB:1,d:1,wQ:1,bu:1,pa:1,A:1,E:1,g2:1,t:1,q:1,k:1,h:1});function vF(){this.p=this.g=this.f=this.la=null;this.a=0}vF.prototype=new l;vF.prototype.constructor=vF;c=vF.prototype;c.b=function(){vF.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.m.lB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.G=function(){return VU(this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 29");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.kt=function(){return pj(A())};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 29");return this.g};c.$classData=g({lB:0},!1,"org.nlogo.core.prim.etc._createlinkwith",{lB:1,d:1,xQ:1,bu:1,pa:1,A:1,E:1,g2:1,t:1,q:1,k:1,h:1});function U7(){}U7.prototype=new l;U7.prototype.constructor=U7;c=U7.prototype;c.Qj=function(){};c.hd=function(a,b){return bja(a,b)};c.Gh=function(){};
+function kja(){var a=new U7;Ed(a);ky(a);DR(a);ER(a);FR(a);GR(a);JR(a);return a}c.yh=function(a,b){return gy(new hy,a,b)};c.Kh=function(a,b,d){return f2(d,a,b,this)};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Yd=function(a){e2();a=se(a);return(new fy).i(a)};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.Fh=function(){};c.Pj=function(){};c.bm=function(){};c.Fj=function(a){return O1(this,a)};
+c.$classData=g({u$:0},!1,"scalaz.FreeInstances$$anon$3",{u$:1,d:1,ek:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1,ck:1,dk:1,nm:1});function V7(){}V7.prototype=new Y2a;V7.prototype.constructor=V7;function e3a(){}e3a.prototype=V7.prototype;function W7(){this.da=null}W7.prototype=new l;W7.prototype.constructor=W7;function f3a(a){var b=new W7;if(null===a)throw pg(qg(),null);b.da=a;return b}W7.prototype.$classData=g({V$:0},!1,"scalaz.MonadPlus$$anon$4",{V$:1,d:1,Apa:1,Bca:1,$C:1,rs:1,Qk:1,sj:1,aD:1,uca:1,cD:1,Jx:1});
+function g3a(a,b){ux();return $y(new az,m(new p,function(a,b){return function(f){return a.nn.Yd(I(function(a,b,d){return function(){return(new w).e(d,U(b))}}(a,b,f)))}}(a,(new vx).nc(b))),a.nn)}function X7(){this.XV=this.er=null}X7.prototype=new a3a;X7.prototype.constructor=X7;X7.prototype.b=function(){O7.prototype.b.call(this);this.XV=(new b7).b();return this};X7.prototype.jt=function(){return this.XV};
+X7.prototype.$classData=g({Dea:0},!1,"java.util.LinkedHashSet",{Dea:1,tW:1,rW:1,qW:1,d:1,rF:1,nW:1,vW:1,Zd:1,Ld:1,k:1,h:1});function d_(){}d_.prototype=new l;d_.prototype.constructor=d_;c=d_.prototype;c.b=function(){return this};c.Hp=function(a,b){return((a|0)-(b|0)|0)<<24>>24};c.Jj=function(a,b){return((a|0)+(b|0)|0)<<24>>24};c.Sr=function(a,b){return ea(a|0,b|0)<<24>>24};c.Ge=function(a,b){return(a|0)-(b|0)|0};c.vr=function(a,b){return((a|0)/(b|0)|0)<<24>>24};c.Xg=function(a){return a<<24>>24};
+c.fn=function(a){return a|0};c.$classData=g({lga:0},!1,"scala.math.Numeric$ByteIsIntegral$",{lga:1,d:1,lsa:1,sz:1,tz:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1,uga:1});var Xva=void 0;function f_(){}f_.prototype=new l;f_.prototype.constructor=f_;c=f_.prototype;c.b=function(){return this};c.Hp=function(a,b){return Oe(65535&((null===a?0:a.W)-(null===b?0:b.W)|0))};c.Jj=function(a,b){return Oe(65535&((null===a?0:a.W)+(null===b?0:b.W)|0))};c.Sr=function(a,b){a=65535&ea(null===a?0:a.W,null===b?0:b.W);return Oe(a)};
+c.Ge=function(a,b){return(null===a?0:a.W)-(null===b?0:b.W)|0};c.vr=function(a,b){return Oe(65535&((null===a?0:a.W)/(null===b?0:b.W)|0))};c.Xg=function(a){return Oe(65535&a)};c.fn=function(a){return null===a?0:a.W};c.$classData=g({mga:0},!1,"scala.math.Numeric$CharIsIntegral$",{mga:1,d:1,msa:1,sz:1,tz:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1,wga:1});var Zva=void 0;function Y7(){}Y7.prototype=new l;Y7.prototype.constructor=Y7;c=Y7.prototype;c.b=function(){return this};c.Hp=function(a,b){return(a|0)-(b|0)|0};
+c.Jj=function(a,b){return(a|0)+(b|0)|0};c.Sr=function(a,b){return ea(a|0,b|0)};c.Ge=function(a,b){a|=0;b|=0;return a===b?0:a<b?-1:1};c.vr=function(a,b){return(a|0)/(b|0)|0};c.Xg=function(a){return a};c.fn=function(a){return a|0};c.$classData=g({nga:0},!1,"scala.math.Numeric$IntIsIntegral$",{nga:1,d:1,nsa:1,sz:1,tz:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1,yga:1});var h3a=void 0;function Iv(){h3a||(h3a=(new Y7).b());return h3a}function h_(){}h_.prototype=new l;h_.prototype.constructor=h_;c=h_.prototype;c.b=function(){return this};
+c.Hp=function(a,b){var d=Ra(a);a=d.ia;var d=d.oa,e=Ra(b);b=e.ia;e=e.oa;d=(new Xb).ha(a,d);b=(new Xb).ha(b,e);a=d.ia;d=d.oa;e=b.oa;b=a-b.ia|0;return(new Xb).ha(b,(-2147483648^b)>(-2147483648^a)?-1+(d-e|0)|0:d-e|0)};c.Jj=function(a,b){var d=Ra(a);a=d.ia;var d=d.oa,e=Ra(b);b=e.ia;e=e.oa;d=(new Xb).ha(a,d);b=(new Xb).ha(b,e);a=d.ia;d=d.oa;e=b.oa;b=a+b.ia|0;return(new Xb).ha(b,(-2147483648^b)<(-2147483648^a)?1+(d+e|0)|0:d+e|0)};
+c.Sr=function(a,b){var d=Ra(a);a=d.ia;var d=d.oa,e=Ra(b);b=e.ia;e=e.oa;a=(new Xb).ha(a,d);d=(new Xb).ha(b,e);b=a.ia;var e=d.ia,f=65535&b,h=b>>>16|0,k=65535&e,n=e>>>16|0,r=ea(f,k),k=ea(h,k),y=ea(f,n),f=r+((k+y|0)<<16)|0,r=(r>>>16|0)+y|0;a=(((ea(b,d.oa)+ea(a.oa,e)|0)+ea(h,n)|0)+(r>>>16|0)|0)+(((65535&r)+k|0)>>>16|0)|0;return(new Xb).ha(f,a)};c.Ge=function(a,b){var d=Ra(a);a=d.ia;var d=d.oa,e=Ra(b);b=e.ia;e=e.oa;return q_(Sa(),a,d,b,e)};
+c.vr=function(a,b){var d=Ra(a);a=d.ia;var d=d.oa,e=Ra(b);b=e.ia;e=e.oa;a=(new Xb).ha(a,d);b=(new Xb).ha(b,e);d=Sa();a=nf(d,a.ia,a.oa,b.ia,b.oa);return(new Xb).ha(a,d.Sb)};c.Xg=function(a){return(new Xb).ha(a,a>>31)};c.fn=function(a){a=Ra(a);return(new Xb).ha(a.ia,a.oa).ia};c.$classData=g({oga:0},!1,"scala.math.Numeric$LongIsIntegral$",{oga:1,d:1,osa:1,sz:1,tz:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1,Aga:1});var awa=void 0;function b_(){}b_.prototype=new l;b_.prototype.constructor=b_;c=b_.prototype;c.b=function(){return this};
+c.Hp=function(a,b){return((a|0)-(b|0)|0)<<16>>16};c.Jj=function(a,b){return((a|0)+(b|0)|0)<<16>>16};c.Sr=function(a,b){return ea(a|0,b|0)<<16>>16};c.Ge=function(a,b){return(a|0)-(b|0)|0};c.vr=function(a,b){return((a|0)/(b|0)|0)<<16>>16};c.Xg=function(a){return a<<16>>16};c.fn=function(a){return a|0};c.$classData=g({pga:0},!1,"scala.math.Numeric$ShortIsIntegral$",{pga:1,d:1,qsa:1,sz:1,tz:1,Mj:1,Gj:1,Nj:1,Lj:1,k:1,h:1,Dga:1});var Vva=void 0;function $7(){}$7.prototype=new l;
+$7.prototype.constructor=$7;function i3a(){}c=i3a.prototype=$7.prototype;c.Ig=function(a,b){pC(this,a,b)};c.Ys=function(a){return Rma(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.zj=function(a,b){return g5(this,a,b)};c.ND=function(a){return Gma(this,a)};c.ok=function(a){return WEa(this,a)};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.Ab=function(a){return this.Qc("",a,"")};c.Fo=function(a){return Zb(new $b,this,a)};c.Xe=function(){return h5(this)};c.l=function(){return i5(this)};
+c.Ib=function(a,b){return Xk(this,a,b)};c.Lg=function(){return Wj(this)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return this.Jl(a,!1)};c.Jl=function(a,b){return j5(this,a,b)};c.Da=function(){return Fr(this)};c.ae=function(){var a=P_().s;return K(this,a)};c.Wn=function(){return PN(this)};c.$c=function(a,b){return Gt(this,a,b)};c.Zf=function(){return this.Ab("")};c.vf=function(a){return this.Jl(a,!0)};c.yf=function(){return-1};c.$i=function(a){return Kt(this,a)};c.nd=function(){return XEa(this)};
+c.$=function(){return YEa(this)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return this.Oc()};c.Ed=function(){return this};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ff=function(a,b){return this.Ib(a,b)};c.Ng=function(){return!0};c.De=function(a){var b=fc(new gc,hc());this.ta(m(new p,function(a,b,f){return function(a){return f.Ma(a)}}(this,a,b)));return b.Va};c.ya=function(a,b){return kr(this,a,b)};c.og=function(a){return wC(this,a)};
+c.Ce=function(a){return xC(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.zk=function(a){return Jma(this,a)};c.db=function(){return this.ad().db()};c.qf=function(){return l5(this)};function j3a(a,b){if(0>b)return 1;var d=0;for(a=a.Sa();a.ra();){if(d===b)return a.ra()?1:0;a.ka();d=1+d|0}return d-b|0}function dA(a){a=a.sa();return(new H_).P(0,a,1)}function oi(a,b,d){d=d.gf(a.Ed());d.Xb(a.ie());d.Ma(b);return d.Ba()}
+function Gga(a,b){var d=a.sa(),e=a.db();if(1===d)e.Xb(a);else if(1<d){e.oc(d);var d=la(Xa(Va),[d]),f=(new hC).hb(0);a.ta(m(new p,function(a,b,d){return function(a){b.n[d.Ca]=a;d.Ca=1+d.Ca|0}}(a,d,f)));yka(fA(),d,b);for(f.Ca=0;f.Ca<d.n.length;)e.Ma(d.n[f.Ca]),f.Ca=1+f.Ca|0}return e.Ba()}function k3a(a,b,d){var e=0<d?d:0;for(a=a.Sa().lp(d);a.ra();){if(b.y(a.ka()))return e;e=1+e|0}return-1}
+function l3a(a){var b=u(),d=(new jl).i(b);a.ta(m(new p,function(a,b){return function(a){b.Ca=Og(new Pg,a,b.Ca)}}(a,d)));b=a.db();asa(b,a);for(a=d.Ca;!a.z();)d=a.Y(),b.Ma(d),a=a.$();return b.Ba()}function Ww(a,b,d){d=d.gf(a.Ed());d.Ma(b);d.Xb(a.ie());return d.Ba()}function a8(a){var b=!!(a&&a.$classData&&a.$classData.m.$p);if(b&&0>=a.vb(1))return a.Ed();for(var d=a.db(),e=(new z5).b(),f=a.Sa(),h=!1;f.ra();){var k=f.ka();lna(e,k)?d.Ma(k):h=!0}return h||!b?d.Ba():a.Ed()}
+function Et(a,b){b=m3a(a,b.Jh());var d=a.db();a.ta(m(new p,function(a,b,d){return function(a){var e=b.y(a)|0;return 0===e?d.Ma(a):(b.Co(a,-1+e|0),void 0)}}(a,b,d)));return d.Ba()}function m3a(a,b){var d=n3a();b.ta(m(new p,function(a,b){return function(a){var d=1+(b.y(a)|0)|0;b.Qp(a,d)}}(a,d)));return d}function Eh(a,b){return a.Le(m(new p,function(a,b){return function(a){return Em(Fm(),a,b)}}(a,b)))}function Ko(a,b,d){var e=new g6;if(null===d)throw pg(qg(),null);e.da=d;e.yj=b;return Gga(a,e)}
+function c5(){this.vc=Rz()}c5.prototype=new l;c5.prototype.constructor=c5;c=c5.prototype;c.Ev=function(){xE();var a=this.vc,b=a.ia;return b===a.ia&&b>>31===a.oa};c.Hj=function(){var a=this.vc;return(new Xb).ha(a.ia,a.oa)};c.jF=function(){xE();var a=this.vc,b=a.ia<<16>>16;return b===a.ia&&b>>31===a.oa};c.AE=function(a){this.vc=a;return this};c.fy=function(){xE();return this.vc.ia<<24>>24};
+c.o=function(a){var b;xE();b=this.vc;if(a&&a.$classData&&a.$classData.m.f_){a=a.vc;var d=a.oa;b=b.ia===a.ia&&b.oa===d}else b=!1;return b};c.iF=function(){xE();var a=this.vc,b=65535&a.ia;return b===a.ia&&b>>31===a.oa};c.l=function(){return""+this.vc};c.hF=function(){xE();var a=this.vc,b=a.ia<<24>>24;return b===a.ia&&b>>31===a.oa};c.Hg=function(a){var b=this.vc,d=Ra((new Xb).ha(b.ia,b.oa)),b=d.ia,d=d.oa,e=Ra(a);a=e.ia;e=e.oa;return q_(Sa(),b,d,a,e)};c.Iz=function(){xE();return this.vc.ia<<16>>16};
+c.Am=function(){xE();var a=this.vc;return tE(Sa(),a.ia,a.oa)};c.r=function(){var a=this.vc;return a.ia^a.oa};c.Ti=function(){xE();return this.vc.ia};c.Hq=function(){xE();var a=this.vc;return fa(tE(Sa(),a.ia,a.oa))};c.$classData=g({f_:0},!1,"scala.runtime.RichLong",{f_:1,d:1,eta:1,ita:1,hta:1,qY:1,bsa:1,Cfa:1,fta:1,Ym:1,Md:1,gta:1});function xF(){this.p=this.g=this.f=this.la=null;this.a=0}xF.prototype=new l;xF.prototype.constructor=xF;c=xF.prototype;c.b=function(){xF.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.m.gB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.G=function(){return VU(this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 33");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.kt=function(){return pj(A())};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 33");return this.g};c.$classData=g({gB:0},!1,"org.nlogo.core.prim.etc._createlinkfrom",{gB:1,d:1,xQ:1,bu:1,pa:1,A:1,E:1,c2:1,fC:1,t:1,q:1,k:1,h:1});function AF(){this.p=this.g=this.f=this.la=null;this.a=0}AF.prototype=new l;AF.prototype.constructor=AF;c=AF.prototype;c.b=function(){AF.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.m.hB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.G=function(){return VU(this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 39");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.kt=function(){return aj(A())};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 39");return this.g};c.$classData=g({hB:0},!1,"org.nlogo.core.prim.etc._createlinksfrom",{hB:1,d:1,wQ:1,bu:1,pa:1,A:1,E:1,c2:1,fC:1,t:1,q:1,k:1,h:1});function zF(){this.p=this.g=this.f=this.la=null;this.a=0}zF.prototype=new l;zF.prototype.constructor=zF;c=zF.prototype;c.b=function(){zF.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.m.iB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.G=function(){return VU(this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 37");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.kt=function(){return aj(A())};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 37");return this.g};c.$classData=g({iB:0},!1,"org.nlogo.core.prim.etc._createlinksto",{iB:1,d:1,wQ:1,bu:1,pa:1,A:1,E:1,d2:1,fC:1,t:1,q:1,k:1,h:1});function wF(){this.p=this.g=this.f=this.la=null;this.a=0}wF.prototype=new l;wF.prototype.constructor=wF;c=wF.prototype;c.b=function(){wF.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.m.kB?this.la===a.la:!1};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.la;default:throw(new O).c(""+a);}};c.l=function(){return X(W(),this)};c.G=function(){return VU(this)};c.N=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){if(0===(1&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 31");return this.f};c.K=function(a){this.f=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.la=a;L(this);return this};c.r=function(){return T(S(),this)};c.kt=function(){return pj(A())};c.x=function(){return Y(new Z,this)};
+c.M=function(){if(0===(2&this.a)<<24>>24)throw(new v).c("Uninitialized field: /Users/el_ergo/Github/NetLogo/parser-core/src/main/core/prim/etc/linkcreation.scala: 31");return this.g};c.$classData=g({kB:0},!1,"org.nlogo.core.prim.etc._createlinkto",{kB:1,d:1,xQ:1,bu:1,pa:1,A:1,E:1,d2:1,fC:1,t:1,q:1,k:1,h:1});function b8(){}b8.prototype=new e3a;b8.prototype.constructor=b8;function o3a(){}o3a.prototype=b8.prototype;function Iy(){this.Hn=null}Iy.prototype=new l;Iy.prototype.constructor=Iy;c=Iy.prototype;
+c.sl=function(a,b){return $2a(this,a,b)};c.hd=function(a,b){return(new My).e(b.y(a.Ic),this.Hn.hd(a.Sc,b))};c.Zz=function(a,b,d){return yja(this,a,b,d)};c.Hk=function(a){var b=a.Ic;a=this.Hn.Hk(a.Sc);return Og(new Pg,b,a)};c.cm=function(){};c.jl=function(){};c.Fr=function(){};c.mh=function(){};c.xy=function(a,b,d){return this.Hn.Ri(a.Sc,b.y(a.Ic),d)};c.rl=function(a,b,d){return Z2a(this,a,b,d)};c.yg=function(){};c.sk=function(a,b,d){return $ua(this,a,b,d)};c.Hr=function(){};
+c.Ri=function(a,b,d){return this.Hn.Ri(a.Sc,sb(d,b,a.Ic),d)};c.$classData=g({gaa:0},!1,"scalaz.OneAndInstances0$$anon$3",{gaa:1,d:1,doa:1,ZC:1,om:1,wh:1,Eg:1,xl:1,yl:1,pm:1,SC:1,Wna:1,Vna:1});function d2(){}d2.prototype=new w2a;d2.prototype.constructor=d2;d2.prototype.b=function(){return this};d2.prototype.$classData=g({Zaa:0},!1,"scalaz.package$StateT$",{Zaa:1,loa:1,moa:1,noa:1,ooa:1,poa:1,qna:1,rna:1,sna:1,tna:1,d:1,koa:1,pna:1});var Hxa=void 0;
+function c8(a){var b=(new M2).hb(a.Da());a=a.jb();fya(b,a);return b}function d8(){}d8.prototype=new o3a;d8.prototype.constructor=d8;function p3a(){}p3a.prototype=d8.prototype;function IR(a){a.qw(f3a(a))}function e8(){this.nn=null}e8.prototype=new l;e8.prototype.constructor=e8;c=e8.prototype;c.Qj=function(){};c.hd=function(a,b){return ija(a,b,this.nn)};c.Gh=function(){};function Ixa(a){var b=new e8;b.nn=a;Ed(b);ky(b);DR(b);ER(b);FR(b);GR(b);return b}c.yh=function(a,b){return lja(a,b,this.nn)};
+c.Kh=function(a,b,d){return f2(d,a,b,this)};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Yd=function(a){return g3a(this,a)};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.Fh=function(){};c.Pj=function(){};c.Fj=function(a){return O1(this,a)};c.$classData=g({Caa:0},!1,"scalaz.StateTInstances2$$anon$3",{Caa:1,d:1,qoa:1,Pna:1,ek:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1,ck:1,dk:1,joa:1});function d7(){}d7.prototype=new l;d7.prototype.constructor=d7;c=d7.prototype;c.Qj=function(){};
+c.hd=function(a,b){return MFa(this,a,b)};c.Gh=function(){};c.yh=function(a,b){return gy(new hy,a,b)};c.Kh=function(a,b,d){return f2(d,a,b,this)};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Yd=function(a){e2();a=Kxa().cv.Yd(a);return(new M4).i(a)};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.$m=function(){};c.Ht=function(){};c.Fh=function(){};c.bm=function(){};c.Pj=function(){};c.Fj=function(a){return O1(this,a)};
+c.$classData=g({Haa:0},!1,"scalaz.TrampolineInstances$$anon$1",{Haa:1,d:1,ek:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1,ck:1,dk:1,gu:1,tn:1,nm:1});function Dj(a){return a.z()?a.Sa().ka():a.X(0)}function f8(a,b){return a.sa()-b|0}function g8(a,b){if(b&&b.$classData&&b.$classData.m.xg){var d=a.sa();if(d===b.sa()){for(var e=0;e<d&&Em(Fm(),a.X(e),b.X(e));)e=1+e|0;return e===d}return!1}return t7(a,b)}function h8(a,b){return q3a(a,b,!1)!==a.sa()}function O2(a){return 0===a.sa()}
+function q3a(a,b,d){for(var e=0;e<a.sa()&&!!b.y(a.X(e))===d;)e=1+e|0;return e}function i8(a,b){for(var d=a.sa(),e=0;e<d&&b.y(a.X(e));)e=1+e|0;return a.Af(e-0|0,a.sa())}function j8(a,b){return q3a(a,b,!0)===a.sa()}function k8(a){return 0<a.sa()?a.Af(0,-1+a.sa()|0):h5(a)}function l8(a,b){for(var d=0,e=a.sa();d<e;)b.y(a.X(d)),d=1+d|0}function m8(a,b,d){d=0<d?d:0;for(var e=a.sa(),f=d;;){if(f<e)var h=a.X(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.sa()?-1:b}
+function n8(a,b,d){b=0<b?b:0;d=0<d?d:0;var e=a.sa();d=d<e?d:e;var e=d-b|0,f=0<e?e:0,e=a.db();for(e.oc(f);b<d;)e.Ma(a.X(b)),b=1+b|0;return e.Ba()}function Vw(a){var b=a.db();b.oc(a.sa());for(var d=a.sa();0<d;)d=-1+d|0,b.Ma(a.X(d));return b.Ba()}function o8(a,b){for(var d=a.sa(),e=0;;){if(e<d)var f=a.X(e),f=!b.y(f);else f=!1;if(f)e=1+e|0;else break}b=e;return b<a.sa()?(new H).i(a.X(b)):C()}
+function p8(a,b){b=b.gf(a.Ed());var d=a.sa();b.oc(d);for(var e=0;e<d;)b.Ma((new w).e(a.X(e),e)),e=1+e|0;return b.Ba()}function q8(a,b,d,e){for(;;){if(0===b)return d;var f=-1+b|0;d=sb(e,a.X(-1+b|0),d);b=f}}function Pi(a,b){return(new w).e(a.Af(0,b),a.Af(b,a.sa()))}function em(a){return 0<a.sa()?a.X(-1+a.sa()|0):XEa(a)}function r8(a,b,d,e,f){for(;;){if(b===d)return e;var h=1+b|0;e=sb(f,e,a.X(b));b=h}}function Uj(a){return a.z()?YEa(a):a.Af(1,a.sa())}
+function s8(a,b,d,e){var f=0,h=d,k=a.sa();e=k<e?k:e;d=qC(W(),b)-d|0;for(d=e<d?e:d;f<d;)qD(W(),b,h,a.X(f)),f=1+f|0,h=1+h|0}function t8(a,b){return a.Af(a.sa()-(0<b?b:0)|0,a.sa())}function dm(a,b){return a.Af(0,a.sa()-(0<b?b:0)|0)}function u8(a,b){if(0<a.sa()){var d=a.sa(),e=a.X(0);return r8(a,1,d,e,b)}return Jma(a,b)}
+function v8(a,b,d){if(b&&b.$classData&&b.$classData.m.xg){d=d.gf(a.Ed());var e=0,f=a.sa(),h=b.sa(),f=f<h?f:h;for(d.oc(f);e<f;)d.Ma((new w).e(a.X(e),b.X(e))),e=1+e|0;return d.Ba()}return qN(a,b,d)}function ng(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.$()}}return b}function Gn(a,b){var d=a.db(),e=a;for(a=a.Qu(b);!a.z();)d.Ma(e.Y()),e=e.$(),a=a.$();return d.Ba()}function mi(a,b){a=a.Qu(b);if(0>b||a.z())throw(new O).c(""+b);return a.Y()}
+function VD(a,b){if(b&&b.$classData&&b.$classData.m.Vp){if(a===b)return!0;for(;!a.z()&&!b.z()&&Em(Fm(),a.Y(),b.Y());)a=a.$(),b=b.$();return a.z()&&b.z()}return t7(a,b)}function w8(a,b){for(;!a.z();){if(b.y(a.Y()))return!0;a=a.$()}return!1}function r3a(a,b){for(;!a.z()&&0<b;)a=a.$(),b=-1+b|0;return a}function x8(a,b){for(;!a.z();){if(!b.y(a.Y()))return!1;a=a.$()}return!0}function y8(a,b,d){for(;!a.z();)b=sb(d,b,a.Y()),a=a.$();return b}function s3a(a,b,d){return a.z()?b:sb(d,a.Y(),a.$().Si(b,d))}
+function z8(a,b,d){var e=0<d?d:0;for(a=a.Qu(d);;)if(nd(a)){if(b.y(a.Y()))return e;e=1+e|0;a=a.$()}else break;return-1}function A8(a,b){for(;!a.z();){if(b.y(a.Y()))return(new H).i(a.Y());a=a.$()}return C()}function Jm(a){for(var b=0;!a.z();)b=1+b|0,a=a.$();return b}function Mm(a){if(a.z())throw(new Bu).b();for(var b=a.$();!b.z();)a=b,b=b.$();return a.Y()}function B8(a,b){for(;!a.z();){if(Em(Fm(),a.Y(),b))return!0;a=a.$()}return!1}function C8(a,b){return 0<=b&&0<ng(a,b)}
+function t3a(a,b){for(var d=a.db(),e=0;!a.z()&&e<b;)e=1+e|0,d.Ma(a.Y()),a=a.$();return d.Ba()}function u3a(a,b){if(a.z())throw(new Sk).c("empty.reduceLeft");return a.$().Ib(a.Y(),b)}function v3a(a){var b=(new M2).hb(a.Da());a.ta(m(new p,function(a,b){return function(a){return N2(b,a)}}(a,b)));return b}function Qo(a){if(a.z())return rc().ri.zl;rc();var b=(new LE).b();a.ta(m(new p,function(a,b){return function(a){return b.Ma(a)}}(a,b)));return NE(b)}
+function $k(a,b){return b.jb().Ff(a,ub(new vb,function(){return function(a,b){return a.Sg(b)}}(a)))}function D8(){}D8.prototype=new p3a;D8.prototype.constructor=D8;function w3a(){}w3a.prototype=D8.prototype;function x3a(a){var b=(new M2).hb(a.Da());a.ta(m(new p,function(a,b){return function(a){return N2(b,a)}}(a,b)));return b}
+function y3a(a,b,d,e,f){var h=a.Sa();a=(new cc).Nf(h,m(new p,function(){return function(a){if(null!==a){var b=a.ja();a=a.na();return""+lla(nla(),b," -\x3e ")+a}throw(new q).i(a);}}(a)));return uC(a,b,d,e,f)}function Cr(a){if(a.z())return rc().ri.zl;rc();var b=(new LE).b();a.ta(m(new p,function(a,b){return function(a){return b.Ma(a)}}(a,b)));return NE(b)}function E8(a,b){var d=(new jl).i(a);a.ta(m(new p,function(a,b,d){return function(a){b.y(a)&&(d.Ca=d.Ca.Ji(a.ja()))}}(a,b,d)));return d.Ca}
+function z3a(a,b,d){return a.Zh(b,I(function(a,b,d){return function(){return d.y(b)}}(a,b,d)))}function F8(){}F8.prototype=new w3a;F8.prototype.constructor=F8;function A3a(){}A3a.prototype=F8.prototype;function B3a(a,b){return b.jb().Ff(a,ub(new vb,function(){return function(a,b){return a.Zj(b)}}(a)))}function hi(a){if(null!==a){var b=a.toLowerCase();if("true"===b)return!0;if("false"===b)return!1;throw(new Re).c('For input string: "'+a+'"');}throw(new Re).c('For input string: "null"');}
+function C3a(a,b,d){b=0<b?b:0;var e=a.sa(),e=d<e?d:e;if(b>=e)return a.db().Ba();d=a.db();a=a.l().substring(b,e);return d.Xb((new Tb).c(a)).Ba()}function bi(a,b){a=a.l();b=97<=b&&122>=b||65<=b&&90>=b||48<=b&&57>=b?ba.String.fromCharCode(b):"\\"+Oe(b);return gE(Ia(),a,b)}function ira(a,b){var d=(new Bl).b(),e=-1+b|0;if(!(0>=b))for(b=0;;){zr(d,a.l());if(b===e)break;b=1+b|0}return d.Bb.Yb}
+function xfa(a){if(null===a.l())return null;if(0===(a.l().length|0))return"";var b=65535&(a.l().charCodeAt(0)|0),d=Ah(),e;(e=8544<=b&&8559>=b||9398<=b&&9423>=b)||(e=1===(0>b?0:256>b?mta(d).n[b]:nta(d,b)));if(e)return a.l();a=fE(Ia(),a.l());b=a.n[0];a.n[0]=sca(Ah(),b);return Pna(Ia(),a,0,a.n.length)}
+function Cfa(a){var b=oya(a);return(new cc).Nf(b,m(new p,function(){return function(a){var b=(new Ni).c(a),f=b.l().length|0;if(0===f)a=b.l();else{var h=b.To(-1+f|0);10===h||12===h?(a=b.l(),b=10===h&&2<=f&&13===b.To(-2+f|0)?-2+f|0:-1+f|0,a=a.substring(0,b)):a=b.l()}return a}}(a)))}function Opa(a){var b=a.l();return 0<=(b.length|0)&&"?"===b.substring(0,1)?a.l().substring(1):a.l()}function jea(a){if(mp(Ia(),a.l(),"-OWN")){var b=a.l();a=(a.l().length|0)-4|0;return b.substring(0,a)}return a.l()}
+function gd(a){var b=(new Bl).b();for(a=oya(a);a.ra();){for(var d=a.Rm(),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;zr(b,d)}return b.Bb.Yb}function D3a(a){if(a.Ei===a)throw(new Bu).b();return a.xj}function G8(a,b){a=E3a(a,b);if(a.Ye())return a.xj;throw(new O).c(""+b);}function F3a(a,b,d){a=E3a(a,b);if(a.Ye())a.xj=d;else throw(new O).c(""+b);}
+function G3a(a){if(!nd(a))throw(new Re).c("requirement failed: tail of empty list");return a.Ei}function E3a(a,b){for(var d=0;;)if(d<b&&a.Ei!==a)a=a.Ei,d=1+d|0;else break;return a}function H8(){}H8.prototype=new i3a;H8.prototype.constructor=H8;function I8(){}c=I8.prototype=H8.prototype;c.jb=function(){return this.ne()};c.Y=function(){return this.Sa().ka()};c.li=function(){return this};c.Rg=function(){return this.Sa()};c.Ze=function(a){return t7(this,a)};
+c.Le=function(a){var b=this.Sa();return Rra(b,a)};c.z=function(){return!this.Sa().ra()};c.ne=function(){return this};c.hc=function(){return this.li()};c.ee=function(a){var b=this.Sa();return oT(b,a)};c.ad=function(){return Mc()};c.ta=function(a){var b=this.Sa();pT(b,a)};c.Si=function(a,b){var d=this.Sa();return Hma(d,a,b)};c.rk=function(a){var b=this.Sa();return Sra(b,a)};c.Xj=function(a){return rN(this,a)};c.Hw=function(a){return H2a(this,a)};c.Oc=function(){return this.Sa().Oc()};
+c.de=function(a){return I2a(this,a)};c.He=function(a,b,d){J2a(this,a,b,d)};c.Gk=function(a){return L2a(this,a)};c.ce=function(a){return K2a(this,a)};c.Te=function(a,b){return qN(this,a,b)};var rya=g({rd:0},!0,"scala.collection.immutable.Iterable",{rd:1,wd:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,vd:1,Kb:1,Gb:1,mb:1,ob:1,q:1});function nz(){}nz.prototype=new A3a;nz.prototype.constructor=nz;nz.prototype.b=function(){return this};
+nz.prototype.$classData=g({P$:0},!1,"scalaz.Kleisli$",{P$:1,una:1,vna:1,wna:1,Bna:1,Cna:1,Dna:1,Ena:1,Fna:1,Gna:1,Hna:1,Ina:1,xna:1,yna:1,zna:1,Ana:1,d:1,k:1,h:1});var Rja=void 0;function J8(){}J8.prototype=new l;J8.prototype.constructor=J8;c=J8.prototype;c.sl=function(a,b){var d=Zy().ug;return c2(this,a,b,d)};c.Qj=function(){};c.hd=function(a,b){return(new T4).i(b.y(a.ub))};c.Gh=function(){};c.Hk=function(a){return Vx(this,a)};c.yh=function(a,b){return b.y(a.ub)};c.cm=function(){};c.jl=function(){};
+c.Kh=function(a,b,d){return f2(d,a,b,this)};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.rl=function(a,b,d){return QEa(this,a,b,d)};c.Yd=function(a){return(new T4).i(se(a))};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.sk=function(a,b,d){return i2(this,a,b,d)};c.$m=function(){};c.Ht=function(){};c.Fh=function(){};c.Pj=function(){};c.Ri=function(a,b,d){return j2(this,a,b,d).ja()};
+c.ov=function(){Ed(this);ky(this);DR(this);ER(this);FR(this);GR(this);Wx(this);Jy(this);iR(this);HX(this);return this};c.Fj=function(a){return O1(this,a)};c.$classData=g({Wba:0},!1,"scalaz.std.TupleInstances1$$anon$1",{Wba:1,d:1,apa:1,ek:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1,ck:1,dk:1,$oa:1,om:1,xl:1,yl:1,pm:1,gu:1,tn:1});function Tb(){this.U=null}Tb.prototype=new l;Tb.prototype.constructor=Tb;c=Tb.prototype;c.jb=function(){return(new Ni).c(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};
+c.X=function(a){a=65535&(this.U.charCodeAt(a)|0);return Oe(a)};c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.U.length|0)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new Ni).c(this.U)};c.o=function(a){Me();return a&&a.$classData&&a.$classData.m.sZ?this.U===(null===a?null:a.U):!1};c.To=function(a){return 65535&(this.U.charCodeAt(a)|0)};
+c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return this.U};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.length|0,a,b)};c.Hg=function(a){var b=this.U;return b===a?0:b<a?-1:1};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};c.Af=function(a,b){return Le(Me(),this.U,a,b)};
+c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.length|0};c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Sa=function(){return Ye(new Ze,this,0,this.U.length|0)};c.Zf=function(){return this.U};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.length|0};c.vf=function(a){return j5(this,a,!0)};
+c.yf=function(){return this.U.length|0};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.length|0);return Vv(a)};c.nd=function(){return em(this)};c.de=function(a){var b=this.U.length|0;return Le(Me(),this.U,a,b)};c.ie=function(){return(new Ni).c(this.U)};c.$=function(){return Uj(this)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new Ni).c(this.U)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};
+c.Ff=function(a,b){return r8(this,0,this.U.length|0,a,b)};c.He=function(a,b,d){s8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){var a=this.U;return Ha(Ia(),a)};c.c=function(a){this.U=a;return this};c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.length|0;b<d;){var e=this.X(b);ic(a,e);b=1+b|0}return a.Va};c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(){return fE(Ia(),this.U)};c.Ye=function(){return nd(this)};
+c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new Bl).b()};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};c.$classData=g({sZ:0},!1,"scala.collection.immutable.StringOps",{sZ:1,d:1,rZ:1,af:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,Ym:1,Md:1});function rD(a,b,d){var e=a.Ed();b=0<b?b:0;d=0<d?d:0;var f=qC(W(),e);d=(d<f?d:f)-b|0;d=0<d?d:0;a=nka(pka(),Oz(oa(a.Ed())),d);0<d&&Lv(Af(),e,b,a,0,d);return a}
+function K8(a,b,d,e){var f=qC(W(),a.Ed());e=e<f?e:f;f=qC(W(),b)-d|0;e=e<f?e:f;0<e&&Lv(Af(),a.Ed(),0,b,d,e)}function L8(a,b){var d=b.Od();return Oz(oa(a.Ed()))===d?a.Ed():xC(a,b)}function jS(){}jS.prototype=new l;jS.prototype.constructor=jS;c=jS.prototype;c.sl=function(a,b){var d=Zy().ug;return c2(this,a,b,d)};c.Qj=function(){};c.PE=function(){Ed(this);ky(this);Wx(this);Jy(this);DR(this);ER(this);FR(this);GR(this);JR(this);iR(this);HX(this);return this};c.hd=function(a,b){return H3a(this,a,b)};
+c.Gh=function(){};c.Hk=function(a){return Vx(this,a)};c.yh=function(a,b){return I3a(this,a,b)};c.cm=function(){};function I3a(a,b,d){return I(function(a,b,d){return function(){return se(d.y(se(b)))}}(a,b,d))}c.jl=function(){};function H3a(a,b,d){return I(function(a,b,d){return function(){return d.y(se(b))}}(a,b,d))}c.Kh=function(a,b,d){return f2(d,a,b,this)};
+function J3a(a,b,d,e){return e.hd(d.y(se(b)),m(new p,function(a){return function(b){return I(function(a,b){return function(){return b}}(a,b))}}(a)))}c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.rl=function(a,b,d){return J3a(this,a,b,d)};c.Yd=function(a){return a};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.sk=function(a,b,d){return i2(this,a,b,d)};c.$m=function(){};c.Ht=function(){};c.Fh=function(){};c.Pj=function(){};c.bm=function(){};
+c.Ri=function(a,b,d){return j2(this,a,b,d).ja()};c.Fj=function(a){return O1(this,a)};c.$classData=g({Dba:0},!1,"scalaz.std.FunctionInstances$$anon$1",{Dba:1,d:1,om:1,wh:1,Eg:1,xl:1,yl:1,pm:1,ek:1,Oh:1,Qh:1,Rh:1,Ph:1,ck:1,dk:1,nm:1,gu:1,tn:1,DS:1,ES:1});function Lc(){this.Dg=null}Lc.prototype=new I8;Lc.prototype.constructor=Lc;function K3a(){}c=K3a.prototype=Lc.prototype;c.ta=function(a){var b=this.Dg.Wj();pT(b,a)};c.Da=function(){return this.Dg.Da()};c.Sa=function(){return this.Dg.Wj()};
+c.Of=function(a){if(null===a)throw pg(qg(),null);this.Dg=a;return this};c.$classData=g({EY:0},!1,"scala.collection.MapLike$DefaultValuesIterable",{EY:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,k:1,h:1});function hZ(){this.U=null}hZ.prototype=new l;hZ.prototype.constructor=hZ;c=hZ.prototype;c.jb=function(){return(new D3).Rq(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.X=function(a){return this.U.n[a]};
+c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new D3).Rq(this.U)};c.o=function(a){ana||(ana=(new SC).b());return a&&a.$classData&&a.$classData.m.HZ?this.U===(null===a?null:a.U):!1};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};
+c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};c.Af=function(a,b){return rD(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};
+c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};
+c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};c.ie=function(){return(new D3).Rq(this.U)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new D3).Rq(this.U)};c.Rq=function(a){this.U=a;return this};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};
+c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;)ic(a,this.U.n[b]),b=1+b|0;return a.Va};c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new R6).b()};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};
+c.$classData=g({HZ:0},!1,"scala.collection.mutable.ArrayOps$ofBoolean",{HZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});function iZ(){this.U=null}iZ.prototype=new l;iZ.prototype.constructor=iZ;c=iZ.prototype;c.jb=function(){return(new x3).Mq(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.X=function(a){return this.U.n[a]};c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};
+c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new x3).Mq(this.U)};c.o=function(a){bna||(bna=(new TC).b());return a&&a.$classData&&a.$classData.m.IZ?this.U===(null===a?null:a.U):!1};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};
+c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};c.Af=function(a,b){return rD(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};
+c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};c.ie=function(){return(new x3).Mq(this.U)};
+c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new x3).Mq(this.U)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;)ic(a,this.U.n[b]),b=1+b|0;return a.Va};c.Mq=function(a){this.U=a;return this};
+c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new S6).b()};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};c.$classData=g({IZ:0},!1,"scala.collection.mutable.ArrayOps$ofByte",{IZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});
+function jZ(){this.U=null}jZ.prototype=new l;jZ.prototype.constructor=jZ;c=jZ.prototype;c.jb=function(){return(new z3).Gm(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.X=function(a){return Oe(this.U.n[a])};c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new z3).Gm(this.U)};
+c.o=function(a){cna||(cna=(new UC).b());return a&&a.$classData&&a.$classData.m.JZ?this.U===(null===a?null:a.U):!1};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};
+c.Af=function(a,b){return rD(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};
+c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};c.$i=function(a){return Kt(this,a)};c.Gm=function(a){this.U=a;return this};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};c.ie=function(){return(new z3).Gm(this.U)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new z3).Gm(this.U)};
+c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;){var e=this.X(b);ic(a,e);b=1+b|0}return a.Va};c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};
+c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new T6).b()};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};c.$classData=g({JZ:0},!1,"scala.collection.mutable.ArrayOps$ofChar",{JZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});function kZ(){this.U=null}kZ.prototype=new l;kZ.prototype.constructor=kZ;c=kZ.prototype;c.jb=function(){return(new C3).Nq(this.U)};
+c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.X=function(a){return this.U.n[a]};c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new C3).Nq(this.U)};c.o=function(a){dna||(dna=(new VC).b());return a&&a.$classData&&a.$classData.m.KZ?this.U===(null===a?null:a.U):!1};
+c.Ab=function(a){return ec(this,"",a,"")};c.Nq=function(a){this.U=a;return this};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};c.Af=function(a,b){return rD(this,a,b)};
+c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};
+c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};c.ie=function(){return(new C3).Nq(this.U)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new C3).Nq(this.U)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};
+c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;)ic(a,this.U.n[b]),b=1+b|0;return a.Va};c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new U6).b()};c.qf=function(){return l5(this)};
+c.Te=function(a,b){return v8(this,a,b)};c.$classData=g({KZ:0},!1,"scala.collection.mutable.ArrayOps$ofDouble",{KZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});function lZ(){this.U=null}lZ.prototype=new l;lZ.prototype.constructor=lZ;c=lZ.prototype;c.jb=function(){return(new OA).xp(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.X=function(a){return this.U.n[a]};c.vb=function(a){return f8(this,a)};
+c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new OA).xp(this.U)};c.o=function(a){ena||(ena=(new WC).b());return a&&a.$classData&&a.$classData.m.LZ?this.U===(null===a?null:a.U):!1};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};
+c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};c.Af=function(a,b){return rD(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};c.ae=function(){return c8(this)};
+c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};c.xp=function(a){this.U=a;return this};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};
+c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};c.ie=function(){return(new OA).xp(this.U)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new OA).xp(this.U)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};
+c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;)ic(a,this.U.n[b]),b=1+b|0;return a.Va};c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new V6).b()};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};
+c.$classData=g({LZ:0},!1,"scala.collection.mutable.ArrayOps$ofFloat",{LZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});function mZ(){this.U=null}mZ.prototype=new l;mZ.prototype.constructor=mZ;c=mZ.prototype;c.jb=function(){return(new A3).Oq(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.X=function(a){return this.U.n[a]};c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};
+c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new A3).Oq(this.U)};c.o=function(a){fna||(fna=(new XC).b());return a&&a.$classData&&a.$classData.m.MZ?this.U===(null===a?null:a.U):!1};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};
+c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};c.Af=function(a,b){return rD(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};
+c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Oq=function(a){this.U=a;return this};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};
+c.ie=function(){return(new A3).Oq(this.U)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new A3).Oq(this.U)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;)ic(a,this.U.n[b]),b=1+b|0;return a.Va};
+c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new W6).b()};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};c.$classData=g({MZ:0},!1,"scala.collection.mutable.ArrayOps$ofInt",{MZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});
+function nZ(){this.U=null}nZ.prototype=new l;nZ.prototype.constructor=nZ;c=nZ.prototype;c.jb=function(){return(new B3).Pq(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.X=function(a){return this.U.n[a]};c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};
+c.Pq=function(a){this.U=a;return this};c.hc=function(){return(new B3).Pq(this.U)};c.o=function(a){gna||(gna=(new YC).b());return a&&a.$classData&&a.$classData.m.NZ?this.U===(null===a?null:a.U):!1};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};
+c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};c.Af=function(a,b){return rD(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};
+c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};c.ie=function(){return(new B3).Pq(this.U)};
+c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new B3).Pq(this.U)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;){var e=this.U.n[b];ic(a,(new Xb).ha(e.ia,e.oa));b=1+b|0}return a.Va};c.og=function(a){return wC(this,a)};
+c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new X6).b()};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};c.$classData=g({NZ:0},!1,"scala.collection.mutable.ArrayOps$ofLong",{NZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});function Cm(){this.U=null}
+Cm.prototype=new l;Cm.prototype.constructor=Cm;c=Cm.prototype;c.jb=function(){return(new ci).$h(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.X=function(a){return this.U.n[a]};c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new ci).$h(this.U)};
+c.o=function(a){hna||(hna=(new ZC).b());return a&&a.$classData&&a.$classData.m.OZ?this.U===(null===a?null:a.U):!1};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};
+c.Af=function(a,b){return rD(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.$h=function(a){this.U=a;return this};c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};
+c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};c.ie=function(){return(new ci).$h(this.U)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new ci).$h(this.U)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};
+c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;)ic(a,this.U.n[b]),b=1+b|0;return a.Va};c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};
+c.db=function(){var a=this.U;return(new JS).Bp(ura(vra(),Oz(oa(a))))};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};c.$classData=g({OZ:0},!1,"scala.collection.mutable.ArrayOps$ofRef",{OZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});function oZ(){this.U=null}oZ.prototype=new l;oZ.prototype.constructor=oZ;c=oZ.prototype;c.jb=function(){return(new y3).Qq(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};
+c.X=function(a){return this.U.n[a]};c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.Qq=function(a){this.U=a;return this};c.hc=function(){return(new y3).Qq(this.U)};c.o=function(a){ina||(ina=(new $C).b());return a&&a.$classData&&a.$classData.m.PZ?this.U===(null===a?null:a.U):!1};
+c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};c.Af=function(a,b){return rD(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};
+c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};
+c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};c.ie=function(){return(new y3).Qq(this.U)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new y3).Qq(this.U)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};
+c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;)ic(a,this.U.n[b]),b=1+b|0;return a.Va};c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new Y6).b()};c.qf=function(){return l5(this)};
+c.Te=function(a,b){return v8(this,a,b)};c.$classData=g({PZ:0},!1,"scala.collection.mutable.ArrayOps$ofShort",{PZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});function pZ(){this.U=null}pZ.prototype=new l;pZ.prototype.constructor=pZ;c=pZ.prototype;c.jb=function(){return(new E3).Sq(this.U)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.X=function(){};c.vb=function(a){return f8(this,a)};
+c.Rg=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new E3).Sq(this.U)};c.o=function(a){jna||(jna=(new aD).b());return a&&a.$classData&&a.$classData.m.QZ?this.U===(null===a?null:a.U):!1};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.ee=function(a){return j8(this,a)};
+c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};c.Af=function(a,b){return rD(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.U.n.length};c.ae=function(){return c8(this)};
+c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Sa=function(){return Ye(new Ze,this,0,this.U.n.length)};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.U.n.length};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.U.n.length};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.U.n.length);return Vv(a)};c.nd=function(){return em(this)};
+c.de=function(a){return rD(this,a,this.U.n.length)};c.$=function(){return Uj(this)};c.ie=function(){return(new E3).Sq(this.U)};c.Sq=function(a){this.U=a;return this};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new E3).Sq(this.U)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.U};c.Ff=function(a,b){return r8(this,0,this.U.n.length,a,b)};c.He=function(a,b,d){K8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return this.U.r()};
+c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.U.n.length;b<d;)ic(a,void 0),b=1+b|0;return a.Va};c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return L8(this,a)};c.Ye=function(){return nd(this)};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new Z6).b()};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};
+c.$classData=g({QZ:0},!1,"scala.collection.mutable.ArrayOps$ofUnit",{QZ:1,d:1,to:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,kd:1});function M8(){}M8.prototype=new I8;M8.prototype.constructor=M8;function L3a(){}L3a.prototype=M8.prototype;function N8(a){var b=a.db();b.Xb(a);return b.Ba()}function O8(a,b){b=a.Ml(b);-1!==b&&a.mz(b);return a}function P8(){this.Ue=this.Dg=null}P8.prototype=new K3a;P8.prototype.constructor=P8;
+P8.prototype.ta=function(a){for(var b=this.Ue,d=b.Tb,b=kD(b),e=d.n[b];null!==e;){var f=e.ka();a.y(e.W);for(e=f;null===e&&0<b;)b=-1+b|0,e=d.n[b]}};P8.prototype.cr=function(a){if(null===a)throw pg(qg(),null);this.Ue=a;Lc.prototype.Of.call(this,a);return this};P8.prototype.$classData=g({bka:0},!1,"scala.collection.mutable.HashMap$$anon$2",{bka:1,EY:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,k:1,h:1});function Uv(){this.bf=null}Uv.prototype=new l;
+Uv.prototype.constructor=Uv;c=Uv.prototype;c.jb=function(){return(new J).j(this.bf)};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Dj(this)};c.b=function(){Uv.prototype.j.call(this,[]);return this};c.X=function(a){return this.bf[a]};c.vb=function(a){return f8(this,a)};c.Rg=function(){return Ye(new Ze,this,0,this.bf.length|0)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return O2(this)};c.hc=function(){return(new J).j(this.bf)};
+c.o=function(a){return H2(this,a)};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.cd=function(a){this.bf.push(a);return this};c.ee=function(a){return j8(this,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return k8(this)};c.l=function(){return i5(this)};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.bf.length|0,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Lg=function(){return Wj(this)};
+c.Af=function(a,b){return n8(this,a,b)};c.pg=function(){Mj();var a=Nj().pc;return K(this,a)};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return Vw(this)};c.Da=function(){return this.bf.length|0};c.ae=function(){return c8(this)};c.Ba=function(){return this.bf};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Sa=function(){return Ye(new Ze,this,0,this.bf.length|0)};c.mg=function(a,b){JT(this,a,b)};c.Zf=function(){return ec(this,"","","")};
+c.$c=function(a,b){return Gt(this,a,b)};c.sa=function(){return this.bf.length|0};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.bf.length|0};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Ye(new Ze,this,0,this.bf.length|0);return Vv(a)};c.nd=function(){return em(this)};c.de=function(a){return n8(this,a,this.bf.length|0)};c.$=function(){return Uj(this)};c.ie=function(){return(new J).j(this.bf)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return(new J).j(this.bf)};
+c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this.bf};c.Ff=function(a,b){return r8(this,0,this.bf.length|0,a,b)};c.Ma=function(a){this.bf.push(a);return this};c.oc=function(){};c.He=function(a,b,d){s8(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return iT(S(),(new J).j(this.bf))};c.De=function(){for(var a=fc(new gc,hc()),b=0,d=this.bf.length|0;b<d;)ic(a,this.bf[b]),b=1+b|0;return a.Va};c.og=function(a){return wC(this,a)};
+c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){return xC(this,a)};c.Ye=function(){return nd(this)};c.j=function(a){this.bf=a;return this};c.lc=function(a,b){return k5(this,a,b)};c.db=function(){return(new Uv).b()};c.Xb=function(a){return IC(this,a)};c.qf=function(){return l5(this)};c.Te=function(a,b){return v8(this,a,b)};function Iu(a){return!!(a&&a.$classData&&a.$classData.m.$Z)}
+c.$classData=g({$Z:0},!1,"scala.scalajs.js.ArrayOps",{$Z:1,d:1,Ag:1,Sf:1,xf:1,Pd:1,Yc:1,ob:1,q:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,mb:1,Xc:1,af:1,sd:1,qd:1,pd:1});function M3a(a,b,d){var e=a.gc(b);a.Co(b,d);return e}function N3a(a,b){var d=a.gc(b);a.uh(b);return d}function PE(a,b,d){a.vl((new w).e(b,d))}function O3a(a,b,d){var e=a.gc(b);if(Xj(e))return e.Q;if(C()===e)return d=se(d),a.Co(b,d),d;throw(new q).i(e);}
+function tia(a){var b=(new M2).hb(a.Da());a.ta(m(new p,function(a,b){return function(a){return N2(b,a)}}(a,b)));return b}function P3a(a){for(var b=a.Jv();b.ra();){var d=b.ka();a.uh(d)}}function Q8(a){return a.Pi().Xb(a)}function Q3a(a){var b=(new M2).hb(a.Da());a.ta(m(new p,function(a,b){return function(a){return N2(b,a)}}(a,b)));return b}function WR(){}WR.prototype=new l;WR.prototype.constructor=WR;c=WR.prototype;c.sl=function(a,b){var d=Zy().ug;return c2(this,a,b,d)};c.Qj=function(){};
+c.hd=function(a,b){return MFa(this,a,b)};c.Zz=function(a,b,d){return wja(a,b,d)};c.Gh=function(){};c.ro=function(){};c.Hk=function(a){return Vx(this,a)};c.yh=function(a,b){a:{var d;a=Ys(a);d=Mp(a);if(Op(d))a=d.gd,d=d.ld,Lp(),d=(new Rp).Vb(a,d);else throw(new q).i(d);a=d.Sc;var e=b.y(d.Ic);d=a;a=e;b:for(;;){if(!Qp(d)){if(Op(d)){e=d;d=e.ld;a=sq(b.y(e.gd),a);continue b}throw(new q).i(d);}break a}}return a};c.Yp=function(){};c.cm=function(){};c.jl=function(){};c.Kh=function(a,b,d){return f2(d,a,b,this)};
+c.Fr=function(){};c.so=function(){};c.Zq=function(){Ed(this);ky(this);Wx(this);Jy(this);this.Fr(Ky(this));this.Hr(Ly(this));DR(this);ER(this);FR(this);GR(this);JR(this);Fd(this);iR(this);HX(this);Pd(this);Od(this);eR(this);return this};c.Ch=function(a){return jy(this,a)};c.xy=function(a,b,d){var e=a.Sc;a=b.y(a.Ic);return Dxa(e,a,d)};c.mh=function(){};c.Gr=function(){};c.rl=function(a,b,d){return wja(a,b,d)};
+function R3a(a,b,d,e){var f=b.Sc,h=d.y(b.Ic);b=f;f=h;for(;;){if(Qp(b))return f;if(Op(b))h=b,b=h.ld,f=e.sc(f,I(function(a,b,d){return function(){return b.y(d)}}(a,d,h.gd)));else throw(new q).i(b);}}c.Yd=function(a){Lp();a=se(a);var b=[],d=Np().Wd,e=b.length|0;a:for(;;){if(0!==e){d=(new Pp).Vb(b[-1+e|0],d);e=-1+e|0;continue a}break}return(new Rp).Vb(a,d)};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.sk=function(a,b,d){return R3a(this,a,b,d)};c.$m=function(){};c.Ht=function(){};c.Fh=function(){};
+c.bm=function(){};c.Pj=function(){};c.Hr=function(){};c.Ri=function(a,b,d){var e=a.Sc;a=sb(d,b,a.Ic);return Dxa(e,a,d)};c.Fj=function(a){return O1(this,a)};c.$classData=g({baa:0},!1,"scalaz.NonEmptyListInstances$$anon$1",{baa:1,d:1,ZC:1,om:1,wh:1,Eg:1,xl:1,yl:1,pm:1,SC:1,ek:1,Oh:1,Qh:1,Rh:1,Ph:1,ck:1,dk:1,nm:1,qs:1,gu:1,tn:1,Ro:1,Qo:1,nq:1});function R8(){}R8.prototype=new l;R8.prototype.constructor=R8;c=R8.prototype;c.sl=function(a,b){return S3a(this,a,b)};c.Qj=function(){};c.lw=function(){};
+c.hd=function(a,b){Mj();var d=Nj().pc;return kr(a,b,d)};c.Gh=function(){};c.ro=function(){};c.Hk=function(a){return Vx(this,a)};function T3a(a,b,d,e){var f=null,f=e.Yd(I(function(){return function(){return rc().ri.zl}}(a)));for(b=Qj(b);b.oi;)var h=b.ka(),f=Gy(e,I(function(a,b){return function(){return b}}(a,f)),I(function(a,b,d){return function(){return b.y(d)}}(a,d,h)),ub(new vb,function(){return function(a,b){return a.yc(b,(Mj(),Nj().pc))}}(a)));return f}
+c.yh=function(a,b){Mj();var d=Nj().pc;return g5(a,b,d)};c.Yp=function(){};c.cm=function(){};c.qw=function(){};c.jl=function(){};c.Kh=function(a,b,d){return f2(d,a,b,this)};function S3a(a,b,d){a=m(new p,function(a,b,d){return function(a){var e=rc().ri,r;r=(new w).e(a,e.zl);for(a=Qj(b);a.oi;)e=a.ka(),e=py(d.y(e),r.ja(),Zy().ug),r=(new w).e(e.ja(),r.na().yc(e.na(),(Mj(),Nj().pc)));return r}}(a,b,d));b=Zy().ug;return $y(new az,a,b)}c.so=function(){};c.Ch=function(a){return jy(this,a)};c.mh=function(){};
+c.Gr=function(){};c.rl=function(a,b,d){return T3a(this,a,b,d)};c.Yd=function(a){return rc().ri.zl.yc(se(a),(Mj(),Nj().pc))};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.sk=function(a,b,d){return i2(this,a,b,d)};c.Fh=function(){};c.bm=function(){};c.Pj=function(){};c.Lt=function(){};c.Ri=function(a,b,d){return j2(this,a,b,d).ja()};c.Fj=function(a){return O1(this,a)};c.It=function(){};
+c.$classData=g({bca:0},!1,"scalaz.std.VectorInstances$$anon$1",{bca:1,d:1,om:1,wh:1,Eg:1,xl:1,yl:1,pm:1,Gx:1,ek:1,Oh:1,Qh:1,Rh:1,Ph:1,ck:1,dk:1,Cx:1,ku:1,qs:1,Hx:1,nm:1,Ro:1,Qo:1,hu:1,nq:1});function S8(){}S8.prototype=new I8;S8.prototype.constructor=S8;function T8(){}c=T8.prototype=S8.prototype;c.KV=function(a,b){return BP(this,a,b)};c.vb=function(a){return j3a(this,a)};c.xE=function(a){return this.mf(a,0)};c.z=function(){return 0===this.vb(0)};c.Wm=function(a){return PA(this,a)};
+c.o=function(a){return H2(this,a)};c.gk=function(a){return NZ(this,a)};c.Ia=function(a){return this.y(a)|0};c.yc=function(a,b){return oi(this,a,b)};c.l=function(){return i5(this)};c.mf=function(a,b){return k3a(this,a,b)};c.Qf=function(){return l3a(this)};c.Da=function(){return this.sa()};c.Ul=function(a){return OZ(new PZ,this,a)};c.Tc=function(a,b){return Ww(this,a,b)};c.Oi=function(){return a8(this)};c.Ja=function(a){return!!this.y(a)};c.ab=function(a){return Eh(this,a)};c.ie=function(){return this};
+c.Nc=function(){return this.ie()};c.Fp=function(a){return I2(this,a)};c.Ml=function(a){return this.KV(a,0)};c.gb=function(a,b){return RA(this,a,b)};c.r=function(){return iT(S(),this.Jh())};c.za=function(a){return NZ(this,a)};function CR(){}CR.prototype=new l;CR.prototype.constructor=CR;c=CR.prototype;c.sl=function(a,b){var d=Zy().ug;return c2(this,a,b,d)};c.Qj=function(){};c.lw=function(){};c.hd=function(a,b){a=Mp(a);return Bja(a,Np().Wd,b)};c.Gh=function(){};
+function U3a(a,b,d,e){var f=e.Yd(I(function(){return function(){return Np().Wd}}(a)));b=Mp(b);for(;;){if(Qp(b))return f;if(Op(b)){var h=b;b=h.ld;f=Gy(e,I(function(a,b,d){return function(){return b.y(d)}}(a,d,h.gd)),I(function(a,b){return function(){return b}}(a,f)),ub(new vb,function(){return function(a,b){return(new Pp).Vb(a,b)}}(a)))}else throw(new q).i(b);}}c.ro=function(){};c.Hk=function(a){return Vx(this,a)};
+c.yh=function(a,b){a:{var d=Np().Wd;a=Mp(a);b:for(;;){if(!Qp(a)){if(Op(a)){var e=a;a=e.ld;d=zja(b.y(e.gd),d);continue b}throw(new q).i(a);}break a}}return d};c.Yp=function(){};c.cm=function(){};c.qw=function(){};c.jl=function(){};c.Kh=function(a,b,d){return f2(d,a,b,this)};function V3a(a,b,d,e){var f=e.Ee();for(;;){if(Qp(b))return f;if(Op(b)){var h=b;b=h.ld;f=e.sc(f,I(function(a,b,d){return function(){return b.y(d)}}(a,d,h.gd)))}else throw(new q).i(b);}}c.so=function(){};
+c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Gr=function(){};c.rl=function(a,b,d){return U3a(this,a,b,d)};c.Yd=function(a){var b=Np();a=se(a);return(new Pp).Vb(a,b.Wd)};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.sk=function(a,b,d){return V3a(this,a,b,d)};c.$m=function(){};c.Fh=function(){};c.bm=function(){};c.Pj=function(){};c.Lt=function(){};c.Ri=function(a,b,d){return Dxa(a,b,d)};c.Fj=function(a){return O1(this,a)};c.It=function(){};
+c.$classData=g({z$:0},!1,"scalaz.IListInstances$$anon$1",{z$:1,d:1,om:1,wh:1,Eg:1,xl:1,yl:1,pm:1,Gx:1,ek:1,Oh:1,Qh:1,Rh:1,Ph:1,ck:1,dk:1,Cx:1,ku:1,qs:1,Hx:1,nm:1,Ro:1,Qo:1,nq:1,hu:1,tn:1});function Ey(){}Ey.prototype=new l;Ey.prototype.constructor=Ey;c=Ey.prototype;c.sl=function(a,b){var d=Zy().ug;return c2(this,a,b,d)};c.Qj=function(){};function W3a(a,b,d){ux();return(new vx).nc(I(function(a,b,d){return function(){var a=U(se(d)),e=se(b);return a.y(U(e))}}(a,b,d)))}
+c.b=function(){Ed(this);ky(this);DR(this);ER(this);FR(this);GR(this);JR(this);iR(this);HX(this);Wx(this);Jy(this);this.Fr(Ky(this));this.Hr(Ly(this));Pd(this);Od(this);eR(this);this.Er(nR(this));return this};c.Er=function(){};c.hd=function(a,b){return X3a(this,a,b)};c.Zz=function(a,b,d){return Y3a(this,a,b,d)};c.Gh=function(){};c.ro=function(){};c.Hk=function(a){return Vx(this,a)};c.yh=function(a,b){return Z3a(this,a,b)};c.Yp=function(){};c.cm=function(){};c.jl=function(){};
+c.Kh=function(a,b,d){return f2(d,a,b,this)};function Y3a(a,b,d,e){return e.hd(d.y(U(b)),m(new p,function(a){return function(b){ux();return(new vx).nc(I(function(a,b){return function(){return b}}(a,b)))}}(a)))}c.Fr=function(){};c.so=function(){};function X3a(a,b,d){ux();return(new vx).nc(I(function(a,b,d){return function(){return d.y(U(b))}}(a,b,d)))}function Z3a(a,b,d){ux();return(new vx).nc(I(function(a,b,d){return function(){return U(d.y(U(b)))}}(a,b,d)))}c.Ch=function(a){return jy(this,a)};
+c.xy=function(a,b,d){return zqa(this,a,b,d)};c.mh=function(){};c.rl=function(a,b,d){return Y3a(this,a,b,d)};c.Yd=function(a){ux();return(new vx).nc(a)};c.yg=function(){};c.Jf=function(a,b){return W3a(this,a,b)};c.sk=function(a,b){return b.y(U(a))};c.$m=function(){};c.Ht=function(){};c.Fh=function(){};c.bm=function(){};c.Pj=function(){};c.Hr=function(){};c.Ri=function(a,b,d){return sb(d,b,U(a))};c.Fj=function(a){return O1(this,a)};
+c.$classData=g({Y$:0},!1,"scalaz.Need$$anon$2",{Y$:1,d:1,ek:1,Oh:1,Qh:1,wh:1,Eg:1,Rh:1,Ph:1,ck:1,dk:1,nm:1,gu:1,tn:1,DS:1,ES:1,ZC:1,om:1,xl:1,yl:1,pm:1,SC:1,Ro:1,Qo:1,nq:1,QC:1});function K0(){}K0.prototype=new l;K0.prototype.constructor=K0;c=K0.prototype;c.sl=function(a,b){return $3a(this,a,b)};c.Qj=function(){};c.lw=function(){};c.hd=function(a,b){var d=x();return a.ya(b,d.s)};c.Gh=function(){};c.ro=function(){};c.Hk=function(a){return a};c.yh=function(a,b){var d=x();return a.zj(b,d.s)};c.Yp=function(){};
+c.cm=function(){};c.qw=function(){};c.jl=function(){};c.Kh=function(a,b,d){return f2(d,a,b,this)};function a4a(a,b,d,e){b=AA(b);for(var f=e.Yd(I(function(){return function(){return u()}}(a)));!b.z();){var h=b.Y(),f=Gy(e,I(function(a,b,d){return function(){return b.y(d)}}(a,d,h)),I(function(a,b){return function(){return b}}(a,f)),ub(new vb,function(){return function(a,b){return Og(new Pg,a,b)}}(a)));b=b.$()}return f}c.so=function(){};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Gr=function(){};
+c.rl=function(a,b,d){return a4a(this,a,b,d)};c.Yd=function(a){a=se(a);var b=u();return Og(new Pg,a,b)};c.yg=function(){};function $3a(a,b,d){a=m(new p,function(a,b,d){return function(a){var e=(new mc).b(),r;r=a;for(a=b;!a.z();){var y=a.Y();r=py(d.y(y),r,Zy().ug);pc(e,r.na());r=r.ja();a=a.$()}return(new w).e(r,e.wb())}}(a,b,d));b=Zy().ug;return $y(new az,a,b)}c.Jf=function(a,b){return N1(this,a,b)};c.sk=function(a,b,d){return i2(this,a,b,d)};
+c.nv=function(){Ed(this);ky(this);Wx(this);Jy(this);DR(this);ER(this);FR(this);GR(this);Fd(this);Ry(this);HR(this);IR(this);JR(this);Pd(this);Od(this);eR(this);KR(this);iR(this);return this};c.$m=function(){};c.Fh=function(){};c.bm=function(){};c.Pj=function(){};c.Lt=function(){};c.Ri=function(a,b,d){return y8(a,b,d)};c.Fj=function(a){return O1(this,a)};c.It=function(){};
+c.$classData=g({Kba:0},!1,"scalaz.std.ListInstances$$anon$1",{Kba:1,d:1,om:1,wh:1,Eg:1,xl:1,yl:1,pm:1,Gx:1,ek:1,Oh:1,Qh:1,Rh:1,Ph:1,ck:1,dk:1,Cx:1,ku:1,qs:1,Hx:1,nm:1,Ro:1,Qo:1,nq:1,hu:1,tn:1});function U8(){}U8.prototype=new l;U8.prototype.constructor=U8;c=U8.prototype;c.sl=function(a,b){var d=Zy().ug;return c2(this,a,b,d)};c.Qj=function(){};c.lw=function(){};function b4a(a,b,d,e){return b.z()?se(d):sb(e,b.Y(),I(function(a,b,d,e){return function(){return b4a(a,b.$(),d,e)}}(a,b,d,e)))}
+c.hd=function(a,b){return a.ya(b,(sg(),(new tg).b()))};c.Gh=function(){};c.ro=function(){};c.Hk=function(a){return Vx(this,a)};c.yh=function(a,b){return a.zj(b,(sg(),(new tg).b()))};c.Yp=function(){};c.cm=function(){};c.qw=function(){};c.jl=function(){};c.Kh=function(a,b,d){return f2(d,a,b,this)};c.so=function(){};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Gr=function(){};c.rl=function(a,b,d){return c4a(this,a,b,d)};
+c.QE=function(){Ed(this);ky(this);Wx(this);Jy(this);DR(this);ER(this);FR(this);GR(this);Fd(this);Ry(this);HR(this);IR(this);JR(this);Pd(this);Od(this);eR(this);KR(this);iR(this);return this};c.Yd=function(a){rc();a=[se(a)];a=(new J).j(a);a=Ye(new Ze,a,0,a.qa.length|0);return Vv(a)};c.yg=function(){};c.Jf=function(a,b){return N1(this,a,b)};c.sk=function(a,b,d){return d4a(this,a,b,d)};c.$m=function(){};c.Fh=function(){};
+function d4a(a,b,d,e){return b4a(a,b,I(function(a,b){return function(){return b.Ee()}}(a,e)),ub(new vb,function(a,b,d){return function(a,e){return d.sc(b.y(a),e)}}(a,d,e)))}c.bm=function(){};c.Pj=function(){};c.Lt=function(){};c.Ri=function(a,b,d){return a.Ib(b,d)};
+function c4a(a,b,d,e){var f=e.Yd(I(function(){return function(){rc();return u().Oc()}}(a)));return b4a(a,b,I(function(a,b){return function(){return b}}(a,f)),ub(new vb,function(a,b,d){return function(e,f){return Gy(d,I(function(a,b,d){return function(){return b.y(d)}}(a,b,e)),f,ub(new vb,function(a){return function(b,d){sg();return Uma((new KC).nc(I(function(a,b){return function(){return b}}(a,d))),b)}}(a)))}}(a,d,e)))}c.Fj=function(a){return O1(this,a)};c.It=function(){};
+c.$classData=g({Uba:0},!1,"scalaz.std.StreamInstances$$anon$1",{Uba:1,d:1,om:1,wh:1,Eg:1,xl:1,yl:1,pm:1,Gx:1,ek:1,Oh:1,Qh:1,Rh:1,Ph:1,ck:1,dk:1,Cx:1,ku:1,qs:1,Hx:1,nm:1,Ro:1,Qo:1,nq:1,hu:1,tn:1});function V8(){}V8.prototype=new I8;V8.prototype.constructor=V8;function W8(){}c=W8.prototype=V8.prototype;c.y=function(a){var b=this.gc(a);if(C()===b)a=this.ox(a);else if(Xj(b))a=b.Q;else throw(new q).i(b);return a};c.z=function(){return 0===this.Da()};c.Wm=function(a){return PA(this,a)};
+c.o=function(a){return DO(this,a)};c.gk=function(a){return NZ(this,a)};c.Ia=function(a){return this.y(a)|0};c.Zh=function(a,b){a=this.gc(a);if(Xj(a))b=a.Q;else if(C()===a)b=se(b);else throw(new q).i(a);return b};c.l=function(){return i5(this)};c.Jv=function(){return(new R2).Of(this)};c.qj=function(a){return Kc(this,a)};c.ae=function(){return x3a(this)};c.Ul=function(a){return OZ(new PZ,this,a)};c.I_=function(){return(new Lc).Of(this)};c.Ja=function(a){return!!this.y(a)};
+c.ox=function(a){throw(new Bu).c("key not found: "+a);};c.Wj=function(){return(new S2).Of(this)};c.ab=function(a){return this.gc(a).ba()};c.cg=function(a,b,d,e){return y3a(this,a,b,d,e)};c.Nc=function(){return Cr(this)};c.oV=function(a){return E8(this,a)};c.Za=function(a){return this.ab(a)};c.vF=function(){return(new X8).Of(this)};c.r=function(){var a=S();return gC(a,this.bn(),a.RW)};c.gb=function(a,b){return z3a(this,a,b)};c.za=function(a){return NZ(this,a)};c.db=function(){return fc(new gc,this.wi())};
+c.qf=function(){return"Map"};function Y8(){}Y8.prototype=new I8;Y8.prototype.constructor=Y8;function Z8(){}c=Z8.prototype=Y8.prototype;c.jb=function(){return this.em()};c.of=function(){return this};c.y=function(a){return this.ab(a)};c.ne=function(){return this.em()};c.z=function(){return 0===this.Da()};c.hc=function(){return this};c.o=function(a){return f5(this,a)};c.Ia=function(a){return this.ab(a)|0};c.l=function(){return i5(this)};c.ad=function(){return kya()};c.QG=function(a){return this.ee(a)};
+c.qj=function(a){return Kc(this,a)};c.ae=function(){return v3a(this)};c.Ja=function(a){return this.ab(a)};c.Pi=function(){return this.$D()};c.em=function(){return this};c.Nc=function(){return Qo(this)};c.$D=function(){return this.ad().Wk()};c.r=function(){var a=S();return gC(a,this.em(),a.Hz)};c.ya=function(a,b){return kr(this,a,b)};c.za=function(a){return rb(this,a)};c.wl=function(a){return $k(this,a)};c.db=function(){return ih(new rh,this.Pi())};c.qf=function(){return"Set"};
+function hU(){this.xc=null}hU.prototype=new l;hU.prototype.constructor=hU;c=hU.prototype;c.jb=function(){return this};c.Ig=function(a,b){pC(this,a,b)};c.Y=function(){return Qj(this.xc).ka()};c.X=function(a){return this.xc.X(a)};c.vb=function(a){return j3a(this,a)};c.Rg=function(){return Qj(this.xc)};c.xE=function(a){return k3a(this,a,0)};c.Ze=function(a){return t7(this,a)};c.y=function(a){return this.xc.X(a|0)};c.Ys=function(a){return Rma(this,a)};c.Le=function(a){var b=Qj(this.xc);return Rra(b,a)};
+c.wb=function(){var a=x().s;return K(this,a)};c.z=function(){return 0===this.vb(0)};c.Wm=function(a){return PA(this,a)};c.hc=function(){return this};c.zj=function(a,b){return g5(this,a,b)};c.o=function(a){return H2(this,a)};c.gk=function(a){return NZ(this,a)};c.ND=function(a){return Gma(this,a)};c.ok=function(a){return WEa(this,a)};c.Ia=function(a){return this.xc.X(a)|0};c.Ab=function(a){return ec(this,"",a,"")};c.Qc=function(a,b,d){return ec(this,a,b,d)};c.Fo=function(a){return Zb(new $b,this,a)};
+c.ee=function(a){var b=Qj(this.xc);return oT(b,a)};c.yc=function(a,b){return oi(this,a,b)};c.Xe=function(){return h5(this)};c.l=function(){return ec(this.xc,"[",", ","]")};c.ad=function(){return Nj()};c.ta=function(a){var b=Qj(this.xc);pT(b,a)};c.Ib=function(a,b){return Xk(this,a,b)};c.Si=function(a,b){var d=Qj(this.xc);return Hma(d,a,b)};c.mf=function(a,b){return k3a(this,a,b)};c.Lg=function(){return Wj(this)};c.pg=function(){return this.xc};c.hg=function(a){return j5(this,a,!1)};c.Qf=function(){return(new hU).it(l3a(this.xc))};
+c.Jl=function(a,b){return j5(this,a,b)};c.Da=function(){return this.xc.sa()};c.Ul=function(a){return OZ(new PZ,this,a)};c.ae=function(){return c8(this)};c.Oi=function(){return a8(this)};c.Tc=function(a,b){return Ww(this,a,b)};c.Ja=function(a){return!!this.xc.X(a)};c.Sa=function(){return Qj(this.xc)};c.rk=function(a){var b=Qj(this.xc);return Sra(b,a)};c.Wn=function(){return PN(this)};c.Zf=function(){return ec(this,"","","")};c.$c=function(a,b){return Gt(this,a,b)};c.Xj=function(a){return rN(this,a)};
+c.sa=function(){return this.xc.sa()};c.Jh=function(){return this};c.vf=function(a){return j5(this,a,!0)};c.yf=function(){return this.xc.sa()};c.$i=function(a){return Kt(this,a)};c.Oc=function(){var a=Qj(this.xc);return Vv(a)};c.nd=function(){return XEa(this)};c.de=function(a){return I2a(this,a)};c.ab=function(a){return Eh(this,a)};c.it=function(a){this.xc=a;return this};c.ie=function(){return this};c.$=function(){return YEa(this)};c.cg=function(a,b,d,e){return uC(this,a,b,d,e)};c.Nc=function(){return this};
+c.Za=function(a){return I2(this,a|0)};c.Fp=function(a){return I2(this,a)};c.md=function(){var a=Yk(),a=Zk(a);return K(this,a)};c.Ed=function(){return this};c.Ff=function(a,b){return Xk(this,a,b)};c.Ml=function(a){return BP(this,a,0)};c.gb=function(a,b){return RA(this,a,b)};c.He=function(a,b,d){J2a(this,a,b,d)};c.Ng=function(){return!0};c.r=function(){return iT(S(),this)};c.De=function(){for(var a=fc(new gc,hc()),b=Qj(this.xc);b.oi;){var d=b.ka();ic(a,d)}return a.Va};
+c.og=function(a){return wC(this,a)};c.ya=function(a,b){return kr(this,a,b)};c.ce=function(a){return K2a(this,a)};c.Gk=function(a){return L2a(this,a)};c.Ce=function(a){return xC(this,a)};c.za=function(a){return NZ(this,a)};c.Ye=function(){return nd(this)};function fo(a,b){return(new hU).it(a.xc.yc(b,(Mj(),Nj().pc)))}c.lc=function(a,b){return k5(this,a,b)};c.zk=function(a){return Jma(this,a)};c.db=function(){Nj();KE();Mj();return(new LE).b()};c.qf=function(){return l5(this)};
+c.Te=function(a,b){return qN(this,a,b)};function zg(a){return!!(a&&a.$classData&&a.$classData.m.EI)}c.$classData=g({EI:0},!1,"org.nlogo.core.LogoList",{EI:1,d:1,xg:1,me:1,Ha:1,fa:1,Kb:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Gb:1,mb:1,ob:1,q:1,le:1,Xc:1,Yc:1,Pd:1,k:1,h:1});function $8(){}$8.prototype=new l;$8.prototype.constructor=$8;c=$8.prototype;c.sl=function(a,b){var d=Zy().ug;return c2(this,a,b,d)};c.kG=function(){};c.Qj=function(){};c.Er=function(){};
+c.hd=function(a,b){return MFa(this,a,b)};c.Zz=function(a,b){return b.y(a)};c.Gh=function(){};c.ro=function(){};c.Hk=function(a){return Vx(this,a)};function Hqa(){var a=new $8;Ed(a);ky(a);Wx(a);Jy(a);a.Fr(Ky(a));a.Hr(Ly(a));DR(a);ER(a);FR(a);GR(a);JR(a);iR(a);HX(a);Pd(a);Od(a);eR(a);a.Er(nR(a));a.kG(Rqa(a));return a}c.yh=function(a,b){return b.y(a)};c.Yp=function(){};c.cm=function(){};c.jl=function(){};c.Kh=function(a,b,d){return d.hd(a,b)};c.Fr=function(){};c.so=function(){};c.Ch=function(a){return a};
+c.xy=function(a,b,d){return zqa(this,a,b,d)};c.mh=function(){};c.rl=function(a,b){return b.y(a)};c.Yd=function(a){return se(a)};c.yg=function(){};c.Jf=function(a,b){return se(b).y(se(a))};c.sk=function(a,b,d){return wFa(this,a,b,d)};c.$m=function(){};c.Ht=function(){};c.Fh=function(){};c.bm=function(){};c.Pj=function(){};c.Hr=function(){};c.Ri=function(a,b,d){return j2(this,a,b,d).ja()};c.Fj=function(a){return a};
+c.$classData=g({D$:0},!1,"scalaz.IdInstances$$anon$1",{D$:1,d:1,ZC:1,om:1,wh:1,Eg:1,xl:1,yl:1,pm:1,SC:1,ek:1,Oh:1,Qh:1,Rh:1,Ph:1,ck:1,dk:1,nm:1,gu:1,tn:1,DS:1,ES:1,Ro:1,Qo:1,nq:1,QC:1,haa:1});function a9(){}a9.prototype=new l;a9.prototype.constructor=a9;c=a9.prototype;c.sl=function(a,b){var d=Zy().ug;return c2(this,a,b,d)};c.kG=function(){};c.Qj=function(){};c.lw=function(){};c.Er=function(){};c.hd=function(a,b){return a.z()?C():(new H).i(b.y(a.R()))};c.Gh=function(){};c.ro=function(){};
+c.Hk=function(a){return Vx(this,a)};c.yh=function(a,b){return a.z()?C():b.y(a.R())};function Rwa(){var a=new a9;Ed(a);ky(a);Wx(a);Jy(a);DR(a);ER(a);FR(a);GR(a);Fd(a);Ry(a);HR(a);IR(a);JR(a);a.Er(nR(a));Pd(a);Od(a);eR(a);KR(a);iR(a);a.kG(Rqa(a));return a}c.Yp=function(){};c.cm=function(){};c.qw=function(){};c.jl=function(){};c.Kh=function(a,b,d){return f2(d,a,b,this)};c.so=function(){};c.Ch=function(a){return jy(this,a)};c.mh=function(){};c.Gr=function(){};
+c.rl=function(a,b,d){return e4a(this,a,b,d)};function e4a(a,b,d,e){b.z()?d=C():(b=b.R(),d=(new H).i(e.hd(d.y(b),m(new p,function(){return function(a){return(new H).i(a)}}(a)))));return d.z()?e.Yd(I(function(){return function(){return C()}}(a))):d.R()}c.Yd=function(a){return(new H).i(se(a))};c.yg=function(){};c.Jf=function(a,b){a:{b=se(b);if(Xj(b)){b=b.Q;a=se(a);if(Xj(a)){a=(new H).i(b.y(a.Q));break a}if(C()===a){a=C();break a}throw(new q).i(a);}if(C()===b)a=C();else throw(new q).i(b);}return a};
+c.sk=function(a,b,d){return i2(this,a,b,d)};c.$m=function(){};c.Fh=function(){};c.bm=function(){};c.Pj=function(){};c.Lt=function(){};c.Ri=function(a,b,d){return j2(this,a,b,d).ja()};c.Fj=function(a){return O1(this,a)};c.It=function(){};c.$classData=g({Pba:0},!1,"scalaz.std.OptionInstances$$anon$1",{Pba:1,d:1,om:1,wh:1,Eg:1,xl:1,yl:1,pm:1,Gx:1,ek:1,Oh:1,Qh:1,Rh:1,Ph:1,ck:1,dk:1,Cx:1,ku:1,qs:1,Hx:1,nm:1,QC:1,Ro:1,Qo:1,nq:1,hu:1,tn:1,haa:1});function b9(){this.Ue=this.Zv=null}b9.prototype=new W8;
+b9.prototype.constructor=b9;function f4a(){}c=f4a.prototype=b9.prototype;c.ta=function(a){this.Ue.ta(m(new p,function(a,d){return function(e){return a.Zv.y(e.ja())?d.y(e):void 0}}(this,a)))};c.$E=function(a,b){this.Zv=b;if(null===a)throw pg(qg(),null);this.Ue=a;return this};c.Sa=function(){var a=this.Ue.Sa();return(new vo).Nf(a,m(new p,function(a){return function(d){return!!a.Zv.y(d.ja())}}(this)))};c.gc=function(a){return this.Zv.y(a)?this.Ue.gc(a):C()};c.ab=function(a){return!!this.Zv.y(a)&&this.Ue.ab(a)};
+function c9(){this.Ue=this.uy=null}c9.prototype=new W8;c9.prototype.constructor=c9;function g4a(){}c=g4a.prototype=c9.prototype;c.ta=function(a){Zb(new $b,this.Ue,m(new p,function(){return function(a){return null!==a}}(this))).ta(m(new p,function(a,d){return function(e){if(null!==e)return d.y((new w).e(e.ja(),a.uy.y(e.na())));throw(new q).i(e);}}(this,a)))};c.$E=function(a,b){this.uy=b;if(null===a)throw pg(qg(),null);this.Ue=a;return this};c.Da=function(){return this.Ue.Da()};
+c.Sa=function(){var a=this.Ue.Sa(),a=(new vo).Nf(a,m(new p,function(){return function(a){return null!==a}}(this)));return(new cc).Nf(a,m(new p,function(a){return function(d){if(null!==d)return(new w).e(d.ja(),a.uy.y(d.na()));throw(new q).i(d);}}(this)))};c.gc=function(a){a=this.Ue.gc(a);var b=this.uy;return a.z()?C():(new H).i(b.y(a.R()))};c.ab=function(a){return this.Ue.ab(a)};function d9(a,b){var d=fc(new gc,hc());IC(d,a);a=(new w).e(b.ja(),b.na());ic(d,a);return d.Va}
+function e9(a,b){var d=fc(new gc,hc());Zb(new $b,a,m(new p,function(a,b){return function(a){return!Em(Fm(),a.ja(),b)}}(a,b))).ta(m(new p,function(a,b){return function(a){return b.Ma(a)}}(a,d)));return d.Va}function f9(){this.KU=this.$z=null}f9.prototype=new W8;f9.prototype.constructor=f9;function h4a(){}c=h4a.prototype=f9.prototype;c.xda=function(a,b){this.$z=a;this.KU=b;return this};c.Sa=function(){return this.$z.Sa()};c.Da=function(){return this.$z.Da()};c.ox=function(a){return this.KU.y(a)};
+c.gc=function(a){return this.$z.gc(a)};function X8(){this.Ue=null}X8.prototype=new Z8;X8.prototype.constructor=X8;function g9(){}c=g9.prototype=X8.prototype;c.Qd=function(a){return this.Ki(a)};c.ta=function(a){var b=this.Ue.Jv();pT(b,a)};c.Da=function(){return this.Ue.Da()};c.Sa=function(){return this.Ue.Jv()};c.Ki=function(a){return G(kya(),u()).wl(this).Ki(a)};c.Of=function(a){if(null===a)throw pg(qg(),null);this.Ue=a;return this};c.ab=function(a){return this.Ue.ab(a)};
+c.Sg=function(a){return G(kya(),u()).wl(this).Sg(a)};c.$classData=g({xz:0},!1,"scala.collection.MapLike$DefaultKeySet",{xz:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,k:1,h:1});function h9(){this.vh=this.Ue=null}h9.prototype=new g9;h9.prototype.constructor=h9;h9.prototype.ta=function(a){for(var b=this.vh,d=b.Tb,b=kD(b),e=d.n[b];null!==e;){var f=e.ka();a.y(e.ve);for(e=f;null===e&&0<b;)b=-1+b|0,e=d.n[b]}};
+h9.prototype.cr=function(a){if(null===a)throw pg(qg(),null);this.vh=a;X8.prototype.Of.call(this,a);return this};h9.prototype.$classData=g({aka:0},!1,"scala.collection.mutable.HashMap$$anon$1",{aka:1,xz:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,k:1,h:1});function i9(){this.Ue=null}i9.prototype=new g9;i9.prototype.constructor=i9;i9.prototype.Pi=function(){return(new b7).b()};i9.prototype.$D=function(){return(new b7).b()};
+i9.prototype.dr=function(a){X8.prototype.Of.call(this,a);return this};i9.prototype.$classData=g({qka:0},!1,"scala.collection.mutable.LinkedHashMap$DefaultKeySet",{qka:1,xz:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,k:1,h:1});function j9(){}j9.prototype=new W8;j9.prototype.constructor=j9;function k9(){}c=k9.prototype=j9.prototype;c.jb=function(){return this};c.of=function(){return this};c.ne=function(){return this};
+c.hc=function(){return this};c.ad=function(){return Ok()};c.wi=function(){return this.aE()};c.aE=function(){return hc()};c.bn=function(){return this};c.Nk=function(a){return B3a(this,a)};c.vf=function(a){return this.oV(a)};c.De=function(){return this};function l9(){}l9.prototype=new Z8;l9.prototype.constructor=l9;function i4a(){}c=i4a.prototype=l9.prototype;c.jb=function(){return this};c.of=function(){return this};c.wt=function(){throw(new Bu).c("next of empty set");};c.y=function(a){return this.ab(a)};
+c.Qd=function(a){return this.ix(a)};c.z=function(){return!0};c.ne=function(){return this};c.hc=function(){return this};c.as=function(a){return m9(new n9,this,a)};c.ad=function(){Z1a||(Z1a=(new Q6).b());return Z1a};c.Da=function(){return 0};c.Sa=function(){var a=o9(this);return hv(a)};c.Ki=function(a){return this.ix(a)};c.Pi=function(){return Y1a()};function o9(a){for(var b=u();!a.z();){var d=a.Ru(),b=Og(new Pg,d,b);a=a.wt()}return b}c.em=function(){return this};
+c.Ru=function(){throw(new Bu).c("elem of empty set");};c.ab=function(){return!1};function j4a(a,b){return b.z()?a:b.Ff(a,ub(new vb,function(){return function(a,b){return a.as(b)}}(a)))}c.md=function(){return this};c.ix=function(){return this};c.Sg=function(a){return this.as(a)};c.wl=function(a){return j4a(this,a)};c.qf=function(){return"ListSet"};function p9(){}p9.prototype=new Z8;p9.prototype.constructor=p9;c=p9.prototype;c.jb=function(){return this};c.of=function(){return this};c.b=function(){return this};
+c.y=function(){return!1};c.Qd=function(){return this};c.ne=function(){return this};c.hc=function(){return this};c.ad=function(){return Yk()};c.ta=function(){};c.Da=function(){return 0};c.Sa=function(){return yB().Sd};c.Ki=function(){return this};c.Pi=function(){return hh()};c.em=function(){return this};c.ab=function(){return!1};c.md=function(){return this};c.Sg=function(a){return(new q9).i(a)};
+c.$classData=g({eja:0},!1,"scala.collection.immutable.Set$EmptySet$",{eja:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,k:1,h:1});var k4a=void 0;function hh(){k4a||(k4a=(new p9).b());return k4a}function q9(){this.Pc=null}q9.prototype=new Z8;q9.prototype.constructor=q9;c=q9.prototype;c.jb=function(){return this};c.of=function(){return this};c.Y=function(){return this.Pc};c.y=function(a){return this.ab(a)};
+c.Qd=function(a){return this.rj(a)};c.ne=function(){return this};c.hc=function(){return this};c.ee=function(a){return!!a.y(this.Pc)};c.ad=function(){return Yk()};c.ta=function(a){a.y(this.Pc)};c.Da=function(){return 1};c.i=function(a){this.Pc=a;return this};c.Sa=function(){yB();var a=(new J).j([this.Pc]);return Ye(new Ze,a,0,a.qa.length|0)};c.Ki=function(a){return this.rj(a)};c.Pi=function(){return hh()};c.ln=function(a){return this.ab(a)?this:(new r9).e(this.Pc,a)};c.em=function(){return this};
+c.$=function(){return hh()};c.ab=function(a){return Em(Fm(),a,this.Pc)};c.md=function(){return this};c.Sg=function(a){return this.ln(a)};c.rj=function(a){return Em(Fm(),a,this.Pc)?hh():this};c.$classData=g({fja:0},!1,"scala.collection.immutable.Set$Set1",{fja:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,k:1,h:1});function r9(){this.Rd=this.Pc=null}r9.prototype=new Z8;r9.prototype.constructor=r9;
+c=r9.prototype;c.jb=function(){return this};c.of=function(){return this};c.Y=function(){return this.Pc};c.y=function(a){return this.ab(a)};c.Qd=function(a){return this.rj(a)};c.Gw=function(){return(new q9).i(this.Rd)};c.ne=function(){return this};c.hc=function(){return this};c.e=function(a,b){this.Pc=a;this.Rd=b;return this};c.ee=function(a){return!!a.y(this.Pc)&&!!a.y(this.Rd)};c.ad=function(){return Yk()};c.ta=function(a){a.y(this.Pc);a.y(this.Rd)};c.Da=function(){return 2};
+c.Sa=function(){yB();var a=(new J).j([this.Pc,this.Rd]);return Ye(new Ze,a,0,a.qa.length|0)};c.Ki=function(a){return this.rj(a)};c.Pi=function(){return hh()};c.ln=function(a){return this.ab(a)?this:(new s9).Id(this.Pc,this.Rd,a)};c.em=function(){return this};c.$=function(){return this.Gw()};c.ab=function(a){return Em(Fm(),a,this.Pc)||Em(Fm(),a,this.Rd)};c.md=function(){return this};c.Sg=function(a){return this.ln(a)};
+c.rj=function(a){return Em(Fm(),a,this.Pc)?(new q9).i(this.Rd):Em(Fm(),a,this.Rd)?(new q9).i(this.Pc):this};c.$classData=g({gja:0},!1,"scala.collection.immutable.Set$Set2",{gja:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,k:1,h:1});function s9(){this.fg=this.Rd=this.Pc=null}s9.prototype=new Z8;s9.prototype.constructor=s9;c=s9.prototype;c.jb=function(){return this};c.of=function(){return this};
+c.Y=function(){return this.Pc};c.y=function(a){return this.ab(a)};c.Qd=function(a){return this.rj(a)};c.Gw=function(){return(new r9).e(this.Rd,this.fg)};c.ne=function(){return this};c.hc=function(){return this};c.ee=function(a){return!!a.y(this.Pc)&&!!a.y(this.Rd)&&!!a.y(this.fg)};c.ad=function(){return Yk()};c.ta=function(a){a.y(this.Pc);a.y(this.Rd);a.y(this.fg)};c.Da=function(){return 3};c.Id=function(a,b,d){this.Pc=a;this.Rd=b;this.fg=d;return this};
+c.Sa=function(){yB();var a=(new J).j([this.Pc,this.Rd,this.fg]);return Ye(new Ze,a,0,a.qa.length|0)};c.Ki=function(a){return this.rj(a)};c.Pi=function(){return hh()};c.ln=function(a){return this.ab(a)?this:(new t9).Hm(this.Pc,this.Rd,this.fg,a)};c.em=function(){return this};c.$=function(){return this.Gw()};c.ab=function(a){return Em(Fm(),a,this.Pc)||Em(Fm(),a,this.Rd)||Em(Fm(),a,this.fg)};c.md=function(){return this};c.Sg=function(a){return this.ln(a)};
+c.rj=function(a){return Em(Fm(),a,this.Pc)?(new r9).e(this.Rd,this.fg):Em(Fm(),a,this.Rd)?(new r9).e(this.Pc,this.fg):Em(Fm(),a,this.fg)?(new r9).e(this.Pc,this.Rd):this};c.$classData=g({hja:0},!1,"scala.collection.immutable.Set$Set3",{hja:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,k:1,h:1});function t9(){this.Fl=this.fg=this.Rd=this.Pc=null}t9.prototype=new Z8;t9.prototype.constructor=t9;
+c=t9.prototype;c.jb=function(){return this};c.of=function(){return this};c.Y=function(){return this.Pc};c.y=function(a){return this.ab(a)};c.Qd=function(a){return this.rj(a)};c.Gw=function(){return(new s9).Id(this.Rd,this.fg,this.Fl)};c.ne=function(){return this};c.hc=function(){return this};c.ee=function(a){return!!a.y(this.Pc)&&!!a.y(this.Rd)&&!!a.y(this.fg)&&!!a.y(this.Fl)};c.ad=function(){return Yk()};c.ta=function(a){a.y(this.Pc);a.y(this.Rd);a.y(this.fg);a.y(this.Fl)};c.Da=function(){return 4};
+c.Sa=function(){yB();var a=(new J).j([this.Pc,this.Rd,this.fg,this.Fl]);return Ye(new Ze,a,0,a.qa.length|0)};c.Ki=function(a){return this.rj(a)};c.Pi=function(){return hh()};c.ln=function(a){return this.ab(a)?this:u9(u9(u9(u9(u9((new v9).b(),this.Pc),this.Rd),this.fg),this.Fl),a)};c.em=function(){return this};c.$=function(){return this.Gw()};c.ab=function(a){return Em(Fm(),a,this.Pc)||Em(Fm(),a,this.Rd)||Em(Fm(),a,this.fg)||Em(Fm(),a,this.Fl)};
+c.Hm=function(a,b,d,e){this.Pc=a;this.Rd=b;this.fg=d;this.Fl=e;return this};c.md=function(){return this};c.Sg=function(a){return this.ln(a)};c.rj=function(a){return Em(Fm(),a,this.Pc)?(new s9).Id(this.Rd,this.fg,this.Fl):Em(Fm(),a,this.Rd)?(new s9).Id(this.Pc,this.fg,this.Fl):Em(Fm(),a,this.fg)?(new s9).Id(this.Pc,this.Rd,this.Fl):Em(Fm(),a,this.Fl)?(new s9).Id(this.Pc,this.Rd,this.fg):this};
+c.$classData=g({ija:0},!1,"scala.collection.immutable.Set$Set4",{ija:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,k:1,h:1});function v9(){}v9.prototype=new Z8;v9.prototype.constructor=v9;function w9(){}c=w9.prototype=v9.prototype;c.Vw=function(a,b){return x9(new y9,a,b)};c.jb=function(){return this};c.Cn=function(a){return this.wE(fC(V(),a))};c.of=function(){return this};c.b=function(){return this};
+c.y=function(a){return this.ab(a)};function u9(a,b){return a.Vw(b,a.Cn(b),0)}c.Qd=function(a){return l4a(this,a)};c.ne=function(){return this};c.hc=function(){return this};c.ad=function(){return Wk()};c.ta=function(){};c.QG=function(a){if(a&&a.$classData&&a.$classData.m.Ot)return this.Cw(a,0);var b=this.Sa();return oT(b,a)};c.hg=function(a){var b=6+this.Da()|0,b=la(Xa(L6),[224>b?b:224]);a=this.Xs(a,!1,0,b,0);return null===a?O6():a};c.Da=function(){return 0};c.Sa=function(){return yB().Sd};
+c.Ki=function(a){return l4a(this,a)};c.iw=function(){return this};c.Pi=function(){return O6()};c.vf=function(a){var b=6+this.Da()|0,b=la(Xa(L6),[224>b?b:224]);a=this.Xs(a,!0,0,b,0);return null===a?O6():a};c.wE=function(a){a=a+~(a<<9)|0;a^=a>>>14|0;a=a+(a<<4)|0;return a^(a>>>10|0)};function l4a(a,b){a=a.iw(b,a.Cn(b),0);return null===a?O6():a}c.em=function(){return this};c.ab=function(a){return this.vp(a,this.Cn(a),0)};c.$=function(){return this.TG()};c.TG=function(){return l4a(this,this.Y())};
+c.$D=function(){return O6()};c.md=function(){return this};c.Xs=function(){return null};c.vp=function(){return!1};c.Sg=function(a){return u9(this,a)};c.Cw=function(){return!0};var L6=g({Ot:0},!1,"scala.collection.immutable.HashSet",{Ot:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,kd:1,k:1,h:1});v9.prototype.$classData=L6;function z9(){}z9.prototype=new i4a;z9.prototype.constructor=z9;
+z9.prototype.b=function(){return this};z9.prototype.$classData=g({Oia:0},!1,"scala.collection.immutable.ListSet$EmptyListSet$",{Oia:1,Mia:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,k:1,h:1});var m4a=void 0;function Y1a(){m4a||(m4a=(new z9).b());return m4a}function n9(){this.vh=this.xj=null}n9.prototype=new i4a;n9.prototype.constructor=n9;c=n9.prototype;c.wt=function(){return this.vh};
+c.Qd=function(a){return n4a(a,this)};c.z=function(){return!1};c.as=function(a){return o4a(this,a)?this:m9(new n9,this,a)};c.Xe=function(){return this.vh};c.Da=function(){a:{var a=this,b=0;for(;;){if(a.z())break a;a=a.wt();b=1+b|0}}return b};function n4a(a,b){var d=u();for(;;){if(b.z())return Mm(d);if(Em(Fm(),a,b.Ru())){b=b.wt();for(a=d;!a.z();)d=a.Y(),b=m9(new n9,b,d.Ru()),a=a.$();return b}var e=b.wt(),d=Og(new Pg,b,d);b=e}}c.Ki=function(a){return n4a(a,this)};
+function m9(a,b,d){a.xj=d;if(null===b)throw pg(qg(),null);a.vh=b;return a}c.nd=function(){return this.xj};c.Ru=function(){return this.xj};c.ab=function(a){return o4a(this,a)};c.ix=function(a){return n4a(a,this)};function o4a(a,b){for(;;){if(a.z())return!1;if(Em(Fm(),a.Ru(),b))return!0;a=a.wt()}}c.Sg=function(a){return this.as(a)};
+c.$classData=g({Pia:0},!1,"scala.collection.immutable.ListSet$Node",{Pia:1,Mia:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,k:1,h:1});function A9(){this.Ue=null}A9.prototype=new g9;A9.prototype.constructor=A9;c=A9.prototype;c.jb=function(){return this};c.of=function(){return this};c.y=function(a){return this.Ue.ab(a)};c.Qd=function(a){return this.rj(a)};c.ne=function(){return this};c.hc=function(){return this};
+c.ad=function(){return Yk()};function Jc(a){var b=new A9;X8.prototype.Of.call(b,a);return b}c.Ki=function(a){return this.rj(a)};c.Pi=function(){return hh()};c.ln=function(a){return this.Ue.ab(a)?this:G(Yk(),u()).wl(this).Sg(a)};c.em=function(){return this};c.md=function(){return this};c.Sg=function(a){return this.ln(a)};c.rj=function(a){return this.Ue.ab(a)?G(Yk(),u()).wl(this).Ki(a):this};
+c.$classData=g({Yia:0},!1,"scala.collection.immutable.MapLike$ImmutableDefaultKeySet",{Yia:1,xz:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,k:1,h:1,ll:1,rd:1,wd:1,vd:1});function B9(){}B9.prototype=new T8;B9.prototype.constructor=B9;function C9(){}C9.prototype=B9.prototype;B9.prototype.jb=function(){return this.cn()};B9.prototype.ne=function(){return this.cn()};B9.prototype.cn=function(){return this};
+function oha(a){return D9(new G9,a,m(new p,function(a,d){return function(){return d}}(a,0)))}function p4a(a,b){a.Bb.zt(b.ja(),b.na());return a}function M9(){}M9.prototype=new w9;M9.prototype.constructor=M9;c=M9.prototype;c.b=function(){return this};c.Y=function(){throw(new Bu).c("Empty Set");};c.$=function(){return this.TG()};c.TG=function(){throw(new Bu).c("Empty Set");};
+c.$classData=g({Aia:0},!1,"scala.collection.immutable.HashSet$EmptyHashSet$",{Aia:1,Ot:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,kd:1,k:1,h:1});var q4a=void 0;function O6(){q4a||(q4a=(new M9).b());return q4a}function N6(){this.ti=0;this.te=null;this.dn=0}N6.prototype=new w9;N6.prototype.constructor=N6;c=N6.prototype;
+c.Vw=function(a,b,d){var e=1<<(31&(b>>>d|0)),f=bD(ei(),this.ti&(-1+e|0));if(0!==(this.ti&e)){e=this.te.n[f];a=e.Vw(a,b,5+d|0);if(e===a)return this;b=la(Xa(L6),[this.te.n.length]);Lv(Af(),this.te,0,b,0,this.te.n.length);b.n[f]=a;return M6(new N6,this.ti,b,this.dn+(a.Da()-e.Da()|0)|0)}d=la(Xa(L6),[1+this.te.n.length|0]);Lv(Af(),this.te,0,d,0,f);d.n[f]=x9(new y9,a,b);Lv(Af(),this.te,f,d,1+f|0,this.te.n.length-f|0);return M6(new N6,this.ti|e,d,1+this.dn|0)};
+c.ta=function(a){for(var b=0;b<this.te.n.length;)this.te.n[b].ta(a),b=1+b|0};c.Da=function(){return this.dn};c.Sa=function(){var a=new q5;c3.prototype.MV.call(a,this.te);return a};
+c.iw=function(a,b,d){var e=1<<(31&(b>>>d|0)),f=bD(ei(),this.ti&(-1+e|0));if(0!==(this.ti&e)){var h=this.te.n[f];a=h.iw(a,b,5+d|0);return h===a?this:null===a?(e^=this.ti,0!==e?(a=la(Xa(L6),[-1+this.te.n.length|0]),Lv(Af(),this.te,0,a,0,f),Lv(Af(),this.te,1+f|0,a,f,-1+(this.te.n.length-f|0)|0),f=this.dn-h.Da()|0,1!==a.n.length||e3(a.n[0])?M6(new N6,e,a,f):a.n[0]):null):1!==this.te.n.length||e3(a)?(e=la(Xa(L6),[this.te.n.length]),Lv(Af(),this.te,0,e,0,this.te.n.length),e.n[f]=a,f=this.dn+(a.Da()-h.Da()|
+0)|0,M6(new N6,this.ti,e,f)):a}return this};c.Xs=function(a,b,d,e,f){for(var h=f,k=0,n=0,r=0;r<this.te.n.length;){var y=this.te.n[r].Xs(a,b,5+d|0,e,h);null!==y&&(e.n[h]=y,h=1+h|0,k=k+y.Da()|0,n|=1<<r);r=1+r|0}if(h===f)return null;if(k===this.dn)return this;if(h!==(1+f|0)||e3(e.n[f])){b=h-f|0;a=la(Xa(L6),[b]);Pa(e,f,a,0,b);if(b===this.te.n.length)n=this.ti;else{Wk();e=0;for(f=this.ti;0!==n;)b=f^f&(-1+f|0),0!==(1&n)&&(e|=b),f&=~b,n=n>>>1|0;n=e}return M6(new N6,n,a,k)}return e.n[f]};
+function M6(a,b,d,e){a.ti=b;a.te=d;a.dn=e;bn(Ne(),bD(ei(),b)===d.n.length);return a}c.vp=function(a,b,d){var e=31&(b>>>d|0),f=1<<e;return-1===this.ti?this.te.n[31&e].vp(a,b,5+d|0):0!==(this.ti&f)?(e=bD(ei(),this.ti&(-1+f|0)),this.te.n[e].vp(a,b,5+d|0)):!1};
+c.Cw=function(a,b){if(a===this)return!0;if(e3(a)&&this.dn<=a.dn){var d=this.ti,e=this.te,f=0,h=a.te;a=a.ti;var k=0;if((d&a)===d){for(;0!==d;){var n=d^d&(-1+d|0),r=a^a&(-1+a|0);if(n===r){if(!e.n[f].Cw(h.n[k],5+b|0))return!1;d&=~n;f=1+f|0}a&=~r;k=1+k|0}return!0}}return!1};function e3(a){return!!(a&&a.$classData&&a.$classData.m.nZ)}
+c.$classData=g({nZ:0},!1,"scala.collection.immutable.HashSet$HashTrieSet",{nZ:1,Ot:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,kd:1,k:1,h:1});function Z9(){}Z9.prototype=new w9;Z9.prototype.constructor=Z9;function r4a(){}r4a.prototype=Z9.prototype;function $9(){}$9.prototype=new k9;$9.prototype.constructor=$9;function s4a(){}c=s4a.prototype=$9.prototype;c.of=function(){return this};
+c.lm=function(){throw(new Bu).c("value of empty map");};c.Qd=function(a){return this.hx(a)};c.z=function(){return!0};c.hc=function(){return this};c.Zj=function(a){return this.mn(a)};c.Ji=function(a){return this.hx(a)};c.wi=function(){return Cu()};c.aE=function(){return Cu()};c.Da=function(){return 0};c.Nk=function(a){return Cc(this,a)};c.bn=function(){return this};c.Vi=function(){throw(new Bu).c("key of empty map");};c.Sa=function(){var a=gv(this);return hv(a)};
+c.mn=function(a){return a$(new b$,this,a.ja(),a.na())};function Cc(a,b){return b.z()?a:b.Ff(a,ub(new vb,function(){return function(a,b){return a.mn(b)}}(a)))}c.Ut=function(a,b){return a$(new b$,this,a,b)};c.vf=function(a){return E8(this,a)};c.hx=function(){return this};c.gc=function(){return C()};function gv(a){for(var b=u();!a.z();){var d=(new w).e(a.Vi(),a.lm()),b=Og(new Pg,d,b);a=a.Ip()}return b}c.Ip=function(){throw(new Bu).c("next of empty map");};c.Li=function(a){return this.mn(a)};c.qf=function(){return"ListMap"};
+function c$(){}c$.prototype=new k9;c$.prototype.constructor=c$;c=c$.prototype;c.b=function(){return this};c.y=function(a){this.su(a)};c.Qd=function(){return this};c.Zh=function(a,b){return se(b)};c.Zj=function(a){return(new d$).e(a.ja(),a.na())};c.Ji=function(){return this};c.Da=function(){return 0};c.Sa=function(){return yB().Sd};c.gc=function(){return C()};c.ab=function(){return!1};c.su=function(a){throw(new Bu).c("key not found: "+a);};c.Li=function(a){return(new d$).e(a.ja(),a.na())};
+c.$classData=g({Ria:0},!1,"scala.collection.immutable.Map$EmptyMap$",{Ria:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1});var t4a=void 0;function hc(){t4a||(t4a=(new c$).b());return t4a}function d$(){this.Jc=this.$b=null}d$.prototype=new k9;d$.prototype.constructor=d$;c=d$.prototype;c.y=function(a){if(Em(Fm(),a,this.$b))return this.Jc;throw(new Bu).c("key not found: "+a);};
+c.Qd=function(a){return this.ul(a)};c.Zh=function(a,b){return Em(Fm(),a,this.$b)?this.Jc:se(b)};c.e=function(a,b){this.$b=a;this.Jc=b;return this};c.Zj=function(a){return this.km(a.ja(),a.na())};c.ta=function(a){a.y((new w).e(this.$b,this.Jc))};c.Ji=function(a){return this.ul(a)};c.Da=function(){return 1};c.Sa=function(){yB();var a=[(new w).e(this.$b,this.Jc)],a=(new J).j(a);return Ye(new Ze,a,0,a.qa.length|0)};
+c.km=function(a,b){return Em(Fm(),a,this.$b)?(new d$).e(this.$b,b):(new e$).Hm(this.$b,this.Jc,a,b)};c.gc=function(a){return Em(Fm(),a,this.$b)?(new H).i(this.Jc):C()};c.ab=function(a){return Em(Fm(),a,this.$b)};c.ul=function(a){return Em(Fm(),a,this.$b)?hc():this};c.Li=function(a){return this.km(a.ja(),a.na())};
+c.$classData=g({Sia:0},!1,"scala.collection.immutable.Map$Map1",{Sia:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1});function e$(){this.zd=this.uc=this.Jc=this.$b=null}e$.prototype=new k9;e$.prototype.constructor=e$;c=e$.prototype;c.y=function(a){if(Em(Fm(),a,this.$b))return this.Jc;if(Em(Fm(),a,this.uc))return this.zd;throw(new Bu).c("key not found: "+a);};c.Qd=function(a){return this.ul(a)};
+c.Zh=function(a,b){return Em(Fm(),a,this.$b)?this.Jc:Em(Fm(),a,this.uc)?this.zd:se(b)};c.Zj=function(a){return this.km(a.ja(),a.na())};c.ta=function(a){a.y((new w).e(this.$b,this.Jc));a.y((new w).e(this.uc,this.zd))};c.Ji=function(a){return this.ul(a)};c.Da=function(){return 2};c.Sa=function(){yB();var a=[(new w).e(this.$b,this.Jc),(new w).e(this.uc,this.zd)],a=(new J).j(a);return Ye(new Ze,a,0,a.qa.length|0)};
+c.km=function(a,b){return Em(Fm(),a,this.$b)?(new e$).Hm(this.$b,b,this.uc,this.zd):Em(Fm(),a,this.uc)?(new e$).Hm(this.$b,this.Jc,this.uc,b):f$(this.$b,this.Jc,this.uc,this.zd,a,b)};c.gc=function(a){return Em(Fm(),a,this.$b)?(new H).i(this.Jc):Em(Fm(),a,this.uc)?(new H).i(this.zd):C()};c.ab=function(a){return Em(Fm(),a,this.$b)||Em(Fm(),a,this.uc)};c.Hm=function(a,b,d,e){this.$b=a;this.Jc=b;this.uc=d;this.zd=e;return this};
+c.ul=function(a){return Em(Fm(),a,this.$b)?(new d$).e(this.uc,this.zd):Em(Fm(),a,this.uc)?(new d$).e(this.$b,this.Jc):this};c.Li=function(a){return this.km(a.ja(),a.na())};c.$classData=g({Tia:0},!1,"scala.collection.immutable.Map$Map2",{Tia:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1});function g$(){this.Df=this.Nd=this.zd=this.uc=this.Jc=this.$b=null}g$.prototype=new k9;
+g$.prototype.constructor=g$;c=g$.prototype;c.y=function(a){if(Em(Fm(),a,this.$b))return this.Jc;if(Em(Fm(),a,this.uc))return this.zd;if(Em(Fm(),a,this.Nd))return this.Df;throw(new Bu).c("key not found: "+a);};c.Qd=function(a){return this.ul(a)};c.Zh=function(a,b){return Em(Fm(),a,this.$b)?this.Jc:Em(Fm(),a,this.uc)?this.zd:Em(Fm(),a,this.Nd)?this.Df:se(b)};c.Zj=function(a){return this.km(a.ja(),a.na())};
+c.ta=function(a){a.y((new w).e(this.$b,this.Jc));a.y((new w).e(this.uc,this.zd));a.y((new w).e(this.Nd,this.Df))};c.Ji=function(a){return this.ul(a)};function f$(a,b,d,e,f,h){var k=new g$;k.$b=a;k.Jc=b;k.uc=d;k.zd=e;k.Nd=f;k.Df=h;return k}c.Da=function(){return 3};c.Sa=function(){yB();var a=[(new w).e(this.$b,this.Jc),(new w).e(this.uc,this.zd),(new w).e(this.Nd,this.Df)],a=(new J).j(a);return Ye(new Ze,a,0,a.qa.length|0)};
+c.km=function(a,b){return Em(Fm(),a,this.$b)?f$(this.$b,b,this.uc,this.zd,this.Nd,this.Df):Em(Fm(),a,this.uc)?f$(this.$b,this.Jc,this.uc,b,this.Nd,this.Df):Em(Fm(),a,this.Nd)?f$(this.$b,this.Jc,this.uc,this.zd,this.Nd,b):h$(this.$b,this.Jc,this.uc,this.zd,this.Nd,this.Df,a,b)};c.gc=function(a){return Em(Fm(),a,this.$b)?(new H).i(this.Jc):Em(Fm(),a,this.uc)?(new H).i(this.zd):Em(Fm(),a,this.Nd)?(new H).i(this.Df):C()};c.ab=function(a){return Em(Fm(),a,this.$b)||Em(Fm(),a,this.uc)||Em(Fm(),a,this.Nd)};
+c.ul=function(a){return Em(Fm(),a,this.$b)?(new e$).Hm(this.uc,this.zd,this.Nd,this.Df):Em(Fm(),a,this.uc)?(new e$).Hm(this.$b,this.Jc,this.Nd,this.Df):Em(Fm(),a,this.Nd)?(new e$).Hm(this.$b,this.Jc,this.uc,this.zd):this};c.Li=function(a){return this.km(a.ja(),a.na())};
+c.$classData=g({Uia:0},!1,"scala.collection.immutable.Map$Map3",{Uia:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1});function i$(){this.Jk=this.ci=this.Df=this.Nd=this.zd=this.uc=this.Jc=this.$b=null}i$.prototype=new k9;i$.prototype.constructor=i$;c=i$.prototype;
+c.y=function(a){if(Em(Fm(),a,this.$b))return this.Jc;if(Em(Fm(),a,this.uc))return this.zd;if(Em(Fm(),a,this.Nd))return this.Df;if(Em(Fm(),a,this.ci))return this.Jk;throw(new Bu).c("key not found: "+a);};c.Qd=function(a){return this.ul(a)};c.Zh=function(a,b){return Em(Fm(),a,this.$b)?this.Jc:Em(Fm(),a,this.uc)?this.zd:Em(Fm(),a,this.Nd)?this.Df:Em(Fm(),a,this.ci)?this.Jk:se(b)};c.Zj=function(a){return this.km(a.ja(),a.na())};
+c.ta=function(a){a.y((new w).e(this.$b,this.Jc));a.y((new w).e(this.uc,this.zd));a.y((new w).e(this.Nd,this.Df));a.y((new w).e(this.ci,this.Jk))};c.Ji=function(a){return this.ul(a)};c.Da=function(){return 4};c.Sa=function(){yB();var a=[(new w).e(this.$b,this.Jc),(new w).e(this.uc,this.zd),(new w).e(this.Nd,this.Df),(new w).e(this.ci,this.Jk)],a=(new J).j(a);return Ye(new Ze,a,0,a.qa.length|0)};
+function h$(a,b,d,e,f,h,k,n){var r=new i$;r.$b=a;r.Jc=b;r.uc=d;r.zd=e;r.Nd=f;r.Df=h;r.ci=k;r.Jk=n;return r}
+c.km=function(a,b){return Em(Fm(),a,this.$b)?h$(this.$b,b,this.uc,this.zd,this.Nd,this.Df,this.ci,this.Jk):Em(Fm(),a,this.uc)?h$(this.$b,this.Jc,this.uc,b,this.Nd,this.Df,this.ci,this.Jk):Em(Fm(),a,this.Nd)?h$(this.$b,this.Jc,this.uc,this.zd,this.Nd,b,this.ci,this.Jk):Em(Fm(),a,this.ci)?h$(this.$b,this.Jc,this.uc,this.zd,this.Nd,this.Df,this.ci,b):j$(j$(j$(j$(j$((new k$).b(),this.$b,this.Jc),this.uc,this.zd),this.Nd,this.Df),this.ci,this.Jk),a,b)};
+c.gc=function(a){return Em(Fm(),a,this.$b)?(new H).i(this.Jc):Em(Fm(),a,this.uc)?(new H).i(this.zd):Em(Fm(),a,this.Nd)?(new H).i(this.Df):Em(Fm(),a,this.ci)?(new H).i(this.Jk):C()};c.ab=function(a){return Em(Fm(),a,this.$b)||Em(Fm(),a,this.uc)||Em(Fm(),a,this.Nd)||Em(Fm(),a,this.ci)};
+c.ul=function(a){return Em(Fm(),a,this.$b)?f$(this.uc,this.zd,this.Nd,this.Df,this.ci,this.Jk):Em(Fm(),a,this.uc)?f$(this.$b,this.Jc,this.Nd,this.Df,this.ci,this.Jk):Em(Fm(),a,this.Nd)?f$(this.$b,this.Jc,this.uc,this.zd,this.ci,this.Jk):Em(Fm(),a,this.ci)?f$(this.$b,this.Jc,this.uc,this.zd,this.Nd,this.Df):this};c.Li=function(a){return this.km(a.ja(),a.na())};
+c.$classData=g({Via:0},!1,"scala.collection.immutable.Map$Map4",{Via:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1});function pX(){b9.call(this)}pX.prototype=new f4a;pX.prototype.constructor=pX;c=pX.prototype;c.jb=function(){return this};c.Fy=function(a,b){b9.prototype.$E.call(this,a,b);return this};c.of=function(){return this};c.Qd=function(a){return e9(this,a)};c.ne=function(){return this};
+c.hc=function(){return this};c.Zj=function(a){return d9(this,a)};c.ad=function(){return Ok()};c.Ji=function(a){return e9(this,a)};c.wi=function(){return hc()};c.Nk=function(a){return B3a(this,a)};c.bn=function(){return this};c.vf=function(a){return E8(this,a)};c.De=function(){return this};c.Li=function(a){return d9(this,a)};
+c.$classData=g({Wia:0},!1,"scala.collection.immutable.MapLike$$anon$1",{Wia:1,Asa:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Hha:1,ria:1,Rj:1,rd:1,wd:1,vd:1,Dk:1});function Nu(){c9.call(this)}Nu.prototype=new g4a;Nu.prototype.constructor=Nu;c=Nu.prototype;c.jb=function(){return this};c.Fy=function(a,b){c9.prototype.$E.call(this,a,b);return this};c.of=function(){return this};c.Qd=function(a){return e9(this,a)};
+c.ne=function(){return this};c.hc=function(){return this};c.Zj=function(a){return d9(this,a)};c.ad=function(){return Ok()};c.Ji=function(a){return e9(this,a)};c.wi=function(){return hc()};c.Nk=function(a){return B3a(this,a)};c.bn=function(){return this};c.vf=function(a){return E8(this,a)};c.De=function(){return this};c.Li=function(a){return d9(this,a)};
+c.$classData=g({Xia:0},!1,"scala.collection.immutable.MapLike$$anon$2",{Xia:1,Bsa:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Hha:1,ria:1,Rj:1,rd:1,wd:1,vd:1,Dk:1});function k$(){}k$.prototype=new k9;k$.prototype.constructor=k$;function l$(){}c=l$.prototype=k$.prototype;c.jb=function(){return this};c.Cn=function(a){return this.wE(fC(V(),a))};c.of=function(){return this};c.b=function(){return this};
+c.Qd=function(a){return u4a(this,a)};c.hc=function(){return this};c.Tt=function(a,b,d,e,f){return m$(a,b,e,f)};c.Zs=function(){return C()};c.Zj=function(a){return v4a(this,a)};c.ta=function(){};function v4a(a,b){return a.Tt(b.ja(),a.Cn(b.ja()),0,b.na(),b,null)}function w4a(a,b){q6();var d=6+a.Da()|0,d=la(Xa(m6),[224>d?d:224]);q6();a=a.Ws(b,!0,0,d,0);return null===a?p6():a}function j$(a,b,d){return a.Tt(b,a.Cn(b),0,d,null,null)}c.Ji=function(a){return u4a(this,a)};c.wi=function(){q6();return p6()};
+c.hw=function(){return this};c.Ws=function(){return null};function u4a(a,b){return a.hw(b,a.Cn(b),0)}c.hg=function(a){q6();var b=6+this.Da()|0,b=la(Xa(m6),[224>b?b:224]);q6();a=this.Ws(a,!1,0,b,0);return null===a?p6():a};c.aE=function(){q6();return p6()};c.Da=function(){return 0};c.bn=function(){return this};c.Sa=function(){return yB().Sd};c.SG=function(){return u4a(this,this.Y().ja())};c.vf=function(a){return w4a(this,a)};c.wE=function(a){a=a+~(a<<9)|0;a^=a>>>14|0;a=a+(a<<4)|0;return a^(a>>>10|0)};
+c.gc=function(a){return this.Zs(a,this.Cn(a),0)};c.Js=function(){return!1};c.ab=function(a){return this.Js(a,this.Cn(a),0)};c.$=function(){return this.SG()};c.oV=function(a){return w4a(this,a)};c.Li=function(a){return v4a(this,a)};var m6=g({rw:0},!1,"scala.collection.immutable.HashMap",{rw:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1,kd:1});k$.prototype.$classData=m6;
+function y9(){this.ig=null;this.Hd=0}y9.prototype=new r4a;y9.prototype.constructor=y9;c=y9.prototype;c.Vw=function(a,b,d){if(b===this.Hd&&Em(Fm(),a,this.ig))return this;if(b!==this.Hd)return RFa(Wk(),this.Hd,this,b,x9(new y9,a,b),d);d=Y1a();return n$(new o$,b,m9(new n9,d,this.ig).as(a))};c.ta=function(a){a.y(this.ig)};function x9(a,b,d){a.ig=b;a.Hd=d;return a}c.Da=function(){return 1};c.Sa=function(){yB();var a=(new J).j([this.ig]);return Ye(new Ze,a,0,a.qa.length|0)};
+c.iw=function(a,b){return b===this.Hd&&Em(Fm(),a,this.ig)?null:this};c.Xs=function(a,b){return b!==!!a.y(this.ig)?this:null};c.vp=function(a,b){return b===this.Hd&&Em(Fm(),a,this.ig)};c.Cw=function(a,b){return a.vp(this.ig,this.Hd,b)};c.$classData=g({mZ:0},!1,"scala.collection.immutable.HashSet$HashSet1",{mZ:1,Dia:1,Ot:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,kd:1,k:1,h:1});
+function o$(){this.Hd=0;this.cl=null}o$.prototype=new r4a;o$.prototype.constructor=o$;c=o$.prototype;c.Vw=function(a,b,d){return b===this.Hd?n$(new o$,b,this.cl.as(a)):RFa(Wk(),this.Hd,this,b,x9(new y9,a,b),d)};c.ta=function(a){var b=o9(this.cl);pT(hv(b),a)};c.Da=function(){return this.cl.Da()};c.Sa=function(){var a=o9(this.cl);return hv(a)};
+c.iw=function(a,b){if(b===this.Hd){a=this.cl.ix(a);var d=a.Da();switch(d){case 0:return null;case 1:return a=o9(a),x9(new y9,hv(a).ka(),b);default:return d===this.cl.Da()?this:n$(new o$,b,a)}}else return this};function n$(a,b,d){a.Hd=b;a.cl=d;return a}c.Xs=function(a,b){a=b?j5(this.cl,a,!0):j5(this.cl,a,!1);b=a.Da();switch(b){case 0:return null;case 1:return a=o9(a),x9(new y9,hv(a).ka(),this.Hd);default:return b===this.cl.Da()?this:n$(new o$,this.Hd,a)}};c.vp=function(a,b){return b===this.Hd&&this.cl.ab(a)};
+c.Cw=function(a,b){for(var d=o9(this.cl),d=hv(d),e=!0;e&&d.ra();)e=d.ka(),e=a.vp(e,this.Hd,b);return e};c.$classData=g({Bia:0},!1,"scala.collection.immutable.HashSet$HashSetCollision1",{Bia:1,Dia:1,Ot:1,dj:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,ll:1,rd:1,wd:1,vd:1,kd:1,k:1,h:1});function p$(){}p$.prototype=new s4a;p$.prototype.constructor=p$;p$.prototype.b=function(){return this};
+p$.prototype.$classData=g({Kia:0},!1,"scala.collection.immutable.ListMap$EmptyListMap$",{Kia:1,Iia:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1});var x4a=void 0;function Cu(){x4a||(x4a=(new p$).b());return x4a}function b$(){this.gA=this.Eo=this.ig=null}b$.prototype=new s4a;b$.prototype.constructor=b$;
+function q$(a,b){var d=u();for(;;){if(b.z())return Mm(d);if(Em(Fm(),a,b.Vi())){b=b.Ip();for(a=d;!a.z();)d=a.Y(),b=a$(new b$,b,d.Vi(),d.lm()),a=a.$();return b}var e=b.Ip(),d=Og(new Pg,b,d);b=e}}c=b$.prototype;c.y=function(a){a:{var b=this;for(;;){if(b.z())throw(new Bu).c("key not found: "+a);if(Em(Fm(),a,b.Vi())){a=b.lm();break a}b=b.Ip()}}return a};c.Qd=function(a){return q$(a,this)};c.lm=function(){return this.Eo};c.z=function(){return!1};c.Zj=function(a){return this.mn(a)};c.Xe=function(){return this.gA};
+c.Ji=function(a){return q$(a,this)};c.Da=function(){a:{var a=this,b=0;for(;;){if(a.z())break a;a=a.Ip();b=1+b|0}}return b};c.Vi=function(){return this.ig};c.mn=function(a){var b=q$(a.ja(),this);return a$(new b$,b,a.ja(),a.na())};c.Ut=function(a,b){var d=q$(a,this);return a$(new b$,d,a,b)};c.hx=function(a){return q$(a,this)};c.gc=function(a){a:{var b=this;for(;;){if(b.z()){a=C();break a}if(Em(Fm(),a,b.Vi())){a=(new H).i(b.lm());break a}b=b.Ip()}}return a};c.nd=function(){return(new w).e(this.ig,this.Eo)};
+function a$(a,b,d,e){a.ig=d;a.Eo=e;if(null===b)throw pg(qg(),null);a.gA=b;return a}c.ab=function(a){a:{var b=this;for(;;){if(b.z()){a=!1;break a}if(Em(Fm(),a,b.Vi())){a=!0;break a}b=b.Ip()}}return a};c.Ip=function(){return this.gA};c.Li=function(a){return this.mn(a)};
+c.$classData=g({Lia:0},!1,"scala.collection.immutable.ListMap$Node",{Lia:1,Iia:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1});function H_(){this.yd=this.Cm=this.oe=0;this.ai=!1;this.yz=this.ej=0}H_.prototype=new T8;H_.prototype.constructor=H_;function y4a(){}y4a.prototype=H_.prototype;
+function z4a(a,b){if(0>=b)return a;if(0<=a.ej)return b=a.ej-b|0,0>=b||a.ai?(b=a.oe,a=(new H_).P(b,b,a.yd)):a=b>=a.ej&&0<=a.ej?a:(new N).P(a.oe,a.oe+ea(a.yd,-1+b|0)|0,a.yd),a;b=r$(a)-ea(a.yd,b)|0;return 0<a.yd&&b<a.oe||0>a.yd&&b>a.oe?(b=a.oe,(new H_).P(b,b,a.yd)):(new N).P(a.oe,b,a.yd)}c=H_.prototype;c.jb=function(){return this};c.Pn=function(){return!1};c.Y=function(){return s$(this)};c.X=function(a){return this.Ia(a)};c.li=function(){return this};c.y=function(a){return this.Ia(a|0)};c.z=function(){return this.ai};
+c.ne=function(){return this};c.hc=function(){return this};c.o=function(a){if(a&&a.$classData&&a.$classData.m.tG){if(this.ai)return a.ai;if(nd(a)&&this.oe===a.oe){var b=r$(this);return b===r$(a)&&(this.oe===b||this.yd===a.yd)}return!1}return H2(this,a)};c.Ia=function(a){0>this.ej&&jn(kn(),this.oe,this.Cm,this.yd,this.Pn());if(0>a||a>=this.ej)throw(new O).c(""+a);return this.oe+ea(this.yd,a)|0};
+c.ok=function(a){var b;if(this.ai)a=this.oe,b=(new Xb).ha(a,a>>31);else{b=this.oe;for(var d=r$(this);b!==d&&a.Ja(b);)b=b+this.yd|0;if(b===d&&a.Ja(b)){a=b;b=a>>31;var e=this.yd,d=e>>31,e=a+e|0;b=(new Xb).ha(e,(-2147483648^e)<(-2147483648^a)?1+(b+d|0)|0:b+d|0)}else a=b,b=(new Xb).ha(a,a>>31)}a=b.ia;b=b.oa;d=this.oe;a===d&&b===d>>31?a=this:(a=a-this.yd|0,a===r$(this)?(a=r$(this),a=(new H_).P(a,a,this.yd)):a=(new N).P(a+this.yd|0,r$(this),this.yd));return a};
+c.P=function(a,b,d){this.oe=a;this.Cm=b;this.yd=d;this.ai=a>b&&0<d||a<b&&0>d||a===b&&!this.Pn();if(0===d)throw(new Re).c("step cannot be 0.");if(this.ai)a=0;else{var e;e=A4a(this);a=e.ia;var f=e.oa,h=this.yd,k=h>>31;e=Sa();a=nf(e,a,f,h,k);e=e.Sb;h=this.Pn()||!B4a(this)?1:0;f=h>>31;h=a+h|0;e=(new Xb).ha(h,(-2147483648^h)<(-2147483648^a)?1+(e+f|0)|0:e+f|0);a=e.ia;e=e.oa;a=(0===e?-1<(-2147483648^a):0<e)?-1:a}this.ej=a;switch(d){case 1:b=this.Pn()?b:-1+b|0;break;case -1:b=this.Pn()?b:1+b|0;break;default:e=
+A4a(this),a=e.ia,e=e.oa,f=d>>31,a=Vf(Sa(),a,e,d,f),b=0!==a?b-a|0:this.Pn()?b:b-d|0}this.yz=b;return this};c.Xe=function(){if(this.ai){var a=u();h5(a)}return z4a(this,1)};c.l=function(){var a=this.Pn()?"to":"until",b=1===this.yd?"":" by "+this.yd;return(this.ai?"empty ":B4a(this)?"":"inexact ")+"Range "+this.oe+" "+a+" "+this.Cm+b};c.ad=function(){return KE()};c.ta=function(a){if(!this.ai)for(var b=this.oe;;){a.y(b);if(b===this.yz)break;b=b+this.yd|0}};c.IU=function(a,b,d){return(new H_).P(a,b,d)};
+c.Qf=function(){return this.ai?this:(new N).P(r$(this),this.oe,-this.yd|0)};c.Da=function(){return this.sa()};c.ae=function(){return c8(this)};c.Sa=function(){return Ye(new Ze,this,0,this.sa())};c.sa=function(){return 0>this.ej?jn(kn(),this.oe,this.Cm,this.yd,this.Pn()):this.ej};c.Jh=function(){return this};c.yf=function(){return this.sa()};function C4a(a,b){return 0>=b||a.ai?a:b>=a.ej&&0<=a.ej?(b=a.Cm,(new H_).P(b,b,a.yd)):a.IU(a.oe+ea(a.yd,b)|0,a.Cm,a.yd)}
+function B4a(a){var b=A4a(a),d=b.ia,b=b.oa,e=a.yd,f=e>>31;a=Sa();d=Vf(a,d,b,e,f);b=a.Sb;return 0===d&&0===b}c.nd=function(){return r$(this)};c.de=function(a){return C4a(this,a)};c.ie=function(){return this};c.$=function(){this.ai&&D4a(u());return C4a(this,1)};c.Nc=function(){return this};function r$(a){return a.ai?(a=u(),Mm(a)|0):a.yz}c.Za=function(a){return I2(this,a|0)};c.r=function(){return iT(S(),this)};c.og=function(a){return E4a(this,a)};c.ce=function(a){return z4a(this,a)};
+c.Gk=function(a){var b;if(0>=a)b=this.oe,b=(new H_).P(b,b,this.yd);else if(0<=this.ej)b=C4a(this,this.ej-a|0);else{b=r$(this);var d=b>>31,e=this.yd,f=e>>31;a=-1+a|0;var h=a>>31,k=65535&e,n=e>>>16|0,r=65535&a,y=a>>>16|0,E=ea(k,r),r=ea(n,r),Q=ea(k,y),k=E+((r+Q|0)<<16)|0,E=(E>>>16|0)+Q|0,f=(((ea(e,h)+ea(f,a)|0)+ea(n,y)|0)+(E>>>16|0)|0)+(((65535&E)+r|0)>>>16|0)|0,e=b-k|0,d=(-2147483648^e)>(-2147483648^b)?-1+(d-f|0)|0:d-f|0;0<this.yd?(f=this.oe,a=f>>31,f=d===a?(-2147483648^e)<(-2147483648^f):d<a):f=!1;
+f?d=!0:0>this.yd?(f=this.oe,a=f>>31,d=d===a?(-2147483648^e)>(-2147483648^f):d>a):d=!1;b=d?this:(new N).P(e,b,this.yd)}return b};
+function E4a(a,b){if(b===Iv()){if(a.ai)return 0;if(1===a.ej)return s$(a);b=a.ej;var d=b>>31,e=s$(a),f=e>>31;a=r$(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,n=65535&a,h=a>>>16|0,r=ea(k,n),n=ea(f,n),y=ea(k,h),k=r+((n+y|0)<<16)|0,r=(r>>>16|0)+y|0;b=(((ea(b,e)+ea(d,a)|0)+ea(f,h)|0)+(r>>>16|0)|0)+(((65535&r)+n|0)>>>16|0)|0;return nf(Sa(),k,b,2,0)}if(a.ai)return b.fn(b.Xg(0));d=b.Xg(0);for(e=s$(a);;){d=b.Jj(d,e);if(e===a.yz)return b.fn(d);e=e+a.yd|
+0}}function s$(a){return a.ai?u().By():a.oe}function A4a(a){var b=a.Cm,d=b>>31,e=a.oe;a=e>>31;e=b-e|0;return(new Xb).ha(e,(-2147483648^e)>(-2147483648^b)?-1+(d-a|0)|0:d-a|0)}c.$classData=g({tG:0},!1,"scala.collection.immutable.Range",{tG:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,rG:1,$p:1,rd:1,wd:1,vd:1,xg:1,Pd:1,kd:1,k:1,h:1});function t$(){}t$.prototype=new T8;t$.prototype.constructor=t$;function F4a(){}
+c=F4a.prototype=t$.prototype;c.jb=function(){return this};function G4a(a){for(var b=qT(),b=(new jl).i(b),d=a;!d.z();){sg();var e=Uma((new KC).nc(I(function(a,b){return function(){return b.Ca}}(a,b))),d.Y());e.$();b.Ca=e;d=d.$()}return b.Ca}c.X=function(a){return mi(this,a)};c.li=function(){return this};c.vb=function(a){return ng(this,a)};c.y=function(a){return mi(this,a|0)};c.Ze=function(a){return VD(this,a)};c.Ys=function(a){return zha(this,a)};c.Le=function(a){return w8(this,a)};c.ne=function(){return this};
+c.hc=function(){return this};c.o=function(a){return this===a||H2(this,a)};c.zj=function(a,b){if(u5(b.gf(this))){if(this.z())a=qT();else{b=(new jl).i(this);for(var d=a.y(b.Ca.Y()).Oc();!b.Ca.z()&&d.z();)b.Ca=b.Ca.$(),b.Ca.z()||(d=a.y(b.Ca.Y()).Oc());a=b.Ca.z()?(sg(),qT()):Wma(d,I(function(a,b,d){return function(){return d.Ca.$().zj(b,(sg(),(new tg).b()))}}(this,a,b)))}return a}return g5(this,a,b)};function HT(a,b,d){for(;!a.z()&&!!b.y(a.Y())===d;)a=a.$();return nd(a)?N2a(sg(),a,b,d):qT()}
+c.Qu=function(a){return fV(this,a)};c.ok=function(a){for(var b=this;!b.z()&&a.y(b.Y());)b=b.$();return b};c.Ab=function(a){return this.Qc("",a,"")};c.Qc=function(a,b,d){var e=this,f=this;for(e.z()||(e=e.$());f!==e&&!e.z();){e=e.$();if(e.z())break;e=e.$();if(e===f)break;f=f.$()}return ec(this,a,b,d)};c.ee=function(a){return x8(this,a)};c.Fo=function(a){return $ra(new GT,I(function(a){return function(){return a}}(this)),a)};c.Xe=function(){return H4a(this)};c.ad=function(){return sg()};
+c.l=function(){return ec(this,"Stream(",", ",")")};c.ta=function(a){var b=this;a:for(;;){if(!b.z()){a.y(b.Y());b=b.$();continue a}break}};c.Ib=function(a,b){var d=this;for(;;){if(d.z())return a;var e=d.$();a=sb(b,a,d.Y());d=e}};c.Si=function(a,b){return s3a(this,a,b)};function I4a(a,b,d,e){for(;;){if(e.z())return sg(),qT();if(b.z())b=AA(d),d=u();else{var f=b.Y();return LC(new MC,f,I(function(a,b,d,e){return function(){var f=b.$(),E=e.Y();return I4a(a,f,Og(new Pg,E,d),e.$())}}(a,b,d,e)))}}}
+c.mf=function(a,b){return z8(this,a,b)};function J4a(a,b,d){for(;;){if(d.z())return d;var e=d.Y();if(b.ab(e))d=d.$();else return e=d.Y(),LC(new MC,e,I(function(a,b,d){return function(){return J4a(a,b.Sg(d.Y()),d.$())}}(a,b,d)))}}c.Qf=function(){return G4a(this)};c.Jl=function(a,b){return HT(this,a,b)};c.Oi=function(){return J4a(this,G(Yk(),u()),this)};c.Tc=function(a,b){return u5(b.gf(this))?LC(new MC,a,I(function(a){return function(){return a}}(this))):Ww(this,a,b)};c.Sa=function(){return nya(this)};
+c.rk=function(a){return A8(this,a)};c.sa=function(){for(var a=0,b=this;!b.z();)a=1+a|0,b=b.$();return a};c.$c=function(a,b){return u5(b.gf(this))?(this.z()?a=a.Oc():(b=this.Y(),a=LC(new MC,b,I(function(a,b){return function(){return a.$().$c(b,(sg(),(new tg).b()))}}(this,a)))),a):Gt(this,a,b)};c.Xj=function(a){var b=sg();return this.Te(M2a(b,0,1),a)};c.Zf=function(){return this.Qc("","","")};c.Jh=function(){return this};
+c.$i=function(a){var b=HT(this,m(new p,function(a,b){return function(a){return!!b.y(a)}}(this,a)),!1);return(new w).e(b,HT(this,m(new p,function(a,b){return function(a){return!!b.y(a)}}(this,a)),!0))};c.Hw=function(a){return K4a(this,a)};c.Oc=function(){return this};
+function zha(a,b){for(var d=(new jl).i(a);;)if(nd(d.Ca)){var e=b.y(d.Ca.Y());if(e.z())d.Ca=d.Ca.$();else return e=e.Oc(),sg(),Vma((new KC).nc(I(function(a,b,d){return function(){return zha(d.Ca.$(),b)}}(a,b,d))),e)}else break;sg();return qT()}c.nd=function(){return Mm(this)};c.de=function(a){return fV(this,a)};function fV(a,b){for(;;){if(0>=b||a.z())return a;a=a.$();b=-1+b|0}}c.ie=function(){return this};c.ab=function(a){return B8(this,a)};
+c.cg=function(a,b,d,e){zr(a,b);if(!this.z()){Ar(a,this.Y());b=this;if(b.xo()){var f=this.$();if(f.z())return zr(a,e),a;if(b!==f&&(b=f,f.xo()))for(f=f.$();b!==f&&f.xo();)Ar(zr(a,d),b.Y()),b=b.$(),f=f.$(),f.xo()&&(f=f.$());if(f.xo()){for(var h=this,k=0;h!==f;)h=h.$(),f=f.$(),k=1+k|0;b===f&&0<k&&(Ar(zr(a,d),b.Y()),b=b.$());for(;b!==f;)Ar(zr(a,d),b.Y()),b=b.$()}else{for(;b!==f;)Ar(zr(a,d),b.Y()),b=b.$();nd(b)&&Ar(zr(a,d),b.Y())}}b.z()||(b.xo()?zr(zr(a,d),"..."):zr(zr(a,d),"?"))}zr(a,e);return a};
+c.Nc=function(){return this};c.Za=function(a){return C8(this,a|0)};c.Fp=function(a){return C8(this,a)};c.r=function(){return iT(S(),this)};function H4a(a){if(a.z())return h5(a);if(a.$().z())return qT();var b=a.Y();return LC(new MC,b,I(function(a){return function(){return H4a(a.$())}}(a)))}c.ya=function(a,b){return u5(b.gf(this))?(this.z()?a=qT():(b=a.y(this.Y()),a=LC(new MC,b,I(function(a,b){return function(){return a.$().ya(b,(sg(),(new tg).b()))}}(this,a)))),a):kr(this,a,b)};
+c.Gk=function(a){var b=this;for(a=fV(this,a);!a.z();)b=b.$(),a=a.$();return b};c.ce=function(a){if(0>=a)a=this;else{var b=K4a(this,a),d=x().s;a=I4a(this,K(b,d),u(),fV(this,a))}return a};function K4a(a,b){if(0>=b||a.z())return sg(),qT();if(1===b)return b=a.Y(),LC(new MC,b,I(function(){return function(){sg();return qT()}}(a)));var d=a.Y();return LC(new MC,d,I(function(a,b){return function(){return K4a(a.$(),-1+b|0)}}(a,b)))}
+c.lc=function(a,b){if(u5(b.gf(this))){for(var d=this,e=(new jl).i(null),f=a.Wm(m(new p,function(a,b){return function(a){b.Ca=a}}(this,e)));;)if(nd(d)&&!f.y(d.Y()))d=d.$();else break;return d.z()?qT():O2a(sg(),e.Ca,d,a,b)}return k5(this,a,b)};c.zk=function(a){if(this.z())throw(new Sk).c("empty.reduceLeft");for(var b=this.Y(),d=this.$();!d.z();)b=sb(a,b,d.Y()),d=d.$();return b};
+function Wma(a,b){if(a.z())return se(b).Oc();var d=a.Y();return LC(new MC,d,I(function(a,b){return function(){return Wma(a.$(),b)}}(a,b)))}c.qf=function(){return"Stream"};c.Te=function(a,b){return u5(b.gf(this))?(this.z()||a.z()?a=qT():(b=(new w).e(this.Y(),a.Y()),a=LC(new MC,b,I(function(a,b){return function(){return a.$().Te(b.$(),(sg(),(new tg).b()))}}(this,a)))),a):qN(this,a,b)};function L4a(a,b){if(b>=a.Zc)throw(new O).c(""+b);return a.qa.n[b]}
+function M4a(a,b){var d=a.qa.n.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(Xa(Va),[b]);Pa(a.qa,0,b,0,a.Zc);a.qa=b}}function u$(){}u$.prototype=new l$;u$.prototype.constructor=u$;c=u$.prototype;c.b=function(){return this};c.Y=function(){throw(new Bu).c("Empty Map");};
+c.SG=function(){throw(new Bu).c("Empty Map");};c.$=function(){return this.SG()};c.$classData=g({via:0},!1,"scala.collection.immutable.HashMap$EmptyHashMap$",{via:1,rw:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1,kd:1});var N4a=void 0;function p6(){N4a||(N4a=(new u$).b());return N4a}function v$(){this.ig=null;this.Hd=0;this.Oy=this.Eo=null}v$.prototype=new l$;
+v$.prototype.constructor=v$;function p5(a){null===a.Oy&&(a.Oy=(new w).e(a.ig,a.Eo));return a.Oy}function m$(a,b,d,e){var f=new v$;f.ig=a;f.Hd=b;f.Eo=d;f.Oy=e;return f}c=v$.prototype;c.Tt=function(a,b,d,e,f,h){if(b===this.Hd&&Em(Fm(),a,this.ig)){if(null===h)return this.Eo===e?this:m$(a,b,e,f);a=h.zD(p5(this),null!==f?f:(new w).e(a,e));return m$(a.ja(),b,a.na(),a)}if(b!==this.Hd)return a=m$(a,b,e,f),AFa(q6(),this.Hd,this,b,a,d,2);d=Cu();return w$(new x$,b,a$(new b$,d,this.ig,this.Eo).Ut(a,e))};
+c.Zs=function(a,b){return b===this.Hd&&Em(Fm(),a,this.ig)?(new H).i(this.Eo):C()};c.ta=function(a){a.y(p5(this))};c.hw=function(a,b){return b===this.Hd&&Em(Fm(),a,this.ig)?(q6(),p6()):this};c.Ws=function(a,b){return b!==!!a.y(p5(this))?this:null};c.Da=function(){return 1};c.Sa=function(){yB();var a=[p5(this)],a=(new J).j(a);return Ye(new Ze,a,0,a.qa.length|0)};c.Js=function(a,b){return b===this.Hd&&Em(Fm(),a,this.ig)};
+c.$classData=g({kZ:0},!1,"scala.collection.immutable.HashMap$HashMap1",{kZ:1,rw:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1,kd:1});function x$(){this.Hd=0;this.Bi=null}x$.prototype=new l$;x$.prototype.constructor=x$;c=x$.prototype;
+c.Tt=function(a,b,d,e,f,h){if(b===this.Hd)return null!==h&&this.Bi.ab(a)?w$(new x$,b,this.Bi.mn(h.zD((new w).e(a,this.Bi.y(a)),f))):w$(new x$,b,this.Bi.Ut(a,e));a=m$(a,b,e,f);return AFa(q6(),this.Hd,this,b,a,d,1+this.Bi.Da()|0)};c.Zs=function(a,b){return b===this.Hd?this.Bi.gc(a):C()};c.ta=function(a){var b=gv(this.Bi);pT(hv(b),a)};
+c.hw=function(a,b){if(b===this.Hd){a=this.Bi.hx(a);var d=a.Da();switch(d){case 0:return q6(),p6();case 1:return a=gv(a),a=hv(a).ka(),m$(a.ja(),b,a.na(),a);default:return d===this.Bi.Da()?this:w$(new x$,b,a)}}else return this};c.Ws=function(a,b){a=b?E8(this.Bi,a):j5(this.Bi,a,!1);b=a.Da();switch(b){case 0:return null;case 1:a=gv(a);a=hv(a).ka();if(null===a)throw(new q).i(a);return m$(a.ja(),this.Hd,a.na(),a);default:return b===this.Bi.Da()?this:w$(new x$,this.Hd,a)}};
+c.Sa=function(){var a=gv(this.Bi);return hv(a)};c.Da=function(){return this.Bi.Da()};function w$(a,b,d){a.Hd=b;a.Bi=d;return a}c.Js=function(a,b){return b===this.Hd&&this.Bi.ab(a)};c.$classData=g({wia:0},!1,"scala.collection.immutable.HashMap$HashMapCollision1",{wia:1,rw:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1,kd:1});function o6(){this.Th=0;this.ue=null;this.Zc=0}
+o6.prototype=new l$;o6.prototype.constructor=o6;c=o6.prototype;
+c.Tt=function(a,b,d,e,f,h){var k=1<<(31&(b>>>d|0)),n=bD(ei(),this.Th&(-1+k|0));if(0!==(this.Th&k)){k=this.ue.n[n];a=k.Tt(a,b,5+d|0,e,f,h);if(a===k)return this;b=la(Xa(m6),[this.ue.n.length]);Lv(Af(),this.ue,0,b,0,this.ue.n.length);b.n[n]=a;return n6(new o6,this.Th,b,this.Zc+(a.Da()-k.Da()|0)|0)}d=la(Xa(m6),[1+this.ue.n.length|0]);Lv(Af(),this.ue,0,d,0,n);d.n[n]=m$(a,b,e,f);Lv(Af(),this.ue,n,d,1+n|0,this.ue.n.length-n|0);return n6(new o6,this.Th|k,d,1+this.Zc|0)};
+c.Zs=function(a,b,d){var e=31&(b>>>d|0);if(-1===this.Th)return this.ue.n[e].Zs(a,b,5+d|0);e=1<<e;return 0!==(this.Th&e)?(e=bD(ei(),this.Th&(-1+e|0)),this.ue.n[e].Zs(a,b,5+d|0)):C()};c.ta=function(a){for(var b=0;b<this.ue.n.length;)this.ue.n[b].ta(a),b=1+b|0};
+c.hw=function(a,b,d){var e=1<<(31&(b>>>d|0)),f=bD(ei(),this.Th&(-1+e|0));if(0!==(this.Th&e)){var h=this.ue.n[f];a=h.hw(a,b,5+d|0);if(a===h)return this;if(0===a.Da()){e^=this.Th;if(0!==e)return a=la(Xa(m6),[-1+this.ue.n.length|0]),Lv(Af(),this.ue,0,a,0,f),Lv(Af(),this.ue,1+f|0,a,f,-1+(this.ue.n.length-f|0)|0),f=this.Zc-h.Da()|0,1!==a.n.length||d3(a.n[0])?n6(new o6,e,a,f):a.n[0];q6();return p6()}return 1!==this.ue.n.length||d3(a)?(e=la(Xa(m6),[this.ue.n.length]),Lv(Af(),this.ue,0,e,0,this.ue.n.length),
+e.n[f]=a,f=this.Zc+(a.Da()-h.Da()|0)|0,n6(new o6,this.Th,e,f)):a}return this};
+c.Ws=function(a,b,d,e,f){for(var h=f,k=0,n=0,r=0;r<this.ue.n.length;){var y=this.ue.n[r].Ws(a,b,5+d|0,e,h);null!==y&&(e.n[h]=y,h=1+h|0,k=k+y.Da()|0,n|=1<<r);r=1+r|0}if(h===f)return null;if(k===this.Zc)return this;if(h!==(1+f|0)||d3(e.n[f])){b=h-f|0;a=la(Xa(m6),[b]);Pa(e,f,a,0,b);if(b===this.ue.n.length)n=this.Th;else{q6();e=0;for(f=this.Th;0!==n;)b=f^f&(-1+f|0),0!==(1&n)&&(e|=b),f&=~b,n=n>>>1|0;n=e}return n6(new o6,n,a,k)}return e.n[f]};
+c.Sa=function(){var a=new o5;c3.prototype.MV.call(a,this.ue);return a};c.Da=function(){return this.Zc};function n6(a,b,d,e){a.Th=b;a.ue=d;a.Zc=e;return a}c.Js=function(a,b,d){var e=31&(b>>>d|0);if(-1===this.Th)return this.ue.n[e].Js(a,b,5+d|0);e=1<<e;return 0!==(this.Th&e)?(e=bD(ei(),this.Th&(-1+e|0)),this.ue.n[e].Js(a,b,5+d|0)):!1};function d3(a){return!!(a&&a.$classData&&a.$classData.m.lZ)}
+c.$classData=g({lZ:0},!1,"scala.collection.immutable.HashMap$HashTrieMap",{lZ:1,rw:1,dm:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,Rj:1,rd:1,wd:1,vd:1,Dk:1,k:1,h:1,kd:1});function y$(){}y$.prototype=new T8;y$.prototype.constructor=y$;function O4a(){}c=O4a.prototype=y$.prototype;c.jb=function(){return this};c.X=function(a){return mi(this,a)};c.li=function(){return this};c.vb=function(a){return ng(this,a)};
+c.y=function(a){return mi(this,a|0)};c.Ze=function(a){return VD(this,a)};c.Le=function(a){return w8(this,a)};c.wb=function(){return this};c.ne=function(){return this};c.hc=function(){return this};
+c.zj=function(a,b){if(b===x().s){if(this===u())return u();b=this;for(var d=(new vC).ud(!1),e=(new jl).i(null),f=(new jl).i(null);b!==u();)a.y(b.Y()).jb().ta(m(new p,function(a,b,d,e){return function(a){b.Ca?(a=Og(new Pg,a,u()),e.Ca.Ka=a,e.Ca=a):(d.Ca=Og(new Pg,a,u()),e.Ca=d.Ca,b.Ca=!0)}}(this,d,e,f))),b=b.$();return d.Ca?e.Ca:u()}return g5(this,a,b)};c.Qu=function(a){return pN(this,a)};c.ok=function(a){a:{var b=this;for(;;){if(b.z()||!a.y(b.Y()))break a;b=b.$()}}return b};
+c.ee=function(a){return x8(this,a)};c.ad=function(){return x()};c.ta=function(a){for(var b=this;!b.z();)a.y(b.Y()),b=b.$()};c.Ib=function(a,b){return y8(this,a,b)};c.Si=function(a,b){for(var d=AA(this);!d.z();){var e=d.Y();a=sb(b,e,a);d=d.$()}return a};c.mf=function(a,b){return z8(this,a,b)};function tq(a,b){a.z()?a=b:b.z()||(b=Rk((new mc).b(),b),b.z()||(b.pp&&z$(b),b.wg.Ka=a,a=b.wb()));return a}c.Qf=function(){return AA(this)};
+c.Tc=function(a,b){return b&&b.$classData&&b.$classData.m.qG?Og(new Pg,a,this):Ww(this,a,b)};c.Sa=function(){return hv(this)};function pN(a,b){for(;!a.z()&&0<b;)a=a.$(),b=-1+b|0;return a}c.rk=function(a){return A8(this,a)};c.$c=function(a,b){return b===x().s?tq(a.jb().wb(),this):Gt(this,a,b)};c.sa=function(){return Jm(this)};c.Jh=function(){return this};
+c.Hw=function(a){a:if(this.z()||0>=a)a=u();else{for(var b=Og(new Pg,this.Y(),u()),d=b,e=this.$(),f=1;;){if(e.z()){a=this;break a}if(f<a)var f=1+f|0,h=Og(new Pg,e.Y(),u()),d=d.Ka=h,e=e.$();else break}a=b}return a};c.Oc=function(){return this.z()?qT():LC(new MC,this.Y(),I(function(a){return function(){return a.$().Oc()}}(this)))};c.nd=function(){return Mm(this)};c.de=function(a){return pN(this,a)};c.ab=function(a){return B8(this,a)};c.ie=function(){return this};c.Nc=function(){return this};
+c.Fp=function(a){return C8(this,a)};c.Za=function(a){return C8(this,a|0)};c.r=function(){return iT(S(),this)};c.ya=function(a,b){if(b===x().s){if(this===u())return u();for(var d=b=Og(new Pg,a.y(this.Y()),u()),e=this.$();e!==u();)var f=Og(new Pg,a.y(e.Y()),u()),d=d.Ka=f,e=e.$();return b}return kr(this,a,b)};c.Gk=function(a){a:{var b=pN(this,a);a=this;for(;;){if(u().o(b))break a;if(di(b))b=b.Ka,a=a.$();else throw(new q).i(b);}}return a};c.ce=function(a){return Gn(this,a)};
+c.lc=function(a,b){if(b===x().s){if(this===u())return u();b=this;var d=null;do{var e=a.gb(b.Y(),x().$v);e!==x().$v&&(d=Og(new Pg,e,u()));b=b.$();if(b===u())return null===d?u():d}while(null===d);e=d;do{var f=a.gb(b.Y(),x().$v);f!==x().$v&&(f=Og(new Pg,f,u()),e=e.Ka=f);b=b.$()}while(b!==u());return d}return k5(this,a,b)};c.zk=function(a){return u3a(this,a)};function AA(a){for(var b=u();!a.z();){var d=a.Y(),b=Og(new Pg,d,b);a=a.$()}return b}c.qf=function(){return"List"};
+function Ng(a){return!!(a&&a.$classData&&a.$classData.m.oZ)}function N(){H_.call(this)}N.prototype=new y4a;N.prototype.constructor=N;N.prototype.Pn=function(){return!0};N.prototype.P=function(a,b,d){H_.prototype.P.call(this,a,b,d);return this};N.prototype.IU=function(a,b,d){return(new N).P(a,b,d)};
+N.prototype.$classData=g({bja:0},!1,"scala.collection.immutable.Range$Inclusive",{bja:1,tG:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,rG:1,$p:1,rd:1,wd:1,vd:1,xg:1,Pd:1,kd:1,k:1,h:1});function MC(){this.Nz=this.q_=this.Ay=null}MC.prototype=new F4a;MC.prototype.constructor=MC;c=MC.prototype;c.Y=function(){return this.Ay};function A$(a){a.xo()||a.xo()||(a.q_=se(a.Nz),a.Nz=null);return a.q_}
+c.Ze=function(a){return P4a(a)?Q4a(this,a):VD(this,a)};c.z=function(){return!1};c.xo=function(){return null===this.Nz};function Q4a(a,b){for(;;)if(Em(Fm(),a.Ay,b.Ay))if(a=A$(a),P4a(a))if(b=A$(b),P4a(b)){if(a===b)return!0}else return!1;else return A$(b).z();else return!1}c.$=function(){return A$(this)};function LC(a,b,d){a.Ay=b;a.Nz=d;return a}function P4a(a){return!!(a&&a.$classData&&a.$classData.m.pZ)}
+c.$classData=g({pZ:0},!1,"scala.collection.immutable.Stream$Cons",{pZ:1,jja:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,sG:1,$p:1,rd:1,wd:1,vd:1,Vp:1,Ct:1,kw:1,k:1,h:1});function B$(){}B$.prototype=new F4a;B$.prototype.constructor=B$;c=B$.prototype;c.b=function(){return this};c.Y=function(){this.By()};c.xo=function(){return!1};c.z=function(){return!0};c.By=function(){throw(new Bu).c("head of empty stream");};
+c.$=function(){throw(new Sk).c("tail of empty stream");};c.$classData=g({nja:0},!1,"scala.collection.immutable.Stream$Empty$",{nja:1,jja:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,sG:1,$p:1,rd:1,wd:1,vd:1,Vp:1,Ct:1,kw:1,k:1,h:1});var R4a=void 0;function qT(){R4a||(R4a=(new B$).b());return R4a}function v5(){this.Wg=this.jf=this.Be=0;this.Ie=!1;this.Ve=0;this.nk=this.vi=this.Vg=this.eg=this.uf=this.We=null}
+v5.prototype=new T8;v5.prototype.constructor=v5;c=v5.prototype;c.jb=function(){return this};c.mc=function(){return this.Vg};
+function C$(a,b,d,e){if(a.Ie)if(32>e)a.Vc(Qe(a.Je()));else if(1024>e)a.qc(Qe(a.zb())),a.zb().n[31&(b>>>5|0)]=a.Je(),a.Vc(Te(a.zb(),31&(d>>>5|0)));else if(32768>e)a.qc(Qe(a.zb())),a.dd(Qe(a.Ub())),a.zb().n[31&(b>>>5|0)]=a.Je(),a.Ub().n[31&(b>>>10|0)]=a.zb(),a.qc(Te(a.Ub(),31&(d>>>10|0))),a.Vc(Te(a.zb(),31&(d>>>5|0)));else if(1048576>e)a.qc(Qe(a.zb())),a.dd(Qe(a.Ub())),a.Ke(Qe(a.mc())),a.zb().n[31&(b>>>5|0)]=a.Je(),a.Ub().n[31&(b>>>10|0)]=a.zb(),a.mc().n[31&(b>>>15|0)]=a.Ub(),a.dd(Te(a.mc(),31&(d>>>
+15|0))),a.qc(Te(a.Ub(),31&(d>>>10|0))),a.Vc(Te(a.zb(),31&(d>>>5|0)));else if(33554432>e)a.qc(Qe(a.zb())),a.dd(Qe(a.Ub())),a.Ke(Qe(a.mc())),a.zh(Qe(a.Bd())),a.zb().n[31&(b>>>5|0)]=a.Je(),a.Ub().n[31&(b>>>10|0)]=a.zb(),a.mc().n[31&(b>>>15|0)]=a.Ub(),a.Bd().n[31&(b>>>20|0)]=a.mc(),a.Ke(Te(a.Bd(),31&(d>>>20|0))),a.dd(Te(a.mc(),31&(d>>>15|0))),a.qc(Te(a.Ub(),31&(d>>>10|0))),a.Vc(Te(a.zb(),31&(d>>>5|0)));else if(1073741824>e)a.qc(Qe(a.zb())),a.dd(Qe(a.Ub())),a.Ke(Qe(a.mc())),a.zh(Qe(a.Bd())),a.kp(Qe(a.Vh())),
+a.zb().n[31&(b>>>5|0)]=a.Je(),a.Ub().n[31&(b>>>10|0)]=a.zb(),a.mc().n[31&(b>>>15|0)]=a.Ub(),a.Bd().n[31&(b>>>20|0)]=a.mc(),a.Vh().n[31&(b>>>25|0)]=a.Bd(),a.zh(Te(a.Vh(),31&(d>>>25|0))),a.Ke(Te(a.Bd(),31&(d>>>20|0))),a.dd(Te(a.mc(),31&(d>>>15|0))),a.qc(Te(a.Ub(),31&(d>>>10|0))),a.Vc(Te(a.zb(),31&(d>>>5|0)));else throw(new Re).b();else{b=-1+a.Lf()|0;switch(b){case 5:a.kp(Qe(a.Vh()));a.zh(Te(a.Vh(),31&(d>>>25|0)));a.Ke(Te(a.Bd(),31&(d>>>20|0)));a.dd(Te(a.mc(),31&(d>>>15|0)));a.qc(Te(a.Ub(),31&(d>>>10|
+0)));a.Vc(Te(a.zb(),31&(d>>>5|0)));break;case 4:a.zh(Qe(a.Bd()));a.Ke(Te(a.Bd(),31&(d>>>20|0)));a.dd(Te(a.mc(),31&(d>>>15|0)));a.qc(Te(a.Ub(),31&(d>>>10|0)));a.Vc(Te(a.zb(),31&(d>>>5|0)));break;case 3:a.Ke(Qe(a.mc()));a.dd(Te(a.mc(),31&(d>>>15|0)));a.qc(Te(a.Ub(),31&(d>>>10|0)));a.Vc(Te(a.zb(),31&(d>>>5|0)));break;case 2:a.dd(Qe(a.Ub()));a.qc(Te(a.Ub(),31&(d>>>10|0)));a.Vc(Te(a.zb(),31&(d>>>5|0)));break;case 1:a.qc(Qe(a.zb()));a.Vc(Te(a.zb(),31&(d>>>5|0)));break;case 0:a.Vc(Qe(a.Je()));break;default:throw(new q).i(b);
+}a.Ie=!0}}c.Y=function(){if(0===this.vb(0))throw(new Sk).c("empty.head");return this.X(0)};c.X=function(a){var b=a+this.Be|0;if(0<=a&&b<this.jf)a=b;else throw(new O).c(""+a);return kba(this,a,a^this.Wg)};c.li=function(){return this};c.vb=function(a){return this.sa()-a|0};c.Lf=function(){return this.Ve};c.y=function(a){return this.X(a|0)};c.ne=function(){return this};c.hc=function(){return this};c.P=function(a,b,d){this.Be=a;this.jf=b;this.Wg=d;this.Ie=!1;return this};c.kp=function(a){this.nk=a};
+c.yc=function(a,b){return b===(KE(),Nj().pc)||b===Jn().s||b===t().s?S4a(this,a):oi(this,a,b)};c.Xe=function(){if(0===this.vb(0))throw(new Sk).c("empty.init");return T4a(this,1)};c.ad=function(){return Mj()};c.Je=function(){return this.We};c.Bd=function(){return this.vi};c.dd=function(a){this.eg=a};
+function D$(a,b,d){var e=-1+a.Ve|0;switch(e){case 0:a.We=Se(a.We,b,d);break;case 1:a.uf=Se(a.uf,b,d);break;case 2:a.eg=Se(a.eg,b,d);break;case 3:a.Vg=Se(a.Vg,b,d);break;case 4:a.vi=Se(a.vi,b,d);break;case 5:a.nk=Se(a.nk,b,d);break;default:throw(new q).i(e);}}c.pg=function(){return this};
+function S4a(a,b){if(a.jf!==a.Be){var d=-32&a.jf,e=31&a.jf;if(a.jf!==d){var f=(new v5).P(a.Be,1+a.jf|0,d);Ue(f,a,a.Ve);f.Ie=a.Ie;C$(f,a.Wg,d,a.Wg^d);f.We.n[e]=b;return f}var h=a.Be&~(-1+(1<<ea(5,-1+a.Ve|0))|0),f=a.Be>>>ea(5,-1+a.Ve|0)|0;if(0!==h){if(1<a.Ve){var d=d-h|0,k=a.Wg-h|0,h=(new v5).P(a.Be-h|0,(1+a.jf|0)-h|0,d);Ue(h,a,a.Ve);h.Ie=a.Ie;D$(h,f,0);E$(h,k,d,k^d);h.We.n[e]=b;return h}e=-32+d|0;d=a.Wg;k=(new v5).P(a.Be-h|0,(1+a.jf|0)-h|0,e);Ue(k,a,a.Ve);k.Ie=a.Ie;D$(k,f,0);C$(k,d,e,d^e);k.We.n[32-
+h|0]=b;return k}f=a.Wg;h=(new v5).P(a.Be,1+a.jf|0,d);Ue(h,a,a.Ve);h.Ie=a.Ie;E$(h,f,d,f^d);h.We.n[e]=b;return h}a=la(Xa(Va),[32]);a.n[0]=b;b=(new v5).P(0,1,0);b.Ve=1;b.We=a;return b}c.ae=function(){return c8(this)};
+function U4a(a,b){a.Ve=b;b=-1+b|0;switch(b){case 0:a.uf=null;a.eg=null;a.Vg=null;a.vi=null;a.nk=null;break;case 1:a.eg=null;a.Vg=null;a.vi=null;a.nk=null;break;case 2:a.Vg=null;a.vi=null;a.nk=null;break;case 3:a.vi=null;a.nk=null;break;case 4:a.nk=null;break;case 5:break;default:throw(new q).i(b);}}c.Tc=function(a,b){return b===(KE(),Nj().pc)||b===Jn().s||b===t().s?V4a(this,a):Ww(this,a,b)};c.Sa=function(){return Qj(this)};c.qc=function(a){this.uf=a};
+function F$(a,b){for(;b<a.n.length;)a.n[b]=null,b=1+b|0}c.sa=function(){return this.jf-this.Be|0};
+c.$c=function(a,b){if(b===(KE(),Nj().pc)||b===Jn().s||b===t().s){if(a.z())return this;a=a.Ng()?a.jb():a.pg();var d=a.Da();if(2>=d||d<(this.sa()>>>5|0))return b=(new jl).i(this),a.ta(m(new p,function(a,b){return function(a){b.Ca=b.Ca.yc(a,(Mj(),Nj().pc))}}(this,b))),b.Ca;if(this.sa()<(d>>>5|0)&&a&&a.$classData&&a.$classData.m.tZ){b=a;for(a=(new f3).it(this);a.ra();)d=a.ka(),b=b.Tc(d,(Mj(),Nj().pc));return b}return Gt(this,a,b)}return Gt(this,a.jb(),b)};c.zh=function(a){this.vi=a};c.Jh=function(){return this};
+function T4a(a,b){if(!(0>=b))if((a.jf-b|0)>a.Be){var d=a.jf-b|0,e=-32&(-1+d|0),f=W4a(a.Be^(-1+d|0)),h=a.Be&~(-1+(1<<ea(5,f))|0);b=(new v5).P(a.Be-h|0,d-h|0,e-h|0);Ue(b,a,a.Ve);b.Ie=a.Ie;C$(b,a.Wg,e,a.Wg^e);U4a(b,f);a=d-h|0;if(32>=a)F$(b.We,a);else if(1024>=a)F$(b.We,1+(31&(-1+a|0))|0),b.uf=G$(b.uf,a>>>5|0);else if(32768>=a)F$(b.We,1+(31&(-1+a|0))|0),b.uf=G$(b.uf,1+(31&((-1+a|0)>>>5|0))|0),b.eg=G$(b.eg,a>>>10|0);else if(1048576>=a)F$(b.We,1+(31&(-1+a|0))|0),b.uf=G$(b.uf,1+(31&((-1+a|0)>>>5|0))|0),
+b.eg=G$(b.eg,1+(31&((-1+a|0)>>>10|0))|0),b.Vg=G$(b.Vg,a>>>15|0);else if(33554432>=a)F$(b.We,1+(31&(-1+a|0))|0),b.uf=G$(b.uf,1+(31&((-1+a|0)>>>5|0))|0),b.eg=G$(b.eg,1+(31&((-1+a|0)>>>10|0))|0),b.Vg=G$(b.Vg,1+(31&((-1+a|0)>>>15|0))|0),b.vi=G$(b.vi,a>>>20|0);else if(1073741824>=a)F$(b.We,1+(31&(-1+a|0))|0),b.uf=G$(b.uf,1+(31&((-1+a|0)>>>5|0))|0),b.eg=G$(b.eg,1+(31&((-1+a|0)>>>10|0))|0),b.Vg=G$(b.Vg,1+(31&((-1+a|0)>>>15|0))|0),b.vi=G$(b.vi,1+(31&((-1+a|0)>>>20|0))|0),b.nk=G$(b.nk,a>>>25|0);else throw(new Re).b();
+a=b}else a=Mj().zl;return a}function E$(a,b,d,e){a.Ie?(nba(a,b),lba(a,b,d,e)):(lba(a,b,d,e),a.Ie=!0)}c.yf=function(){return this.sa()};c.zb=function(){return this.uf};c.nd=function(){if(0===this.vb(0))throw(new Sk).c("empty.last");return this.X(-1+this.sa()|0)};c.Vh=function(){return this.nk};c.de=function(a){return X4a(this,a)};c.ie=function(){return this};c.$=function(){if(0===this.vb(0))throw(new Sk).c("empty.tail");return X4a(this,1)};c.Nc=function(){return this};
+function Qj(a){var b=(new w5).ha(a.Be,a.jf);Ue(b,a,a.Ve);a.Ie&&nba(b,a.Wg);1<b.SD&&mba(b,a.Be,a.Be^a.Wg);return b}function W4a(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 Re).b();}c.Za=function(a){return I2(this,a|0)};function H$(a,b){for(var d=0;d<b;)a.n[d]=null,d=1+d|0}c.r=function(){return iT(S(),this)};c.mk=function(a){this.Ve=a};c.ce=function(a){return T4a(this,a)};
+c.Gk=function(a){return 0>=a?Mj().zl:(this.jf-a|0)>this.Be?Y4a(this,this.jf-a|0):this};c.Ub=function(){return this.eg};
+function Y4a(a,b){var d=-32&b,e=W4a(b^(-1+a.jf|0)),f=b&~(-1+(1<<ea(5,e))|0),h=(new v5).P(b-f|0,a.jf-f|0,d-f|0);Ue(h,a,a.Ve);h.Ie=a.Ie;C$(h,a.Wg,d,a.Wg^d);U4a(h,e);a=b-f|0;if(32>a)H$(h.We,a);else if(1024>a)H$(h.We,31&a),h.uf=I$(h.uf,a>>>5|0);else if(32768>a)H$(h.We,31&a),h.uf=I$(h.uf,31&(a>>>5|0)),h.eg=I$(h.eg,a>>>10|0);else if(1048576>a)H$(h.We,31&a),h.uf=I$(h.uf,31&(a>>>5|0)),h.eg=I$(h.eg,31&(a>>>10|0)),h.Vg=I$(h.Vg,a>>>15|0);else if(33554432>a)H$(h.We,31&a),h.uf=I$(h.uf,31&(a>>>5|0)),h.eg=I$(h.eg,
+31&(a>>>10|0)),h.Vg=I$(h.Vg,31&(a>>>15|0)),h.vi=I$(h.vi,a>>>20|0);else if(1073741824>a)H$(h.We,31&a),h.uf=I$(h.uf,31&(a>>>5|0)),h.eg=I$(h.eg,31&(a>>>10|0)),h.Vg=I$(h.Vg,31&(a>>>15|0)),h.vi=I$(h.vi,31&(a>>>20|0)),h.nk=I$(h.nk,a>>>25|0);else throw(new Re).b();return h}c.Vc=function(a){this.We=a};function X4a(a,b){return 0>=b?a:a.Be<(a.jf-b|0)?Y4a(a,a.Be+b|0):Mj().zl}
+function V4a(a,b){if(a.jf!==a.Be){var d=-32&(-1+a.Be|0),e=31&(-1+a.Be|0);if(a.Be!==(32+d|0)){var f=(new v5).P(-1+a.Be|0,a.jf,d);Ue(f,a,a.Ve);f.Ie=a.Ie;C$(f,a.Wg,d,a.Wg^d);f.We.n[e]=b;return f}var h=(1<<ea(5,a.Ve))-a.jf|0,f=h&~(-1+(1<<ea(5,-1+a.Ve|0))|0),h=h>>>ea(5,-1+a.Ve|0)|0;if(0!==f){if(1<a.Ve){var d=d+f|0,k=a.Wg+f|0,f=(new v5).P((-1+a.Be|0)+f|0,a.jf+f|0,d);Ue(f,a,a.Ve);f.Ie=a.Ie;D$(f,0,h);E$(f,k,d,k^d);f.We.n[e]=b;return f}e=32+d|0;d=a.Wg;k=(new v5).P((-1+a.Be|0)+f|0,a.jf+f|0,e);Ue(k,a,a.Ve);
+k.Ie=a.Ie;D$(k,0,h);C$(k,d,e,d^e);k.We.n[-1+f|0]=b;return k}if(0>d)return f=(1<<ea(5,1+a.Ve|0))-(1<<ea(5,a.Ve))|0,h=d+f|0,d=a.Wg+f|0,f=(new v5).P((-1+a.Be|0)+f|0,a.jf+f|0,h),Ue(f,a,a.Ve),f.Ie=a.Ie,E$(f,d,h,d^h),f.We.n[e]=b,f;f=a.Wg;h=(new v5).P(-1+a.Be|0,a.jf,d);Ue(h,a,a.Ve);h.Ie=a.Ie;E$(h,f,d,f^d);h.We.n[e]=b;return h}a=la(Xa(Va),[32]);a.n[31]=b;b=(new v5).P(31,32,0);b.Ve=1;b.We=a;return b}function G$(a,b){var d=la(Xa(Va),[a.n.length]);Pa(a,0,d,0,b);return d}
+function I$(a,b){var d=la(Xa(Va),[a.n.length]);Pa(a,b,d,b,d.n.length-b|0);return d}c.Ke=function(a){this.Vg=a};c.$classData=g({tZ:0},!1,"scala.collection.immutable.Vector",{tZ:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,rG:1,$p:1,rd:1,wd:1,vd:1,xg:1,Pd:1,uZ:1,k:1,h:1,kd:1});function Ni(){this.Ih=null}Ni.prototype=new T8;Ni.prototype.constructor=Ni;c=Ni.prototype;c.jb=function(){return this};c.Y=function(){return Dj(this)};
+c.X=function(a){a=65535&(this.Ih.charCodeAt(a)|0);return Oe(a)};c.li=function(){return this};c.vb=function(a){return f8(this,a)};c.Ze=function(a){return g8(this,a)};c.y=function(a){a=65535&(this.Ih.charCodeAt(a|0)|0);return Oe(a)};c.Le=function(a){return h8(this,a)};c.z=function(){return O2(this)};c.ne=function(){return this};c.hc=function(){return this};c.To=function(a){return 65535&(this.Ih.charCodeAt(a)|0)};c.ok=function(a){return i8(this,a)};c.ee=function(a){return j8(this,a)};c.Xe=function(){return k8(this)};
+c.ad=function(){return KE()};c.l=function(){return this.Ih};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.Ih.length|0,a,b)};c.Si=function(a,b){return q8(this,this.Ih.length|0,a,b)};c.Hg=function(a){var b=this.Ih;return b===a?0:b<a?-1:1};c.mf=function(a,b){return m8(this,a,b)};c.Af=function(a,b){return Z4a(this,a,b)};c.Qf=function(){return Vw(this)};c.ae=function(){return c8(this)};c.Sa=function(){return Ye(new Ze,this,0,this.Ih.length|0)};c.rk=function(a){return o8(this,a)};
+c.Zf=function(){return this.Ih};c.Xj=function(a){return p8(this,a)};c.sa=function(){return this.Ih.length|0};c.Jh=function(){return this};c.yf=function(){return this.Ih.length|0};c.nd=function(){return em(this)};c.de=function(a){return Z4a(this,a,this.Ih.length|0)};c.$=function(){return Uj(this)};c.ie=function(){return this};c.Nc=function(){return this};c.Za=function(a){return I2(this,a|0)};c.He=function(a,b,d){s8(this,a,b,d)};c.r=function(){return iT(S(),this)};c.c=function(a){this.Ih=a;return this};
+c.ce=function(a){return dm(this,a)};c.Gk=function(a){return t8(this,a)};c.Ce=function(){return fE(Ia(),this.Ih)};function Z4a(a,b,d){b=0>b?0:b;if(d<=b||b>=(a.Ih.length|0))return(new Ni).c("");d=d>(a.Ih.length|0)?a.Ih.length|0:d;Ne();return(new Ni).c((null!==a?a.Ih:null).substring(b,d))}c.zk=function(a){return u8(this,a)};c.db=function(){$ma||($ma=(new PC).b());return $ma.db()};c.Te=function(a,b){return v8(this,a,b)};
+c.$classData=g({Aja:0},!1,"scala.collection.immutable.WrappedString",{Aja:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,rG:1,$p:1,rd:1,wd:1,vd:1,xg:1,Pd:1,rZ:1,af:1,Ym:1,Md:1});function Pg(){this.Ka=this.Eb=null}Pg.prototype=new O4a;Pg.prototype.constructor=Pg;c=Pg.prototype;c.u=function(){return"::"};c.Y=function(){return this.Eb};c.v=function(){return 2};c.z=function(){return!1};
+c.w=function(a){switch(a){case 0:return this.Eb;case 1:return this.Ka;default:throw(new O).c(""+a);}};c.$=function(){return this.Ka};function Og(a,b,d){a.Eb=b;a.Ka=d;return a}c.x=function(){return Y(new Z,this)};function di(a){return!!(a&&a.$classData&&a.$classData.m.jZ)}
+c.$classData=g({jZ:0},!1,"scala.collection.immutable.$colon$colon",{jZ:1,oZ:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,sG:1,$p:1,rd:1,wd:1,vd:1,Vp:1,Ct:1,t:1,kw:1,k:1,h:1});function J$(){}J$.prototype=new O4a;J$.prototype.constructor=J$;c=J$.prototype;c.u=function(){return"Nil"};c.Y=function(){this.By()};c.b=function(){return this};c.v=function(){return 0};c.z=function(){return!0};
+function D4a(){throw(new Sk).c("tail of empty list");}c.o=function(a){return a&&a.$classData&&a.$classData.m.le?a.z():!1};c.w=function(a){throw(new O).c(""+a);};c.By=function(){throw(new Bu).c("head of empty list");};c.$=function(){return D4a()};c.x=function(){return Y(new Z,this)};
+c.$classData=g({Zia:0},!1,"scala.collection.immutable.Nil$",{Zia:1,oZ:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,sG:1,$p:1,rd:1,wd:1,vd:1,Vp:1,Ct:1,t:1,kw:1,k:1,h:1});var $4a=void 0;function u(){$4a||($4a=(new J$).b());return $4a}function K$(){}K$.prototype=new W8;K$.prototype.constructor=K$;function L$(){}c=L$.prototype=K$.prototype;c.jb=function(){return this};c.Qp=function(a,b){return M3a(this,a,b)};c.ne=function(){return this};
+c.Sp=function(a){return N3a(this,a)};c.ad=function(){return uya()};c.oH=function(a){return this.wi().Xb(this).vl(a)};c.Co=function(a,b){PE(this,a,b)};c.mg=function(a,b){JT(this,a,b)};c.rE=function(a,b){return O3a(this,a,b)};c.bA=function(a,b){return this.oH((new w).e(a,b))};c.Nc=function(){return tia(this)};c.oc=function(){};c.ym=function(){P3a(this)};c.nH=function(a){return this.wi().Xb(this).uh(a)};c.db=function(){return this.wi()};c.Xb=function(a){return IC(this,a)};function M$(){}
+M$.prototype=new L3a;M$.prototype.constructor=M$;function N$(){}c=N$.prototype=M$.prototype;c.jb=function(){return this};c.ne=function(){return this};c.z=function(){return 0===this.Da()};c.o=function(a){return f5(this,a)};c.Ia=function(a){return this.ab(a)|0};c.ad=function(){bFa||(bFa=(new y5).b());return bFa};c.l=function(){return i5(this)};c.QG=function(a){var b=this.Sa();return oT(b,a)};c.ae=function(){return v3a(this)};c.Ja=function(a){return this.ab(a)};c.mg=function(a,b){JT(this,a,b)};
+c.FD=function(){return Q8(this)};c.Nc=function(){return Q3a(this)};c.r=function(){var a=S();return gC(a,this,a.Hz)};c.oc=function(){};c.ya=function(a,b){return kr(this,a,b)};c.za=function(a){return rb(this,a)};c.db=function(){return this.Pi()};c.Xb=function(a){return IC(this,a)};c.qf=function(){return"Set"};function Sw(){this.El=null}Sw.prototype=new L$;Sw.prototype.constructor=Sw;c=Sw.prototype;c.of=function(){return this};c.uh=function(a){return a5a(this,a)};
+c.y=function(a){var b=this.El;if(Au().Zm.call(b,a))a=this.El[a];else throw(new Bu).c("key not found: "+a);return a};c.Qd=function(a){var b=(new Sw).Im({});return IC(b,this).uh(a)};c.hc=function(){return this};c.Im=function(a){this.El=a;return this};c.cd=function(a){return b5a(this,a)};c.wi=function(){return(new Sw).Im({})};c.Ji=function(a){var b=(new Sw).Im({});return IC(b,this).uh(a)};c.qj=function(a){var b=(new Sw).Im({}),b=IC(b,this);a=a.jb();return Pe(b,a)};c.Co=function(a,b){this.El[a]=b};
+c.bn=function(){return this};c.Ba=function(){return this};c.Tu=function(){return(new Sw).Im({})};c.Sa=function(){return(new l1).Im(this.El)};c.vf=function(a){return E8(this,a)};function a5a(a,b){var d=a.El;Au().Zm.call(d,b)&&delete a.El[b];return a}c.$s=function(a){var b=this.El;return Au().Zm.call(b,a)?(new H).i(this.El[a]):C()};c.gc=function(a){return this.$s(a)};function b5a(a,b){a.El[b.ja()]=b.na();return a}c.vl=function(a){return b5a(this,a)};
+c.ab=function(a){var b=this.El;return!!Au().Zm.call(b,a)};c.Ma=function(a){return b5a(this,a)};c.Mk=function(a){return a5a(this,a)};c.Li=function(a){var b=(new Sw).Im({});return IC(b,this).vl(a)};c.$classData=g({cla:0},!1,"scala.scalajs.js.WrappedDictionary",{cla:1,Cz:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,sw:1,Qe:1,Re:1,Oe:1,tw:1,sd:1,qd:1,pd:1,kl:1,Pe:1,Zd:1,Ld:1});function C7(){this.Ei=this.xj=null}
+C7.prototype=new C9;C7.prototype.constructor=C7;c=C7.prototype;c.jb=function(){return this};c.Y=function(){return D3a(this)};c.b=function(){this.Ei=this;return this};c.X=function(a){return G8(this,a)};c.li=function(){return this};c.y=function(a){return G8(this,a|0)};c.z=function(){return this.Ei===this};c.ne=function(){return this};c.hc=function(){return this};c.Bf=function(a,b){F3a(this,a,b)};c.ad=function(){U2a||(U2a=(new B7).b());return U2a};
+c.ta=function(a){for(var b=this;;)if(nd(b))a.y(b.xj),b=b.Ei;else break};c.cn=function(){return this};c.Sa=function(){var a=new r3;a.eb=this;return a};c.sa=function(){a:{var a=this,b=0;for(;;){if(a.Ei===a)break a;b=1+b|0;a=a.Ei}}return b};c.Jh=function(){return this};c.de=function(a){return E3a(this,a)};c.ie=function(){return this};c.$=function(){return G3a(this)};c.Za=function(a){return I2(this,a|0)};c.r=function(){return iT(S(),this)};
+c.$classData=g({vka:0},!1,"scala.collection.mutable.LinkedList",{vka:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,SZ:1,Vp:1,Ct:1,Ysa:1,k:1,h:1});function O$(){}O$.prototype=new C9;O$.prototype.constructor=O$;function P$(){}P$.prototype=O$.prototype;O$.prototype.ad=function(){return Fc()};O$.prototype.fA=function(a){return O8(this,a)};
+O$.prototype.Xb=function(a){return IC(this,a)};function G9(){f9.call(this);this.Ks=this.Bb=null}G9.prototype=new h4a;G9.prototype.constructor=G9;c=G9.prototype;c.jb=function(){return this};c.of=function(){return this};c.Qp=function(a,b){return M3a(this,a,b)};c.uh=function(a){this.Bb.uh(a);return this};c.Qd=function(a){return c5a(this,a)};c.ne=function(){return this};c.hc=function(){return this};c.Sp=function(a){return N3a(this,a)};c.cd=function(a){return d5a(this,a)};
+function c5a(a,b){return D9(new G9,a.Bb.nH(b),a.Ks)}c.ad=function(){return uya()};c.oH=function(a){return D9(new G9,this.Bb.bA(a.ja(),a.na()),this.Ks)};c.Ji=function(a){return c5a(this,a)};c.wi=function(){return Q$(this)};c.qj=function(a){var b=Q$(this),b=IC(b,this);a=a.jb();return Pe(b,a)};c.Co=function(a,b){PE(this,a,b)};c.bn=function(){return this};c.Ba=function(){return this};c.Tu=function(){return Q$(this)};c.mg=function(a,b){JT(this,a,b)};c.vf=function(a){return E8(this,a)};
+c.bA=function(a,b){return D9(new G9,this.Bb.bA(a,b),this.Ks)};c.rE=function(a,b){return O3a(this,a,b)};c.vl=function(a){return d5a(this,a)};c.Nc=function(){return tia(this)};function D9(a,b,d){a.Bb=b;a.Ks=d;f9.prototype.xda.call(a,b,d);return a}c.Ma=function(a){return d5a(this,a)};function Q$(a){return D9(new G9,a.Bb.Tu(),a.Ks)}c.oc=function(){};c.Mk=function(a){this.Bb.uh(a);return this};function d5a(a,b){a.Bb.vl(b);return a}c.ym=function(){P3a(this)};c.nH=function(a){return c5a(this,a)};
+c.Li=function(a){return D9(new G9,this.Bb.bA(a.ja(),a.na()),this.Ks)};c.db=function(){return Q$(this)};c.Xb=function(a){return IC(this,a)};c.$classData=g({Bka:0},!1,"scala.collection.mutable.Map$WithDefault",{Bka:1,zsa:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,k:1,h:1,sw:1,Qe:1,Re:1,Oe:1,tw:1,sd:1,qd:1,pd:1,kl:1,Pe:1,Zd:1,Ld:1});function R$(){}R$.prototype=new C9;R$.prototype.constructor=R$;function S$(){}
+c=S$.prototype=R$.prototype;c.jb=function(){return this};c.Y=function(){return Dj(this)};c.li=function(){return this};c.vb=function(a){return f8(this,a)};c.Ze=function(a){return g8(this,a)};c.Le=function(a){return h8(this,a)};c.z=function(){return O2(this)};c.ne=function(){return this};c.hc=function(){return this};c.ok=function(a){return i8(this,a)};c.ee=function(a){return j8(this,a)};c.Xe=function(){return k8(this)};c.ad=function(){return EFa()};c.ta=function(a){l8(this,a)};
+c.Ib=function(a,b){var d=this.sa();return r8(this,0,d,a,b)};c.Si=function(a,b){var d=this.sa();return q8(this,d,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Af=function(a,b){return n8(this,a,b)};c.Qf=function(){return Vw(this)};c.ae=function(){return c8(this)};c.Sa=function(){return Ye(new Ze,this,0,this.sa())};c.cn=function(){return this};c.rk=function(a){return o8(this,a)};c.Xj=function(a){return p8(this,a)};c.Jh=function(){return this};c.yf=function(){return this.sa()};c.nd=function(){return em(this)};
+c.de=function(a){var b=this.sa();return n8(this,a,b)};c.ie=function(){return this};c.$=function(){return Uj(this)};c.Za=function(a){return I2(this,a|0)};c.He=function(a,b,d){s8(this,a,b,d)};c.Gk=function(a){return t8(this,a)};c.ce=function(a){return dm(this,a)};c.Ce=function(a){var b=a.Od();return Oz(oa(this.qa))===b?this.qa:xC(this,a)};c.zk=function(a){return u8(this,a)};c.db=function(){return(new w3).Bp(this.Bm())};c.qf=function(){return"WrappedArray"};c.Te=function(a,b){return v8(this,a,b)};
+function EC(){this.vh=this.Bb=null}EC.prototype=new L$;EC.prototype.constructor=EC;c=EC.prototype;c.of=function(){return this};c.Qp=function(a,b){return md().Uc(this.Bb.zt(a,b))};c.u=function(){return"JMapWrapper"};c.uh=function(a){e6(this.Bb,a);return this};c.v=function(){return 1};c.Qd=function(a){var b=DC(new EC,this.vh,(new d6).b());return IC(b,this).uh(a)};c.hc=function(){return this};c.Sp=function(a){return md().Uc(e6(this.Bb,a))};
+c.w=function(a){switch(a){case 0:return this.Bb;default:throw(new O).c(""+a);}};c.cd=function(a){return p4a(this,a)};c.Ji=function(a){var b=DC(new EC,this.vh,(new d6).b());return IC(b,this).uh(a)};c.wi=function(){return DC(new EC,this.vh,(new d6).b())};c.qj=function(a){var b=DC(new EC,this.vh,(new d6).b()),b=IC(b,this);a=a.jb();return Pe(b,a)};function DC(a,b,d){a.Bb=d;if(null===b)throw pg(qg(),null);a.vh=b;return a}c.Da=function(){return this.Bb.Da()};c.Co=function(a,b){this.Bb.zt(a,b)};c.bn=function(){return this};
+c.Ba=function(){return this};c.Sa=function(){var a=new V2,b=(new SS).ar(this.Bb);a.cH=TS(b);return a};c.Tu=function(){return DC(new EC,this.vh,(new d6).b())};c.vf=function(a){return E8(this,a)};c.gc=function(a){var b=this.Bb.yy(a);return null!==b?(new H).i(b):this.Bb.Ej.ab((new y2).i(a))?(new H).i(null):C()};c.vl=function(a){return p4a(this,a)};c.Ma=function(a){return p4a(this,a)};c.Mk=function(a){e6(this.Bb,a);return this};c.ym=function(){this.Bb.ym()};c.x=function(){return Y(new Z,this)};
+c.Li=function(a){var b=DC(new EC,this.vh,(new d6).b());return IC(b,this).vl(a)};c.$classData=g({iia:0},!1,"scala.collection.convert.Wrappers$JMapWrapper",{iia:1,Cz:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,sw:1,Qe:1,Re:1,Oe:1,tw:1,sd:1,qd:1,pd:1,kl:1,Pe:1,Zd:1,Ld:1,Jsa:1,t:1,k:1,h:1});function AC(){this.vh=this.Bb=null}AC.prototype=new N$;AC.prototype.constructor=AC;c=AC.prototype;c.of=function(){return this};
+c.gx=function(a){return T$(this,a)};c.u=function(){return"JSetWrapper"};c.y=function(a){return this.Bb.ab(a)};c.v=function(){return 1};c.Qd=function(a){return T$(U$(this),a)};c.hc=function(){return this};function V$(a,b){a.Bb.vn(b);return a}c.w=function(a){switch(a){case 0:return this.Bb;default:throw(new O).c(""+a);}};c.cd=function(a){return V$(this,a)};c.qj=function(a){var b=U$(this);a=a.jb();return Pe(b,a)};c.hA=function(a){return V$(this,a)};c.Da=function(){return this.Bb.Da()};c.Ba=function(){return this};
+c.Sa=function(){Rva||(Rva=(new UZ).b());var a=this.Bb.Sn();return null===a?null:a&&a.$classData&&a.$classData.m.hia&&a.lia()===zC()?a.Ola():Mma(new CC,zC(),a)};c.Ki=function(a){return T$(U$(this),a)};c.Pi=function(){return Lma(new AC,this.vh,(new O7).b())};c.FD=function(){return U$(this)};function Lma(a,b,d){a.Bb=d;if(null===b)throw pg(qg(),null);a.vh=b;return a}c.ab=function(a){return this.Bb.ab(a)};c.Ma=function(a){return V$(this,a)};c.Mk=function(a){return T$(this,a)};c.Um=function(a){return this.Bb.Um(a)};
+c.x=function(){return Y(new Z,this)};c.vn=function(a){return this.Bb.vn(a)};c.Sg=function(a){return V$(U$(this),a)};c.wl=function(a){var b=U$(this);a=a.jb();return IC(b,a)};function U$(a){var b=new AC,d=a.vh,e=a.Bb;a=new X7;X7.prototype.b.call(a);for(var e=e.Sn(),f=!1;e.ra();)f=a.vn(e.ka())||f;return Lma(b,d,a)}function T$(a,b){a.Bb.Um(b);return a}
+c.$classData=g({kia:0},!1,"scala.collection.convert.Wrappers$JSetWrapper",{kia:1,wZ:1,vZ:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,Qe:1,Re:1,Oe:1,VZ:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,WZ:1,Dt:1,sd:1,qd:1,pd:1,kl:1,Pe:1,Zd:1,Ld:1,t:1,k:1,h:1});function z7(){this.Ql=0;this.ws=null}z7.prototype=new C9;z7.prototype.constructor=z7;c=z7.prototype;c.jb=function(){return this};c.Y=function(){return Dj(this)};
+c.X=function(a){if(a>=this.Ql)throw(new O).c(""+a);return this.ws.n[a]};c.li=function(){return this};c.vb=function(a){return f8(this,a)};c.Ze=function(a){return g8(this,a)};c.y=function(a){return this.X(a|0)};c.Le=function(a){return h8(this,a)};c.z=function(){return O2(this)};c.ne=function(){return this};c.hc=function(){return this};c.Bf=function(a,b){if(a>=this.Ql)throw(new O).c(""+a);this.ws.n[a]=b};c.ok=function(a){return i8(this,a)};c.ee=function(a){return j8(this,a)};c.Xe=function(){return k8(this)};
+c.ad=function(){return tra()};c.ta=function(a){for(var b=0;b<this.Ql;)a.y(this.ws.n[b]),b=1+b|0};c.Ib=function(a,b){return r8(this,0,this.Ql,a,b)};c.Si=function(a,b){return q8(this,this.Ql,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.Af=function(a,b){return n8(this,a,b)};c.Qf=function(){return Vw(this)};c.ae=function(){return c8(this)};c.Sa=function(){return Ye(new Ze,this,0,this.Ql)};c.cn=function(){return this};c.rk=function(a){return o8(this,a)};
+c.hb=function(a){this.Ql=a;this.ws=la(Xa(Va),[a]);return this};c.sa=function(){return this.Ql};c.Xj=function(a){return p8(this,a)};c.Jh=function(){return this};c.yf=function(){return this.Ql};c.nd=function(){return em(this)};c.de=function(a){return n8(this,a,this.Ql)};c.ie=function(){return this};c.$=function(){return Uj(this)};c.Za=function(a){return I2(this,a|0)};c.He=function(a,b,d){var e=qC(W(),a)-b|0;d=d<e?d:e;e=this.Ql;d=d<e?d:e;0<d&&Lv(Af(),this.ws,0,a,b,d)};c.r=function(){return iT(S(),this)};
+c.Gk=function(a){return t8(this,a)};c.ce=function(a){return dm(this,a)};c.zk=function(a){return u8(this,a)};c.Te=function(a,b){return v8(this,a,b)};c.$classData=g({Pja:0},!1,"scala.collection.mutable.ArraySeq",{Pja:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Sf:1,af:1,kd:1,k:1,h:1});
+function x5(){this.dl=this.xi=null;this.Pk=0;this.Tb=null;this.Uj=this.df=0;this.zf=null;this.Ek=0}x5.prototype=new L$;x5.prototype.constructor=x5;c=x5.prototype;c.of=function(){return this};c.Qp=function(a,b){a=lD(this,a,b);if(null===a)return C();var d=a.W;a.W=b;return(new H).i(d)};c.b=function(){wna(this);this.dl=this.xi=null;return this};c.uh=function(a){this.Sp(a);return this};c.Ez=function(a){this.Ek=a};c.Qd=function(a){var b=(new x5).b();return IC(b,this).uh(a)};c.hc=function(){return this};
+c.Sp=function(a){a=jD(this,a);if(null===a)return C();null===a.Wh?this.xi=a.Xf:a.Wh.Xf=a.Xf;null===a.Xf?this.dl=a.Wh:a.Xf.Wh=a.Wh;a.Wh=null;a.Xf=null;return(new H).i(a.W)};c.cd=function(a){return e5a(this,a)};c.ta=function(a){for(var b=this.xi;null!==b;)a.y((new w).e(b.ve,b.W)),b=b.Xf};c.Jv=function(){return(new o3).dr(this)};c.Ji=function(a){var b=(new x5).b();return IC(b,this).uh(a)};c.wi=function(){return(new x5).b()};c.qj=function(a){var b=(new x5).b(),b=IC(b,this);a=a.jb();return Pe(b,a)};
+c.Da=function(){return this.df};c.bn=function(){return this};c.Ba=function(){return this};c.Sa=function(){return(new n3).dr(this)};c.Tu=function(){return(new x5).b()};c.Wj=function(){return(new p3).dr(this)};c.vf=function(a){return E8(this,a)};c.PD=function(a,b){a=(new j1).e(a,b);null===this.xi?this.xi=a:(this.dl.Xf=a,a.Wh=this.dl);return this.dl=a};c.gc=function(a){a=mD(this,a);return null===a?C():(new H).i(a.W)};c.vl=function(a){return e5a(this,a)};c.ww=function(a){this.zf=a};
+c.Fw=function(a){this.Tb=a};c.vF=function(){return(new i9).dr(this)};c.Ma=function(a){return e5a(this,a)};c.Mk=function(a){this.Sp(a);return this};c.ym=function(){tna(this);this.dl=this.xi=null};function e5a(a,b){a.Qp(b.ja(),b.na());return a}c.lx=function(a){this.Pk=a};c.Lw=function(a){this.Uj=a};c.Li=function(a){var b=(new x5).b();return IC(b,this).vl(a)};c.cq=function(a){this.df=a};
+c.$classData=g({lka:0},!1,"scala.collection.mutable.LinkedHashMap",{lka:1,Cz:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,sw:1,Qe:1,Re:1,Oe:1,tw:1,sd:1,qd:1,pd:1,kl:1,Pe:1,Zd:1,Ld:1,xG:1,yG:1,k:1,h:1});function D7(){this.wk=this.sg=null;this.Di=0}D7.prototype=new C9;D7.prototype.constructor=D7;function f5a(){}c=f5a.prototype=D7.prototype;c.jb=function(){return this};
+c.Y=function(){if(nd(this))return D3a(this.sg);throw(new Bu).b();};c.b=function(){this.wk=this.sg=(new C7).b();this.Di=0;return this};c.X=function(a){return G8(this.sg,a)};c.li=function(){return this};c.vb=function(a){return ng(this,a)};c.Ze=function(a){return VD(this,a)};c.y=function(a){return G8(this.sg,a|0)};c.Le=function(a){return w8(this,a)};c.wb=function(){var a=this.sg,b=x().s;return K(a,b)};c.z=function(){return 0===this.Di};c.ne=function(){return this};c.Bf=function(a,b){F3a(this.sg,a,b)};
+c.hc=function(){return this};c.Qu=function(a){return r3a(this,a)};c.cd=function(a){return Zpa(this,a)};c.ee=function(a){return x8(this,a)};c.ad=function(){W2a||(W2a=(new F7).b());return W2a};c.ta=function(a){for(var b=this;!b.z();)a.y(b.Y()),b=b.$()};c.Ib=function(a,b){return y8(this,a,b)};c.Si=function(a,b){return s3a(this,a,b)};c.mf=function(a,b){return z8(this,a,b)};
+function g5a(a,b){if(!nd(a))throw(new Re).c("requirement failed: tail of empty list");b.sg=G3a(a.sg);b.Di=-1+a.Di|0;b.wk=0===b.Di?b.sg:a.wk}c.Ba=function(){return this};c.Sa=function(){var a;this.z()?a=yB().Sd:(a=new t3,a.eb=this.sg,a.Gu=this.Di);return a};c.cn=function(){return this};c.rk=function(a){return A8(this,a)};c.mg=function(a,b){JT(this,a,b)};c.sa=function(){return this.Di};c.Jh=function(){return this};c.Hw=function(a){return t3a(this,a)};
+c.nd=function(){if(this.z())throw(new Bu).c("MutableList.empty.last");return this.wk.xj};c.de=function(a){return r3a(this,a)};c.ab=function(a){return B8(this,a)};c.ie=function(){return this};c.$=function(){return this.m_()};c.Za=function(a){return C8(this,a|0)};c.Fp=function(a){return C8(this,a)};c.Ma=function(a){return Zpa(this,a)};c.oc=function(){};c.r=function(){return iT(S(),this)};
+function Zpa(a,b){if(0===a.Di){var d=a.sg,e=new C7;C7.prototype.b.call(e);null!==d&&(e.xj=b,e.Ei=d);a.sg=e;0===a.Di&&(a.wk=a.sg)}else d=a.wk,e=(new C7).b(),d.Ei=e,a.wk=a.wk.Ei,a.wk.xj=b,b=a.wk,d=(new C7).b(),b.Ei=d;a.Di=1+a.Di|0;return a}c.ce=function(a){return Gn(this,a)};c.m_=function(){var a=(new D7).b();g5a(this,a);return a};c.zk=function(a){return u3a(this,a)};c.db=function(){return(new D7).b()};c.Xb=function(a){return IC(this,a)};
+c.$classData=g({UZ:0},!1,"scala.collection.mutable.MutableList",{UZ:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,SZ:1,Vp:1,Ct:1,kw:1,sd:1,qd:1,pd:1,k:1,h:1});function zv(){this.Pk=0;this.Tb=null;this.Uj=this.df=0;this.zf=null;this.Ek=0}zv.prototype=new L$;zv.prototype.constructor=zv;function h5a(){}c=h5a.prototype=zv.prototype;c.jb=function(){return this};c.of=function(){return this};
+c.Qp=function(a,b){a=lD(this,a,b);if(null===a)return C();var d=a.W;a.W=b;return(new H).i(d)};c.b=function(){zv.prototype.SV.call(this,null);return this};c.uh=function(a){jD(this,a);return this};c.Ez=function(a){this.Ek=a};c.y=function(a){var b=mD(this,a);return null===b?this.ox(a):b.W};c.Qd=function(a){var b=(new zv).b();return IC(b,this).uh(a)};c.hc=function(){return this};c.Sp=function(a){a=jD(this,a);return null!==a?(new H).i(a.W):C()};
+function i5a(a,b){var d=lD(a,b.ja(),b.na());null!==d&&(d.W=b.na());return a}c.cd=function(a){return i5a(this,a)};c.ta=function(a){for(var b=this.Tb,d=kD(this),e=b.n[d];null!==e;){var f=e.ka();a.y((new w).e(e.ve,e.W));for(e=f;null===e&&0<d;)d=-1+d|0,e=b.n[d]}};c.Jv=function(){return(new i3).cr(this)};c.Ji=function(a){var b=(new zv).b();return IC(b,this).uh(a)};c.wi=function(){return(new zv).b()};c.qj=function(a){var b=(new zv).b(),b=IC(b,this);a=a.jb();return Pe(b,a)};
+c.Co=function(a,b){this.Qp(a,b)};c.Da=function(){return this.df};c.bn=function(){return this};c.Ba=function(){return this};c.I_=function(){return(new P8).cr(this)};c.Sa=function(){return(new cc).Nf(sya(this),m(new p,function(){return function(a){return(new w).e(a.ve,a.W)}}(this)))};c.Tu=function(){return(new zv).b()};c.Wj=function(){return(new j3).cr(this)};c.SV=function(a){wna(this);null!==a&&(this.lx(a.gfa()),this.Fw(a.Tb),this.cq(a.df),this.Lw(a.Uj),this.Ez(a.Ek),this.ww(a.zf));return this};
+function j5a(a,b){return null!==b?(b=b.ve,!Em(Fm(),b,a)):!1}c.vf=function(a){return E8(this,a)};c.rE=function(a,b){var d=fC(V(),a),e=gD(this,d),f;for(f=this.Tb.n[e];j5a(a,f);)f=f.Vd;if(null!==f)return f.W;f=this.Tb;b=se(b);d=f===this.Tb?e:gD(this,d);a=(new h1).e(a,b);this.df>=this.Uj?(d=a.Vi(),d=fC(V(),d),d=gD(this,d),yna(this,a,d)):(a.Vd=this.Tb.n[d],this.Tb.n[d]=a,this.df=1+this.df|0,zna(this,d));return a.W};c.PD=function(a,b){return(new h1).e(a,b)};
+c.gc=function(a){a=mD(this,a);return null===a?C():(new H).i(a.W)};c.vl=function(a){return i5a(this,a)};c.ww=function(a){this.zf=a};c.ab=function(a){return null!==mD(this,a)};c.Fw=function(a){this.Tb=a};c.vF=function(){return(new h9).cr(this)};c.Ma=function(a){return i5a(this,a)};c.Mk=function(a){jD(this,a);return this};c.ym=function(){tna(this)};c.lx=function(a){this.Pk=a};c.Lw=function(a){this.Uj=a};c.Li=function(a){var b=(new zv).b();return IC(b,this).vl(a)};c.cq=function(a){this.df=a};
+c.$classData=g({RZ:0},!1,"scala.collection.mutable.HashMap",{RZ:1,Cz:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,sw:1,Qe:1,Re:1,Oe:1,tw:1,sd:1,qd:1,pd:1,kl:1,Pe:1,Zd:1,Ld:1,xG:1,yG:1,kd:1,k:1,h:1});function b7(){this.dl=this.xi=null;this.Pk=0;this.Tb=null;this.Uj=this.df=0;this.zf=null;this.Ek=0}b7.prototype=new N$;b7.prototype.constructor=b7;c=b7.prototype;c.gx=function(a){this.Um(a);return this};c.of=function(){return this};
+c.b=function(){wna(this);this.dl=this.xi=null;return this};c.Ez=function(a){this.Ek=a};c.y=function(a){return this.ab(a)};c.Qd=function(a){return Q8(this).gx(a)};c.hc=function(){return this};c.cd=function(a){return k5a(this,a)};c.ad=function(){t2a||(t2a=(new a7).b());return t2a};c.ta=function(a){for(var b=this.xi;null!==b;)a.y(b.ve),b=b.Xf};function k5a(a,b){a.vn(b);return a}c.qj=function(a){var b=Q8(this);a=a.jb();return Pe(b,a)};c.hA=function(a){return k5a(this,a)};c.Da=function(){return this.df};
+c.Ba=function(){return this};c.Sa=function(){var a=new q3;a.se=this.xi;return a};c.Ki=function(a){return Q8(this).gx(a)};c.Pi=function(){return(new b7).b()};c.PD=function(a){a=(new k1).i(a);null===this.xi?this.xi=a:(this.dl.Xf=a,a.Wh=this.dl);return this.dl=a};c.ww=function(a){this.zf=a};c.ab=function(a){return null!==mD(this,a)};c.Fw=function(a){this.Tb=a};c.Ma=function(a){return k5a(this,a)};c.Mk=function(a){this.Um(a);return this};
+c.Um=function(a){a=jD(this,a);return null!==a?(null===a.Wh?this.xi=a.Xf:a.Wh.Xf=a.Xf,null===a.Xf?this.dl=a.Wh:a.Xf.Wh=a.Wh,a.Wh=null,a.Xf=null,!0):!1};c.vn=function(a){return null===lD(this,a,null)};c.Sg=function(a){return Q8(this).hA(a)};c.wl=function(a){var b=Q8(this);a=a.jb();return IC(b,a)};c.lx=function(a){this.Pk=a};c.Lw=function(a){this.Uj=a};c.cq=function(a){this.df=a};
+c.$classData=g({rka:0},!1,"scala.collection.mutable.LinkedHashSet",{rka:1,wZ:1,vZ:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,Qe:1,Re:1,Oe:1,VZ:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,WZ:1,Dt:1,sd:1,qd:1,pd:1,kl:1,Pe:1,Zd:1,Ld:1,xG:1,yG:1,k:1,h:1});function H7(){D7.call(this)}H7.prototype=new f5a;H7.prototype.constructor=H7;c=H7.prototype;c.b=function(){D7.prototype.b.call(this);return this};c.li=function(){return this};c.hc=function(){return this};
+c.ad=function(){return $pa()};c.Jh=function(){return this};c.Hw=function(a){return t3a(this,a)};c.de=function(a){return r3a(this,a)};c.$=function(){return l5a(this)};c.ie=function(){return this};c.Za=function(a){return C8(this,a|0)};function l5a(a){var b=(new H7).b();g5a(a,b);return b}c.ce=function(a){return Gn(this,a)};c.m_=function(){return l5a(this)};c.db=function(){return $pa().db()};
+c.$classData=g({Fka:0},!1,"scala.collection.mutable.Queue",{Fka:1,UZ:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,SZ:1,Vp:1,Ct:1,kw:1,sd:1,qd:1,pd:1,k:1,h:1});function W$(){zv.call(this)}W$.prototype=new h5a;W$.prototype.constructor=W$;W$.prototype.ox=function(){return 0};function n3a(){var a=new W$;zv.prototype.SV.call(a,null);return a}
+W$.prototype.$classData=g({$ha:0},!1,"scala.collection.SeqLike$$anon$1",{$ha:1,RZ:1,Cz:1,gh:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,jh:1,Qg:1,hh:1,kh:1,Ha:1,fa:1,Mc:1,sw:1,Qe:1,Re:1,Oe:1,tw:1,sd:1,qd:1,pd:1,kl:1,Pe:1,Zd:1,Ld:1,xG:1,yG:1,kd:1,k:1,h:1});function zR(){this.fj=null;this.bg=0}zR.prototype=new C9;zR.prototype.constructor=zR;c=zR.prototype;c.jb=function(){return this};c.Y=function(){return Dj(this)};
+c.b=function(){zR.prototype.oda.call(this,la(Xa(Va),[1]),0);return this};c.X=function(a){return this.fj.n[(-1+this.bg|0)-a|0]};c.li=function(){return this};c.vb=function(a){return f8(this,a)};c.Ze=function(a){return g8(this,a)};c.y=function(a){return this.X(a|0)};c.Le=function(a){return h8(this,a)};c.z=function(){return 0===this.bg};c.ne=function(){return this};c.Bf=function(a,b){this.fj.n[(-1+this.bg|0)-a|0]=b};c.hc=function(){return this};
+function m5a(a,b){b.ta(m(new p,function(a){return function(b){return n5a(a,b)}}(a)));return a}c.ok=function(a){return i8(this,a)};c.cd=function(a){return n5a(this,a)};c.ee=function(a){return j8(this,a)};c.Xe=function(){return k8(this)};c.ad=function(){return T2a()};c.ta=function(a){for(var b=this.bg;0<b;)b=-1+b|0,a.y(this.fj.n[b])};c.Ib=function(a,b){return r8(this,0,this.bg,a,b)};c.Si=function(a,b){return q8(this,this.bg,a,b)};c.mf=function(a,b){return m8(this,a,b)};
+c.Af=function(a,b){return n8(this,a,b)};c.Qf=function(){return Vw(this)};function yqa(a){0===a.bg&&dn(en(),"Stack empty");a.bg=-1+a.bg|0;var b=a.fj.n[a.bg];a.fj.n[a.bg]=null;return b}c.Da=function(){return this.bg};c.ae=function(){return c8(this)};c.Ba=function(){for(var a=0,b=this.bg/2|0;a<b;){var d=-1+(this.bg-a|0)|0,e=this.fj.n[a];this.fj.n[a]=this.fj.n[d];this.fj.n[d]=e;a=1+a|0}return this};c.Sa=function(){var a=new g3;if(null===this)throw pg(qg(),null);a.Qa=this;a.Iu=this.bg;return a};c.cn=function(){return this};
+c.mg=function(a,b){JT(this,a,b)};c.rk=function(a){return o8(this,a)};c.sa=function(){return this.bg};c.Xj=function(a){return p8(this,a)};c.Jh=function(){return this};c.yf=function(){return this.bg};c.nd=function(){return em(this)};c.de=function(a){return n8(this,a,this.bg)};c.$=function(){return Uj(this)};c.ie=function(){return this};c.Za=function(a){return I2(this,a|0)};function n5a(a,b){xqa(a,b);return a}c.Ma=function(a){return n5a(this,a)};c.oc=function(){};c.He=function(a,b,d){s8(this,a,b,d)};
+c.r=function(){return iT(S(),this)};c.ce=function(a){return dm(this,a)};c.Gk=function(a){return t8(this,a)};function xqa(a,b){if(a.bg===a.fj.n.length){T2a();var d=a.fj,e=d.n.length<<1,e=la(Xa(Va),[1<e?e:1]);Lv(Af(),d,0,e,0,d.n.length);a.fj=e}a.fj.n[a.bg]=b;a.bg=1+a.bg|0}c.zk=function(a){return u8(this,a)};c.Xb=function(a){return m5a(this,a)};c.oda=function(a,b){this.fj=a;this.bg=b;return this};c.Te=function(a,b){return v8(this,a,b)};
+c.$classData=g({Rja:0},!1,"scala.collection.mutable.ArrayStack",{Rja:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Sf:1,af:1,sd:1,qd:1,pd:1,k:1,h:1});function z5(){this.Pk=0;this.Tb=null;this.Uj=this.df=0;this.zf=null;this.Ek=0}z5.prototype=new N$;z5.prototype.constructor=z5;c=z5.prototype;c.jb=function(){return this};c.gx=function(a){return X$(this,a)};
+c.of=function(){return this};c.b=function(){z5.prototype.yda.call(this,null);return this};c.y=function(a){return null!==pna(this,a)};c.Qd=function(a){var b=(new z5).b();return X$(IC(b,this),a)};c.hc=function(){return this};c.cd=function(a){return Y$(this,a)};c.ad=function(){s2a||(s2a=(new $6).b());return s2a};c.ta=function(a){for(var b=0,d=this.Tb.n.length;b<d;){var e=this.Tb.n[b];null!==e&&a.y(pba(e));b=1+b|0}};c.qj=function(a){var b=(new z5).b(),b=IC(b,this);a=a.jb();return Pe(b,a)};
+c.hA=function(a){return Y$(this,a)};c.Da=function(){return this.df};c.Ba=function(){return this};c.Sa=function(){var a=new h3;if(null===this)throw pg(qg(),null);a.Qa=this;a.Ai=0;return a};c.Ki=function(a){var b=(new z5).b();return X$(IC(b,this),a)};c.Pi=function(){return(new z5).b()};c.FD=function(){var a=(new z5).b();return IC(a,this)};c.ab=function(a){return null!==pna(this,a)};
+c.yda=function(a){this.Pk=450;this.Tb=la(Xa(Va),[iD(hD(),32)]);this.df=0;this.Uj=nna().Sv(this.Pk,iD(hD(),32));this.zf=null;this.Ek=kna(this);null!==a&&(this.Pk=a.gfa(),this.Tb=a.jta(),this.df=a.df,this.Uj=a.Uj,this.Ek=a.Ek,this.zf=a.zf);return this};c.Ma=function(a){return Y$(this,a)};c.Mk=function(a){return X$(this,a)};function X$(a,b){ona(a,b);return a}c.Um=function(a){return ona(this,a)};c.vn=function(a){return lna(this,a)};c.Sg=function(a){var b=(new z5).b();return Y$(IC(b,this),a)};
+c.wl=function(a){var b=(new z5).b(),b=IC(b,this);a=a.jb();return IC(b,a)};function Y$(a,b){lna(a,b);return a}c.$classData=g({eka:0},!1,"scala.collection.mutable.HashSet",{eka:1,wZ:1,vZ:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,Qe:1,Re:1,Oe:1,VZ:1,lh:1,fa:1,ih:1,Dh:1,Hh:1,Eh:1,Mc:1,WZ:1,Dt:1,sd:1,qd:1,pd:1,kl:1,Pe:1,Zd:1,Ld:1,Vsa:1,Wsa:1,kd:1,k:1,h:1});function D3(){this.qa=null}D3.prototype=new S$;D3.prototype.constructor=D3;c=D3.prototype;c.X=function(a){return this.Ja(a)};
+c.y=function(a){return this.Ja(a|0)};c.Bf=function(a,b){this.qa.n[a]=!!b};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.m.zG)if(fA(),b=this.qa,a=a.qa,b===a)b=!0;else if(null!==b&&null!==a&&b.n.length===a.n.length){for(var d=iw(Ne(),b),d=dA(d),d=Ye(new Ze,d,0,d.sa()),e=!0;e&&d.ra();)e=d.ka()|0,e=Em(Fm(),b.n[e],a.n[e]);b=e}else b=!1;else b=H2(this,a);return b};c.Ja=function(a){return this.qa.n[a]};c.sa=function(){return this.qa.n.length};c.Bm=function(){return gma()};
+c.Rq=function(a){this.qa=a;return this};c.r=function(){for(var a=S(),b=this.qa,d=a.Fk,e=0;e<b.n.length;)d=a.ca(d,b.n[e]?1231:1237),e=1+e|0;return a.xb(d,b.n.length)};c.$classData=g({zG:0},!1,"scala.collection.mutable.WrappedArray$ofBoolean",{zG:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function x3(){this.qa=null}
+x3.prototype=new S$;x3.prototype.constructor=x3;c=x3.prototype;c.X=function(a){return this.qa.n[a]};c.y=function(a){return this.qa.n[a|0]};c.Bf=function(a,b){this.qa.n[a]=b|0};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.m.AG)if(fA(),b=this.qa,a=a.qa,b===a)b=!0;else if(null!==b&&null!==a&&b.n.length===a.n.length){for(var d=iw(Ne(),b),d=dA(d),d=Ye(new Ze,d,0,d.sa()),e=!0;e&&d.ra();)e=d.ka()|0,e=Em(Fm(),b.n[e],a.n[e]);b=e}else b=!1;else b=H2(this,a);return b};c.sa=function(){return this.qa.n.length};
+c.Bm=function(){return cma()};c.r=function(){for(var a=S(),b=this.qa,d=b.n.length,e=a.Fk,f=0;4<=d;)var h=255&b.n[f],h=h|(255&b.n[1+f|0])<<8,h=h|(255&b.n[2+f|0])<<16,h=h|(255&b.n[3+f|0])<<24,e=a.ca(e,h),f=4+f|0,d=-4+d|0;h=0;3===d&&(h^=(255&b.n[2+f|0])<<16);2<=d&&(h^=(255&b.n[1+f|0])<<8);1<=d&&(h^=255&b.n[f],e=a.vt(e,h));return a.xb(e,b.n.length)};c.Mq=function(a){this.qa=a;return this};
+c.$classData=g({AG:0},!1,"scala.collection.mutable.WrappedArray$ofByte",{AG:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function z3(){this.qa=null}z3.prototype=new S$;z3.prototype.constructor=z3;c=z3.prototype;c.X=function(a){a=this.To(a);return Oe(a)};c.y=function(a){a=this.To(a|0);return Oe(a)};
+c.Bf=function(a,b){this.qa.n[a]=null===b?0:b.W};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.m.BG)if(fA(),b=this.qa,a=a.qa,b===a)b=!0;else if(null!==b&&null!==a&&b.n.length===a.n.length){for(var d=iw(Ne(),b),d=dA(d),d=Ye(new Ze,d,0,d.sa()),e=!0;e&&d.ra();)e=d.ka()|0,e=Em(Fm(),Oe(b.n[e]),Oe(a.n[e]));b=e}else b=!1;else b=H2(this,a);return b};c.To=function(a){return this.qa.n[a]};c.sa=function(){return this.qa.n.length};c.Gm=function(a){this.qa=a;return this};c.Bm=function(){return ema()};
+c.r=function(){for(var a=S(),b=this.qa,d=a.Fk,e=0;e<b.n.length;)d=a.ca(d,b.n[e]),e=1+e|0;return a.xb(d,b.n.length)};c.$classData=g({BG:0},!1,"scala.collection.mutable.WrappedArray$ofChar",{BG:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function C3(){this.qa=null}C3.prototype=new S$;C3.prototype.constructor=C3;c=C3.prototype;
+c.X=function(a){return this.qa.n[a]};c.y=function(a){return this.qa.n[a|0]};c.Bf=function(a,b){this.qa.n[a]=+b};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.m.CG)if(fA(),b=this.qa,a=a.qa,b===a)b=!0;else if(null!==b&&null!==a&&b.n.length===a.n.length){for(var d=iw(Ne(),b),d=dA(d),d=Ye(new Ze,d,0,d.sa()),e=!0;e&&d.ra();)e=d.ka()|0,e=Em(Fm(),b.n[e],a.n[e]);b=e}else b=!1;else b=H2(this,a);return b};c.Nq=function(a){this.qa=a;return this};c.sa=function(){return this.qa.n.length};c.Bm=function(){return OB()};
+c.r=function(){for(var a=S(),b=this.qa,d=a.Fk,e=0;e<b.n.length;)d=a.ca(d,BE(V(),b.n[e])),e=1+e|0;return a.xb(d,b.n.length)};c.$classData=g({CG:0},!1,"scala.collection.mutable.WrappedArray$ofDouble",{CG:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function OA(){this.qa=null}OA.prototype=new S$;OA.prototype.constructor=OA;
+c=OA.prototype;c.X=function(a){return this.qa.n[a]};c.y=function(a){return this.qa.n[a|0]};c.Bf=function(a,b){this.qa.n[a]=+b};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.m.DG)if(fA(),b=this.qa,a=a.qa,b===a)b=!0;else if(null!==b&&null!==a&&b.n.length===a.n.length){for(var d=iw(Ne(),b),d=dA(d),d=Ye(new Ze,d,0,d.sa()),e=!0;e&&d.ra();)e=d.ka()|0,e=Em(Fm(),b.n[e],a.n[e]);b=e}else b=!1;else b=H2(this,a);return b};c.xp=function(a){this.qa=a;return this};c.sa=function(){return this.qa.n.length};
+c.Bm=function(){return ri()};c.r=function(){for(var a=S(),b=this.qa,d=a.Fk,e=0;e<b.n.length;)V(),d=a.ca(d,BE(0,b.n[e])),e=1+e|0;return a.xb(d,b.n.length)};c.$classData=g({DG:0},!1,"scala.collection.mutable.WrappedArray$ofFloat",{DG:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function A3(){this.qa=null}A3.prototype=new S$;
+A3.prototype.constructor=A3;c=A3.prototype;c.X=function(a){return this.Ia(a)};c.y=function(a){return this.Ia(a|0)};c.Bf=function(a,b){this.qa.n[a]=b|0};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.m.EG)if(fA(),b=this.qa,a=a.qa,b===a)b=!0;else if(null!==b&&null!==a&&b.n.length===a.n.length){for(var d=iw(Ne(),b),d=dA(d),d=Ye(new Ze,d,0,d.sa()),e=!0;e&&d.ra();)e=d.ka()|0,e=Em(Fm(),b.n[e],a.n[e]);b=e}else b=!1;else b=H2(this,a);return b};c.Ia=function(a){return this.qa.n[a]};
+c.Oq=function(a){this.qa=a;return this};c.sa=function(){return this.qa.n.length};c.Bm=function(){return NB()};c.r=function(){for(var a=S(),b=this.qa,d=a.Fk,e=0;e<b.n.length;)d=a.ca(d,b.n[e]),e=1+e|0;return a.xb(d,b.n.length)};
+c.$classData=g({EG:0},!1,"scala.collection.mutable.WrappedArray$ofInt",{EG:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function B3(){this.qa=null}B3.prototype=new S$;B3.prototype.constructor=B3;c=B3.prototype;c.X=function(a){return this.qa.n[a]};c.y=function(a){return this.qa.n[a|0]};c.Pq=function(a){this.qa=a;return this};
+c.Bf=function(a,b){b=Ra(b);this.qa.n[a]=b};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.m.FG)if(fA(),b=this.qa,a=a.qa,b===a)b=!0;else if(null!==b&&null!==a&&b.n.length===a.n.length){for(var d=iw(Ne(),b),d=dA(d),d=Ye(new Ze,d,0,d.sa()),e=!0;e&&d.ra();)e=d.ka()|0,e=Em(Fm(),b.n[e],a.n[e]);b=e}else b=!1;else b=H2(this,a);return b};c.sa=function(){return this.qa.n.length};c.Bm=function(){return fma()};
+c.r=function(){for(var a=S(),b=this.qa,d=a.Fk,e=0;e<b.n.length;)d=a.ca(d,DE(V(),b.n[e])),e=1+e|0;return a.xb(d,b.n.length)};c.$classData=g({FG:0},!1,"scala.collection.mutable.WrappedArray$ofLong",{FG:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function ci(){this.qa=this.dV=null;this.CD=!1}ci.prototype=new S$;
+ci.prototype.constructor=ci;c=ci.prototype;c.X=function(a){return this.qa.n[a]};c.y=function(a){return this.X(a|0)};c.Bf=function(a,b){this.qa.n[a]=b};c.o=function(a){return a&&a.$classData&&a.$classData.m.GG?tka(fA(),this.qa,a.qa):H2(this,a)};c.$h=function(a){this.qa=a;return this};c.sa=function(){return this.qa.n.length};c.Bm=function(){this.CD||this.CD||(this.dV=ura(vra(),Oz(oa(this.qa))),this.CD=!0);return this.dV};
+c.r=function(){for(var a=S(),b=this.qa,d=a.Fk,e=0;e<qC(W(),b);)d=a.ca(d,fC(V(),pD(W(),b,e))),e=1+e|0;return a.xb(d,qC(W(),b))};c.$classData=g({GG:0},!1,"scala.collection.mutable.WrappedArray$ofRef",{GG:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function y3(){this.qa=null}y3.prototype=new S$;y3.prototype.constructor=y3;
+c=y3.prototype;c.X=function(a){return this.qa.n[a]};c.y=function(a){return this.qa.n[a|0]};c.Qq=function(a){this.qa=a;return this};c.Bf=function(a,b){this.qa.n[a]=b|0};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.m.HG)if(fA(),b=this.qa,a=a.qa,b===a)b=!0;else if(null!==b&&null!==a&&b.n.length===a.n.length){for(var d=iw(Ne(),b),d=dA(d),d=Ye(new Ze,d,0,d.sa()),e=!0;e&&d.ra();)e=d.ka()|0,e=Em(Fm(),b.n[e],a.n[e]);b=e}else b=!1;else b=H2(this,a);return b};c.sa=function(){return this.qa.n.length};
+c.Bm=function(){return dma()};c.r=function(){for(var a=S(),b=this.qa,d=a.Fk,e=0;e<b.n.length;)d=a.ca(d,b.n[e]),e=1+e|0;return a.xb(d,b.n.length)};c.$classData=g({HG:0},!1,"scala.collection.mutable.WrappedArray$ofShort",{HG:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function E3(){this.qa=null}E3.prototype=new S$;
+E3.prototype.constructor=E3;c=E3.prototype;c.X=function(a){this.qa.n[a]};c.y=function(a){this.qa.n[a|0]};c.Bf=function(a,b){this.qa.n[a]=b};c.o=function(a){return a&&a.$classData&&a.$classData.m.XZ?this.qa.n.length===a.qa.n.length:H2(this,a)};c.sa=function(){return this.qa.n.length};c.Bm=function(){return hma()};c.Sq=function(a){this.qa=a;return this};c.r=function(){for(var a=S(),b=this.qa,d=a.Fk,e=0;e<b.n.length;)d=a.ca(d,0),e=1+e|0;return a.xb(d,b.n.length)};
+c.$classData=g({XZ:0},!1,"scala.collection.mutable.WrappedArray$ofUnit",{XZ:1,uo:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,kd:1,k:1,h:1});function zn(){this.Py=this.Dr=this.Mz=null;this.wo=0}zn.prototype=new P$;zn.prototype.constructor=zn;c=zn.prototype;c.of=function(){return this};
+c.X=function(a){if(0<=a&&a<this.wo)return this.Dr.X(a);throw(new O).c(""+a);};c.li=function(){return this};c.Bp=function(a){a=this.Mz=a;var b=new oD;oD.prototype.NV.call(b,0,a.bh(MD().eH),null,this,a);this.Py=this.Dr=b;this.wo=0;return this};c.y=function(a){return this.X(a|0)};c.Qd=function(a){var b=o5a(this);return O8(b,a)};c.Bf=function(a,b){if(0<=a&&a<this.wo)this.Dr.Bf(a,b);else throw(new O).c(""+a);};c.hc=function(){return this};c.cd=function(a){return p5a(this,a)};c.ta=function(a){this.Dr.ta(a)};
+c.qj=function(a){var b=o5a(this);a=a.jb();return Pe(b,a)};c.Yj=function(a){return p5a(this,a)};c.Ba=function(){return this};c.Sa=function(){var a=new v3;a.fd=-1;a.or=this.Dr;yya(a);return a};c.mg=function(a,b){JT(this,a,b)};c.sa=function(){return this.wo};c.Jh=function(){return this};
+c.mz=function(a){if(0<=a&&a<this.wo){this.wo=-1+this.wo|0;a:{var b=a;a=this.Dr;for(;;){if(b<a.xd){for(var d=pD(W(),a.Sh,b),e=a;b<(-1+e.xd|0);)qD(W(),e.Sh,b,pD(W(),e.Sh,1+b|0)),b=1+b|0;for(var f=1+b|0;b<f;)qD(W(),e.Sh,b,null),b=1+b|0;a.xd=-1+a.xd|0;b=a;null!==b.Vd&&(b.xd+b.Vd.xd|0)<(ea(qC(W(),b.Sh),MD().N_)/MD().O_|0)?(Lv(Af(),b.Vd.Sh,0,b.Sh,b.xd,b.Vd.xd),b.xd=b.xd+b.Vd.xd|0,b.Vd=b.Vd.Vd,b=null===b.Vd):b=!1;b&&(this.Py=a);break a}d=b-a.xd|0;a=a.Vd;b=d}}return d}throw(new O).c(""+a);};
+c.Za=function(a){return I2(this,a|0)};function o5a(a){var b=(new zn).Bp(a.Mz);return IC(b,a)}c.Ma=function(a){return p5a(this,a)};c.oc=function(){};c.Mk=function(a){return O8(this,a)};function p5a(a,b){a:{var d=a.Py;for(;;){if(d.xd<qC(W(),d.Sh)){qD(W(),d.Sh,d.xd,b);d.xd=1+d.xd|0;break a}d.Vd=(new oD).NV(0,d.fE.bh(Hna(d)),null,d.DD,d.fE);d=d.Vd}}a.Py=d;a.wo=1+a.wo|0;return a}c.db=function(){return(new zn).Bp(this.Mz)};c.qf=function(){return"UnrolledBuffer"};
+c.$classData=g({Mka:0},!1,"scala.collection.mutable.UnrolledBuffer",{Mka:1,uG:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,vG:1,wG:1,qd:1,pd:1,kl:1,Dt:1,Mc:1,Rsa:1,sd:1,k:1,h:1});function mc(){this.wg=this.ec=null;this.pp=!1;this.Wi=0}mc.prototype=new P$;mc.prototype.constructor=mc;c=mc.prototype;c.KV=function(a,b){return BP(this.ec,a,b)};c.Ig=function(a,b){pC(this.ec,a,b)};
+function z$(a){if(!a.z()){var b=a.ec,d=a.wg.Ka;for(a.ym();b!==d;)pc(a,b.Y()),b=b.$()}}c.of=function(){return this};c.Y=function(){return this.ec.Y()};c.b=function(){this.ec=u();this.pp=!1;this.Wi=0;return this};c.X=function(a){if(0>a||a>=this.Wi)throw(new O).c(""+a);return mi(this.ec,a)};c.li=function(){return this};c.vb=function(a){return ng(this.ec,a)};c.xE=function(a){return z8(this.ec,a,0)};c.Ze=function(a){return VD(this.ec,a)};c.y=function(a){return this.X(a|0)};
+c.Le=function(a){return w8(this.ec,a)};c.Qd=function(a){return q5a(Rk((new mc).b(),this),a)};c.wb=function(){this.pp=!this.z();return this.ec};c.z=function(){return 0===this.Wi};c.Bf=function(a,b){if(0>a||a>=this.Wi)throw(new O).c(""+a);this.pp&&z$(this);if(0===a){var d=Og(new Pg,b,this.ec.$());this.wg===this.ec&&(this.wg=d);this.ec=d}else{for(var d=this.ec,e=1;e<a;)d=d.$(),e=1+e|0;a=Og(new Pg,b,d.$().$());this.wg===d.$()&&(this.wg=a);d.Ka=a}};c.hc=function(){return this};
+c.o=function(a){return a&&a.$classData&&a.$classData.m.TZ?this.ec.o(a.ec):H2(this,a)};c.ND=function(a){return Gma(this.ec,a)};c.Ab=function(a){return ec(this.ec,"",a,"")};c.Qc=function(a,b,d){return ec(this.ec,a,b,d)};c.cd=function(a){return pc(this,a)};c.ee=function(a){return x8(this.ec,a)};c.ad=function(){V2a||(V2a=(new E7).b());return V2a};c.ta=function(a){for(var b=this.ec;!b.z();)a.y(b.Y()),b=b.$()};c.Ib=function(a,b){return y8(this.ec,a,b)};c.Si=function(a,b){return this.ec.Si(a,b)};
+c.mf=function(a,b){return z8(this.ec,a,b)};c.qj=function(a){var b=Rk((new mc).b(),this);a=a.jb();return Pe(b,a)};c.Lg=function(){return Wj(this.ec)};c.Yj=function(a){return pc(this,a)};c.Da=function(){return this.Wi};c.ae=function(){var a=this.ec,b=P_().s;return K(a,b)};c.Ba=function(){return this.wb()};c.Sa=function(){var a=new s3;a.Ju=this.z()?u():this.ec;return a};c.mg=function(a,b){JT(this,a,b)};c.rk=function(a){return A8(this.ec,a)};c.Wn=function(){return null===this.wg?C():(new H).i(this.wg.Eb)};
+c.Zf=function(){return ec(this.ec,"","","")};c.sa=function(){return this.Wi};c.Jh=function(){return this};c.mz=function(a){if(0>a||a>=this.Wi)throw(new O).c(""+a);this.pp&&z$(this);var b=this.ec.Y();if(0===a)this.ec=this.ec.$();else{for(var d=this.ec,b=1;b<a;)d=d.$(),b=1+b|0;b=d.$().Y();this.wg===d.$()&&(this.wg=d);d.Ka=d.$().$()}r5a(this);return b};
+function q5a(a,b){a.pp&&z$(a);if(!a.z())if(Em(Fm(),a.ec.Y(),b))a.ec=a.ec.$(),r5a(a);else{for(var d=a.ec;!d.$().z()&&!Em(Fm(),d.$().Y(),b);)d=d.$();if(!d.$().z()){b=d;var e=b.Ka,f=a.wg;if(null===e?null===f:e.o(f))a.wg=b;b.Ka=d.$().$();r5a(a)}}return a}c.Oc=function(){return this.ec.Oc()};c.nd=function(){if(null===this.wg)throw(new Bu).c("last of empty ListBuffer");return this.wg.Eb};function r5a(a){a.Wi=a.Wi-1|0;0>=a.Wi&&(a.wg=null)}c.ab=function(a){return B8(this.ec,a)};
+c.cg=function(a,b,d,e){return uC(this.ec,a,b,d,e)};function pc(a,b){a.pp&&z$(a);if(a.z())a.wg=Og(new Pg,b,u()),a.ec=a.wg;else{var d=a.wg;a.wg=Og(new Pg,b,u());d.Ka=a.wg}a.Wi=1+a.Wi|0;return a}c.Nc=function(){return this.ec};c.Za=function(a){return C8(this.ec,a|0)};c.fA=function(a){return q5a(this,a)};c.Fp=function(a){return C8(this.ec,a)};c.md=function(){var a=this.ec,b=Yk(),b=Zk(b);return K(a,b)};c.Ff=function(a,b){return y8(this.ec,a,b)};c.Ma=function(a){return pc(this,a)};
+c.Ml=function(a){return BP(this.ec,a,0)};c.oc=function(){};c.He=function(a,b,d){J2a(this.ec,a,b,d)};c.De=function(){for(var a=this.ec,b=fc(new gc,hc());!a.z();){var d=a.Y();ic(b,d);a=a.$()}return b.Va};c.og=function(a){return wC(this.ec,a)};c.Mk=function(a){return q5a(this,a)};c.ym=function(){this.ec=u();this.wg=null;this.pp=!1;this.Wi=0};c.Ce=function(a){return xC(this.ec,a)};c.Ye=function(){return 0<this.Wi};
+function Rk(a,b){a:for(;;){var d=b;if(null!==d&&d===a){b=H2a(a,a.Wi);continue a}return IC(a,b)}}c.zk=function(a){return u3a(this.ec,a)};c.Xb=function(a){return Rk(this,a)};c.qf=function(){return"ListBuffer"};
+c.$classData=g({TZ:0},!1,"scala.collection.mutable.ListBuffer",{TZ:1,uG:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,vG:1,wG:1,qd:1,pd:1,kl:1,Dt:1,Mc:1,ji:1,sd:1,Tsa:1,Ssa:1,Usa:1,k:1,h:1});function Bl(){this.Bb=null}Bl.prototype=new C9;Bl.prototype.constructor=Bl;c=Bl.prototype;c.jb=function(){return this};c.Y=function(){return Dj(this)};
+function zoa(a,b){Cl(a,b);return a}c.b=function(){Bl.prototype.yp.call(this,16,"");return this};c.X=function(a){a=Uwa(this.Bb,a);return Oe(a)};c.li=function(){return this};c.vb=function(a){return f8(this,a)};c.Ze=function(a){return g8(this,a)};c.y=function(a){a=Uwa(this.Bb,a|0);return Oe(a)};c.Le=function(a){return h8(this,a)};c.z=function(){return O2(this)};c.ne=function(){return this};
+c.Bf=function(a,b){var d=this.Bb;b=null===b?0:b.W;var e=d.Yb;if(0>a||a>=(e.length|0))throw(new hE).hb(a);d.Yb=""+e.substring(0,a)+Oe(b)+e.substring(1+a|0)};c.hc=function(){return this};c.Bw=function(a,b){return this.Bb.Yb.substring(a,b)};c.To=function(a){return Uwa(this.Bb,a)};c.ok=function(a){return i8(this,a)};c.cd=function(a){return zoa(this,null===a?0:a.W)};c.ee=function(a){return j8(this,a)};c.Xe=function(){return k8(this)};c.ad=function(){return EFa()};c.l=function(){return this.Bb.Yb};
+c.ta=function(a){l8(this,a)};c.Ib=function(a,b){var d=this.Bb.sa();return r8(this,0,d,a,b)};c.Si=function(a,b){var d=this.Bb.sa();return q8(this,d,a,b)};c.Hg=function(a){var b=this.Bb.Yb;return b===a?0:b<a?-1:1};c.mf=function(a,b){return m8(this,a,b)};c.Af=function(a,b){return C3a(this,a,b)};c.Qf=function(){return(new Bl).rv(Twa((new O0).YE(this.Bb)))};c.ae=function(){return c8(this)};c.Ba=function(){return this.Bb.Yb};function zr(a,b){var d=a.Bb;d.Yb=""+d.Yb+b;return a}
+c.Sa=function(){return Ye(new Ze,this,0,this.Bb.sa())};c.cn=function(){return this};c.mg=function(a,b){JT(this,a,b)};c.rk=function(a){return o8(this,a)};c.hb=function(a){Bl.prototype.yp.call(this,a,"");return this};c.yp=function(a,b){a=(new O0).hb((b.length|0)+a|0);a.Yb=""+a.Yb+b;Bl.prototype.rv.call(this,a);return this};c.Zf=function(){return this.Bb.Yb};c.Xj=function(a){return p8(this,a)};c.sa=function(){return this.Bb.sa()};c.Jh=function(){return this};c.yf=function(){return this.Bb.sa()};
+c.nd=function(){return em(this)};c.de=function(a){var b=this.Bb.sa();return C3a(this,a,b)};c.$=function(){return Uj(this)};c.ie=function(){return this};c.rv=function(a){this.Bb=a;return this};function Ar(a,b){var d=a.Bb;d.Yb+=""+b;return a}c.Za=function(a){return I2(this,a|0)};c.Ma=function(a){return zoa(this,null===a?0:a.W)};c.oc=function(){};c.He=function(a,b,d){s8(this,a,b,d)};c.r=function(){return iT(S(),this)};c.ce=function(a){return dm(this,a)};c.Gk=function(a){return t8(this,a)};
+c.Ce=function(){return fE(Ia(),this.Bb.Yb)};function Cl(a,b){YS(a.Bb,b);return a}c.zk=function(a){return u8(this,a)};c.db=function(){return exa(new i1,(new Bl).b())};c.Xb=function(a){return IC(this,a)};c.Te=function(a,b){return v8(this,a,b)};
+c.$classData=g({Kka:0},!1,"scala.collection.mutable.StringBuilder",{Kka:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,Hv:1,Sj:1,xg:1,Pd:1,xf:1,rZ:1,af:1,Ym:1,Md:1,ji:1,sd:1,qd:1,pd:1,k:1,h:1});function J(){this.qa=null}J.prototype=new P$;J.prototype.constructor=J;c=J.prototype;c.jb=function(){return this};c.of=function(){return this};c.Y=function(){return Dj(this)};
+c.b=function(){J.prototype.j.call(this,[]);return this};c.X=function(a){return this.qa[a]};c.li=function(){return this};c.vb=function(a){return f8(this,a)};c.Ze=function(a){return g8(this,a)};c.y=function(a){return this.qa[a|0]};c.Le=function(a){return h8(this,a)};c.Qd=function(a){return N8(this).fA(a)};c.z=function(){return O2(this)};c.ne=function(){return this};c.Bf=function(a,b){this.qa[a]=b};c.hc=function(){return this};c.ok=function(a){return i8(this,a)};c.cd=function(a){this.qa.push(a);return this};
+c.ee=function(a){return j8(this,a)};c.Xe=function(){return k8(this)};c.ad=function(){return hn()};c.ta=function(a){l8(this,a)};c.Ib=function(a,b){return r8(this,0,this.qa.length|0,a,b)};c.Si=function(a,b){return q8(this,this.qa.length|0,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.qj=function(a){var b=N8(this);a=a.jb();return Pe(b,a)};c.Yj=function(a){this.qa.push(a);return this};c.Af=function(a,b){return n8(this,a,b)};c.Qf=function(){return Vw(this)};c.ae=function(){return c8(this)};c.Ba=function(){return this};
+c.Sa=function(){return Ye(new Ze,this,0,this.qa.length|0)};c.cn=function(){return this};c.mg=function(a,b){JT(this,a,b)};c.rk=function(a){return o8(this,a)};c.sa=function(){return this.qa.length|0};c.Xj=function(a){return p8(this,a)};c.Jh=function(){return this};c.yf=function(){return this.qa.length|0};c.mz=function(a){if(0>a||a>=(this.qa.length|0))throw(new O).b();return this.qa.splice(a,1)[0]};c.nd=function(){return em(this)};c.de=function(a){return n8(this,a,this.qa.length|0)};c.$=function(){return Uj(this)};
+c.ie=function(){return this};c.Za=function(a){return I2(this,a|0)};c.Ma=function(a){this.qa.push(a);return this};c.oc=function(){};c.He=function(a,b,d){s8(this,a,b,d)};c.r=function(){return iT(S(),this)};c.Mk=function(a){return O8(this,a)};c.ce=function(a){return dm(this,a)};c.Gk=function(a){return t8(this,a)};c.j=function(a){this.qa=a;return this};c.zk=function(a){return u8(this,a)};c.qf=function(){return"WrappedArray"};c.Te=function(a,b){return v8(this,a,b)};
+function Ju(a){return!!(a&&a.$classData&&a.$classData.m.b_)}c.$classData=g({b_:0},!1,"scala.scalajs.js.WrappedArray",{b_:1,uG:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,vG:1,wG:1,qd:1,pd:1,kl:1,Dt:1,Mc:1,Sj:1,xg:1,Pd:1,xf:1,Ag:1,Sf:1,af:1,sd:1});function M2(){this.VV=0;this.qa=null;this.Zc=0}M2.prototype=new P$;M2.prototype.constructor=M2;c=M2.prototype;c.jb=function(){return this};
+c.of=function(){return this};function N2(a,b){M4a(a,1+a.Zc|0);a.qa.n[a.Zc]=b;a.Zc=1+a.Zc|0;return a}c.Y=function(){return Dj(this)};c.b=function(){M2.prototype.hb.call(this,16);return this};c.X=function(a){return L4a(this,a)};function eya(a,b,d){if(0>d)throw(new Re).c("removing negative number of elements: "+d);if(0!==d){if(0>b||b>(a.Zc-d|0))throw(new O).c("at "+b+" deleting "+d);Pa(a.qa,b+d|0,a.qa,b,a.Zc-(b+d|0)|0);b=a.Zc-d|0;for(ZD(Ne(),b<=a.Zc);a.Zc>b;)a.Zc=-1+a.Zc|0,a.qa.n[a.Zc]=null}}c.li=function(){return this};
+c.vb=function(a){return f8(this,a)};c.Ze=function(a){return g8(this,a)};c.y=function(a){return L4a(this,a|0)};c.Le=function(a){return h8(this,a)};c.Qd=function(a){return N8(this).fA(a)};c.z=function(){return O2(this)};c.ne=function(){return this};c.Bf=function(a,b){if(a>=this.Zc)throw(new O).c(""+a);this.qa.n[a]=b};c.hc=function(){return this};c.ok=function(a){return i8(this,a)};c.cd=function(a){return N2(this,a)};c.ee=function(a){return j8(this,a)};c.Xe=function(){return k8(this)};c.ad=function(){return P_()};
+c.ta=function(a){for(var b=0,d=this.Zc;b<d;)a.y(this.qa.n[b]),b=1+b|0};c.Ib=function(a,b){return r8(this,0,this.Zc,a,b)};c.Si=function(a,b){return q8(this,this.Zc,a,b)};c.mf=function(a,b){return m8(this,a,b)};c.qj=function(a){var b=N8(this);a=a.jb();return Pe(b,a)};c.Yj=function(a){return N2(this,a)};c.Af=function(a,b){return n8(this,a,b)};c.Qf=function(){return Vw(this)};c.ae=function(){return c8(this)};c.Ba=function(){return this};c.Sa=function(){return Ye(new Ze,this,0,this.Zc)};c.cn=function(){return this};
+c.mg=function(a,b){JT(this,a,b)};c.rk=function(a){return o8(this,a)};c.hb=function(a){a=this.VV=a;this.qa=la(Xa(Va),[1<a?a:1]);this.Zc=0;return this};c.Xj=function(a){return p8(this,a)};c.sa=function(){return this.Zc};c.Jh=function(){return this};c.yf=function(){return this.Zc};c.mz=function(a){var b=L4a(this,a);eya(this,a,1);return b};c.nd=function(){return em(this)};c.de=function(a){return n8(this,a,this.Zc)};c.$=function(){return Uj(this)};c.ie=function(){return this};
+function fya(a,b){if(b&&b.$classData&&b.$classData.m.Pd){var d=b.sa();M4a(a,a.Zc+d|0);b.He(a.qa,a.Zc,d);a.Zc=a.Zc+d|0;return a}return IC(a,b)}c.Za=function(a){return I2(this,a|0)};c.Ma=function(a){return N2(this,a)};c.oc=function(a){a>this.Zc&&1<=a&&(a=la(Xa(Va),[a]),Pa(this.qa,0,a,0,this.Zc),this.qa=a)};c.He=function(a,b,d){var e=qC(W(),a)-b|0;d=d<e?d:e;e=this.Zc;d=d<e?d:e;0<d&&Lv(Af(),this.qa,0,a,b,d)};c.r=function(){return iT(S(),this)};c.Mk=function(a){return O8(this,a)};
+c.ce=function(a){return dm(this,a)};c.Gk=function(a){return t8(this,a)};c.zk=function(a){return u8(this,a)};c.Xb=function(a){return fya(this,a)};c.qf=function(){return"ArrayBuffer"};c.Te=function(a,b){return v8(this,a,b)};
+c.$classData=g({Cja:0},!1,"scala.collection.mutable.ArrayBuffer",{Cja:1,uG:1,oh:1,$e:1,Nb:1,Ob:1,d:1,Lb:1,qb:1,rb:1,ib:1,Ga:1,Fa:1,nb:1,pb:1,Jb:1,Mb:1,Kb:1,Gb:1,mb:1,ob:1,q:1,me:1,Ha:1,fa:1,le:1,Xc:1,Yc:1,ph:1,Qe:1,Re:1,Oe:1,qh:1,Pe:1,Zd:1,Ld:1,vG:1,wG:1,qd:1,pd:1,kl:1,Dt:1,Mc:1,Sf:1,xf:1,Pd:1,af:1,sd:1,Zsa:1,Sj:1,xg:1,kd:1,k:1,h:1});function Z$(){this.Jy=this.wu=this.cv=this.Qy=this.Cy=null}Z$.prototype=new l;Z$.prototype.constructor=Z$;c=Z$.prototype;c.YY=function(){};
+c.b=function(){s5a=this;$aa(this);Xqa(this);this.oG((new K0).nv(this));this.pG(Rwa());var a=new Z5;Wx(a);Fd(a);Ry(a);KR(a);(new U8).QE(this);(new $5).QE(this);(new q2).ov(this);(new lS).ov(this);(new J8).ov(this);a=new pY;a.Er(nR(a));a=new R8;Ed(a);ky(a);Wx(a);Jy(a);DR(a);ER(a);FR(a);GR(a);Fd(a);Ry(a);HR(a);IR(a);JR(a);Pd(a);Od(a);KR(a);eR(a);(new p2).Yg(this);(new jY).Yg(this);(new kY).Yg(this);(new lY).Yg(this);(new mY).Yg(this);(new nY).Yg(this);(new oY).Yg(this);(new F0).Yg(this);(new G0).Yg(this);
+(new H0).Yg(this);a=new g7;Cd(a);a.mG(bva(a));a.lG(Sqa(a));a.nG(cva(a));ix(a);a.eG(rFa(a));a.gG(Fwa(a));var b=new S4;if(null===a)throw pg(qg(),null);b.Qa=a;a.bZ=b;(new qY).RE(this);(new rY).RE(this);(new b6).UE(this);(new sY).UE(this);aba(this);a=new t2;hx(a);Bd(a);iz(a);(new a6).SE(this);(new U4).SE(this);a=new N7;Ed(a);ky(a);DR(a);ER(a);FR(a);GR(a);this.hG(Hqa());return this};c.PY=function(){};c.QY=function(){};c.TY=function(a){this.Jy=a};c.$Y=function(a){this.cv=a};c.ZY=function(){};c.NY=function(){};
+c.dZ=function(){};c.pG=function(){};c.XY=function(){};c.MY=function(){};c.RY=function(){};c.OY=function(){};c.SY=function(){};c.oG=function(a){this.Qy=a};c.WY=function(){};c.aZ=function(){};c.cZ=function(){};c.UY=function(){};c.hG=function(a){this.Cy=a};c.VY=function(){};c.LY=function(){};
+c.$classData=g({saa:0},!1,"scalaz.Scalaz$",{saa:1,d:1,Baa:1,F$:1,cra:1,Sqa:1,Hqa:1,tqa:1,Tqa:1,Kqa:1,sqa:1,Lqa:1,Mqa:1,Nqa:1,Oqa:1,Kca:1,Lca:1,Mca:1,Nca:1,mqa:1,nqa:1,Npa:1,Opa:1,Jpa:1,Kpa:1,Xpa:1,Ypa:1,Cqa:1,Dqa:1,iqa:1,jqa:1,gqa:1,hqa:1,Tpa:1,Upa:1,oqa:1,pqa:1,Lpa:1,Mpa:1,Eqa:1,Fqa:1,Pca:1,Qca:1,aT:1,bT:1,Vpa:1,Wpa:1,Rpa:1,Spa:1,Zpa:1,$pa:1,kqa:1,lqa:1,cqa:1,dqa:1,Ppa:1,Qpa:1,Uqa:1,Vqa:1,Xqa:1,Yqa:1,Pqa:1,Qqa:1,eqa:1,fqa:1,hra:1,ira:1,dra:1,era:1,Gqa:1,Bqa:1,Aqa:1,uqa:1,vqa:1,$qa:1,ara:1,Iqa:1,
+Jqa:1,aqa:1,bqa:1,Hpa:1,Ipa:1,qqa:1,wqa:1,bra:1,Rqa:1,gra:1,Wqa:1,fra:1,xqa:1,yqa:1,rqa:1,Oca:1,Zqa:1,zqa:1,Goa:1,$aa:1,Cba:1,Fba:1,Gba:1,Jba:1,Mba:1,Noa:1,Qoa:1,Roa:1,Ooa:1,Poa:1,Soa:1,Oba:1,Qba:1,Uoa:1,Yoa:1,Woa:1,bpa:1,epa:1,dpa:1,cpa:1,gpa:1,hpa:1,Koa:1,Loa:1,Ioa:1,Joa:1,Toa:1,fpa:1,mpa:1,pca:1,opa:1,kpa:1,jpa:1,ipa:1,lpa:1,Foa:1,Iba:1,Nba:1,Voa:1,Hoa:1,npa:1,Xoa:1,Bba:1,mra:1,nra:1,ura:1,tra:1,rra:1,vra:1,zra:1,qra:1,pra:1,wra:1,yra:1,sra:1,ora:1,xra:1,C$:1});var s5a=void 0;
+function fq(){s5a||(s5a=(new Z$).b())}for(var t5a=[[[],function(){return(new FS).b()}]],u5a=Wv(),v5a=pa(qra),w5a=[],$$=0,x5a=t5a.length|0;$$<x5a;){var y5a=t5a[$$],z5a=y5a[0],A5a=x().s.Tg(),B5a=z5a.length|0;switch(B5a){case -1:break;default:A5a.oc(B5a)}A5a.Xb((new J).j(z5a));var C5a=new YD,D5a=A5a.Ba(),E5a=y5a[1];C5a.OF=D5a;C5a.eX=E5a;w5a.push(C5a);$$=1+$$|0}var F5a=u5a.vv,G5a=x().s.Tg(),H5a=w5a.length|0;switch(H5a){case -1:break;default:G5a.oc(H5a)}G5a.Xb((new J).j(w5a));
+F5a.Co("utest.runner.Framework",function(a,b,d){a.am=b;a.LU=d;return a}(new UD,v5a,G5a.Ba()));ca.BrowserCompiler=function(){var a=new Bp;Bp.prototype.b.call(a);return a};ca.BrowserCompiler.prototype=Bp.prototype;ca.Converter=Ifa();ca.Nobody=Lfa();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){Uha||(Uha=(new ow).b());for(var b=[],d=0,e=a.length|0;d<e;){for(var f=a[d],h=f.length|0,k=0;;){var n;if(n=k<h){n=f[k];var r;r=n;r=Wv().vv.gc(r);r.z()?r=!1:(r=r.R(),r=Qk(pa(zd),r.am));if(!r){var y=aa.exportsNamespace;n=(new Tb).c(n);n=bi(n,46);r=n.n.length;var E=0;a:for(;;){if(E!==r){var Q=n.n[E],y=void 0===y?void 0:y[Q],E=1+E|0;continue a}break}r=void 0!==y}n=!r}if(n)k=1+k|0;else break}h=k;f=h<(f.length|0)?(new H).i(f[h]):C();f=f.z()?
+void 0:f.R();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 qw;qw.prototype.c.call(b,a);return b};ca.org.scalajs.testinterface.internal.InfoSender.prototype=qw.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(){DQ||(DQ=(new CQ).b());return DQ};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 LQ;LQ.prototype.c.call(b,a);return b};ca.org.scalajs.testinterface.internal.Master.prototype=LQ.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 MQ;MQ.prototype.sda.call(e,a,b,d);return e};ca.org.scalajs.testinterface.internal.Slave.prototype=MQ.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){
+// 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.
+
+'use strict';
+
+/*<replacement>*/
+
+var Buffer = require('safe-buffer').Buffer;
+/*</replacement>*/
+
+var isEncoding = Buffer.isEncoding || function (encoding) {
+  encoding = '' + 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 _normalizeEncoding(enc) {
+  if (!enc) return 'utf8';
+  var retried;
+  while (true) {
+    switch (enc) {
+      case 'utf8':
+      case 'utf-8':
+        return 'utf8';
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return 'utf16le';
+      case 'latin1':
+      case 'binary':
+        return 'latin1';
+      case 'base64':
+      case 'ascii':
+      case 'hex':
+        return enc;
+      default:
+        if (retried) return; // undefined
+        enc = ('' + enc).toLowerCase();
+        retried = true;
+    }
+  }
+};
+
+// Do not cache `Buffer.isEncoding` when checking encoding names as some
+// modules monkey-patch it to support additional encodings
+function normalizeEncoding(enc) {
+  var nenc = _normalizeEncoding(enc);
+  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
+  return nenc || enc;
+}
+
+// StringDecoder provides an interface for efficiently splitting a series of
+// buffers into a series of JS strings without breaking apart multi-byte
+// characters.
+exports.StringDecoder = StringDecoder;
+function StringDecoder(encoding) {
+  this.encoding = normalizeEncoding(encoding);
+  var nb;
+  switch (this.encoding) {
+    case 'utf16le':
+      this.text = utf16Text;
+      this.end = utf16End;
+      nb = 4;
+      break;
+    case 'utf8':
+      this.fillLast = utf8FillLast;
+      nb = 4;
+      break;
+    case 'base64':
+      this.text = base64Text;
+      this.end = base64End;
+      nb = 3;
+      break;
+    default:
+      this.write = simpleWrite;
+      this.end = simpleEnd;
+      return;
+  }
+  this.lastNeed = 0;
+  this.lastTotal = 0;
+  this.lastChar = Buffer.allocUnsafe(nb);
+}
+
+StringDecoder.prototype.write = function (buf) {
+  if (buf.length === 0) return '';
+  var r;
+  var i;
+  if (this.lastNeed) {
+    r = this.fillLast(buf);
+    if (r === undefined) return '';
+    i = this.lastNeed;
+    this.lastNeed = 0;
+  } else {
+    i = 0;
+  }
+  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
+  return r || '';
+};
+
+StringDecoder.prototype.end = utf8End;
+
+// Returns only complete characters in a Buffer
+StringDecoder.prototype.text = utf8Text;
+
+// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
+StringDecoder.prototype.fillLast = function (buf) {
+  if (this.lastNeed <= buf.length) {
+    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
+    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+  }
+  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
+  this.lastNeed -= buf.length;
+};
+
+// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
+// continuation byte. If an invalid byte is detected, -2 is returned.
+function utf8CheckByte(byte) {
+  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
+  return byte >> 6 === 0x02 ? -1 : -2;
+}
+
+// Checks at most 3 bytes at the end of a Buffer in order to detect an
+// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
+// needed to complete the UTF-8 character (if applicable) are returned.
+function utf8CheckIncomplete(self, buf, i) {
+  var j = buf.length - 1;
+  if (j < i) return 0;
+  var nb = utf8CheckByte(buf[j]);
+  if (nb >= 0) {
+    if (nb > 0) self.lastNeed = nb - 1;
+    return nb;
+  }
+  if (--j < i || nb === -2) return 0;
+  nb = utf8CheckByte(buf[j]);
+  if (nb >= 0) {
+    if (nb > 0) self.lastNeed = nb - 2;
+    return nb;
+  }
+  if (--j < i || nb === -2) return 0;
+  nb = utf8CheckByte(buf[j]);
+  if (nb >= 0) {
+    if (nb > 0) {
+      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
+    }
+    return nb;
+  }
+  return 0;
+}
+
+// Validates as many continuation bytes for a multi-byte UTF-8 character as
+// needed or are available. If we see a non-continuation byte where we expect
+// one, we "replace" the validated continuation bytes we've seen so far with
+// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
+// behavior. The continuation byte check is included three times in the case
+// where all of the continuation bytes for a character exist in the same buffer.
+// It is also done this way as a slight performance increase instead of using a
+// loop.
+function utf8CheckExtraBytes(self, buf, p) {
+  if ((buf[0] & 0xC0) !== 0x80) {
+    self.lastNeed = 0;
+    return '\ufffd';
+  }
+  if (self.lastNeed > 1 && buf.length > 1) {
+    if ((buf[1] & 0xC0) !== 0x80) {
+      self.lastNeed = 1;
+      return '\ufffd';
+    }
+    if (self.lastNeed > 2 && buf.length > 2) {
+      if ((buf[2] & 0xC0) !== 0x80) {
+        self.lastNeed = 2;
+        return '\ufffd';
+      }
+    }
+  }
+}
+
+// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
+function utf8FillLast(buf) {
+  var p = this.lastTotal - this.lastNeed;
+  var r = utf8CheckExtraBytes(this, buf, p);
+  if (r !== undefined) return r;
+  if (this.lastNeed <= buf.length) {
+    buf.copy(this.lastChar, p, 0, this.lastNeed);
+    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+  }
+  buf.copy(this.lastChar, p, 0, buf.length);
+  this.lastNeed -= buf.length;
+}
+
+// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
+// partial character, the character's bytes are buffered until the required
+// number of bytes are available.
+function utf8Text(buf, i) {
+  var total = utf8CheckIncomplete(this, buf, i);
+  if (!this.lastNeed) return buf.toString('utf8', i);
+  this.lastTotal = total;
+  var end = buf.length - (total - this.lastNeed);
+  buf.copy(this.lastChar, 0, end);
+  return buf.toString('utf8', i, end);
+}
+
+// For UTF-8, a replacement character is added when ending on a partial
+// character.
+function utf8End(buf) {
+  var r = buf && buf.length ? this.write(buf) : '';
+  if (this.lastNeed) return r + '\ufffd';
+  return r;
+}
+
+// UTF-16LE typically needs two bytes per character, but even if we have an even
+// number of bytes available, we need to check if we end on a leading/high
+// surrogate. In that case, we need to wait for the next two bytes in order to
+// decode the last character properly.
+function utf16Text(buf, i) {
+  if ((buf.length - i) % 2 === 0) {
+    var r = buf.toString('utf16le', i);
+    if (r) {
+      var c = r.charCodeAt(r.length - 1);
+      if (c >= 0xD800 && c <= 0xDBFF) {
+        this.lastNeed = 2;
+        this.lastTotal = 4;
+        this.lastChar[0] = buf[buf.length - 2];
+        this.lastChar[1] = buf[buf.length - 1];
+        return r.slice(0, -1);
+      }
+    }
+    return r;
+  }
+  this.lastNeed = 1;
+  this.lastTotal = 2;
+  this.lastChar[0] = buf[buf.length - 1];
+  return buf.toString('utf16le', i, buf.length - 1);
+}
+
+// For UTF-16LE we do not explicitly append special replacement characters if we
+// end on a partial character, we simply let v8 handle that.
+function utf16End(buf) {
+  var r = buf && buf.length ? this.write(buf) : '';
+  if (this.lastNeed) {
+    var end = this.lastTotal - this.lastNeed;
+    return r + this.lastChar.toString('utf16le', 0, end);
+  }
+  return r;
+}
+
+function base64Text(buf, i) {
+  var n = (buf.length - i) % 3;
+  if (n === 0) return buf.toString('base64', i);
+  this.lastNeed = 3 - n;
+  this.lastTotal = 3;
+  if (n === 1) {
+    this.lastChar[0] = buf[buf.length - 1];
+  } else {
+    this.lastChar[0] = buf[buf.length - 2];
+    this.lastChar[1] = buf[buf.length - 1];
+  }
+  return buf.toString('base64', i, buf.length - n);
+}
+
+function base64End(buf) {
+  var r = buf && buf.length ? this.write(buf) : '';
+  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
+  return r;
+}
+
+// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
+function simpleWrite(buf) {
+  return buf.toString(this.encoding);
+}
+
+function simpleEnd(buf) {
+  return buf && buf.length ? this.write(buf) : '';
+}
+},{"safe-buffer":32}],4:[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":5}],5:[function(require,module,exports){
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <https://feross.org>
+ * @license  MIT
+ */
+/* eslint-disable no-proto */
+
+'use strict'
+
+var base64 = require('base64-js')
+var ieee754 = require('ieee754')
+
+exports.Buffer = Buffer
+exports.SlowBuffer = SlowBuffer
+exports.INSPECT_MAX_BYTES = 50
+
+var K_MAX_LENGTH = 0x7fffffff
+exports.kMaxLength = K_MAX_LENGTH
+
+/**
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
+ *   === true    Use Uint8Array implementation (fastest)
+ *   === false   Print warning and recommend using `buffer` v4.x which has an 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+.
+ *
+ * We report that the browser does not support typed arrays if the are not subclassable
+ * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
+ * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
+ * for __proto__ and has a buggy typed array implementation.
+ */
+Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
+
+if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
+    typeof console.error === 'function') {
+  console.error(
+    'This browser lacks typed array (Uint8Array) support which is required by ' +
+    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
+  )
+}
+
+function typedArraySupport () {
+  // Can typed array instances can be augmented?
+  try {
+    var arr = new Uint8Array(1)
+    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
+    return arr.foo() === 42
+  } catch (e) {
+    return false
+  }
+}
+
+Object.defineProperty(Buffer.prototype, 'parent', {
+  enumerable: true,
+  get: function () {
+    if (!Buffer.isBuffer(this)) return undefined
+    return this.buffer
+  }
+})
+
+Object.defineProperty(Buffer.prototype, 'offset', {
+  enumerable: true,
+  get: function () {
+    if (!Buffer.isBuffer(this)) return undefined
+    return this.byteOffset
+  }
+})
+
+function createBuffer (length) {
+  if (length > K_MAX_LENGTH) {
+    throw new RangeError('The value "' + length + '" is invalid for option "size"')
+  }
+  // Return an augmented `Uint8Array` instance
+  var buf = new Uint8Array(length)
+  buf.__proto__ = Buffer.prototype
+  return buf
+}
+
+/**
+ * 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) {
+  // Common case.
+  if (typeof arg === 'number') {
+    if (typeof encodingOrOffset === 'string') {
+      throw new TypeError(
+        'The "string" argument must be of type string. Received type number'
+      )
+    }
+    return allocUnsafe(arg)
+  }
+  return from(arg, encodingOrOffset, length)
+}
+
+// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
+if (typeof Symbol !== 'undefined' && Symbol.species != null &&
+    Buffer[Symbol.species] === Buffer) {
+  Object.defineProperty(Buffer, Symbol.species, {
+    value: null,
+    configurable: true,
+    enumerable: false,
+    writable: false
+  })
+}
+
+Buffer.poolSize = 8192 // not used by this implementation
+
+function from (value, encodingOrOffset, length) {
+  if (typeof value === 'string') {
+    return fromString(value, encodingOrOffset)
+  }
+
+  if (ArrayBuffer.isView(value)) {
+    return fromArrayLike(value)
+  }
+
+  if (value == null) {
+    throw TypeError(
+      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
+      'or Array-like Object. Received type ' + (typeof value)
+    )
+  }
+
+  if (isInstance(value, ArrayBuffer) ||
+      (value && isInstance(value.buffer, ArrayBuffer))) {
+    return fromArrayBuffer(value, encodingOrOffset, length)
+  }
+
+  if (typeof value === 'number') {
+    throw new TypeError(
+      'The "value" argument must not be of type number. Received type number'
+    )
+  }
+
+  var valueOf = value.valueOf && value.valueOf()
+  if (valueOf != null && valueOf !== value) {
+    return Buffer.from(valueOf, encodingOrOffset, length)
+  }
+
+  var b = fromObject(value)
+  if (b) return b
+
+  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
+      typeof value[Symbol.toPrimitive] === 'function') {
+    return Buffer.from(
+      value[Symbol.toPrimitive]('string'), encodingOrOffset, length
+    )
+  }
+
+  throw new TypeError(
+    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
+    'or Array-like Object. Received type ' + (typeof 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(value, encodingOrOffset, length)
+}
+
+// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
+// https://github.com/feross/buffer/pull/148
+Buffer.prototype.__proto__ = Uint8Array.prototype
+Buffer.__proto__ = Uint8Array
+
+function assertSize (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('"size" argument must be of type number')
+  } else if (size < 0) {
+    throw new RangeError('The value "' + size + '" is invalid for option "size"')
+  }
+}
+
+function alloc (size, fill, encoding) {
+  assertSize(size)
+  if (size <= 0) {
+    return createBuffer(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(size).fill(fill, encoding)
+      : createBuffer(size).fill(fill)
+  }
+  return createBuffer(size)
+}
+
+/**
+ * Creates a new filled Buffer instance.
+ * alloc(size[, fill[, encoding]])
+ **/
+Buffer.alloc = function (size, fill, encoding) {
+  return alloc(size, fill, encoding)
+}
+
+function allocUnsafe (size) {
+  assertSize(size)
+  return createBuffer(size < 0 ? 0 : checked(size) | 0)
+}
+
+/**
+ * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
+ * */
+Buffer.allocUnsafe = function (size) {
+  return allocUnsafe(size)
+}
+/**
+ * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
+ */
+Buffer.allocUnsafeSlow = function (size) {
+  return allocUnsafe(size)
+}
+
+function fromString (string, encoding) {
+  if (typeof encoding !== 'string' || encoding === '') {
+    encoding = 'utf8'
+  }
+
+  if (!Buffer.isEncoding(encoding)) {
+    throw new TypeError('Unknown encoding: ' + encoding)
+  }
+
+  var length = byteLength(string, encoding) | 0
+  var buf = createBuffer(length)
+
+  var actual = buf.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')
+    buf = buf.slice(0, actual)
+  }
+
+  return buf
+}
+
+function fromArrayLike (array) {
+  var length = array.length < 0 ? 0 : checked(array.length) | 0
+  var buf = createBuffer(length)
+  for (var i = 0; i < length; i += 1) {
+    buf[i] = array[i] & 255
+  }
+  return buf
+}
+
+function fromArrayBuffer (array, byteOffset, length) {
+  if (byteOffset < 0 || array.byteLength < byteOffset) {
+    throw new RangeError('"offset" is outside of buffer bounds')
+  }
+
+  if (array.byteLength < byteOffset + (length || 0)) {
+    throw new RangeError('"length" is outside of buffer bounds')
+  }
+
+  var buf
+  if (byteOffset === undefined && length === undefined) {
+    buf = new Uint8Array(array)
+  } else if (length === undefined) {
+    buf = new Uint8Array(array, byteOffset)
+  } else {
+    buf = new Uint8Array(array, byteOffset, length)
+  }
+
+  // Return an augmented `Uint8Array` instance
+  buf.__proto__ = Buffer.prototype
+  return buf
+}
+
+function fromObject (obj) {
+  if (Buffer.isBuffer(obj)) {
+    var len = checked(obj.length) | 0
+    var buf = createBuffer(len)
+
+    if (buf.length === 0) {
+      return buf
+    }
+
+    obj.copy(buf, 0, 0, len)
+    return buf
+  }
+
+  if (obj.length !== undefined) {
+    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
+      return createBuffer(0)
+    }
+    return fromArrayLike(obj)
+  }
+
+  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
+    return fromArrayLike(obj.data)
+  }
+}
+
+function checked (length) {
+  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
+  // length is NaN (which is otherwise coerced to zero.)
+  if (length >= K_MAX_LENGTH) {
+    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+                         'size: 0x' + K_MAX_LENGTH.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 === true &&
+    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
+}
+
+Buffer.compare = function compare (a, b) {
+  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
+  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
+  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
+    throw new TypeError(
+      'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
+    )
+  }
+
+  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 (!Array.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 (isInstance(buf, Uint8Array)) {
+      buf = Buffer.from(buf)
+    }
+    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 (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
+    return string.byteLength
+  }
+  if (typeof string !== 'string') {
+    throw new TypeError(
+      'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
+      'Received type ' + typeof string
+    )
+  }
+
+  var len = string.length
+  var mustMatch = (arguments.length > 2 && arguments[2] === true)
+  if (!mustMatch && 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':
+        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 mustMatch ? -1 : 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
+    }
+  }
+}
+
+// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
+// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
+// reliably in a browserify context because there could be multiple different
+// copies of the 'buffer' package in use. This method works even for Buffer
+// instances that were created from another copy of the `buffer` package.
+// See: https://github.com/feross/buffer/issues/154
+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
+  if (length === 0) return ''
+  if (arguments.length === 0) return utf8Slice(this, 0, length)
+  return slowToString.apply(this, arguments)
+}
+
+Buffer.prototype.toLocaleString = Buffer.prototype.toString
+
+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
+  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
+  if (this.length > max) str += ' ... '
+  return '<Buffer ' + str + '>'
+}
+
+Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
+  if (isInstance(target, Uint8Array)) {
+    target = Buffer.from(target, target.offset, target.byteLength)
+  }
+  if (!Buffer.isBuffer(target)) {
+    throw new TypeError(
+      'The "target" argument must be one of type Buffer or Uint8Array. ' +
+      'Received type ' + (typeof target)
+    )
+  }
+
+  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 (numberIsNaN(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 (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
+    }
+  }
+
+  var strLen = string.length
+
+  if (length > strLen / 2) {
+    length = strLen / 2
+  }
+  for (var i = 0; i < length; ++i) {
+    var parsed = parseInt(string.substr(i * 2, 2), 16)
+    if (numberIsNaN(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
+    }
+  } 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 = this.subarray(start, end)
+  // Return an augmented `Uint8Array` instance
+  newBuf.__proto__ = Buffer.prototype
+  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) {
+  offset = offset >>> 0
+  if (!noAssert) checkOffset(offset, 1, this.length)
+  return this[offset]
+}
+
+Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
+  offset = offset >>> 0
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  return this[offset] | (this[offset + 1] << 8)
+}
+
+Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
+  offset = offset >>> 0
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  return (this[offset] << 8) | this[offset + 1]
+}
+
+Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
+  offset = offset >>> 0
+  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) {
+  offset = offset >>> 0
+  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) {
+  offset = offset >>> 0
+  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) {
+  offset = offset >>> 0
+  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) {
+  offset = offset >>> 0
+  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) {
+  offset = offset >>> 0
+  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) {
+  offset = offset >>> 0
+  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) {
+  offset = offset >>> 0
+  if (!noAssert) checkOffset(offset, 4, this.length)
+  return ieee754.read(this, offset, true, 23, 4)
+}
+
+Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
+  offset = offset >>> 0
+  if (!noAssert) checkOffset(offset, 4, this.length)
+  return ieee754.read(this, offset, false, 23, 4)
+}
+
+Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
+  offset = offset >>> 0
+  if (!noAssert) checkOffset(offset, 8, this.length)
+  return ieee754.read(this, offset, true, 52, 8)
+}
+
+Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
+  offset = offset >>> 0
+  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)
+  this[offset] = (value & 0xff)
+  return offset + 1
+}
+
+Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
+  value = +value
+  offset = offset >>> 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+  this[offset] = (value & 0xff)
+  this[offset + 1] = (value >>> 8)
+  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)
+  this[offset] = (value >>> 8)
+  this[offset + 1] = (value & 0xff)
+  return offset + 2
+}
+
+Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
+  value = +value
+  offset = offset >>> 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+  this[offset + 3] = (value >>> 24)
+  this[offset + 2] = (value >>> 16)
+  this[offset + 1] = (value >>> 8)
+  this[offset] = (value & 0xff)
+  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)
+  this[offset] = (value >>> 24)
+  this[offset + 1] = (value >>> 16)
+  this[offset + 2] = (value >>> 8)
+  this[offset + 3] = (value & 0xff)
+  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 (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)
+  this[offset] = (value & 0xff)
+  this[offset + 1] = (value >>> 8)
+  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)
+  this[offset] = (value >>> 8)
+  this[offset + 1] = (value & 0xff)
+  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)
+  this[offset] = (value & 0xff)
+  this[offset + 1] = (value >>> 8)
+  this[offset + 2] = (value >>> 16)
+  this[offset + 3] = (value >>> 24)
+  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
+  this[offset] = (value >>> 24)
+  this[offset + 1] = (value >>> 16)
+  this[offset + 2] = (value >>> 8)
+  this[offset + 3] = (value & 0xff)
+  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) {
+  value = +value
+  offset = offset >>> 0
+  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) {
+  value = +value
+  offset = offset >>> 0
+  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 (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
+  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('Index out of range')
+  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
+
+  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
+    // Use built-in when available, missing from IE11
+    this.copyWithin(targetStart, start, end)
+  } else if (this === target && start < targetStart && targetStart < end) {
+    // descending copy from end
+    for (var i = len - 1; i >= 0; --i) {
+      target[i + targetStart] = this[i + start]
+    }
+  } else {
+    Uint8Array.prototype.set.call(
+      target,
+      this.subarray(start, end),
+      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 (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)
+    }
+    if (val.length === 1) {
+      var code = val.charCodeAt(0)
+      if ((encoding === 'utf8' && code < 128) ||
+          encoding === 'latin1') {
+        // Fast path: If `val` fits into a single byte, use that numeric value.
+        val = code
+      }
+    }
+  } 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
+      : Buffer.from(val, encoding)
+    var len = bytes.length
+    if (len === 0) {
+      throw new TypeError('The value "' + val +
+        '" is invalid for argument "value"')
+    }
+    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 takes equal signs as end of the Base64 encoding
+  str = str.split('=')[0]
+  // Node strips out invalid characters like \n and \t from the string, base64-js does not
+  str = str.trim().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 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
+}
+
+// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
+// the `instanceof` check but they should be treated as of that type.
+// See: https://github.com/feross/buffer/issues/166
+function isInstance (obj, type) {
+  return obj instanceof type ||
+    (obj != null && obj.constructor != null && obj.constructor.name != null &&
+      obj.constructor.name === type.name)
+}
+function numberIsNaN (obj) {
+  // For IE11 support
+  return obj !== obj // eslint-disable-line no-self-compare
+}
+
+},{"base64-js":1,"ieee754":10}],6:[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":17}],7:[function(require,module,exports){
+(function (process,Buffer){
+// Generated by CoffeeScript 1.12.7
+var Parser, StringDecoder, isObjLiteral, stream, util;
+
+stream = require('stream');
+
+util = require('util');
+
+StringDecoder = require('string_decoder').StringDecoder;
+
+module.exports = function() {
+  var callback, called, chunks, data, err, 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 if (isObjLiteral(arguments[0])) {
+      options = arguments[0];
+    } else {
+      err = "Invalid first argument: " + (JSON.stringify(arguments[0]));
+    }
+    if (typeof arguments[1] === 'function') {
+      callback = arguments[1];
+    } else if (isObjLiteral(arguments[1])) {
+      if (options) {
+        err = 'Invalid arguments: got options twice as first and second arguments';
+      } else {
+        options = arguments[1];
+      }
+    } else {
+      err = "Invalid first argument: " + (JSON.stringify(arguments[1]));
+    }
+    if (err) {
+      if (!callback) {
+        throw Error(err);
+      } else {
+        return callback(Error(err));
+      }
+    }
+  } 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 = {};
+  }
+  this.options = {};
+  for (k in options) {
+    v = options[k];
+    this.options[k] = v;
+  }
+  this.options.objectMode = true;
+  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 (this.options.quote !== void 0 && !this.options.quote) {
+    this.options.quote = '';
+  }
+  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 (this.options.auto_parse_date === true) {
+    this.options.auto_parse_date = function(value) {
+      var m;
+      m = Date.parse(value);
+      if (!isNaN(m)) {
+        value = new Date(m);
+      }
+      return value;
+    };
+  }
+  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._ = {
+    decoder: new StringDecoder(),
+    quoting: false,
+    commenting: false,
+    field: null,
+    nextChar: null,
+    closingQuote: 0,
+    line: [],
+    chunks: [],
+    rawBuf: '',
+    buf: '',
+    rowDelimiterLength: this.options.rowDelimiter ? Math.max.apply(Math, this.options.rowDelimiter.map(function(v) {
+      return v.length;
+    })) : void 0
+  };
+  return this;
+};
+
+util.inherits(Parser, stream.Transform);
+
+module.exports.Parser = Parser;
+
+Parser.prototype._transform = function(chunk, encoding, callback) {
+  var err;
+  if (chunk instanceof Buffer) {
+    chunk = this._.decoder.write(chunk);
+  }
+  err = this.__write(chunk, false);
+  if (err) {
+    return this.emit('error', err);
+  }
+  return callback();
+};
+
+Parser.prototype._flush = function(callback) {
+  var err;
+  err = this.__write(this._.decoder.end(), true);
+  if (err) {
+    return this.emit('error', err);
+  }
+  if (this._.quoting) {
+    this.emit('error', new Error("Quoted field not terminated at line " + (this.lines + 1)));
+    return;
+  }
+  if (this._.line.length > 0) {
+    err = this.__push(this._.line);
+    if (err) {
+      return callback(err);
+    }
+  }
+  return callback();
+};
+
+Parser.prototype.__push = function(line) {
+  var call_column_udf, columns, err, field, i, j, len, lineAsColumns, rawBuf, ref, 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') {
+    call_column_udf = function(fn, line) {
+      var columns, err;
+      try {
+        columns = fn.call(null, line);
+        return [null, columns];
+      } catch (error) {
+        err = error;
+        return [err];
+      }
+    };
+    ref = call_column_udf(this.options.columns, line), err = ref[0], columns = ref[1];
+    if (err) {
+      return err;
+    }
+    this.options.columns = columns;
+    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.count++;
+      this.skipped_line_count++;
+    } else if (this.options.columns != null) {
+      return Error("Number of columns on line " + this.lines + " does not match header");
+    } else {
+      return 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
+    });
+    this._.rawBuf = '';
+  } else {
+    this.push(row);
+  }
+  return null;
+};
+
+Parser.prototype.__write = function(chars, end) {
+  var areNextCharsDelimiter, areNextCharsRowDelimiters, auto_parse, char, err, escapeIsQuote, i, isDelimiter, isEscape, isNextCharAComment, isQuote, isRowDelimiter, isRowDelimiterLength, is_float, is_int, l, ltrim, nextCharPos, ref, ref1, ref2, ref3, ref4, ref5, remainingBuffer, 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) {
+      if (!_this.options.auto_parse) {
+        return value;
+      }
+      if (typeof _this.options.auto_parse === 'function') {
+        return _this.options.auto_parse(value);
+      }
+      if (is_int(value)) {
+        value = parseInt(value);
+      } else if (is_float(value)) {
+        value = parseFloat(value);
+      } else if (_this.options.auto_parse_date) {
+        value = _this.options.auto_parse_date(value);
+      }
+      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 && ((ref = this._.nextChar) === '\n' || ref === '\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;
+            if (this._.field) {
+              this._.field = "" + this.options.quote + this._.field;
+            }
+          } else {
+            return 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) {
+        return 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 || (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) {
+        isRowDelimiterLength = this.options.rowDelimiter.filter(function(rd) {
+          return chars.substr(i, rd.length) === rd;
+        })[0].length;
+      }
+      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 = (ref1 = this._.field) != null ? ref1.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) {
+        err = this.__push(this._.line);
+        if (err) {
+          return err;
+        }
+        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 && ((ref2 = this._.field) != null ? ref2.length : void 0) > this.options.max_limit_on_data_read) {
+      return Error("Field exceeds max_limit_on_data_read setting (" + this.options.max_limit_on_data_read + ") " + (JSON.stringify(this.options.delimiter)));
+    }
+    if (!this._.commenting && ((ref3 = this._.line) != null ? ref3.length : void 0) > this.options.max_limit_on_data_read) {
+      return 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 = (ref4 = this._.field) != null ? ref4.trimRight() : void 0;
+        }
+      }
+      this._.line.push(auto_parse(this._.field || ''));
+      this._.field = null;
+    }
+    if (((ref5 = this._.field) != null ? ref5.length : void 0) > this.options.max_limit_on_data_read) {
+      return 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) {
+      return Error("Row delimiter not found in the file " + (JSON.stringify(this.options.rowDelimiter)));
+    }
+  }
+  this._.buf = chars.substr(i);
+  return null;
+};
+
+isObjLiteral = function(_obj) {
+  var _test;
+  _test = _obj;
+  if (typeof _obj !== 'object' || _obj === null || Array.isArray(_obj)) {
+    return false;
+  } else {
+    return (function() {
+      while (!false) {
+        if (Object.getPrototypeOf(_test = Object.getPrototypeOf(_test)) === null) {
+          break;
+        }
+      }
+      return Object.getPrototypeOf(_obj === _test);
+    })();
+  }
+};
+
+}).call(this,require('_process'),require("buffer").Buffer)
+},{"_process":20,"buffer":5,"stream":33,"string_decoder":3,"util":38}],8:[function(require,module,exports){
+(function (Buffer){
+// Generated by CoffeeScript 1.12.7
+var StringDecoder, parse;
+
+StringDecoder = require('string_decoder').StringDecoder;
+
+parse = require('./index');
+
+module.exports = function(data, options) {
+  var decoder, err, 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);
+    }
+  };
+  err = parser.__write(data, false);
+  if (err) {
+    throw err;
+  }
+  if (data instanceof Buffer) {
+    err = parser.__write(data.end(), true);
+    if (err) {
+      throw err;
+    }
+  }
+  parser._flush((function() {}));
+  return records;
+};
+
+}).call(this,require("buffer").Buffer)
+},{"./index":7,"buffer":5,"string_decoder":3}],9:[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 objectCreate = Object.create || objectCreatePolyfill
+var objectKeys = Object.keys || objectKeysPolyfill
+var bind = Function.prototype.bind || functionBindPolyfill
+
+function EventEmitter() {
+  if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {
+    this._events = objectCreate(null);
+    this._eventsCount = 0;
+  }
+
+  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.
+var defaultMaxListeners = 10;
+
+var hasDefineProperty;
+try {
+  var o = {};
+  if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });
+  hasDefineProperty = o.x === 0;
+} catch (err) { hasDefineProperty = false }
+if (hasDefineProperty) {
+  Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
+    enumerable: true,
+    get: function() {
+      return defaultMaxListeners;
+    },
+    set: function(arg) {
+      // check whether the input is a positive number (whose value is zero or
+      // greater and not a NaN).
+      if (typeof arg !== 'number' || arg < 0 || arg !== arg)
+        throw new TypeError('"defaultMaxListeners" must be a positive number');
+      defaultMaxListeners = arg;
+    }
+  });
+} else {
+  EventEmitter.defaultMaxListeners = defaultMaxListeners;
+}
+
+// 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 setMaxListeners(n) {
+  if (typeof n !== 'number' || n < 0 || isNaN(n))
+    throw new TypeError('"n" argument must be a positive number');
+  this._maxListeners = n;
+  return this;
+};
+
+function $getMaxListeners(that) {
+  if (that._maxListeners === undefined)
+    return EventEmitter.defaultMaxListeners;
+  return that._maxListeners;
+}
+
+EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
+  return $getMaxListeners(this);
+};
+
+// These standalone emit* functions are used to optimize calling of event
+// handlers for fast cases because emit() itself often has a variable number of
+// arguments and can be deoptimized because of that. These functions always have
+// the same number of arguments and thus do not get deoptimized, so the code
+// inside them can execute faster.
+function emitNone(handler, isFn, self) {
+  if (isFn)
+    handler.call(self);
+  else {
+    var len = handler.length;
+    var listeners = arrayClone(handler, len);
+    for (var i = 0; i < len; ++i)
+      listeners[i].call(self);
+  }
+}
+function emitOne(handler, isFn, self, arg1) {
+  if (isFn)
+    handler.call(self, arg1);
+  else {
+    var len = handler.length;
+    var listeners = arrayClone(handler, len);
+    for (var i = 0; i < len; ++i)
+      listeners[i].call(self, arg1);
+  }
+}
+function emitTwo(handler, isFn, self, arg1, arg2) {
+  if (isFn)
+    handler.call(self, arg1, arg2);
+  else {
+    var len = handler.length;
+    var listeners = arrayClone(handler, len);
+    for (var i = 0; i < len; ++i)
+      listeners[i].call(self, arg1, arg2);
+  }
+}
+function emitThree(handler, isFn, self, arg1, arg2, arg3) {
+  if (isFn)
+    handler.call(self, arg1, arg2, arg3);
+  else {
+    var len = handler.length;
+    var listeners = arrayClone(handler, len);
+    for (var i = 0; i < len; ++i)
+      listeners[i].call(self, arg1, arg2, arg3);
+  }
+}
+
+function emitMany(handler, isFn, self, args) {
+  if (isFn)
+    handler.apply(self, args);
+  else {
+    var len = handler.length;
+    var listeners = arrayClone(handler, len);
+    for (var i = 0; i < len; ++i)
+      listeners[i].apply(self, args);
+  }
+}
+
+EventEmitter.prototype.emit = function emit(type) {
+  var er, handler, len, args, i, events;
+  var doError = (type === 'error');
+
+  events = this._events;
+  if (events)
+    doError = (doError && events.error == null);
+  else if (!doError)
+    return false;
+
+  // If there is no 'error' event listener then throw.
+  if (doError) {
+    if (arguments.length > 1)
+      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('Unhandled "error" event. (' + er + ')');
+      err.context = er;
+      throw err;
+    }
+    return false;
+  }
+
+  handler = events[type];
+
+  if (!handler)
+    return false;
+
+  var isFn = typeof handler === 'function';
+  len = arguments.length;
+  switch (len) {
+      // fast cases
+    case 1:
+      emitNone(handler, isFn, this);
+      break;
+    case 2:
+      emitOne(handler, isFn, this, arguments[1]);
+      break;
+    case 3:
+      emitTwo(handler, isFn, this, arguments[1], arguments[2]);
+      break;
+    case 4:
+      emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);
+      break;
+      // slower
+    default:
+      args = new Array(len - 1);
+      for (i = 1; i < len; i++)
+        args[i - 1] = arguments[i];
+      emitMany(handler, isFn, this, args);
+  }
+
+  return true;
+};
+
+function _addListener(target, type, listener, prepend) {
+  var m;
+  var events;
+  var existing;
+
+  if (typeof listener !== 'function')
+    throw new TypeError('"listener" argument must be a function');
+
+  events = target._events;
+  if (!events) {
+    events = target._events = objectCreate(null);
+    target._eventsCount = 0;
+  } else {
+    // To avoid recursion in the case that type === "newListener"! Before
+    // adding it to the listeners, first emit "newListener".
+    if (events.newListener) {
+      target.emit('newListener', type,
+          listener.listener ? listener.listener : listener);
+
+      // Re-assign `events` because a newListener handler could have caused the
+      // this._events to be assigned to a new object
+      events = target._events;
+    }
+    existing = events[type];
+  }
+
+  if (!existing) {
+    // Optimize the case of one listener. Don't need the extra array object.
+    existing = events[type] = listener;
+    ++target._eventsCount;
+  } else {
+    if (typeof existing === 'function') {
+      // Adding the second element, need to change to array.
+      existing = events[type] =
+          prepend ? [listener, existing] : [existing, listener];
+    } else {
+      // If we've already got an array, just append.
+      if (prepend) {
+        existing.unshift(listener);
+      } else {
+        existing.push(listener);
+      }
+    }
+
+    // Check for listener leak
+    if (!existing.warned) {
+      m = $getMaxListeners(target);
+      if (m && m > 0 && existing.length > m) {
+        existing.warned = true;
+        var w = new Error('Possible EventEmitter memory leak detected. ' +
+            existing.length + ' "' + String(type) + '" listeners ' +
+            'added. Use emitter.setMaxListeners() to ' +
+            'increase limit.');
+        w.name = 'MaxListenersExceededWarning';
+        w.emitter = target;
+        w.type = type;
+        w.count = existing.length;
+        if (typeof console === 'object' && console.warn) {
+          console.warn('%s: %s', w.name, w.message);
+        }
+      }
+    }
+  }
+
+  return target;
+}
+
+EventEmitter.prototype.addListener = function addListener(type, listener) {
+  return _addListener(this, type, listener, false);
+};
+
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+EventEmitter.prototype.prependListener =
+    function prependListener(type, listener) {
+      return _addListener(this, type, listener, true);
+    };
+
+function onceWrapper() {
+  if (!this.fired) {
+    this.target.removeListener(this.type, this.wrapFn);
+    this.fired = true;
+    switch (arguments.length) {
+      case 0:
+        return this.listener.call(this.target);
+      case 1:
+        return this.listener.call(this.target, arguments[0]);
+      case 2:
+        return this.listener.call(this.target, arguments[0], arguments[1]);
+      case 3:
+        return this.listener.call(this.target, arguments[0], arguments[1],
+            arguments[2]);
+      default:
+        var args = new Array(arguments.length);
+        for (var i = 0; i < args.length; ++i)
+          args[i] = arguments[i];
+        this.listener.apply(this.target, args);
+    }
+  }
+}
+
+function _onceWrap(target, type, listener) {
+  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
+  var wrapped = bind.call(onceWrapper, state);
+  wrapped.listener = listener;
+  state.wrapFn = wrapped;
+  return wrapped;
+}
+
+EventEmitter.prototype.once = function once(type, listener) {
+  if (typeof listener !== 'function')
+    throw new TypeError('"listener" argument must be a function');
+  this.on(type, _onceWrap(this, type, listener));
+  return this;
+};
+
+EventEmitter.prototype.prependOnceListener =
+    function prependOnceListener(type, listener) {
+      if (typeof listener !== 'function')
+        throw new TypeError('"listener" argument must be a function');
+      this.prependListener(type, _onceWrap(this, type, listener));
+      return this;
+    };
+
+// Emits a 'removeListener' event if and only if the listener was removed.
+EventEmitter.prototype.removeListener =
+    function removeListener(type, listener) {
+      var list, events, position, i, originalListener;
+
+      if (typeof listener !== 'function')
+        throw new TypeError('"listener" argument must be a function');
+
+      events = this._events;
+      if (!events)
+        return this;
+
+      list = events[type];
+      if (!list)
+        return this;
+
+      if (list === listener || list.listener === listener) {
+        if (--this._eventsCount === 0)
+          this._events = objectCreate(null);
+        else {
+          delete events[type];
+          if (events.removeListener)
+            this.emit('removeListener', type, list.listener || listener);
+        }
+      } else if (typeof list !== 'function') {
+        position = -1;
+
+        for (i = list.length - 1; i >= 0; i--) {
+          if (list[i] === listener || list[i].listener === listener) {
+            originalListener = list[i].listener;
+            position = i;
+            break;
+          }
+        }
+
+        if (position < 0)
+          return this;
+
+        if (position === 0)
+          list.shift();
+        else
+          spliceOne(list, position);
+
+        if (list.length === 1)
+          events[type] = list[0];
+
+        if (events.removeListener)
+          this.emit('removeListener', type, originalListener || listener);
+      }
+
+      return this;
+    };
+
+EventEmitter.prototype.removeAllListeners =
+    function removeAllListeners(type) {
+      var listeners, events, i;
+
+      events = this._events;
+      if (!events)
+        return this;
+
+      // not listening for removeListener, no need to emit
+      if (!events.removeListener) {
+        if (arguments.length === 0) {
+          this._events = objectCreate(null);
+          this._eventsCount = 0;
+        } else if (events[type]) {
+          if (--this._eventsCount === 0)
+            this._events = objectCreate(null);
+          else
+            delete events[type];
+        }
+        return this;
+      }
+
+      // emit removeListener for all listeners on all events
+      if (arguments.length === 0) {
+        var keys = objectKeys(events);
+        var key;
+        for (i = 0; i < keys.length; ++i) {
+          key = keys[i];
+          if (key === 'removeListener') continue;
+          this.removeAllListeners(key);
+        }
+        this.removeAllListeners('removeListener');
+        this._events = objectCreate(null);
+        this._eventsCount = 0;
+        return this;
+      }
+
+      listeners = events[type];
+
+      if (typeof listeners === 'function') {
+        this.removeListener(type, listeners);
+      } else if (listeners) {
+        // LIFO order
+        for (i = listeners.length - 1; i >= 0; i--) {
+          this.removeListener(type, listeners[i]);
+        }
+      }
+
+      return this;
+    };
+
+function _listeners(target, type, unwrap) {
+  var events = target._events;
+
+  if (!events)
+    return [];
+
+  var evlistener = events[type];
+  if (!evlistener)
+    return [];
+
+  if (typeof evlistener === 'function')
+    return unwrap ? [evlistener.listener || evlistener] : [evlistener];
+
+  return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
+}
+
+EventEmitter.prototype.listeners = function listeners(type) {
+  return _listeners(this, type, true);
+};
+
+EventEmitter.prototype.rawListeners = function rawListeners(type) {
+  return _listeners(this, type, false);
+};
+
+EventEmitter.listenerCount = function(emitter, type) {
+  if (typeof emitter.listenerCount === 'function') {
+    return emitter.listenerCount(type);
+  } else {
+    return listenerCount.call(emitter, type);
+  }
+};
+
+EventEmitter.prototype.listenerCount = listenerCount;
+function listenerCount(type) {
+  var events = this._events;
+
+  if (events) {
+    var evlistener = events[type];
+
+    if (typeof evlistener === 'function') {
+      return 1;
+    } else if (evlistener) {
+      return evlistener.length;
+    }
+  }
+
+  return 0;
+}
+
+EventEmitter.prototype.eventNames = function eventNames() {
+  return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
+};
+
+// About 1.5x faster than the two-arg version of Array#splice().
+function spliceOne(list, index) {
+  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)
+    list[i] = list[k];
+  list.pop();
+}
+
+function arrayClone(arr, n) {
+  var copy = new Array(n);
+  for (var i = 0; i < n; ++i)
+    copy[i] = arr[i];
+  return copy;
+}
+
+function unwrapListeners(arr) {
+  var ret = new Array(arr.length);
+  for (var i = 0; i < ret.length; ++i) {
+    ret[i] = arr[i].listener || arr[i];
+  }
+  return ret;
+}
+
+function objectCreatePolyfill(proto) {
+  var F = function() {};
+  F.prototype = proto;
+  return new F;
+}
+function objectKeysPolyfill(obj) {
+  var keys = [];
+  for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {
+    keys.push(k);
+  }
+  return k;
+}
+function functionBindPolyfill(context) {
+  var fn = this;
+  return function () {
+    return fn.apply(context, arguments);
+  };
+}
+
+},{}],10:[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
+}
+
+},{}],11:[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":14}],12:[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":11,"./parent-endpoint":13}],13:[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":14}],14:[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;
+};
+
+},{}],15:[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":11,"./lib/iframe-phone-rpc-endpoint":12,"./lib/parent-endpoint":13,"./lib/structured-clone":14}],16:[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
+  }
+}
+
+},{}],17:[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))
+}
+
+},{}],18:[function(require,module,exports){
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+  return toString.call(arr) == '[object Array]';
+};
+
+},{}],19:[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":20}],20:[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; };
+
+},{}],21:[function(require,module,exports){
+module.exports = require("./lib/_stream_duplex.js")
+
+},{"./lib/_stream_duplex.js":22}],22:[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":24,"./_stream_writable":26,"core-util-is":6,"inherits":16,"process-nextick-args":19}],23:[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":25,"core-util-is":6,"inherits":16}],24:[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":22,"./internal/streams/BufferList":27,"_process":20,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":9,"inherits":16,"isarray":18,"process-nextick-args":19,"string_decoder/":34,"util":2}],25:[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":22,"core-util-is":6,"inherits":16}],26:[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":22,"_process":20,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":9,"inherits":16,"process-nextick-args":19,"util-deprecate":35}],27:[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":5,"buffer-shims":4}],28:[function(require,module,exports){
+module.exports = require("./lib/_stream_passthrough.js")
+
+},{"./lib/_stream_passthrough.js":23}],29:[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":22,"./lib/_stream_passthrough.js":23,"./lib/_stream_readable.js":24,"./lib/_stream_transform.js":25,"./lib/_stream_writable.js":26,"_process":20}],30:[function(require,module,exports){
+module.exports = require("./lib/_stream_transform.js")
+
+},{"./lib/_stream_transform.js":25}],31:[function(require,module,exports){
+module.exports = require("./lib/_stream_writable.js")
+
+},{"./lib/_stream_writable.js":26}],32:[function(require,module,exports){
+/* eslint-disable node/no-deprecated-api */
+var buffer = require('buffer')
+var Buffer = buffer.Buffer
+
+// alternative to using Object.keys for old browsers
+function copyProps (src, dst) {
+  for (var key in src) {
+    dst[key] = src[key]
+  }
+}
+if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
+  module.exports = buffer
+} else {
+  // Copy properties from require('buffer')
+  copyProps(buffer, exports)
+  exports.Buffer = SafeBuffer
+}
+
+function SafeBuffer (arg, encodingOrOffset, length) {
+  return Buffer(arg, encodingOrOffset, length)
+}
+
+// Copy static methods from Buffer
+copyProps(Buffer, SafeBuffer)
+
+SafeBuffer.from = function (arg, encodingOrOffset, length) {
+  if (typeof arg === 'number') {
+    throw new TypeError('Argument must not be a number')
+  }
+  return Buffer(arg, encodingOrOffset, length)
+}
+
+SafeBuffer.alloc = function (size, fill, encoding) {
+  if (typeof size !== 'number') {
+    throw new TypeError('Argument must be a number')
+  }
+  var buf = Buffer(size)
+  if (fill !== undefined) {
+    if (typeof encoding === 'string') {
+      buf.fill(fill, encoding)
+    } else {
+      buf.fill(fill)
+    }
+  } else {
+    buf.fill(0)
+  }
+  return buf
+}
+
+SafeBuffer.allocUnsafe = function (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('Argument must be a number')
+  }
+  return Buffer(size)
+}
+
+SafeBuffer.allocUnsafeSlow = function (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('Argument must be a number')
+  }
+  return buffer.SlowBuffer(size)
+}
+
+},{"buffer":5}],33:[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":9,"inherits":16,"readable-stream/duplex.js":21,"readable-stream/passthrough.js":28,"readable-stream/readable.js":29,"readable-stream/transform.js":30,"readable-stream/writable.js":31}],34:[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":5}],35:[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 : {})
+},{}],36:[function(require,module,exports){
+arguments[4][16][0].apply(exports,arguments)
+},{"dup":16}],37:[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';
+}
+},{}],38:[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":37,"_process":20,"inherits":36}],"agentmodel":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AgentModel;
+
+  module.exports = AgentModel = (function() {
+    var mergeObjectInto;
+
+    class AgentModel {
+      // () => AgentModel
+      constructor() {
+        this.turtles = {};
+        this.patches = {};
+        this.links = {};
+        this.observer = {};
+        this.world = {};
+        this.drawingEvents = [];
+      }
+
+      // (Array[Updater.Update]) => Unit
+      updates(modelUpdates) {
+        var i, len, u;
+        for (i = 0, len = modelUpdates.length; i < len; i++) {
+          u = modelUpdates[i];
+          this.update(u);
+        }
+      }
+
+      // (Updater.Update) => Unit
+      update({links, observer, patches, turtles, world, drawingEvents}) {
+        var coll, i, id, len, linkBundle, patchBundle, ref, turtleBundle, typeCanDie, updates, varUpdates;
+        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++) {
+          ({coll, typeCanDie, updates} = ref[i]);
+          for (id in updates) {
+            varUpdates = updates[id];
+            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);
+        }
+      }
+
+      // (Object, String) => Object
+      _itemById(coll, id) {
+        if (coll[id] == null) {
+          coll[id] = {};
+        }
+        return coll[id];
+      }
+
+    };
+
+    // (Object, Object) => Unit
+    mergeObjectInto = function(updatedObject, targetObject) {
+      var value, variable;
+      for (variable in updatedObject) {
+        value = updatedObject[variable];
+        targetObject[variable.toLowerCase()] = value;
+      }
+    };
+
+    return AgentModel;
+
+  }).call(this);
+
+}).call(this);
+
+},{}],"bootstrap":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  /*
+    `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)
+  */
+  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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AbstractAgentSet, Death, Iterator, NLType, Shufflerator, foldl, keys, map, pipeline, projectionSort, stableSort;
+
+  projectionSort = require('./projectionsort');
+
+  NLType = require('./typechecker');
+
+  Iterator = require('util/iterator');
+
+  Shufflerator = require('util/shufflerator');
+
+  stableSort = require('util/stablesort');
+
+  ({foldl, map} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  ({keys} = require('brazierjs/object'));
+
+  ({
+    DeathInterrupt: Death
+  } = require('util/exception'));
+
+  // Never instantiate this class directly --JAB (5/7/14)
+  module.exports = AbstractAgentSet = class AbstractAgentSet {
+    // (Array[T], World, String, String) => AbstractAgentSet
+    constructor(_agentArr, _world, _agentTypeName, _specialName) {
+      this._agentArr = _agentArr;
+      this._world = _world;
+      this._agentTypeName = _agentTypeName;
+      this._specialName = _specialName;
+    }
+
+    // (() => Boolean) => AbstractAgentSet[T]
+    agentFilter(f) {
+      return this.filter(Iterator.withBoolCheck(this._world.selfManager.askAgent(f)));
+    }
+
+    // (() => Boolean) => Boolean
+    agentAll(f) {
+      return this._unsafeIterator().all(this._world.selfManager.askAgent(f));
+    }
+
+    // (() => Any, Boolean) => Unit
+    ask(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;
+      }
+    }
+
+    // (Array[(Number, Number)]) => AbstractAgentSet[T]
+    atPoints(points) {
+      var getPatchAt, getSelf;
+      getSelf = () => {
+        return this._world.selfManager.self();
+      };
+      getPatchAt = (x, y) => {
+        return this._world.getPatchAt(x, y);
+      };
+      return require('./agentset/atpoints')(this._world.dump, getSelf, getPatchAt).call(this, points);
+    }
+
+    // (T) => Boolean
+    contains(item) {
+      return this._unsafeIterator().contains(item);
+    }
+
+    // (Array[T]) => AbstractAgentSet[T]
+    copyWithNewAgents(agents) {
+      return this._generateFrom(agents);
+    }
+
+    // ((T) => Boolean) => Boolean
+    exists(pred) {
+      return this._unsafeIterator().exists(pred);
+    }
+
+    // ((T) => Boolean) => Seq[T]
+    filter(pred) {
+      return this._generateFrom(this._unsafeIterator().filter(pred));
+    }
+
+    // ((T) => Unit) => Unit
+    forEach(f) {
+      this.iterator().forEach(f);
+    }
+
+    // () => String
+    getSpecialName() {
+      return this._specialName;
+    }
+
+    // () => Boolean
+    isEmpty() {
+      return this.size() === 0;
+    }
+
+    // () => Iterator[T]
+    iterator() {
+      return new Iterator(this._agentArr.slice(0));
+    }
+
+    // This is marked "private" and named "unsafe" for a reason.  Since it does not copy the underlying agent array
+    // it should only be used internally by the agent set when the resulting Iterator will immediately calculate or
+    // tranform to a new value for the consumer.  --JMB, August 2018
+
+    // () => Iterator[T]
+    _unsafeIterator() {
+      return new Iterator(this._agentArr);
+    }
+
+    // (() => Number) => AbstractAgentSet[T]
+    maxesBy(f) {
+      return this.copyWithNewAgents(this._findMaxesBy(f));
+    }
+
+    // (Number, () => Number) => AbstractAgentSet[T]
+    maxNOf(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;
+        }
+      });
+    }
+
+    // (() => Number) => T
+    maxOneOf(f) {
+      return this._randomOneOf(this._findMaxesBy(f));
+    }
+
+    // (Number, () => Number) => AbstractAgentSet[T]
+    minNOf(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;
+        }
+      });
+    }
+
+    // (() => Number) => T
+    minOneOf(f) {
+      return this._randomOneOf(this._findMinsBy(f));
+    }
+
+    // (() => Number) => AbstractAgentSet[T]
+    minsBy(f) {
+      return this.copyWithNewAgents(this._findMinsBy(f));
+    }
+
+    // [Result] @ (() => Result) => Array[Result]
+    projectionBy(f) {
+      return this.shufflerator().map(this._world.selfManager.askAgent(f));
+    }
+
+    // () => T
+    randomAgent() {
+      var choice, count, iter;
+      iter = this._unsafeIterator();
+      count = iter.size();
+      if (count === 0) {
+        return Nobody;
+      } else {
+        choice = this._world.rng.nextInt(count);
+        return iter.nthItem(choice);
+      }
+    }
+
+    // () => AbstractAgentSet[T]
+    shuffled() {
+      return this.copyWithNewAgents(this.shufflerator().toArray());
+    }
+
+    // () => Shufflerator[T]
+    shufflerator() {
+      return new Shufflerator(this.toArray(), (function(agent) {
+        return (agent != null ? agent.id : void 0) >= 0;
+      }), this._world.rng.nextInt);
+    }
+
+    // () => Number
+    size() {
+      return this._unsafeIterator().size();
+    }
+
+    // () => Array[T]
+    sort() {
+      if (this.isEmpty()) {
+        return this.toArray();
+      } else {
+        return stableSort(this._unsafeIterator().toArray())(function(x, y) {
+          return x.compare(y).toInt;
+        });
+      }
+    }
+
+    // [U] @ ((T) => U) => Array[T]
+    sortOn(f) {
+      return projectionSort(this.shufflerator().toArray())(f);
+    }
+
+    // () => Array[T]
+    toArray() {
+      this._agentArr = this._unsafeIterator().toArray(); // Prune out dead agents --JAB (7/21/14)
+      return this._agentArr.slice(0);
+    }
+
+    // () => String
+    toString() {
+      var ref, ref1;
+      return (ref = (ref1 = this._specialName) != null ? ref1.toLowerCase() : void 0) != null ? ref : `(agentset, ${this.size()} ${this._agentTypeName})`;
+    }
+
+    // (Number, () => Number, (Number, Number) => Number) => AbstractAgentSet[T]
+    _findBestNOf(n, f, cStyleComparator) {
+      var appendAgent, ask, best, collectWinners, groupByValue, ref, 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([winners, numAdded], agent) {
+        if (numAdded < n) {
+          winners.push(agent);
+          return [winners, numAdded + 1];
+        } else {
+          return [winners, numAdded];
+        }
+      };
+      collectWinners = function([winners, numAdded], agents) {
+        if (numAdded < n) {
+          return foldl(appendAgent)([winners, numAdded])(agents);
+        } else {
+          return [winners, numAdded];
+        }
+      };
+      valueToAgentsMap = foldl(groupByValue)({})(this.shufflerator().toArray());
+      ref = pipeline(keys, map(parseFloat), (function(x) {
+        return x.sort(cStyleComparator);
+      }), map(function(value) {
+        return valueToAgentsMap[value];
+      }), foldl(collectWinners)([[], 0]))(valueToAgentsMap), best = ref[0], ref[1];
+      return this._generateFrom(best);
+    }
+
+    // (Array[T]) => T
+    _randomOneOf(agents) {
+      if (agents.length === 0) {
+        return Nobody;
+      } else {
+        return agents[this._world.rng.nextInt(agents.length)];
+      }
+    }
+
+    // (Number, (Number, Number) => Boolean, () => Number) => Array[T]
+    _findBestOf(worstPossible, findIsBetter, f) {
+      var foldFunc, ref, winners;
+      foldFunc = ([currentBest, currentWinners], agent) => {
+        var result;
+        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];
+        }
+      };
+      ref = foldl(foldFunc)([worstPossible, []])(this._unsafeIterator().toArray()), ref[0], winners = ref[1];
+      return winners;
+    }
+
+    // [U] @ (() => U) => Array[T]
+    _findMaxesBy(f) {
+      return this._findBestOf(-2e308, (function(result, currentBest) {
+        return result > currentBest;
+      }), f);
+    }
+
+    // [U] @ (() => U) => Array[T]
+    _findMinsBy(f) {
+      return this._findBestOf(2e308, (function(result, currentBest) {
+        return result < currentBest;
+      }), f);
+    }
+
+    // (Array[T]) => This[T]
+    _generateFrom(newAgentArr) {
+      return new this.constructor(newAgentArr, this._world);
+    }
+
+    // (() => Boolean) => AgentSet
+    _optimalOtherWith(f) {
+      var filterer, self;
+      self = this._world.selfManager.self();
+      filterer = function(x) {
+        if (x !== self) {
+          return Iterator.boolOrError(x, x.projectionBy(f));
+        } else {
+          return false;
+        }
+      };
+      return this.copyWithNewAgents(this._unsafeIterator().filter(filterer));
+    }
+
+    // (() => Boolean) => Agent
+    _optimalOneOfWith(f) {
+      var finder;
+      finder = function(x) {
+        var y;
+        return y = Iterator.boolOrError(x, x.projectionBy(f));
+      };
+      return this.shufflerator().find(finder, Nobody);
+    }
+
+    // (() => Boolean) => Boolean
+    _optimalAnyWith(f) {
+      return this.exists(this._world.selfManager.askAgent(f));
+    }
+
+    // (() => Boolean) => Boolean
+    _optimalAnyOtherWith(f) {
+      var checker, self;
+      self = this._world.selfManager.self();
+      checker = function(x) {
+        return x !== self && Iterator.boolOrError(x, x.projectionBy(f));
+      };
+      return this.exists(checker);
+    }
+
+    // (() => Boolean) => Number
+    _optimalCountOtherWith(f) {
+      var filterer, self;
+      self = this._world.selfManager.self();
+      filterer = function(x) {
+        return x !== self && Iterator.boolOrError(x, x.projectionBy(f));
+      };
+      return this._unsafeIterator().filter(filterer).length;
+    }
+
+  };
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var NLType, filter, flatMap, genPatchGrabber, getPatchesAtPoints, map, pipeline, unique;
+
+  NLType = require('../typechecker');
+
+  ({filter, flatMap, map, unique} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  // In this file: `this.type` is `AbstractAgentSet[T]`
+
+  // (SelfType, (Number, Number) => Patch) => (Number, Number) => Patch
+  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;
+      };
+    }
+  };
+
+  // ((Any) => String, (Number, Number) => Patch, Array[(Number, Number)]) => Array[Patch]
+  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(...point);
+      } else {
+        throw new Error(`Invalid list of points: ${dump(points)}`);
+      }
+    };
+    return pipeline(map(f), filter(function(x) {
+      return x !== Nobody;
+    }))(points);
+  };
+
+  // ((Any) => String, () => Agent, (Number, Number) => Patch) => (Array[Any]) => AbstractAgentSet[T]
+  module.exports = function(dump, getSelf, getPatchAt) {
+    return function(points) {
+      var breedName, copyThatFloppy, filterContaining, newAgents, patchAt, patches, turtlesOnPatches, upperBreedName;
+      filterContaining = filter((x) => {
+        return this.contains(x);
+      });
+      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)) : []; // Breed set
+      copyThatFloppy = (x) => {
+        return this.copyWithNewAgents.call(this, x);
+      };
+      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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Breed, BreedManager, count, foldl, getNextOrdinal, isEmpty, last, map, pipeline, sortedIndexBy, toObject, values;
+
+  ({foldl, isEmpty, last, map, sortedIndexBy, toObject} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  ({values} = require('brazierjs/object'));
+
+  count = 0;
+
+  getNextOrdinal = function() {
+    return count++;
+  };
+
+  Breed = (function() {
+    class Breed {
+
+      // (String, String, BreedManager, Array[String], Boolean, String, Array[Agent]) => Breed
+      constructor(name1, singular, _manager, varNames = [], _isDirectedLinkBreed, _shape = void 0, members = []) {
+        this.name = name1;
+        this.singular = singular;
+        this._manager = _manager;
+        this.varNames = varNames;
+        this._isDirectedLinkBreed = _isDirectedLinkBreed;
+        this._shape = _shape;
+        this.members = members;
+        this.ordinal = getNextOrdinal();
+      }
+
+      // We can't just set this in the constructor, because people can swoop into the manager and change the turtles'
+      // default shape --JAB (5/27/14)
+      // () => String
+      getShape() {
+        var ref;
+        return (ref = this._shape) != null ? ref : (this.isLinky() ? this._manager.links()._shape : this._manager.turtles()._shape);
+      }
+
+      // (String) => Unit
+      setShape(newShape) {
+        this._shape = newShape;
+      }
+
+      // (Agent) => Unit
+      add(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);
+        }
+      }
+
+      // Agent -> Boolean
+      contains(agent) {
+        return this.members.includes(agent);
+      }
+
+      // (Agent) => Unit
+      remove(agent) {
+        var howManyToThrowOut;
+        this.members.splice(this._getAgentIndex(agent), howManyToThrowOut = 1);
+      }
+
+      // () => Boolean
+      isLinky() {
+        return this._isDirectedLinkBreed != null;
+      }
+
+      // () => Boolean
+      isUndirected() {
+        return this._isDirectedLinkBreed === false;
+      }
+
+      // () => Boolean
+      isDirected() {
+        return this._isDirectedLinkBreed === true;
+      }
+
+      // (Agent) => Number
+      _getAgentIndex(agent) {
+        return sortedIndexBy(function(a) {
+          return a.id;
+        })(this.members)(agent);
+      }
+
+    };
+
+    Breed.prototype.ordinal = void 0; // Number
+
+    return Breed;
+
+  }).call(this);
+
+  module.exports = BreedManager = (function() {
+    class BreedManager {
+
+      // (Array[BreedObj], Array[String], Array[String]) => BreedManager
+      constructor(breedObjs, turtlesOwns = [], linksOwns = []) {
+        var defaultBreeds;
+        defaultBreeds = {
+          TURTLES: new Breed("TURTLES", "turtle", this, turtlesOwns, void 0, "default"),
+          LINKS: new Breed("LINKS", "link", this, linksOwns, false, "default")
+        };
+        this._breeds = foldl((acc, breedObj) => {
+          var ref, trueName, trueSingular, trueVarNames;
+          trueName = breedObj.name.toUpperCase();
+          trueSingular = breedObj.singular.toLowerCase();
+          trueVarNames = (ref = breedObj.varNames) != null ? ref : [];
+          acc[trueName] = new Breed(trueName, trueSingular, this, trueVarNames, breedObj.isDirected);
+          return acc;
+        })(defaultBreeds)(breedObjs);
+        this._singularBreeds = pipeline(values, map(function(b) {
+          return [b.singular, b];
+        }), toObject)(this._breeds);
+      }
+
+      // () => Object[Breed]
+      breeds() {
+        return this._breeds;
+      }
+
+      orderedBreeds() {
+        if (this._orderedBreeds == null) {
+          this._orderedBreeds = Object.getOwnPropertyNames(this._breeds).sort((a, b) => {
+            return this._breeds[a].ordinal - this._breeds[b].ordinal;
+          });
+        }
+        return this._orderedBreeds;
+      }
+
+      orderedLinkBreeds() {
+        if (this._orderedLinkBreeds == null) {
+          this._orderedLinkBreeds = this.orderedBreeds().filter((b) => {
+            return this._breeds[b].isLinky();
+          });
+        }
+        return this._orderedLinkBreeds;
+      }
+
+      orderedTurtleBreeds() {
+        if (this._orderedTurtleBreeds == null) {
+          this._orderedTurtleBreeds = this.orderedBreeds().filter((b) => {
+            return !this._breeds[b].isLinky();
+          });
+        }
+        return this._orderedTurtleBreeds;
+      }
+
+      // (String) => Breed
+      get(name) {
+        return this._breeds[name.toUpperCase()];
+      }
+
+      // (String) => Breed
+      getSingular(name) {
+        return this._singularBreeds[name.toLowerCase()];
+      }
+
+      // (String, String) => Unit
+      setDefaultShape(breedName, shape) {
+        this.get(breedName).setShape(shape.toLowerCase());
+      }
+
+      // () => Unit
+      setUnbreededLinksUndirected() {
+        this.links()._isDirectedLinkBreed = false;
+      }
+
+      // () => Unit
+      setUnbreededLinksDirected() {
+        this.links()._isDirectedLinkBreed = true;
+      }
+
+      // () => Breed
+      turtles() {
+        return this.get("TURTLES");
+      }
+
+      // () => Breed
+      links() {
+        return this.get("LINKS");
+      }
+
+    };
+
+    // type BreedObj = { name: String, singular: String, varNames: Array[String], isDirected: Boolean }
+    BreedManager.prototype._breeds = void 0; // Object[Breed]
+
+    BreedManager.prototype._singularBreeds = void 0; // Object[Breed]
+
+    return BreedManager;
+
+  }).call(this);
+
+}).call(this);
+
+},{"brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/object":"brazier/object"}],"engine/core/colormodel":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var BaseColors, BaseRGBs, ColorMax, JSType, NLMath, NamesToIndicesMap, RGBCache, RGBMap, StrictMath, attenuate, attenuateRGB, componentsToKey, foldl, keyToComponents, map, pairs, pipeline, rangeUntil;
+
+  NLMath = require('util/nlmath');
+
+  JSType = require('util/typechecker');
+
+  StrictMath = require('shim/strictmath');
+
+  ({foldl, map} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  ({rangeUntil} = require('brazierjs/number'));
+
+  ({pairs} = require('brazierjs/object'));
+
+  // type ColorNumber = Number
+  // type ColorName   = String
+  // type HSB         = (Number, Number, Number)
+  // type RGB         = (Number, Number, Number)
+
+  // (Number, Number) => (Number) => Number
+  attenuate = function(lowerBound, upperBound) {
+    return function(x) {
+      if (x < lowerBound) {
+        return lowerBound;
+      } else if (x > upperBound) {
+        return upperBound;
+      } else {
+        return x;
+      }
+    };
+  };
+
+  // (Number) => Number
+  attenuateRGB = attenuate(0, 255);
+
+  // (RGB...) => String
+  componentsToKey = function(r, g, b) {
+    return `${r}_${g}_${b}`;
+  };
+
+  // (String) => RGB
+  keyToComponents = function(key) {
+    return key.split('_').map(parseFloat);
+  };
+
+  ColorMax = 140;
+
+  // Array[ColorNumber]
+  BaseColors = map(function(n) {
+    return (n * 10) + 5;
+  })(rangeUntil(0)(ColorMax / 10));
+
+  // Object[ColorName, Number]
+  NamesToIndicesMap = (function() {
+    var color, i, j, len, ref, temp;
+    temp = {};
+    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];
+      temp[color] = i;
+    }
+    return temp;
+  })();
+
+  // copied from api/Color.scala. note these aren't the same numbers as
+  // `map extract-rgb base-colors` gives you; see comments in Scala source --BH
+  // Array[RGB]
+  BaseRGBs = [
+    [
+      140,
+      140,
+      140 // gray       (5)
+    ],
+    [
+      215,
+      48,
+      39 // red       (15)
+    ],
+    [
+      241,
+      105,
+      19 // orange    (25)
+    ],
+    [
+      156,
+      109,
+      70 // brown     (35)
+    ],
+    [
+      237,
+      237,
+      47 // yellow    (45)
+    ],
+    [
+      87,
+      176,
+      58 // green     (55)
+    ],
+    [
+      42,
+      209,
+      57 // lime      (65)
+    ],
+    [
+      27,
+      158,
+      119 // turquoise (75)
+    ],
+    [
+      82,
+      196,
+      196 // cyan      (85)
+    ],
+    [
+      43,
+      140,
+      190 // sky       (95)
+    ],
+    [
+      50,
+      92,
+      168 // blue     (105)
+    ],
+    [
+      123,
+      78,
+      163 // violet   (115)
+    ],
+    [
+      166,
+      25,
+      105 // magenta  (125)
+    ],
+    [
+      224,
+      126,
+      149 // pink     (135)
+    ],
+    [
+      0,
+      0,
+      0 // black
+    ],
+    [
+      255,
+      255,
+      255 // white
+    ]
+  ];
+
+  // (Array[RGB], Object[String, RGB])
+  [RGBCache, RGBMap] = (function() {
+    var baseIndex, clamp, colorTimesTen, finalRGB, rgb, rgbCache, rgbMap, step;
+    rgbMap = {};
+    rgbCache = (function() {
+      var j, ref, results;
+      results = [];
+      for (colorTimesTen = j = 0, ref = ColorMax * 10; (0 <= ref ? j < ref : j > ref); colorTimesTen = 0 <= ref ? ++j : --j) {
+        // We do this branching to make sure that the right color
+        // is used for white and black, which appear multiple times
+        // in NetLogo's nonsensical color space --JAB (9/24/15)
+        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(...finalRGB)] = colorTimesTen / 10;
+        results.push(finalRGB);
+      }
+      return results;
+    })();
+    return [rgbCache, rgbMap];
+  })();
+
+  module.exports = {
+    COLOR_MAX: ColorMax, // ColorNumber
+    BASE_COLORS: BaseColors, // Array[ColorNumber]
+
+    // (ColorNumber, ColorNumber) => Boolean
+    areRelatedByShade: function(color1, color2) {
+      return this._colorIntegral(color1) === this._colorIntegral(color2);
+    },
+    // [T <: ColorNumber|RGB|ColorName] @ (T) => RGB
+    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}`);
+      }
+    },
+    // [T <: ColorNumber|RGB] @ (T) => HSB
+    colorToHSB: function(color) {
+      var b, g, r, type;
+      type = JSType(color);
+      [r, g, b] = (function() {
+        if (type.isNumber()) {
+          return this.colorToRGB(color);
+        } else if (type.isArray()) {
+          return color;
+        } else {
+          throw new Error(`Unrecognized color format: ${color}`);
+        }
+      }).call(this);
+      return this.rgbToHSB(r, g, b);
+    },
+    // (RGB...) => RGB
+    genRGBFromComponents: function(r, g, b) {
+      return [r, g, b].map(attenuateRGB);
+    },
+    // Courtesy of Paul S. at http://stackoverflow.com/a/17243070/1116979 --JAB (9/23/15)
+    // (HSB...) => RGB
+    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);
+      });
+    },
+    // (HSB...) => ColorNumber
+    nearestColorNumberOfHSB: function(h, s, b) {
+      return this.nearestColorNumberOfRGB(...this.hsbToRGB(h, s, b));
+    },
+    // (RGB...) => ColorNumber
+    nearestColorNumberOfRGB: function(r, g, b) {
+      var blue, colorNumber, green, red, ref;
+      red = attenuateRGB(r);
+      green = attenuateRGB(g);
+      blue = attenuateRGB(b);
+      colorNumber = (ref = RGBMap[componentsToKey(red, green, blue)]) != null ? ref : this._estimateColorNumber(red, green, blue);
+      return NLMath.validateNumber(colorNumber);
+    },
+    // (Number) => ColorNumber
+    nthColor: function(n) {
+      var index;
+      index = n % BaseColors.length;
+      return BaseColors[index];
+    },
+    // ((Number) => Number) => ColorNumber
+    randomColor: function(nextInt) {
+      var index;
+      index = nextInt(BaseColors.length);
+      return BaseColors[index];
+    },
+    // (Array[Number]) => RGB
+    rgbList: function(components) {
+      return components.map(function(c) {
+        return attenuateRGB(StrictMath.ceil(c));
+      }).slice(0, 3);
+    },
+    // Courtesy of Paul S. at http://stackoverflow.com/a/17243070/1116979 --JAB (9/23/15)
+    // (RGB...) => HSB
+    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);
+      });
+    },
+    // [T <: ColorNumber|RGB] @ (T) => T
+    wrapColor: function(color) {
+      var modColor;
+      if (JSType(color).isArray()) {
+        return color; // Bah!  This branch ought to be equivalent to `color %% ColorMax`, but that causes floating-point discrepancies. --JAB (7/30/14)
+      } else {
+        modColor = color % ColorMax;
+        if (modColor >= 0) {
+          return modColor;
+        } else {
+          return ColorMax + modColor;
+        }
+      }
+    },
+    // (ColorNumber, Number, Number, Number) => Number
+    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;
+    },
+    // (ColorNumber) => Number
+    _colorIntegral: function(color) {
+      return StrictMath.floor(this.wrapColor(color) / 10);
+    },
+    // (ColorName) => RGB
+    _nameToRGB: function(name) {
+      return BaseRGBs[NamesToIndicesMap[name]];
+    },
+    // (RGB...) => ColorNumber
+    _estimateColorNumber: function(r, g, b) {
+      var f;
+      f = (acc, [k, v]) => {
+        var cb, cg, cr, dist;
+        [cr, cg, cb] = keyToComponents(k);
+        dist = this._colorDistance(r, g, b, cr, cg, cb);
+        if (dist < acc[1]) {
+          return [v, dist];
+        } else {
+          return acc;
+        }
+      };
+      return pipeline(pairs, foldl(f)([0, Number.MAX_VALUE]))(RGBMap)[0];
+    },
+    // CoffeeScript code from the Scala code in Headless' './parser-core/src/main/core/Color.scala',
+    // which was translated from Java code that came from a C snippet at www.compuphase.com/cmetric.htm
+    // Dealwithit --JAB (9/24/15)
+    // (Number, Number, Number, Number, Number, Number) => Number
+    _colorDistance: function(r1, g1, b1, r2, g2, b2) {
+      var bDiff, gDiff, rDiff, rMean;
+      rMean = r1 + StrictMath.floor(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);
+    }
+  };
+
+  // I don't know what this code means.
+// Leave a comment on this webzone if you know what this code means --JAB (9/24/15)
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ColorModel, ImmutableVariableSpec, MutableVariableSpec, NLType, Setters, VariableSpecs, setBreed, setColor, setEnd1, setEnd2, setIsHidden, setLabel, setLabelColor, setShape, setThickness, setTieMode;
+
+  ColorModel = require('engine/core/colormodel');
+
+  NLType = require('../typechecker');
+
+  ({ImmutableVariableSpec, MutableVariableSpec} = require('../structure/variablespec'));
+
+  // In this file: `this.type` is `Link`
+
+  // (String) => Unit
+  setShape = function(shape) {
+    this._shape = shape.toLowerCase();
+    this._genVarUpdate("shape");
+  };
+
+  // (AbstractAgentSet|Breed|String) => Unit
+  setBreed = function(breed) {
+    var newNames, oldNames, ref, ref1, 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-link-breed agentset.");
+        }
+      } else {
+        return breed;
+      }
+    }).call(this);
+    this.world.linkManager.trackBreedChange(this, trueBreed, (ref = (ref1 = this._breed) != null ? ref1.name : void 0) != null ? ref : "");
+    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");
+    setShape.call(this, trueBreed.getShape());
+    this._refreshName();
+    if (!this.world.breedManager.links().contains(this)) {
+      this.world.breedManager.links().add(this);
+    }
+  };
+
+  // (Number) => Unit
+  setColor = function(color) {
+    this._color = ColorModel.wrapColor(color);
+    this._genVarUpdate("color");
+  };
+
+  // (Turtle) => Unit
+  setEnd1 = function(turtle) {
+    this.end1 = turtle;
+    this._genVarUpdate("end1");
+  };
+
+  // (Turtle) => Unit
+  setEnd2 = function(turtle) {
+    this.end2 = turtle;
+    this._genVarUpdate("end2");
+  };
+
+  // (Boolean) => Unit
+  setIsHidden = function(isHidden) {
+    this._isHidden = isHidden;
+    this._genVarUpdate("hidden?");
+  };
+
+  // (String) => Unit
+  setLabel = function(label) {
+    this._label = label;
+    this._genVarUpdate("label");
+  };
+
+  // (Number) => Unit
+  setLabelColor = function(color) {
+    this._labelcolor = ColorModel.wrapColor(color);
+    this._genVarUpdate("label-color");
+  };
+
+  // (Number) => Unit
+  setThickness = function(thickness) {
+    this._thickness = thickness;
+    this._genVarUpdate("thickness");
+  };
+
+  // (String) => Unit
+  setTieMode = function(mode) {
+    this.tiemode = mode;
+    this._genVarUpdate("tie-mode");
+  };
+
+  Setters = {setBreed, setColor, setEnd1, setEnd2, setIsHidden, setLabel, setLabelColor, setShape, setThickness, 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, 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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AbstractAgentSet, DeadSkippingIterator, JSType, LinkSet;
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  DeadSkippingIterator = require('./structure/deadskippingiterator');
+
+  JSType = require('util/typechecker');
+
+  module.exports = LinkSet = class LinkSet extends AbstractAgentSet {
+    // [T <: Turtle] @ ((() => Array[T])|Array[T], World, String) => LinkSet
+    constructor(agents, world, specialName) {
+      super(LinkSet._unwrap(agents, false), world, "links", specialName);
+      this._agents = agents;
+    }
+
+    // () => Iterator[T]
+    iterator() {
+      return new DeadSkippingIterator(LinkSet._unwrap(this._agents, true));
+    }
+
+    // () => Iterator[T]
+    _unsafeIterator() {
+      return new DeadSkippingIterator(LinkSet._unwrap(this._agents, false));
+    }
+
+    // I know, I know, this is insane, right?  "Why would you do this?!", you demand.  I don't blame you.  I don't like
+    // it, either.  But, look... we have a problem on our hands.  Special agentsets are a thing.  They can be stored
+    // into variables and then change from some code changing the special agentset.  With turtles, this works out fine,
+    // because turtles are ordered by `who` number, and `who` numbers are a function of time, so we can just give a
+    // `TurtleSet` a reference to the turtle array and grow it as we see fit.  Unfortunately, links are not quantally
+    // ordered; they're ordered based on their properties, so we either need to provide a thunk for getting the latest
+    // array, or we need to use a good sorting structure that represents the data as an array under the hood, and then
+    // we can pass around that array.  Passing thunks seems to be the better option to me.  --JAB (9/7/14)
+    // [T] @ ((() => Array[T])|Array[T]) => Array[T]
+    static _unwrap(agents, copy) {
+      if (JSType(agents).isFunction()) {
+        return agents();
+      } else if (copy) {
+        return agents.slice(0);
+      } else {
+        return agents;
+      }
+    }
+
+  };
+
+}).call(this);
+
+},{"./abstractagentset":"engine/core/abstractagentset","./structure/deadskippingiterator":"engine/core/structure/deadskippingiterator","util/typechecker":"util/typechecker"}],"engine/core/link":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AbstractAgentSet, AgentException, ColorModel, Death, EQ, ExtraVariableSpec, GT, LT, Link, Setters, Stamp, StampErase, StampMode, TurtleSet, VariableManager, VariableSpecs, linkCompare;
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  ColorModel = require('./colormodel');
+
+  linkCompare = require('./structure/linkcompare');
+
+  VariableManager = require('./structure/variablemanager');
+
+  TurtleSet = require('./turtleset');
+
+  ({
+    EQUALS: EQ,
+    GREATER_THAN: GT,
+    LESS_THAN: LT
+  } = require('util/comparator'));
+
+  ({
+    AgentException,
+    DeathInterrupt: Death
+  } = require('util/exception'));
+
+  ({Setters, VariableSpecs} = require('./link/linkvariables'));
+
+  ({ExtraVariableSpec} = require('./structure/variablespec'));
+
+  StampMode = class StampMode {
+    constructor(name1) { // (String) => StampMode
+      this.name = name1;
+    }
+
+  };
+
+  Stamp = new StampMode("normal");
+
+  StampErase = new StampMode("erase");
+
+  module.exports = Link = (function() {
+    class Link {
+
+      // The type signatures here can be found to the right of the parameters. --JAB (4/21/15)
+      constructor(id, isDirected, end1, end2, world, genUpdate, _registerDeath, _registerRemoval, _registerLinkStamp, _getLinksByBreedName, breed = this.world.breedManager.links(), _color = 5, _isHidden = false, _label = "", _labelcolor = 9.9, _shape = "default", _thickness = 0, tiemode = "none") { // RegLinkStampFunc, (String) => LinkSet, Breed, Number // Boolean, String, Number, String, Number // String
+        var varNames;
+        this.id = id;
+        this.isDirected = isDirected;
+        this.end1 = end1;
+        this.end2 = end2;
+        this.world = world;
+        this._registerDeath = _registerDeath;
+        this._registerRemoval = _registerRemoval; // Number, Boolean, Turtle, Turtle, World, (Updatable) => (String*) => Unit, (Number) => Unit, (Link) => Unit
+        this._registerLinkStamp = _registerLinkStamp;
+        this._getLinksByBreedName = _getLinksByBreedName;
+        this._color = _color;
+        this._isHidden = _isHidden;
+        this._label = _label;
+        this._labelcolor = _labelcolor;
+        this._shape = _shape;
+        this._thickness = _thickness;
+        this.tiemode = tiemode;
+        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?");
+      }
+
+      // () => String
+      getBreedName() {
+        return this._breed.name;
+      }
+
+      // () => String
+      getBreedNameSingular() {
+        return this._breed.singular;
+      }
+
+      // Tragically needed by `LinkCompare` for compliance with NetLogo's insane means of sorting links --JAB (9/6/14)
+      // () => Number
+      getBreedOrdinal() {
+        return this._breed.ordinal;
+      }
+
+      // Unit -> String
+      getName() {
+        return this._name;
+      }
+
+      // (String) => Any
+      getVariable(varName) {
+        return this._varManager[varName];
+      }
+
+      // (String, Any) => Unit
+      setVariable(varName, value) {
+        this._varManager[varName] = value;
+      }
+
+      // () => Nothing
+      die() {
+        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");
+      }
+
+      // () => Unit
+      stamp() {
+        this._drawStamp(Stamp);
+      }
+
+      // () => Unit
+      stampErase() {
+        this._drawStamp(StampErase);
+      }
+
+      // () => TurtleSet
+      bothEnds() {
+        return new TurtleSet([this.end1, this.end2], this.world);
+      }
+
+      // () => Turtle
+      otherEnd() {
+        if (this.end1 === this.world.selfManager.myself()) {
+          return this.end2;
+        } else {
+          return this.end1;
+        }
+      }
+
+      // () => Unit
+      tie() {
+        Setters.setTieMode.call(this, "fixed");
+      }
+
+      // () => Unit
+      untie() {
+        Setters.setTieMode.call(this, "none");
+      }
+
+      // () => Unit
+      updateEndRelatedVars() {
+        this._updateVarsByName("heading", "size", "midpointx", "midpointy");
+      }
+
+      // () => String
+      toString() {
+        if (!this.isDead()) {
+          return `(${this.getName()})`;
+        } else {
+          return "nobody";
+        }
+      }
+
+      // () => (Number, Number)
+      getCoords() {
+        return [this.getMidpointX(), this.getMidpointY()];
+      }
+
+      // () => Number
+      getHeading() {
+        var error;
+        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;
+          }
+        }
+      }
+
+      // () => Number
+      getMidpointX() {
+        return this.world.topology.midpointx(this.end1.xcor, this.end2.xcor);
+      }
+
+      // () => Number
+      getMidpointY() {
+        return this.world.topology.midpointy(this.end1.ycor, this.end2.ycor);
+      }
+
+      // () => Number
+      getSize() {
+        return this.world.topology.distanceXY(this.end1.xcor, this.end1.ycor, this.end2.xcor, this.end2.ycor);
+      }
+
+      // (String) => Boolean
+      isBreed(breedName) {
+        return this._breed.name.toUpperCase() === breedName.toUpperCase();
+      }
+
+      // () => Boolean
+      isDead() {
+        return this.id === -1;
+      }
+
+      // (() => Any) => Unit
+      ask(f) {
+        var base;
+        if (!this.isDead()) {
+          this.world.selfManager.askAgent(f)(this);
+          if (typeof (base = this.world.selfManager.self()).isDead === "function" ? base.isDead() : void 0) {
+            throw new Death;
+          }
+        } else {
+          throw new Error(`That ${this.getBreedNameSingular()} is dead.`);
+        }
+      }
+
+      // [Result] @ (() => Result) => Result
+      projectionBy(f) {
+        if (!this.isDead()) {
+          return this.world.selfManager.askAgent(f)(this);
+        } else {
+          throw new Error(`That ${this._breed.singular} is dead.`);
+        }
+      }
+
+      // (Any) => { toInt: Number }
+      compare(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]");
+        }
+      }
+
+      // () => Array[String]
+      varNames() {
+        return this._varManager.names();
+      }
+
+      // (StampMode) => Unit
+      _drawStamp(mode) {
+        var color, e1x, e1y, e2x, e2y, error, midX, midY, stampHeading;
+        ({
+          xcor: e1x,
+          ycor: e1y
+        } = this.end1);
+        ({
+          xcor: e2x,
+          ycor: e2y
+        } = this.end2);
+        stampHeading = (function() {
+          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);
+      }
+
+      // Unit -> Unit
+      _refreshName() {
+        this._name = `${this._breed.singular} ${this.end1.id} ${this.end2.id}`;
+      }
+
+      // (Breed) => Array[String]
+      _varNamesForBreed(breed) {
+        var linksBreed;
+        linksBreed = this.world.breedManager.links();
+        if (breed === linksBreed || (breed == null)) {
+          return linksBreed.varNames;
+        } else {
+          return linksBreed.varNames.concat(breed.varNames);
+        }
+      }
+
+      // () => Unit
+      _seppuku() {
+        this._registerDeath(this.id);
+      }
+
+      // (Array[String]) => VariableManager
+      _genVarManager(extraVarNames) {
+        var allSpecs, extraSpecs;
+        extraSpecs = extraVarNames.map(function(name) {
+          return new ExtraVariableSpec(name);
+        });
+        allSpecs = VariableSpecs.concat(extraSpecs);
+        return new VariableManager(this, allSpecs);
+      }
+
+      // (String) => Unit
+      _genVarUpdate(varName) {
+        this._updateVarsByName(varName);
+      }
+
+    };
+
+    // type RegLinkStampFunc = (Number, Number, Number, Number, Number, Number, Number, RGB, String, Number, String) => Unit
+    Link.prototype._breed = void 0; // Breed
+
+    Link.prototype._name = void 0; // String
+
+    Link.prototype._updateVarsByName = void 0; // (String*) => Unit
+
+    Link.prototype._varManager = void 0; // VariableManager
+
+    return Link;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+
+  // data Perspective =
+  var ExtraVariableSpec, Follow, NLType, Observe, Observer, Ride, VariableManager, Watch, agentToInt, difference, forEach, perspectiveFromNum, perspectiveFromString, perspectiveToNum, perspectiveToString;
+
+  Observe = {};
+
+  Ride = {};
+
+  Follow = {};
+
+  Watch = {};
+
+  agentToInt = require('./agenttoint');
+
+  NLType = require('./typechecker');
+
+  VariableManager = require('./structure/variablemanager');
+
+  ({difference, forEach} = require('brazierjs/array'));
+
+  ({ExtraVariableSpec} = require('./structure/variablespec'));
+
+  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, Ride, Follow, Watch, perspectiveFromNum, perspectiveToNum, perspectiveFromString, perspectiveToString};
+
+  module.exports.Observer = Observer = (function() {
+    class Observer {
+
+      // ((Updatable) => (String*) => Unit, Array[String], Array[String]) => Observer
+      constructor(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);
+      }
+
+      // () => Unit
+      clearCodeGlobals() {
+        forEach((name) => {
+          this._varManager[name] = 0;
+        })(this._codeGlobalNames);
+      }
+
+      // (Turtle) => Unit
+      follow(turtle) {
+        this._perspective = Follow;
+        this._targetAgent = turtle;
+        this._updatePerspective();
+      }
+
+      // (String) => Any
+      getGlobal(varName) {
+        return this._varManager[varName];
+      }
+
+      // (String) => Any
+      getVariable(varName) {
+        return this.getGlobal(varName);
+      }
+
+      // () => Perspective
+      getPerspective() {
+        return this._perspective;
+      }
+
+      // (Perspective, Agent) => Unit
+      setPerspective(perspective, subject) {
+        this._perspective = perspective;
+        this._targetAgent = subject;
+        this._updatePerspective();
+      }
+
+      // () => Unit
+      resetPerspective() {
+        this._perspective = Observe;
+        this._targetAgent = null;
+        this._updatePerspective();
+      }
+
+      // (Turtle) => Unit
+      ride(turtle) {
+        this._perspective = Ride;
+        this._targetAgent = turtle;
+        this._updatePerspective();
+      }
+
+      // (String, Any) => Unit
+      setGlobal(varName, value) {
+        this._varManager[varName] = value;
+      }
+
+      // (String, Any) => Unit
+      setVariable(varName, value) {
+        this.setGlobal(varName, value);
+      }
+
+      // () => Agent
+      subject() {
+        var ref;
+        return (ref = this._targetAgent) != null ? ref : Nobody;
+      }
+
+      // (Turtle) => Unit
+      unfocus(turtle) {
+        if (this._targetAgent === turtle) {
+          this.resetPerspective();
+        }
+      }
+
+      // () => Array[String]
+      varNames() {
+        return this._varManager.names();
+      }
+
+      // (Agent) => Unit
+      watch(agent) {
+        var type;
+        type = NLType(agent);
+        this._perspective = Watch;
+        this._targetAgent = type.isTurtle() || type.isPatch() ? agent : Nobody;
+        this._updatePerspective();
+      }
+
+      // () => Unit
+      _updatePerspective() {
+        this._updateVarsByName("perspective", "targetAgent");
+      }
+
+      // Used by `Updater` --JAB (9/4/14)
+      // () => (Number, Number)
+      _getTargetAgentUpdate() {
+        if (this._targetAgent != null) {
+          return [agentToInt(this._targetAgent), this._targetAgent.id];
+        } else {
+          return null;
+        }
+      }
+
+    };
+
+    Observer.prototype.id = 0; // Number
+
+    Observer.prototype._varManager = void 0; // VariableManager
+
+    Observer.prototype._perspective = void 0; // Perspective
+
+    Observer.prototype._targetAgent = void 0; // Agent
+
+    Observer.prototype._codeGlobalNames = void 0; // Array[String]
+
+    Observer.prototype._updateVarsByName = void 0; // (String*) => Unit
+
+    return Observer;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ColorModel, ImmutableVariableSpec, MutableVariableSpec, Setters, VariableSpecs, all, isArray, isNumber, setPcolor, setPlabel, setPlabelColor;
+
+  ColorModel = require('engine/core/colormodel');
+
+  ({ImmutableVariableSpec, MutableVariableSpec} = require('../structure/variablespec'));
+
+  ({all} = require('brazierjs/array'));
+
+  ({isArray, isNumber} = require('brazierjs/type'));
+
+  // In this file: `this.type` is `Patch`
+
+  // (Number|(Number, Number, Number)) => Unit
+  setPcolor = function(color) {
+    var wrappedColor;
+    wrappedColor = ColorModel.wrapColor(color);
+    if (this._pcolor !== wrappedColor) {
+      this._pcolor = wrappedColor;
+      this._genVarUpdate("pcolor");
+      if ((isNumber(wrappedColor) && wrappedColor !== 0) || (isArray(wrappedColor) && !all(function(n) {
+        return n % 10 === 0;
+      })(wrappedColor))) {
+        this._declareNonBlackPatch();
+      }
+    }
+  };
+
+  // (String) => Unit
+  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();
+    }
+  };
+
+  // (Number) => Unit
+  setPlabelColor = function(color) {
+    this._plabelcolor = ColorModel.wrapColor(color);
+    this._genVarUpdate("plabel-color");
+  };
+
+  Setters = {setPcolor, setPlabel, 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, VariableSpecs};
+
+}).call(this);
+
+},{"../structure/variablespec":"engine/core/structure/variablespec","brazierjs/array":"brazier/array","brazierjs/type":"brazier/type","engine/core/colormodel":"engine/core/colormodel"}],"engine/core/patchset":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AbstractAgentSet, Iterator, PatchSet;
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  Iterator = require('util/iterator');
+
+  module.exports = PatchSet = class PatchSet extends AbstractAgentSet {
+    // [T <: Patch] @ (Array[T], World, String) => PatchSet
+    constructor(agents, world, specialName) {
+      super(agents, world, "patches", specialName);
+    }
+
+  };
+
+}).call(this);
+
+},{"./abstractagentset":"engine/core/abstractagentset","util/iterator":"util/iterator"}],"engine/core/patch":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Comparator, Death, ExtraVariableSpec, Patch, Setters, TopologyInterrupt, TurtleSet, VariableManager, VariableSpecs, filter, foldl;
+
+  TurtleSet = require('./turtleset');
+
+  VariableManager = require('./structure/variablemanager');
+
+  Comparator = require('util/comparator');
+
+  ({filter, foldl} = require('brazierjs/array'));
+
+  ({
+    DeathInterrupt: Death,
+    TopologyInterrupt
+  } = require('util/exception'));
+
+  ({Setters, VariableSpecs} = require('./patch/patchvariables'));
+
+  ({ExtraVariableSpec} = require('./structure/variablespec'));
+
+  module.exports = Patch = (function() {
+    class Patch {
+
+      // (Number, Number, Number, World, (Updatable) => (String*) => Unit, () => Unit, () => Unit, () => Unit, (String) => LinkSet, Number, String, Number) => Patch
+      constructor(id, pxcor, pycor, world, _genUpdate, _declareNonBlackPatch, _decrementPatchLabelCount, _incrementPatchLabelCount, _pcolor = 0.0, _plabel = "", _plabelcolor = 9.9) {
+        // (Number, Number) => Agent
+        this.patchAt = this.patchAt.bind(this);
+        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;
+        this._plabel = _plabel;
+        this._plabelcolor = _plabelcolor;
+        this._turtles = [];
+        this._varManager = this._genVarManager(this.world.patchesOwnNames);
+      }
+
+      getName() {
+        return `patch ${this.pxcor} ${this.pycor}`;
+      }
+
+      // (String) => Any
+      getVariable(varName) {
+        return this._varManager[varName];
+      }
+
+      // (String, Any) => Unit
+      setVariable(varName, value) {
+        this._varManager[varName] = value;
+      }
+
+      // (String) => Any
+      getPatchVariable(varName) {
+        return this._varManager[varName];
+      }
+
+      // (String, Any) => Unit
+      setPatchVariable(varName, value) {
+        this._varManager[varName] = value;
+      }
+
+      // (Turtle) => Unit
+      untrackTurtle(turtle) {
+        this._turtles.splice(this._turtles.indexOf(turtle, 0), 1);
+      }
+
+      // (Turtle) => Unit
+      trackTurtle(turtle) {
+        this._turtles.push(turtle);
+      }
+
+      // () => (Number, Number)
+      getCoords() {
+        return [this.pxcor, this.pycor];
+      }
+
+      // (Agent) => Number
+      distance(agent) {
+        return this.world.topology.distance(this.pxcor, this.pycor, agent);
+      }
+
+      // (Number, Number) => Number
+      distanceXY(x, y) {
+        return this.world.topology.distanceXY(this.pxcor, this.pycor, x, y);
+      }
+
+      // (Turtle|Patch) => Number
+      towards(agent) {
+        var x, y;
+        [x, y] = agent.getCoords();
+        return this.towardsXY(x, y);
+      }
+
+      // (Number, Number) => Number
+      towardsXY(x, y) {
+        return this.world.topology.towards(this.pxcor, this.pycor, x, y);
+      }
+
+      // () => TurtleSet
+      turtlesHere() {
+        return new TurtleSet(this._turtles.slice(0), this.world);
+      }
+
+      // (() => Any) => Unit
+      ask(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;
+        }
+      }
+
+      // [Result] @ (() => Result) => Result
+      projectionBy(f) {
+        return this.world.selfManager.askAgent(f)(this);
+      }
+
+      // () => PatchSet
+      getNeighbors() {
+        return this.world.getNeighbors(this.pxcor, this.pycor);
+      }
+
+      // () => PatchSet
+      getNeighbors4() {
+        return this.world.getNeighbors4(this.pxcor, this.pycor);
+      }
+
+      // (Number, String) => TurtleSet
+      sprout(n, breedName) {
+        return this.world.turtleManager.createTurtles(n, breedName, this.pxcor, this.pycor);
+      }
+
+      // (String) => TurtleSet
+      breedHere(breedName) {
+        return new TurtleSet(this.breedHereArray(breedName), this.world);
+      }
+
+      // (String) => Array[Turtle]
+      breedHereArray(breedName) {
+        return filter(function(turtle) {
+          return turtle.getBreedName() === breedName;
+        })(this._turtles);
+      }
+
+      // (Number, Number) => TurtleSet
+      turtlesAt(dx, dy) {
+        return this.patchAt(dx, dy).turtlesHere();
+      }
+
+      // (String, Number, Number) => TurtleSet
+      breedAt(breedName, dx, dy) {
+        return this.patchAt(dx, dy).breedHere(breedName);
+      }
+
+      patchAt(dx, dy) {
+        return this.patchAtCoords(this.pxcor + dx, this.pycor + dy);
+      }
+
+      // (Number, Number) => Agent
+      patchAtCoords(x, y) {
+        return this.world.patchAtCoords(x, y);
+      }
+
+      // (Number, Number) => Agent
+      patchAtHeadingAndDistance(angle, distance) {
+        return this.world.patchAtHeadingAndDistanceFrom(angle, distance, this.pxcor, this.pycor);
+      }
+
+      // () => Unit
+      watchMe() {
+        this.world.observer.watch(this);
+      }
+
+      // [T] @ (AbstractAgentSet[T], Number) => AbstractAgentSet[T]
+      inRadius(agents, radius) {
+        return this.world.topology.inRadius(this.pxcor, this.pycor, agents, radius);
+      }
+
+      // (Patch) => { toInt: Number }
+      compare(x) {
+        return Comparator.numericCompare(this.id, x.id);
+      }
+
+      // Unit -> Unit
+      isDead() {
+        return false;
+      }
+
+      // () => String
+      toString() {
+        return `(${this.getName()})`;
+      }
+
+      // () => Unit
+      reset() {
+        this._varManager = this._genVarManager(this.world.patchesOwnNames);
+        Setters.setPcolor.call(this, 0);
+        Setters.setPlabel.call(this, '');
+        Setters.setPlabelColor.call(this, 9.9);
+      }
+
+      // () => Array[String]
+      varNames() {
+        return this._varManager.names();
+      }
+
+      // Array[String] => VariableManager
+      _genVarManager(extraVarNames) {
+        var allSpecs, extraSpecs;
+        extraSpecs = extraVarNames.map(function(name) {
+          return new ExtraVariableSpec(name);
+        });
+        allSpecs = VariableSpecs.concat(extraSpecs);
+        return new VariableManager(this, allSpecs);
+      }
+
+      // (String) => Unit
+      _genVarUpdate(varName) {
+        this._genUpdate(this)(varName);
+      }
+
+      // (PatchSet, String) => Number
+      _neighborSum(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());
+      }
+
+      // (String) => Number
+      _optimalNSum(varName) {
+        return this._neighborSum(this.getNeighbors(), varName);
+      }
+
+      // (String) => Number
+      _optimalNSum4(varName) {
+        return this._neighborSum(this.getNeighbors4(), varName);
+      }
+
+      _ifFalse(value, replacement) {
+        if (value === false) {
+          return replacement;
+        } else {
+          return value;
+        }
+      }
+
+      // () => Patch
+      _optimalPatchHereInternal() {
+        return this;
+      }
+
+      _optimalPatchNorth() {
+        return this.world.topology._getPatchNorth(this.pxcor, this.pycor) || Nobody;
+      }
+
+      _optimalPatchEast() {
+        return this.world.topology._getPatchEast(this.pxcor, this.pycor) || Nobody;
+      }
+
+      _optimalPatchSouth() {
+        return this.world.topology._getPatchSouth(this.pxcor, this.pycor) || Nobody;
+      }
+
+      _optimalPatchWest() {
+        return this.world.topology._getPatchWest(this.pxcor, this.pycor) || Nobody;
+      }
+
+      _optimalPatchNorthEast() {
+        return this.world.topology._getPatchNorthEast(this.pxcor, this.pycor) || Nobody;
+      }
+
+      _optimalPatchSouthEast() {
+        return this.world.topology._getPatchSouthEast(this.pxcor, this.pycor) || Nobody;
+      }
+
+      _optimalPatchSouthWest() {
+        return this.world.topology._getPatchSouthWest(this.pxcor, this.pycor) || Nobody;
+      }
+
+      _optimalPatchNorthWest() {
+        return this.world.topology._getPatchNorthWest(this.pxcor, this.pycor) || Nobody;
+      }
+
+    };
+
+    Patch.prototype._turtles = void 0; // Array[Turtle]
+
+    Patch.prototype._varManager = void 0; // VariableManager
+
+    return Patch;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AgentKey, Comparator, NLType, NumberKey, OtherKey, StringKey, filter, foldl, initializeDictionary, isEmpty, map, pairs, pipeline, stableSort;
+
+  NLType = require('./typechecker');
+
+  Comparator = require('util/comparator');
+
+  stableSort = require('util/stablesort');
+
+  ({filter, foldl, isEmpty, map} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  ({pairs} = require('brazierjs/object'));
+
+  NumberKey = "number";
+
+  StringKey = "string";
+
+  AgentKey = "agent";
+
+  OtherKey = "other";
+
+  // [T] @ (Array[String], (String) => T) => Object[String, T]
+  initializeDictionary = function(keys, generator) {
+    var f;
+    f = function(acc, key) {
+      acc[key] = generator(key);
+      return acc;
+    };
+    return foldl(f)({})(keys);
+  };
+
+  // [T <: Agent, U] @ (Array[T]) => ((T) => U) => Array[T]
+  module.exports = function(agents) {
+    return function(f) {
+      var agentValuePairs, baseAcc, first, mapBuildFunc, 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([x, _]) {
+          return x;
+        };
+        baseAcc = initializeDictionary([NumberKey, StringKey, AgentKey, OtherKey], function() {
+          return [];
+        });
+        typeNameToPairsMap = foldl(mapBuildFunc)(baseAcc)(agents);
+        typesInMap = pipeline(pairs, filter(function([_, x]) {
+          return !isEmpty(x);
+        }), map(first))(typeNameToPairsMap);
+        [typeName, sortingFunc] = (function() {
+          switch (typesInMap.join(" ")) {
+            case NumberKey:
+              return [
+                NumberKey,
+                function(arg,
+                arg1) {
+                  var arg,
+                arg1,
+                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 arg,
+                arg1,
+                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,
+                arg1;
+                  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.");
+          }
+        })();
+        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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var DeadSkippingIterator, Iterator;
+
+  Iterator = require('util/iterator');
+
+  module.exports = DeadSkippingIterator = (function() {
+    class DeadSkippingIterator extends Iterator {
+
+      // [T] @ (Array[T]) => DeadSkippingIterator
+      constructor(items) {
+        super(items);
+        this._i = 0;
+      }
+
+      all(f) {
+        var j, len, ref, x;
+        ref = this._items;
+        for (j = 0, len = ref.length; j < len; j++) {
+          x = ref[j];
+          if (!x.isDead()) {
+            if (!f(x)) {
+              return false;
+            }
+          }
+        }
+        return true;
+      }
+
+      contains(x) {
+        var j, len, ref, y;
+        ref = this._items;
+        for (j = 0, len = ref.length; j < len; j++) {
+          y = ref[j];
+          if (!x.isDead()) {
+            if (x === y) {
+              return true;
+            }
+          }
+        }
+        return false;
+      }
+
+      exists(f) {
+        var j, len, ref, x;
+        ref = this._items;
+        for (j = 0, len = ref.length; j < len; j++) {
+          x = ref[j];
+          if (!x.isDead()) {
+            if (f(x)) {
+              return true;
+            }
+          }
+        }
+        return false;
+      }
+
+      filter(f) {
+        var j, len, ref, results, x;
+        ref = this._items;
+        results = [];
+        for (j = 0, len = ref.length; j < len; j++) {
+          x = ref[j];
+          if ((!x.isDead()) && f(x)) {
+            results.push(x);
+          }
+        }
+        return results;
+      }
+
+      // [U] @ ((T) => U) => Array[U]
+      map(f) {
+        var acc;
+        acc = [];
+        while (this._hasNext()) {
+          acc.push(f(this._next()));
+        }
+        return acc;
+      }
+
+      // ((T) => Unit) => Unit
+      forEach(f) {
+        while (this._hasNext()) {
+          f(this._next());
+        }
+      }
+
+      // They're asking for the `n`th not-dead item, so every time we see a dead item, increment the index and the `n`.
+
+      // start           iteration 1     iteration 2     iteration 3     iteration 4
+      // [0][X][X][1][2] [0][X][X][1][2] [0][X][X][1][2] [0][X][X][1][2] [0][X][X][1][2]
+      // i=0                i=1                i=2                i=3                i=4
+      //       n=2             n=2                n=3                n=4             n=4
+
+      // (Int) => T
+      nthItem(n) {
+        var i;
+        i = 0;
+        while (i <= n) {
+          if (this._items[i].isDead()) {
+            n++;
+          }
+          i++;
+        }
+        return this._items[n];
+      }
+
+      // () => Int
+      size() {
+        return this._items.reduce(function(acc, item) {
+          return acc + (item.isDead() ? 0 : 1);
+        }, 0);
+      }
+
+      // () => Array[T]
+      toArray() {
+        var acc;
+        acc = [];
+        while (this._hasNext()) {
+          acc.push(this._next());
+        }
+        return acc;
+      }
+
+      // () => Boolean
+      _hasNext() {
+        this._skipToNext();
+        return this._isntEmpty();
+      }
+
+      // () => T
+      _next() {
+        this._skipToNext();
+        return this._items[this._i++];
+      }
+
+      // () => Unit
+      _skipToNext() {
+        while (this._isntEmpty() && this._items[this._i].isDead()) {
+          this._i++;
+        }
+      }
+
+      // () => Boolean
+      _isntEmpty() {
+        return this._i < this._items.length;
+      }
+
+    };
+
+    DeadSkippingIterator.prototype._i = void 0; // Number
+
+    return DeadSkippingIterator;
+
+  }).call(this);
+
+}).call(this);
+
+},{"util/iterator":"util/iterator"}],"engine/core/structure/linkcompare":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+
+  // (Link, Link) => Number
+  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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Down, Erase, PenManager, PenStatus, Up;
+
+  PenStatus = class PenStatus {
+    constructor(_name) { // (String) => PenStatus
+      this._name = _name;
+    }
+
+    toString() {
+      return this._name; // () => String
+    }
+
+  };
+
+  Up = new PenStatus("up");
+
+  Down = new PenStatus("down");
+
+  Erase = new PenStatus("erase");
+
+  PenManager = class PenManager {
+    // ((String*) => Unit, Number, PenStatus) => PenManager
+    constructor(_updateFunc, _size = 1.0, _status = Up) {
+      this._updateFunc = _updateFunc;
+      this._size = _size;
+      this._status = _status;
+    }
+
+    // () => Number
+    getSize() {
+      return this._size;
+    }
+
+    // () => PenStatus
+    getMode() {
+      return this._status;
+    }
+
+    // This is (tragically) JVM NetLogo's idea of sanity... --JAB (5/26/14)
+    // (String) => Unit
+    setPenMode(position) {
+      if (position === Up.toString()) {
+        this.raisePen();
+      } else if (position === Erase.toString()) {
+        this.useEraser();
+      } else {
+        this.lowerPen();
+      }
+    }
+
+    // () => Unit
+    raisePen() {
+      this._updateStatus(Up);
+    }
+
+    // () => Unit
+    lowerPen() {
+      this._updateStatus(Down);
+    }
+
+    // () => Unit
+    useEraser() {
+      this._updateStatus(Erase);
+    }
+
+    // (Number) => Unit
+    setSize(size) {
+      this._updateSize(size);
+    }
+
+    // ((String*) => Unit) => PenManager
+    clone(updateFunc) {
+      return new PenManager(updateFunc, this._size, this._status);
+    }
+
+    // (Number) => Unit
+    _updateSize(newSize) {
+      this._size = newSize;
+      this._updateFunc("pen-size");
+    }
+
+    // (PenStatus) => Unit
+    _updateStatus(newStatus) {
+      this._status = newStatus;
+      this._updateFunc("pen-mode");
+    }
+
+  };
+
+  module.exports = {
+    PenManager,
+    PenStatus: {Up, Down, Erase}
+  };
+
+}).call(this);
+
+},{}],"engine/core/structure/selfmanager":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var DeathInterrupt, SelfManager, ignorantly, ignoring;
+
+  ({DeathInterrupt, ignoring} = require('util/exception'));
+
+  ignorantly = ignoring(DeathInterrupt);
+
+  module.exports = SelfManager = (function() {
+    class SelfManager {
+
+      // () => SelfManager
+      constructor() {
+        // () => SelfType
+        this.self = this.self.bind(this);
+        // Switch from letting CoffeeScript bind "this" to handling it manually to avoid creating extra anonymous functions
+        // They add GC pressure, causing runtime slowdown - JMB 07/2017
+        // [T] @ (() => T) => (Agent) => T
+        this.askAgent = this.askAgent.bind(this);
+        this._self = 0;
+        this._myself = 0;
+      }
+
+      self() {
+        return this._self;
+      }
+
+      // () => SelfType
+      myself() {
+        if (this._myself !== 0) {
+          return this._myself;
+        } else {
+          throw new Error("There is no agent for MYSELF to refer to.");
+        }
+      }
+
+      askAgent(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;
+          }
+        };
+      }
+
+    };
+
+    // type SelfType = Number|Agent // The type that `self` or `myself` could be at any time
+    SelfManager.prototype._self = void 0; // SelfType
+
+    SelfManager.prototype._myself = void 0; // SelfType
+
+    return SelfManager;
+
+  }).call(this);
+
+}).call(this);
+
+},{"util/exception":"util/exception"}],"engine/core/structure/variablemanager":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ExtraVariableSpec, ImmutableVariableSpec, MutableVariableSpec, VariableManager, difference;
+
+  ({difference} = require('brazierjs/array'));
+
+  ({ExtraVariableSpec, ImmutableVariableSpec, MutableVariableSpec} = require('./variablespec'));
+
+  module.exports = VariableManager = (function() {
+    class VariableManager {
+
+      // (Agent, Array[VariableSpec[_]]) => VariableManager
+      constructor(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]);
+            results.push(name);
+          }
+          return results;
+        })();
+      }
+
+      // () => Array[String]
+      names() {
+        return this._names;
+      }
+
+      // (Array[String], Array[String]) => Unit
+      refineBy(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);
+      }
+
+      // (Array[VariableSpec]) => Unit
+      _addVarsBySpec(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,
+                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);
+        }
+      }
+
+      // (String, Object) => Unit
+      _defineProperty(propName, config) {
+        Object.defineProperty(this, propName, config);
+      }
+
+    };
+
+    VariableManager.prototype._names = void 0; // Array[String]
+
+    return VariableManager;
+
+  }).call(this);
+
+}).call(this);
+
+},{"./variablespec":"engine/core/structure/variablespec","brazierjs/array":"brazier/array"}],"engine/core/structure/variablespec":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ExtraVariableSpec, ImmutableVariableSpec, MutableVariableSpec, VariableSpec;
+
+  VariableSpec = class VariableSpec {
+    // (String) => VariableSpec[T]
+    constructor(name1) {
+      this.name = name1;
+    }
+
+  };
+
+  ExtraVariableSpec = class ExtraVariableSpec extends VariableSpec {};
+
+  ImmutableVariableSpec = class ImmutableVariableSpec extends VariableSpec {
+    // (String, () => T) => ImmutableVariableSpec[T]
+    constructor(name, get) {
+      super(name);
+      this.get = get;
+    }
+
+  };
+
+  MutableVariableSpec = class MutableVariableSpec extends VariableSpec {
+    //(String, () => T, (T) => Unit) => MutableVariableSpec[T]
+    constructor(name, get, set) {
+      super(name);
+      this.get = get;
+      this.set = set;
+    }
+
+  };
+
+  module.exports = {ExtraVariableSpec, ImmutableVariableSpec, MutableVariableSpec, VariableSpec};
+
+}).call(this);
+
+},{}],"engine/core/topology/box":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Box, Topology,
+    boundMethodCheck = function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } };
+
+  Topology = require('./topology');
+
+  module.exports = Box = (function() {
+    class Box extends Topology {
+      constructor() {
+        super(...arguments);
+        // (Number, Number) => Number
+        this._shortestX = this._shortestX.bind(this);
+        // (Number, Number) => Number
+        this._shortestY = this._shortestY.bind(this);
+      }
+
+
+      // (Number) => Number
+      wrapX(pos) {
+        return this._wrapXCautiously(pos);
+      }
+
+      // (Number) => Number
+      wrapY(pos) {
+        return this._wrapYCautiously(pos);
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorth(pxcor, pycor) {
+        return (pycor !== this.maxPycor) && this._getPatchAt(pxcor, pycor + 1);
+      }
+
+      _getPatchSouth(pxcor, pycor) {
+        return (pycor !== this.minPycor) && this._getPatchAt(pxcor, pycor - 1);
+      }
+
+      _getPatchEast(pxcor, pycor) {
+        return (pxcor !== this.maxPxcor) && this._getPatchAt(pxcor + 1, pycor);
+      }
+
+      _getPatchWest(pxcor, pycor) {
+        return (pxcor !== this.minPxcor) && this._getPatchAt(pxcor - 1, pycor);
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorthWest(pxcor, pycor) {
+        return (pycor !== this.maxPycor) && (pxcor !== this.minPxcor) && this._getPatchAt(pxcor - 1, pycor + 1);
+      }
+
+      _getPatchSouthWest(pxcor, pycor) {
+        return (pycor !== this.minPycor) && (pxcor !== this.minPxcor) && this._getPatchAt(pxcor - 1, pycor - 1);
+      }
+
+      _getPatchSouthEast(pxcor, pycor) {
+        return (pycor !== this.minPycor) && (pxcor !== this.maxPxcor) && this._getPatchAt(pxcor + 1, pycor - 1);
+      }
+
+      _getPatchNorthEast(pxcor, pycor) {
+        return (pycor !== this.maxPycor) && (pxcor !== this.maxPxcor) && this._getPatchAt(pxcor + 1, pycor + 1);
+      }
+
+      _shortestX(x1, x2) {
+        boundMethodCheck(this, Box);
+        return this._shortestNotWrapped(x1, x2);
+      }
+
+      _shortestY(y1, y2) {
+        boundMethodCheck(this, Box);
+        return this._shortestNotWrapped(y1, y2);
+      }
+
+    };
+
+    Box.prototype._wrapInX = false; // Boolean
+
+    Box.prototype._wrapInY = false; // Boolean
+
+    return Box;
+
+  }).call(this);
+
+}).call(this);
+
+},{"./topology":"engine/core/topology/topology"}],"engine/core/topology/diffuser":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+
+  // There are some key things to keep in mind to keep this code in sync with how headless/desktop operates:
+
+  // 1. The calculations must be done from patch perspective - diffusing "into" the patch, not "out to" surrounding patches
+  // 2. Changes from an earlier patch diffuse are not considered by later patches during a diffuse operation (hence the scratch array).
+  // 3. The patch sums must be done in "cross 4" then "diagonal 4" order to keep floating point math happy.
+  // 4. The `sum4` method must match what's used by headless/desktop - the high/low sorting is critical for floating point.
+
+  // -JMB March 2018
+  var Diffuser;
+
+  module.exports = Diffuser = (function() {
+    class Diffuser {
+      constructor(_setPatchVariable, _width, _height, wrapInX, wrapInY) {
+        this._setPatchVariable = _setPatchVariable;
+        this._width = _width;
+        this._height = _height;
+        this._wrapWest = wrapInX ? this._width - 1 : Diffuser.CENTER;
+        this._wrapEast = wrapInX ? 1 - this._width : Diffuser.CENTER;
+        this._wrapNorth = wrapInY ? this._height - 1 : Diffuser.CENTER;
+        this._wrapSouth = wrapInY ? 1 - this._height : Diffuser.CENTER;
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse to patches)
+      diffuse4(varName, coefficient, scratch) {
+        this._center4(varName, coefficient, scratch);
+        this._xBorders4(varName, coefficient, scratch);
+        this._yBorders4(varName, coefficient, scratch);
+        return this._corners4(varName, coefficient, scratch);
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse to patches)
+      diffuse8(varName, coefficient, scratch) {
+        this._center8(varName, coefficient, scratch);
+        this._xBorders8(varName, coefficient, scratch);
+        this._yBorders8(varName, coefficient, scratch);
+        return this._corners8(varName, coefficient, scratch);
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse all non-edge patches)
+      _center4(varName, coefficient, scratch) {
+        var lastX, lastY, x, y;
+        lastX = this._width - 1;
+        lastY = this._height - 1;
+        x = 1;
+        while (x < lastX) {
+          y = 1;
+          while (y < lastY) {
+            this._patch4(x, y, varName, coefficient, scratch, Diffuser.WEST, Diffuser.EAST, Diffuser.NORTH, Diffuser.SOUTH);
+            y += 1;
+          }
+          x += 1;
+        }
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse all non-edge patches)
+      _center8(varName, coefficient, scratch) {
+        var lastX, lastY, x, y;
+        lastX = this._width - 1;
+        lastY = this._height - 1;
+        x = 1;
+        while (x < lastX) {
+          y = 1;
+          while (y < lastY) {
+            this._patch8(x, y, varName, coefficient, scratch, Diffuser.WEST, Diffuser.EAST, Diffuser.NORTH, Diffuser.SOUTH, Diffuser.EAST_NORTH, Diffuser.WEST_NORTH, Diffuser.EAST_SOUTH, Diffuser.WEST_SOUTH);
+            y += 1;
+          }
+          x += 1;
+        }
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse non-corner y-edge patches)
+      _yBorders4(varName, coefficient, scratch) {
+        var lastX, x, y;
+        lastX = this._width - 1;
+        x = 1;
+        while (x < lastX) {
+          y = 0; // wrap to the north
+          this._patch4(x, y, varName, coefficient, scratch, Diffuser.WEST, Diffuser.EAST, this._wrapNorth, Diffuser.SOUTH);
+          y = this._height - 1; // wrap to the south
+          this._patch4(x, y, varName, coefficient, scratch, Diffuser.WEST, Diffuser.EAST, Diffuser.NORTH, this._wrapSouth);
+          x += 1;
+        }
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse non-corner y-edge patches)
+      _yBorders8(varName, coefficient, scratch) {
+        var eastNorth, eastSouth, lastX, westNorth, westSouth, x, y;
+        lastX = this._width - 1;
+        eastNorth = (this._wrapNorth === 0 ? Diffuser.CURRENT : {
+          x: 1,
+          y: this._wrapNorth
+        });
+        westNorth = (this._wrapNorth === 0 ? Diffuser.CURRENT : {
+          x: -1,
+          y: this._wrapNorth
+        });
+        eastSouth = (this._wrapSouth === 0 ? Diffuser.CURRENT : {
+          x: 1,
+          y: this._wrapSouth
+        });
+        westSouth = (this._wrapSouth === 0 ? Diffuser.CURRENT : {
+          x: -1,
+          y: this._wrapSouth
+        });
+        x = 1;
+        while (x < lastX) {
+          y = 0; // wrap to the north
+          this._patch8(x, y, varName, coefficient, scratch, Diffuser.WEST, Diffuser.EAST, this._wrapNorth, Diffuser.SOUTH, eastNorth, westNorth, Diffuser.EAST_SOUTH, Diffuser.WEST_SOUTH);
+          y = this._height - 1; // wrap to the south
+          this._patch8(x, y, varName, coefficient, scratch, Diffuser.WEST, Diffuser.EAST, Diffuser.NORTH, this._wrapSouth, Diffuser.EAST_NORTH, Diffuser.WEST_NORTH, eastSouth, westSouth);
+          x += 1;
+        }
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse non-corner x-edge patches)
+      _xBorders4(varName, coefficient, scratch) {
+        var lastY, x, y;
+        lastY = this._height - 1;
+        y = 1;
+        while (y < lastY) {
+          x = 0; // wrap to the west
+          this._patch4(x, y, varName, coefficient, scratch, this._wrapWest, Diffuser.EAST, Diffuser.NORTH, Diffuser.SOUTH);
+          x = this._width - 1; // wrap to the east
+          this._patch4(x, y, varName, coefficient, scratch, Diffuser.WEST, this._wrapEast, Diffuser.NORTH, Diffuser.SOUTH);
+          y += 1;
+        }
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse non-corner x-edge patches)
+      _xBorders8(varName, coefficient, scratch) {
+        var eastNorth, eastSouth, lastY, westNorth, westSouth, x, y;
+        lastY = this._height - 1;
+        eastNorth = (this._wrapEast === 0 ? Diffuser.CURRENT : {
+          x: this._wrapEast,
+          y: -1
+        });
+        westNorth = (this._wrapWest === 0 ? Diffuser.CURRENT : {
+          x: this._wrapWest,
+          y: -1
+        });
+        eastSouth = (this._wrapEast === 0 ? Diffuser.CURRENT : {
+          x: this._wrapEast,
+          y: 1
+        });
+        westSouth = (this._wrapWest === 0 ? Diffuser.CURRENT : {
+          x: this._wrapWest,
+          y: 1
+        });
+        y = 1;
+        while (y < lastY) {
+          x = 0; // wrap to the west
+          this._patch8(x, y, varName, coefficient, scratch, this._wrapWest, Diffuser.EAST, Diffuser.NORTH, Diffuser.SOUTH, Diffuser.EAST_NORTH, westNorth, Diffuser.EAST_SOUTH, westSouth);
+          x = this._width - 1; // wrap to the east
+          this._patch8(x, y, varName, coefficient, scratch, Diffuser.WEST, this._wrapEast, Diffuser.NORTH, Diffuser.SOUTH, eastNorth, Diffuser.WEST_NORTH, eastSouth, Diffuser.WEST_SOUTH);
+          y += 1;
+        }
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse all corner patches)
+      _corners4(varName, coefficient, scratch) {
+        var x, y;
+        x = 0; // Wrap west
+        y = 0; // Wrap to the north
+        this._patch4(x, y, varName, coefficient, scratch, this._wrapWest, Diffuser.EAST, this._wrapNorth, Diffuser.SOUTH);
+        x = 0; // Wrap to the west
+        y = this._height - 1; // Wrap to the south
+        this._patch4(x, y, varName, coefficient, scratch, this._wrapWest, Diffuser.EAST, Diffuser.NORTH, this._wrapSouth);
+        x = this._width - 1; // Wrap to the east
+        y = 0; // Wrap to the north
+        this._patch4(x, y, varName, coefficient, scratch, Diffuser.WEST, this._wrapEast, this._wrapNorth, Diffuser.SOUTH);
+        x = this._width - 1; // Wrap east
+        y = this._height - 1; // Wrap south
+        this._patch4(x, y, varName, coefficient, scratch, Diffuser.WEST, this._wrapEast, Diffuser.NORTH, this._wrapSouth);
+      }
+
+      // (String, Number, Array[Number]) => Unit (side effect: diffuse all corner patches)
+      _corners8(varName, coefficient, scratch) {
+        var eastNorth, eastSouth, westNorth, westSouth, x, y;
+        x = 0; // Wrap west
+        y = 0; // Wrap to the north
+        eastNorth = (this._wrapNorth === 0 ? Diffuser.CURRENT : {
+          x: 1,
+          y: this._wrapNorth
+        });
+        westNorth = (this._wrapWest === 0 || this._wrapNorth === 0 ? Diffuser.CURRENT : {
+          x: this._wrapWest,
+          y: this._wrapNorth
+        });
+        westSouth = (this._wrapWest === 0 ? Diffuser.CURRENT : {
+          x: this._wrapWest,
+          y: 1
+        });
+        this._patch8(x, y, varName, coefficient, scratch, this._wrapWest, Diffuser.EAST, this._wrapNorth, Diffuser.SOUTH, eastNorth, westNorth, Diffuser.EAST_SOUTH, westSouth);
+        x = 0; // Wrap to the west
+        y = this._height - 1; // Wrap to the south
+        westNorth = (this._wrapWest === 0 ? Diffuser.CURRENT : {
+          x: this._wrapWest,
+          y: -1
+        });
+        eastSouth = (this._wrapSouth === 0 ? Diffuser.CURRENT : {
+          x: 1,
+          y: this._wrapSouth
+        });
+        westSouth = (this._wrapWest === 0 || this._wrapSouth === 0 ? Diffuser.CURRENT : {
+          x: this._wrapWest,
+          y: this._wrapSouth
+        });
+        this._patch8(x, y, varName, coefficient, scratch, this._wrapWest, Diffuser.EAST, Diffuser.NORTH, this._wrapSouth, Diffuser.EAST_NORTH, westNorth, eastSouth, westSouth);
+        x = this._width - 1; // Wrap to the east
+        y = 0; // Wrap to the north
+        eastNorth = (this._wrapEast === 0 || this._wrapNorth === 0 ? Diffuser.CURRENT : {
+          x: this._wrapEast,
+          y: this._wrapNorth
+        });
+        westNorth = (this._wrapNorth === 0 ? Diffuser.CURRENT : {
+          x: -1,
+          y: this._wrapNorth
+        });
+        eastSouth = (this._wrapEast === 0 ? Diffuser.CURRENT : {
+          x: this._wrapEast,
+          y: 1
+        });
+        this._patch8(x, y, varName, coefficient, scratch, Diffuser.WEST, this._wrapEast, this._wrapNorth, Diffuser.SOUTH, eastNorth, westNorth, eastSouth, Diffuser.WEST_SOUTH);
+        x = this._width - 1; // Wrap east
+        y = this._height - 1; // Wrap south
+        eastNorth = (this._wrapEast === 0 ? Diffuser.CURRENT : {
+          x: this._wrapEast,
+          y: -1
+        });
+        eastSouth = (this._wrapEast === 0 || this._wrapSouth === 0 ? Diffuser.CURRENT : {
+          x: this._wrapEast,
+          y: this._wrapSouth
+        });
+        westSouth = (this._wrapSouth === 0 ? Diffuser.CURRENT : {
+          x: -1,
+          y: this._wrapSouth
+        });
+        this._patch8(x, y, varName, coefficient, scratch, Diffuser.WEST, this._wrapEast, Diffuser.NORTH, this._wrapSouth, eastNorth, Diffuser.WEST_NORTH, eastSouth, westSouth);
+      }
+
+      // (Number, Number, String, Number, Array[Number], Number, Number, Number, Number) => Unit
+      // (side effect: diffuse a single patch)
+      _patch4(x, y, varName, coefficient, scratch, west, east, north, south) {
+        var cn, cs, ec, newVal, oldVal, wc;
+        oldVal = scratch[x][y];
+        ec = scratch[x + east][y];
+        cn = scratch[x][y + north];
+        cs = scratch[x][y + south];
+        wc = scratch[x + west][y];
+        newVal = this._patchVal4(coefficient, oldVal, ec, cn, cs, wc);
+        this._setPatchVariable(x, y, varName, newVal, oldVal);
+      }
+
+      // (Number, Number, String, Number, Array[Number],
+      //   Number, Number, Number, Number
+      //   (Number, Number), (Number, Number), (Number, Number), (Number, Number)) => Unit
+      // (side effect: diffuse a single patch)
+      _patch8(x, y, varName, coefficient, scratch, west, east, north, south, eastNorth, westNorth, eastSouth, westSouth) {
+        var cn, cs, ec, en, es, newVal, oldVal, wc, wn, ws;
+        oldVal = scratch[x][y];
+        ec = scratch[x + east][y];
+        cn = scratch[x][y + north];
+        cs = scratch[x][y + south];
+        wc = scratch[x + west][y];
+        en = scratch[x + eastNorth.x][y + eastNorth.y];
+        wn = scratch[x + westNorth.x][y + westNorth.y];
+        es = scratch[x + eastSouth.x][y + eastSouth.y];
+        ws = scratch[x + westSouth.x][y + westSouth.y];
+        newVal = this._patchVal8(coefficient, oldVal, ec, cn, cs, wc, en, wn, es, ws);
+        this._setPatchVariable(x, y, varName, newVal, oldVal);
+      }
+
+      // (Number, Number, Number, Number) => Number
+      _patchVal(coefficient, oldVal, sum, dirCount) {
+        return oldVal + coefficient * (sum / dirCount - oldVal);
+      }
+
+      // (Number, Number, Number, Number, Number, Number) => Number
+      _patchVal4(coefficient, oldVal, a, b, c, d) {
+        var sum;
+        sum = this._sum4(a, b, c, d);
+        return this._patchVal(coefficient, oldVal, sum, 4);
+      }
+
+      // (Number, Number, Number, Number, Number, Number, Number, Number, Number, Number) => Number
+      _patchVal8(coefficient, oldVal, a, b, c, d, e, f, g, h) {
+        var sum;
+        sum = this._sum8(a, b, c, d, e, f, g, h);
+        return this._patchVal(coefficient, oldVal, sum, 8);
+      }
+
+      // (Number, Number, Number, Number, Number, Number, Number, Number) => Number
+      _sum8(a, b, c, d, e, f, g, h) {
+        var sum;
+        sum = this._sum4(a, b, c, d);
+        return sum + this._sum4(e, f, g, h);
+      }
+
+      // (Number, Number, Number, Number) => Number
+      _sum4(a, b, c, d) {
+        var high1, high2, low1, low2;
+        if (a < b) {
+          low1 = a;
+          high1 = b;
+        } else {
+          low1 = b;
+          high1 = a;
+        }
+        if (c < d) {
+          low2 = c;
+          high2 = d;
+        } else {
+          low2 = d;
+          high2 = c;
+        }
+        if (low2 < high1 && low1 < high2) {
+          return (low1 + low2) + (high1 + high2);
+        } else {
+          return (low1 + high1) + (low2 + high2);
+        }
+      }
+
+    };
+
+    Diffuser.CENTER = 0;
+
+    Diffuser.WEST = -1;
+
+    Diffuser.EAST = 1;
+
+    Diffuser.NORTH = -1;
+
+    Diffuser.SOUTH = 1;
+
+    Diffuser.CURRENT = Object.freeze({
+      x: 0,
+      y: 0
+    });
+
+    Diffuser.EAST_NORTH = Object.freeze({
+      x: 1,
+      y: -1
+    });
+
+    Diffuser.WEST_SOUTH = Object.freeze({
+      x: -1,
+      y: 1
+    });
+
+    Diffuser.EAST_SOUTH = Object.freeze({
+      x: 1,
+      y: 1
+    });
+
+    Diffuser.WEST_NORTH = Object.freeze({
+      x: -1,
+      y: -1
+    });
+
+    return Diffuser;
+
+  }).call(this);
+
+}).call(this);
+
+},{}],"engine/core/topology/factory":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Box, HorizCylinder, Torus, VertCylinder;
+
+  Box = require('./box');
+
+  HorizCylinder = require('./horizcylinder');
+
+  Torus = require('./torus');
+
+  VertCylinder = require('./vertcylinder');
+
+  // (Boolean, Boolean, Number, Number, Number, Number, () => PatchSet, (Number, Number) => Patch) => Topology
+  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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var HorizCylinder, Topology,
+    boundMethodCheck = function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } };
+
+  Topology = require('./topology');
+
+  module.exports = HorizCylinder = (function() {
+    class HorizCylinder extends Topology {
+      constructor() {
+        super(...arguments);
+        // (Number, Number) => Number
+        this._shortestX = this._shortestX.bind(this);
+        // (Number, Number) => Number
+        this._shortestY = this._shortestY.bind(this);
+      }
+
+
+      // (Number) => Number
+      wrapX(pos) {
+        return this._wrapXCautiously(pos);
+      }
+
+      // (Number) => Number
+      wrapY(pos) {
+        return this._wrapYLeniently(pos);
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchEast(pxcor, pycor) {
+        return (pxcor !== this.maxPxcor) && this._getPatchAt(pxcor + 1, pycor);
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchWest(pxcor, pycor) {
+        return (pxcor !== this.minPxcor) && this._getPatchAt(pxcor - 1, pycor);
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorth(pxcor, pycor) {
+        if (pycor === this.maxPycor) {
+          return this._getPatchAt(pxcor, this.minPycor);
+        } else {
+          return this._getPatchAt(pxcor, pycor + 1);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchSouth(pxcor, pycor) {
+        if (pycor === this.minPycor) {
+          return this._getPatchAt(pxcor, this.maxPycor);
+        } else {
+          return this._getPatchAt(pxcor, pycor - 1);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorthWest(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);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchSouthWest(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);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchSouthEast(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);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorthEast(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);
+        }
+      }
+
+      _shortestX(x1, x2) {
+        boundMethodCheck(this, HorizCylinder);
+        return this._shortestNotWrapped(x1, x2);
+      }
+
+      _shortestY(y1, y2) {
+        boundMethodCheck(this, HorizCylinder);
+        return this._shortestYWrapped(y1, y2);
+      }
+
+    };
+
+    HorizCylinder.prototype._wrapInX = false; // Boolean
+
+    HorizCylinder.prototype._wrapInY = true; // Boolean
+
+    return HorizCylinder;
+
+  }).call(this);
+
+}).call(this);
+
+},{"./topology":"engine/core/topology/topology"}],"engine/core/topology/incone":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var NLMath, NLType, findCircleBounds;
+
+  NLMath = require('util/nlmath');
+
+  NLType = require('../typechecker');
+
+  // (Boolean, Number, Number, Number, Number, Number) => (Number, Number)
+  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];
+    }
+  };
+
+  // this.type: Topology
+  // [T] @ (Number, Number, Number, AbstractAgents[T], Number, Number) => AbstractAgentSet[T]
+  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, result, turtleIsGood, turtleIsGood_, wrapCountInX, wrapCountInY;
+    // (Number, Number) => Number
+    findWrapCount = function(wrapsInDim, dimSize) {
+      if (wrapsInDim) {
+        return NLMath.ceil(distance / dimSize);
+      } else {
+        return 0;
+      }
+    };
+    // (Number, Number, Number, Number, Number, Number) => Boolean
+    isInSector = (ax, ay, cx, cy, radius, heading) => {
+      var isTheSameSpot, isWithinArc, isWithinRange;
+      isWithinArc = () => {
+        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());
+    };
+    // (Number, Number, Number, Number) => Boolean
+    isInWrappableSector = (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;
+    };
+    // (Number, Number) => (Patch) => Boolean
+    patchIsGood = (wrapCountInX, wrapCountInY) => {
+      return (patch) => {
+        var isPlausible;
+        isPlausible = agents.getSpecialName() === "patches" || agents.contains(patch);
+        return isPlausible && isInWrappableSector(patch.pxcor, patch.pycor, wrapCountInX, wrapCountInY);
+      };
+    };
+    // (Number, Number) => (Turtle) => Boolean
+    turtleIsGood = (wrapCountInX, wrapCountInY) => {
+      return (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);
+      };
+    };
+    ({pxcor, pycor} = this._getPatchAt(x, y));
+    wrapCountInX = findWrapCount(this._wrapInX, this.width);
+    wrapCountInY = findWrapCount(this._wrapInY, this.height);
+    patchIsGood_ = patchIsGood(wrapCountInX, wrapCountInY);
+    turtleIsGood_ = turtleIsGood(wrapCountInX, wrapCountInY);
+    [dxMin, dxMax] = findCircleBounds(this._wrapInX, this.width, distance, this.minPxcor, this.maxPxcor, pxcor);
+    [dyMin, dyMax] = findCircleBounds(this._wrapInY, this.height, distance, this.minPycor, this.maxPycor, pycor);
+    isPatchSet = NLType(agents).isPatchSet();
+    isTurtleSet = NLType(agents).isTurtleSet();
+    result = [];
+    for (dy = i = ref = dyMin, ref1 = dyMax; (ref <= ref1 ? i <= ref1 : i >= ref1); dy = ref <= ref1 ? ++i : --i) {
+      for (dx = j = ref2 = dxMin, ref3 = dxMax; (ref2 <= ref3 ? j <= ref3 : j >= ref3); dx = ref2 <= ref3 ? ++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((turtle) => {
+              return turtleIsGood_(turtle);
+            });
+            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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AgentException, Diffuser, StrictMath, Topology, TopologyInterrupt, abstractMethod, filter, inCone, pipeline, unique;
+
+  inCone = require('./incone');
+
+  Topology = require('./topology');
+
+  Diffuser = require('./diffuser');
+
+  StrictMath = require('shim/strictmath');
+
+  abstractMethod = require('util/abstractmethoderror');
+
+  ({filter, unique} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  ({AgentException, TopologyInterrupt} = require('util/exception'));
+
+  module.exports = Topology = (function() {
+    class Topology {
+      // (Number, Number, Number, Number, () => PatchSet, (Number, Number) => Patch) => Topology
+      constructor(minPxcor, maxPxcor, minPycor, maxPycor, _getPatches, _getPatchAt) {
+        // (Number, Number, String, Number, Number) => Unit
+        this._setPatchVariable = this._setPatchVariable.bind(this);
+        // (Number, Number) => Number
+        this._shortestX = this._shortestX.bind(this);
+        this._shortestY = this._shortestY.bind(this);
+        this.minPxcor = minPxcor;
+        this.maxPxcor = maxPxcor;
+        this.minPycor = minPycor;
+        this.maxPycor = maxPycor;
+        this._getPatches = _getPatches;
+        this._getPatchAt = _getPatchAt;
+        this.height = 1 + this.maxPycor - this.minPycor;
+        this.width = 1 + this.maxPxcor - this.minPxcor;
+        this.diffuser = new Diffuser(this._setPatchVariable, this.width, this.height, this._wrapInX, this._wrapInY);
+        this._neighborCache = {};
+        this._neighbor4Cache = {};
+      }
+
+      // (String, Number, Boolean) => Unit (side effect: diffuse varName by coeffecient among patches)
+      diffuse(varName, coefficient, fourWay) {
+        var mapAll, scratch, xx, yy;
+        yy = this.height;
+        xx = this.width;
+        mapAll = function(f) {
+          var i, ref, results, x, y;
+          results = [];
+          for (x = i = 0, ref = xx; (0 <= ref ? i < ref : i > ref); x = 0 <= ref ? ++i : --i) {
+            results.push((function() {
+              var j, ref1, results1;
+              results1 = [];
+              for (y = j = 0, ref1 = yy; (0 <= ref1 ? j < ref1 : j > ref1); y = 0 <= ref1 ? ++j : --j) {
+                results1.push(f(x, y));
+              }
+              return results1;
+            })());
+          }
+          return results;
+        };
+        scratch = mapAll((x, y) => {
+          return this._getPatchAt(x + this.minPxcor, y + this.minPycor).getVariable(varName);
+        });
+        if (fourWay) {
+          this.diffuser.diffuse4(varName, coefficient, scratch);
+        } else {
+          this.diffuser.diffuse8(varName, coefficient, scratch);
+        }
+      }
+
+      _setPatchVariable(x, y, varName, newVal, oldVal) {
+        if (newVal !== oldVal) {
+          return this._getPatchAt(x + this.minPxcor, y + this.minPycor).setVariable(varName, newVal);
+        }
+      }
+
+      // (Number, Number) => Array[Patch]
+      getNeighbors(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));
+        }
+      }
+
+      // (Number, Number) => Array[Patch]
+      getNeighbors4(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));
+        }
+      }
+
+      // Sadly, having topologies give out `false` and filtering it away seems to give the best balance between
+      // NetLogo semantics, code clarity, and efficiency.  I tried to kill this `false`-based nonsense, but I
+      // couldn't strike a better balance. --JAB (7/30/14)
+      // (Array[Patch]) => Array[Patch]
+      _filterNeighbors(neighbors) {
+        return pipeline(filter(function(patch) {
+          return patch !== false;
+        }), unique)(neighbors);
+      }
+
+      // (Number, Number, Number, Number) => Number
+      distanceXY(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);
+      }
+
+      // (Number, Number, Turtle|Patch) => Number
+      distance(x1, y1, agent) {
+        var x2, y2;
+        [x2, y2] = agent.getCoords();
+        return this.distanceXY(x1, y1, x2, y2);
+      }
+
+      // (Number, Number, Number, Number, Number, Number) => Number
+      distanceToLine(x1, y1, x2, y2, xcor, ycor) {
+        var closestPoint, closestX, closestY, isInBounds, wrappedX1, wrappedX2, wrappedXcor, wrappedY1, wrappedY2, wrappedYcor, xDiff, yDiff;
+        closestPoint = function(x1, y1, x2, y2, xDiff, yDiff) {
+          var u, x, y;
+          // all this math determines a point on the line defined by the endpoints of the
+          // link nearest to the given point --??? (??/??/??)
+          u = ((x1 - x2) * xDiff + (y1 - y2) * yDiff) / (xDiff * xDiff + yDiff * yDiff);
+          x = x2 + u * xDiff;
+          y = y2 + u * yDiff;
+          return {x, y};
+        };
+        // since this is a segment not a continuous line we have to check the bounds
+        // we know it's a point on the line, so if it's in the bounding box then
+        // we're good and just return that point. ev 10/12/06
+        isInBounds = function(x1, y1, x2, y2, pointX, pointY) {
+          var bottom, left, right, top;
+          [bottom, top] = y1 > y2 ? [y2, y1] : [y1, y2];
+          [left, right] = x1 > x2 ? [x2, x1] : [x1, x2];
+          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;
+        ({
+          x: closestX,
+          y: closestY
+        } = closestPoint(wrappedXcor, wrappedYcor, wrappedX1, wrappedY1, xDiff, yDiff));
+        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));
+        }
+      }
+
+      // (Number, Number, Number, Number) => Number
+      towards(x1, y1, x2, y2) {
+        return this._towards(x1, y1, x2, y2, this._shortestX, this._shortestY);
+      }
+
+      // (Number, Number) => Number
+      midpointx(x1, x2) {
+        var pos;
+        pos = (x1 + (x1 + this._shortestX(x1, x2))) / 2;
+        return this._wrap(pos, this.minPxcor - 0.5, this.maxPxcor + 0.5);
+      }
+
+      // (Number, Number) => Number
+      midpointy(y1, y2) {
+        var pos;
+        pos = (y1 + (y1 + this._shortestY(y1, y2))) / 2;
+        return this._wrap(pos, this.minPycor - 0.5, this.maxPycor + 0.5);
+      }
+
+      // [T] @ (Number, Number, Number, AbstractAgents[T], Number, Number) => AbstractAgentSet[T]
+      inCone(x, y, heading, agents, distance, angle) {
+        return inCone.call(this, x, y, heading, agents, distance, angle);
+      }
+
+      // [T] @ (Number, Number, AbstractAgents[T], Number) => AbstractAgentSet[T]
+      inRadius(x, y, agents, radius) {
+        return agents.filter((agent) => {
+          var xcor, ycor;
+          [xcor, ycor] = agent.getCoords();
+          return this.distanceXY(xcor, ycor, x, y) <= radius;
+        });
+      }
+
+      // (Number, Number) => Array[Patch]
+      _getNeighbors(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)];
+        }
+      }
+
+      // (Number, Number) => Array[Patch]
+      _getNeighbors4(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)];
+        }
+      }
+
+      // (Number, Number) => Number
+      _shortestNotWrapped(cor1, cor2) {
+        return StrictMath.abs(cor1 - cor2) * (cor1 > cor2 ? -1 : 1);
+      }
+
+      // (Number, Number, Number) => Number
+      _shortestWrapped(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);
+        }
+      }
+
+      // (Number, Number) => Number
+      _shortestXWrapped(cor1, cor2) {
+        return this._shortestWrapped(cor1, cor2, this.width);
+      }
+
+      // (Number, Number) => Number
+      _shortestYWrapped(cor1, cor2) {
+        return this._shortestWrapped(cor1, cor2, this.height);
+      }
+
+      // (Number, Number, Number, Number, (Number, Number) => Number, (Number, Number) => Number) => Number
+      _towards(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.`);
+        }
+      }
+
+      // (Number, Number, Number, Number) => Number
+      _towardsNotWrapped(x1, y1, x2, y2) {
+        return this._towards(x1, y1, x2, y2, this._shortestNotWrapped, this._shortestNotWrapped);
+      }
+
+      // (Number, Number, Number) => Number
+      _wrap(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;
+        }
+      }
+
+      // (Number) => Number
+      _wrapXCautiously(pos) {
+        return this._wrapCautiously(this.minPxcor, this.maxPxcor, pos);
+      }
+
+      // (Number) => Number
+      _wrapXLeniently(pos) {
+        return this._wrapLeniently(this.minPxcor, this.maxPxcor, pos);
+      }
+
+      // (Number) => Number
+      _wrapYCautiously(pos) {
+        return this._wrapCautiously(this.minPycor, this.maxPycor, pos);
+      }
+
+      // (Number) => Number
+      _wrapYLeniently(pos) {
+        return this._wrapLeniently(this.minPycor, this.maxPycor, pos);
+      }
+
+      // (Number, Number, Number) => Number
+      _wrapCautiously(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.");
+        }
+      }
+
+      // (Number, Number, Number) => Number
+      _wrapLeniently(minCor, maxCor, pos) {
+        return this._wrap(pos, minCor - 0.5, maxCor + 0.5);
+      }
+
+      // (Number) => Number
+      wrapX(pos) {
+        return abstractMethod('Topology.wrapX');
+      }
+
+      wrapY(pos) {
+        return abstractMethod('Topology.wrapY');
+      }
+
+      _shortestX(x1, x2) {
+        return abstractMethod('Topology._shortestX');
+      }
+
+      _shortestY(y1, y2) {
+        return abstractMethod('Topology._shortestY');
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorth(x, y) {
+        return abstractMethod('Topology._getPatchNorth');
+      }
+
+      _getPatchEast(x, y) {
+        return abstractMethod('Topology._getPatchEast');
+      }
+
+      _getPatchSouth(x, y) {
+        return abstractMethod('Topology._getPatchSouth');
+      }
+
+      _getPatchWest(x, y) {
+        return abstractMethod('Topology._getPatchWest');
+      }
+
+      _getPatchNorthEast(x, y) {
+        return abstractMethod('Topology._getPatchNorthEast');
+      }
+
+      _getPatchSouthEast(x, y) {
+        return abstractMethod('Topology._getPatchSouthEast');
+      }
+
+      _getPatchSouthWest(x, y) {
+        return abstractMethod('Topology._getPatchSouthWest');
+      }
+
+      _getPatchNorthWest(x, y) {
+        return abstractMethod('Topology._getPatchNorthWest');
+      }
+
+    };
+
+    Topology.prototype._wrapInX = void 0; // Boolean
+
+    Topology.prototype._wrapInY = void 0; // Boolean
+
+    Topology.prototype.height = void 0; // Number
+
+    Topology.prototype.width = void 0; // Number
+
+    Topology.prototype._neighborCache = void 0;
+
+    Topology.prototype._neighbor4Cache = void 0;
+
+    return Topology;
+
+  }).call(this);
+
+}).call(this);
+
+},{"./diffuser":"engine/core/topology/diffuser","./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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Topology, Torus, add, foldl, map, pipeline, rangeUntil,
+    boundMethodCheck = function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } };
+
+  Topology = require('./topology');
+
+  ({foldl, map} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  ({rangeUntil} = require('brazierjs/number'));
+
+  // Why our own custom add function?  To avoid anonymous functions getting created as part
+  // of the fold below.  This bad boy will add any two numbers together, no problem.
+  // -JMB 07/2017
+  add = function(a, b) {
+    return a + b;
+  };
+
+  module.exports = Torus = (function() {
+    class Torus extends Topology {
+      constructor() {
+        super(...arguments);
+        // (Number, Number) => Number
+        this._shortestX = this._shortestX.bind(this);
+        // (Number, Number) => Number
+        this._shortestY = this._shortestY.bind(this);
+      }
+
+
+      // (Number) => Number
+      wrapX(pos) {
+        return this._wrapXLeniently(pos);
+      }
+
+      // (Number) => Number
+      wrapY(pos) {
+        return this._wrapYLeniently(pos);
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorth(pxcor, pycor) {
+        if (pycor === this.maxPycor) {
+          return this._getPatchAt(pxcor, this.minPycor);
+        } else {
+          return this._getPatchAt(pxcor, pycor + 1);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchSouth(pxcor, pycor) {
+        if (pycor === this.minPycor) {
+          return this._getPatchAt(pxcor, this.maxPycor);
+        } else {
+          return this._getPatchAt(pxcor, pycor - 1);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchEast(pxcor, pycor) {
+        if (pxcor === this.maxPxcor) {
+          return this._getPatchAt(this.minPxcor, pycor);
+        } else {
+          return this._getPatchAt(pxcor + 1, pycor);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchWest(pxcor, pycor) {
+        if (pxcor === this.minPxcor) {
+          return this._getPatchAt(this.maxPxcor, pycor);
+        } else {
+          return this._getPatchAt(pxcor - 1, pycor);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorthWest(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);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchSouthWest(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);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchSouthEast(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);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorthEast(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);
+        }
+      }
+
+      _shortestX(x1, x2) {
+        boundMethodCheck(this, Torus);
+        return this._shortestXWrapped(x1, x2);
+      }
+
+      _shortestY(y1, y2) {
+        boundMethodCheck(this, Torus);
+        return this._shortestYWrapped(y1, y2);
+      }
+
+    };
+
+    Torus.prototype._wrapInX = true; // Boolean
+
+    Torus.prototype._wrapInY = true; // Boolean
+
+    return Torus;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Topology, VertCylinder,
+    boundMethodCheck = function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } };
+
+  Topology = require('./topology');
+
+  module.exports = VertCylinder = (function() {
+    class VertCylinder extends Topology {
+      constructor() {
+        super(...arguments);
+        // (Number, Number) => Number
+        this._shortestX = this._shortestX.bind(this);
+        // (Number, Number) => Number
+        this._shortestY = this._shortestY.bind(this);
+      }
+
+
+      // (Number) => Number
+      wrapX(pos) {
+        return this._wrapXLeniently(pos);
+      }
+
+      // (Number) => Number
+      wrapY(pos) {
+        return this._wrapYCautiously(pos);
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorth(pxcor, pycor) {
+        return (pycor !== this.maxPycor) && this._getPatchAt(pxcor, pycor + 1);
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchSouth(pxcor, pycor) {
+        return (pycor !== this.minPycor) && this._getPatchAt(pxcor, pycor - 1);
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchEast(pxcor, pycor) {
+        if (pxcor === this.maxPxcor) {
+          return this._getPatchAt(this.minPxcor, pycor);
+        } else {
+          return this._getPatchAt(pxcor + 1, pycor);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchWest(pxcor, pycor) {
+        if (pxcor === this.minPxcor) {
+          return this._getPatchAt(this.maxPxcor, pycor);
+        } else {
+          return this._getPatchAt(pxcor - 1, pycor);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorthWest(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);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchSouthWest(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);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchSouthEast(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);
+        }
+      }
+
+      // (Number, Number) => Patch|Boolean
+      _getPatchNorthEast(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);
+        }
+      }
+
+      _shortestX(x1, x2) {
+        boundMethodCheck(this, VertCylinder);
+        return this._shortestXWrapped(x1, x2);
+      }
+
+      _shortestY(y1, y2) {
+        boundMethodCheck(this, VertCylinder);
+        return this._shortestNotWrapped(y1, y2);
+      }
+
+    };
+
+    VertCylinder.prototype._wrapInX = true; // Boolean
+
+    VertCylinder.prototype._wrapInY = false; // Boolean
+
+    return VertCylinder;
+
+  }).call(this);
+
+}).call(this);
+
+},{"./topology":"engine/core/topology/topology"}],"engine/core/turtle/makepenlines":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var NLMath, Trail, distanceFromLegs, lazyWrapValue, makePenLines, makePenLinesHelper, makeTrails;
+
+  NLMath = require('util/nlmath');
+
+  Trail = class Trail {
+    constructor(x1, y1, x2, y2, dist) {
+      this.x1 = x1;
+      this.y1 = y1;
+      this.x2 = x2;
+      this.y2 = y2;
+      this.dist = dist;
+    }
+
+  };
+
+  // Ugh, Model Runs outputs the wrong updates for this
+  // Make some simple tests
+  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);
+    };
+  };
+
+  // (Number, Number, Number, Number, Number, Number, Number, Number) => Array[Trail]
+  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, []);
+  };
+
+  // ((Number, Number, Number) => Array[Trail], (Number) => Number, (Number) => Number) => (Number, Number, Number, Array[Trail]) => Array[Trail]
+  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({
+          dist: distA
+        }, {
+          dist: distB
+        }) {
+        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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ColorModel, ImmutableVariableSpec, MutableVariableSpec, NLMath, NLType, Setters, StrictMath, TopologyInterrupt, VariableSpecs, _handleTiesForHeadingChange, clone, getBreed, ignorantly, ignoring, 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'));
+
+  ({ImmutableVariableSpec, MutableVariableSpec} = require('../structure/variablespec'));
+
+  ({ignoring, TopologyInterrupt} = require('util/exception'));
+
+  /*
+   "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)
+  */
+  // In this file: `this.type` is `Turtle`
+  ignorantly = ignoring(TopologyInterrupt);
+
+  // (Number, IDSet) => Unit
+  setXcor = function(newX, seenTurtlesSet = {}) {
+    var dx, f, oldX, originPatch;
+    originPatch = this.getPatchHere();
+    oldX = this.xcor;
+    this.xcor = this.world.topology.wrapX(newX);
+    this._updateVarsByName("xcor");
+    this._drawSetLine(oldX, this.ycor, newX, this.ycor);
+    if (originPatch !== this.getPatchHere()) {
+      originPatch.untrackTurtle(this);
+      this.getPatchHere().trackTurtle(this);
+    }
+    this.linkManager._refresh();
+    dx = newX - oldX;
+    f = (seenTurtles) => {
+      return (turtle) => {
+        return ignorantly(() => {
+          return setXcor.call(turtle, turtle.xcor + dx, seenTurtles);
+        });
+      };
+    };
+    this._withEachTiedTurtle(f, seenTurtlesSet);
+  };
+
+  // (Number, IDSet) => Unit
+  setYcor = function(newY, seenTurtlesSet = {}) {
+    var dy, f, oldY, originPatch;
+    originPatch = this.getPatchHere();
+    oldY = this.ycor;
+    this.ycor = this.world.topology.wrapY(newY);
+    this._updateVarsByName("ycor");
+    this._drawSetLine(this.xcor, oldY, this.xcor, newY);
+    if (originPatch !== this.getPatchHere()) {
+      originPatch.untrackTurtle(this);
+      this.getPatchHere().trackTurtle(this);
+    }
+    this.linkManager._refresh();
+    dy = newY - oldY;
+    f = (seenTurtles) => {
+      return (turtle) => {
+        return ignorantly(() => {
+          return setYcor.call(turtle, turtle.ycor + dy, seenTurtles);
+        });
+      };
+    };
+    this._withEachTiedTurtle(f, seenTurtlesSet);
+  };
+
+  // (String) => Unit
+  setBreedShape = function(shape) {
+    this._breedShape = shape.toLowerCase();
+    if (this._givenShape == null) {
+      this._genVarUpdate("shape");
+    }
+  };
+
+  // (AbstractAgentSet|Breed|String) => Unit
+  setBreed = function(breed) {
+    var newNames, oldNames, ref, 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 ((ref = this._breed) != null) {
+        ref.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);
+    }
+  };
+
+  // (Number) => Unit
+  setColor = function(color) {
+    this._color = ColorModel.wrapColor(color);
+    this._genVarUpdate("color");
+  };
+
+  // (Number, IDSet) => Unit
+  setHeading = function(heading, seenTurtlesSet = {}) {
+    var dh, oldHeading;
+    oldHeading = this._heading;
+    this._heading = NLMath.normalizeHeading(heading);
+    this._genVarUpdate("heading");
+    dh = NLMath.subtractHeadings(this._heading, oldHeading);
+    _handleTiesForHeadingChange.call(this, seenTurtlesSet, dh);
+  };
+
+  // (Boolean) => Unit
+  setIsHidden = function(isHidden) {
+    this._hidden = isHidden;
+    this._genVarUpdate("hidden?");
+  };
+
+  // (String) => Unit
+  setLabel = function(label) {
+    this._label = label;
+    this._genVarUpdate("label");
+  };
+
+  // (Number) => Unit
+  setLabelColor = function(color) {
+    this._labelcolor = ColorModel.wrapColor(color);
+    this._genVarUpdate("label-color");
+  };
+
+  // (String) => Unit
+  setShape = function(shape) {
+    this._givenShape = shape.toLowerCase();
+    this._genVarUpdate("shape");
+  };
+
+  // (Number) => Unit
+  setSize = function(size) {
+    this._size = size;
+    this._genVarUpdate("size");
+  };
+
+  // I have so many apologies for this code, but, hey,
+  // it wasn't my idea to embed ties into NetLogo. --JAB (10/26/15)
+
+  // (IDSet, Number) => Unit
+  _handleTiesForHeadingChange = function(seenTurtlesSet, dh) {
+    var filteredPairs, turtleModePairs, x, y;
+    [x, y] = this.getCoords();
+    turtleModePairs = this.linkManager.myOutLinks("LINKS").toArray().map(({end1, end2, tiemode}) => {
+      return [(end1 === this ? end2 : end1), tiemode];
+    });
+    seenTurtlesSet[this.id] = true;
+    filteredPairs = turtleModePairs.filter(function([{id}, mode]) {
+      var result;
+      result = (seenTurtlesSet[id] == null) && mode !== "none";
+      seenTurtlesSet[id] = true;
+      return result;
+    });
+    filteredPairs.forEach(([turtle, mode]) => {
+      var ex, newX, newY, r, theta, wentBoom;
+      wentBoom = (function() {
+        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));
+      }
+    });
+  };
+
+  Setters = {setXcor, setYcor, setBreed, setColor, setHeading, setIsHidden, setLabel, setLabelColor, setShape, 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, 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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var All, DeathInterrupt, In, LinkManager, LinkSet, Out, TurtleSet, filter, flatMap, ignorantly, ignoring, linkBreedMatches, map, otherEnd, pipeline, unique;
+
+  LinkSet = require('./linkset');
+
+  TurtleSet = require('./turtleset');
+
+  ({filter, flatMap, map, unique} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  ({DeathInterrupt, ignoring} = require('util/exception'));
+
+  ignorantly = ignoring(DeathInterrupt);
+
+  // data Directedness
+  All = {};
+
+  In = {};
+
+  Out = {};
+
+  // Number -> Link -> Turtle
+  otherEnd = function(sourceID) {
+    return function({end1, end2}) {
+      if (end1.id === sourceID) {
+        return end2;
+      } else {
+        return end1;
+      }
+    };
+  };
+
+  // String -> Directedness -> Number -> Link -> Boolean
+  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() {
+    class LinkManager {
+
+      // (Number, World) => LinkManager
+      constructor(_ownerID, _world) {
+        this._ownerID = _ownerID;
+        this._world = _world;
+        this.clear();
+      }
+
+      // (Link) => Unit
+      add(link) {
+        this._links.push(link);
+      }
+
+      // () => Unit
+      clear() {
+        var oldLinks, ref;
+        oldLinks = (ref = this._links) != null ? ref : [];
+        this._links = [];
+        // Purposely done after resetting the array so that calls to `TurtleLinkManager.remove` in `Link.die` don't spend
+        // a ton of time iterating through long arrays that are in the process of being wiped out. --JAB (11/24/14)
+        oldLinks.forEach(function(link) {
+          return ignorantly(() => {
+            return link.die();
+          });
+        });
+      }
+
+      // (String, Turtle) => Link
+      inLinkFrom(breedName, otherTurtle) {
+        return this._findLink(otherTurtle, breedName, In);
+      }
+
+      // (String) => TurtleSet
+      inLinkNeighbors(breedName) {
+        return this._neighbors(breedName, In);
+      }
+
+      // (String, Turtle) => Boolean
+      isInLinkNeighbor(breedName, turtle) {
+        return this.inLinkFrom(breedName, turtle) !== Nobody;
+      }
+
+      // (String, Turtle) => Boolean
+      isLinkNeighbor(breedName, turtle) {
+        return this.isOutLinkNeighbor(breedName, turtle) || this.isInLinkNeighbor(breedName, turtle);
+      }
+
+      // (String, Turtle) => Boolean
+      isOutLinkNeighbor(breedName, turtle) {
+        return this.outLinkTo(breedName, turtle) !== Nobody;
+      }
+
+      // (String, Turtle) => Link
+      linkWith(breedName, otherTurtle) {
+        return this._findLink(otherTurtle, breedName, All);
+      }
+
+      // (String) => TurtleSet
+      linkNeighbors(breedName) {
+        return this._neighbors(breedName, All);
+      }
+
+      // (String) => LinkSet
+      myInLinks(breedName) {
+        return new LinkSet(this._links.filter(linkBreedMatches(breedName)(In)(this._ownerID)), this._world);
+      }
+
+      // (String) => LinkSet
+      myLinks(breedName) {
+        return new LinkSet(this._links.filter(linkBreedMatches(breedName)(All)(this._ownerID)), this._world);
+      }
+
+      // (String) => LinkSet
+      myOutLinks(breedName) {
+        return new LinkSet(this._links.filter(linkBreedMatches(breedName)(Out)(this._ownerID)), this._world);
+      }
+
+      // (String) => TurtleSet
+      outLinkNeighbors(breedName) {
+        return this._neighbors(breedName, Out);
+      }
+
+      // (String, Turtle) => Link
+      outLinkTo(breedName, otherTurtle) {
+        return this._findLink(otherTurtle, breedName, Out);
+      }
+
+      // (Link) => Unit
+      remove(link) {
+        this._links.splice(this._links.indexOf(link), 1);
+      }
+
+      // Turtle -> String -> Directedness -> Agent
+      _findLink(otherTurtle, breedName, directedness) {
+        var linkDoesMatch, links;
+        linkDoesMatch = (l) => {
+          return otherEnd(this._ownerID)(l) === otherTurtle && linkBreedMatches(breedName)(directedness)(this._ownerID)(l);
+        };
+        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)];
+        }
+      }
+
+      // (LinkSet) => Array[Turtle]
+      neighborsIn(linkSet) {
+        var collectOtherEnd;
+        collectOtherEnd = ({end1, end2}) => {
+          var isEnd1, isEnd2;
+          isEnd1 = end1.id === this._ownerID;
+          isEnd2 = end2.id === this._ownerID;
+          if (isEnd1 && (!isEnd2)) {
+            return [end2];
+          } else if (isEnd2 && (!isEnd1)) {
+            return [end1];
+          } else {
+            return [];
+          }
+        };
+        return pipeline(flatMap(collectOtherEnd), unique)(linkSet.toArray());
+      }
+
+      // String -> Directedness -> TurtleSet
+      _neighbors(breedName, directedness) {
+        return pipeline(filter(linkBreedMatches(breedName)(directedness)(this._ownerID)), map(otherEnd(this._ownerID)), unique, ((turtles) => {
+          return new TurtleSet(turtles, this._world);
+        }))(this._links);
+      }
+
+      // () => Unit
+      _refresh() {
+        this._links.forEach(function(link) {
+          link.updateEndRelatedVars();
+        });
+      }
+
+    };
+
+    LinkManager._links = void 0; // Array[(Link, Directedness)]
+
+    return LinkManager;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AbstractAgentSet, DeadSkippingIterator, TurtleSet;
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  DeadSkippingIterator = require('./structure/deadskippingiterator');
+
+  module.exports = TurtleSet = class TurtleSet extends AbstractAgentSet {
+    // [T <: Turtle] @ (Array[T], World, String) => TurtleSet
+    constructor(agents, world, specialName) {
+      super(agents, world, "turtles", specialName);
+      this._agents = agents;
+    }
+
+    // () => Iterator[T]
+    iterator() {
+      return new DeadSkippingIterator(this._agents.slice(0));
+    }
+
+    // () => Iterator[T]
+    _unsafeIterator() {
+      return new DeadSkippingIterator(this._agents);
+    }
+
+  };
+
+}).call(this);
+
+},{"./abstractagentset":"engine/core/abstractagentset","./structure/deadskippingiterator":"engine/core/structure/deadskippingiterator"}],"engine/core/turtle":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  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, uniqueBy;
+
+  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');
+
+  ({foldl, forEach, map, uniqueBy} = require('brazierjs/array'));
+
+  ({rangeUntil} = require('brazierjs/number'));
+
+  ({
+    PenManager,
+    PenStatus: {Down, Erase}
+  } = require('./structure/penmanager'));
+
+  ({ExtraVariableSpec} = require('./structure/variablespec'));
+
+  ({
+    DeathInterrupt: Death,
+    ignoring,
+    TopologyInterrupt
+  } = require('util/exception'));
+
+  ({Setters, VariableSpecs} = require('./turtle/turtlevariables'));
+
+  ignorantly = ignoring(TopologyInterrupt);
+
+  StampMode = class StampMode {
+    constructor(name1) { // (String) => StampMode
+      this.name = name1;
+    }
+
+  };
+
+  Stamp = new StampMode("normal");
+
+  StampErase = new StampMode("erase");
+
+  module.exports = Turtle = (function() {
+    class Turtle {
+
+      // The type signatures here can be found to the right of the parameters. --JAB (4/13/15)
+      constructor(world, id1, _genUpdate, _registerLineDraw, _registerTurtleStamp, _registerDeath, _createTurtle, _removeTurtle, _color = 0, _heading = 0, xcor1 = 0, ycor1 = 0, breed = null, _label = "", _labelcolor = 9.9, _hidden = false, _size = 1.0, _givenShape, genPenManager = (self) => { // (Number) => Unit, Number, Number, Number, Number // Breed, String, Number, Boolean
+          return new PenManager(this._genUpdate(self));
+        }) { // Number, Boolean, Number, String, (Updatable) => PenManager
+        var varNames;
+        // (Number, Number) => Patch
+        this.patchAt = this.patchAt.bind(this);
+        this.world = world;
+        this.id = id1;
+        this._genUpdate = _genUpdate;
+        this._registerLineDraw = _registerLineDraw;
+        this._registerTurtleStamp = _registerTurtleStamp;
+        this._registerDeath = _registerDeath;
+        this._createTurtle = _createTurtle; // World, Number, (Updatable) => (String*) => Unit, RegLinkDrawFunc, RegTurtleStampFunc, (Number) => Unit, GenTurtleType
+        this._removeTurtle = _removeTurtle;
+        this._color = _color;
+        this._heading = _heading;
+        this.xcor = xcor1;
+        this.ycor = ycor1;
+        this._label = _label;
+        this._labelcolor = _labelcolor;
+        this._hidden = _hidden;
+        this._size = _size;
+        this._givenShape = _givenShape;
+        breed = breed != null ? breed : this.world.breedManager.turtles();
+        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);
+      }
+
+      // () => String
+      getBreedName() {
+        return this._breed.name;
+      }
+
+      // () => String
+      getBreedNameSingular() {
+        return this._breed.singular;
+      }
+
+      // Unit -> String
+      getName() {
+        return this._name;
+      }
+
+      // (Number) => Boolean
+      canMove(distance) {
+        return this.patchAhead(distance) !== Nobody;
+      }
+
+      // (Turtle|Patch) => Number
+      distance(agent) {
+        return this.world.topology.distance(this.xcor, this.ycor, agent);
+      }
+
+      // (Number, Number) => Number
+      distanceXY(x, y) {
+        return this.world.topology.distanceXY(this.xcor, this.ycor, x, y);
+      }
+
+      // () => (Number, Number)
+      getCoords() {
+        return [this.xcor, this.ycor];
+      }
+
+      // (Turtle|Patch) => Number
+      towards(agent) {
+        var x, y;
+        [x, y] = agent.getCoords();
+        return this.towardsXY(x, y);
+      }
+
+      // (Number, Number) => Number
+      towardsXY(x, y) {
+        return this.world.topology.towards(this.xcor, this.ycor, x, y);
+      }
+
+      // (Number, Number) => Unit
+      faceXY(x, y) {
+        if (x !== this.xcor || y !== this.ycor) {
+          Setters.setHeading.call(this, this.world.topology.towards(this.xcor, this.ycor, x, y));
+        }
+      }
+
+      // (Turtle|Patch) => Unit
+      face(agent) {
+        var x, y;
+        [x, y] = agent.getCoords();
+        this.faceXY(x, y);
+      }
+
+      // [T] @ (AbstractAgentSet[T], Number, Number) => AbstractAgentSet[T]
+      inCone(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);
+        }
+      }
+
+      // [T] @ (AbstractAgentSet[T], Number) => AbstractAgentSet[T]
+      inRadius(agents, radius) {
+        return this.world.topology.inRadius(this.xcor, this.ycor, agents, radius);
+      }
+
+      patchAt(dx, dy) {
+        return this.world.patchAtCoords(this.xcor + dx, this.ycor + dy);
+      }
+
+      // (Number, Number) => TurtleSet
+      turtlesAt(dx, dy) {
+        return this.getPatchHere().turtlesAt(dx, dy);
+      }
+
+      // (String, Number, Number) => TurtleSet
+      breedAt(breedName, dx, dy) {
+        return this.getPatchHere().breedAt(breedName, dx, dy);
+      }
+
+      // () => Turtle
+      otherEnd() {
+        if (this === this.world.selfManager.myself().end1) {
+          return this.world.selfManager.myself().end2;
+        } else {
+          return this.world.selfManager.myself().end1;
+        }
+      }
+
+      // (Number, Number) => Agent
+      patchAtHeadingAndDistance(angle, distance) {
+        return this.world.patchAtHeadingAndDistanceFrom(angle, distance, this.xcor, this.ycor);
+      }
+
+      // (Number, Number) => Agent
+      patchRightAndAhead(angle, distance) {
+        return this.patchAtHeadingAndDistance(this._heading + angle, distance);
+      }
+
+      // (Number, Number) => Agent
+      patchLeftAndAhead(angle, distance) {
+        return this.patchRightAndAhead(-angle, distance);
+      }
+
+      // (Number) => Agent
+      patchAhead(distance) {
+        return this.patchRightAndAhead(0, distance);
+      }
+
+      // (() => Any) => Unit
+      ask(f) {
+        var base;
+        if (!this.isDead()) {
+          this.world.selfManager.askAgent(f)(this);
+          if (typeof (base = this.world.selfManager.self()).isDead === "function" ? base.isDead() : void 0) {
+            throw new Death;
+          }
+        } else {
+          throw new Error(`That ${this.getBreedNameSingular()} is dead.`);
+        }
+      }
+
+      // [Result] @ (() => Result) => Result
+      projectionBy(f) {
+        if (!this.isDead()) {
+          return this.world.selfManager.askAgent(f)(this);
+        } else {
+          throw new Error(`That ${this._breed.singular} is dead.`);
+        }
+      }
+
+      // Unfortunately, further attempts to streamline this code are very likely to lead to
+      // floating point arithmetic mismatches with JVM NetLogo....  Beware. --JAB (7/28/14)
+      // (Number) => Unit
+      fd(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);
+        }
+      }
+
+      // (Number) => Unit
+      _optimalFdOne() {
+        this.jumpIfAble(1);
+      }
+
+      // (Number) => Unit
+      _optimalFdLessThan1(distance) {
+        this.jumpIfAble(distance);
+      }
+
+      // (String) => Number
+      _optimalNSum(varName) {
+        return this.getPatchHere()._optimalNSum(varName);
+      }
+
+      // (String) => Number
+      _optimalNSum4(varName) {
+        return this.getPatchHere()._optimalNSum4(varName);
+      }
+
+      // (Number) => Boolean
+      jumpIfAble(distance) {
+        var canMove;
+        canMove = this.canMove(distance);
+        if (canMove) {
+          this._jump(distance);
+        }
+        return canMove;
+      }
+
+      // (Number) => Unit
+      _jump(distance) {
+        this._drawJumpLine(this.xcor, this.ycor, distance, this._heading);
+        this._setXandY(this.xcor + distance * this.dx(), this.ycor + distance * this.dy());
+      }
+
+      // () => Number
+      dx() {
+        return NLMath.squash(NLMath.sin(this._heading));
+      }
+
+      // () => Number
+      dy() {
+        return NLMath.squash(NLMath.cos(this._heading));
+      }
+
+      // (Number, IDSet) => Unit
+      right(angle, seenTurtlesSet = {}) {
+        var newHeading;
+        newHeading = this._heading + angle;
+        Setters.setHeading.call(this, newHeading, seenTurtlesSet);
+      }
+
+      // (Number, Number, IDSet) => Unit
+      setXY(x, y, seenTurtlesSet = {}) {
+        var error, origXcor, origYcor;
+        origXcor = this.xcor;
+        origYcor = this.ycor;
+        try {
+          this._setXandY(x, y, seenTurtlesSet);
+          this._drawSetLine(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;
+          }
+        }
+      }
+
+      // Handy for when your turtles are drunk --JAB (8/18/15)
+      // () => Unit
+      goHome() {
+        this.setXY(0, 0);
+      }
+
+      // (Boolean) => Unit
+      hideTurtle(shouldHide) {
+        Setters.setIsHidden.call(this, shouldHide);
+      }
+
+      // (String) => Boolean
+      isBreed(breedName) {
+        return this._breed.name.toUpperCase() === breedName.toUpperCase();
+      }
+
+      // () => Boolean
+      isDead() {
+        return this.id === -1;
+      }
+
+      // () => Nothing
+      die() {
+        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");
+      }
+
+      // (String) => Any
+      getVariable(varName) {
+        return this._varManager[varName];
+      }
+
+      // (String, Any) => Unit
+      setVariable(varName, value) {
+        this._varManager[varName] = value;
+      }
+
+      // () => Patch
+      getPatchHere() {
+        return this.world.getPatchAt(this.xcor, this.ycor);
+      }
+
+      // (String) => Any
+      getPatchVariable(varName) {
+        return this.getPatchHere().getVariable(varName);
+      }
+
+      // (String, Any) => Unit
+      setPatchVariable(varName, value) {
+        this.getPatchHere().setVariable(varName, value);
+      }
+
+      // () => PatchSet
+      getNeighbors() {
+        return this.getPatchHere().getNeighbors();
+      }
+
+      // () => PatchSet
+      getNeighbors4() {
+        return this.getPatchHere().getNeighbors4();
+      }
+
+      // () => TurtleSet
+      turtlesHere() {
+        return this.getPatchHere().turtlesHere();
+      }
+
+      // (String) => TurtleSet
+      breedHere(breedName) {
+        return this.getPatchHere().breedHere(breedName);
+      }
+
+      // (Number, String) => TurtleSet
+      hatch(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(() => {
+          return this._makeTurtleCopy(breed);
+        })(rangeUntil(0)(num));
+        return new TurtleSet(newTurtles, this.world);
+      }
+
+      // (Breed) => Turtle
+      _makeTurtleCopy(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, (self) => {
+          return this.penManager.clone(this._genUpdate(self));
+        });
+        varNames = this._varNamesForBreed(breed);
+        forEach((varName) => {
+          var ref;
+          turtle.setVariable(varName, (ref = this.getVariable(varName)) != null ? ref : 0);
+        })(varNames);
+        return turtle;
+      }
+
+      // (Breed) => Array[String]
+      _varNamesForBreed(breed) {
+        var turtlesBreed;
+        turtlesBreed = this.world.breedManager.turtles();
+        if (breed === turtlesBreed || (breed == null)) {
+          return turtlesBreed.varNames;
+        } else {
+          return turtlesBreed.varNames.concat(breed.varNames);
+        }
+      }
+
+      // (Turtle|Patch) => Unit
+      moveTo(agent) {
+        var x, y;
+        [x, y] = agent.getCoords();
+        this.setXY(x, y);
+      }
+
+      // () => Unit
+      followMe() {
+        this.world.observer.follow(this);
+      }
+
+      // () => Unit
+      rideMe() {
+        this.world.observer.ride(this);
+      }
+
+      // () => Unit
+      watchMe() {
+        this.world.observer.watch(this);
+      }
+
+      // () => Unit
+      stamp() {
+        this._drawStamp(Stamp);
+      }
+
+      // () => Unit
+      stampErase() {
+        this._drawStamp(StampErase);
+      }
+
+      // (Any) => Comparator
+      compare(x) {
+        if (NLType(x).isTurtle()) {
+          return Comparator.numericCompare(this.id, x.id);
+        } else {
+          return Comparator.NOT_EQUALS;
+        }
+      }
+
+      // () => String
+      toString() {
+        if (!this.isDead()) {
+          return `(${this.getName()})`;
+        } else {
+          return "nobody";
+        }
+      }
+
+      // () => Array[String]
+      varNames() {
+        return this._varManager.names();
+      }
+
+      // (StampMode) => Unit
+      _drawStamp(mode) {
+        this._registerTurtleStamp(this.xcor, this.ycor, this._size, this._heading, ColorModel.colorToRGB(this._color), this._getShape(), mode.name);
+      }
+
+      // (Number, Number, Number) => Unit
+      _drawJumpLine(x, y, dist, head) {
+        var penMode;
+        penMode = this.penManager.getMode();
+        if (penMode === Down || penMode === Erase) {
+          this._drawLines(x, y, dist, head);
+        }
+      }
+
+      // (Number, Number, Number, Number) => Unit
+      _drawSetLine(oldX, oldY, newX, newY) {
+        var jumpDist, jumpHead, maxPxcor, maxPycor, minPxcor, minPycor, penMode, wrappedX, wrappedY;
+        penMode = this.penManager.getMode();
+        if ((penMode === Down || penMode === Erase) && (oldX !== newX || oldY !== newY)) {
+          wrappedX = oldX + this.world.topology._shortestX(oldX, newX);
+          wrappedY = oldY + this.world.topology._shortestY(oldY, newY);
+          ({minPxcor, maxPxcor, minPycor, maxPycor} = this.world.topology);
+          if (minPxcor < wrappedX && wrappedX < maxPxcor && minPycor < wrappedY && wrappedY < maxPycor) {
+            this._registerLineDraw(oldX, oldY, wrappedX, wrappedY, ColorModel.colorToRGB(this._color), this.penManager.getSize(), this.penManager.getMode().toString());
+          } else {
+            jumpDist = NLMath.sqrt(NLMath.pow(oldX - wrappedX, 2) + NLMath.pow(oldY - wrappedY, 2));
+            jumpHead = this.world.topology.towards(oldX, oldY, wrappedX, wrappedY);
+            this._drawLines(oldX, oldY, jumpDist, jumpHead);
+          }
+        }
+      }
+
+      // (Number, Number, Number) => Unit
+      _drawLines(x, y, dist, head) {
+        var color, lines, maxPxcor, maxPycor, minPxcor, minPycor, mode, size;
+        color = ColorModel.colorToRGB(this._color);
+        size = this.penManager.getSize();
+        mode = this.penManager.getMode().toString();
+        ({minPxcor, maxPxcor, minPycor, maxPycor} = this.world.topology);
+        lines = makePenLines(x, y, NLMath.normalizeHeading(head), dist, minPxcor - 0.5, maxPxcor + 0.5, minPycor - 0.5, maxPycor + 0.5);
+        forEach(({x1, y1, x2, y2}) => {
+          this._registerLineDraw(x1, y1, x2, y2, color, size, mode);
+        })(lines);
+      }
+
+      // Unfortunately, we can't just throw out `_breedShape` and grab the shape from our
+      // `Breed` object.  It would be pretty nice if we could, but the problem is that
+      // `set-default-shape` only affects turtles created after its use, so turtles that
+      // were using breed shape <X> before `set-default-shape` set the breed's shape to <Y>
+      // still need to be using <X>. --JAB (12/5/14)
+      // () => String
+      _getShape() {
+        var ref;
+        return (ref = this._givenShape) != null ? ref : this._breedShape;
+      }
+
+      // (String) => (Link) => Boolean
+      _linkBreedMatches(breedName) {
+        return function(link) {
+          return breedName === "LINKS" || breedName === link.getBreedName();
+        };
+      }
+
+      // () => Unit
+      _seppuku() {
+        this._registerDeath(this.id);
+      }
+
+      // () => { "fixeds": Array[Turtle], "others": Array[Turtle] }
+      _tiedTurtlesRaw() {
+        var f, fixeds, links, others;
+        links = this.linkManager.myOutLinks("LINKS").toArray().filter(function(l) {
+          return l.tiemode !== "none";
+        });
+        f = ([fixeds, others], {end1, end2, tiemode}) => {
+          var turtle;
+          turtle = end1 === this ? end2 : end1;
+          if (tiemode === "fixed") {
+            return [fixeds.concat([turtle]), others];
+          } else {
+            return [fixeds, others.concat([turtle])];
+          }
+        };
+        [fixeds, others] = foldl(f)([[], []])(links);
+        return {
+          fixeds: fixeds,
+          others: others
+        };
+      }
+
+      // () => Array[Turtle]
+      _tiedTurtles() {
+        var fixeds, others;
+        ({fixeds, others} = this._tiedTurtlesRaw());
+        return this._uniqueTurtles(fixeds.concat(others));
+      }
+
+      // () => Array[Turtle]
+      _fixedTiedTurtles() {
+        return this._uniqueTurtles(this._tiedTurtlesRaw().fixeds);
+      }
+
+      // (Array[Turtle]) => Array[Turtle]
+      _uniqueTurtles(turtles) {
+        return uniqueBy(function(t) {
+          return t.id;
+        })(turtles);
+      }
+
+      // (Array[String]) => VariableManager
+      _genVarManager(extraVarNames) {
+        var allSpecs, extraSpecs;
+        extraSpecs = extraVarNames.map(function(name) {
+          return new ExtraVariableSpec(name);
+        });
+        allSpecs = VariableSpecs.concat(extraSpecs);
+        return new VariableManager(this, allSpecs);
+      }
+
+      // (String) => Unit
+      _genVarUpdate(varName) {
+        this._updateVarsByName(varName);
+      }
+
+      // Unit -> Unit
+      _refreshName() {
+        this._name = `${this._breed.singular} ${this.id}`;
+      }
+
+      // (Number, Number, IDSet) => Unit
+      _setXandY(newX, newY, seenTurtlesSet = {}) {
+        var dx, dy, f, oldX, oldY, originPatch, xcor, ycor;
+        originPatch = this.getPatchHere();
+        oldX = this.xcor;
+        oldY = this.ycor;
+        xcor = this.world.topology.wrapX(newX);
+        ycor = this.world.topology.wrapY(newY);
+        // DO NOT SET `xcor` AND `ycor` DIRECTLY FROM `wrap*`.  `wrap*` can throw a `TopologyException`.
+        // If we set only one of the coordinates and then bail with an exception (and without generating the View update),
+        // it causes all sorts of bonkers stuff to happen. --JAB (10/17/17)
+        this.xcor = xcor;
+        this.ycor = ycor;
+        this._updateVarsByName("xcor", "ycor");
+        if (originPatch !== this.getPatchHere()) {
+          originPatch.untrackTurtle(this);
+          this.getPatchHere().trackTurtle(this);
+        }
+        this.linkManager._refresh();
+        // It's important not to use the wrapped coordinates (`@xcor`, `@ycor`) here.
+        // Using those will cause floating point arithmetic discrepancies. --JAB (10/22/15)
+        dx = newX - oldX;
+        dy = newY - oldY;
+        f = (seenTurtles) => {
+          return (turtle) => {
+            return ignorantly(() => {
+              return turtle._setXandY(turtle.xcor + dx, turtle.ycor + dy, seenTurtles);
+            });
+          };
+        };
+        this._withEachTiedTurtle(f, seenTurtlesSet);
+      }
+
+      // ((IDSet) => (Turtle) => Any, IDSet) => Unit
+      _withEachTiedTurtle(f, seenTurtlesSet) {
+        var turtles;
+        seenTurtlesSet[this.id] = true;
+        turtles = this._tiedTurtles().filter(function({id}) {
+          return seenTurtlesSet[id] == null;
+        });
+        turtles.forEach(function({id}) {
+          return seenTurtlesSet[id] = true;
+        });
+        turtles.forEach(f(seenTurtlesSet));
+      }
+
+      // () => Patch
+      _optimalPatchHereInternal() {
+        return this.getPatchHere();
+      }
+
+      _optimalPatchNorth() {
+        return this.getPatchHere()._optimalPatchNorth();
+      }
+
+      _optimalPatchEast() {
+        return this.getPatchHere()._optimalPatchEast();
+      }
+
+      _optimalPatchSouth() {
+        return this.getPatchHere()._optimalPatchSouth();
+      }
+
+      _optimalPatchWest() {
+        return this.getPatchHere()._optimalPatchWest();
+      }
+
+      _optimalPatchNorthEast() {
+        return this.getPatchHere()._optimalPatchNorthEast();
+      }
+
+      _optimalPatchSouthEast() {
+        return this.getPatchHere()._optimalPatchSouthEast();
+      }
+
+      _optimalPatchSouthWest() {
+        return this.getPatchHere()._optimalPatchSouthWest();
+      }
+
+      _optimalPatchNorthWest() {
+        return this.getPatchHere()._optimalPatchNorthWest();
+      }
+
+    };
+
+    // type GenTurtleFunc      = (Number, Number, Number, Number, Breed, String, Number, Boolean, Number, String, PenManager) => Turtle
+    // type IDSet              = Object[ID, Boolean]
+    // type RegLineDrawFunc    = (Number, Number, Number, Number, Boolean, Boolean, RGB, Number, String, String) => Unit
+    // type RegTurtleStampFunc = (Number, Number, Number, Number, RGB, String, String) => Unit
+    Turtle.prototype._breed = void 0; // Breed
+
+    Turtle.prototype._breedShape = void 0; // String
+
+    Turtle.prototype._name = void 0; // String
+
+    Turtle.prototype._updateVarsByName = void 0; // (String*) => Unit
+
+    Turtle.prototype._varManager = void 0; // VariableManager
+
+    Turtle.prototype.linkManager = void 0; // TurtleLinkManager
+
+    return Turtle;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AbstractAgentSet, JSType, Link, LinkSet, NLType, Patch, PatchSet, Turtle, TurtleSet;
+
+  NLType = class NLType {
+    constructor(_x) { // (Any) => NLType
+      this._x = _x;
+    }
+
+  };
+
+  module.exports = function(x) {
+    return new NLType(x);
+  };
+
+  // We have to do something wonky to deal with the cyclic dependencies here --JAB (3/2/15)
+  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();
+  };
+
+  NLType.prototype.niceName = function() {
+    if (this.isAgentSet()) {
+      return "agentset";
+    } else if (this.isBoolean()) {
+      return "TRUE/FALSE";
+    } else if (this.isBreed()) {
+      return "breed";
+    } else if (this.isCommandLambda()) {
+      return "anonymous command";
+    } else if (this.isLink()) {
+      return "link";
+    } else if (this.isList()) {
+      return "list";
+    } else if (this.isNobody()) {
+      return "nobody";
+    } else if (this.isNumber()) {
+      return "number";
+    } else if (this.isPatch()) {
+      return "patch";
+    } else if (this.isReporterLambda()) {
+      return "anonymous reporter";
+    } else if (this.isTurtle()) {
+      return "turtle";
+    } else {
+      return "unknown value";
+    }
+  };
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  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, None, PatchReference, TurtleReference, difference, displayModeToString, exportAgent, exportAgentReference, exportBreedReference, exportColor, exportGlobals, exportLinkReference, exportMetadata, exportMiniGlobals, exportPatchReference, exportPlot, exportPlotManager, exportTurtleReference, exportWildcardVar, find, fold, id, isEmpty, linkBuiltins, maybe, patchBuiltins, penModeToBool, perspectiveToString, tee, toObject, turtleBuiltins, version;
+
+  ({version} = require('meta'));
+
+  ({AgentReference, BreedNamePair, BreedReference, ExportAllPlotsData, ExportedAgent, ExportedAgentSet, ExportedColorNum, ExportedCommandLambda, ExportedExtension, ExportedGlobals, ExportedLink, ExportedLinkSet, ExportedPatch, ExportedPatchSet, ExportedPen, ExportedPlot, ExportedPlotManager, ExportedPoint, ExportedReporterLambda, ExportedRGB, ExportedRGBA, ExportedTurtle, ExportedTurtleSet, ExportPlotData, ExportWorldData, LinkReference, Metadata, NobodyReference, PatchReference, TurtleReference} = require('serialize/exportstructures'));
+
+  ({
+    Perspective: {perspectiveToString}
+  } = require('../observer'));
+
+  ({linkBuiltins, patchBuiltins, turtleBuiltins} = require('../structure/builtins'));
+
+  ({
+    DisplayMode: {displayModeToString},
+    PenMode: {penModeToBool}
+  } = require('engine/plot/pen'));
+
+  ({difference, find, isEmpty, toObject} = require('brazierjs/array'));
+
+  ({id, tee} = require('brazierjs/function'));
+
+  ({fold, maybe, None} = require('brazierjs/maybe'));
+
+  NLType = require('../typechecker');
+
+  // Yo!  This file expects that basically all of its functions will be called in the context
+  // of the `World` object.  That is, they should be called within methods on `World`, using
+  // `<function>.call(this)`. --JAB (12/10/17)
+
+  // (String|(Number, Number, Number)|(Number, Number, Number, Number)) => ExportedColor
+  exportColor = function(color) {
+    var a, b, g, r;
+    if (NLType(color).isNumber()) {
+      return new ExportedColorNum(color);
+    } else if (NLType(color).isList()) {
+      [r, g, b, a] = color;
+      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)}`);
+    }
+  };
+
+  // (String) => BreedReference
+  exportBreedReference = function(breedName) {
+    return new BreedReference(breedName.toLowerCase());
+  };
+
+  // (Patch) => PatchReference
+  exportPatchReference = function(patch) {
+    return new PatchReference(patch.pxcor, patch.pycor);
+  };
+
+  // (Turtle) => TurtleReference
+  exportTurtleReference = function(turtle) {
+    var breed;
+    breed = new BreedNamePair(turtle.getBreedNameSingular(), turtle.getBreedName().toLowerCase());
+    return new TurtleReference(breed, turtle.id);
+  };
+
+  // (Link) => LinkReference
+  exportLinkReference = function(link) {
+    var breed;
+    breed = new BreedNamePair(link.getBreedNameSingular(), link.getBreedName().toLowerCase());
+    return new LinkReference(breed, link.end1.id, link.end2.id);
+  };
+
+  // (Agent) => AgentReference
+  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)}`);
+    }
+  };
+
+  // (Agent) => (String) => Any
+  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));
+    };
+  };
+
+  // () => Object[Any]
+  exportMetadata = function() {
+    // TODO: Get filename from metadata from compiler, once NetLogo/NetLogo#1547 has been merged --JAB (2/8/18)
+    return new Metadata(version, '[IMPLEMENT .NLOGO]', new Date());
+  };
+
+  // [T, U <: ExportedAgent[T]] @ (Class[U], Array[(String, (Any) => Any)]) => (T) => U
+  exportAgent = function(clazz, builtInsMappings) {
+    return function(agent) {
+      var builtInsNames, builtInsValues, extras, extrasNames;
+      builtInsValues = builtInsMappings.map(function([name, f]) {
+        return f(agent.getVariable(name));
+      });
+      builtInsNames = builtInsMappings.map(function([name]) {
+        return name;
+      });
+      extrasNames = difference(agent.varNames())(builtInsNames);
+      extras = toObject(extrasNames.map(tee(id)(exportWildcardVar(agent))));
+      return new clazz(...builtInsValues, extras);
+    };
+  };
+
+  // (Plot) => ExportedPlot
+  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({x, y, penMode, 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);
+  };
+
+  // () => ExportedPlotManager
+  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);
+  };
+
+  // () => Object[Any]
+  exportMiniGlobals = function() {
+    var namesNotDeleted;
+    namesNotDeleted = this.observer.varNames().filter((name) => {
+      return this.observer.getVariable(name) != null;
+    }).sort();
+    return toObject(namesNotDeleted.map(tee(id)(exportWildcardVar(this.observer))));
+  };
+
+  // () => ExportedGlobals
+  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);
+  };
+
+  // () => ExportAllPlotsData
+  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);
+  };
+
+  // (String) => ExportPlotData
+  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}"`);
+    })(exportPlot)(desiredPlotMaybe);
+    return new ExportPlotData(metadata, miniGlobals, plot);
+  };
+
+  // () => ExportWorldData
+  module.exports.exportWorld = function() {
+    var drawingM, 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)));
+    drawingM = !this._updater.drawingWasJustCleared() ? maybe([this.patchSize, this._getViewBase64()]) : None;
+    output = this._getOutput();
+    plotManager = exportPlotManager.call(this);
+    extensions = [];
+    return new ExportWorldData(metadata, randomState, globals, patches, turtles, links, drawingM, 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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var IDManager;
+
+  module.exports = IDManager = (function() {
+    class IDManager {
+      // () => IDManager
+      constructor() {
+        this.reset();
+      }
+
+      // () => Number
+      getCount() {
+        return this._count;
+      }
+
+      // () => Unit
+      reset() {
+        this._count = 0;
+      }
+
+      // Number
+      next() {
+        return this._count++;
+      }
+
+      // (Number) => Unit
+      setCount(_count) {
+        this._count = _count;
+      }
+
+      // (() => Any) => Unit
+      suspendDuring(f) {
+        var oldCount;
+        oldCount = this._count;
+        f();
+        this._count = oldCount;
+      }
+
+    };
+
+    // Number
+    IDManager.prototype._count = void 0;
+
+    return IDManager;
+
+  }).call(this);
+
+}).call(this);
+
+},{}],"engine/core/world/import":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var BreedReference, ExportedColorNum, ExportedCommandLambda, ExportedLinkSet, ExportedPatchSet, ExportedRGB, ExportedRGBA, ExportedReporterLambda, ExportedTurtleSet, LinkReference, LinkSet, NobodyReference, PatchReference, PatchSet, TurtleReference, TurtleSet, fold, perspectiveFromString, reifyExported,
+    indexOf = [].indexOf;
+
+  LinkSet = require('../linkset');
+
+  PatchSet = require('../patchset');
+
+  TurtleSet = require('../turtleset');
+
+  ({
+    Perspective: {perspectiveFromString}
+  } = require('../observer'));
+
+  ({BreedReference, ExportedColorNum, ExportedCommandLambda, ExportedLinkSet, ExportedPatchSet, ExportedRGB, ExportedRGBA, ExportedReporterLambda, ExportedTurtleSet, LinkReference, NobodyReference, PatchReference, TurtleReference} = require('serialize/exportstructures'));
+
+  ({fold} = require('brazier/maybe'));
+
+  // ( (Number) => Agent
+  // , (Number, Number) => Agent
+  // , (Number, Number, String) => Agent
+  // , () => PatchSet
+  // , () => Breed
+  // , World
+  // ) => (Any) => Any
+  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({
+            id1,
+            id2,
+            breed: {plural}
+          }) {
+          return getLink(id1, id2, plural);
+        });
+        return new LinkSet(links, world);
+      } else if (x instanceof ExportedPatchSet) {
+        patches = x.references.map(function({pxcor, pycor}) {
+          return getPatch(pxcor, pycor);
+        });
+        return new PatchSet(patches, world);
+      } else if (x instanceof ExportedTurtleSet) {
+        turtles = x.references.map(function({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)}`);
+      }
+    };
+  };
+
+  // (WorldState) => Unit
+  module.exports.importWorld = function({
+      globals: {
+        linkDirectedness: directedLinks,
+        maxPxcor,
+        maxPycor,
+        minPxcor,
+        minPycor,
+        nextWhoNumber,
+        perspective,
+        subject,
+        ticks,
+        codeGlobals
+      },
+      links,
+      patches,
+      plotManager,
+      randomState,
+      turtles,
+      patchSize,
+      drawingDataMaybe,
+      output
+    }) {
+    var extractColor, linkFinishFs, patchFinishFs, reify, trueSubject, turtleFinishFs, value, varName;
+    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(({pxcor, pycor, pcolor, plabel, plabelColor, patchesOwns}) => {
+      var patch;
+      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;
+      };
+    });
+    turtleFinishFs = turtles.map(({
+        who,
+        color,
+        heading,
+        xcor,
+        ycor,
+        shape,
+        label,
+        labelColor,
+        breed: {breedName},
+        isHidden,
+        size,
+        penSize,
+        penMode,
+        breedsOwns
+      }) => {
+      var args, newTurtle, realBreed, ref;
+      realBreed = (ref = this.breedManager.get(breedName)) != null ? ref : this.breedManager.turtles();
+      args = [who, extractColor(color), heading, xcor, ycor, realBreed, "", extractColor(labelColor), isHidden, size, shape];
+      newTurtle = this.turtleManager._createTurtle(...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.turtleManager._idManager.setCount(nextWhoNumber);
+    linkFinishFs = links.map(({
+        breed: {breedName},
+        end1,
+        end2,
+        color,
+        isHidden,
+        label,
+        labelColor,
+        shape,
+        thickness,
+        tieMode,
+        breedsOwns
+      }) => {
+      var newLink, realBreed, realEnd1, realEnd2, ref;
+      realEnd1 = this.turtleManager.getTurtleOfBreed(end1.breed.plural, end1.id);
+      realEnd2 = this.turtleManager.getTurtleOfBreed(end2.breed.plural, end2.id);
+      realBreed = (ref = this.breedManager.get(breedName)) != null ? ref : 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;
+      };
+    });
+    // Reification time!  This might seem a bit unintuitive, but, e.g. labels can be agents, link ends
+    // are agents, and `*-owns` vars can be agents.  So we need to import all the agents before we can
+    // finish importing them.  I'm calling this "second pass" stage the "reification stage", which is
+    // when we revisit the things that we couldn't safely import earlier. --JAB (12/14/17)
+    [].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);
+    }
+    // Reification done. --JAB (12/14/17)
+    this._plotManager.importState(plotManager);
+    this.ticker.importTicks(ticks);
+    this.rng.importState(randomState);
+    fold(function() {})(([patchSize, drawing]) => {
+      this.setPatchSize(patchSize);
+      return this.importDrawing(drawing);
+    })(drawingDataMaybe);
+    if (output != null) {
+      this._setOutput(output);
+    }
+  };
+
+}).call(this);
+
+},{"../linkset":"engine/core/linkset","../observer":"engine/core/observer","../patchset":"engine/core/patchset","../turtleset":"engine/core/turtleset","brazier/maybe":"brazier/maybe","serialize/exportstructures":"serialize/exportstructures"}],"engine/core/world/linkmanager":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+
+  // As far as dependencies and private access go, I'm treating this as if it's a part of `World` --JAB (8/5/14)
+  var Builtins, IDManager, Link, LinkManager, LinkSet, SortedLinks, contains, exists, filter, isEmpty, map, pairs, pipeline, stableSort, values;
+
+  Link = require('../link');
+
+  LinkSet = require('../linkset');
+
+  Builtins = require('../structure/builtins');
+
+  IDManager = require('./idmanager');
+
+  SortedLinks = require('./sortedlinks');
+
+  stableSort = require('util/stablesort');
+
+  ({contains, exists, filter, isEmpty, map} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  ({pairs, values} = require('brazierjs/object'));
+
+  module.exports = LinkManager = (function() {
+    class LinkManager {
+
+      // (World, BreedManager, Updater, () => Unit, () => Unit) => LinkManager
+      constructor(_world, _breedManager, _updater, _notifyIsDirected, _notifyIsUndirected) {
+        // (String) => LinkSet
+        this.linksOfBreed = this.linksOfBreed.bind(this);
+        // (Link) => Unit
+        this._removeLink = this._removeLink.bind(this);
+        // ((Turtle) => Link) => (TurtleSet) => LinkSet
+        this._createLinksBy = this._createLinksBy.bind(this);
+        this._world = _world;
+        this._breedManager = _breedManager;
+        this._updater = _updater;
+        this._notifyIsDirected = _notifyIsDirected;
+        this._notifyIsUndirected = _notifyIsUndirected;
+        this.clear();
+      }
+
+      // () => Unit
+      clear() {
+        this._linkArrCache = void 0;
+        this._links = new SortedLinks;
+        this._linksFrom = {};
+        this._idManager = new IDManager;
+        return this._linksTo = {};
+      }
+
+      // (Turtle, Turtle, String) => Link
+      createDirectedLink(from, to, breedName) {
+        if (breedName.toUpperCase() === "LINKS") {
+          this._notifyIsDirected();
+        }
+        return this._createLink(true, from, to, breedName);
+      }
+
+      // (Turtle, TurtleSet, String) => LinkSet
+      createDirectedLinks(source, others, breedName) {
+        if (breedName.toUpperCase() === "LINKS") {
+          this._notifyIsDirected();
+        }
+        return this._createLinksBy((turtle) => {
+          return this._createLink(true, source, turtle, breedName);
+        })(others);
+      }
+
+      // (Turtle, TurtleSet, String) => LinkSet
+      createReverseDirectedLinks(source, others, breedName) {
+        if (breedName.toUpperCase() === "LINKS") {
+          this._notifyIsDirected();
+        }
+        return this._createLinksBy((turtle) => {
+          return this._createLink(true, turtle, source, breedName);
+        })(others);
+      }
+
+      // (Turtle, Turtle, String) => Link
+      createUndirectedLink(source, other, breedName) {
+        return this._createLink(false, source, other, breedName);
+      }
+
+      // (Turtle, TurtleSet, String) => LinkSet
+      createUndirectedLinks(source, others, breedName) {
+        return this._createLinksBy((turtle) => {
+          return this._createLink(false, source, turtle, breedName);
+        })(others);
+      }
+
+      // (Number, Number, String) => Agent
+      getLink(fromId, toId, breedName = "LINKS") {
+        var findFunc, isDirected, ref;
+        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 (ref = this._links.find(findFunc)) != null ? ref : Nobody;
+      }
+
+      // (Object[Any]) => Unit
+      importState(linkState) {
+        linkState.forEach(({breed, end1, end2, color, isHidden, labelColor, shape, thickness, tieMode}) => {
+          var newLink;
+          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);
+        });
+      }
+
+      // () => LinkSet
+      links() {
+        var thunk;
+        thunk = (() => {
+          return this._linkArray();
+        });
+        return new LinkSet(thunk, this._world, "links");
+      }
+
+      linksOfBreed(breedName) {
+        var thunk;
+        thunk = (() => {
+          return stableSort(this._breedManager.get(breedName).members)(function(x, y) {
+            return x.compare(y).toInt;
+          });
+        });
+        return new LinkSet(thunk, this._world, breedName);
+      }
+
+      // () => Array[Link]
+      _linkArray() {
+        if (this._linkArrCache == null) {
+          this._linkArrCache = this._links.toArray();
+        }
+        return this._linkArrCache;
+      }
+
+      // Link -> Breed -> String -> Unit
+      trackBreedChange(link, breed, oldBreedName) {
+        var end1, end2, existingLink, isDirected;
+        ({end1, end2, isDirected} = link);
+        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);
+        }
+      }
+
+      _removeLink(link) {
+        var l;
+        l = this._links.find(function({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());
+      }
+
+      // (Boolean, Turtle, Turtle, String) => Link
+      _createLink(isDirected, from, to, breedName) {
+        var breed, end1, end2, link;
+        [end1, end2] = from.id < to.id || isDirected ? [from, to] : [to, from];
+        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)(...Builtins.linkBuiltins);
+          this._updater.updated(link)(...Builtins.linkExtras);
+          this._links.insert(link);
+          this._linkArrCache = void 0;
+          return link;
+        } else {
+          return Nobody;
+        }
+      }
+
+      _createLinksBy(mkLink) {
+        return (turtles) => {
+          var isLink, links;
+          isLink = function(other) {
+            return other !== Nobody;
+          };
+          links = pipeline(map(mkLink), filter(isLink))(turtles.toArray());
+          return new LinkSet(links, this._world);
+        };
+      }
+
+      // String -> Unit
+      _errorIfBreedIsIncompatible(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.");
+        }
+      }
+
+      // Unit -> Boolean
+      _hasBreededs() {
+        var allPairs;
+        allPairs = pairs(this._linksTo).concat(pairs(this._linksFrom));
+        return exists(function([key, value]) {
+          return key !== "LINKS" && exists(function(x) {
+            return !isEmpty(x);
+          })(values(value));
+        })(allPairs);
+      }
+
+      // Unit -> Boolean
+      _hasUnbreededs() {
+        var hasUnbreededs;
+        hasUnbreededs = function(bin) {
+          var ref;
+          return exists(function(x) {
+            return !isEmpty(x);
+          })(values((ref = bin["LINKS"]) != null ? ref : {}));
+        };
+        return hasUnbreededs(this._linksFrom) || hasUnbreededs(this._linksTo);
+      }
+
+      // (Number, Number, Boolean, String) => Unit
+      _insertIntoSets(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);
+        }
+      }
+
+      // (Number, Number, Boolean, String) => Boolean
+      _linkExists(id1, id2, isDirected, breedName) {
+        var ref, ref1, ref2, ref3, weCanHaz;
+        weCanHaz = pipeline(values, contains(id2));
+        return weCanHaz((ref = (ref1 = this._linksFrom[breedName]) != null ? ref1[id1] : void 0) != null ? ref : {}) || (!isDirected && weCanHaz((ref2 = (ref3 = this._linksTo[breedName]) != null ? ref3[id1] : void 0) != null ? ref2 : {}));
+      }
+
+      // Number -> Number -> Boolean -> String -> Unit
+      _removeFromSets(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);
+        }
+      }
+
+    };
+
+    LinkManager.prototype._linkArrCache = void 0; // Array[Link]
+
+    LinkManager.prototype._links = void 0; // SortedLinks
+
+    LinkManager.prototype._linksFrom = void 0; // Object[String, Object[Number, Number]]
+
+    LinkManager.prototype._idManager = void 0; // IDManager
+
+    LinkManager.prototype._linksTo = void 0; // Object[String, Object[Number, Number]]
+
+    return LinkManager;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Mori, SortedLinks, linkCompare;
+
+  linkCompare = require('../structure/linkcompare');
+
+  Mori = require('mori');
+
+  module.exports = SortedLinks = (function() {
+    class SortedLinks {
+
+      // () => SortedLinks
+      constructor() {
+        this._links = Mori.sortedSetBy(linkCompare);
+      }
+
+      // Side-effecting ops
+      insert(link) {
+        this._links = Mori.conj(this._links, link);
+        return this;
+      }
+
+      remove(link) {
+        this._links = Mori.disj(this._links, link);
+        return this;
+      }
+
+
+      // Pure ops
+      find(pred) {
+        return Mori.first(Mori.filter(pred, this._links)); // Mori's `filter` is lazy, so it's all cool --JAB (3/26/14) # ((Link) => Boolean) => Link
+      }
+
+      isEmpty() {
+        return Mori.isEmpty(this._links); // () => Boolean
+      }
+
+      toArray() {
+        return Mori.toJs(this._links); // () => Array[Link]
+      }
+
+    };
+
+    SortedLinks._links = void 0; // Mori.SortedSet[Link]
+
+    return SortedLinks;
+
+  }).call(this);
+
+}).call(this);
+
+},{"../structure/linkcompare":"engine/core/structure/linkcompare","mori":"mori"}],"engine/core/world/ticker":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var EvilSentinel, Exception, Ticker;
+
+  Exception = require('util/exception');
+
+  EvilSentinel = -1;
+
+  module.exports = Ticker = (function() {
+    class Ticker {
+      // (() => Unit, () => Unit, (String*) => Unit) => Ticker
+      constructor(_onReset, _onTick, _updateFunc) {
+        this._onReset = _onReset;
+        this._onTick = _onTick;
+        this._updateFunc = _updateFunc;
+        this._count = EvilSentinel;
+      }
+
+      // () => Unit
+      reset() {
+        this._updateTicks(function() {
+          return 0;
+        });
+        this._onReset();
+        this._onTick();
+      }
+
+      // () => Unit
+      clear() {
+        this._updateTicks(function() {
+          return EvilSentinel;
+        });
+      }
+
+      // (Number) => Unit
+      importTicks(numTicks) {
+        this._updateTicks(function() {
+          return numTicks;
+        });
+      }
+
+      // () => Unit
+      tick() {
+        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();
+      }
+
+      // (Number) => Unit
+      tickAdvance(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.");
+        }
+      }
+
+      // () => Boolean
+      ticksAreStarted() {
+        return this._count !== EvilSentinel;
+      }
+
+      // () => Number
+      tickCount() {
+        if (this.ticksAreStarted()) {
+          return this._count;
+        } else {
+          throw new Error("The tick counter has not been started yet. Use RESET-TICKS.");
+        }
+      }
+
+      // ((Number) => Number) => Unit
+      _updateTicks(updateCountFunc) {
+        this._count = updateCountFunc(this._count);
+        this._updateFunc("ticks");
+      }
+
+    };
+
+    // Number
+    Ticker.prototype._count = void 0;
+
+    return Ticker;
+
+  }).call(this);
+
+}).call(this);
+
+},{"util/exception":"util/exception"}],"engine/core/world/turtlemanager":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Builtins, ColorModel, DeathInterrupt, IDManager, Turtle, TurtleManager, TurtleSet, ignorantly, ignoring, map, rangeUntil;
+
+  ColorModel = require('engine/core/colormodel');
+
+  Turtle = require('../turtle');
+
+  TurtleSet = require('../turtleset');
+
+  Builtins = require('../structure/builtins');
+
+  IDManager = require('./idmanager');
+
+  ({map} = require('brazierjs/array'));
+
+  ({rangeUntil} = require('brazierjs/number'));
+
+  ({DeathInterrupt, ignoring} = require('util/exception'));
+
+  ignorantly = ignoring(DeathInterrupt);
+
+  module.exports = TurtleManager = (function() {
+    class TurtleManager {
+
+      // (World, Updater, BreedManager, (Number) => Number) => TurtleManager
+      constructor(_world, _breedManager, _updater, _nextInt) {
+        // (String) => TurtleSet
+        this.turtlesOfBreed = this.turtlesOfBreed.bind(this);
+        // (Number, Number, Number, Number, Breed, String, Number, Boolean, Number, String, (Updatable) => PenManager) => Turtle
+        this._createNewTurtle = this._createNewTurtle.bind(this);
+        // (Number) => Unit
+        this._removeTurtle = this._removeTurtle.bind(this);
+        this._world = _world;
+        this._breedManager = _breedManager;
+        this._updater = _updater;
+        this._nextInt = _nextInt;
+        this._idManager = new IDManager;
+        this._turtles = [];
+        this._turtlesById = {};
+      }
+
+      // () => Unit
+      clearTurtles() {
+        this.turtles().forEach(function(turtle) {
+          return ignorantly(() => {
+            return turtle.die();
+          });
+        });
+        this._idManager.reset();
+      }
+
+      // (Number, String) => TurtleSet
+      createOrderedTurtles(n, breedName) {
+        var num, turtles;
+        num = n >= 0 ? n : 0;
+        turtles = map((index) => {
+          var color, heading;
+          color = ColorModel.nthColor(index);
+          heading = (360 * index) / num;
+          return this._createNewTurtle(color, heading, 0, 0, this._breedManager.get(breedName));
+        })(rangeUntil(0)(num));
+        return new TurtleSet(turtles, this._world);
+      }
+
+      // (Number, String, Number, Number) => TurtleSet
+      createTurtles(n, breedName, xcor = 0, ycor = 0) {
+        var num, turtles;
+        num = n >= 0 ? n : 0;
+        turtles = map(() => {
+          var color, heading;
+          color = ColorModel.randomColor(this._nextInt);
+          heading = this._nextInt(360);
+          return this._createNewTurtle(color, heading, xcor, ycor, this._breedManager.get(breedName));
+        })(rangeUntil(0)(num));
+        return new TurtleSet(turtles, this._world);
+      }
+
+      // (Number) => Agent
+      getTurtle(id) {
+        var ref;
+        return (ref = this._turtlesById[id]) != null ? ref : Nobody;
+      }
+
+      // (String, Number) => Agent
+      getTurtleOfBreed(breedName, id) {
+        var turtle;
+        turtle = this.getTurtle(id);
+        if (turtle.getBreedName().toUpperCase() === breedName.toUpperCase()) {
+          return turtle;
+        } else {
+          return Nobody;
+        }
+      }
+
+      // (Object[Any], Number) => Unit
+      importState(turtleState, nextIndex) {
+        turtleState.forEach(({who, color, heading, xcor, ycor, shape, labelColor, breed, isHidden, size, penSize, penMode}) => {
+          var newTurtle;
+          newTurtle = this._createTurtle(who, color, heading, xcor, ycor, breed, "", labelColor, isHidden, size, shape);
+          newTurtle.penManager.setPenMode(penMode);
+          return newTurtle.penManager.setSize(penSize);
+        });
+        this._idManager.setCount(nextIndex);
+      }
+
+      // () => Number
+      peekNextID() {
+        return this._idManager.getCount();
+      }
+
+      // () => TurtleSet
+      turtles() {
+        return new TurtleSet(this._turtles, this._world, "turtles");
+      }
+
+      turtlesOfBreed(breedName) {
+        var breed;
+        breed = this._breedManager.get(breedName);
+        return new TurtleSet(breed.members, this._world, breedName);
+      }
+
+      // () => Unit
+      _clearTurtlesSuspended() {
+        this._idManager.suspendDuring(() => {
+          return this.clearTurtles();
+        });
+      }
+
+      _createNewTurtle(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);
+      }
+
+      // (Number, Number, Number, Number, Number, Breed, String, Number, Boolean, Number, String, (Updatable) => PenManager) => Turtle
+      _createTurtle(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)(...Builtins.turtleBuiltins);
+        this._turtles.push(turtle);
+        this._turtlesById[id] = turtle;
+        return turtle;
+      }
+
+      _removeTurtle(id) {
+        var turtle;
+        turtle = this._turtlesById[id];
+        this._turtles.splice(this._turtles.indexOf(turtle), 1);
+        delete this._turtlesById[id];
+      }
+
+    };
+
+    TurtleManager.prototype._idManager = void 0; // IDManager
+
+    TurtleManager.prototype._turtles = void 0; // Array[Turtle]
+
+    TurtleManager.prototype._turtlesById = void 0; // Object[Number, Turtle]
+
+    return TurtleManager;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var LinkManager, NLMath, Observer, Patch, PatchSet, Ticker, TopologyInterrupt, TurtleManager, World, allPlotsDataToCSV, exportAllPlots, exportPlot, exportWorld, filter, flatMap, importWorld, linkBuiltins, patchBuiltins, pipeline, plotDataToCSV, topologyFactory, turtleBuiltins, values, worldDataToCSV;
+
+  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');
+
+  ({filter, flatMap} = require('brazier/array'));
+
+  ({pipeline} = require('brazier/function'));
+
+  ({values} = require('brazier/object'));
+
+  ({Observer} = require('./observer'));
+
+  ({linkBuiltins, patchBuiltins, turtleBuiltins} = require('./structure/builtins'));
+
+  ({allPlotsDataToCSV, plotDataToCSV, worldDataToCSV} = require('serialize/exportcsv'));
+
+  ({TopologyInterrupt} = require('util/exception'));
+
+  ({exportWorld, exportPlot, exportAllPlots} = require('./world/export'));
+
+  ({importWorld} = require('./world/import'));
+
+  module.exports = World = (function() {
+    class World {
+
+      // (MiniWorkspace, WorldConfig, () => String, () => Unit, () => String, (Any) => String, (String) => Unit, Array[String], Array[String], Array[String], Number, Number, Number, Number, Number, Boolean, Boolean, ShapeMap, ShapeMap, () => Unit) => World
+      constructor(miniWorkspace, _config, _getViewBase64, _outputClear, _getOutput, _setOutput, dump, globalNames, interfaceGlobalNames, patchesOwnNames, minPxcor, maxPxcor, minPycor, maxPycor, patchSize, wrappingAllowedInX, wrappingAllowedInY, turtleShapeMap, linkShapeMap, onTickFunction) {
+        var onTick;
+        // () => PatchSet
+        this.patches = this.patches.bind(this);
+        // (Number, Number) => Agent
+        this.getPatchAt = this.getPatchAt.bind(this);
+        // The wrapping and rounding below is setup to avoid creating extra anonymous functions.
+        // We could just use @ and fat arrows => but CoffeeScript uses anon funcs to bind `this`.
+        // Those anon funcs cause GC pressure and runtime slowdown, so we have to manually setup
+        // the context somehow.  A lot of rounding and wrapping goes on in models.  -JMB 07/2017
+
+        // (Number) => Number
+        this._thisWrapX = this._thisWrapX.bind(this);
+        // (Number) => Number
+        this._thisWrapY = this._thisWrapY.bind(this);
+        // () => Unit
+        this._incrementPatchLabelCount = this._incrementPatchLabelCount.bind(this);
+        // () => Unit
+        this._decrementPatchLabelCount = this._decrementPatchLabelCount.bind(this);
+        // () => Unit
+        this._setUnbreededLinksDirected = this._setUnbreededLinksDirected.bind(this);
+        // () => Unit
+        this._setUnbreededLinksUndirected = this._setUnbreededLinksUndirected.bind(this);
+        // () => Unit
+        this._declarePatchesNotAllBlack = this._declarePatchesNotAllBlack.bind(this);
+        this._config = _config;
+        this._getViewBase64 = _getViewBase64;
+        this._outputClear = _outputClear;
+        this._getOutput = _getOutput;
+        this._setOutput = _setOutput;
+        this.dump = dump;
+        this.patchesOwnNames = patchesOwnNames;
+        this.patchSize = patchSize;
+        this.turtleShapeMap = turtleShapeMap;
+        this.linkShapeMap = linkShapeMap;
+        ({
+          selfManager: this.selfManager,
+          updater: this._updater,
+          rng: this.rng,
+          breedManager: this.breedManager,
+          plotManager: this._plotManager
+        } = miniWorkspace);
+        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 = () => {
+          this.rng.withAux(onTickFunction);
+          return this._plotManager.updatePlots();
+        };
+        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);
+      }
+
+      // () => LinkSet
+      links() {
+        return this.linkManager.links();
+      }
+
+      // () => TurtleSet
+      turtles() {
+        return this.turtleManager.turtles();
+      }
+
+      patches() {
+        return new PatchSet(this._patches, this, "patches");
+      }
+
+      // (Number, Number, Number, Number, Boolean, Boolean) => Unit
+      resize(minPxcor, maxPxcor, minPycor, maxPycor, wrapsInX = this.topology._wrapInX, wrapsInY = this.topology._wrapInY) {
+        this._resizeHelper(minPxcor, maxPxcor, minPycor, maxPycor, wrapsInX, wrapsInY);
+        return this.clearDrawing();
+      }
+
+      // (Number, Number, Number, Number, Boolean, Boolean) => Unit
+      _resizeHelper(minPxcor, maxPxcor, minPycor, maxPycor, wrapsInX = this.topology._wrapInX, wrapsInY = this.topology._wrapInY) {
+        var ref, ref1, ref2, ref3;
+        if (!((minPxcor <= 0 && 0 <= maxPxcor) && (minPycor <= 0 && 0 <= maxPycor))) {
+          throw new Error("You must include the point (0, 0) in the world.");
+        }
+        if (minPxcor !== ((ref = this.topology) != null ? ref.minPxcor : void 0) || minPycor !== ((ref1 = this.topology) != null ? ref1.minPycor : void 0) || maxPxcor !== ((ref2 = this.topology) != null ? ref2.maxPxcor : void 0) || maxPycor !== ((ref3 = this.topology) != null ? ref3.maxPycor : void 0)) {
+          this._config.resizeWorld();
+          // For some reason, JVM NetLogo doesn't restart `who` ordering after `resize-world`; even the test for this is existentially confused. --JAB (4/3/14)
+          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");
+        }
+      }
+
+      // (Boolean, Boolean, Number, Number, Number, Number) => Unit
+      changeTopology(wrapsInX, wrapsInY, minX = this.topology.minPxcor, maxX = this.topology.maxPxcor, minY = this.topology.minPycor, maxY = this.topology.maxPycor) {
+        this.topology = topologyFactory(wrapsInX, wrapsInY, minX, maxX, minY, maxY, this.patches, this.getPatchAt);
+        this._updater.updated(this)("wrappingAllowedInX", "wrappingAllowedInY");
+      }
+
+      getPatchAt(x, y) {
+        var error, 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;
+          }
+        }
+      }
+
+      // (Number, Number) => Agent
+      patchAtCoords(x, y) {
+        var error, 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;
+          }
+        }
+      }
+
+      // (Number, Number, Number, Number) => Agent
+      patchAtHeadingAndDistanceFrom(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);
+      }
+
+      // (Number) => Unit
+      setPatchSize(patchSize) {
+        this.patchSize = patchSize;
+        this._updater.updated(this)("patchSize");
+        this._updater.rescaleDrawing();
+      }
+
+      // () => Unit
+      clearAll() {
+        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();
+      }
+
+      // () => Unit
+      clearDrawing() {
+        this._updater.clearDrawing();
+      }
+
+      // (String) => Unit
+      importDrawing(imageBase64) {
+        this._updater.importDrawing(imageBase64);
+      }
+
+      // () => Unit
+      clearLinks() {
+        this.linkManager.clear();
+        this.turtles().ask((function() {
+          return SelfManager.self().linkManager.clear();
+        }), false);
+      }
+
+      // () => Unit
+      clearPatches() {
+        this.patches().forEach(function(patch) {
+          patch.reset();
+        });
+        this._declarePatchesAllBlack();
+        this._resetPatchLabelCount();
+      }
+
+      // () => Object[Any]
+      exportState() {
+        return exportWorld.call(this);
+      }
+
+      // () => String
+      exportAllPlotsCSV() {
+        return allPlotsDataToCSV(exportAllPlots.call(this));
+      }
+
+      // (String) => String
+      exportPlotCSV(name) {
+        return plotDataToCSV(exportPlot.call(this, name));
+      }
+
+      // () => String
+      exportCSV() {
+        var allLinksOwnsNames, allTurtlesOwnsNames, state, varNamesForBreedsMatching;
+        varNamesForBreedsMatching = (pred) => {
+          return pipeline(values, filter(pred), flatMap(function(x) {
+            return x.varNames;
+          }))(this.breedManager.breeds());
+        };
+        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);
+      }
+
+      // (Number, Number) => PatchSet
+      getNeighbors(pxcor, pycor) {
+        return new PatchSet(this.topology.getNeighbors(pxcor, pycor), this);
+      }
+
+      // (Number, Number) => PatchSet
+      getNeighbors4(pxcor, pycor) {
+        return new PatchSet(this.topology.getNeighbors4(pxcor, pycor), this);
+      }
+
+      // (WorldState) => Unit
+      importState() {
+        return importWorld.apply(this, arguments);
+      }
+
+      _thisWrapX(x) {
+        return this.topology.wrapX(x);
+      }
+
+      _thisWrapY(y) {
+        return this.topology.wrapY(y);
+      }
+
+      // (Number) => Number
+      _roundXCor(x) {
+        var wrappedX;
+        wrappedX = this._wrapC(x, this._thisWrapX);
+        return this._roundCoordinate(wrappedX);
+      }
+
+      // (Number) => Number
+      _roundYCor(y) {
+        var wrappedY;
+        wrappedY = this._wrapC(y, this._thisWrapY);
+        return this._roundCoordinate(wrappedY);
+      }
+
+      // Similarly, using try/catch as an expression creates extra anon funcs, so we get
+      // this value manually as well.  -JMB 07/2017
+
+      // (Number, (Number) => Number) => Number
+      _wrapC(c, wrapper) {
+        var error, 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;
+      }
+
+      // Boy, oh, boy!  Headless has only this to say about this code: "floor() is slow so we
+      // don't use it".  I have a lot more to say!  This code is kind of nuts, but we can't
+      // live without it unless something is done about Headless' uses of `World.roundX` and
+      // and `World.roundY`.  The previous Tortoise code was somewhat sensible about patch
+      // boundaries, but had to be supplanted by this in order to become compliant with NL
+      // Headless, which interprets `0.4999999999999999167333` as being one patch over from
+      // `0` (whereas, sensically, we should only do that starting at `0.5`).  But... we
+      // don't live in an ideal world, so I'll just replicate Headless' silly behavior here.
+      // --JAB (12/6/14)
+      // (Number) => Number
+      _roundCoordinate(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;
+          }
+        }
+      }
+
+      // () => Unit
+      _createPatches() {
+        var i, id, len, nested, patch, ref, x, y;
+        nested = (function() {
+          var i, ref, ref1, results;
+          results = [];
+          for (y = i = ref = this.topology.maxPycor, ref1 = this.topology.minPycor; (ref <= ref1 ? i <= ref1 : i >= ref1); y = ref <= ref1 ? ++i : --i) {
+            results.push((function() {
+              var j, ref2, ref3, results1;
+              results1 = [];
+              for (x = j = ref2 = this.topology.minPxcor, ref3 = this.topology.maxPxcor; (ref2 <= ref3 ? j <= ref3 : j >= ref3); x = ref2 <= ref3 ? ++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 = [].concat(...nested);
+        ref = this._patches;
+        for (i = 0, len = ref.length; i < len; i++) {
+          patch = ref[i];
+          this._updater.updated(patch)("pxcor", "pycor", "pcolor", "plabel", "plabel-color");
+        }
+      }
+
+      // (Number) => PatchSet
+      _optimalPatchCol(xcor) {
+        var maxX, maxY, minX, minY;
+        ({
+          maxPxcor: maxX,
+          maxPycor: maxY,
+          minPxcor: minX,
+          minPycor: minY
+        } = this.topology);
+        return this._optimalPatchSequence(xcor, minX, maxX, minY, maxY, (y) => {
+          return this.getPatchAt(xcor, y);
+        });
+      }
+
+      // (Number) => PatchSet
+      _optimalPatchRow(ycor) {
+        var maxX, maxY, minX, minY;
+        ({
+          maxPxcor: maxX,
+          maxPycor: maxY,
+          minPxcor: minX,
+          minPycor: minY
+        } = this.topology);
+        return this._optimalPatchSequence(ycor, minY, maxY, minX, maxX, (x) => {
+          return this.getPatchAt(x, ycor);
+        });
+      }
+
+      // (Number, Number, Number, Number, Number, (Number) => Agent) => PatchSet
+      _optimalPatchSequence(cor, boundaryMin, boundaryMax, seqStart, seqEnd, getPatch) {
+        var n, ret;
+        ret = (boundaryMin <= cor && cor <= boundaryMax) ? [].concat(...(function() {
+          var i, ref, ref1, results;
+          results = [];
+          for (n = i = ref = seqStart, ref1 = seqEnd; (ref <= ref1 ? i <= ref1 : i >= ref1); n = ref <= ref1 ? ++i : --i) {
+            results.push(getPatch(n));
+          }
+          return results;
+        })()) : [];
+        return new PatchSet(ret, this);
+      }
+
+      _incrementPatchLabelCount() {
+        this._setPatchLabelCount(function(count) {
+          return count + 1;
+        });
+      }
+
+      _decrementPatchLabelCount() {
+        this._setPatchLabelCount(function(count) {
+          return count - 1;
+        });
+      }
+
+      // () => Unit
+      _resetPatchLabelCount() {
+        this._setPatchLabelCount(function() {
+          return 0;
+        });
+      }
+
+      // ((Number) => Number) => Unit
+      _setPatchLabelCount(updateCountFunc) {
+        this._patchesWithLabels = updateCountFunc(this._patchesWithLabels);
+        this._updater.updated(this)("patchesWithLabels");
+      }
+
+      _setUnbreededLinksDirected() {
+        this.breedManager.setUnbreededLinksDirected();
+        this._updater.updated(this)("unbreededLinksAreDirected");
+      }
+
+      _setUnbreededLinksUndirected() {
+        this.breedManager.setUnbreededLinksUndirected();
+        this._updater.updated(this)("unbreededLinksAreDirected");
+      }
+
+      // () => Unit
+      _declarePatchesAllBlack() {
+        if (!this._patchesAllBlack) {
+          this._patchesAllBlack = true;
+          this._updater.updated(this)("patchesAllBlack");
+        }
+      }
+
+      _declarePatchesNotAllBlack() {
+        if (this._patchesAllBlack) {
+          this._patchesAllBlack = false;
+          this._updater.updated(this)("patchesAllBlack");
+        }
+      }
+
+    };
+
+    // type ShapeMap = Object[Shape]
+    World.prototype.id = 0; // Number
+
+    World.prototype.breedManager = void 0; // BreedManager
+
+    World.prototype.linkManager = void 0; // LinkManager
+
+    World.prototype.observer = void 0; // Observer
+
+    World.prototype.rng = void 0; // RNG
+
+    World.prototype.selfManager = void 0; // SelfManager
+
+    World.prototype.ticker = void 0; // Ticker
+
+    World.prototype.topology = void 0; // Topology
+
+    World.prototype.turtleManager = void 0; // TurtleManager
+
+    World.prototype._patches = void 0; // Array[Patch]
+
+    World.prototype._plotManager = void 0; // PlotManager
+
+    World.prototype._updater = void 0; // Updater
+
+    World.prototype._outputClear = void 0; // () => Unit
+
+
+    // Optimization-related variables
+    World.prototype._patchesAllBlack = void 0; // Boolean
+
+    World.prototype._patchesWithLabels = void 0; // Number
+
+    return World;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var NLType, Tasks, apply, dump, find, flip, fold, map, pipeline;
+
+  NLType = require('./core/typechecker');
+
+  Tasks = require('./prim/tasks');
+
+  ({find, map} = require('brazierjs/array'));
+
+  ({apply, flip, pipeline} = require('brazierjs/function'));
+
+  ({fold} = require('brazierjs/maybe'));
+
+  // type ExtensionDumper = { canDump: (Any) => Boolean, dumper: (Any) => String }
+
+  // Needs a name here since it's recursive --JAB (4/16/14)
+  // (Array[ExtensionDumper]) => (Any, Boolean) => String
+  dump = function(extensionDumpers) {
+    var helper;
+    helper = function(x, isReadable = false) {
+      var itemStr, type;
+      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(); // For scientific notation, handles correct casing of the 'E' --JAB (8/28/17)
+      } 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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  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'));
+
+  // Function given a name for the sake of recursion --JAB (7/31/14)
+  // (Any) => String
+  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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Bar, ColorModel, Counter, Down, Line, Pen, PlotPoint, Point, State, StrictMath, Up, countBy, displayModeFromNum, displayModeFromString, displayModeToNum, displayModeToString, filter, forEach, id, isNumber, map, pairs, pipeline;
+
+  StrictMath = require('shim/strictmath');
+
+  ({countBy, filter, forEach, map} = require('brazierjs/array'));
+
+  ({id, pipeline} = require('brazierjs/function'));
+
+  ({pairs} = require('brazierjs/object'));
+
+  ({isNumber} = require('brazierjs/type'));
+
+  ColorModel = require('engine/core/colormodel');
+
+  // data PenMode =
+  Up = {};
+
+  Down = {};
+
+  module.exports.PenMode = {
+    Up,
+    Down,
+    penModeToBool: function(penDown) {
+      if (penDown === Up) {
+        return false;
+      } else {
+        return true;
+      }
+    }
+  };
+
+  // data DisplayMode =
+  Line = {};
+
+  Bar = {};
+
+  Point = {};
+
+  // (Number) => DisplayMode
+  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}\``);
+    }
+  };
+
+  // (DisplayMode) => Number
+  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}`);
+    }
+  };
+
+  // (String) => DisplayMode
+  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}\``);
+    }
+  };
+
+  // (DisplayMode) => String
+  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, Bar, Point, displayModeFromNum, displayModeFromString, displayModeToNum, displayModeToString};
+
+  PlotPoint = class PlotPoint {
+    // (Number, Number, PenMode, Number) => PlotPoint
+    constructor(x1, y1, penMode, color1) {
+      this.x = x1;
+      this.y = y1;
+      this.penMode = penMode;
+      this.color = color1;
+    }
+
+  };
+
+  Counter = class Counter {
+    // Who's at first?  Me, ya punk!  --JAB (10/15/14)
+    // I don't even know what that means....  --JAB (12/10/17)
+    // (Number, Boolean) => Counter
+    constructor(_count = 0, _atFirst = true) {
+      this._count = _count;
+      this._atFirst = _atFirst;
+    }
+
+    // (Number) => Number
+    next(interval) {
+      if (this._atFirst) {
+        this._atFirst = false;
+        return 0;
+      } else {
+        return this._count += interval;
+      }
+    }
+
+  };
+
+  module.exports.State = State = (function() {
+    class State {
+
+      // (Number, Number, DisplayMode, PenMode, Boolean) => State
+      constructor(color1 = 0, interval1 = 1, displayMode = Line, mode1 = Down) {
+        this.color = color1;
+        this.interval = interval1;
+        this.displayMode = displayMode;
+        this.mode = mode1;
+        this.resetCounter();
+      }
+
+      // () => State
+      clone() {
+        return new State(this.color, this.interval, this.displayMode, this.mode);
+      }
+
+      // (Number) => Unit
+      leapCounterTo(x) {
+        this._counter = new Counter(x, false);
+      }
+
+      // () => Number
+      getPenX() {
+        return this._counter._count;
+      }
+
+      // () => Number
+      nextX() {
+        return this._counter.next(this.interval);
+      }
+
+      // () => State
+      partiallyReset() {
+        return new State(this.color, this.interval, this.displayMode, Down);
+      }
+
+      // () => Unit
+      resetCounter() {
+        this._counter = new Counter();
+      }
+
+    };
+
+    State.prototype._counter = void 0; // Counter
+
+    return State;
+
+  }).call(this);
+
+  module.exports.Pen = Pen = (function() {
+    class Pen {
+
+      // (String, (Pen) => PenOps, Boolean, State, () => (Unit|Stop), () => (Unit|Stop)) => Pen
+      constructor(name, genOps, isTemp = false, _defaultState = new State(), _setupThis = (function() {}), _updateThis = (function() {})) {
+        this.name = name;
+        this.isTemp = isTemp;
+        this._defaultState = _defaultState;
+        this._setupThis = _setupThis;
+        this._updateThis = _updateThis;
+        this._ops = genOps(this);
+        this.reset();
+      }
+
+      // (Number) => Unit
+      addValue(y) {
+        this._addPoint(this._state.nextX(), y);
+      }
+
+      // (Number, Number) => Unit
+      addXY(x, y) {
+        this._addPoint(x, y);
+        this._state.leapCounterTo(x);
+      }
+
+      // () => (Number, Number, Number, Number)
+      bounds() {
+        return this._bounds;
+      }
+
+      // (Array[Number], Number, Number) => Unit
+      drawHistogramFrom(ys, xMin, xMax) {
+        var determineBucket, interval, isValid, plotBucket;
+        this.reset(true);
+        interval = this.getInterval();
+        isValid = (x) => {
+          return ((xMin / interval) <= x && x <= (xMax / interval));
+        };
+        determineBucket = function(x) {
+          return StrictMath.floor((x / interval) * (1 + 3.2e-15)); // See 'Histogram.scala' in Headless for explanation --JAB (10/21/15)
+        };
+        plotBucket = (([bucketNum, count]) => {
+          this.addXY(Number(bucketNum) * interval, count);
+        });
+        pipeline(filter(isNumber), map(determineBucket), filter(isValid), countBy(id), pairs, forEach(plotBucket))(ys);
+      }
+
+      // () => Number
+      getColor() {
+        return this._state.color;
+      }
+
+      // () => PenMode
+      getPenMode() {
+        return this._state.mode;
+      }
+
+      // () => DisplayMode
+      getDisplayMode() {
+        return this._state.displayMode;
+      }
+
+      // () => Number
+      getInterval() {
+        return this._state.interval;
+      }
+
+      // () => Number
+      getPenX() {
+        return this._state.getPenX();
+      }
+
+      // () => Array[PlotPoint]
+      getPoints() {
+        return this._points;
+      }
+
+      // (ExportedPen) => Unit
+      importState({
+          color: penColor,
+          interval,
+          mode,
+          isPenDown,
+          points,
+          x: penX
+        }) {
+        var xs, ys;
+        points.forEach(({
+            color,
+            isPenDown: isPointVisible,
+            x,
+            y
+          }) => {
+          this._points.push(new PlotPoint(x, y, (isPointVisible ? Down : Up), color));
+          this._ops.addPoint(x, y);
+        });
+        xs = this._points.map(function(p) {
+          return p.x;
+        });
+        ys = this._points.map(function(p) {
+          return p.y;
+        });
+        this._bounds = [Math.min(...xs), Math.max(...xs), Math.min(...ys), Math.max(...ys)];
+        if (isPenDown) {
+          this.lower();
+        } else {
+          this.raise();
+        }
+        this.setColor(penColor);
+        this.setInterval(interval);
+        this._state.leapCounterTo(penX);
+        this.updateDisplayMode(displayModeFromString(mode));
+      }
+
+      // () => Unit
+      lower() {
+        this._state.mode = Down;
+      }
+
+      // () => Unit
+      raise() {
+        this._state.mode = Up;
+      }
+
+      // (Boolean) => Unit
+      reset(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);
+      }
+
+      // (Number|RGB) => Unit
+      setColor(color) {
+        var trueColor;
+        trueColor = isNumber(color) ? color : ColorModel.nearestColorNumberOfRGB(...color);
+        this._state.color = trueColor;
+        this._ops.updateColor(trueColor);
+      }
+
+      // P.S. I find it _hilarious_ that this can take '0' and negative numbers --JAB (9/22/14)
+      // (Number) => Unit
+      setInterval(interval) {
+        this._state.interval = interval;
+      }
+
+      // () => Unit
+      setup() {
+        this._setupThis();
+      }
+
+      // () => Unit
+      update() {
+        this._updateThis();
+      }
+
+      // (DisplayMode) => Unit
+      updateDisplayMode(newMode) {
+        this._state.displayMode = newMode;
+        this._ops.updateMode(newMode);
+      }
+
+      // (Number, Number) => Unit
+      _addPoint(x, y) {
+        this._points.push(new PlotPoint(x, y, this._state.mode, this._state.color));
+        this._updateBounds(x, y);
+        this._ops.addPoint(x, y);
+      }
+
+      // (Number, Number) => Unit
+      _updateBounds(x, y) {
+        var maxX, maxY, minX, minY;
+        this._bounds = this._bounds != null ? ([minX, maxX, minY, maxY] = this._bounds, [Math.min(minX, x), Math.max(maxX, x), Math.min(minY, y), Math.max(maxY, y)]) : [x, x, y, y];
+      }
+
+    };
+
+    Pen.prototype._bounds = void 0; // (Number, Number, Number, Number)
+
+    Pen.prototype._ops = void 0; // PenOps
+
+    Pen.prototype._points = void 0; // Array[PlotPoint]
+
+    Pen.prototype._state = void 0; // State
+
+    return Pen;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var PlotManager, displayModeFromNum, filter, flatMapMaybe, flip, fold, forEach, isNumber, map, mapMaybe, maybe, pipeline, toObject, values, zip;
+
+  ({
+    DisplayMode: {displayModeFromNum}
+  } = require('./pen'));
+
+  ({filter, forEach, map, toObject, zip} = require('brazierjs/array'));
+
+  ({flip, pipeline} = require('brazierjs/function'));
+
+  ({
+    flatMap: flatMapMaybe,
+    fold,
+    map: mapMaybe,
+    maybe
+  } = require('brazierjs/maybe'));
+
+  ({values} = require('brazierjs/object'));
+
+  ({isNumber} = require('brazierjs/type'));
+
+  module.exports = PlotManager = (function() {
+    class PlotManager {
+
+      // (Array[Plot]) => PlotManager
+      constructor(plots) {
+        var toName;
+        // () => Unit
+        this.setupPlots = this.setupPlots.bind(this);
+        // () => Unit
+        this.updatePlots = this.updatePlots.bind(this);
+        toName = function(p) {
+          return p.name.toUpperCase();
+        };
+        this._currentPlotMaybe = maybe(plots[plots.length - 1]);
+        this._plotMap = pipeline(map(toName), flip(zip)(plots), toObject)(plots);
+      }
+
+      // () => Unit
+      clearAllPlots() {
+        this._forAllPlots(function(plot) {
+          return plot.clear();
+        });
+      }
+
+      // () => Unit
+      clearPlot() {
+        this._withPlot(function(plot) {
+          return plot.clear();
+        });
+      }
+
+      // (String) => Unit
+      createTemporaryPen(name) {
+        this._withPlot(function(plot) {
+          return plot.createTemporaryPen(name);
+        });
+      }
+
+      // () => Unit
+      disableAutoplotting() {
+        this._withPlot(function(plot) {
+          return plot.disableAutoplotting();
+        });
+      }
+
+      // (Array[Any]) => Unit
+      drawHistogramFrom(list) {
+        this._withPlot(function(plot) {
+          var numbers;
+          numbers = filter(isNumber)(list);
+          return plot.drawHistogramFrom(numbers);
+        });
+      }
+
+      // () => Unit
+      enableAutoplotting() {
+        this._withPlot(function(plot) {
+          return plot.enableAutoplotting();
+        });
+      }
+
+      // () => Maybe[Plot]
+      getCurrentPlotMaybe() {
+        return this._currentPlotMaybe;
+      }
+
+      // () => String
+      getPlotName() {
+        return this._withPlot(function(plot) {
+          return plot.name;
+        });
+      }
+
+      // () => Array[Plot]
+      getPlots() {
+        return values(this._plotMap);
+      }
+
+      // () => Number
+      getPlotXMax() {
+        return this._withPlot(function(plot) {
+          return plot.xMax;
+        });
+      }
+
+      // () => Number
+      getPlotXMin() {
+        return this._withPlot(function(plot) {
+          return plot.xMin;
+        });
+      }
+
+      // () => Number
+      getPlotYMax() {
+        return this._withPlot(function(plot) {
+          return plot.yMax;
+        });
+      }
+
+      // () => Number
+      getPlotYMin() {
+        return this._withPlot(function(plot) {
+          return plot.yMin;
+        });
+      }
+
+      // (String) => Boolean
+      hasPenWithName(name) {
+        return this._withPlot(function(plot) {
+          return plot.hasPenWithName(name);
+        });
+      }
+
+      // (ExportedPlotManager) => Unit
+      importState({currentPlotNameOrNull, plots}) {
+        plots.forEach((plot) => {
+          var ref;
+          return (ref = this._plotMap[plot.name.toUpperCase()]) != null ? ref.importState(plot) : void 0;
+        });
+        this._currentPlotMaybe = flatMapMaybe((name) => {
+          return maybe(this._plotMap[name.toUpperCase()]);
+        })(maybe(currentPlotNameOrNull));
+      }
+
+      // () => Boolean
+      isAutoplotting() {
+        return this._withPlot(function(plot) {
+          return plot.isAutoplotting;
+        });
+      }
+
+      // () => Unit
+      lowerPen() {
+        this._withPlot(function(plot) {
+          return plot.lowerPen();
+        });
+      }
+
+      plotPoint(x, y) {
+        this._withPlot(function(plot) {
+          return plot.plotPoint(x, y);
+        });
+      }
+
+      // (Number) => Unit
+      plotValue(value) {
+        this._withPlot(function(plot) {
+          return plot.plotValue(value);
+        });
+      }
+
+      // () => Unit
+      raisePen() {
+        this._withPlot(function(plot) {
+          return plot.raisePen();
+        });
+      }
+
+      // () => Unit
+      resetPen() {
+        this._withPlot(function(plot) {
+          return plot.resetPen();
+        });
+      }
+
+      // (String) => Unit
+      setCurrentPen(name) {
+        this._withPlot(function(plot) {
+          return plot.setCurrentPen(name);
+        });
+      }
+
+      // (String) => Unit
+      setCurrentPlot(name) {
+        var plot;
+        plot = this._plotMap[name.toUpperCase()];
+        if (plot != null) {
+          this._currentPlotMaybe = maybe(plot);
+        } else {
+          throw new Error(`no such plot: "${name}"`);
+        }
+      }
+
+      // (Number) => Unit
+      setHistogramBarCount(num) {
+        if (num > 0) {
+          this._withPlot(function(plot) {
+            return plot.setHistogramBarCount(num);
+          });
+        } else {
+          throw new Error(`You cannot make a histogram with ${num} bars.`);
+        }
+      }
+
+      // (Number) => Unit
+      setPenColor(color) {
+        this._withPlot(function(plot) {
+          return plot.setPenColor(color);
+        });
+      }
+
+      // (Number) => Unit
+      setPenInterval(color) {
+        this._withPlot(function(plot) {
+          return plot.setPenInterval(color);
+        });
+      }
+
+      // (Number) => Unit
+      setPenMode(num) {
+        this._withPlot(function(plot) {
+          return plot.updateDisplayMode(displayModeFromNum(num));
+        });
+      }
+
+      setupPlots() {
+        this._forAllPlots(function(plot) {
+          return plot.setup();
+        });
+      }
+
+      // (Number, Number) => Unit
+      setXRange(min, max) {
+        this._withPlot(function(plot) {
+          return plot.setXRange(min, max);
+        });
+      }
+
+      // (Number, Number) => Unit
+      setYRange(min, max) {
+        this._withPlot(function(plot) {
+          return plot.setYRange(min, max);
+        });
+      }
+
+      updatePlots() {
+        this._forAllPlots(function(plot) {
+          return plot.update();
+        });
+      }
+
+      // [T] @ (String, String) => (() => T) => T
+      withTemporaryContext(plotName, penName) {
+        return (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;
+        };
+      }
+
+      // ((Plot) => Unit) => Unit
+      _forAllPlots(f) {
+        pipeline(values, forEach(f))(this._plotMap);
+      }
+
+      // [T] @ ((Plot) => T) => T
+      _withPlot(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);
+      }
+
+    };
+
+    PlotManager.prototype._currentPlotMaybe = void 0; // Maybe[Plot]
+
+    PlotManager.prototype._plotMap = void 0; // Object[String, Plot]
+
+    return PlotManager;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ColorModel, PenOps, PlottingOps;
+
+  ColorModel = require('../core/colormodel');
+
+  PenOps = (function() {
+    class PenOps {
+      constructor(plottingOps, pen) {
+        this.addPoint = plottingOps.addPoint(pen);
+        this.reset = plottingOps.resetPen(pen);
+        this.updateMode = plottingOps.updatePenMode(pen);
+        this.updateColor = plottingOps.updatePenColor(pen);
+      }
+
+    };
+
+    PenOps.prototype.addPoint = void 0; // (Number, Number) => Unit
+
+    PenOps.prototype.reset = void 0; // () => Unit
+
+    PenOps.prototype.updateMode = void 0; // (Pen.Mode) => Unit
+
+    PenOps.prototype.updateColor = void 0; // (NLColor) => Unit
+
+    return PenOps;
+
+  }).call(this);
+
+  module.exports = PlottingOps = class PlottingOps {
+    // ((Number, Number, Number, Number) => Unit, (Plot) => Unit, (Pen) => Unit, (Pen) => () => Unit, (Pen) => (Number, Number) => Unit, (Pen) => (Pen.DisplayMode) => Unit, (Pen) => (NLColor) => Unit) => PlotOps
+    constructor(resize, reset, registerPen, resetPen, addPoint, updatePenMode, updatePenColor) {
+      // (Pen) => PenOps
+      this.makePenOps = this.makePenOps.bind(this);
+      this.resize = resize;
+      this.reset = reset;
+      this.registerPen = registerPen;
+      this.resetPen = resetPen;
+      this.addPoint = addPoint;
+      this.updatePenMode = updatePenMode;
+      this.updatePenColor = updatePenColor;
+    }
+
+    // (Number) => String
+    colorToRGBString(color) {
+      var b, g, r;
+      [r, g, b] = ColorModel.colorToRGB(color);
+      return `rgb(${r}, ${g}, ${b})`;
+    }
+
+    makePenOps(pen) {
+      return new PenOps(this, pen);
+    }
+
+  };
+
+}).call(this);
+
+},{"../core/colormodel":"engine/core/colormodel"}],"engine/plot/plot":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Pen, Plot, Stop, StrictMath, filter, flip, fold, forEach, id, isEmpty, isSomething, lookup, map, maxBy, maybe, pipeline, toObject, values, zip;
+
+  ({Pen} = require('./pen'));
+
+  StrictMath = require('shim/strictmath');
+
+  ({filter, forEach, isEmpty, map, maxBy, toObject, zip} = require('brazierjs/array'));
+
+  ({flip, id, pipeline} = require('brazierjs/function'));
+
+  ({fold, isSomething, maybe} = require('brazierjs/maybe'));
+
+  ({lookup, values} = require('brazierjs/object'));
+
+  ({
+    StopInterrupt: Stop
+  } = require('util/exception'));
+
+  module.exports = Plot = (function() {
+    class Plot {
+
+      // (String, Array[Pen], PlotOps, String, String, Boolean, Number, Number, Number, Number, () => (Unit | Stop), () => (Unit | Stop)) => Plot
+      constructor(name1, pens = [], _ops, xLabel, yLabel, isLegendEnabled = true, isAutoplotting = true, xMin = 0, xMax = 10, yMin = 0, yMax = 10, _setupThis = (function() {}), _updateThis = (function() {})) {
+        var toName;
+        this.name = name1;
+        this._ops = _ops;
+        this.xLabel = xLabel;
+        this.yLabel = yLabel;
+        this.isLegendEnabled = isLegendEnabled;
+        this.isAutoplotting = isAutoplotting;
+        this.xMin = xMin;
+        this.xMax = xMax;
+        this.yMin = yMin;
+        this.yMax = yMax;
+        this._setupThis = _setupThis;
+        this._updateThis = _updateThis;
+        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();
+      }
+
+      // () => Unit
+      clear() {
+        var deletePen, pens, resetPen;
+        [this.xMin, this.xMax, this.yMin, this.yMax] = this._originalBounds;
+        this._ops.reset(this);
+        this._resize();
+        pens = this.getPens();
+        deletePen = ((x) => {
+          delete this._penMap[x.name.toUpperCase()];
+        });
+        resetPen = ((pen) => {
+          pen.reset();
+          this._ops.registerPen(pen);
+        });
+        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]);
+        }
+      }
+
+      // (String) => Unit
+      createTemporaryPen(name) {
+        this._currentPenMaybe = maybe(this._createAndReturnTemporaryPen(name));
+      }
+
+      // () => Unit
+      disableAutoplotting() {
+        this.isAutoplotting = false;
+      }
+
+      // (Array[Number]) => Unit
+      drawHistogramFrom(list) {
+        this._withPen((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}.`);
+          }
+        });
+      }
+
+      // () => Unit
+      enableAutoplotting() {
+        this.isAutoplotting = true;
+      }
+
+      // () => Maybe[Pen]
+      getCurrentPenMaybe() {
+        return this._currentPenMaybe;
+      }
+
+      // () => Array[Pen]
+      getPens() {
+        return values(this._penMap);
+      }
+
+      // (String) => Boolean
+      hasPenWithName(name) {
+        return pipeline(this._getPenMaybeByName.bind(this), isSomething)(name);
+      }
+
+      // (ExportedPlot) => Unit
+      importState({
+          currentPenNameOrNull,
+          isAutoplotting,
+          isLegendOpen: isLegendEnabled,
+          pens,
+          xMax,
+          xMin,
+          yMax,
+          yMin
+        }) {
+        this.isAutoplotting = isAutoplotting;
+        this.isLegendEnabled = isLegendEnabled;
+        this.xMax = xMax;
+        this.xMin = xMin;
+        this.yMax = yMax;
+        this.yMin = yMin;
+        pens.forEach((pen) => {
+          return this._createAndReturnTemporaryPen(pen.name).importState(pen);
+        });
+        this._currentPenMaybe = this._getPenMaybeByName(currentPenNameOrNull);
+        this._resize();
+      }
+
+      // () => Unit
+      lowerPen() {
+        this._withPen(function(pen) {
+          return pen.lower();
+        });
+      }
+
+      // (Number, Number) => Unit
+      plotPoint(x, y) {
+        this._withPen((pen) => {
+          pen.addXY(x, y);
+          return this._verifySize(pen);
+        });
+      }
+
+      // (Number) => Unit
+      plotValue(value) {
+        this._withPen((pen) => {
+          pen.addValue(value);
+          return this._verifySize(pen);
+        });
+      }
+
+      // () => Unit
+      raisePen() {
+        this._withPen(function(pen) {
+          return pen.raise();
+        });
+      }
+
+      // () => Unit
+      resetPen() {
+        this._withPen(function(pen) {
+          return pen.reset();
+        });
+      }
+
+      // (String) => Unit
+      setCurrentPen(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`);
+        }
+      }
+
+      // (Number) => Unit
+      setHistogramBarCount(num) {
+        this._withPen((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.`);
+          }
+        });
+      }
+
+      // (Number|RGB) => Unit
+      setPenColor(color) {
+        this._withPen(function(pen) {
+          return pen.setColor(color);
+        });
+      }
+
+      // (Number) => Unit
+      setPenInterval(num) {
+        this._withPen(function(pen) {
+          return pen.setInterval(num);
+        });
+      }
+
+      // () => Unit
+      setup() {
+        var setupResult;
+        setupResult = this._setupThis();
+        if (!(setupResult instanceof Stop)) {
+          this.getPens().forEach(function(pen) {
+            return pen.setup();
+          });
+        }
+      }
+
+      // (Number, Number) => Unit
+      setXRange(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();
+      }
+
+      // (Number, Number) => Unit
+      setYRange(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();
+      }
+
+      // () => Unit
+      update() {
+        var updateResult;
+        updateResult = this._updateThis();
+        if (!(updateResult instanceof Stop)) {
+          this.getPens().forEach(function(pen) {
+            return pen.update();
+          });
+        }
+      }
+
+      // (DisplayMode) => Unit
+      updateDisplayMode(newMode) {
+        this._withPen(function(pen) {
+          return pen.updateDisplayMode(newMode);
+        });
+      }
+
+      // (String) => (() => Unit) => Unit
+      withTemporaryContext(penName) {
+        return (f) => {
+          var oldPenMaybe;
+          oldPenMaybe = this._currentPenMaybe;
+          this._currentPenMaybe = this._getPenMaybeByName(penName);
+          f();
+          this._currentPenMaybe = oldPenMaybe;
+        };
+      }
+
+      // (String) => Pen
+      _createAndReturnTemporaryPen(name) {
+        var makeNew;
+        makeNew = () => {
+          var pen;
+          pen = new Pen(name, this._ops.makePenOps, true);
+          this._penMap[pen.name.toUpperCase()] = pen;
+          this._ops.registerPen(pen);
+          return pen;
+        };
+        return pipeline(this._getPenMaybeByName.bind(this), fold(makeNew)(id))(name);
+      }
+
+      // (String) => Pen
+      _getPenMaybeByName(name) {
+        return lookup(name.toUpperCase())(this._penMap);
+      }
+
+      // (Number, Number, Number, Number) => Unit
+      _resize() {
+        return this._ops.resize(this.xMin, this.xMax, this.yMin, this.yMax);
+      }
+
+      // Histograms can only change the size of the plot by increasing the maximum Y value
+      // (and only when autoplotting is on). --JAB (2/11/15)
+
+      // (Pen) => Unit
+      _verifyHistogramSize(pen) {
+        var isWithinBounds, penYMax;
+        isWithinBounds = ({x}) => {
+          return x >= this.xMin && x <= this.xMax;
+        };
+        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();
+      }
+
+      // (Pen) => Unit
+      _verifySize(pen) {
+        var bounds, bumpMax, bumpMin, currentBounds, maxXs, maxYs, minXs, minYs, newXMax, newXMin, newYMax, newYMin;
+        if (pen.bounds() != null) {
+          bounds = pen.bounds();
+          currentBounds = [this.xMin, this.xMax, this.yMin, this.yMax];
+          [minXs, maxXs, minYs, maxYs] = zip(bounds)(currentBounds);
+          bumpMin = function([newMin, currentMin], currentMax) {
+            var expandedRange, newValue, range;
+            if (newMin < currentMin) {
+              range = currentMax - newMin;
+              expandedRange = range * 1.2;
+              newValue = currentMax - expandedRange;
+              return StrictMath.floor(newValue);
+            } else {
+              return currentMin;
+            }
+          };
+          bumpMax = function([newMax, currentMax], currentMin) {
+            var expandedRange, newValue, range;
+            if (newMax > currentMax) {
+              range = newMax - currentMin;
+              expandedRange = range * 1.2;
+              newValue = currentMin + expandedRange;
+              return StrictMath.ceil(newValue);
+            } else {
+              return currentMax;
+            }
+          };
+          [newXMin, newXMax, newYMin, newYMax] = [bumpMin(minXs, this.xMax), bumpMax(maxXs, this.xMin), bumpMin(minYs, this.yMax), bumpMax(maxYs, this.yMin)];
+          // If bounds extended, we must resize, regardless of whether or not autoplotting is enabled, because some
+          // libraries force autoscaling, but we only _expand_ the boundaries when autoplotting. --JAB (10/10/14)
+          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();
+          }
+        }
+      }
+
+      // [T] @ ((Pen) => T) => T
+      _withPen(f) {
+        return fold(function() {
+          throw new Error(`Plot '${this.name}' has no pens!`);
+        })(f)(this._currentPenMaybe);
+      }
+
+    };
+
+    Plot.prototype._currentPenMaybe = void 0; // Maybe[Pen]
+
+    Plot.prototype._originalBounds = void 0; // (Number, Number, Number, Number)
+
+    Plot.prototype._penMap = void 0; // Object[String, Pen]
+
+    Plot.prototype.name = void 0; // String
+
+    return Plot;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var EvalPrims, evalCache, globalEval, readFromString, scalaJSEvalCode;
+
+  globalEval = eval;
+
+  readFromString = function(str) {
+    var 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(); // must be sorted as order can vary depending on procedure structure
+    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((vn) => {
+      return procVars[vn];
+    }));
+    if (isRunResult) {
+      return result;
+    } else {
+
+    }
+  };
+
+  module.exports = EvalPrims = class EvalPrims {
+    // (String, Array[Widget], (String) => Any) => EvalConfig
+    constructor(code, widgets, readFromString1 = readFromString) {
+      this.readFromString = readFromString1;
+      this.runCode = function(runString, isRunResult, procVars) {
+        return scalaJSEvalCode(code, widgets, runString, isRunResult, procVars);
+      };
+    }
+
+  };
+
+}).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, 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();
+      }
+    };
+    [v1, v12] = generateVs();
+    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, signU, t, u, x;
+      [e, signU, u, t] = calcVars(b, si, randomGenerator);
+      // Step 12. Hat acceptance
+      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, s, si, ss, t, u, x;
+
+    // Set-up for hat case
+    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 : ([b, si, c] = 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], gdsFromDoubleExponential(b, si, c, s, ss, q0, randomGenerator))))); // CASE A: Acceptance rejection algorithm gs // CASE B: Acceptance complement algorithm gd (gaussian distribution, box muller transformation) // Squeeze acceptance // Step 7. Quotient acceptance // Step 8. Double exponential deviate t
+    return gds / lambda;
+  };
+
+}).call(this);
+
+},{"shim/strictmath":"shim/strictmath"}],"engine/prim/importexportprims":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ImportExportConfig, ImportExportPrims, map, pipeline, rangeUntil;
+
+  ({map} = require('brazier/array'));
+
+  ({pipeline} = require('brazier/function'));
+
+  ({rangeUntil} = require('brazier/number'));
+
+  module.exports.Config = ImportExportConfig = class ImportExportConfig {
+    constructor(exportFile = (function() {
+        return function() {}; // (String) => (String) => Unit
+      }), exportBlob = (function() {
+        return function() {}; // (Blob) => (String) => Unit
+      }), getNlogo = (function() {
+        return ""; // () => String
+      }), getOutput = (function() {
+        return ""; // () => String
+      }), getViewBase64 = (function() {
+        return "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD/AD/6KKKAP//Z"; // () => String
+      }), getViewBlob = (function() {}), importFile1 = (function() { // ((Blob) => Unit) => Unit
+        return function() {}; // (String) => ((String) => Unit) => Unit
+      })) {
+      this.exportFile = exportFile;
+      this.exportBlob = exportBlob;
+      this.getNlogo = getNlogo;
+      this.getOutput = getOutput;
+      this.getViewBase64 = getViewBase64;
+      this.getViewBlob = getViewBlob;
+      this.importFile = importFile1;
+    }
+
+  };
+
+  module.exports.Prims = ImportExportPrims = class ImportExportPrims {
+    // (ImportExportConfig, () => String, () => String, (String) => String, (String) => Unit, (Boolean) => (String) => Unit, (String) => Unit) => ImportExportPrims
+    constructor({
+        exportFile: exportFile,
+        exportBlob: exportBlob,
+        getNlogo: exportNlogoRaw,
+        getOutput: exportOutputRaw,
+        getViewBase64: exportViewRaw,
+        getViewBlob: exportViewBlob,
+        importFile
+      }, exportWorldRaw, exportAllPlotsRaw, exportPlotRaw, importDrawingRaw, importPColorsRaw, importWorldRaw) {
+      this.exportFile = exportFile;
+      this.exportBlob = exportBlob;
+      this.exportNlogoRaw = exportNlogoRaw;
+      this.exportOutputRaw = exportOutputRaw;
+      this.exportViewRaw = exportViewRaw;
+      this.exportViewBlob = exportViewBlob;
+      this.exportWorldRaw = exportWorldRaw;
+      this.exportAllPlotsRaw = exportAllPlotsRaw;
+      this.exportPlotRaw = exportPlotRaw;
+      this.importDrawingRaw = importDrawingRaw;
+      this.importPColorsRaw = importPColorsRaw;
+      this.importWorldRaw = importWorldRaw;
+      this.exportAllPlots = (filename) => {
+        return this.exportFile(this.exportAllPlotsRaw())(filename);
+      };
+      this.exportOutput = (filename) => {
+        return this.exportFile(this.exportOutputRaw())(filename);
+      };
+      this.exportPlot = (plot, filename) => {
+        return this.exportFile(this.exportPlotRaw(plot))(filename);
+      };
+      this.exportView = (filename) => {
+        return this.exportViewBlob((blob) => {
+          return this.exportBlob(blob)(filename);
+        });
+      };
+      this.exportWorld = (filename) => {
+        return this.exportFile(this.exportWorldRaw())(filename);
+      };
+      this.importDrawing = (filename) => {
+        return importFile(filename)(this.importDrawingRaw);
+      };
+      this.importPColors = (filename) => {
+        return importFile(filename)(this.importPColorsRaw(true));
+      };
+      this.importPColorsRGB = (filename) => {
+        return importFile(filename)(this.importPColorsRaw(false));
+      };
+      this.importWorld = (filename) => {
+        return importFile(filename)(this.importWorldRaw);
+      };
+    }
+
+  };
+
+}).call(this);
+
+},{"brazier/array":"brazier/array","brazier/function":"brazier/function","brazier/number":"brazier/number"}],"engine/prim/importpcolors":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ColorModel, NLMath, StrictMath, genCoords, genPColorUpdates, id, lookupNLColor, map, pipeline, tee, toObject;
+
+  ColorModel = require('../core/colormodel');
+
+  NLMath = require('util/nlmath');
+
+  StrictMath = require('shim/strictmath');
+
+  ({map, toObject} = require('brazier/array'));
+
+  ({id, pipeline, tee} = require('brazier/function'));
+
+  // type RGBA = (Number, Number, Number, Number)
+  lookupNLColor = (function() {
+    var cache;
+    cache = {};
+    return function(rgb) {
+      var nlc, value;
+      value = cache[rgb];
+      if (value != null) {
+        return value;
+      } else {
+        nlc = ColorModel.nearestColorNumberOfRGB(...rgb);
+        cache[rgb] = nlc;
+        return nlc;
+      }
+    };
+  })();
+
+  // (Number, Number, Number, Number) => (Number, Number, Object[Number, Number])
+  genCoords = function(patchSize, ratio, worldDim, imageDim) {
+    var dimRatio, endPatch, patchNumToPixel, patchOffset, scaledImageDim, startPatch, startPixels, worldPixelDim;
+    worldPixelDim = patchSize * worldDim;
+    scaledImageDim = imageDim * ratio;
+    patchOffset = (worldPixelDim - scaledImageDim) / patchSize / 2;
+    startPatch = StrictMath.floor(patchOffset);
+    endPatch = worldDim - StrictMath.ceil(patchOffset);
+    dimRatio = imageDim / (endPatch - startPatch);
+    patchNumToPixel = function(patchNum) {
+      return StrictMath.floor((patchNum - startPatch) * dimRatio);
+    };
+    startPixels = pipeline(map(tee(id)(patchNumToPixel)), toObject)((function() {
+      var results = [];
+      for (var j = startPatch; startPatch <= endPatch ? j < endPatch : j > endPatch; startPatch <= endPatch ? j++ : j--){ results.push(j); }
+      return results;
+    }).apply(this));
+    return [startPatch, endPatch, startPixels];
+  };
+
+  // (Topology, Number, Array[RGBA], Number, Number) => Array[{ x, y, color }]
+  genPColorUpdates = function({
+      height: worldHeight,
+      minPxcor,
+      minPycor,
+      width: worldWidth
+    }, patchSize, rgbs, imageWidth, imageHeight) {
+    var maxX, maxY, minX, minY, pixel, ratio, updates, x, xEnd, xStart, xStarts, xcor, y, yEnd, yStart, yStarts, ycor;
+    ratio = NLMath.min(patchSize * worldWidth / imageWidth, patchSize * worldHeight / imageHeight);
+    [xStart, xEnd, xStarts] = genCoords(patchSize, ratio, worldWidth, imageWidth);
+    [yStart, yEnd, yStarts] = genCoords(patchSize, ratio, worldHeight, imageHeight);
+    updates = (function() {
+      var j, ref, ref1, results;
+      results = [];
+      for (xcor = j = ref = xStart, ref1 = xEnd; (ref <= ref1 ? j < ref1 : j > ref1); xcor = ref <= ref1 ? ++j : --j) {
+        results.push((function() {
+          var k, ref2, ref3, ref4, ref5, results1;
+          results1 = [];
+          for (ycor = k = ref2 = yStart, ref3 = yEnd; (ref2 <= ref3 ? k < ref3 : k > ref3); ycor = ref2 <= ref3 ? ++k : --k) {
+            minX = xStarts[xcor];
+            minY = yStarts[ycor];
+            maxX = NLMath.max(minX + 1, (ref4 = xStarts[xcor + 1]) != null ? ref4 : imageWidth);
+            maxY = NLMath.max(minY + 1, (ref5 = yStarts[ycor + 1]) != null ? ref5 : imageHeight);
+            // I just use the color of the center pixel of the bitmap section.
+            // I originally tried averaging the pixels in the bitmap section.  That is
+            // also not what desktop does.  Desktop does this by scaling down and then
+            // scaling back up, using a Java library.  How that library decides which
+            // pixel to keep when shrinking a section, I do not know.  It's not
+            // something simple like averaging or choosing the center pixel.  But I
+            // don't really care to find out what it is.  Averaging would give grays
+            // too often, so I went with center pixel. --JAB (11/19/18)
+            x = StrictMath.floor((minX + maxX) / 2);
+            y = StrictMath.floor((minY + maxY) / 2);
+            pixel = rgbs[x + (y * imageWidth)];
+            results1.push({
+              x: minPxcor + xcor,
+              y: minPycor + ((worldHeight - 1) - ycor),
+              color: pixel
+            });
+          }
+          return results1;
+        })());
+      }
+      return results;
+    })();
+    return [].concat(...updates).filter(function({
+        color: [r, g, b, a]
+      }) {
+      return a !== 0;
+    });
+  };
+
+  // (() => Topology, () => Number, (Number, Number) => Agent, (String) => ImageData) => (Boolean) => (String) => Unit
+  module.exports = function(getTopology, getPatchSize, getPatchAt, base64ToImageData) {
+    return function(isNetLogoColorspace) {
+      return function(base64) {
+        var colorGetter, data, height, ref, rgbas, toArray, updates, width;
+        ({data, height, width} = base64ToImageData(base64));
+        toArray = Array.from != null ? (function(xs) {
+          return Array.from(xs);
+        }) : (function(xs) {
+          return Array.prototype.slice.call(xs);
+        });
+        rgbas = (function() {
+          var results = [];
+          for (var j = 0, ref = data.length / 4; 0 <= ref ? j < ref : j > ref; 0 <= ref ? j++ : j--){ results.push(j); }
+          return results;
+        }).apply(this).map(function(i) {
+          return toArray(data.slice(i * 4, (i * 4) + 4));
+        });
+        updates = genPColorUpdates(getTopology(), getPatchSize(), rgbas, width, height);
+        colorGetter = isNetLogoColorspace ? function(x) {
+          return lookupNLColor(x);
+        } : function(x) {
+          return ColorModel.rgbList(x);
+        };
+        updates.forEach(function({x, y, color}) {
+          return getPatchAt(x, y).setVariable('pcolor', colorGetter(color));
+        });
+      };
+    };
+  };
+
+}).call(this);
+
+},{"../core/colormodel":"engine/core/colormodel","brazier/array":"brazier/array","brazier/function":"brazier/function","shim/strictmath":"shim/strictmath","util/nlmath":"util/nlmath"}],"engine/prim/inspectionprims":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var InspectionConfig, InspectionPrims;
+
+  module.exports.Config = InspectionConfig = class InspectionConfig {
+    // ((Agent) => Unit, (Agent) => Unit, () => Unit) => InspectionConfig
+    constructor(inspect1 = (function() {}), stopInspecting = (function() {}), clearDead = (function() {})) {
+      this.inspect = inspect1;
+      this.stopInspecting = stopInspecting;
+      this.clearDead = clearDead;
+    }
+
+  };
+
+  module.exports.Prims = InspectionPrims = class InspectionPrims {
+    // (InspectionConfig) => InspectionPrims
+    constructor({inspect, stopInspecting, clearDead}) {
+      this.stopInspecting = stopInspecting;
+      this.clearDead = clearDead;
+      this.inspect = function(agent) {
+        if (!agent.isDead()) {
+          return inspect(agent);
+        } else {
+          throw new Error(`That ${agent.getBreedNameSingular()} is dead.`);
+        }
+      };
+    }
+
+  };
+
+}).call(this);
+
+},{}],"engine/prim/layoutmanager":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var LayoutManager, NLMath, NLType, TreeNode, contains, filter, flatMap, fold, foldl, forEach, id, map, maxBy, pipeline, rangeUntil, unique, values, zip;
+
+  NLMath = require('util/nlmath');
+
+  NLType = require('../core/typechecker');
+
+  ({contains, filter, flatMap, foldl, forEach, map, maxBy, unique, zip} = require('brazierjs/array'));
+
+  ({id, pipeline} = require('brazierjs/function'));
+
+  ({fold} = require('brazierjs/maybe'));
+
+  ({rangeUntil} = require('brazierjs/number'));
+
+  ({values} = require('brazierjs/object'));
+
+  TreeNode = (function() {
+    class TreeNode {
+
+      // Turtle -> Number -> TreeNode
+      constructor(_turtle, _depth) {
+        this._turtle = _turtle;
+        this._depth = _depth;
+        this._angle = 0.0;
+        this._children = [];
+      }
+
+      // Turtle -> Unit
+      addChild(child) {
+        this._children.push(child);
+      }
+
+      // Unit -> Number
+      getAngle() {
+        return this._angle;
+      }
+
+      // Unit -> Number
+      getDepth() {
+        return this._depth;
+      }
+
+      // Unit -> Turtle
+      getTurtle() {
+        return this._turtle;
+      }
+
+      getWeight() {
+        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);
+      }
+
+      layoutRadial(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);
+      }
+
+    };
+
+    TreeNode.prototype._angle = void 0; // Number
+
+    TreeNode.prototype._children = void 0; // Array[Turtle]
+
+    TreeNode.prototype._depth = void 0; // Number
+
+    TreeNode.prototype._val = void 0; // Turtle
+
+    return TreeNode;
+
+  }).call(this);
+
+  module.exports = LayoutManager = class LayoutManager {
+    // (World, () => Number) => LayoutManager
+    constructor(_world, _nextDouble) {
+      this._world = _world;
+      this._nextDouble = _nextDouble;
+    }
+
+    // (TurtleSet, Number) => Unit
+    layoutCircle(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);
+      });
+    }
+
+    // (TurtleSet, LinkSet, Number, Number, Number) => Unit
+    layoutSpring(nodeSet, linkSet, spr, len, rep) {
+      var agt, ax, ay, degCounts, nodeCount, tMap;
+      if (!nodeSet.isEmpty()) {
+        [ax, ay, tMap, agt] = this._initialize(nodeSet);
+        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);
+      }
+    }
+
+    // (TurtleSet, LinkSet, Number) => Unit
+    layoutTutte(nodeSet, linkSet, radius) {
+      var anchors, turtleXYTriplets;
+      anchors = pipeline(flatMap(function({end1, end2}) {
+        return [end1, end2];
+      }), unique, filter(function(t) {
+        return !nodeSet.contains(t);
+      }))(linkSet.toArray());
+      this.layoutCircle(anchors, radius);
+      turtleXYTriplets = nodeSet.shuffled().toArray().map((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; // This voodoo magic makes absolutely no sense to me --JAB (11/7/16)
+            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({end1, 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];
+      });
+      turtleXYTriplets.forEach(function([turtle, x, y]) {
+        return turtle.setXY(x, y);
+      });
+    }
+
+    // (TurtleSet, LinkSet, RootAgent) => Unit
+    layoutRadial(nodeSet, linkSet, root) {
+      var adjustPosition, allowedTurtleIDs, lastNode, layerGap, maxDepth, maxPxcor, maxPycor, minPxcor, minPycor, nodeTable, queue, rootNode, rootX, rootY, turtleIsAllowed, visitNeighbors, xDistToEdge, yDistToEdge;
+      ({maxPxcor, maxPycor, minPxcor, minPycor} = this._world.topology);
+      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({end1, end2}) {
+        return [end1, end2];
+      }), foldl(function(acc, {id}) {
+        acc[id] = true;
+        return acc;
+      })({}))(linkSet.toArray()), function({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);
+    }
+
+    // (TurtleSet) => (Array[Number], Array[Number], Object[Number, Number], Array[Turtle])
+    _initialize(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];
+    }
+
+    // (LinkSet, Object[Number, Number], Number) => Array[Number]
+    _calcDegreeCounts(links, idToIndexMap, nodeCount) {
+      var baseCounts;
+      baseCounts = map(function() {
+        return 0;
+      })(rangeUntil(0)(nodeCount));
+      links.forEach(function({
+          end1: t1,
+          end2: t2
+        }) {
+        var f;
+        f = function(turtle) {
+          var index;
+          index = idToIndexMap[turtle.id];
+          if (index != null) {
+            return baseCounts[index]++;
+          }
+        };
+        f(t1);
+        f(t2);
+      });
+      return baseCounts;
+    }
+
+    // WARNING: Mutates `ax` and `ay` --JAB (7/28/14)
+    // (Array[Number], Array[Number], LinkSet, Object[Number, Number], Array[Number], Number, Number) => Unit
+    _updateXYArraysForNeighbors(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({
+          end1: t1,
+          end2: t2
+        }) {
+        var degCount1, degCount2, dist, div, dx, dy, f, newDX, newDY, t1Index, t2Index;
+        [t1Index, degCount1] = indexAndCountOf(t1);
+        [t2Index, degCount2] = indexAndCountOf(t2);
+        dist = t1.distance(t2);
+        // links that are connecting high degree nodes should not
+        // be as springy, to help prevent "jittering" behavior -FD
+        div = NLMath.max((degCount1 + degCount2) / 2.0, 1.0);
+        [dx, dy] = dist === 0 ? [
+          (spr * len) / div,
+          0 // arbitrary x-dir push-off --FD
+        ] : (f = spr * (dist - len) / div, newDX = f * (t2.xcor - t1.xcor) / dist, newDY = f * (t2.ycor - t1.ycor) / dist, [newDX, newDY]);
+        if (t1Index !== -1) {
+          ax[t1Index] += dx;
+          ay[t1Index] += dy;
+        }
+        if (t2Index !== -1) {
+          ax[t2Index] -= dx;
+          ay[t2Index] -= dy;
+        }
+      });
+    }
+
+    // WARNING: Mutates `ax` and `ay` --JAB (7/28/14)
+    // (Array[Number], Array[Number], Array[Turtle], Array[Number], Number, Number) => Unit
+    _updateXYArraysForAll(ax, ay, agents, degCounts, nodeCount, rep) {
+      var ang, dist, div, dx, dy, f, i, j, k, l, newDX, newDY, ref, ref1, ref2, t1, t2;
+      for (i = k = 0, ref = nodeCount; (0 <= ref ? k < ref : k > ref); i = 0 <= ref ? ++k : --k) {
+        t1 = agents[i];
+        for (j = l = ref1 = i + 1, ref2 = nodeCount; (ref1 <= ref2 ? l < ref2 : l > ref2); j = ref1 <= ref2 ? ++l : --l) {
+          t2 = agents[j];
+          div = NLMath.max((degCounts[i] + degCounts[j]) / 2.0, 1.0);
+          [dx, dy] = 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]);
+          ax[i] += dx;
+          ay[i] += dy;
+          ax[j] -= dx;
+          ay[j] -= dy;
+        }
+      }
+    }
+
+    // WARNING: Mutates `ax` and `ay` --JAB (7/28/14)
+    // (Array[Number], Array[Number], Array[Turtle], Number) => Unit
+    _moveTurtles(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;
+      // we need to bump some node a small amount, in case all nodes
+      // are stuck on a single line --FD
+      if (nodeCount > 1) {
+        perturbment = (width + height) / 1.0e10;
+        ax[0] += this._nextDouble() * perturbment - perturbment / 2.0;
+        ay[0] += this._nextDouble() * perturbment - perturbment / 2.0;
+      }
+      // try to choose something that's reasonable perceptually --
+      // for temporal aliasing, don't want to jump too far on any given timestep. --FD
+      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));
+    }
+
+  };
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var LinkPrims;
+
+  module.exports = LinkPrims = (function() {
+    class LinkPrims {
+
+      // (World) => LinkPrims
+      constructor({linkManager, selfManager}) {
+        this._linkManager = linkManager;
+        this._self = selfManager.self;
+      }
+
+      // (Turtle, String) => Link
+      createLinkFrom(otherTurtle, breedName) {
+        return this._linkManager.createDirectedLink(otherTurtle, this._self(), breedName);
+      }
+
+      // (TurtleSet, String) => LinkSet
+      createLinksFrom(otherTurtles, breedName) {
+        return this._linkManager.createReverseDirectedLinks(this._self(), otherTurtles.shuffled(), breedName);
+      }
+
+      // (Turtle, String) => Link
+      createLinkTo(otherTurtle, breedName) {
+        return this._linkManager.createDirectedLink(this._self(), otherTurtle, breedName);
+      }
+
+      // (TurtleSet, String) => LinkSet
+      createLinksTo(otherTurtles, breedName) {
+        return this._linkManager.createDirectedLinks(this._self(), otherTurtles.shuffled(), breedName);
+      }
+
+      // (Turtle, String) => Link
+      createLinkWith(otherTurtle, breedName) {
+        return this._linkManager.createUndirectedLink(this._self(), otherTurtle, breedName);
+      }
+
+      // (TurtleSet, String) => LinkSet
+      createLinksWith(otherTurtles, breedName) {
+        return this._linkManager.createUndirectedLinks(this._self(), otherTurtles.shuffled(), breedName);
+      }
+
+      // (String, Turtle) => Boolean
+      isInLinkNeighbor(breedName, otherTurtle) {
+        return this._self().linkManager.isInLinkNeighbor(breedName, otherTurtle);
+      }
+
+      // (String, Turtle) => Boolean
+      isLinkNeighbor(breedName, otherTurtle) {
+        return this._self().linkManager.isLinkNeighbor(breedName, otherTurtle);
+      }
+
+      // (String, Turtle) => Boolean
+      isOutLinkNeighbor(breedName, otherTurtle) {
+        return this._self().linkManager.isOutLinkNeighbor(breedName, otherTurtle);
+      }
+
+      // (String, Turtle) => Link
+      inLinkFrom(breedName, otherTurtle) {
+        return this._self().linkManager.inLinkFrom(breedName, otherTurtle);
+      }
+
+      // (String, Turtle) => Link
+      linkWith(breedName, otherTurtle) {
+        return this._self().linkManager.linkWith(breedName, otherTurtle);
+      }
+
+      // (String, Turtle) => Link
+      outLinkTo(breedName, otherTurtle) {
+        return this._self().linkManager.outLinkTo(breedName, otherTurtle);
+      }
+
+      // (String) => TurtleSet
+      inLinkNeighbors(breedName) {
+        return this._self().linkManager.inLinkNeighbors(breedName);
+      }
+
+      // (String) => TurtleSet
+      linkNeighbors(breedName) {
+        return this._self().linkManager.linkNeighbors(breedName);
+      }
+
+      // (String) => TurtleSet
+      outLinkNeighbors(breedName) {
+        return this._self().linkManager.outLinkNeighbors(breedName);
+      }
+
+      // (String) => LinkSet
+      myInLinks(breedName) {
+        return this._self().linkManager.myInLinks(breedName);
+      }
+
+      // (String) => LinkSet
+      myLinks(breedName) {
+        return this._self().linkManager.myLinks(breedName);
+      }
+
+      // (String) => LinkSet
+      myOutLinks(breedName) {
+        return this._self().linkManager.myOutLinks(breedName);
+      }
+
+    };
+
+    LinkPrims._linkManager = void 0; // LinkManager
+
+    LinkPrims._self = void 0; // () => Turtle
+
+    return LinkPrims;
+
+  }).call(this);
+
+}).call(this);
+
+},{}],"engine/prim/listprims":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AbstractAgentSet, Comparator, Exception, Link, ListPrims, NLMath, NLType, Patch, StrictMath, Turtle, all, arrayLength, exists, filter, find, findIndex, fold, foldl, id, isEmpty, last, pipeline, sortBy, stableSort, tail;
+
+  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');
+
+  ({
+    all,
+    exists,
+    filter,
+    find,
+    findIndex,
+    foldl,
+    isEmpty,
+    length: arrayLength,
+    last,
+    sortBy,
+    tail
+  } = require('brazierjs/array'));
+
+  ({id, pipeline} = require('brazierjs/function'));
+
+  ({fold} = require('brazierjs/maybe'));
+
+  module.exports = ListPrims = class ListPrims {
+    // type ListOrSet[T] = AbstractAgentSet|Array[T]
+
+    // (() => String, Hasher, (Any, Any) => Boolean, (Number) => Number) => ListPrims
+    constructor(_dump, _hasher, _equality, _nextInt) {
+      this._dump = _dump;
+      this._hasher = _hasher;
+      this._equality = _equality;
+      this._nextInt = _nextInt;
+    }
+
+    // [T] @ (Array[T]|String) => Array[T]|String
+    butFirst(xs) {
+      return tail(xs);
+    }
+
+    // [T] @ (Array[T]|String) => Array[T]|String
+    butLast(xs) {
+      return xs.slice(0, xs.length - 1);
+    }
+
+    // [T] @ (String|Array[T]) => Boolean
+    empty(xs) {
+      return isEmpty(xs);
+    }
+
+    // [Item] @ (Array[Item]) => Item
+    first(xs) {
+      return xs[0];
+    }
+
+    // [Item] @ (Item, Array[Item]) => Array[Item]
+    fput(x, xs) {
+      return [x].concat(xs);
+    }
+
+    // [Item] @ (Number, Array[Item]|String, Item) => Array[Item]|String
+    insertItem(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)}`);
+        }
+      }
+    }
+
+    // [Item] @ (Number, Array[Item]) => Item
+    item(n, xs) {
+      return xs[NLMath.floor(n)];
+    }
+
+    // [Item] @ (Array[Item]) => Item
+    last(xs) {
+      return last(xs);
+    }
+
+    // [T] @ (Array[T]) => Number
+    length(xs) {
+      return arrayLength(xs);
+    }
+
+    // [T] @ (T*) => Array[T]
+    list(...xs) {
+      return xs;
+    }
+
+    // [Item] @ (Item, Array[Item]) => Array[Item]
+    lput(x, xs) {
+      var result;
+      result = xs.slice(0);
+      result.push(x);
+      return result;
+    }
+
+    // (Array[Number]) => Number
+    max(xs) {
+      return Math.max(...xs);
+    }
+
+    // (Array[Number]) => Number
+    mean(xs) {
+      return this.sum(xs) / xs.length;
+    }
+
+    // (Array[Number]) => Number
+    median(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)}.`);
+      }
+    }
+
+    // [Item, Container <: (Array[Item]|String|AbstractAgentSet[Item])] @ (Item, Container) => Boolean
+    member(x, xs) {
+      var type;
+      type = NLType(xs);
+      if (type.isList()) {
+        return exists((y) => {
+          return this._equality(x, y);
+        })(xs);
+      } else if (type.isString()) {
+        return xs.indexOf(x) !== -1; // agentset
+      } else {
+        return xs.exists(function(a) {
+          return x === a;
+        });
+      }
+    }
+
+    // (Array[Number]) => Number
+    min(xs) {
+      return Math.min(...xs);
+    }
+
+    // [T] @ (Array[T]) => Array[T]
+    modes(items) {
+      var calculateModes, genItemCountPairs, ref, result;
+      genItemCountPairs = (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(([item, c]) => {
+            return this._equality(item, x);
+          })(pairs);
+          fold(pushNewPair)(incrementCount)(pairMaybe);
+        }
+        return pairs;
+      };
+      calculateModes = function(xsToCounts) {
+        var f;
+        f = function([bests, bestCount], [item, count]) {
+          if (count > bestCount) {
+            return [[item], count];
+          } else if (count < bestCount) {
+            return [bests, bestCount];
+          } else {
+            return [bests.concat([item]), bestCount];
+          }
+        };
+        return foldl(f)([[], 0])(xsToCounts);
+      };
+      ref = calculateModes(genItemCountPairs(items)), result = ref[0], ref[1];
+      return result;
+    }
+
+    // [Item] @ (Number, ListOrSet[Item]) => ListOrSet[Item]
+    nOf(n, agentsOrList) {
+      var items, newItems, type;
+      type = NLType(agentsOrList);
+      if (type.isList()) {
+        if (agentsOrList.length < n) {
+          throw new Error(`Requested ${n} random items from a list of length ${agentsOrList.length}.`);
+        }
+        return this._nOfArray(n, agentsOrList);
+      } else if (type.isAgentSet()) {
+        items = agentsOrList.iterator().toArray();
+        if (items.length < n) {
+          throw new Error(`Requested ${n} random agents from a set of only ${items.length} agents.`);
+        }
+        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.`);
+      }
+    }
+
+    // [Item] @ (Number, ListOrSet[Item]) => ListOrSet[Item]
+    upToNOf(n, agentsOrList) {
+      var items, newItems, type;
+      type = NLType(agentsOrList);
+      if (type.isList()) {
+        if (n >= agentsOrList.length) {
+          return agentsOrList;
+        } else {
+          return this._nOfArray(n, agentsOrList);
+        }
+      } else if (type.isAgentSet()) {
+        if (n >= agentsOrList.size()) {
+          return agentsOrList;
+        } else {
+          items = agentsOrList.iterator().toArray();
+          newItems = this._nOfArray(n, items);
+          return agentsOrList.copyWithNewAgents(newItems);
+        }
+      } else {
+        throw new Error(`UP-TO-N-OF expected input to be a list or agentset but got ${this._dump(agentsOrList)} instead.`);
+      }
+    }
+
+    // [Item] @ (ListOrSet[Item]) => Item
+    oneOf(agentsOrList) {
+      var type;
+      type = NLType(agentsOrList);
+      if (type.isAgentSet()) {
+        return agentsOrList.randomAgent();
+      } else {
+        if (agentsOrList.length === 0) {
+          return Nobody;
+        } else {
+          return agentsOrList[this._nextInt(agentsOrList.length)];
+        }
+      }
+    }
+
+    // [Item, Container <: (Array[Item]|String)] @ (Item, Container) => Number|Boolean
+    position(x, xs) {
+      var index, type;
+      type = NLType(xs);
+      index = type.isList() ? pipeline(findIndex((y) => {
+        return this._equality(x, y);
+      }), fold(function() {
+        return -1;
+      })(id))(xs) : xs.indexOf(x);
+      if (index !== -1) {
+        return index;
+      } else {
+        return false;
+      }
+    }
+
+    // [Item, Container <: (Array[Item]|String)] @ (Item, Container) => Container
+    remove(x, xs) {
+      var type;
+      type = NLType(xs);
+      if (type.isList()) {
+        return filter((y) => {
+          return !this._equality(x, y);
+        })(xs);
+      } else {
+        return xs.replace(new RegExp(x, "g"), "");
+      }
+    }
+
+    // [T] @ (Array[T]) => Array[T]
+    removeDuplicates(xs) {
+      var f, out, ref;
+      if (xs.length < 2) {
+        return xs;
+      } else {
+        f = ([accArr, accSet], x) => {
+          var hash, values;
+          hash = this._hasher(x);
+          values = accSet[hash];
+          if (values != null) {
+            if (!exists((y) => {
+              return this._equality(x, y);
+            })(values)) {
+              accArr.push(x);
+              values.push(x);
+            }
+          } else {
+            accArr.push(x);
+            accSet[hash] = [x];
+          }
+          return [accArr, accSet];
+        };
+        ref = xs.reduce(f, [[], {}]), out = ref[0], ref[1];
+        return out;
+      }
+    }
+
+    // [Item, Container <: (Array[Item]|String)] @ (Number, Container) => Container
+    removeItem(n, xs) {
+      var post, pre, temp, type;
+      type = NLType(xs);
+      if (type.isList()) {
+        temp = xs.slice(0);
+        temp.splice(n, 1); // Cryptic, but effective --JAB (5/26/14)
+        return temp;
+      } else {
+        pre = xs.slice(0, n);
+        post = xs.slice(n + 1);
+        return pre + post;
+      }
+    }
+
+    // [Item, Container <: (Array[Item]|String)] @ (Number, Container, Item) => Container
+    replaceItem(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;
+      }
+    }
+
+    // [T] @ (Array[T]|String) => Array[T]|String
+    reverse(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");
+      }
+    }
+
+    // [T] @ (Array[Array[T]|T]) => Array[T]
+    sentence(...xs) {
+      var f;
+      f = function(acc, x) {
+        if (NLType(x).isList()) {
+          return acc.concat(x);
+        } else {
+          acc.push(x);
+          return acc;
+        }
+      };
+      return foldl(f)([])(xs);
+    }
+
+    // [T] @ (Array[T]) => Array[T]
+    shuffle(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;
+    }
+
+    // [T] @ (ListOrSet[T]) => ListOrSet[T]
+    sort(xs) {
+      var Agent, None, Number, String, f, filteredItems, filteredType, type;
+      type = NLType(xs);
+      if (type.isList()) {
+        // data SortableType =
+        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, arr] = acc;
+          switch (xType) {
+            case Number: // Numbers trump all
+              switch (type) {
+                case Number:
+                  return [Number, arr.concat([x])];
+                default:
+                  return [Number, [x]];
+              }
+              break;
+            case String: // Strings trump agents
+              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;
+          }
+        };
+        [filteredType, filteredItems] = foldl(f)([None, []])(xs);
+        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");
+      }
+    }
+
+    // ((T, T) => Boolean, ListOrSet[T]) => Array[T]
+    sortBy(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);
+    }
+
+    // (Array[Any]) => Number
+    standardDeviation(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)}`);
+      }
+    }
+
+    // [T] @ (Array[T], Number, Number) => Array[T]
+    sublist(xs, n1, n2) {
+      return xs.slice(n1, n2);
+    }
+
+    // (String, Number, Number) => String
+    substring(xs, n1, n2) {
+      return xs.substr(n1, n2 - n1);
+    }
+
+    // (Array[Number]) => Number
+    sum(xs) {
+      return xs.reduce((function(a, b) {
+        return a + b;
+      }), 0);
+    }
+
+    // [T] @ (Array[T]) => Number
+    variance(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);
+    }
+
+    // Prodding at this code is like poking a beehive with a stick... --JAB (7/30/14)
+    // [Item] @ (Number, Array[Item]) => Array[Item]
+    _nOfArray(n, items) {
+      var i, index1, index2, j, newIndex1, newIndex2, 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);
+          [newIndex1, newIndex2] = index2 >= index1 ? [index1, index2 + 1] : [index2, index1];
+          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;
+      }
+    }
+
+  };
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var MouseConfig, MousePrims;
+
+  module.exports.Config = MouseConfig = class MouseConfig {
+    // (() => Boolean, () => Boolean, () => Number, () => Number)
+    constructor(peekIsDown = (function() {
+        return false;
+      }), peekIsInside = (function() {
+        return false;
+      }), peekX = (function() {
+        return 0;
+      }), peekY = (function() {
+        return 0;
+      })) {
+      this.peekIsDown = peekIsDown;
+      this.peekIsInside = peekIsInside;
+      this.peekX = peekX;
+      this.peekY = peekY;
+    }
+
+  };
+
+  module.exports.Prims = MousePrims = class MousePrims {
+    // (MouseConfig) => MousePrims
+    constructor({
+        peekIsDown: isDown,
+        peekIsInside: isInside,
+        peekX: getX,
+        peekY: getY
+      }) {
+      this.isDown = isDown;
+      this.isInside = isInside;
+      this.getX = getX;
+      this.getY = getY;
+    }
+
+  };
+
+}).call(this);
+
+},{}],"engine/prim/outputprims":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var OutputConfig, OutputPrims, genPrintBundle;
+
+  genPrintBundle = require('./printbundle');
+
+  // type PrintFunc = (String) => Unit
+  module.exports.Config = OutputConfig = class OutputConfig {
+    // (() => Unit, PrintFunc) => OutputConfig
+    constructor(clear1 = (function() {}), write1 = (function() {})) {
+      this.clear = clear1;
+      this.write = write1;
+    }
+
+  };
+
+  module.exports.Prims = OutputPrims = (function() {
+    class OutputPrims {
+
+      // (OutputConfig, (String) => Unit, () => Unit, (Any, Boolean) => String) => OutputPrims
+      constructor({clear, write}, writeToStore, clearStored, dump) {
+        var writePlus;
+        this.clear = (function() {
+          clearStored();
+          return clear();
+        });
+        writePlus = (function(x) {
+          writeToStore(x);
+          return write(x);
+        });
+        ({print: this.print, show: this.show, type: this.type, write: this.write} = genPrintBundle(writePlus, dump));
+      }
+
+    };
+
+    OutputPrims.prototype.clear = void 0; // () => Unit
+
+    OutputPrims.prototype.print = void 0; // PrintFunc
+
+    OutputPrims.prototype.show = void 0; // (() => Number|Agent) => PrintFunc
+
+    OutputPrims.prototype.type = void 0; // PrintFunc
+
+    OutputPrims.prototype.write = void 0; // PrintFunc
+
+    return OutputPrims;
+
+  }).call(this);
+
+}).call(this);
+
+},{"./printbundle":"engine/prim/printbundle"}],"engine/prim/prims":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  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;
+
+  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');
+
+  ({flatMap, flattenDeep, isEmpty, map} = require('brazierjs/array'));
+
+  ({MersenneTwisterFast} = require('shim/engine-scala'));
+
+  ({
+    EQUALS: EQ,
+    GREATER_THAN: GT,
+    LESS_THAN: LT
+  } = require('util/comparator'));
+
+  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;
+  };
+
+  // (Number, Number, Number) => Array[Number]
+  range = function(lowerBound, upperBound, stepSize) {
+    var j, ref, ref1, ref2, results, x;
+    results = [];
+    for (x = j = ref = lowerBound, ref1 = upperBound, ref2 = stepSize; ref2 !== 0 && (ref2 > 0 ? j < ref1 : j > ref1); x = j += ref2) {
+      results.push(x);
+    }
+    return results;
+  };
+
+  module.exports = Prims = (function() {
+    class Prims {
+
+      // (Dump, Hasher, RNG, World) => Prims
+      constructor(_dumper, _hasher, _rng, _world, _evalPrims) {
+        this._dumper = _dumper;
+        this._hasher = _hasher;
+        this._rng = _rng;
+        this._world = _world;
+        this._evalPrims = _evalPrims;
+        this._everyMap = {};
+      }
+
+      // () => Nothing
+      boom() {
+        throw new Error("boom!");
+      }
+
+      // (String, Patch|Turtle|PatchSet|TurtleSet) => TurtleSet
+      breedOn(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);
+      }
+
+      // (Number, Number) => Number
+      div(a, b) {
+        if (b !== 0) {
+          return a / b;
+        } else {
+          throw new Error("Division by zero.");
+        }
+      }
+
+      booleanCheck(b, primName) {
+        var type;
+        type = NLType(b);
+        if (type.isBoolean()) {
+          return b;
+        } else {
+          throw new Error(`${primName} expected input to be a TRUE/FALSE but got the ${type.niceName()} ${this._dumper(b)} instead.`);
+        }
+      }
+
+      ifElseValueBooleanCheck(b) {
+        return this.booleanCheck(b, "IFELSE-VALUE");
+      }
+
+      ifElseValueMissingElse() {
+        throw new Error("IFELSE-VALUE found no true conditions and no else branch. If you don't wish to error when no conditions are true, add a final else branch.");
+      }
+
+      // (Any, Any) => Boolean
+      equality(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((elem, i) => {
+            return this.equality(elem, b[i]);
+          })) || (typeA.isAgentSet() && typeB.isAgentSet() && a.size() === b.size() && Object.getPrototypeOf(a) === Object.getPrototypeOf(b) && (subsumes = (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;
+          }, subsumes(a.sort(), b.sort())));
+        } else {
+          throw new Error("Checking equality on undefined is an invalid condition");
+        }
+      }
+
+      // () => String
+      dateAndTime() {
+        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}`;
+      }
+
+      // (String, Agent|Number, Number) => Boolean
+      isThrottleTimeElapsed(commandID, agent, timeLimit) {
+        var entry;
+        entry = this._everyMap[this._genEveryKey(commandID, agent)];
+        return (entry == null) || entry.elapsed() >= timeLimit;
+      }
+
+      // (String, Agent|Number) => Unit
+      resetThrottleTimerFor(commandID, agent) {
+        return this._everyMap[this._genEveryKey(commandID, agent)] = new Timer();
+      }
+
+      // (Any, Any) => Boolean
+      gt(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`");
+        }
+      }
+
+      // (Any, Any) => Boolean
+      gte(a, b) {
+        return this.gt(a, b) || this.equality(a, b);
+      }
+
+      // [T <: (Array[Link]|Link|AbstractAgentSet[Link])] @ (T*) => LinkSet
+      linkSet(...inputs) {
+        return this._createAgentSet(inputs, Link, LinkSet);
+      }
+
+      // (Any, Any) => Boolean
+      lt(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`");
+        }
+      }
+
+      // (Any, Any) => Boolean
+      lte(a, b) {
+        return this.lt(a, b) || this.equality(a, b);
+      }
+
+      // Some complications here....
+
+      // First, this will not yield the same results as the equivalent primitive in JVM NetLogo.
+      // The Java documentation for `System.nanoTime` explains that its nanotimes are set against an arbitrary origin time
+      // that isn't even guaranteed to be consistent across JVM instances.  Naturally, JS engines can't reproduce it,
+      // either.
+
+      // Secondly, the resolution here is inconsistent.  In any modern browser, we can use the "High Resolution Time" API
+      // but, right now, it's only a "Recommendation" and not a "Standard", so it is actually not implemented yet in
+      // Nashorn.  Because of that, we use `performance.now()` if we can, but fall back to `Date.now()` if High Performance
+      // Time is not available.
+
+      // Thirdly, though, even when we have `performance.now()`, the time resolution is only guaranteed to be microsecond
+      // precision.  When we use `Date.now()`, the time resolution is in milliseconds.  Regardless of the resolution,
+      // though, the value is converted to nanoseconds.
+
+      // So, in summary, the resolution of this implementation of `__nano-time` is inconsistent and not actually
+      // nanoseconds, and is not consistent with the times provided in JVM NetLogo, but the Java Docs for
+      // `System.nanoTime()` state that it is only to be used for measuring elapsed time, and that should still be
+      // reasonably possible with the prim behavior supplied here. --JAB (1/11/16)
+
+      // () => Number
+      nanoTime() {
+        var nanos, ref;
+        nanos = ((ref = typeof performance !== "undefined" && performance !== null ? typeof performance.now === "function" ? performance.now() : void 0 : void 0) != null ? ref : Date.now()) * 1e6;
+        return StrictMath.floor(nanos);
+      }
+
+      // [T <: (Array[Patch]|Patch|AbstractAgentSet[Patch])] @ (T*) => PatchSet
+      patchSet(...inputs) {
+        return this._createAgentSet(inputs, Patch, PatchSet);
+      }
+
+      // (Number) => Number
+      random(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);
+        }
+      }
+
+      // (Number, Number) => Number
+      randomCoord(min, max) {
+        return min - 0.5 + this._rng.nextDouble() * (max - min + 1);
+      }
+
+      // (Number) => Number
+      randomFloat(n) {
+        return n * this._rng.nextDouble();
+      }
+
+      // (Number, Number) => Number
+      randomNormal(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.");
+        }
+      }
+
+      // (Number) => Number
+      randomExponential(mean) {
+        return NLMath.validateNumber(-mean * StrictMath.log(this._rng.nextDouble()));
+      }
+
+      // (Number, Number) => Number
+      randomPatchCoord(min, max) {
+        return min + this._rng.nextInt(max - min + 1);
+      }
+
+      // (Number) => Number
+      randomPoisson(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;
+      }
+
+      // (Number, Number) => Number
+      randomGamma(alpha, lambda) {
+        if (alpha <= 0 || lambda <= 0) {
+          throw new Error("Both Inputs to RANDOM-GAMMA must be positive.");
+        }
+        return Gamma(this._rng, alpha, lambda);
+      }
+
+      // (Number) => Array[Number]
+      rangeUnary(upperBound) {
+        return range(0, upperBound, 1);
+      }
+
+      // (Number, Number) => Array[Number]
+      rangeBinary(lowerBound, upperBound) {
+        return range(lowerBound, upperBound, 1);
+      }
+
+      // (Number, Number, Number) => Array[Number]
+      rangeTernary(lowerBound, upperBound, stepSize) {
+        if (stepSize !== 0) {
+          return range(lowerBound, upperBound, stepSize);
+        } else {
+          throw new Error("The step-size for range must be non-zero.");
+        }
+      }
+
+      // (String) => Any
+      readFromString(str) {
+        return this._evalPrims.readFromString(str);
+      }
+
+      // (Boolean, JsObject, Array[Any]) => Unit|Any
+      runCode(isRunResult, procVars, ...args) {
+        var f;
+        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(...args.slice(1));
+        }
+      }
+
+      // (Any) => Unit
+      stdout(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}`);
+        }
+      }
+
+      // [T <: (Array[Turtle]|Turtle|AbstractAgentSet[Turtle])] @ (T*) => TurtleSet
+      turtleSet(...inputs) {
+        return this._createAgentSet(inputs, Turtle, TurtleSet);
+      }
+
+      // (PatchSet|TurtleSet|Patch|Turtle) => TurtleSet
+      turtlesOn(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();
+        }
+      }
+
+      // (Number) => Unit
+      wait(seconds) {
+        var startTime;
+        startTime = this.nanoTime();
+        while (((this.nanoTime() - startTime) / 1e9) < seconds) {}
+      }
+
+      // (String) => Unit
+      uphill(varName) {
+        this._moveUpOrDownhill(-2e308, greaterThan, getNeighbors, varName);
+      }
+
+      // (String) => Unit
+      uphill4(varName) {
+        this._moveUpOrDownhill(-2e308, greaterThan, getNeighbors4, varName);
+      }
+
+      // (String) => Unit
+      downhill(varName) {
+        this._moveUpOrDownhill(2e308, lessThan, getNeighbors, varName);
+      }
+
+      // (String) => Unit
+      downhill4(varName) {
+        this._moveUpOrDownhill(2e308, lessThan, getNeighbors4, varName);
+      }
+
+      // (Number, (Number, Number) => Boolean, (Patch) => PatchSet, String) => Unit
+      _moveUpOrDownhill(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);
+        }
+      }
+
+      // (String, Agent|Number) => String
+      _genEveryKey(commandID, agent) {
+        var agentID;
+        agentID = agent === 0 ? "observer" : this._dumper(agent);
+        return `${commandID}__${agentID}`;
+      }
+
+      // [T <: Agent, U <: AbstractAgentSet[T], V <: (Array[T]|T|AbstractAgentSet[T])] @ (Array[V], T.Class, U.Class) => U
+      _createAgentSet(inputs, tClass, outClass) {
+        var addT, buildFromAgentSet, buildItems, flattened, hashIt, hashSet, head, makeOutie, result;
+        flattened = flattenDeep(inputs);
+        makeOutie = (agents) => {
+          return new outClass(agents, this._world);
+        };
+        if (isEmpty(flattened)) {
+          return makeOutie([]);
+        } else if (flattened.length === 1) {
+          head = flattened[0];
+          if (head instanceof outClass) {
+            return makeOutie(head.toArray());
+          } 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 = (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;
+          };
+          buildItems(flattened);
+          return makeOutie(result);
+        }
+      }
+
+    };
+
+    // type ListOrSet[T] = Array[T]|AbstractAgentSet[T]
+    Prims.prototype._everyMap = void 0; // Object[String, Timer]
+
+    // () => Number
+    Prims.prototype.generateNewSeed = (function() {
+      var helper, lastSeed;
+      lastSeed = 0; // Rather than adding a global, scope this permanent state here --JAB (9/25/15)
+      helper = function() {
+        var seed;
+        seed = (new MersenneTwisterFast).nextInt();
+        if (seed !== lastSeed) {
+          lastSeed = seed;
+          return seed;
+        } else {
+          return helper();
+        }
+      };
+      return helper;
+    })();
+
+    return Prims;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var PrintBundle, pipeline;
+
+  ({pipeline} = require('brazierjs/function'));
+
+  // type PrintFunc = (String) => Unit
+
+  // (PrintFunc, (Any, Boolean) => String) => PrintBundle
+  PrintBundle = class PrintBundle {
+    // (PrintFunc, PrintFunc, PrintFunc, (() => Number|Agent) => PrintFunc) => PrintBundle
+    constructor(print1, type1, write1, show1) {
+      this.print = print1;
+      this.type = type1;
+      this.write = write1;
+      this.show = show1;
+    }
+
+  };
+
+  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(...fs) {
+      return pipeline(...fs, 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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var PrintConfig, PrintPrims, genPrintBundle;
+
+  genPrintBundle = require('./printbundle');
+
+  // type PrintFunc = (String) => Unit
+  module.exports.Config = PrintConfig = class PrintConfig {
+    // (PrintFunc) => PrintConfig
+    constructor(write1 = (function() {})) {
+      this.write = write1;
+    }
+
+  };
+
+  module.exports.Prims = PrintPrims = (function() {
+    class PrintPrims {
+
+      // (PrintConfig, (Any, Boolean) => String) => PrintPrims
+      constructor({write}, dump) {
+        ({print: this.print, show: this.show, type: this.type, write: this.write} = genPrintBundle(write, dump));
+      }
+
+    };
+
+    PrintPrims.prototype.print = void 0; // PrintFunc
+
+    PrintPrims.prototype.show = void 0; // (() => Number|Agent) => PrintFunc
+
+    PrintPrims.prototype.type = void 0; // PrintFunc
+
+    PrintPrims.prototype.write = void 0; // PrintFunc
+
+    return PrintPrims;
+
+  }).call(this);
+
+}).call(this);
+
+},{"./printbundle":"engine/prim/printbundle"}],"engine/prim/selfprims":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var SelfPrims, TypeSet, linkType, mempty, observerType, patchType, turtleType;
+
+  TypeSet = class TypeSet {
+    // (Boolean, Boolean, Boolean, Boolean) => TypeSet
+    constructor(link1, observer1, patch1, turtle1) {
+      this.link = link1;
+      this.observer = observer1;
+      this.patch = patch1;
+      this.turtle = turtle1;
+    }
+
+    // (TypeSet) => TypeSet
+    mergeWith({link, observer, patch, turtle}) {
+      return new TypeSet(this.link || link, this.observer || observer, this.patch || patch, this.turtle || turtle);
+    }
+
+    // (TypeSet) => TypeSet
+    mappend(ts) {
+      return this.mergeWith(ts);
+    }
+
+  };
+
+  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 = class SelfPrims {
+    // (() => Agent) => Prims
+    constructor(_getSelf) {
+      this._getSelf = _getSelf;
+    }
+
+    // [T] @ (AbstractAgentSet[T]) => AbstractAgentSet[T]
+    other(agentSet) {
+      var self;
+      self = this._getSelf();
+      return agentSet.filter((agent) => {
+        return agent !== self;
+      });
+    }
+
+    // [T] @ (AbstractAgentSet[T]) => Boolean
+    _optimalAnyOther(agentSet) {
+      var self;
+      self = this._getSelf();
+      return agentSet.exists(function(agent) {
+        return agent !== self;
+      });
+    }
+
+    // [T] @ (AbstractAgentSet[T]) => Number
+    _optimalCountOther(agentSet) {
+      var self;
+      self = this._getSelf();
+      return (agentSet.filter(function(agent) {
+        return agent !== self;
+      })).size();
+    }
+
+    // () => Number
+    linkHeading() {
+      return this._getSelfSafe(linkType).getHeading();
+    }
+
+    // () => Number
+    linkLength() {
+      return this._getSelfSafe(linkType).getSize();
+    }
+
+    // (TypeSet) => Agent
+    _getSelfSafe(typeSet) {
+      var agentStr, allowsL, allowsP, allowsT, part1, part2, self, type, typeStr;
+      ({
+        link: allowsL,
+        patch: allowsP,
+        turtle: allowsT
+      } = typeSet);
+      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);
+      }
+    }
+
+    // (NLType) => String
+    _nlTypeToString(nlType) {
+      if (nlType.isTurtle()) {
+        return "a turtle";
+      } else if (nlType.isPatch()) {
+        return "a patch";
+      } else if (nlType.isLink()) {
+        return "a link";
+      } else {
+        return "";
+      }
+    }
+
+    // (TypeSet) => String
+    _typeSetToAgentString(typeSet) {
+      if (typeSet.turtle) {
+        return "a turtle";
+      } else if (typeSet.patch) {
+        return "a patch";
+      } else if (typeSet.link) {
+        return "a link";
+      } else {
+        return "";
+      }
+    }
+
+  };
+
+}).call(this);
+
+},{}],"engine/prim/tasks":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Exception, all, length, map, pipeline, rangeUntil;
+
+  ({all, length, map} = require('brazierjs/array'));
+
+  ({pipeline} = require('brazierjs/function'));
+
+  ({rangeUntil} = require('brazierjs/number'));
+
+  Exception = require('util/exception');
+
+  module.exports = {
+    // (Function, String) => Function
+    commandTask: function(fn, body) {
+      fn.isReporter = false;
+      fn.nlogoBody = body;
+      return fn;
+    },
+    // (Function, String) => Function
+    reporterTask: function(fn, body) {
+      fn.isReporter = true;
+      fn.nlogoBody = body;
+      return fn;
+    },
+    // [Result] @ (Product => Result, Array[Any]) => Result
+    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}`);
+      }
+    },
+    // [Result] @ (Product => Result, Array[Any]*) => Array[Result]
+    map: function(fn, ...lists) {
+      return this._processLists(fn, lists, "map");
+    },
+    // [Result] @ (Number, (Number) => Result) => Array[Result]
+    nValues: function(n, fn) {
+      return map(fn)(rangeUntil(0)(n));
+    },
+    // [Result] @ (Product => Result, Array[Any]*) => Any
+    forEach: function(fn, ...lists) {
+      return this._processLists(fn, lists, "foreach");
+    },
+    // [Result] @ (Product => Result, Array[Array[Any]], String) => Array[Result]
+    _processLists: function(fn, lists, primName) {
+      var head, i, j, newArr, numLists, ref, 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, ref = head.length; (0 <= ref ? j < ref : j > ref); i = 0 <= ref ? ++j : --j) {
+          results.push(fn(...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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var HaltInterrupt, UserDialogConfig, UserDialogPrims;
+
+  ({HaltInterrupt} = require('util/exception'));
+
+  module.exports.Config = UserDialogConfig = class UserDialogConfig {
+    // ((String) => Unit, (String) => Boolean, (String) => Boolean, (String) => String) => UserDialogConfig
+    constructor(notify = (function() {}), confirm = (function() {
+        return true;
+      }), yesOrNo = (function() {
+        return true;
+      }), input = (function() {
+        return "dummy implementation";
+      })) {
+      this.notify = notify;
+      this.confirm = confirm;
+      this.yesOrNo = yesOrNo;
+      this.input = input;
+    }
+
+  };
+
+  module.exports.Prims = UserDialogPrims = class UserDialogPrims {
+    // (UserDialogConfig) => UserDialogPrims
+    constructor({
+        confirm: _confirm,
+        input: _input,
+        yesOrNo: _yesOrNo
+      }) {
+      this._confirm = _confirm;
+      this._input = _input;
+      this._yesOrNo = _yesOrNo;
+    }
+
+    // (String) => Unit
+    confirm(msg) {
+      if (!this._confirm(msg)) {
+        throw new HaltInterrupt;
+      }
+    }
+
+    // (String) => String
+    input(msg) {
+      var ref;
+      return (function() {
+        if ((ref = this._input(msg)) != null) {
+          return ref;
+        } else {
+          throw new HaltInterrupt;
+        }
+      }).call(this);
+    }
+
+    // (String) => Boolean
+    yesOrNo(msg) {
+      var ref;
+      return (function() {
+        if ((ref = this._yesOrNo(msg)) != null) {
+          return ref;
+        } else {
+          throw new HaltInterrupt;
+        }
+      }).call(this);
+    }
+
+  };
+
+}).call(this);
+
+},{"util/exception":"util/exception"}],"engine/updater":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Link, Observer, Patch, Turtle, Update, Updater, World, ignored, perspectiveToNum;
+
+  Link = require('./core/link');
+
+  Patch = require('./core/patch');
+
+  Turtle = require('./core/turtle');
+
+  World = require('./core/world');
+
+  ({
+    Perspective: {perspectiveToNum},
+    Observer
+  } = require('./core/observer'));
+
+  ignored = [
+    "",
+    function() {
+      return "";
+    }
+  ];
+
+  // type ID           = String
+  // type Key          = String
+  // type Getter       = (Any) -> Any
+  // type UpdateEntry  = Object[Key, Getter]
+  // type UpdateSet    = Object[ID, UpdateEntry]
+  // type _US          = UpdateSet
+  // type DrawingEvent = Object[String, Any]
+
+  // (_US, _US, _US, _US, _US, Array[DrawingEvent]) => Update
+  Update = class Update {
+    constructor(turtles = {}, patches = {}, links = {}, observer1 = {}, world1 = {}, drawingEvents = []) {
+      this.turtles = turtles;
+      this.patches = patches;
+      this.links = links;
+      this.observer = observer1;
+      this.world = world1;
+      this.drawingEvents = drawingEvents;
+    }
+
+  };
+
+  module.exports = Updater = (function() {
+    class Updater {
+
+      // ((Any) => String) => Updater
+      constructor(_dump) {
+        // (Number) => Unit
+        this.registerDeadLink = this.registerDeadLink.bind(this);
+        // (Number) => Unit
+        this.registerDeadTurtle = this.registerDeadTurtle.bind(this);
+        // (Number, Number, Number, Number, RGB, Number, String) => Unit
+        this.registerPenTrail = this.registerPenTrail.bind(this);
+        // (Number, Number, Number, Number, RGB, String, String) => Unit
+        this.registerTurtleStamp = this.registerTurtleStamp.bind(this);
+        // (Number, Number, Number, Number, Number, Number, Number, RGB, String, Number, Boolean, Number, Boolean, String) => Unit
+        this.registerLinkStamp = this.registerLinkStamp.bind(this);
+        // (Updatable) => (EngineKey*) => Unit
+        this.updated = this.updated.bind(this);
+        this._dump = _dump;
+        this._flushUpdates();
+      }
+
+      // () => Unit
+      clearDrawing() {
+        this._reportDrawingEvent({
+          type: "clear-drawing"
+        });
+      }
+
+      // (String) => Unit
+      importDrawing(imageBase64) {
+        this._reportDrawingEvent({
+          type: "import-drawing",
+          imageBase64
+        });
+      }
+
+      // () => Array[Update]
+      collectUpdates() {
+        var temp;
+        temp = this._updates;
+        this._flushUpdates();
+        return temp;
+      }
+
+      // () => Boolean
+      drawingWasJustCleared() {
+        return this._drawingWasJustCleared;
+      }
+
+      // () => Boolean
+      hasUpdates() {
+        return this._hasUpdates;
+      }
+
+      registerDeadLink(id) {
+        this._update("links", id, {
+          WHO: -1
+        });
+      }
+
+      registerDeadTurtle(id) {
+        this._update("turtles", id, {
+          WHO: -1
+        });
+      }
+
+      registerPenTrail(fromX, fromY, toX, toY, rgb, size, penMode) {
+        this._reportDrawingEvent({
+          type: "line",
+          fromX,
+          fromY,
+          toX,
+          toY,
+          rgb,
+          size,
+          penMode
+        });
+      }
+
+      registerTurtleStamp(x, y, size, heading, color, shapeName, stampMode) {
+        this._reportDrawingEvent({
+          type: "stamp-image",
+          agentType: "turtle",
+          stamp: {x, y, size, heading, color, shapeName, stampMode}
+        });
+      }
+
+      registerLinkStamp(x1, y1, x2, y2, midpointX, midpointY, heading, color, shapeName, thickness, isDirected, size, isHidden, stampMode) {
+        this._reportDrawingEvent({
+          type: "stamp-image",
+          agentType: "link",
+          stamp: {
+            x1,
+            y1,
+            x2,
+            y2,
+            midpointX,
+            midpointY,
+            heading,
+            color,
+            shapeName,
+            thickness,
+            'directed?': isDirected,
+            size,
+            'hidden?': isHidden,
+            stampMode
+          }
+        });
+      }
+
+      // (UpdateEntry, Number) => Unit
+      registerWorldState(state, id = 0) {
+        this._update("world", id, state);
+      }
+
+      // () => Unit
+      rescaleDrawing() {
+        this._reportDrawingEvent({
+          type: "rescale-drawing"
+        });
+      }
+
+      updated(obj) {
+        return (...vars) => {
+          var entry, entryUpdate, getter, i, len, mapping, objMap, ref, update, v, varName;
+          this._hasUpdates = true;
+          update = this._updates[0];
+          [entry, objMap] = (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);
+          entryUpdate = (ref = entry[obj.id]) != null ? ref : {};
+          // Receiving updates for a turtle that's about to die means the turtle was
+          // reborn, so we revive it in the update - BH 1/13/2014
+          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, getter] = mapping;
+                entryUpdate[varName] = getter(obj);
+                entry[obj.id] = entryUpdate;
+              }
+            } else {
+              throw new Error(`Unknown ${obj.constructor.name} variable for update: ${v}`);
+            }
+          }
+        };
+      }
+
+      // (Turtle) => Object[EngineKey, (Key, Getter)]
+      _turtleMap() {
+        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",
+            (turtle) => {
+              return this._dump(turtle._label);
+            }
+          ],
+          '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;
+            }
+          ]
+        };
+      }
+
+      // (Patch) => Object[EngineKey, (Key, Getter)]
+      _patchMap() {
+        return {
+          id: [
+            "WHO",
+            function(patch) {
+              return patch.id;
+            }
+          ],
+          pcolor: [
+            "PCOLOR",
+            function(patch) {
+              return patch._pcolor;
+            }
+          ],
+          plabel: [
+            "PLABEL",
+            (patch) => {
+              return this._dump(patch._plabel);
+            }
+          ],
+          'plabel-color': [
+            "PLABEL-COLOR",
+            function(patch) {
+              return patch._plabelcolor;
+            }
+          ],
+          pxcor: [
+            "PXCOR",
+            function(patch) {
+              return patch.pxcor;
+            }
+          ],
+          pycor: [
+            "PYCOR",
+            function(patch) {
+              return patch.pycor;
+            }
+          ]
+        };
+      }
+
+      // (Link) => Object[EngineKey, (Key, Getter)]
+      _linkMap() {
+        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 _;
+              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",
+            (link) => {
+              return this._dump(link._label);
+            }
+          ],
+          '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
+        };
+      }
+
+      // (World) => Object[EngineKey, (Key, Getter)]
+      _worldMap() {
+        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;
+            }
+          ]
+        };
+      }
+
+      // (Observer) => Object[EngineKey, (Key, Getter)]
+      _observerMap() {
+        return {
+          id: [
+            "WHO",
+            function(observer) {
+              return observer.id;
+            }
+          ],
+          perspective: [
+            "perspective",
+            function(observer) {
+              return perspectiveToNum(observer.getPerspective());
+            }
+          ],
+          targetAgent: [
+            "targetAgent",
+            function(observer) {
+              return observer._getTargetAgentUpdate();
+            }
+          ]
+        };
+      }
+
+      // (String, Number, UpdateEntry) => Unit
+      _update(agentType, id, newAgent) {
+        this._hasUpdates = true;
+        this._updates[0][agentType][id] = newAgent;
+      }
+
+      // (Object[String, Any]) => Unit
+      _reportDrawingEvent(event) {
+        this._hasUpdates = true;
+        this._drawingWasJustCleared = event.type === "clear-drawing";
+        this._updates[0].drawingEvents.push(event);
+      }
+
+      // () => Unit
+      _flushUpdates() {
+        this._hasUpdates = false;
+        this._updates = [new Update()];
+      }
+
+    };
+
+    // type Updatable   = Turtle|Patch|Link|World|Observer
+    // type EngineKey   = String
+    Updater.prototype._drawingWasJustCleared = true; // Boolean
+
+    Updater.prototype._hasUpdates = void 0; // Boolean
+
+    Updater.prototype._updates = void 0; // Array[Update]
+
+    return Updater;
+
+  }).call(this);
+
+}).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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var BreedManager, Dump, EvalPrims, Hasher, ImportExportConfig, ImportExportPrims, InspectionConfig, InspectionPrims, LayoutManager, LinkPrims, ListPrims, Meta, MiniWorkspace, MouseConfig, MousePrims, NLType, None, OutputConfig, OutputPrims, PlotManager, Prims, PrintConfig, PrintPrims, RNG, SelfManager, SelfPrims, Timer, Updater, UserDialogConfig, UserDialogPrims, World, WorldConfig, csvToWorldState, fold, id, importPColors, lookup, toObject, values;
+
+  WorldConfig = class WorldConfig {
+    // (() => Unit) => WorldConfig
+    constructor(resizeWorld = (function() {})) {
+      this.resizeWorld = resizeWorld;
+    }
+
+  };
+
+  BreedManager = require('./core/breedmanager');
+
+  Dump = require('./dump');
+
+  EvalPrims = require('./prim/evalprims');
+
+  Hasher = require('./hasher');
+
+  importPColors = require('./prim/importpcolors');
+
+  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'));
+
+  ({fold, None} = require('brazier/maybe'));
+
+  ({id} = require('brazier/function'));
+
+  ({lookup, values} = require('brazier/object'));
+
+  ({
+    Config: InspectionConfig,
+    Prims: InspectionPrims
+  } = require('./prim/inspectionprims'));
+
+  ({
+    Config: ImportExportConfig,
+    Prims: ImportExportPrims
+  } = require('./prim/importexportprims'));
+
+  ({
+    Config: MouseConfig,
+    Prims: MousePrims
+  } = require('./prim/mouseprims'));
+
+  ({
+    Config: OutputConfig,
+    Prims: OutputPrims
+  } = require('./prim/outputprims'));
+
+  ({
+    Config: PrintConfig,
+    Prims: PrintPrims
+  } = require('./prim/printprims'));
+
+  ({
+    Config: UserDialogConfig,
+    Prims: UserDialogPrims
+  } = require('./prim/userdialogprims'));
+
+  Meta = require('meta');
+
+  MiniWorkspace = class MiniWorkspace {
+    // (SelfManager, Updater, BreedManager, RNG, PlotManager) => MiniWorkspace
+    constructor(selfManager1, updater1, breedManager1, rng1, plotManager1) {
+      this.selfManager = selfManager1;
+      this.updater = updater1;
+      this.breedManager = breedManager1;
+      this.rng = rng1;
+      this.plotManager = plotManager1;
+    }
+
+  };
+
+  module.exports = function(modelConfig) {
+    return function(breedObjs) {
+      return function(turtlesOwns, linksOwns) {
+        return function(code) {
+          return function(widgets) {
+            return function(extensionDumpers) {
+              return function() { // World args; see constructor for `World` --JAB (4/17/14)
+                var asyncDialogConfig, base64ToImageData, breedManager, dialogConfig, dump, evalPrims, importExportConfig, importExportPrims, importPatchColors, importWorldFromCSV, inspectionConfig, inspectionPrims, ioConfig, layoutManager, linkPrims, listPrims, mouseConfig, mousePrims, outputConfig, outputPrims, outputStore, plotManager, plots, prims, printConfig, printPrims, ref, ref1, ref10, ref11, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9, rng, selfManager, selfPrims, timer, typechecker, updater, userDialogPrims, world, worldArgs, worldConfig;
+                worldArgs = arguments; // If you want `Workspace` to take more parameters--parameters not related to `World`--just keep returning new functions
+                asyncDialogConfig = (ref = modelConfig != null ? modelConfig.asyncDialog : void 0) != null ? ref : {
+                  getChoice: (function() {
+                    return function() {
+                      return None;
+                    };
+                  }),
+                  getText: (function() {
+                    return function() {
+                      return None;
+                    };
+                  }),
+                  getYesOrNo: (function() {
+                    return function() {
+                      return None;
+                    };
+                  }),
+                  showMessage: (function() {
+                    return function() {
+                      return None;
+                    };
+                  })
+                };
+                base64ToImageData = (ref1 = modelConfig != null ? modelConfig.base64ToImageData : void 0) != null ? ref1 : (function() {
+                  throw new Error("Sorry, no image data converter was provided.");
+                });
+                dialogConfig = (ref2 = modelConfig != null ? modelConfig.dialog : void 0) != null ? ref2 : new UserDialogConfig;
+                importExportConfig = (ref3 = modelConfig != null ? modelConfig.importExport : void 0) != null ? ref3 : new ImportExportConfig;
+                inspectionConfig = (ref4 = modelConfig != null ? modelConfig.inspection : void 0) != null ? ref4 : new InspectionConfig;
+                ioConfig = (ref5 = modelConfig != null ? modelConfig.io : void 0) != null ? ref5 : {
+                  importFile: (function() {
+                    return function() {};
+                  }),
+                  slurpFileDialogAsync: (function() {}),
+                  slurpURL: (function() {}),
+                  slurpURLAsync: (function() {
+                    return function() {};
+                  })
+                };
+                mouseConfig = (ref6 = modelConfig != null ? modelConfig.mouse : void 0) != null ? ref6 : new MouseConfig;
+                outputConfig = (ref7 = modelConfig != null ? modelConfig.output : void 0) != null ? ref7 : new OutputConfig;
+                plots = (ref8 = modelConfig != null ? modelConfig.plots : void 0) != null ? ref8 : [];
+                printConfig = (ref9 = modelConfig != null ? modelConfig.print : void 0) != null ? ref9 : new PrintConfig;
+                worldConfig = (ref10 = modelConfig != null ? modelConfig.world : void 0) != null ? ref10 : new WorldConfig;
+                Meta.version = (ref11 = modelConfig != null ? modelConfig.version : void 0) != null ? ref11 : 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);
+                // The world is only given `dump` for stupid `atpoints` in `AbstractAgentSet`... --JAB (8/24/17)
+                world = new World(new MiniWorkspace(selfManager, updater, breedManager, rng, plotManager), worldConfig, (function() {
+                  return importExportConfig.getViewBase64();
+                }), (function() {
+                  outputConfig.clear();
+                  return outputStore = "";
+                }), (function() {
+                  return outputStore;
+                }), (function(text) {
+                  return outputStore = text;
+                }), dump, ...worldArgs);
+                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);
+                inspectionPrims = new InspectionPrims(inspectionConfig);
+                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({name, singular}) {
+                    return [name, singular];
+                  });
+                  ptsObject = toObject(breedNamePairs);
+                  stpObject = toObject(breedNamePairs.map(function([p, s]) {
+                    return [s, p];
+                  }));
+                  pluralToSingular = functionify(ptsObject);
+                  singularToPlural = functionify(stpObject);
+                  worldState = csvToWorldState(singularToPlural, pluralToSingular)(csvText);
+                  return world.importState(worldState);
+                };
+                importPatchColors = importPColors((function() {
+                  return world.topology;
+                }), (function() {
+                  return world.patchSize;
+                }), (function(x, y) {
+                  return world.getPatchAt(x, y);
+                }), base64ToImageData);
+                importExportPrims = new ImportExportPrims(importExportConfig, (function() {
+                  return world.exportCSV();
+                }), (function() {
+                  return world.exportAllPlotsCSV();
+                }), (function(plot) {
+                  return world.exportPlotCSV(plot);
+                }), (function(path) {
+                  return world.importDrawing(path);
+                }), importPatchColors, importWorldFromCSV);
+                return {selfManager, breedManager, dump, importExportPrims, inspectionPrims, asyncDialogConfig, ioConfig, layoutManager, linkPrims, listPrims, mousePrims, outputPrims, plotManager, evalPrims, prims, printPrims, rng, selfPrims, timer, typechecker, updater, userDialogPrims, 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/importpcolors":"engine/prim/importpcolors","./prim/inspectionprims":"engine/prim/inspectionprims","./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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var dumpers, extensionPaths;
+
+  extensionPaths = ['codap', 'encode', 'dialog', 'export-the', 'fetch', 'http-req', 'import-a', 'logging', 'mini-csv', 'nlmap', 'send-to'];
+
+  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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  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":15}],"extensions/dialog":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var HaltInterrupt, flip, fold, halt, id, item, pipeline;
+
+  ({HaltInterrupt} = require('util/exception'));
+
+  ({item} = require('brazierjs/array'));
+
+  ({flip, id, pipeline} = require('brazierjs/function'));
+
+  ({fold} = require('brazierjs/maybe'));
+
+  halt = function() {
+    throw new HaltInterrupt;
+  };
+
+  module.exports = {
+    init: function(workspace) {
+      var _noDialogIsOpen, prim, userInput, userMessage, userOneOf, userYesOrNo;
+      // (String, (String) => Unit) => Unit
+      userInput = function(message, callback) {
+        prim(function(config) {
+          return config.getText(message);
+        })(callback);
+      };
+      // (String, () => Unit) => Unit
+      userMessage = function(message, callback) {
+        prim(function(config) {
+          return config.showMessage(message);
+        })(callback);
+      };
+      // (String, Array[Any], () => Unit) => Unit
+      userOneOf = function(message, choices, callback) {
+        var fullCallback;
+        fullCallback = pipeline(flip(item)(choices), fold(function() {
+          throw new Error("Bad choice index");
+        })(id), callback);
+        if (choices.length !== 0) {
+          prim(function(config) {
+            return config.getChoice(message, choices.map(function(x) {
+              return workspace.dump(x);
+            }));
+          })(fullCallback);
+        } else {
+          throw new Error("Extension exception: List is empty.");
+        }
+      };
+      // (String, (Boolean) => Unit) => Unit
+      userYesOrNo = function(message, callback) {
+        prim(function(config) {
+          return config.getYesOrNo(message);
+        })(callback);
+      };
+      _noDialogIsOpen = true;
+      // [T] @ (DialogConfig => (Maybe[T] => Unit) => Unit) => (T => Unit) => Unit
+      prim = function(withConfig) {
+        return function(callback) {
+          if (_noDialogIsOpen) {
+            _noDialogIsOpen = false;
+            withConfig(workspace.asyncDialogConfig)(function(resultMaybe) {
+              _noDialogIsOpen = true;
+              return fold(halt)(callback)(resultMaybe);
+            });
+          }
+        };
+      };
+      return {
+        name: "dialog",
+        prims: {
+          "USER-INPUT": userInput,
+          "USER-MESSAGE": userMessage,
+          "USER-ONE-OF": userOneOf,
+          "USER-YES-OR-NO?": userYesOrNo
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{"brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/maybe":"brazier/maybe","util/exception":"util/exception"}],"extensions/encode":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var all, map, pipeline, rangeUntil;
+
+  ({all, map} = require('brazier/array'));
+
+  ({pipeline} = require('brazier/function'));
+
+  ({rangeUntil} = require('brazier/number'));
+
+  module.exports = {
+    init: function(workspace) {
+      var _reportFromBytes, base64ToBytes, bytesToBase64, bytesToString, stringToBytes;
+      // [T] @ (Array[Number], String) => ((Array[Number]) => T) => T
+      _reportFromBytes = function(bytes, primName) {
+        return function(f) {
+          var isLegit;
+          isLegit = function(x) {
+            return (new workspace.typechecker(x)).isNumber() && (x >= -128) && (x <= 127);
+          };
+          if (all(isLegit)(bytes)) {
+            return f(bytes);
+          } else {
+            throw new Error(`Extension exception: All elements of the list argument to 'encode:${primName}' must be numbers between -128 and 127`);
+          }
+        };
+      };
+      // (String) => Array[Number]
+      base64ToBytes = function(base64) {
+        var str;
+        str = atob(base64);
+        return pipeline(rangeUntil(0), map(function(n) {
+          return str.codePointAt(n);
+        }))(str.length);
+      };
+      // Array[Number] => String
+      bytesToBase64 = function(bytes) {
+        return _reportFromBytes(bytes, "bytes-to-base64")(function(bytes) {
+          return btoa(String.fromCharCode(...bytes));
+        });
+      };
+      // Array[Number] => String
+      bytesToString = function(bytes) {
+        return _reportFromBytes(bytes, "bytes-to-string")(function(bytes) {
+          return String.fromCharCode(...bytes);
+        });
+      };
+      // (String) => Array[Number]
+      stringToBytes = function(str) {
+        return pipeline(rangeUntil(0), map(function(n) {
+          return str.codePointAt(n);
+        }))(str.length);
+      };
+      return {
+        name: "encode",
+        prims: {
+          "BASE64-TO-BYTES": base64ToBytes,
+          "BYTES-TO-BASE64": bytesToBase64,
+          "BYTES-TO-STRING": bytesToString,
+          "STRING-TO-BYTES": stringToBytes
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{"brazier/array":"brazier/array","brazier/function":"brazier/function","brazier/number":"brazier/number"}],"extensions/export-the":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  module.exports = {
+    init: function(workspace) {
+      var exportModel, exportOutput, exportPlot, exportView, exportWorld;
+      // () => String
+      exportModel = function() {
+        return workspace.importExportPrims.exportNlogoRaw();
+      };
+      // () => String
+      exportOutput = function() {
+        return workspace.importExportPrims.exportOutputRaw();
+      };
+      // (String) => String
+      exportPlot = function(plotName) {
+        return workspace.importExportPrims.exportPlotRaw(plotName);
+      };
+      // () => String
+      exportView = function() {
+        return workspace.importExportPrims.exportViewRaw();
+      };
+      // () => String
+      exportWorld = function() {
+        return workspace.importExportPrims.exportWorldRaw();
+      };
+      return {
+        name: "export-the",
+        prims: {
+          "MODEL": exportModel,
+          "OUTPUT": exportOutput,
+          "PLOT": exportPlot,
+          "VIEW": exportView,
+          "WORLD": exportWorld
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{}],"extensions/fetch":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  module.exports = {
+    init: function(workspace) {
+      var fromFileDialog, fromFileDialogSynchronously, fromFilepath, fromFilepathSynchronously, fromURL, fromURLSynchronously;
+      // (String, (String) => Unit) => Unit
+      fromFilepath = function(filepath, callback) {
+        // `TestModels` needs this, and I don't see any sensible way around it --JAB (3/13/19)
+        if (typeof Polyglot !== "undefined" && Polyglot !== null) {
+          workspace.ioConfig.importFile(filepath)(callback);
+        } else {
+          throw new Error("'fetch:file-async' is not supported in NetLogo Web.  Use 'fetch:user-file-async' instead.");
+        }
+      };
+      // (String) => String
+      fromFilepathSynchronously = function(filepath, callback) {
+        throw new Error("'fetch:file' is not supported in NetLogo Web.  Use 'fetch:user-file-async' instead.");
+      };
+      // (String, (String) => Unit) => Unit
+      fromURL = function(url, callback) {
+        workspace.ioConfig.slurpURLAsync(url)(callback);
+      };
+      // (String) => String
+      fromURLSynchronously = function(url) {
+        return workspace.ioConfig.slurpURL(url);
+      };
+      // ((Boolean|String) => Unit) => String
+      fromFileDialog = function(callback) {
+        workspace.ioConfig.slurpFileDialogAsync(callback);
+      };
+      // () => String
+      fromFileDialogSynchronously = function() {
+        throw new Error("'fetch:user-file' is not supported in NetLogo Web.  Use 'fetch:user-file-async' instead.");
+      };
+      return {
+        name: "fetch",
+        prims: {
+          "FILE": fromFilepathSynchronously,
+          "FILE-ASYNC": fromFilepath,
+          "URL": fromURLSynchronously,
+          "URL-ASYNC": fromURL,
+          "USER-FILE": fromFileDialogSynchronously,
+          "USER-FILE-ASYNC": fromFileDialog
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{}],"extensions/http-req":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  module.exports = {
+    dumper: void 0,
+    init: function(workspace) {
+      var get, post, requestor;
+      // (String) => [String, String, String]
+      get = function(url) {
+        var ref, req;
+        req = requestor("GET", url);
+        return [req.status, req.statusText, (ref = req.responseText) != null ? ref : ''];
+      };
+      // (String, String, String) => [String, String, String]
+      post = function(url, message, contentType) {
+        var req;
+        req = requestor("POST", url, message, contentType != null ? contentType : "text/plain");
+        return [req.status, req.statusText, req.responseText];
+      };
+      // (String, String, String, String) => XMLHttpRequest
+      requestor = function(reqType, url, message, contentType) {
+        var ct, req;
+        req = new XMLHttpRequest();
+        // Setting the async option to `false` is deprecated and "bad" as far as HTML/JS is
+        // concerned.  But this is NetLogo and NetLogo model code doesn't have a concept of
+        // async execution, so this is the best we can do.  As long as it isn't used on a
+        // per-tick basis or in a loop, it should be okay.  -JMB August 2017
+        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/import-a":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  module.exports = {
+    init: function(workspace) {
+      var importDrawing, importPColors, importPColorsRGB, importWorld;
+      // (String) => Unit
+      importDrawing = function(base64) {
+        workspace.importExportPrims.importDrawingRaw(base64);
+      };
+      // (String) => Unit
+      importPColors = function(base64) {
+        workspace.importExportPrims.importPColorsRaw(true)(base64);
+      };
+      // (String) => Unit
+      importPColorsRGB = function(base64) {
+        workspace.importExportPrims.importPColorsRaw(false)(base64);
+      };
+      // (String) => Unit
+      importWorld = function(text) {
+        workspace.importExportPrims.importWorldRaw(text);
+      };
+      return {
+        name: "import-a",
+        prims: {
+          "DRAWING": importDrawing,
+          "PCOLORS": importPColors,
+          "PCOLORS-RGB": importPColorsRGB,
+          "WORLD": importWorld
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{}],"extensions/logging":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var contains, filter, flip, foldl, id, isEmpty, map, pipeline, tail, tee;
+
+  ({contains, filter, foldl, isEmpty, map, tail} = require('brazierjs/array'));
+
+  ({flip, id, pipeline, tee} = require('brazierjs/function'));
+
+  module.exports = {
+    dumper: void 0,
+    init: function(workspace) {
+      var allLogs, clearLogs, logBuffer, logGlobals, logMessage;
+      logBuffer = []; // Array[String]
+
+      // (String) => Unit
+      logMessage = function(str) {
+        logBuffer.push(str);
+      };
+      // (String*) => Unit
+      logGlobals = function(...names) {
+        var getGlobal, globalNames, join, nameToLog, observer, toLogMessage, trueNames;
+        observer = workspace.world.observer;
+        globalNames = observer.varNames();
+        getGlobal = observer.getGlobal.bind(observer);
+        trueNames = isEmpty(names) ? globalNames : filter(flip(contains(globalNames)))(names);
+        toLogMessage = function([name, value]) {
+          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); // Use `tail` to drop initial newline
+        pipeline(map(nameToLog), join, logMessage)(trueNames);
+      };
+      // () => Array[String]
+      allLogs = function() {
+        return logBuffer.slice(0);
+      };
+      // () => Unit
+      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/mini-csv":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var parse;
+
+  parse = require('csv-parse/lib/sync');
+
+  module.exports = {
+    dumper: void 0,
+    init: function(workspace) {
+      var dumpAndWrap, fromRow, fromString, toRow, toString;
+      // ( String, String ) => List[List[Any]]
+      fromString = function(csvText, delimiter = ",") {
+        return parse(csvText, {
+          comment: '#',
+          auto_parse: true,
+          max_limit_on_data_read: 1e12,
+          skip_empty_lines: true,
+          relax_column_count: true,
+          delimiter: delimiter
+        });
+      };
+      // ( String, String ) => List[Any]
+      fromRow = function(csvText, delimiter = ",") {
+        var list;
+        list = fromString(csvText, delimiter);
+        if (list.length === 0) {
+          return list;
+        } else {
+          return list[0];
+        }
+      };
+      // ( List[List[Any]], String ) => String
+      toString = function(list, delimiter = ",") {
+        return list.map(function(row) {
+          return toRow(row, delimiter);
+        }).join("\n");
+      };
+      // ( List[Any], String ) => String
+      toRow = function(row, delimiter = ",") {
+        return row.map(function(cell) {
+          return dumpAndWrap(cell, delimiter);
+        }).join(delimiter);
+      };
+      // ( Any, String ) => String
+      dumpAndWrap = function(cell, delimiter) {
+        var cellString;
+        cellString = workspace.dump(cell);
+        if (cellString.includes(delimiter) || cellString.includes("\n")) {
+          return `"${cellString}"`;
+        } else {
+          return cellString;
+        }
+      };
+      return {
+        name: "mini-csv",
+        prims: {
+          "FROM-STRING": fromString,
+          "FROM-ROW": fromRow,
+          "TO-STRING": toString,
+          "TO-ROW": toRow
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{"csv-parse/lib/sync":8}],"extensions/nlmap":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+
+  // (Any) => Boolean
+  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;
+      // type ExtMap = Object[Any]
+      newMap = function() {
+        var out;
+        out = {};
+        return toMap(out);
+      };
+      toMap = function(obj) {
+        Object.defineProperty(obj, "_type", {
+          enumerable: false,
+          value: "ext_map",
+          writable: false
+        });
+        return obj;
+      };
+      // List[(String, Any)] => ExtMap
+      fromList = function(list) {
+        var i, k, len, out, v;
+        out = newMap();
+        for (i = 0, len = list.length; i < len; i++) {
+          [k, v] = list[i];
+          out[k] = v;
+        }
+        return out;
+      };
+      // (ExtMap) => List[(String, Any)]
+      toList = function(extMap) {
+        var k, results;
+        results = [];
+        for (k in extMap) {
+          results.push([k, extMap[k]]);
+        }
+        return results;
+      };
+      // (ExtMap, String, Any) -> ExtMap
+      add = function(extMap, key, value) {
+        var k, out;
+        out = newMap();
+        for (k in extMap) {
+          out[k] = extMap[k];
+        }
+        out[key] = value;
+        return out;
+      };
+      // (ExtMap, String) => Any
+      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`);
+          }
+        })();
+      };
+      // (ExtMap, String) => ExtMap
+      remove = function(extMap, key) {
+        var k, out;
+        out = newMap();
+        for (k in extMap) {
+          if (k !== key) {
+            out[k] = extMap[k];
+          }
+        }
+        return out;
+      };
+      // NLMAP => String
+      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);
+      };
+      // NLMAP => String
+      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('&');
+        }
+      };
+      // String => NLMAP
+      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);
+
+},{}],"extensions/send-to":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  module.exports = {
+    init: function(workspace) {
+      var file;
+      // (String, String) => Unit
+      file = function(fileName, content) {
+        workspace.importExportPrims.exportFile(content)(fileName);
+      };
+      return {
+        name: "send-to",
+        prims: {
+          "FILE": file
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{}],"extensions/store":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ForageStorage, ObjectStorage;
+
+  ObjectStorage = class ObjectStorage {
+    constructor() {
+      // (String, (String) => Unit) => Unit
+      this.getItem = this.getItem.bind(this);
+      // (String, String, () => Unit) => Unit
+      this.setItem = this.setItem.bind(this);
+      // (String, () => Unit) => Unit
+      this.removeItem = this.removeItem.bind(this);
+      // (String, (Boolean) => Unit) => Unit
+      this.hasKey = this.hasKey.bind(this);
+      // ((String[]) => Unit) => Unit
+      this.getKeys = this.getKeys.bind(this);
+      // (() => Unit) => Unit
+      this.clear = this.clear.bind(this);
+      this.storage = {};
+    }
+
+    getItem(key, callback) {
+      this.hasKey(key, (isValidKey) => {
+        if (!isValidKey) {
+          throw new Error(`Extension exception: Could not find a value for key: '${key}'.`);
+        }
+        return callback(this.storage[key]);
+      });
+    }
+
+    setItem(key, value, callback = (function() {})) {
+      this.storage[key] = value;
+      callback();
+    }
+
+    removeItem(key, callback = (function() {})) {
+      this.hasKey(key, (isValidKey) => {
+        if (isValidKey) {
+          return delete this.storage[key];
+        }
+      });
+      callback();
+    }
+
+    hasKey(key, callback) {
+      callback(this.storage.hasOwnProperty(key));
+    }
+
+    getKeys(callback) {
+      callback(Object.getOwnPropertyNames(this.storage));
+    }
+
+    clear(callback = (function() {})) {
+      this.storage = {};
+      callback();
+    }
+
+  };
+
+  ForageStorage = class ForageStorage {
+    constructor(localforage) {
+      // (String, (String) => Unit) => Unit
+      this.getItem = this.getItem.bind(this);
+      // ((String[]) => Unit) => Unit
+      this.getKeys = this.getKeys.bind(this);
+      // (String, (Boolean) => Unit) => Unit
+      this.hasKey = this.hasKey.bind(this);
+      // (String, String, () => Unit) => Unit
+      this.setItem = this.setItem.bind(this);
+      // (String, () => Unit) => Unit
+      this.removeItem = this.removeItem.bind(this);
+      // (() => Unit) => Unit
+      this.clear = this.clear.bind(this);
+      this.localforage = localforage;
+      this.localforage.config({
+        name: "Store Extension for NLW",
+        storeName: "nlw_store_extension"
+      });
+      return;
+    }
+
+    getItem(key, callback) {
+      this.hasKey(key, (isValidKey) => {
+        if (!isValidKey) {
+          throw new Error(`Extension exception: Could not find a value for key: '${key}'.`);
+        }
+        return this.localforage.getItem(key, function(e, value) {
+          return callback(value);
+        });
+      });
+    }
+
+    getKeys(callback) {
+      this.localforage.keys((e, keys) => {
+        return callback(keys);
+      });
+    }
+
+    hasKey(key, callback) {
+      this.getKeys(function(keys) {
+        return callback(keys.includes(key));
+      });
+    }
+
+    setItem(key, value, callback = (function() {})) {
+      this.localforage.setItem(key, value, callback);
+    }
+
+    removeItem(key, callback = (function() {})) {
+      this.localforage.removeItem(key, callback);
+    }
+
+    clear(callback = (function() {})) {
+      this.localforage.clear(callback);
+    }
+
+  };
+
+  module.exports = {
+    init: function(workspace) {
+      var storage;
+      storage = ((typeof window !== "undefined" && window !== null ? window.localforage : void 0) != null) ? new ForageStorage(window.localforage) : new ObjectStorage();
+      return {
+        name: "store",
+        prims: {
+          "CLEAR": storage.clear,
+          "GET": storage.getItem,
+          "GET-KEYS": storage.getKeys,
+          "HAS-KEY": storage.hasKey,
+          "PUT": storage.setItem,
+          "REMOVE": storage.removeItem
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{}],"meta":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  module.exports = {
+    isApplet: false,
+    isWeb: true,
+    behaviorSpaceName: "",
+    behaviorSpaceRun: 0,
+    // for any explorer who finds this and is wanting to update the `netlogo-version`, know that this is just a placeholder
+    // and should be overwritten by a version provided to the workspace via `modelConfig`.  -JMB March 2018
+    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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  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, formatDrawingData, formatGlobals, formatKeys, formatLinkRef, formatList, formatMetadata, formatMiniGlobals, formatNumber, formatNumberInner, formatPair, formatPatchRef, formatPensData, formatPlain, formatPlotData, formatPointsData, formatString, formatStringInner, formatTurtleRef, formatValues, id, isEmpty, joinCommaed, keys, map, mapMaybe, maxBy, maybe, onNextLineIfNotEmpty, pairs, pipeline, plotDataToCSV, rangeUntil, schemafyAny, schemafyLink, schemafyPatch, schemafyTurtle, tee, toObject, unique, values, worldDataToCSV;
+
+  JSType = require('util/typechecker');
+
+  ({flatMap, isEmpty, map, maxBy, toObject, unique} = require('brazierjs/array'));
+
+  ({id, pipeline, tee} = require('brazierjs/function'));
+
+  ({
+    fold,
+    map: mapMaybe,
+    maybe
+  } = require('brazierjs/maybe'));
+
+  ({rangeUntil} = require('brazierjs/number'));
+
+  ({keys, pairs, values} = require('brazierjs/object'));
+
+  ({BreedReference, ExportedColorNum, ExportedCommandLambda, ExportedLinkSet, ExportedPatchSet, ExportedReporterLambda, ExportedRGB, ExportedRGBA, ExportedTurtleSet, LinkReference, NobodyReference, PatchReference, TurtleReference} = require('./exportstructures'));
+
+  // (String) => String
+  onNextLineIfNotEmpty = function(x) {
+    if (isEmpty(x)) {
+      return '';
+    } else {
+      return '\n' + x;
+    }
+  };
+
+  // (Array[String]) => String
+  joinCommaed = function(x) {
+    return x.join(',');
+  };
+
+  // (String) => String
+  formatPlain = function(str) {
+    return '"' + str + '"';
+  };
+
+  // (String) => String
+  formatStringInner = function(str) {
+    return '""' + str.replace(/\n/g, "\\n").replace(/"/g, '\\""') + '""';
+  };
+
+  // (String) => String
+  formatString = function(str) {
+    return formatPlain(formatStringInner(str));
+  };
+
+  // (Boolean) => String
+  formatBoolean = function(bool) {
+    return formatPlain(bool);
+  };
+
+  // (Number) => String
+  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(); // These negative exponent numbers are when Java will switch to scientific notation --JAB (12/25/17)
+    return base.replace(/e\+?/, 'E'); // Java stringifies scientific notation with 'E' and 'E-', while JS uses 'e+' and 'e-'. --JAB (12/25/17)
+  };
+
+
+  // (Number) => String
+  formatNumber = function(num) {
+    return formatPlain(formatNumberInner(num));
+  };
+
+  // (BreedReference) => String
+  formatBreedRef = function({breedName}) {
+    var lowered;
+    lowered = breedName.toLowerCase();
+    if (lowered === "turtles" || lowered === "patches" || lowered === "links") {
+      return `{all-${lowered}}`;
+    } else {
+      return `{breed ${lowered}}`;
+    }
+  };
+
+  // [T] @ ((T, (T) => String)) => String
+  formatPair = function([value, formatter]) {
+    return formatter(value);
+  };
+
+  // (TurtleReference) => String
+  formatTurtleRef = function({
+      breed: {singular},
+      id: turtleID
+    }) {
+    return `{${singular.toLowerCase()} ${turtleID}}`;
+  };
+
+  // (PatchReference) => String
+  formatPatchRef = function({pxcor, pycor}) {
+    return `{patch ${pxcor} ${pycor}}`;
+  };
+
+  // (LinkReference) => String
+  formatLinkRef = function({
+      breed: {singular},
+      id1,
+      id2
+    }) {
+    return `{${singular.toLowerCase()} ${id1} ${id2}}`;
+  };
+
+  // (AgentReference) => String
+  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)}`);
+    }
+  };
+
+  // (Array[_]) => String
+  formatList = function(xs) {
+    return `[${xs.map(function(x) {
+      return formatAnyInner(x);
+    }).join(" ")}]`;
+  };
+
+  // (ExportedColor) => String
+  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)}`);
+    }
+  };
+
+  // (Any) => String
+  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.replace(/"/g, '""')})`;
+    } else if (x instanceof ExportedReporterLambda) {
+      return `(anonymous reporter: ${x.source.replace(/"/g, '""')})`;
+    } else if (x instanceof ExportedLinkSet) {
+      exportInnerLink = function({
+          breed: {plural},
+          id1,
+          id2
+        }) {
+        return ` [${id1} ${id2} ${formatBreedRef(new BreedReference(plural))}]`;
+      };
+      return `{links${x.references.map(exportInnerLink).join("")}}`;
+    } else if (x instanceof ExportedPatchSet) {
+      exportInnerPatch = function({pxcor, 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)}`);
+    }
+  };
+
+  // (Any) => String
+  formatAny = function(any) {
+    if (any == null) {
+      return "";
+    } else {
+      return formatPlain(formatAnyInner(any));
+    }
+  };
+
+  // (Object[String]) => String
+  formatKeys = pipeline(keys, map(formatPlain), joinCommaed);
+
+  formatValues = pipeline(values, map(formatPair), joinCommaed);
+
+  // (Object[Any]) => String
+
+  // (ExportedTurtle) => Object[(Any, (Any) => String)]
+  schemafyTurtle = function({who, color, heading, xcor, ycor, shape, label, labelColor, breed, isHidden, size, penSize, penMode}) {
+    var formatWrapped;
+    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]
+    };
+  };
+
+  // (ExportedPatch) => Object[(Any, (Any) => String)]
+  schemafyPatch = function({pxcor, pycor, pcolor, plabel, plabelColor}) {
+    return {
+      "pxcor": [pxcor, formatNumber],
+      "pycor": [pycor, formatNumber],
+      "pcolor": [pcolor, formatColor],
+      "plabel": [plabel, formatAny],
+      "plabel-color": [plabelColor, formatColor]
+    };
+  };
+
+  // (ExportedLink) => Object[(Any, (Any) => String)]
+  schemafyLink = function({end1, end2, color, label, labelColor, isHidden, breed, thickness, shape, tieMode}) {
+    var formatWrappedBreed, formatWrappedTurtle;
+    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]
+    };
+  };
+
+  // (Object[Any]) => Object[(Any, (Any) => String)]
+  schemafyAny = pipeline(pairs, map(function([k, v]) {
+    return [k, [v, formatAny]];
+  }), toObject);
+
+  // Based on le_m's solution at https://codereview.stackexchange.com/a/164141/139601
+  // (Date) => String
+  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}`;
+  };
+
+  // (ExportedGlobals) => String
+  formatGlobals = function({linkDirectedness, maxPxcor, maxPycor, minPxcor, minPycor, nextWhoNumber, perspective, subject, ticks, codeGlobals}) {
+    var builtins, formatDirectedness, formatPerspective, formatSubject, globals;
+    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)}`;
+  };
+
+  // (Object[Any]) => String
+  formatMiniGlobals = function(miniGlobals) {
+    return `${formatPlain('MODEL SETTINGS')}\n${formatKeys(miniGlobals)}\n${formatValues(schemafyAny(miniGlobals))}`;
+  };
+
+  // (Metadata) => String
+  formatMetadata = function({version, filename, date}) {
+    return `export-world data (NetLogo Web ${version})\n${filename}\n${formatPlain(formatDate(date))}`;
+  };
+
+  // [T <: ExportedAgent] @ (Array[T], (T) => Object[(Any, (Any) => String)], Array[String], Array[String]) => String
+  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 ref1;
+        return ((ref1 = agent.breedsOwns) != null ? ref1 : 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)}`;
+  };
+
+  // (ExportedPlot) => String
+  formatPlotData = function({currentPenNameOrNull, isAutoplotting, isLegendOpen, name, pens, xMax, xMin, yMax, yMin}) {
+    var convertedPlot, currentPenStr;
+    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)}`;
+  };
+
+  // (Array[ExportedPen]) => String
+  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({color, interval, isPenDown, mode, name, 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)}`;
+  };
+
+  // (Array[ExportedPen]) => String
+  formatPointsData = function(pens) {
+    var baseKeys, convertPoint, formatRow, longest, penNames, penPointsRows, pointKeys, pointValues, transposed;
+    convertPoint = function({x, y, color, 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)}`;
+  };
+
+  // (ExportPlotData) => String
+  plotDataToCSV = function({metadata, miniGlobals, plot}) {
+    return `${formatMetadata(metadata)}\n\n${formatMiniGlobals(miniGlobals)}\n\n${formatPlotData(plot)}`;
+  };
+
+  // (ExportAllPlotsData) => String
+  allPlotsDataToCSV = function({metadata, miniGlobals, plots}) {
+    return `${formatMetadata(metadata)}\n\n${formatMiniGlobals(miniGlobals)}\n\n${plots.map(formatPlotData).join("\n")}`;
+  };
+
+  // ((Number, String)) => String
+  formatDrawingData = function([patchSize, drawing]) {
+    var formatted, patchSizeStr;
+    formatted = formatNumberInner(patchSize);
+    patchSizeStr = Number.isInteger(patchSize) ? `${formatted}.0` : formatted;
+    return `${formatPlain('DRAWING')}\n${formatPlain(patchSizeStr)}${onNextLineIfNotEmpty(drawing === "" ? "" : formatString(drawing))}`;
+  };
+
+  // (Array[String], Array[String], Array[String], Array[String], Array[String]) => (ExportWorldData) => String
+  worldDataToCSV = function(allTurtlesOwnsNames, allLinksOwnsNames, patchBuiltins, turtleBuiltins, linkBuiltins) {
+    return function(worldData) {
+      var allPatchesOwnsNames, currentPlotName, currentPlotNameOrNull, drawingDataMaybe, drawingStr, extensions, globals, links, linksStr, metadata, obnoxiousPlotCSV, output, patches, patchesStr, plotCSV, plotManager, plots, randomState, turtles, turtlesStr;
+      ({metadata, randomState, globals, patches, turtles, links, plotManager, drawingDataMaybe, output, extensions} = worldData);
+      // Patches don't have a breed in the breed manager, and they all use the same exact set of vars,
+      // so the best place to get the vars is from a patch, itself, and there must always be at least
+      // one patch (`patch 0 0`), so we take the first patch and its varnames. --JAB (12/16/17)
+      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, plots} = plotManager);
+      currentPlotName = currentPlotNameOrNull != null ? currentPlotNameOrNull : '';
+      plotCSV = plots.map(formatPlotData).join('\n\n');
+      obnoxiousPlotCSV = plotCSV.length > 0 ? plotCSV + "\n" : plotCSV;
+      drawingStr = pipeline(mapMaybe(formatDrawingData), fold(function() {
+        return "";
+      })(id))(drawingDataMaybe);
+      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${drawingStr}\n\n${formatPlain('OUTPUT')}${onNextLineIfNotEmpty(output === "" ? "" : formatString(output))}\n${formatPlain('PLOTS')}\n${formatPlain(currentPlotName)}${onNextLineIfNotEmpty(obnoxiousPlotCSV)}\n${formatPlain('EXTENSIONS')}\n\n`;
+    };
+  };
+
+  module.exports = {allPlotsDataToCSV, plotDataToCSV, 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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+
+  // Did I *need* to create two dozen different classes for all of this stuff?  No, of course not.
+  // *However*, I wanted to document/codify somewhere what the types of these different structures
+  // are, and this, to me, seemed to be the most effective way of doing that.  So, please, pardon
+  // the noise.  I'm merely trying to help. --JAB (12/10/17)
+  var AgentReference, ExportedAgent, ExportedAgentSet, ExportedColor;
+
+  module.exports.BreedNamePair = class {
+    // (String, String)
+    constructor(singular, plural) {
+      this.singular = singular;
+      this.plural = plural;
+    }
+
+  };
+
+  ExportedColor = class ExportedColor {};
+
+  module.exports.ExportedColor = ExportedColor;
+
+  module.exports.ExportedRGB = class extends ExportedColor {
+    // (Number, Number, Number)
+    constructor(r, g, b) {
+      super();
+      this.r = r;
+      this.g = g;
+      this.b = b;
+    }
+
+  };
+
+  module.exports.ExportedRGBA = class extends ExportedColor {
+    // (Number, Number, Number, Number)
+    constructor(r, g, b, a = 255) {
+      super();
+      this.r = r;
+      this.g = g;
+      this.b = b;
+      this.a = a;
+    }
+
+  };
+
+  module.exports.ExportedColorNum = class extends ExportedColor {
+    // (Number)
+    constructor(value) {
+      super();
+      this.value = value;
+    }
+
+  };
+
+  module.exports.ExportedGlobals = class {
+    // ( String, Number, Number, Number, Number, Number
+    // , String, AgentReference, Number, Object[Any])
+    constructor(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;
+    }
+
+  };
+
+  module.exports.ExportedCommandLambda = class {
+    // (String)
+    constructor(source) {
+      this.source = source;
+    }
+
+  };
+
+  module.exports.ExportedReporterLambda = class {
+    // (String)
+    constructor(source) {
+      this.source = source;
+    }
+
+  };
+
+  module.exports.ExportedPoint = class {
+    // (Number, Number, Boolean, Number)
+    constructor(x, y, isPenDown, color) {
+      this.x = x;
+      this.y = y;
+      this.isPenDown = isPenDown;
+      this.color = color;
+    }
+
+  };
+
+  module.exports.ExportedPen = class {
+    // (Number, Number, Boolean, String, String, Array[ExportedPoint], Number)
+    constructor(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;
+    }
+
+  };
+
+  module.exports.ExportedPlot = class {
+    // ( String, Boolean, Boolean, String, Array[ExportedPen]
+    // , Number, Number, Number, Number)
+    constructor(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;
+    }
+
+  };
+
+  module.exports.ExportedPlotManager = class {
+    // (String, Array[ExportedPlot])
+    constructor(currentPlotNameOrNull, plots) {
+      this.currentPlotNameOrNull = currentPlotNameOrNull;
+      this.plots = plots;
+    }
+
+  };
+
+  module.exports.BreedReference = class {
+    // (String)
+    constructor(breedName) {
+      this.breedName = breedName;
+    }
+
+  };
+
+  AgentReference = class AgentReference {
+    // (String)
+    constructor(referenceType) {
+      this.referenceType = referenceType;
+    }
+
+  };
+
+  module.exports.AgentReference = AgentReference;
+
+  module.exports.LinkReference = class extends AgentReference {
+    // (BreedNamePair, Number, Number)
+    constructor(breed, id1, id2) {
+      super("link");
+      this.breed = breed;
+      this.id1 = id1;
+      this.id2 = id2;
+    }
+
+  };
+
+  module.exports.PatchReference = class extends AgentReference {
+    // (Number, Number)
+    constructor(pxcor, pycor) {
+      super("patch");
+      this.pxcor = pxcor;
+      this.pycor = pycor;
+    }
+
+  };
+
+  module.exports.TurtleReference = class extends AgentReference {
+    // (BreedNamePair, Number)
+    constructor(breed, id) {
+      super("turtle");
+      this.breed = breed;
+      this.id = id;
+    }
+
+  };
+
+  module.exports.NobodyReference = new AgentReference("nobody");
+
+  ExportedAgent = class ExportedAgent {
+    // (String)
+    constructor(agentType) {
+      this.agentType = agentType;
+    }
+
+  };
+
+  module.exports.ExportedAgent = ExportedAgent;
+
+  module.exports.ExportedLink = class extends ExportedAgent {
+    // ( TurtleReference, TurtleReference, ExportedColor, String, ExportedColor, Boolean
+    // , BreedReference, Number, String, String, Object[Any])
+    constructor(end1, end2, color, label, labelColor, isHidden, breed, thickness, shape, tieMode, breedsOwns) {
+      super("link");
+      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;
+    }
+
+  };
+
+  module.exports.ExportedPatch = class extends ExportedAgent {
+    // (Number, Number, ExportedColor, String, ExportedColor, Object[Any])
+    constructor(pxcor, pycor, pcolor, plabel, plabelColor, patchesOwns) {
+      super("patch");
+      this.pxcor = pxcor;
+      this.pycor = pycor;
+      this.pcolor = pcolor;
+      this.plabel = plabel;
+      this.plabelColor = plabelColor;
+      this.patchesOwns = patchesOwns;
+    }
+
+  };
+
+  module.exports.ExportedTurtle = class extends ExportedAgent {
+    // ( Number, ExportedColor, Number, Number, Number, String, String, ExportedColor, BreedReference
+    // , Boolean, Number, Number, String, Object[Any])
+    constructor(who, color, heading, xcor, ycor, shape, label, labelColor, breed, isHidden, size, penSize, penMode, breedsOwns) {
+      super("turtle");
+      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;
+    }
+
+  };
+
+  ExportedAgentSet = class ExportedAgentSet {
+    // (String)
+    constructor(agentSetType) {
+      this.agentSetType = agentSetType;
+    }
+
+  };
+
+  module.exports.ExportedAgentSet = ExportedAgentSet;
+
+  module.exports.ExportedLinkSet = class extends ExportedAgentSet {
+    // (Array[LinkReference])
+    constructor(references) {
+      super("linkset");
+      this.references = references;
+    }
+
+  };
+
+  module.exports.ExportedPatchSet = class extends ExportedAgentSet {
+    // (Array[PatchReference])
+    constructor(references) {
+      super("patchset");
+      this.references = references;
+    }
+
+  };
+
+  module.exports.ExportedTurtleSet = class extends ExportedAgentSet {
+    // (Array[TurtleReference])
+    constructor(references) {
+      super("turtleset");
+      this.references = references;
+    }
+
+  };
+
+  module.exports.ExportedExtension = class {
+    constructor() {}
+
+  };
+
+  module.exports.Metadata = class {
+    // (String, String, Date)
+    constructor(version, filename, date) {
+      this.version = version;
+      this.filename = filename;
+      this.date = date;
+    }
+
+  };
+
+  module.exports.ExportWorldData = class {
+    // ( Metadata, String, ExportedGlobals, Array[ExportedPatch], Array[ExportedTurtle]
+    // , Array[ExportedLink], Maybe[(Number, String)], String, ExportedPlotManager, Array[ExportedExtension])
+    constructor(metadata, randomState, globals, patches, turtles, links, drawingDataMaybe, output, plotManager, extensions) {
+      this.metadata = metadata;
+      this.randomState = randomState;
+      this.globals = globals;
+      this.patches = patches;
+      this.turtles = turtles;
+      this.links = links;
+      this.drawingDataMaybe = drawingDataMaybe;
+      this.output = output;
+      this.plotManager = plotManager;
+      this.extensions = extensions;
+    }
+
+  };
+
+  module.exports.ExportPlotData = class {
+    // (Metadata, Object[Any], ExportedPlot)
+    constructor(metadata, miniGlobals, plot) {
+      this.metadata = metadata;
+      this.miniGlobals = miniGlobals;
+      this.plot = plot;
+    }
+
+  };
+
+  module.exports.ExportAllPlotsData = class {
+    // (Metadata, Object[Any], Array[Plot])
+    constructor(metadata, miniGlobals, plots) {
+      this.metadata = metadata;
+      this.miniGlobals = miniGlobals;
+      this.plots = plots;
+    }
+
+  };
+
+}).call(this);
+
+},{}],"serialize/importcsv":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var ExportWorldData, ExportedColorNum, ExportedExtension, ExportedGlobals, ExportedLink, ExportedPatch, ExportedPen, ExportedPlot, ExportedPlotManager, ExportedPoint, ExportedRGB, ExportedRGBA, ExportedTurtle, JSType, Metadata, arrayParse, buckets, csvNameToSaneName, drawingParse, extensionParse, extractGlobals, fold, foldl, globalParse, id, identity, maybe, nameToSchema, parse, parseAgentRefMaybe, parseAndExtract, parseAny, parseBool, parseBreed, parseColor, parseDate, parsePenMode, parsePerspective, parseString, parseStringMaybe, parseTurtleRefMaybe, parseVersion, plotParse, singletonParse, toExportedColor, toExportedGlobals, toExportedLink, toExportedPatch, toExportedPen, toExportedPlot, toExportedPlotManager, toExportedPoint, toExportedTurtle,
+    indexOf = [].indexOf;
+
+  parse = require('csv-parse/lib/sync');
+
+  JSType = require('util/typechecker');
+
+  ({parseAgentRefMaybe, parseAny, parseBool, parseBreed, parseString, parseTurtleRefMaybe} = require('./readexportedvalue'));
+
+  ({ExportedColorNum, ExportedExtension, ExportedGlobals, ExportedLink, ExportedPatch, ExportedPen, ExportedPlot, ExportedPlotManager, ExportedPoint, ExportedRGB, ExportedRGBA, ExportedTurtle, ExportWorldData, Metadata} = require('./exportstructures'));
+
+  ({foldl} = require('brazierjs/array'));
+
+  ({id} = require('brazierjs/function'));
+
+  ({fold, maybe} = require('brazierjs/maybe'));
+
+  // type ImpObj    = Object[Any]
+  // type Row       = Array[String]
+  // type Parser[T] = (Array[Row], Schema) => T
+  // type Schema    = Object[(String) => Any]
+
+  // (String) => String
+  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) {
+          ({
+            0: fullMatch,
+            1: group,
+            index
+          } = match);
+          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) {
+        ({
+          1: firstLetter,
+          2: remainder
+        } = qMatch);
+        return `is${firstLetter.toUpperCase()}${remainder}`;
+      } else {
+        return camelCased;
+      }
+    } else {
+      return csvName;
+    }
+  };
+
+  // (String|(Number, Number, Number)|(Number, Number, Number, Number)) => ExportedColor
+  toExportedColor = function(color) {
+    var a, b, g, r;
+    if (JSType(color).isNumber()) {
+      return new ExportedColorNum(color);
+    } else if (JSType(color).isArray()) {
+      [r, g, b, a] = color;
+      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)}`);
+    }
+  };
+
+  // (Object[Any]) => ExportedGlobals
+  toExportedGlobals = function({directedLinks, maxPxcor, maxPycor, minPxcor, minPycor, nextIndex, perspective, subject, ticks}, codeGlobals) {
+    return new ExportedGlobals(directedLinks, maxPxcor, maxPycor, minPxcor, minPycor, nextIndex, perspective, subject, ticks, codeGlobals);
+  };
+
+  // (Object[Any]) => ExportedLink
+  toExportedLink = function({breed, color, end1, end2, isHidden, labelColor, label, shape, thickness, tieMode, extraVars}) {
+    return new ExportedLink(end1, end2, toExportedColor(color), label, toExportedColor(labelColor), isHidden, breed, thickness, shape, tieMode, extraVars);
+  };
+
+  // (Object[Any]) => ExportedPatch
+  toExportedPatch = function({pcolor, plabelColor, plabel, pxcor, pycor, extraVars}) {
+    return new ExportedPatch(pxcor, pycor, toExportedColor(pcolor), plabel, toExportedColor(plabelColor), extraVars);
+  };
+
+  // (Object[Any]) => ExportedTurtle
+  toExportedTurtle = function({breed, color, heading, isHidden, labelColor, label, penMode, penSize, shape, size, who, xcor, ycor, extraVars}) {
+    return new ExportedTurtle(who, toExportedColor(color), heading, xcor, ycor, shape, label, toExportedColor(labelColor), breed, isHidden, size, penSize, penMode, extraVars);
+  };
+
+  // (Object[Any]) => ExportedPoint
+  toExportedPoint = function({x, y, isPenDown, color}) {
+    return new ExportedPoint(x, y, isPenDown, color);
+  };
+
+  // (Object[Any]) => ExportedPen
+  toExportedPen = function({color, interval, isPenDown, mode, penName, points, x}) {
+    return new ExportedPen(color, interval, isPenDown, mode, penName, points.map(toExportedPoint), x);
+  };
+
+  // (Object[Any]) => ExportedPlot
+  toExportedPlot = function({currentPen, isAutoplot, isLegendOpen, name, pens, xMax, xMin, yMax, yMin}) {
+    return new ExportedPlot(fold(function() {
+      return null;
+    })(id)(currentPen), isAutoplot, isLegendOpen, name, pens.map(toExportedPen), xMax, xMin, yMax, yMin);
+  };
+
+  // (Object[Any]) => ExportedPlotManager
+  toExportedPlotManager = function({
+      default: defaultOrNull,
+      plots
+    }) {
+    return new ExportedPlotManager(defaultOrNull, plots.map(toExportedPlot));
+  };
+
+  // START SCHEMA STUFF
+
+  // Only used to mark things that we should delay converting until later --JAB (4/6/17)
+  // [T] @ (T) => T
+  identity = function(x) {
+    return x;
+  };
+
+  // (String) => String|(Number, Number, Number)|(Number, Number, Number, Number)
+  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);
+  };
+
+  // (String) => Number
+  parseDate = function(x) {
+    var _, millis, postfix, prefix;
+    [_, prefix, millis, postfix] = x.match(/(.*):(\d+) (.*)/);
+    return new Date(Date.parse(`${prefix} ${postfix}`) + parseInt(millis));
+  };
+
+  // (String) => Maybe[String]
+  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}`);
+    }
+  };
+
+  // (String) => String
+  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}`);
+    }
+  };
+
+  // (String) => String
+  parseVersion = function(x) {
+    return x.match(/export-world data \([^\)]+\)/)[1];
+  };
+
+  // [T] @ (String) => ((String) => Maybe[T]) => ((String) => T)
+  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));
+      };
+    };
+  };
+
+  // ((String) => String, (String) => String) => Object[Schema]
+  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: {}
+    };
+  };
+
+  // END SCHEMA STUFF
+
+  // START PARSER STUFF
+
+  // Parser[String]
+  singletonParse = function(x, schema) {
+    var ref;
+    if (((ref = x[0]) != null ? ref[0] : void 0) != null) {
+      return schema.value(x[0][0]);
+    } else {
+      return '';
+    }
+  };
+
+  // ((String) => String, (String) => String) => Parser[Array[ImpObj]]
+  arrayParse = function(singularToPlural, pluralToSingular) {
+    return function([keys, ...rows], schema) {
+      var f;
+      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 !== "") { // DO NOT USE `saneKey`!  Do not touch user global names! --JAB (8/2/17)
+            obj.extraVars[rawKey] = parseAny(singularToPlural, pluralToSingular)(value);
+          }
+        }
+        return acc.concat([obj]);
+      };
+      return foldl(f)([])(rows);
+    };
+  };
+
+  // ((String) => String, (String) => String) => Parser[ImpObj]
+  globalParse = function(singularToPlural, pluralToSingular) {
+    return function(csvBucket, schema) {
+      return arrayParse(singularToPlural, pluralToSingular)(csvBucket, schema)[0];
+    };
+  };
+
+  // Parser[ImpObj]
+  plotParse = function(csvBucket, schema) {
+    var csvIndex, j, length, output, parseEntity, penCount, penIndex, plot, point, pointsIndex, ref, ref1, ref2;
+    parseEntity = function(acc, rowIndex, upperBound, valueRowOffset, valueColumnOffset) {
+      var columnIndex, columnName, j, ref, ref1, value;
+      for (columnIndex = j = 0, ref = upperBound; (0 <= ref ? j < ref : j > ref); columnIndex = 0 <= ref ? ++j : --j) {
+        columnName = csvNameToSaneName(csvBucket[rowIndex][columnIndex]);
+        value = csvBucket[rowIndex + valueRowOffset][columnIndex + valueColumnOffset];
+        acc[columnName] = ((ref1 = schema[columnName]) != null ? ref1 : parseInt)(value);
+      }
+      return acc;
+    };
+    output = {
+      default: (ref = (ref1 = csvBucket[0]) != null ? ref1[0] : void 0) != null ? ref : null,
+      plots: []
+    };
+    // Iterate over every plot
+    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() {
+        var 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;
+      // For each pen, parsing of the list of points associated with the pen
+      pointsIndex = 1;
+      while (csvIndex + pointsIndex < csvBucket.length && csvBucket[csvIndex + pointsIndex].length !== 1) {
+        length = csvBucket[csvIndex].length / penCount;
+        for (penIndex = j = 0, ref2 = penCount; (0 <= ref2 ? j < ref2 : j > ref2); penIndex = 0 <= ref2 ? ++j : --j) {
+          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;
+  };
+
+  // Parser[Array[Array[String]]]
+  extensionParse = function(csvBucket, schema) {
+    var extNames, item, j, len, output;
+    output = [];
+    for (j = 0, len = csvBucket.length; j < len; j++) {
+      [item] = csvBucket[j];
+      if (!item.startsWith('{{')) {
+        output.push([]);
+      } else {
+        extNames = Object.keys(output);
+        output[output.length - 1].push(item);
+      }
+    }
+    return output;
+  };
+
+  // Parser[(Number, String)]
+  drawingParse = function(csvBucket, schema) {
+    var base64Str, patchSizeStr;
+    if (csvBucket.length === 0) {
+      return "";
+    } else if (csvBucket.length === 2) {
+      [[patchSizeStr], [base64Str]] = csvBucket;
+      return [parseFloat(patchSizeStr), parseString(base64Str)];
+    } else {
+      throw new Error("NetLogo Web cannot parse `export-world` drawings from before NetLogo 6.1.");
+    }
+  };
+
+  // ((String) => String, (String) => String) => Object[Parser[Any]]
+  buckets = function(singularToPlural, pluralToSingular) {
+    return {
+      extensions: extensionParse,
+      drawing: drawingParse,
+      globals: globalParse(singularToPlural, pluralToSingular),
+      links: arrayParse(singularToPlural, pluralToSingular),
+      output: singletonParse,
+      patches: arrayParse(singularToPlural, pluralToSingular),
+      plots: plotParse,
+      randomState: singletonParse,
+      turtles: arrayParse(singularToPlural, pluralToSingular)
+    };
+  };
+
+  // END PARSER STUFF
+
+  // (ImpObj, Array[String]) => (ImpObj, Object[String])
+  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];
+  };
+
+  // ((String) => String, (String) => String) => (String) => WorldState
+  module.exports = function(singularToPlural, pluralToSingular) {
+    return function(csvText) {
+      var _, bucketParser, bucketToRows, buckies, builtInGlobals, clusterRows, codeGlobals, dateRow, drawing, extensions, filenameRow, getSchema, globals, links, name, outExtensions, outGlobals, outLinks, outMetadata, outPatches, outPlotManager, outTurtles, output, parsedCSV, patches, plots, randomState, titleRow, turtles, world;
+      buckies = buckets(singularToPlural, pluralToSingular);
+      getSchema = nameToSchema(singularToPlural, pluralToSingular);
+      parsedCSV = parse(csvText, {
+        comment: '#',
+        max_limit_on_data_read: 1e12,
+        skip_empty_lines: true,
+        relax_column_count: true
+      });
+      clusterRows = function([acc, latestRows], row) {
+        var ex, rows, saneName;
+        saneName = (function() {
+          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];
+        }
+      };
+      [bucketToRows, _] = foldl(clusterRows)([{}, void 0])(parsedCSV);
+      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, randomState, turtles, patches, links, drawing, output, plots, extensions} = world);
+      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, maybe(drawing), 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":8,"util/typechecker":"util/typechecker"}],"serialize/readexportedvalue":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  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, tryParsers;
+
+  ({BreedNamePair, BreedReference, ExportedCommandLambda, ExportedLinkSet, ExportedPatchSet, ExportedReporterLambda, ExportedTurtleSet, LinkReference, NobodyReference, PatchReference, TurtleReference} = require('./exportstructures'));
+
+  ({
+    fold,
+    isSomething,
+    map: mapMaybe,
+    maybe,
+    None
+  } = require('brazier/maybe'));
+
+  // (String) => Number
+  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;
+    }
+  };
+
+  // (String, (String) => Any, (String) => Any) => Array[Any]
+  parseList = function() {
+    var parseListHelper;
+    parseListHelper = function(list, readValue, readAgentLike) {
+      var parseInner;
+      parseInner = function(contents, acc = [], accIndex = 0) {
+        var endIndex, index, item, recurse, rightIndex, spaceIndex, strFrom, strIndex, strUntil, tempered;
+        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 ']': // End of list
+              return [acc, accIndex + 1];
+            case '[': // Start of list
+              [item, endIndex] = parseListHelper(contents, readValue, readAgentLike);
+              return recurse(tempered(endIndex), item);
+            case '{': // Start of agent/agentset
+              index = strIndex('}');
+              return recurse(tempered(index), readAgentLike(strUntil(index + 1)));
+            case '"': // Start of string
+              index = firstIndexOfUnescapedQuote(strFrom(1)) + 1;
+              return recurse(tempered(index), readValue(strUntil(index + 1)));
+            default:
+              rightIndex = strIndex(']'); // End of next item, if there's no item after it
+              spaceIndex = strIndex(' '); // Separator between next item and the one after
+              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(...arguments)[0];
+  };
+
+  // (Regex, String, String) => RegexMatch
+  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}`);
+    }
+  };
+
+  // (String) => Boolean
+  module.exports.parseBool = function(x) {
+    return x.toLowerCase() === "true";
+  };
+
+  // (String) => BreedReference
+  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([_, breedName]) {
+          return new BreedReference(breedName.toLowerCase());
+        })(x);
+    }
+  };
+
+  // (String) => BreedReference
+  module.exports.parseBreed = function(x) {
+    return fold(function() {
+      throw new Error(`Cannot parse as breed: ${x}`);
+    })(function(x) {
+      return x;
+    })(parseBreedMaybe(x));
+  };
+
+  // (String) => String
+  module.exports.parseString = function(str) {
+    return match(/^"(.*)"$/, str)[1].replace(new RegExp('\\\\"', 'g'), '"');
+  };
+
+  // [T] @ (RegExp) => ((Array[String]) => Maybe[T]) => (String) => Maybe[T]
+  parseGeneric = function(regex) {
+    return function(f) {
+      return function(x) {
+        return mapMaybe(f)(maybe(x.match(regex)));
+      };
+    };
+  };
+
+  // ((String) => String) => (String) => Maybe[TurtleReference]
+  parseTurtleRefMaybe = function(singularToPlural) {
+    return parseGeneric(/{([^ ]+) (\d+)}/)(function([_, breedName, idStr]) {
+      var breed;
+      breed = new BreedNamePair(breedName, singularToPlural(breedName).toLowerCase());
+      return new TurtleReference(breed, parseInt(idStr));
+    });
+  };
+
+  module.exports.parseTurtleRefMaybe = parseTurtleRefMaybe;
+
+  // (String) => Maybe[PatchReference]
+  parsePatchRefMaybe = parseGeneric(/{patch ([\d-]+) ([\d-]+)}/)(function([_, xStr, yStr]) {
+    return new PatchReference(parseInt(xStr), parseInt(yStr));
+  });
+
+  // ((String) => String) => (String) => Maybe[LinkReference]
+  parseLinkRefMaybe = function(singularToPlural) {
+    return parseGeneric(/{([^ ]+) (\d+) (\d+)}/)(function([_, breedName, end1IDStr, end2IDStr]) {
+      var breed;
+      breed = new BreedNamePair(breedName, singularToPlural(breedName).toLowerCase());
+      return new LinkReference(breed, parseInt(end1IDStr), parseInt(end2IDStr));
+    });
+  };
+
+  // [T] @ (Array[(String) => Maybe[T]]) => (String) => Maybe[T]
+  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;
+    };
+  };
+
+  // ((String) => String) => (String) => Maybe[AgentReference]
+  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);
+      }
+    };
+  };
+
+  // ((String) => String) => (String) => LinkReference
+  parseInnerLink = function(pluralToSingular) {
+    return function(x) {
+      var _, breed, breedName, id1, id2, unparsedBreed;
+      [_, id1, id2, unparsedBreed] = match(/\[(\d+) (\d+) (.*)/, x);
+      breedName = unparsedBreed === "{all-links}" ? "links" : match(/{breed (.*)}/, unparsedBreed)[1];
+      breed = new BreedNamePair(pluralToSingular(breedName), breedName.toLowerCase());
+      return new LinkReference(breed, parseInt(id1), parseInt(id2));
+    };
+  };
+
+  // ((String) => String, (String) => String) => (String) => Any
+  readAgenty = function(singularToPlural, pluralToSingular) {
+    return function(x) {
+      var lowerCased, parseLinkSet, parsePatchSet, parseTurtleSet, parsedMaybe, parsers, stp;
+      lowerCased = x.toLowerCase();
+      stp = singularToPlural;
+      parseTurtleSet = parseGeneric(/{turtles ?([^}]*)}/)(function([_, nums]) {
+        var breed;
+        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([_, pairs]) {
+        return new ExportedPatchSet(pairs.split(/] ?/).slice(0, -1).map(function(x) {
+          return x.slice(1).split(' ').map(function(x) {
+            return parseInt(x);
+          });
+        }).map(function([x, y]) {
+          return new PatchReference(x, y);
+        }));
+      });
+      parseLinkSet = parseGeneric(/{links ?(.*)}$/)(function([_, triples]) {
+        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);
+    };
+  };
+
+  // ((String) => String, (String) => String) => (String) => Any
+  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)); // If not a list
+        } else {
+          strMatch = x.match(/^"(.*)"$/);
+          if (strMatch != null) {
+            return strMatch[1].replace(new RegExp('\\\\"', 'g'), '"'); // If not a string
+          } else {
+            parsedNum = parseFloat(x);
+            if (!Number.isNaN(parsedNum)) {
+              return parsedNum; // If not a number
+            } 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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var MersenneTwisterFast;
+
+  ({MersenneTwisterFast} = require('./engine-scala'));
+
+  module.exports = MersenneTwisterFast();
+
+}).call(this);
+
+},{"./engine-scala":"shim/engine-scala"}],"shim/cloner":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var JSType, cloneFunc, foldl;
+
+  ({foldl} = require('brazierjs/array'));
+
+  JSType = require('util/typechecker');
+
+  // [T] @ (T) => T
+  cloneFunc = function(obj) { // Stored into a variable for the sake of recursion --JAB (4/29/14)
+    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:{},k="object"===typeof g.global&&g.global?g.global:"object"===typeof global&&global&&global.Object===Object?global:this;g.global=k;var aa="object"===typeof g.exportsNamespace&&g.exportsNamespace?g.exportsNamespace:k;g.exportsNamespace=aa;k.Object.freeze(g);var ba={envInfo:g,semantics:{asInstanceOfs:2,arrayIndexOutOfBounds:2,moduleInit:2,strictFloats:!1,productionMode:!0},assumingES6:!1,linkerVersion:"0.6.26",globalThis:this};k.Object.freeze(ba);
+k.Object.freeze(ba.semantics);var m=k.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},da=k.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)},ea=0,fa=k.WeakMap?new k.WeakMap:null;function ga(a){return function(b,c){return!(!b||!b.$classData||b.$classData.sa!==c||b.$classData.qa!==a)}}
+function ha(a){for(var b in a)return b}function ia(a,b){return ja(a,b,0)}function ja(a,b,c){var d=new a.$a(b[c]);if(c<b.length-1){a=a.ua;c+=1;for(var e=d.a,h=0;h<e.length;h++)e[h]=ja(a,b,c)}return d}function ka(a){return void 0===a?"undefined":a.toString()}
+function la(a){switch(typeof a){case "string":return n(ma);case "number":var b=a|0;return b===a?na(b)?n(pa):qa(b)?n(ra):n(sa):"number"===typeof a?n(ta):n(ua);case "boolean":return n(va);case "undefined":return n(wa);default:return null===a?a.jf():q(a)?n(xa):a&&a.$classData?n(a.$classData):null}}function ya(a,b){return a&&a.$classData||null===a?a.x(b):"number"===typeof a?"number"===typeof b&&(a===b?0!==a||1/a===1/b:a!==a&&b!==b):a===b}
+function za(a){switch(typeof a){case "string":return Aa(Ba(),a);case "number":return Ca(Da(),a);case "boolean":return a?1231:1237;case "undefined":return 0;default:return a&&a.$classData||null===a?a.w():null===fa?42:Ea(a)}}function Fa(a){return 2147483647<a?2147483647:-2147483648>a?-2147483648:a|0}function Ga(a,b){var c=k.Object.getPrototypeOf,d=k.Object.getOwnPropertyDescriptor;for(a=c(a);null!==a;){var e=d(a,b);if(void 0!==e)return e;a=c(a)}}
+function Ha(a,b,c){a=Ga(a,c);if(void 0!==a)return c=a.get,void 0!==c?c.call(b):a.value}function Ia(a,b,c,d){a=Ga(a,c);if(void 0!==a&&(a=a.set,void 0!==a)){a.call(b,d);return}throw new k.TypeError("super has no setter '"+c+"'.");}
+var Ea=null!==fa?function(a){switch(typeof a){case "string":case "number":case "boolean":case "undefined":return za(a);default:if(null===a)return 0;var b=fa.get(a);void 0===b&&(ea=b=ea+1|0,fa.set(a,b));return b}}:function(a){if(a&&a.$classData){var b=a.$idHashCode$0;if(void 0!==b)return b;if(k.Object.isSealed(a))return 42;ea=b=ea+1|0;return a.$idHashCode$0=b}return null===a?0:za(a)};function na(a){return"number"===typeof a&&a<<24>>24===a&&1/a!==1/-0}
+function qa(a){return"number"===typeof a&&a<<16>>16===a&&1/a!==1/-0}function Ja(a){return null===a?r().pa:a}function Ka(){this.Na=this.$a=void 0;this.qa=this.ua=this.l=null;this.sa=0;this.ub=null;this.Fa="";this.I=this.Da=this.Ea=void 0;this.name="";this.isRawJSType=this.isArrayClass=this.isInterface=this.isPrimitive=!1;this.isInstance=void 0}
+function Ma(a,b,c){var d=new Ka;d.l={};d.ua=null;d.ub=a;d.Fa=b;d.I=function(){return!1};d.name=c;d.isPrimitive=!0;d.isInstance=function(){return!1};return d}function u(a,b,c,d,e,h,l){var p=new Ka,t=ha(a);h=h||function(a){return!!(a&&a.$classData&&a.$classData.l[t])};l=l||function(a,b){return!!(a&&a.$classData&&a.$classData.sa===b&&a.$classData.qa.l[t])};p.Na=e;p.l=c;p.Fa="L"+b+";";p.I=l;p.name=b;p.isInterface=!1;p.isRawJSType=!!d;p.isInstance=h;return p}
+function Na(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 Ka,d=a.ub,e="longZero"==d?r().pa:d;b.prototype=new v;b.prototype.constructor=b;b.prototype.yb=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.Fa,h=a.qa||a,l=a.sa+1;c.$a=b;c.Na=Oa;c.l={c:1,fb:1,d:1};c.ua=a;c.qa=h;c.sa=l;c.ub=null;c.Fa=d;c.Ea=void 0;c.Da=void 0;c.I=void 0;c.name=d;c.isPrimitive=
+!1;c.isInterface=!1;c.isArrayClass=!0;c.isInstance=function(a){return h.I(a,l)};return c}function n(a){if(!a.Ea){var b=new Pa;b.Ga=a;a.Ea=b}return a.Ea}function Qa(a){a.Da||(a.Da=Na(a));return a.Da}Ka.prototype.getFakeInstance=function(){return this===ma?"some string":this===va?!1:this===pa||this===ra||this===sa||this===ta||this===ua?0:this===xa?r().pa:this===wa?void 0:{$classData:this}};Ka.prototype.getSuperclass=function(){return this.Na?n(this.Na):null};
+Ka.prototype.getComponentType=function(){return this.ua?n(this.ua):null};Ka.prototype.newArrayOfThisClass=function(a){for(var b=this,c=0;c<a.length;c++)b=Qa(b);return ia(b,a)};var Ra=Ma(!1,"Z","boolean"),Sa=Ma(0,"C","char"),Ta=Ma(0,"B","byte"),Ua=Ma(0,"S","short"),Va=Ma(0,"I","int"),Wa=Ma("longZero","J","long"),Xa=Ma(0,"F","float"),Ya=Ma(0,"D","double");Ra.I=ga(Ra);Sa.I=ga(Sa);Ta.I=ga(Ta);Ua.I=ga(Ua);Va.I=ga(Va);Wa.I=ga(Wa);Xa.I=ga(Xa);Ya.I=ga(Ya);function Za(){}function v(){}v.prototype=Za.prototype;Za.prototype.b=function(){return this};Za.prototype.x=function(a){return this===a};Za.prototype.h=function(){var a=$a(la(this)),b=(+(this.w()>>>0)).toString(16);return a+"@"+b};Za.prototype.w=function(){return Ea(this)};Za.prototype.toString=function(){return this.h()};var Oa=u({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.sa||0;return!(c<b)&&(c>b||!a.qa.isPrimitive)}return!1});
+Za.prototype.$classData=Oa;function ab(){this.Ua=null;this.m=!1}ab.prototype=new v;ab.prototype.constructor=ab;ab.prototype.b=function(){return this};function bb(a){if(!a.m){var b=function(){return function(a){return void 0===a?w():(new y).H(a)}}(a),c=cb();c.i()?c=w():(c=c.T(),c=b(c));c.i()?c=w():(c=c.T(),c=(new y).H(c.lang));c.i()?c=w():(c=c.T(),c=b(c));c.i()?c=w():(c=c.T(),c=(new y).H(c.StrictMath));c.i()?b=w():(c=c.T(),b=b(c));a.Ua=b.i()?k.StrictMath:b.T();a.m=!0}return a.Ua}
+ab.prototype.$classData=u({Bc:0},"org.nlogo.tortoise.engine.MersenneMath$",{Bc:1,c:1});var db=void 0;function eb(){db||(db=(new ab).b());return db}function Pa(){this.Ga=null}Pa.prototype=new v;Pa.prototype.constructor=Pa;function $a(a){return a.Ga.name}Pa.prototype.h=function(){return(this.Ga.isInterface?"interface ":this.Ga.isPrimitive?"":"class ")+$a(this)};Pa.prototype.$classData=u({Pc:0},"java.lang.Class",{Pc:1,c:1});function fb(){this.Cb=null}fb.prototype=new v;fb.prototype.constructor=fb;
+fb.prototype.b=function(){gb=this;hb();hb();this.Cb=k.performance?k.performance.now?function(){ib();return+k.performance.now()}:k.performance.webkitNow?function(){ib();return+k.performance.webkitNow()}:function(){ib();return+(new k.Date).getTime()}:function(){ib();return+(new k.Date).getTime()};return this};fb.prototype.$classData=u({ed:0},"java.lang.System$",{ed:1,c:1});var gb=void 0;function ib(){gb||(gb=(new fb).b());return gb}function jb(){}jb.prototype=new v;jb.prototype.constructor=jb;
+jb.prototype.b=function(){return this};jb.prototype.$classData=u({gd:0},"java.util.Arrays$",{gd:1,c:1});var kb=void 0;function lb(){}lb.prototype=new v;lb.prototype.constructor=lb;function mb(){}mb.prototype=lb.prototype;function nb(){}nb.prototype=new v;nb.prototype.constructor=nb;nb.prototype.b=function(){return this};nb.prototype.$classData=u({Ad:0},"scala.math.Ordered$",{Ad:1,c:1});var ob=void 0;function pb(){this.m=0}pb.prototype=new v;pb.prototype.constructor=pb;
+pb.prototype.b=function(){qb=this;(new rb).b();sb||(sb=(new tb).b());ub||(ub=(new vb).b());wb||(wb=(new xb).b());yb();zb();Ab||(Ab=(new Bb).b());Cb();Db||(Db=(new Eb).b());Fb||(Fb=(new Gb).b());Hb||(Hb=(new Ib).b());Jb||(Jb=(new Kb).b());Lb||(Lb=(new Mb).b());Nb||(Nb=(new Ob).b());Pb||(Pb=(new Qb).b());Rb||(Rb=(new Sb).b());Tb||(Tb=(new Ub).b());Vb||(Vb=(new Wb).b());Xb||(Xb=(new Yb).b());Zb||(Zb=(new $b).b());ob||(ob=(new nb).b());ac||(ac=(new bc).b());cc||(cc=(new dc).b());ec||(ec=(new fc).b());
+gc||(gc=(new hc).b());return this};pb.prototype.$classData=u({Dd:0},"scala.package$",{Dd:1,c:1});var qb=void 0;function ic(){}ic.prototype=new v;ic.prototype.constructor=ic;
+ic.prototype.b=function(){jc=this;kc||(kc=(new lc).b());mc||(mc=(new nc).b());oc||(oc=(new pc).b());qc||(qc=(new rc).b());sc||(sc=(new wc).b());xc||(xc=(new yc).b());zc||(zc=(new Ac).b());Bc||(Bc=(new Cc).b());Dc||(Dc=(new Ec).b());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());return this};ic.prototype.$classData=u({Fd:0},"scala.reflect.ClassManifestFactory$",{Fd:1,c:1});var jc=void 0;function Pc(){}Pc.prototype=new v;
+Pc.prototype.constructor=Pc;Pc.prototype.b=function(){return this};Pc.prototype.$classData=u({Gd:0},"scala.reflect.ManifestFactory$",{Gd:1,c:1});var Qc=void 0;function Rc(){}Rc.prototype=new v;Rc.prototype.constructor=Rc;Rc.prototype.b=function(){Sc=this;jc||(jc=(new ic).b());Qc||(Qc=(new Pc).b());return this};Rc.prototype.$classData=u({Wd:0},"scala.reflect.package$",{Wd:1,c:1});var Sc=void 0;function Xc(){}Xc.prototype=new v;Xc.prototype.constructor=Xc;Xc.prototype.b=function(){(new Yc).b();return this};
+Xc.prototype.$classData=u({ae:0},"scala.util.control.Breaks",{ae:1,c:1});function Zc(){}Zc.prototype=new v;Zc.prototype.constructor=Zc;function $c(){}$c.prototype=Zc.prototype;function ad(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 bd(a){a=m(-2048144789,a^(a>>>16|0));a=m(-1028477387,a^(a>>>13|0));return a^(a>>>16|0)}
+function cd(a){dd();var b=a.Z();if(0===b)return a=a.aa(),Aa(Ba(),a);for(var c=-889275714,d=0;d<b;)c=ad(c,ed(fd(),a.$(d))),d=1+d|0;return bd(c^b)}function gd(a,b,c){var d=(new hd).va(0);c=(new hd).va(c);b.V(id(function(a,b,c){return function(a){c.z=ad(c.z,ed(fd(),a));b.z=1+b.z|0}}(a,d,c)));return bd(c.z^d.z)}function Ib(){}Ib.prototype=new v;Ib.prototype.constructor=Ib;Ib.prototype.b=function(){return this};Ib.prototype.$classData=u({de:0},"scala.collection.$colon$plus$",{de:1,c:1});var Hb=void 0;
+function Gb(){}Gb.prototype=new v;Gb.prototype.constructor=Gb;Gb.prototype.b=function(){return this};Gb.prototype.$classData=u({ee:0},"scala.collection.$plus$colon$",{ee:1,c:1});var Fb=void 0;function jd(){this.cb=null}jd.prototype=new v;jd.prototype.constructor=jd;jd.prototype.b=function(){kd=this;this.cb=(new ld).b();return this};jd.prototype.$classData=u({je:0},"scala.collection.Iterator$",{je:1,c:1});var kd=void 0;function zb(){kd||(kd=(new jd).b());return kd}
+function md(a,b,c){var d=(new nd).b();return od(a,d,b,c).O.t}function od(a,b,c,d){var e=pd();qd(b,c);a.V(id(function(a,b,c,d){return function(a){if(d.z)rd(b,a),d.z=!1;else return qd(b,c),rd(b,a)}}(a,b,d,e)));qd(b,")");return b}function sd(){}sd.prototype=new v;sd.prototype.constructor=sd;function td(){}td.prototype=sd.prototype;function ud(){}ud.prototype=new v;ud.prototype.constructor=ud;function vd(){}vd.prototype=ud.prototype;function Mb(){}Mb.prototype=new v;Mb.prototype.constructor=Mb;
+Mb.prototype.b=function(){return this};Mb.prototype.$classData=u({De:0},"scala.collection.immutable.Stream$$hash$colon$colon$",{De:1,c:1});var Lb=void 0;function wd(){}wd.prototype=new v;wd.prototype.constructor=wd;wd.prototype.b=function(){return this};wd.prototype.$classData=u({Fe:0},"scala.collection.immutable.StringOps$",{Fe:1,c:1});var xd=void 0;function yd(){this.da=!1;this.Bb=this.Ka=this.ra=null;this.Xa=!1;this.Mb=this.Db=0}yd.prototype=new v;yd.prototype.constructor=yd;
+yd.prototype.b=function(){zd=this;this.ra=(this.da=!!(k.ArrayBuffer&&k.Int32Array&&k.Float32Array&&k.Float64Array))?new k.ArrayBuffer(8):null;this.Ka=this.da?new k.Int32Array(this.ra,0,2):null;this.da&&new k.Float32Array(this.ra,0,2);this.Bb=this.da?new k.Float64Array(this.ra,0,1):null;if(this.da)this.Ka[0]=16909060,a=1===((new k.Int8Array(this.ra,0,8))[0]|0);else var a=!0;this.Db=(this.Xa=a)?0:1;this.Mb=this.Xa?1:0;return this};
+function Ca(a,b){var c=b|0;if(c===b&&-Infinity!==1/b)return c;if(a.da)a.Bb[0]=b,a=(new z).K(a.Ka[a.Mb]|0,a.Ka[a.Db]|0);else{if(b!==b)a=!1,b=2047,c=+k.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>=+k.Math.pow(2,-1022)){b=+k.Math.pow(2,52);var c=+k.Math.log(d)/.6931471805599453,c=+k.Math.floor(c)|0,c=1023>c?c:1023,e=+k.Math.pow(2,c);e>d&&(c=-1+c|0,e/=2);e=d/e*b;d=+k.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/+k.Math.pow(2,-1074),c=+k.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 z).K(c|0,(a?-2147483648:0)|(b|0)<<20|c/4294967296|0)}return a.q^a.r}yd.prototype.$classData=u({Ue:0},"scala.scalajs.runtime.Bits$",{Ue:1,c:1});var zd=void 0;function Da(){zd||(zd=(new yd).b());return zd}function Ad(){this.m=!1}Ad.prototype=new v;Ad.prototype.constructor=Ad;Ad.prototype.b=function(){return this};
+function Aa(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}Ad.prototype.$classData=u({We:0},"scala.scalajs.runtime.RuntimeString$",{We:1,c:1});var Bd=void 0;function Ba(){Bd||(Bd=(new Ad).b());return Bd}function Cd(){}Cd.prototype=new v;Cd.prototype.constructor=Cd;Cd.prototype.b=function(){return this};function Dd(a,b){return Ed(b)?b.S:b}function Fd(a,b){return b&&b.$classData&&b.$classData.l.u?b:(new Gd).H(b)}
+Cd.prototype.$classData=u({Xe:0},"scala.scalajs.runtime.package$",{Xe:1,c:1});var Hd=void 0;function Id(){Hd||(Hd=(new Cd).b());return Hd}function Jd(){}Jd.prototype=new v;Jd.prototype.constructor=Jd;Jd.prototype.b=function(){return this};function Kd(a,b){if(Ld(b))return a.G===b.G;if(Sd(b)){if("number"===typeof b)return+b===a.G;if(q(b)){b=Ja(b);var c=b.r;a=a.G;return b.q===a&&c===a>>31}return null===b?null===a:ya(b,a)}return null===a&&null===b}
+function Td(a,b,c){if(b===c)c=!0;else if(Sd(b))a:if(Sd(c))c=Ud(b,c);else{if(Ld(c)){if("number"===typeof b){c=+b===c.G;break a}if(q(b)){a=Ja(b);b=a.r;c=c.G;c=a.q===c&&b===c>>31;break a}}c=null===b?null===c:ya(b,c)}else c=Ld(b)?Kd(b,c):null===b?null===c:ya(b,c);return c}
+function Ud(a,b){if("number"===typeof a){a=+a;if("number"===typeof b)return a===+b;if(q(b)){var c=Ja(b);b=c.q;c=c.r;return a===Vd(r(),b,c)}return b&&b.$classData&&b.$classData.l.Cd?b.x(a):!1}if(q(a)){c=Ja(a);a=c.q;c=c.r;if(q(b)){b=Ja(b);var d=b.r;return a===b.q&&c===d}return"number"===typeof b?(b=+b,Vd(r(),a,c)===b):b&&b.$classData&&b.$classData.l.Cd?b.x((new z).K(a,c)):!1}return null===a?null===b:ya(a,b)}Jd.prototype.$classData=u({$e:0},"scala.runtime.BoxesRunTime$",{$e:1,c:1});var Wd=void 0;
+function Xd(){Wd||(Wd=(new Jd).b());return Wd}var Yd=u({cf:0},"scala.runtime.Null$",{cf:1,c:1});function Zd(){}Zd.prototype=new v;Zd.prototype.constructor=Zd;Zd.prototype.b=function(){return this};Zd.prototype.$classData=u({df:0},"scala.runtime.ScalaRunTime$",{df:1,c:1});var $d=void 0;function ae(){}ae.prototype=new v;ae.prototype.constructor=ae;ae.prototype.b=function(){return this};
+function ed(a,b){if(null===b)return 0;if("number"===typeof b){a=+b;b=Fa(a);if(b===a)a=b;else{var c=r();b=be(c,a);c=c.o;a=Vd(r(),b,c)===a?b^c:Ca(Da(),a)}return a}return q(b)?(a=Ja(b),b=(new z).K(a.q,a.r),a=b.q,b=b.r,b===a>>31?a:a^b):za(b)}ae.prototype.$classData=u({ff:0},"scala.runtime.Statics$",{ff:1,c:1});var ce=void 0;function fd(){ce||(ce=(new ae).b());return ce}function de(){}de.prototype=new v;de.prototype.constructor=de;function ee(){}ee.prototype=de.prototype;
+function Sd(a){return!!(a&&a.$classData&&a.$classData.l.W||"number"===typeof a)}function B(){this.n=null}B.prototype=new v;B.prototype.constructor=B;function fe(){}fe.prototype=B.prototype;B.prototype.Ha=function(){if(void 0===k.Error.captureStackTrace){try{var a={}.undef()}catch(b){if(a=Fd(Id(),b),null!==a)if(Ed(a))a=a.S;else throw Dd(Id(),a);else throw b;}this.stackdata=a}else k.Error.captureStackTrace(this),this.stackdata=this;return this};B.prototype.eb=function(){return this.n};
+B.prototype.h=function(){var a=$a(la(this)),b=this.eb();return null===b?a:a+": "+b};B.prototype.s=function(a,b,c,d){this.n=a;d&&this.Ha();return this};function ge(){}ge.prototype=new v;ge.prototype.constructor=ge;function he(){}he.prototype=ge.prototype;ge.prototype.Ia=function(a){ie(this,a);return this};function je(){this.Fb=this.Xb=null;this.Yb=this.Zb=0;this.Y=this.Gb=this.hb=null;this.Za=!1}je.prototype=new v;je.prototype.constructor=je;
+function ke(a){if(a.Za){a.Y=a.hb.exec(a.Gb);if(null!==a.Y){var b=a.Y[0];if(void 0===b)throw(new C).e("undefined.get");if(null===b)throw(new le).b();""===b&&(b=a.hb,b.lastIndex=1+(b.lastIndex|0)|0)}else a.Za=!1;w();return null!==a.Y}return!1}function me(a){if(null===a.Y)throw(new ne).e("No match available");return a.Y}function oe(a){var b=me(a).index|0;a=me(a)[0];if(void 0===a)throw(new C).e("undefined.get");return b+(a.length|0)|0}
+je.prototype.$classData=u({jd:0},"java.util.regex.Matcher",{jd:1,c:1,mf:1});function pe(){}pe.prototype=new v;pe.prototype.constructor=pe;pe.prototype.b=function(){return this};pe.prototype.$classData=u({ud:0},"scala.Predef$$anon$3",{ud:1,c:1,pc:1});function rb(){}rb.prototype=new v;rb.prototype.constructor=rb;rb.prototype.b=function(){return this};rb.prototype.h=function(){return"object AnyRef"};rb.prototype.$classData=u({Ed:0},"scala.package$$anon$1",{Ed:1,c:1,tf:1});function qe(){this.tb=0}
+qe.prototype=new $c;qe.prototype.constructor=qe;qe.prototype.b=function(){re=this;this.tb=Aa(Ba(),"Seq");Aa(Ba(),"Map");Aa(Ba(),"Set");return this};function se(a){var b=dd();if(a&&a.$classData&&a.$classData.l.ve){for(b=b.tb;!a.i();)te();a=bd(b^0)}else a=gd(b,a,b.tb);return a}qe.prototype.$classData=u({ce:0},"scala.util.hashing.MurmurHash3$",{ce:1,yf:1,c:1});var re=void 0;function dd(){re||(re=(new qe).b());return re}function ue(){}ue.prototype=new vd;ue.prototype.constructor=ue;function ve(){}
+ve.prototype=ue.prototype;function D(){}D.prototype=new vd;D.prototype.constructor=D;function we(){}we.prototype=D.prototype;D.prototype.b=function(){(new xe).Ja(this);return this};function ye(){}ye.prototype=new v;ye.prototype.constructor=ye;function ze(){}ze.prototype=ye.prototype;ye.prototype.Ja=function(a){if(null===a)throw Dd(Id(),null);return this};function Ae(){}Ae.prototype=new td;Ae.prototype.constructor=Ae;function Be(){}Be.prototype=Ae.prototype;function Ce(){}Ce.prototype=new v;
+Ce.prototype.constructor=Ce;Ce.prototype.b=function(){return this};Ce.prototype.P=function(){return this};Ce.prototype.h=function(){return"\x3cfunction1\x3e"};Ce.prototype.$classData=u({xe:0},"scala.collection.immutable.List$$anon$1",{xe:1,c:1,ia:1});function Re(){}Re.prototype=new v;Re.prototype.constructor=Re;function Se(){}Se.prototype=Re.prototype;Re.prototype.h=function(){return"\x3cfunction1\x3e"};function Te(){this.z=!1}Te.prototype=new v;Te.prototype.constructor=Te;
+Te.prototype.h=function(){return""+this.z};function pd(){var a=new Te;a.z=!0;return a}Te.prototype.$classData=u({Ye:0},"scala.runtime.BooleanRef",{Ye:1,c:1,d:1});var wa=u({Ze:0},"scala.runtime.BoxedUnit",{Ze:1,c:1,d:1},void 0,void 0,function(a){return void 0===a});function hd(){this.z=0}hd.prototype=new v;hd.prototype.constructor=hd;hd.prototype.h=function(){return""+this.z};hd.prototype.va=function(a){this.z=a;return this};hd.prototype.$classData=u({af:0},"scala.runtime.IntRef",{af:1,c:1,d:1});
+function Ue(){this.Vb=this.Ub=this.Qb=this.Wb=this.Sb=this.Rb=this.Tb=0;this.Pb=null;this.j=0}Ue.prototype=new v;Ue.prototype.constructor=Ue;
+Ue.prototype.b=function(){Ve=this;this.Tb=624;this.j=(1|this.j)<<24>>24;this.Rb=397;this.j=(2|this.j)<<24>>24;this.Sb=-1727483681;this.j=(4|this.j)<<24>>24;this.Wb=-2147483648;this.j=(8|this.j)<<24>>24;this.Qb=2147483647;this.j=(16|this.j)<<24>>24;this.Ub=-1658038656;this.j=(32|this.j)<<24>>24;this.Vb=-272236544;this.j=(64|this.j)<<24>>24;this.Pb="0";this.j=(128|this.j)<<24>>24;return this};
+function E(){var a=We();if(0===(16&a.j)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 146");return a.Qb}function G(){var a=We();if(0===(2&a.j)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 143");return a.Rb}
+function J(){var a=We();if(0===(32&a.j)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 147");return a.Ub}function K(){var a=We();if(0===(8&a.j)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 145");return a.Wb}
+function L(){var a=We();if(0===(1&a.j)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 142");return a.Tb}function M(){var a=We();if(0===(64&a.j)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 148");return a.Vb}
+function Xe(){var a=We();if(0===(128&a.j)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 149");return a.Pb}Ue.prototype.$classData=u({Dc:0},"org.nlogo.tortoise.engine.MersenneTwisterFast$",{Dc:1,c:1,f:1,d:1});var Ve=void 0;function We(){Ve||(Ve=(new Ue).b());return Ve}var va=u({Mc:0},"java.lang.Boolean",{Mc:1,c:1,d:1,L:1},void 0,void 0,function(a){return"boolean"===typeof a});function Ye(){this.G=0}Ye.prototype=new v;
+Ye.prototype.constructor=Ye;Ye.prototype.x=function(a){return Ld(a)?this.G===a.G:!1};Ye.prototype.h=function(){return k.String.fromCharCode(this.G)};function Ze(a){var b=new Ye;b.G=a;return b}Ye.prototype.w=function(){return this.G};function Ld(a){return!!(a&&a.$classData&&a.$classData.l.Kb)}Ye.prototype.$classData=u({Kb:0},"java.lang.Character",{Kb:1,c:1,d:1,L:1});function $e(){this.Nb=null;this.m=0}$e.prototype=new v;$e.prototype.constructor=$e;$e.prototype.b=function(){return this};
+function af(a){if(0===(16&a.m)<<24>>24&&0===(16&a.m)<<24>>24){var b=bf([1632,1776,1984,2406,2534,2662,2790,2918,3046,3174,3302,3430,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,42528,43216,43264,43472,43600,44016,65296,66720,69734,69872,69942,70096,71360,120782,120792,120802,120812,120822]),c=b.Q.length|0,c=ia(Qa(Va),[c]),d;d=0;for(b=cf(b,b.Q.length|0);b.A();){var e=b.M();c.a[d]=e|0;d=1+d|0}a.Nb=c;a.m=(16|a.m)<<24>>24}return a.Nb}
+$e.prototype.$classData=u({Oc:0},"java.lang.Character$",{Oc:1,c:1,f:1,d:1});var df=void 0;function ef(){this.ab=this.bb=null;this.m=0}ef.prototype=new v;ef.prototype.constructor=ef;ef.prototype.b=function(){return this};function ff(a){0===(1&a.m)<<24>>24&&(a.bb=new k.RegExp("^[\\x00-\\x20]*([+-]?(?:NaN|Infinity|(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?)[fFdD]?)[\\x00-\\x20]*$"),a.m=(1|a.m)<<24>>24);return a.bb}ef.prototype.ja=function(a){throw(new gf).e('For input string: "'+a+'"');};
+function hf(a){0===(2&a.m)<<24>>24&&(a.ab=new k.RegExp("^[\\x00-\\x20]*([+-]?)0[xX]([0-9A-Fa-f]*)\\.?([0-9A-Fa-f]*)[pP]([+-]?\\d+)[fFdD]?[\\x00-\\x20]*$"),a.m=(2|a.m)<<24>>24);return a.ab}ef.prototype.$classData=u({Rc:0},"java.lang.Double$",{Rc:1,c:1,f:1,d:1});var jf=void 0;function kf(){this.n=null}kf.prototype=new fe;kf.prototype.constructor=kf;function lf(){}lf.prototype=kf.prototype;function mf(){this.n=null}mf.prototype=new fe;mf.prototype.constructor=mf;function nf(){}nf.prototype=mf.prototype;
+function of(){}of.prototype=new v;of.prototype.constructor=of;of.prototype.b=function(){return this};of.prototype.ja=function(a){throw(new gf).e('For input string: "'+a+'"');};
+function pf(a,b){var c=null===b?0:b.length|0;0===c&&a.ja(b);var d=65535&(b.charCodeAt(0)|0),e=45===d,h=e?2147483648:2147483647,d=e||43===d?1:0;d>=(b.length|0)&&a.ja(b);for(var l=0;d!==c;){df||(df=(new $e).b());var p;p=df;var t=65535&(b.charCodeAt(d)|0);if(256>t)p=48<=t&&57>=t?-48+t|0:65<=t&&90>=t?-55+t|0:97<=t&&122>=t?-87+t|0:-1;else if(65313<=t&&65338>=t)p=-65303+t|0;else if(65345<=t&&65370>=t)p=-65335+t|0;else{kb||(kb=(new jb).b());var x;a:{x=af(p);var A=t,H=0,R=x.a.length;for(;;){if(H===R){x=-1-
+H|0;break a}var S=(H+R|0)>>>1|0,ca=x.a[S];if(A<ca)R=S;else{if(Td(Xd(),A,ca)){x=S;break a}H=1+S|0}}}x=0>x?-2-x|0:x;0>x?p=-1:(p=t-af(p).a[x]|0,p=9<p?-1:p)}p=10>p?p:-1;l=10*l+p;(-1===p||l>h)&&a.ja(b);d=1+d|0}return e?-l|0:l|0}of.prototype.$classData=u({Wc:0},"java.lang.Integer$",{Wc:1,c:1,f:1,d:1});var qf=void 0;function rf(){qf||(qf=(new of).b());return qf}function sf(){}sf.prototype=new v;sf.prototype.constructor=sf;sf.prototype.b=function(){return this};
+function tf(){uf||(uf=(new sf).b());var a=vf(),b=vf();return(new z).K(b,a)}function vf(){var a=4294967296*+k.Math.random();return Fa(-2147483648+ +k.Math.floor(a))}sf.prototype.$classData=u({id:0},"java.util.Random$",{id:1,c:1,f:1,d:1});var uf=void 0;function wf(){this.wb=this.X=null}wf.prototype=new v;wf.prototype.constructor=wf;wf.prototype.h=function(){return this.wb};wf.prototype.$classData=u({kd:0},"java.util.regex.Pattern",{kd:1,c:1,f:1,d:1});function xf(){this.Hb=this.Ib=null}
+xf.prototype=new v;xf.prototype.constructor=xf;xf.prototype.b=function(){yf=this;this.Ib=new k.RegExp("^\\\\Q(.|\\n|\\r)\\\\E$");this.Hb=new k.RegExp("^\\(\\?([idmsuxU]*)(?:-([idmsuxU]*))?\\)");return this};function zf(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="\\"+Ze(d);break;default:d=Ze(d)}b=""+b+d;c=1+c|0}return b}
+function Af(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 N).e("bad in-pattern flag");}}xf.prototype.$classData=u({ld:0},"java.util.regex.Pattern$",{ld:1,c:1,f:1,d:1});var yf=void 0;function Bf(){yf||(yf=(new xf).b());return yf}function Cf(){}Cf.prototype=new v;Cf.prototype.constructor=Cf;Cf.prototype.b=function(){return this};
+function cb(){Df||(Df=(new Cf).b());var a=k.java;return null===a?w():(new y).H(a)}Cf.prototype.$classData=u({qd:0},"scala.Option$",{qd:1,c:1,f:1,d:1});var Df=void 0;function Ef(){}Ef.prototype=new mb;Ef.prototype.constructor=Ef;Ef.prototype.b=function(){Ff=this;qb||(qb=(new pb).b());Ab||(Ab=(new Bb).b());Gf||(Gf=(new Hf).b());If||(If=(new Jf).b());Sc||(Sc=(new Rc).b());Sc||(Sc=(new Rc).b());Kf||(Kf=(new Lf).b());(new pe).b();(new Mf).b();(new Nf).b();return this};
+function Of(a,b){if(!b)throw(new Pf).H("assertion failed");}Ef.prototype.$classData=u({rd:0},"scala.Predef$",{rd:1,pf:1,c:1,nf:1});var Ff=void 0;function Qf(){Ff||(Ff=(new Ef).b());return Ff}function Wb(){}Wb.prototype=new v;Wb.prototype.constructor=Wb;Wb.prototype.b=function(){return this};Wb.prototype.$classData=u({wd:0},"scala.math.Fractional$",{wd:1,c:1,f:1,d:1});var Vb=void 0;function Yb(){}Yb.prototype=new v;Yb.prototype.constructor=Yb;Yb.prototype.b=function(){return this};
+Yb.prototype.$classData=u({xd:0},"scala.math.Integral$",{xd:1,c:1,f:1,d:1});var Xb=void 0;function $b(){}$b.prototype=new v;$b.prototype.constructor=$b;$b.prototype.b=function(){return this};$b.prototype.$classData=u({yd:0},"scala.math.Numeric$",{yd:1,c:1,f:1,d:1});var Zb=void 0;function dc(){}dc.prototype=new v;dc.prototype.constructor=dc;dc.prototype.b=function(){return this};dc.prototype.$classData=u({Xd:0},"scala.util.Either$",{Xd:1,c:1,f:1,d:1});var cc=void 0;function fc(){}fc.prototype=new v;
+fc.prototype.constructor=fc;fc.prototype.b=function(){return this};fc.prototype.h=function(){return"Left"};fc.prototype.$classData=u({Yd:0},"scala.util.Left$",{Yd:1,c:1,f:1,d:1});var ec=void 0;function hc(){}hc.prototype=new v;hc.prototype.constructor=hc;hc.prototype.b=function(){return this};hc.prototype.h=function(){return"Right"};hc.prototype.$classData=u({Zd:0},"scala.util.Right$",{Zd:1,c:1,f:1,d:1});var gc=void 0;function Rf(){this.vb=!1}Rf.prototype=new v;Rf.prototype.constructor=Rf;
+Rf.prototype.b=function(){this.vb=!1;return this};Rf.prototype.$classData=u({be:0},"scala.util.control.NoStackTrace$",{be:1,c:1,f:1,d:1});var Sf=void 0;function Tf(){}Tf.prototype=new ze;Tf.prototype.constructor=Tf;Tf.prototype.b=function(){ye.prototype.Ja.call(this,yb());return this};Tf.prototype.$classData=u({ge:0},"scala.collection.IndexedSeq$$anon$1",{ge:1,re:1,c:1,pc:1});function Uf(){}Uf.prototype=new we;Uf.prototype.constructor=Uf;function Vf(){}Vf.prototype=Uf.prototype;
+function xe(){this.Aa=null}xe.prototype=new ze;xe.prototype.constructor=xe;xe.prototype.Ja=function(a){if(null===a)throw Dd(Id(),null);this.Aa=a;ye.prototype.Ja.call(this,a);return this};xe.prototype.$classData=u({qe:0},"scala.collection.generic.GenTraversableFactory$$anon$1",{qe:1,re:1,c:1,pc:1});function Wf(){}Wf.prototype=new Be;Wf.prototype.constructor=Wf;function Xf(){}Xf.prototype=Wf.prototype;function Eb(){}Eb.prototype=new v;Eb.prototype.constructor=Eb;Eb.prototype.b=function(){return this};
+Eb.prototype.h=function(){return"::"};Eb.prototype.$classData=u({ue:0},"scala.collection.immutable.$colon$colon$",{ue:1,c:1,f:1,d:1});var Db=void 0;function Sb(){}Sb.prototype=new v;Sb.prototype.constructor=Sb;Sb.prototype.b=function(){return this};Sb.prototype.$classData=u({Ae:0},"scala.collection.immutable.Range$",{Ae:1,c:1,f:1,d:1});var Rb=void 0;function Qb(){}Qb.prototype=new v;Qb.prototype.constructor=Qb;Qb.prototype.b=function(){return this};
+Qb.prototype.$classData=u({Qe:0},"scala.collection.mutable.StringBuilder$",{Qe:1,c:1,f:1,d:1});var Pb=void 0;function Yf(){this.Ab=null}Yf.prototype=new Se;Yf.prototype.constructor=Yf;Yf.prototype.P=function(a){return(0,this.Ab)(a)};function id(a){var b=new Yf;b.Ab=a;return b}Yf.prototype.$classData=u({Te:0},"scala.scalajs.runtime.AnonFunction1",{Te:1,Vf:1,c:1,ia:1});function Zf(){this.o=0;this.pa=null}Zf.prototype=new v;Zf.prototype.constructor=Zf;
+Zf.prototype.b=function(){$f=this;this.pa=(new z).K(0,0);return this};function ag(a,b,c){return 0===(-2097152&c)?""+(4294967296*c+ +(b>>>0)):bg(a,b,c,1E9,0,2)}function Vd(a,b,c){return 0>c?-(4294967296*+((0!==b?~c:-c|0)>>>0)+ +((-b|0)>>>0)):4294967296*c+ +(b>>>0)}function be(a,b){if(-9223372036854775808>b)return a.o=-2147483648,0;if(0x7fffffffffffffff<=b)return a.o=2147483647,-1;var c=b|0,d=b/4294967296|0;a.o=0>b&&0!==c?-1+d|0:d;return c}
+function bg(a,b,c,d,e,h){var l=(0!==e?da(e):32+da(d)|0)-(0!==c?da(c):32+da(b)|0)|0,p=l,t=0===(32&p)?d<<p:0,x=0===(32&p)?(d>>>1|0)>>>(31-p|0)|0|e<<p:d<<p,p=b,A=c;for(b=c=0;0<=l&&0!==(-2097152&A);){var H=p,R=A,S=t,ca=x;if(R===ca?(-2147483648^H)>=(-2147483648^S):(-2147483648^R)>=(-2147483648^ca))H=A,R=x,A=p-t|0,H=(-2147483648^A)>(-2147483648^p)?-1+(H-R|0)|0:H-R|0,p=A,A=H,32>l?c|=1<<l:b|=1<<l;l=-1+l|0;H=x>>>1|0;t=t>>>1|0|x<<31;x=H}l=A;if(l===e?(-2147483648^p)>=(-2147483648^d):(-2147483648^l)>=(-2147483648^
+e))l=4294967296*A+ +(p>>>0),d=4294967296*e+ +(d>>>0),1!==h&&(x=l/d,e=x/4294967296|0,t=c,c=x=t+(x|0)|0,b=(-2147483648^x)<(-2147483648^t)?1+(b+e|0)|0:b+e|0),0!==h&&(d=l%d,p=d|0,A=d/4294967296|0);if(0===h)return a.o=b,c;if(1===h)return a.o=A,p;a=""+p;return""+(4294967296*b+ +(c>>>0))+"000000000".substring(a.length|0)+a}
+function cg(a,b,c,d,e){if(0===(d|e))throw(new dg).e("/ by zero");if(c===b>>31){if(e===d>>31){if(-1!==d){var h=b%d|0;a.o=h>>31;return h}return a.o=0}if(-2147483648===b&&-2147483648===d&&0===e)return a.o=0;a.o=c;return b}if(h=0>c){var l=-b|0;c=0!==b?~c:-c|0}else l=b;0>e?(b=-d|0,d=0!==d?~e:-e|0):(b=d,d=e);e=c;0===(-2097152&e)?0===(-2097152&d)?(l=(4294967296*e+ +(l>>>0))%(4294967296*d+ +(b>>>0)),a.o=l/4294967296|0,l|=0):a.o=e:0===d&&0===(b&(-1+b|0))?(a.o=0,l&=-1+b|0):0===b&&0===(d&(-1+d|0))?a.o=e&(-1+
+d|0):l=bg(a,l,e,b,d,1)|0;return h?(h=a.o,a.o=0!==l?~h:-h|0,-l|0):l}Zf.prototype.$classData=u({Ve:0},"scala.scalajs.runtime.RuntimeLong$",{Ve:1,c:1,f:1,d:1});var $f=void 0;function r(){$f||($f=(new Zf).b());return $f}var eg=u({bf:0},"scala.runtime.Nothing$",{bf:1,u:1,c:1,d:1});function fg(){}fg.prototype=new v;fg.prototype.constructor=fg;function gg(){}gg.prototype=fg.prototype;var ma=u({Ec:0},"java.lang.String",{Ec:1,c:1,d:1,Jb:1,L:1},void 0,void 0,function(a){return"string"===typeof a});
+function Pf(){this.n=null}Pf.prototype=new lf;Pf.prototype.constructor=Pf;Pf.prototype.H=function(a){B.prototype.s.call(this,""+a,0,0,!0);return this};Pf.prototype.$classData=u({Kc:0},"java.lang.AssertionError",{Kc:1,kf:1,u:1,c:1,d:1});
+var pa=u({Nc:0},"java.lang.Byte",{Nc:1,W:1,c:1,d:1,L:1},void 0,void 0,function(a){return na(a)}),ua=u({Qc:0},"java.lang.Double",{Qc:1,W:1,c:1,d:1,L:1},void 0,void 0,function(a){return"number"===typeof a}),ta=u({Sc:0},"java.lang.Float",{Sc:1,W:1,c:1,d:1,L:1},void 0,void 0,function(a){return"number"===typeof a}),sa=u({Vc:0},"java.lang.Integer",{Vc:1,W:1,c:1,d:1,L:1},void 0,void 0,function(a){return"number"===typeof a&&(a|0)===a&&1/a!==1/-0}),xa=u({Zc:0},"java.lang.Long",{Zc:1,W:1,c:1,d:1,L:1},void 0,
+void 0,function(a){return q(a)});function hg(){this.n=null}hg.prototype=new nf;hg.prototype.constructor=hg;function O(){}O.prototype=hg.prototype;hg.prototype.e=function(a){B.prototype.s.call(this,a,0,0,!0);return this};hg.prototype.$classData=u({B:0},"java.lang.RuntimeException",{B:1,J:1,u:1,c:1,d:1});var ra=u({cd:0},"java.lang.Short",{cd:1,W:1,c:1,d:1,L:1},void 0,void 0,function(a){return qa(a)});function ig(){this.t=null}ig.prototype=new v;ig.prototype.constructor=ig;f=ig.prototype;
+f.b=function(){this.t="";return this};f.vc=function(a,b){return this.t.substring(a,b)};f.h=function(){return this.t};f.va=function(a){ig.prototype.b.call(this);if(0>a)throw(new jg).b();return this};f.C=function(){return this.t.length|0};f.$classData=u({dd:0},"java.lang.StringBuilder",{dd:1,c:1,Jb:1,Ic:1,d:1});function kg(){}kg.prototype=new v;kg.prototype.constructor=kg;function lg(){}lg.prototype=kg.prototype;kg.prototype.h=function(){return"\x3cfunction1\x3e"};function mg(){}mg.prototype=new v;
+mg.prototype.constructor=mg;function ng(){}ng.prototype=mg.prototype;mg.prototype.h=function(){return"\x3cfunction1\x3e"};function Ub(){}Ub.prototype=new v;Ub.prototype.constructor=Ub;Ub.prototype.b=function(){return this};Ub.prototype.$classData=u({vd:0},"scala.math.Equiv$",{vd:1,c:1,uf:1,f:1,d:1});var Tb=void 0;function bc(){}bc.prototype=new v;bc.prototype.constructor=bc;bc.prototype.b=function(){return this};bc.prototype.$classData=u({Bd:0},"scala.math.Ordering$",{Bd:1,c:1,vf:1,f:1,d:1});
+var ac=void 0;function Lf(){}Lf.prototype=new v;Lf.prototype.constructor=Lf;Lf.prototype.b=function(){return this};Lf.prototype.h=function(){return"\x3c?\x3e"};Lf.prototype.$classData=u({Vd:0},"scala.reflect.NoManifest$",{Vd:1,c:1,y:1,f:1,d:1});var Kf=void 0;function og(){}og.prototype=new v;og.prototype.constructor=og;function pg(){}pg.prototype=og.prototype;og.prototype.h=function(){return(this.A()?"non-empty":"empty")+" iterator"};og.prototype.V=function(a){for(;this.A();)a.P(this.M())};
+function qg(){}qg.prototype=new ve;qg.prototype.constructor=qg;function rg(){}rg.prototype=qg.prototype;function Hf(){}Hf.prototype=new Xf;Hf.prototype.constructor=Hf;Hf.prototype.b=function(){return this};Hf.prototype.$classData=u({ye:0},"scala.collection.immutable.Map$",{ye:1,Ff:1,Hf:1,Df:1,c:1});var Gf=void 0;function z(){this.r=this.q=0}z.prototype=new ee;z.prototype.constructor=z;f=z.prototype;f.x=function(a){return q(a)?this.q===a.q&&this.r===a.r:!1};
+f.h=function(){var a=r(),b=this.q,c=this.r;return c===b>>31?""+b:0>c?"-"+ag(a,-b|0,0!==b?~c:-c|0):ag(a,b,c)};f.K=function(a,b){this.q=a;this.r=b;return this};f.va=function(a){z.prototype.K.call(this,a,a>>31);return this};f.w=function(){return this.q^this.r};function q(a){return!!(a&&a.$classData&&a.$classData.l.uc)}f.$classData=u({uc:0},"scala.scalajs.runtime.RuntimeLong",{uc:1,W:1,c:1,d:1,L:1});function sg(){}sg.prototype=new gg;sg.prototype.constructor=sg;function tg(){}tg.prototype=sg.prototype;
+sg.prototype.Fc=function(){return this};function P(){this.sc=r().pa;this.Ca=null;this.gb=0;this.Ba=null;this.Wa=0;this.Va=!1;this.g=0}P.prototype=new he;P.prototype.constructor=P;P.prototype.Ia=function(a){this.sc=a;ge.prototype.Ia.call(this,tf());this.Ca=null;this.g=(1|this.g)<<24>>24;this.gb=0;this.g=(2|this.g)<<24>>24;this.Ba=null;this.g=(4|this.g)<<24>>24;this.Wa=0;this.g=(8|this.g)<<24>>24;this.Va=!1;this.g=(16|this.g)<<24>>24;ie(this,a);return this};
+function Q(a){if(0===(2&a.g)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 161");return a.gb}function T(a){if(0===(1&a.g)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 160");return a.Ca}
+function ug(a){if(0===(8&a.g)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 163");return a.Wa}function vg(a){if(0===(16&a.g)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 164");return a.Va}
+function V(a){if(0===(4&a.g)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 162");return a.Ba}function wg(a,b){a.Va=b;a.g=(16|a.g)<<24>>24}function xg(a,b){a.Wa=b;a.g=(8|a.g)<<24>>24}function W(a,b){a.gb=b;a.g=(2|a.g)<<24>>24}
+function ie(a,b){wg(a,!1);xg(a,0);var c=ia(Qa(Va),[L()]);a.Ca=c;a.g=(1|a.g)<<24>>24;c=ia(Qa(Va),[2]);a.Ba=c;a.g=(4|a.g)<<24>>24;V(a).a[0]=0;var c=V(a).a,d=We();if(0===(4&d.j)<<24>>24)throw(new F).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 144");c[1]=d.Sb;T(a).a[0]=b.q;for(W(a,1);Q(a)<L();)T(a).a[Q(a)]=m(1812433253,T(a).a[-1+Q(a)|0]^(T(a).a[-1+Q(a)|0]>>>30|0))+Q(a)|0,b=T(a),c=Q(a),b.a[c]=b.a[c],W(a,1+Q(a)|0)}
+P.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(Q(this)>=L()){for(var b=0,c=T(this),d=V(this);b<(L()-G()|0);)a=c.a[b]&K()|c.a[1+b|0]&E(),c.a[b]=c.a[b+G()|0]^(a>>>1|0)^d.a[1&a],b=1+b|0;for(;b<(-1+L()|0);)a=c.a[b]&K()|c.a[1+b|0]&E(),c.a[b]=c.a[b+(G()-L()|0)|0]^(a>>>1|0)^d.a[1&a],b=1+b|0;a=c.a[-1+L()|0]&K()|c.a[0]&E();c.a[-1+L()|0]=c.a[-1+G()|0]^(a>>>1|0)^d.a[1&a];W(this,0)}a=T(this).a[W(this,1+Q(this)|0),-1+Q(this)|
+0];a^=a>>>11|0;a^=a<<7&J();a^=a<<15&M();return a^(a>>>18|0);case 1:a=c[0]|0;if(0>=a)throw(new N).e("n must be positive");if((a&(-a|0))===a){if(Q(this)>=L()){for(var b=0,d=T(this),e=V(this);b<(L()-G()|0);)c=d.a[b]&K()|d.a[1+b|0]&E(),d.a[b]=d.a[b+G()|0]^(c>>>1|0)^e.a[1&c],b=1+b|0;for(;b<(-1+L()|0);)c=d.a[b]&K()|d.a[1+b|0]&E(),d.a[b]=d.a[b+(G()-L()|0)|0]^(c>>>1|0)^e.a[1&c],b=1+b|0;c=d.a[-1+L()|0]&K()|d.a[0]&E();d.a[-1+L()|0]=d.a[-1+G()|0]^(c>>>1|0)^e.a[1&c];W(this,0)}var c=T(this).a[W(this,1+Q(this)|
+0),-1+Q(this)|0],c=c^(c>>>11|0),c=c^c<<7&J(),c=c^c<<15&M(),b=a>>31,c=(c^(c>>>18|0))>>>1|0,d=c>>31,h=65535&a,e=a>>>16|0,l=65535&c,p=c>>>16|0,t=m(h,l),l=m(e,l),x=m(h,p),h=t+((l+x|0)<<16)|0,t=(t>>>16|0)+x|0,a=(((m(a,d)+m(b,c)|0)+m(e,p)|0)+(t>>>16|0)|0)+(((65535&t)+l|0)>>>16|0)|0,a=h>>>31|0|a<<1}else{do{if(Q(this)>=L()){c=0;d=T(this);for(e=V(this);c<(L()-G()|0);)b=d.a[c]&K()|d.a[1+c|0]&E(),d.a[c]=d.a[c+G()|0]^(b>>>1|0)^e.a[1&b],c=1+c|0;for(;c<(-1+L()|0);)b=d.a[c]&K()|d.a[1+c|0]&E(),d.a[c]=d.a[c+(G()-
+L()|0)|0]^(b>>>1|0)^e.a[1&b],c=1+c|0;b=d.a[-1+L()|0]&K()|d.a[0]&E();d.a[-1+L()|0]=d.a[-1+G()|0]^(b>>>1|0)^e.a[1&b];W(this,0)}b=T(this).a[W(this,1+Q(this)|0),-1+Q(this)|0];b^=b>>>11|0;b^=b<<7&J();b^=b<<15&M();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";}};
+P.prototype.nextGaussian=function(){var a;if(vg(this))wg(this,!1),a=ug(this);else{var b,c;do{var d;if(Q(this)>=L()){a=0;d=T(this);for(c=V(this);a<(L()-G()|0);)b=d.a[a]&K()|d.a[1+a|0]&E(),d.a[a]=d.a[a+G()|0]^(b>>>1|0)^c.a[1&b],a=1+a|0;for(;a<(-1+L()|0);)b=d.a[a]&K()|d.a[1+a|0]&E(),d.a[a]=d.a[a+(G()-L()|0)|0]^(b>>>1|0)^c.a[1&b],a=1+a|0;b=d.a[-1+L()|0]&K()|d.a[0]&E();d.a[-1+L()|0]=d.a[-1+G()|0]^(b>>>1|0)^c.a[1&b];W(this,0)}b=T(this).a[W(this,1+Q(this)|0),-1+Q(this)|0];b^=b>>>11|0;b^=b<<7&J();b^=b<<15&
+M();b^=b>>>18|0;if(Q(this)>=L()){a=0;d=T(this);for(var e=V(this);a<(L()-G()|0);)c=d.a[a]&K()|d.a[1+a|0]&E(),d.a[a]=d.a[a+G()|0]^(c>>>1|0)^e.a[1&c],a=1+a|0;for(;a<(-1+L()|0);)c=d.a[a]&K()|d.a[1+a|0]&E(),d.a[a]=d.a[a+(G()-L()|0)|0]^(c>>>1|0)^e.a[1&c],a=1+a|0;c=d.a[-1+L()|0]&K()|d.a[0]&E();d.a[-1+L()|0]=d.a[-1+G()|0]^(c>>>1|0)^e.a[1&c];W(this,0)}c=T(this).a[W(this,1+Q(this)|0),-1+Q(this)|0];c^=c>>>11|0;c^=c<<7&J();c^=c<<15&M();c^=c>>>18|0;if(Q(this)>=L()){d=0;for(var e=T(this),h=V(this);d<(L()-G()|0);)a=
+e.a[d]&K()|e.a[1+d|0]&E(),e.a[d]=e.a[d+G()|0]^(a>>>1|0)^h.a[1&a],d=1+d|0;for(;d<(-1+L()|0);)a=e.a[d]&K()|e.a[1+d|0]&E(),e.a[d]=e.a[d+(G()-L()|0)|0]^(a>>>1|0)^h.a[1&a],d=1+d|0;a=e.a[-1+L()|0]&K()|e.a[0]&E();e.a[-1+L()|0]=e.a[-1+G()|0]^(a>>>1|0)^h.a[1&a];W(this,0)}a=T(this).a[W(this,1+Q(this)|0),-1+Q(this)|0];a^=a>>>11|0;a^=a<<7&J();a^=a<<15&M();a^=a>>>18|0;if(Q(this)>=L()){for(var h=T(this),l=V(this),e=0;e<(L()-G()|0);)d=h.a[e]&K()|h.a[1+e|0]&E(),h.a[e]=h.a[e+G()|0]^(d>>>1|0)^l.a[1&d],e=1+e|0;for(;e<
+(-1+L()|0);)d=h.a[e]&K()|h.a[1+e|0]&E(),h.a[e]=h.a[e+(G()-L()|0)|0]^(d>>>1|0)^l.a[1&d],e=1+e|0;d=h.a[-1+L()|0]&K()|h.a[0]&E();h.a[-1+L()|0]=h.a[-1+G()|0]^(d>>>1|0)^l.a[1&d];W(this,0)}d=T(this).a[W(this,1+Q(this)|0),-1+Q(this)|0];d^=d>>>11|0;d^=d<<7&J();d^=d<<15&M();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*(Vd(r(),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*(Vd(r(),e,a)/9007199254740992);c=b*b+a*a}while(1<=c||0===c);d=eb();e=eb();h=c;c=-2*+(e.m?e.Ua:bb(e)).log(h)/c;d=+(d.m?d.Ua:bb(d)).sqrt(c);xg(this,a*d);wg(this,!0);a=b*d}return a};
+P.prototype.nextDouble=function(){var a,b;if(Q(this)>=L()){b=0;for(var c=T(this),d=V(this);b<(L()-G()|0);)a=c.a[b]&K()|c.a[1+b|0]&E(),c.a[b]=c.a[b+G()|0]^(a>>>1|0)^d.a[1&a],b=1+b|0;for(;b<(-1+L()|0);)a=c.a[b]&K()|c.a[1+b|0]&E(),c.a[b]=c.a[b+(G()-L()|0)|0]^(a>>>1|0)^d.a[1&a],b=1+b|0;a=c.a[-1+L()|0]&K()|c.a[0]&E();c.a[-1+L()|0]=c.a[-1+G()|0]^(a>>>1|0)^d.a[1&a];W(this,0)}a=T(this).a[W(this,1+Q(this)|0),-1+Q(this)|0];a^=a>>>11|0;a^=a<<7&J();a^=a<<15&M();a^=a>>>18|0;if(Q(this)>=L()){for(var c=0,d=T(this),
+e=V(this);c<(L()-G()|0);)b=d.a[c]&K()|d.a[1+c|0]&E(),d.a[c]=d.a[c+G()|0]^(b>>>1|0)^e.a[1&b],c=1+c|0;for(;c<(-1+L()|0);)b=d.a[c]&K()|d.a[1+c|0]&E(),d.a[c]=d.a[c+(G()-L()|0)|0]^(b>>>1|0)^e.a[1&b],c=1+c|0;b=d.a[-1+L()|0]&K()|d.a[0]&E();d.a[-1+L()|0]=d.a[-1+G()|0]^(b>>>1|0)^e.a[1&b];W(this,0)}b=T(this).a[W(this,1+Q(this)|0),-1+Q(this)|0];b^=b>>>11|0;b^=b<<7&J();b^=b<<15&M();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 Vd(r(),d,a)/9007199254740992};
+P.prototype.nextLong=function(a){var b=+a;a=r();b=be(a,b);a=(new z).K(b,a.o);b=a.r;if(0===b?0===a.q:0>b)throw(new N).e("n must be positive");for(var c,d,e;;){if(Q(this)>=L()){e=0;c=T(this);for(d=V(this);e<(L()-G()|0);)b=c.a[e]&K()|c.a[1+e|0]&E(),c.a[e]=c.a[e+G()|0]^(b>>>1|0)^d.a[1&b],e=1+e|0;for(;e<(-1+L()|0);)b=c.a[e]&K()|c.a[1+e|0]&E(),c.a[e]=c.a[e+(G()-L()|0)|0]^(b>>>1|0)^d.a[1&b],e=1+e|0;b=c.a[-1+L()|0]&K()|c.a[0]&E();c.a[-1+L()|0]=c.a[-1+G()|0]^(b>>>1|0)^d.a[1&b];W(this,0)}b=T(this).a[W(this,
+1+Q(this)|0),-1+Q(this)|0];b^=b>>>11|0;b^=b<<7&J();b^=b<<15&M();b^=b>>>18|0;if(Q(this)>=L()){c=0;d=T(this);for(var h=V(this);c<(L()-G()|0);)e=d.a[c]&K()|d.a[1+c|0]&E(),d.a[c]=d.a[c+G()|0]^(e>>>1|0)^h.a[1&e],c=1+c|0;for(;c<(-1+L()|0);)e=d.a[c]&K()|d.a[1+c|0]&E(),d.a[c]=d.a[c+(G()-L()|0)|0]^(e>>>1|0)^h.a[1&e],c=1+c|0;e=d.a[-1+L()|0]&K()|d.a[0]&E();d.a[-1+L()|0]=d.a[-1+G()|0]^(e>>>1|0)^h.a[1&e];W(this,0)}e=T(this).a[W(this,1+Q(this)|0),-1+Q(this)|0];e^=e>>>11|0;e^=e<<7&J();e^=e<<15&M();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=r();e=cg(b,e,h,a.q,a.r);h=b.o;b=e;e=h;var h=c,l=e;c=h-b|0;d=(-2147483648^c)>(-2147483648^h)?-1+(d-l|0)|0:d-l|0;l=a.r;h=-1+a.q|0;l=-1!==h?l:-1+l|0;if(!(0>((-2147483648^(c+h|0))<(-2147483648^c)?1+(d+l|0)|0:d+l|0)))break}b=(new z).K(b,e);a=b.q;b=b.r;return Vd(r(),a,b)};P.prototype.setSeed=function(a){a|=0;ie(this,(new z).K(a,a>>31))};
+P.prototype.load=function(a){var b;Ba();if(null===a)throw(new le).b();var c,d=Bf().Ib.exec("\\s");if(null!==d){var e=d[1];if(void 0===e)throw(new C).e("undefined.get");var h=(new y).H(yg(new zg,zf(e),0))}else h=w();if(h.i()){var l=Bf().Hb.exec("\\s");if(null!==l){var p=l[0];if(void 0===p)throw(new C).e("undefined.get");var t="\\s".substring(p.length|0),x=l[1];if(void 0===x)var A=0;else{var H=(new X).e(x),R=H.v.length|0,S=0,ca=0;a:for(;;){if(S!==R){var Th=1+S|0,Uh=ca,Ug=H.R(S),Vh=null===Ug?0:Ug.G,
+Wh=Uh|0|Af(Bf(),Vh),S=Th,ca=Wh;continue a}break}A=ca|0}var Vg=l[2];if(void 0===Vg)var Wg=A;else{var Xg=(new X).e(Vg),Xh=Xg.v.length|0,Md=0,De=A;a:for(;;){if(Md!==Xh){var Yh=1+Md|0,Zh=De,Yg=Xg.R(Md),$h=null===Yg?0:Yg.G,ai=(Zh|0)&~Af(Bf(),$h),Md=Yh,De=ai;continue a}break}Wg=De|0}var Nd=(new y).H(yg(new zg,t,Wg))}else Nd=w()}else Nd=h;c=Nd.i()?yg(new zg,"\\s",0):Nd.T();if(null===c)throw(new Ag).H(c);var Zg=c.ha|0,bi=new k.RegExp(c.ga,"g"+(0!==(2&Zg)?"i":"")+(0!==(8&Zg)?"m":"")),Ee=new wf;Ee.X=bi;Ee.wb=
+"\\s";var Tc=ka(a);if(""===Tc){var Fe=bf([""]),ci=Fe.Q.length|0,$g=ia(Qa(ma),[ci]),Od;Od=0;for(var ah=cf(Fe,Fe.Q.length|0);ah.A();){var di=ah.M();$g.a[Od]=di;Od=1+Od|0}b=$g}else{var ei=Tc.length|0,I=new je;I.Xb=Ee;I.Fb=Tc;I.Zb=0;I.Yb=ei;var bh,tc=I.Xb,ch=new k.RegExp(tc.X);bh=ch!==tc.X?ch:new k.RegExp(tc.X.source,(tc.X.global?"g":"")+(tc.X.ignoreCase?"i":"")+(tc.X.multiline?"m":""));I.hb=bh;var dh,Ge=I.Fb,eh=I.Zb,fh=I.Yb;dh="string"===typeof Ge?Ge.substring(eh,fh):Ge.vc(eh,fh);I.Gb=ka(dh);I.Y=null;
+I.Za=!0;w();w();var Pd;Pd=[];for(var He=0,Ie=0;2147483646>Ie&&ke(I);){if(0!==oe(I)){var fi=He,gi=me(I).index|0,gh=Tc.substring(fi,gi);Pd.push(null===gh?null:gh);Ie=1+Ie|0}He=oe(I)}var hh=Tc.substring(He);Pd.push(null===hh?null:hh);var uc;uc=new (Qa(ma).$a)(Pd);for(var La=uc.a.length;0!==La&&""===uc.a[-1+La|0];)La=-1+La|0;if(La===uc.a.length)b=uc;else{var ih=ia(Qa(ma),[La]),Je=La,Ke=uc.a,Le=ih.a;if(Ke!==Le||0>(0+Je|0))for(var U=0;U<Je;U=U+1|0)Le[0+U|0]=Ke[0+U|0];else for(U=Je-1|0;0<=U;U=U-1|0)Le[0+
+U|0]=Ke[0+U|0];b=ih}}var jh=b.a[0];if(jh!==Xe())throw Dd(Id(),(new hg).e('identifier mismatch: expected "'+Xe()+'", got "'+jh+'"'));var hi=V(this),ii=(new X).e(b.a[1]),ji=rf();hi.a[0]=pf(ji,ii.v);var ki=V(this),li=(new X).e(b.a[2]),mi=rf();ki.a[1]=pf(mi,li.v);var ni=(new X).e(b.a[3]),oi=rf();W(this,pf(oi,ni.v));var pi=(new X).e(b.a[4]);jf||(jf=(new ef).b());var Me;var oa=jf,Qd=pi.v,kh=(0===(1&oa.m)<<24>>24?ff(oa):oa.bb).exec(Qd);if(null!==kh){var lh=kh[1];Me=+k.parseFloat(void 0===lh?void 0:lh)}else{var Uc=
+(0===(2&oa.m)<<24>>24?hf(oa):oa.ab).exec(Qd),Rd;if(null!==Uc){var mh=Uc[1],nh=Uc[2],Ne=Uc[3],qi=Uc[4];""===nh&&""===Ne&&oa.ja(Qd);for(var Oe=""+nh+Ne,ri=-((Ne.length|0)<<2)|0,Vc=0;;)if(Vc!==(Oe.length|0)&&48===(65535&(Oe.charCodeAt(Vc)|0)))Vc=1+Vc|0;else break;var Wc=Oe.substring(Vc);if(""===Wc)Rd="-"===mh?-0:0;else{var oh=15<(Wc.length|0),si=oh?Wc.substring(0,15):Wc,ti=ri+(oh?(-15+(Wc.length|0)|0)<<2:0)|0,Pe=+k.parseInt(si,16);Of(Qf(),0!==Pe&&Infinity!==Pe);var ui=+k.parseInt(qi,10),ph=Fa(ui)+ti|
+0,qh=ph/3|0,rh=+k.Math.pow(2,qh),vi=+k.Math.pow(2,ph-(qh<<1)|0),sh=Pe*rh*rh*vi;Rd="-"===mh?-sh:sh}}else Rd=oa.ja(Qd);Me=Rd}xg(this,Me);var Qe=b.a[5];if("true"===Qe)wg(this,!0);else if("false"===Qe)wg(this,!1);else throw Dd(Id(),(new hg).e('expected true or false, got "'+Qe+'"'));for(var vc=0;vc<L();){var wi=T(this),xi=vc,yi=(new X).e(b.a[6+vc|0]),zi=rf();wi.a[xi]=pf(zi,yi.v);vc=1+vc|0}Of(Qf(),b.a.length<=(6+vc|0))};
+P.prototype.save=function(){for(var a=ug(this)===Fa(ug(this))?ug(this)+".0":ug(this),a=(new nd).e(Xe()+" "+V(this).a[0]+" "+V(this).a[1]+" "+Q(this)+" "+a+" "+vg(this)),b=0;b<L();){qd(a," ");var c=T(this).a[b];qd(a,""+c);b=1+b|0}return a.O.t};P.prototype.clone=function(){var a=(new P).Ia(this.sc),b=T(this).yb();a.Ca=b;a.g=(1|a.g)<<24>>24;W(a,Q(this));b=V(this).yb();a.Ba=b;a.g=(4|a.g)<<24>>24;xg(a,ug(this));wg(a,vg(this));return a};
+P.prototype.$classData=u({Cc:0},"org.nlogo.tortoise.engine.MersenneTwisterFast",{Cc:1,lf:1,c:1,d:1,ac:1,fb:1});function dg(){this.n=null}dg.prototype=new O;dg.prototype.constructor=dg;dg.prototype.e=function(a){B.prototype.s.call(this,a,0,0,!0);return this};dg.prototype.$classData=u({Jc:0},"java.lang.ArithmeticException",{Jc:1,B:1,J:1,u:1,c:1,d:1});function N(){this.n=null}N.prototype=new O;N.prototype.constructor=N;function Bg(){}Bg.prototype=N.prototype;
+N.prototype.b=function(){B.prototype.s.call(this,null,0,0,!0);return this};N.prototype.e=function(a){B.prototype.s.call(this,a,0,0,!0);return this};N.prototype.$classData=u({Lb:0},"java.lang.IllegalArgumentException",{Lb:1,B:1,J:1,u:1,c:1,d:1});function ne(){this.n=null}ne.prototype=new O;ne.prototype.constructor=ne;ne.prototype.e=function(a){B.prototype.s.call(this,a,0,0,!0);return this};ne.prototype.$classData=u({Tc:0},"java.lang.IllegalStateException",{Tc:1,B:1,J:1,u:1,c:1,d:1});
+function Y(){this.n=null}Y.prototype=new O;Y.prototype.constructor=Y;Y.prototype.e=function(a){B.prototype.s.call(this,a,0,0,!0);return this};Y.prototype.$classData=u({Uc:0},"java.lang.IndexOutOfBoundsException",{Uc:1,B:1,J:1,u:1,c:1,d:1});function Cg(){}Cg.prototype=new gg;Cg.prototype.constructor=Cg;Cg.prototype.b=function(){return this};Cg.prototype.$classData=u({Yc:0},"java.lang.JSConsoleBasedPrintStream$DummyOutputStream",{Yc:1,Ac:1,c:1,yc:1,Lc:1,zc:1});function jg(){this.n=null}
+jg.prototype=new O;jg.prototype.constructor=jg;jg.prototype.b=function(){B.prototype.s.call(this,null,0,0,!0);return this};jg.prototype.$classData=u({$c:0},"java.lang.NegativeArraySizeException",{$c:1,B:1,J:1,u:1,c:1,d:1});function le(){this.n=null}le.prototype=new O;le.prototype.constructor=le;le.prototype.b=function(){B.prototype.s.call(this,null,0,0,!0);return this};le.prototype.$classData=u({ad:0},"java.lang.NullPointerException",{ad:1,B:1,J:1,u:1,c:1,d:1});function Dg(){this.n=null}
+Dg.prototype=new O;Dg.prototype.constructor=Dg;Dg.prototype.e=function(a){B.prototype.s.call(this,a,0,0,!0);return this};Dg.prototype.$classData=u({fd:0},"java.lang.UnsupportedOperationException",{fd:1,B:1,J:1,u:1,c:1,d:1});function C(){this.n=null}C.prototype=new O;C.prototype.constructor=C;C.prototype.e=function(a){B.prototype.s.call(this,a,0,0,!0);return this};C.prototype.$classData=u({hd:0},"java.util.NoSuchElementException",{hd:1,B:1,J:1,u:1,c:1,d:1});
+function Ag(){this.wa=this.Ob=this.n=null;this.Ya=!1}Ag.prototype=new O;Ag.prototype.constructor=Ag;Ag.prototype.eb=function(){if(!this.Ya&&!this.Ya){var a;if(null===this.wa)a="null";else try{a=ka(this.wa)+" ("+("of class "+$a(la(this.wa)))+")"}catch(b){if(null!==Fd(Id(),b))a="an instance of class "+$a(la(this.wa));else throw b;}this.Ob=a;this.Ya=!0}return this.Ob};Ag.prototype.H=function(a){this.wa=a;B.prototype.s.call(this,null,0,0,!0);return this};
+Ag.prototype.$classData=u({md:0},"scala.MatchError",{md:1,B:1,J:1,u:1,c:1,d:1});function Eg(){}Eg.prototype=new v;Eg.prototype.constructor=Eg;function Fg(){}Fg.prototype=Eg.prototype;function Mf(){}Mf.prototype=new ng;Mf.prototype.constructor=Mf;Mf.prototype.b=function(){return this};Mf.prototype.P=function(a){return a};Mf.prototype.$classData=u({sd:0},"scala.Predef$$anon$1",{sd:1,rf:1,c:1,ia:1,f:1,d:1});function Nf(){}Nf.prototype=new lg;Nf.prototype.constructor=Nf;Nf.prototype.b=function(){return this};
+Nf.prototype.P=function(a){return a};Nf.prototype.$classData=u({td:0},"scala.Predef$$anon$2",{td:1,qf:1,c:1,ia:1,f:1,d:1});function Yc(){this.n=null}Yc.prototype=new fe;Yc.prototype.constructor=Yc;Yc.prototype.b=function(){B.prototype.s.call(this,null,0,0,!0);return this};Yc.prototype.Ha=function(){Sf||(Sf=(new Rf).b());return Sf.vb?B.prototype.Ha.call(this):this};Yc.prototype.$classData=u({$d:0},"scala.util.control.BreakControl",{$d:1,u:1,c:1,d:1,wf:1,xf:1});function vb(){}vb.prototype=new we;
+vb.prototype.constructor=vb;vb.prototype.b=function(){D.prototype.b.call(this);return this};vb.prototype.$classData=u({ie:0},"scala.collection.Iterable$",{ie:1,na:1,ea:1,c:1,oa:1,fa:1});var ub=void 0;function ld(){}ld.prototype=new pg;ld.prototype.constructor=ld;ld.prototype.b=function(){return this};ld.prototype.M=function(){throw(new C).e("next on empty iterator");};ld.prototype.A=function(){return!1};
+ld.prototype.$classData=u({ke:0},"scala.collection.Iterator$$anon$2",{ke:1,ib:1,c:1,nb:1,ca:1,ba:1});function Gg(){this.wc=null}Gg.prototype=new pg;Gg.prototype.constructor=Gg;Gg.prototype.M=function(){if(this.A())te();else return zb().cb.M()};Gg.prototype.A=function(){return!this.wc.i()};Gg.prototype.$classData=u({me:0},"scala.collection.LinearSeqLike$$anon$1",{me:1,ib:1,c:1,nb:1,ca:1,ba:1});function tb(){}tb.prototype=new we;tb.prototype.constructor=tb;
+tb.prototype.b=function(){D.prototype.b.call(this);sb=this;(new Xc).b();return this};tb.prototype.$classData=u({oe:0},"scala.collection.Traversable$",{oe:1,na:1,ea:1,c:1,oa:1,fa:1});var sb=void 0;function Hg(){}Hg.prototype=new rg;Hg.prototype.constructor=Hg;function Ig(){}Ig.prototype=Hg.prototype;function Jg(){this.zb=this.ta=0;this.xc=null}Jg.prototype=new pg;Jg.prototype.constructor=Jg;Jg.prototype.M=function(){var a=this.xc.$(this.ta);this.ta=1+this.ta|0;return a};
+function Kg(a){var b=new Jg;b.xc=a;b.ta=0;b.zb=a.Z();return b}Jg.prototype.A=function(){return this.ta<this.zb};Jg.prototype.$classData=u({ef:0},"scala.runtime.ScalaRunTime$$anon$1",{ef:1,ib:1,c:1,nb:1,ca:1,ba:1});function zg(){this.ha=this.ga=null}zg.prototype=new v;zg.prototype.constructor=zg;f=zg.prototype;f.aa=function(){return"Tuple2"};f.Z=function(){return 2};f.x=function(a){return this===a?!0:a&&a.$classData&&a.$classData.l.xb?Td(Xd(),this.ga,a.ga)&&Td(Xd(),this.ha,a.ha):!1};
+function yg(a,b,c){a.ga=b;a.ha=c;return a}f.$=function(a){a:switch(a){case 0:a=this.ga;break a;case 1:a=this.ha;break a;default:throw(new Y).e(""+a);}return a};f.h=function(){return"("+this.ga+","+this.ha+")"};f.w=function(){return cd(this)};f.ma=function(){return Kg(this)};f.$classData=u({xb:0},"scala.Tuple2",{xb:1,c:1,sf:1,xa:1,k:1,f:1,d:1});function gf(){this.n=null}gf.prototype=new Bg;gf.prototype.constructor=gf;gf.prototype.e=function(a){B.prototype.s.call(this,a,0,0,!0);return this};
+gf.prototype.$classData=u({bd:0},"java.lang.NumberFormatException",{bd:1,Lb:1,B:1,J:1,u:1,c:1,d:1});function Lg(){}Lg.prototype=new Fg;Lg.prototype.constructor=Lg;f=Lg.prototype;f.b=function(){return this};f.aa=function(){return"None"};f.Z=function(){return 0};f.i=function(){return!0};f.T=function(){throw(new C).e("None.get");};f.$=function(a){throw(new Y).e(""+a);};f.h=function(){return"None"};f.w=function(){return 2433880};f.ma=function(){return Kg(this)};
+f.$classData=u({od:0},"scala.None$",{od:1,pd:1,c:1,xa:1,k:1,f:1,d:1});var Mg=void 0;function w(){Mg||(Mg=(new Lg).b());return Mg}function y(){this.za=null}y.prototype=new Fg;y.prototype.constructor=y;f=y.prototype;f.aa=function(){return"Some"};f.Z=function(){return 1};f.x=function(a){return this===a?!0:a&&a.$classData&&a.$classData.l.cc?Td(Xd(),this.za,a.za):!1};f.i=function(){return!1};f.$=function(a){switch(a){case 0:return this.za;default:throw(new Y).e(""+a);}};f.T=function(){return this.za};
+f.h=function(){$d||($d=(new Zd).b());var a=this.ma();return md(a,this.aa()+"(",",")};f.H=function(a){this.za=a;return this};f.w=function(){return cd(this)};f.ma=function(){return Kg(this)};f.$classData=u({cc:0},"scala.Some",{cc:1,pd:1,c:1,xa:1,k:1,f:1,d:1});
+function Ng(a){a=$a(la(a.$b()));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)),l;(l=e)||(l=65535&(a.charCodeAt(h)|0),l=!(90<l&&127>l||65>l));if(l){d=a.substring(h,d);h=c;if(null===h)throw(new le).b();c=""===h?d:""+d+Ze(46)+c;if(e)return c}}}function Og(){}Og.prototype=new Vf;Og.prototype.constructor=Og;function Pg(){}Pg.prototype=Og.prototype;function Jf(){}Jf.prototype=new Ig;Jf.prototype.constructor=Jf;Jf.prototype.b=function(){return this};
+Jf.prototype.$classData=u({Be:0},"scala.collection.immutable.Set$",{Be:1,Gf:1,If:1,Ef:1,ea:1,c:1,fa:1});var If=void 0;function Qg(){}Qg.prototype=new tg;Qg.prototype.constructor=Qg;function Rg(){}Rg.prototype=Qg.prototype;Qg.prototype.Gc=function(){sg.prototype.Fc.call(this);return this};function xb(){}xb.prototype=new Pg;xb.prototype.constructor=xb;xb.prototype.b=function(){D.prototype.b.call(this);return this};
+xb.prototype.$classData=u({ne:0},"scala.collection.Seq$",{ne:1,Sa:1,Ra:1,na:1,ea:1,c:1,oa:1,fa:1});var wb=void 0;function Sg(){}Sg.prototype=new Pg;Sg.prototype.constructor=Sg;function Tg(){}Tg.prototype=Sg.prototype;function th(){}th.prototype=new Rg;th.prototype.constructor=th;function hb(){var a=new th;(new Cg).b();Qg.prototype.Gc.call(a)}th.prototype.$classData=u({Xc:0},"java.lang.JSConsoleBasedPrintStream",{Xc:1,hf:1,gf:1,Ac:1,c:1,yc:1,Lc:1,zc:1,Ic:1});function F(){this.Ma=this.n=null}
+F.prototype=new O;F.prototype.constructor=F;f=F.prototype;f.aa=function(){return"UninitializedFieldError"};f.Z=function(){return 1};f.x=function(a){return this===a?!0:a&&a.$classData&&a.$classData.l.dc?this.Ma===a.Ma:!1};f.$=function(a){switch(a){case 0:return this.Ma;default:throw(new Y).e(""+a);}};f.e=function(a){this.Ma=a;B.prototype.s.call(this,a,0,0,!0);return this};f.w=function(){return cd(this)};f.ma=function(){return Kg(this)};
+f.$classData=u({dc:0},"scala.UninitializedFieldError",{dc:1,B:1,J:1,u:1,c:1,d:1,xa:1,k:1,f:1});function uh(){this.p=null}uh.prototype=new v;uh.prototype.constructor=uh;function Z(){}Z.prototype=uh.prototype;uh.prototype.x=function(a){return this===a};uh.prototype.h=function(){return this.p};uh.prototype.w=function(){return Ea(this)};function vh(){}vh.prototype=new v;vh.prototype.constructor=vh;function wh(){}wh.prototype=vh.prototype;function xh(){}xh.prototype=new Tg;xh.prototype.constructor=xh;
+xh.prototype.b=function(){D.prototype.b.call(this);yh=this;(new Tf).b();return this};xh.prototype.$classData=u({fe:0},"scala.collection.IndexedSeq$",{fe:1,te:1,Sa:1,Ra:1,na:1,ea:1,c:1,oa:1,fa:1});var yh=void 0;function yb(){yh||(yh=(new xh).b());return yh}function zh(){this.ka=this.db=0;this.Aa=null}zh.prototype=new pg;zh.prototype.constructor=zh;zh.prototype.M=function(){this.ka>=this.db&&zb().cb.M();var a=this.Aa.R(this.ka);this.ka=1+this.ka|0;return a};
+function cf(a,b){var c=new zh;c.db=b;if(null===a)throw Dd(Id(),null);c.Aa=a;c.ka=0;return c}zh.prototype.A=function(){return this.ka<this.db};zh.prototype.$classData=u({he:0},"scala.collection.IndexedSeqLike$Elements",{he:1,ib:1,c:1,nb:1,ca:1,ba:1,zf:1,f:1,d:1});function Gd(){this.S=this.n=null}Gd.prototype=new O;Gd.prototype.constructor=Gd;f=Gd.prototype;f.aa=function(){return"JavaScriptException"};f.Z=function(){return 1};f.Ha=function(){this.stackdata=this.S;return this};
+f.x=function(a){return this===a?!0:Ed(a)?Td(Xd(),this.S,a.S):!1};f.$=function(a){switch(a){case 0:return this.S;default:throw(new Y).e(""+a);}};f.eb=function(){return ka(this.S)};f.H=function(a){this.S=a;B.prototype.s.call(this,null,0,0,!0);return this};f.w=function(){return cd(this)};f.ma=function(){return Kg(this)};function Ed(a){return!!(a&&a.$classData&&a.$classData.l.tc)}f.$classData=u({tc:0},"scala.scalajs.js.JavaScriptException",{tc:1,B:1,J:1,u:1,c:1,d:1,xa:1,k:1,f:1});
+function Cc(){this.p=null}Cc.prototype=new Z;Cc.prototype.constructor=Cc;Cc.prototype.b=function(){this.p="Boolean";return this};Cc.prototype.$classData=u({Jd:0},"scala.reflect.ManifestFactory$BooleanManifest$",{Jd:1,U:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var Bc=void 0;function lc(){this.p=null}lc.prototype=new Z;lc.prototype.constructor=lc;lc.prototype.b=function(){this.p="Byte";return this};
+lc.prototype.$classData=u({Kd:0},"scala.reflect.ManifestFactory$ByteManifest$",{Kd:1,U:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var kc=void 0;function pc(){this.p=null}pc.prototype=new Z;pc.prototype.constructor=pc;pc.prototype.b=function(){this.p="Char";return this};pc.prototype.$classData=u({Ld:0},"scala.reflect.ManifestFactory$CharManifest$",{Ld:1,U:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var oc=void 0;function Ac(){this.p=null}Ac.prototype=new Z;Ac.prototype.constructor=Ac;
+Ac.prototype.b=function(){this.p="Double";return this};Ac.prototype.$classData=u({Md:0},"scala.reflect.ManifestFactory$DoubleManifest$",{Md:1,U:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var zc=void 0;function yc(){this.p=null}yc.prototype=new Z;yc.prototype.constructor=yc;yc.prototype.b=function(){this.p="Float";return this};yc.prototype.$classData=u({Nd:0},"scala.reflect.ManifestFactory$FloatManifest$",{Nd:1,U:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var xc=void 0;function rc(){this.p=null}rc.prototype=new Z;
+rc.prototype.constructor=rc;rc.prototype.b=function(){this.p="Int";return this};rc.prototype.$classData=u({Od:0},"scala.reflect.ManifestFactory$IntManifest$",{Od:1,U:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var qc=void 0;function wc(){this.p=null}wc.prototype=new Z;wc.prototype.constructor=wc;wc.prototype.b=function(){this.p="Long";return this};wc.prototype.$classData=u({Pd:0},"scala.reflect.ManifestFactory$LongManifest$",{Pd:1,U:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var sc=void 0;
+function Ah(){this.N=null}Ah.prototype=new wh;Ah.prototype.constructor=Ah;function Bh(){}Bh.prototype=Ah.prototype;Ah.prototype.x=function(a){return this===a};Ah.prototype.h=function(){return this.N};Ah.prototype.w=function(){return Ea(this)};function nc(){this.p=null}nc.prototype=new Z;nc.prototype.constructor=nc;nc.prototype.b=function(){this.p="Short";return this};nc.prototype.$classData=u({Td:0},"scala.reflect.ManifestFactory$ShortManifest$",{Td:1,U:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});
+var mc=void 0;function Ec(){this.p=null}Ec.prototype=new Z;Ec.prototype.constructor=Ec;Ec.prototype.b=function(){this.p="Unit";return this};Ec.prototype.$classData=u({Ud:0},"scala.reflect.ManifestFactory$UnitManifest$",{Ud:1,U:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var Dc=void 0;function Ch(a,b){a=a.la();for(b=b.la();a.A()&&b.A();)if(!Td(Xd(),a.M(),b.M()))return!1;return!a.A()&&!b.A()}function Bb(){}Bb.prototype=new Pg;Bb.prototype.constructor=Bb;
+Bb.prototype.b=function(){D.prototype.b.call(this);Ab=this;(new Ce).b();return this};Bb.prototype.$classData=u({we:0},"scala.collection.immutable.List$",{we:1,Sa:1,Ra:1,na:1,ea:1,c:1,oa:1,fa:1,f:1,d:1});var Ab=void 0;function Kb(){}Kb.prototype=new Pg;Kb.prototype.constructor=Kb;Kb.prototype.b=function(){D.prototype.b.call(this);return this};Kb.prototype.$classData=u({Ce:0},"scala.collection.immutable.Stream$",{Ce:1,Sa:1,Ra:1,na:1,ea:1,c:1,oa:1,fa:1,f:1,d:1});var Jb=void 0;
+function Gc(){this.N=null}Gc.prototype=new Bh;Gc.prototype.constructor=Gc;Gc.prototype.b=function(){this.N="Any";w();Cb();n(Oa);return this};Gc.prototype.$classData=u({Hd:0},"scala.reflect.ManifestFactory$AnyManifest$",{Hd:1,Pa:1,Oa:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var Fc=void 0;function Kc(){this.N=null}Kc.prototype=new Bh;Kc.prototype.constructor=Kc;Kc.prototype.b=function(){this.N="AnyVal";w();Cb();n(Oa);return this};
+Kc.prototype.$classData=u({Id:0},"scala.reflect.ManifestFactory$AnyValManifest$",{Id:1,Pa:1,Oa:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var Jc=void 0;function Mc(){this.N=null}Mc.prototype=new Bh;Mc.prototype.constructor=Mc;Mc.prototype.b=function(){this.N="Nothing";w();Cb();n(eg);return this};Mc.prototype.$classData=u({Qd:0},"scala.reflect.ManifestFactory$NothingManifest$",{Qd:1,Pa:1,Oa:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var Lc=void 0;function Oc(){this.N=null}Oc.prototype=new Bh;
+Oc.prototype.constructor=Oc;Oc.prototype.b=function(){this.N="Null";w();Cb();n(Yd);return this};Oc.prototype.$classData=u({Rd:0},"scala.reflect.ManifestFactory$NullManifest$",{Rd:1,Pa:1,Oa:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var Nc=void 0;function Ic(){this.N=null}Ic.prototype=new Bh;Ic.prototype.constructor=Ic;Ic.prototype.b=function(){this.N="Object";w();Cb();n(Oa);return this};
+Ic.prototype.$classData=u({Sd:0},"scala.reflect.ManifestFactory$ObjectManifest$",{Sd:1,Pa:1,Oa:1,c:1,F:1,E:1,D:1,y:1,f:1,d:1,k:1});var Hc=void 0;function Ob(){}Ob.prototype=new Tg;Ob.prototype.constructor=Ob;Ob.prototype.b=function(){D.prototype.b.call(this);Nb=this;return this};Ob.prototype.$classData=u({Ge:0},"scala.collection.immutable.Vector$",{Ge:1,te:1,Sa:1,Ra:1,na:1,ea:1,c:1,oa:1,fa:1,f:1,d:1});var Nb=void 0;function Dh(){}Dh.prototype=new v;Dh.prototype.constructor=Dh;function Eh(){}
+Eh.prototype=Dh.prototype;Dh.prototype.$b=function(){return this};Dh.prototype.Ta=function(){return Ng(this)};function Fh(a,b){if(b&&b.$classData&&b.$classData.l.jc){var c=a.C();if(c===b.C()){for(var d=0;d<c&&Td(Xd(),a.R(d),b.R(d));)d=1+d|0;return d===c}return!1}return Ch(a,b)}function Gh(a,b){for(var c=0,d=a.C();c<d;)b.P(a.R(c)),c=1+c|0}function Hh(){}Hh.prototype=new Eh;Hh.prototype.constructor=Hh;function Ih(){}Ih.prototype=Hh.prototype;Hh.prototype.ya=function(a){return Ch(this,a)};
+Hh.prototype.V=function(a){for(var b=this.la();b.A();)a.P(b.M())};function X(){this.v=null}X.prototype=new v;X.prototype.constructor=X;f=X.prototype;f.R=function(a){a=65535&(this.v.charCodeAt(a)|0);return Ze(a)};f.La=function(a){return this.C()-a|0};f.ya=function(a){return Fh(this,a)};f.x=function(a){xd||(xd=(new wd).b());return a&&a.$classData&&a.$classData.l.rc?this.v===(null===a?null:a.v):!1};f.h=function(){return this.v};f.V=function(a){Gh(this,a)};
+f.la=function(){return cf(this,this.v.length|0)};f.C=function(){return this.v.length|0};f.$b=function(){return this.v};f.e=function(a){this.v=a;return this};f.w=function(){var a=this.v;return Aa(Ba(),a)};f.Ta=function(){return Ng(this)};f.$classData=u({rc:0},"scala.collection.immutable.StringOps",{rc:1,c:1,Ee:1,lc:1,kc:1,pb:1,mb:1,k:1,qb:1,sb:1,rb:1,ca:1,ba:1,lb:1,ob:1,jb:1,kb:1,zd:1,L:1});function Jh(){}Jh.prototype=new Ih;Jh.prototype.constructor=Jh;function Kh(){}Kh.prototype=Jh.prototype;
+Jh.prototype.x=function(a){return a&&a.$classData&&a.$classData.l.Qa?this.ya(a):!1};Jh.prototype.i=function(){return 0===this.La(0)};Jh.prototype.h=function(){var a=this.Ta()+"(";return md(this,a,", ")};function Lh(){}Lh.prototype=new Kh;Lh.prototype.constructor=Lh;function Mh(){}Mh.prototype=Lh.prototype;function Nh(){}Nh.prototype=new Kh;Nh.prototype.constructor=Nh;function Oh(){}f=Oh.prototype=Nh.prototype;
+f.La=function(a){if(0>a)a=1;else a:{var b=this,c=0;for(;;){if(c===a){a=b.i()?0:1;break a}if(b.i()){a=-1;break a}c=1+c|0;b=Ph()}}return a};f.P=function(a){a|=0;for(var b=this,c=a;!b.i()&&0<c;)b=Ph(),c=-1+c|0;if(0>a||b.i())throw(new Y).e(""+a);te()};f.ya=function(a){var b;if(a&&a.$classData&&a.$classData.l.le)if(this===a)b=!0;else{for(b=this;;){if(b.i()||a.i())c=!1;else{Xd();te();var c=Td(0,void 0,te())}if(c)b=Ph(),a=Ph();else break}b=b.i()&&a.i()}else b=Ch(this,a);return b};
+f.V=function(a){for(var b=this;!b.i();)a.P(te()),b=Ph()};f.la=function(){var a=new Gg;a.wc=this;return a};f.w=function(){return se(this)};f.Ta=function(){return"List"};function Qh(){}Qh.prototype=new Oh;Qh.prototype.constructor=Qh;f=Qh.prototype;f.aa=function(){return"Nil"};f.b=function(){return this};f.Z=function(){return 0};f.i=function(){return!0};function Ph(){throw(new Dg).e("tail of empty list");}f.x=function(a){return a&&a.$classData&&a.$classData.l.Qa?a.i():!1};
+f.$=function(a){throw(new Y).e(""+a);};function te(){throw(new C).e("head of empty list");}f.ma=function(){return Kg(this)};f.$classData=u({ze:0},"scala.collection.immutable.Nil$",{ze:1,ve:1,fc:1,ec:1,gc:1,c:1,oc:1,qb:1,sb:1,rb:1,ca:1,ba:1,lb:1,ob:1,ic:1,qc:1,mc:1,hc:1,jb:1,mb:1,k:1,nc:1,bc:1,ia:1,Qa:1,kb:1,pb:1,Mf:1,Nf:1,Lf:1,Of:1,of:1,le:1,Af:1,xa:1,Bf:1,f:1,d:1});var Rh=void 0;function Cb(){Rh||(Rh=(new Qh).b())}function Sh(){}Sh.prototype=new Mh;Sh.prototype.constructor=Sh;function Ai(){}
+Ai.prototype=Sh.prototype;function nd(){this.O=null}nd.prototype=new Mh;nd.prototype.constructor=nd;f=nd.prototype;f.b=function(){nd.prototype.Eb.call(this,16,"");return this};f.R=function(a){a=65535&(this.O.t.charCodeAt(a)|0);return Ze(a)};f.La=function(a){return this.C()-a|0};f.ya=function(a){return Fh(this,a)};f.P=function(a){a=65535&(this.O.t.charCodeAt(a|0)|0);return Ze(a)};f.i=function(){return 0===this.C()};f.vc=function(a,b){return this.O.t.substring(a,b)};f.h=function(){return this.O.t};
+f.V=function(a){Gh(this,a)};function qd(a,b){a=a.O;a.t=""+a.t+b}f.la=function(){return cf(this,this.O.C())};f.Eb=function(a,b){a=(new ig).va((b.length|0)+a|0);a.t=""+a.t+b;nd.prototype.Hc.call(this,a);return this};f.C=function(){return this.O.C()};f.Hc=function(a){this.O=a;return this};function rd(a,b){var c=a.O;c.t+=""+b;return a}f.w=function(){return se(this)};f.e=function(a){nd.prototype.Eb.call(this,16,a);return this};
+f.$classData=u({Pe:0},"scala.collection.mutable.StringBuilder",{Pe:1,He:1,fc:1,ec:1,gc:1,c:1,oc:1,qb:1,sb:1,rb:1,ca:1,ba:1,lb:1,ob:1,ic:1,qc:1,mc:1,hc:1,jb:1,mb:1,k:1,nc:1,bc:1,ia:1,Qa:1,kb:1,pb:1,Ne:1,Me:1,Re:1,nd:1,Oe:1,Je:1,ac:1,fb:1,Jb:1,Ke:1,jc:1,kc:1,Le:1,Ee:1,lc:1,zd:1,L:1,Uf:1,Ie:1,se:1,pe:1,f:1,d:1});function Bi(){this.Q=null}Bi.prototype=new Ai;Bi.prototype.constructor=Bi;f=Bi.prototype;f.La=function(a){return this.C()-a|0};f.R=function(a){return this.Q[a]};
+f.P=function(a){return this.Q[a|0]};f.ya=function(a){return Fh(this,a)};f.i=function(){return 0===this.C()};f.V=function(a){Gh(this,a)};f.la=function(){return cf(this,this.Q.length|0)};f.C=function(){return this.Q.length|0};f.w=function(){return se(this)};function bf(a){var b=new Bi;b.Q=a;return b}f.Ta=function(){return"WrappedArray"};
+f.$classData=u({Se:0},"scala.scalajs.js.WrappedArray",{Se:1,Pf:1,He:1,fc:1,ec:1,gc:1,c:1,oc:1,qb:1,sb:1,rb:1,ca:1,ba:1,lb:1,ob:1,ic:1,qc:1,mc:1,hc:1,jb:1,mb:1,k:1,nc:1,bc:1,ia:1,Qa:1,kb:1,pb:1,Ne:1,Me:1,Re:1,nd:1,Oe:1,Je:1,ac:1,fb:1,Rf:1,Sf:1,se:1,pe:1,Jf:1,Cf:1,Kf:1,Ke:1,jc:1,kc:1,Le:1,Qf:1,Tf:1,lc:1,Ie:1});
+aa.MersenneTwisterFast=function(){for(var a=new P,b=arguments.length|0,c=0,d=[];c<b;)d.push(arguments[c]),c=c+1|0;void 0===d[0]?(We(),c=ib(),b=r(),c=1E6*+(0,c.Cb)(),c=be(b,c),b=(new z).K(c,b.o)):b=Ja(d[0]);P.prototype.Ia.call(a,b);return a};aa.MersenneTwisterFast.prototype=P.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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var MersenneTwisterFast;
+
+  ({MersenneTwisterFast} = require('./engine-scala'));
+
+  /*
+  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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Cloner, genEnhancedMath;
+
+  Cloner = require('./cloner');
+
+  // We use this outside of GraalJS --JAB (4/10/15) / JMB (11/18)
+  genEnhancedMath = function() {
+    var obj;
+    obj = Cloner(Math);
+    // For functions that are not "close enough," or that don't exist in the browser, manually define them here!
+    obj.toRadians = function(degrees) {
+      return degrees * Math.PI / 180;
+    };
+    obj.toDegrees = function(radians) {
+      return radians * 180 / Math.PI;
+    };
+    obj.PI = function() {
+      return Math.PI; // Scala forces it to be a function in Nashorn, so it's a function here --JAB (4/8/15)
+    };
+    obj.truncate = function(x) {
+      if (x >= 0) {
+        return Math.floor(x);
+      } else {
+        return Math.ceil(x);
+      }
+    };
+    return obj;
+  };
+
+  module.exports = genEnhancedMath();
+
+}).call(this);
+
+},{"./cloner":"shim/cloner"}],"util/abstractmethoderror":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+
+  // (String) => Nothing
+  module.exports = function(msg) {
+    throw new Error(`Illegal method call: \`${msg}\` is abstract`);
+  };
+
+}).call(this);
+
+},{}],"util/comparator":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  module.exports = {
+    NOT_EQUALS: {},
+    // type Comparison = { toInt: Number }
+    EQUALS: {
+      toInt: 0
+    },
+    GREATER_THAN: {
+      toInt: 1
+    },
+    LESS_THAN: {
+      toInt: -1
+    },
+    // (Number, Number) => Comparison
+    numericCompare: function(x, y) {
+      if (x < y) {
+        return this.LESS_THAN;
+      } else if (x > y) {
+        return this.GREATER_THAN;
+      } else {
+        return this.EQUALS;
+      }
+    },
+    // (String, String) => Comparison
+    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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AgentException, DeathInterrupt, HaltInterrupt, NetLogoException, StopInterrupt, TopologyInterrupt, ignoring;
+
+  NetLogoException = class NetLogoException {
+    constructor(message) {
+      this.message = message;
+    }
+
+  };
+
+  AgentException = class AgentException extends NetLogoException {};
+
+  DeathInterrupt = class DeathInterrupt extends NetLogoException {};
+
+  StopInterrupt = class StopInterrupt extends NetLogoException {};
+
+  TopologyInterrupt = class TopologyInterrupt extends NetLogoException {};
+
+  HaltInterrupt = class HaltInterrupt extends NetLogoException {
+    constructor() {
+      super("model halted by user");
+    }
+
+  };
+
+  // [T] @ (Prototype) => (() => T) => T
+  ignoring = function(exceptionType) {
+    return function(f) {
+      var ex;
+      try {
+        return f();
+      } catch (error) {
+        ex = error;
+        if (!(ex instanceof exceptionType)) {
+          throw ex;
+        }
+      }
+    };
+  };
+
+  module.exports = {AgentException, DeathInterrupt, HaltInterrupt, ignoring, NetLogoException, StopInterrupt, TopologyInterrupt};
+
+}).call(this);
+
+},{}],"util/iterator":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Iterator;
+
+  module.exports = Iterator = (function() {
+    class Iterator {
+
+      // (Array[T]) => Iterator[T]
+      constructor(_items) {
+        this._items = _items;
+      }
+
+      // ((T) => Boolean) => Boolean
+      all(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;
+      }
+
+      // (T) => Boolean
+      contains(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;
+      }
+
+      // ((T) => Boolean) => Boolean
+      exists(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;
+      }
+
+      // ((T) => Boolean) => Array[T]
+      filter(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;
+      }
+
+      // These two methods (withBoolCheck and boolOrError) are meant to help with some
+      // very basic type checking using the WITH primitive.  They don't really belong
+      // here, but can stay until more reobust checks are added in a more central
+      // location.  -JMB July 2017
+
+      // ((T) => Boolean) => (T) => Boolean
+      static withBoolCheck(f) {
+        return function(x) {
+          var y;
+          y = f(x);
+          return Iterator.boolOrError(x, y);
+        };
+      }
+
+      // (T, Boolean) => Boolean
+      static boolOrError(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.`);
+        }
+      }
+
+      // (Int) => T
+      nthItem(n) {
+        return this._items[n];
+      }
+
+      // [U] @ ((T) => U) => Array[U]
+      map(f) {
+        return this._items.map(f);
+      }
+
+      // ((T) => Unit) => Unit
+      forEach(f) {
+        this._items.forEach(f);
+      }
+
+      // () => Int
+      size() {
+        return this._items.length;
+      }
+
+      // () => Array[T]
+      toArray() {
+        return this._items;
+      }
+
+    };
+
+    Iterator.prototype._items = void 0; // [T] @ Array[T]
+
+    return Iterator;
+
+  }).call(this);
+
+}).call(this);
+
+},{}],"util/nlmath":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Exception, StrictMath,
+    modulo = function(a, b) { return (+a % (b = +b) + b) % b; };
+
+  StrictMath = require('../shim/strictmath');
+
+  Exception = require('./exception');
+
+  // The compiler should favor calling into this object over `StrictMath`, because this is where error messages are implemented --JAB (3/5/15)
+  module.exports = {
+    // (Number) => Number
+    abs: function(n) {
+      return StrictMath.abs(n);
+    },
+    // (Number) => Number
+    acos: function(radians) {
+      return this.validateNumber(StrictMath.toDegrees(StrictMath.acos(radians)));
+    },
+    // (Number) => Number
+    asin: function(radians) {
+      return this.validateNumber(StrictMath.toDegrees(StrictMath.asin(radians)));
+    },
+    // (Number, Number) => Number
+    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;
+      }
+    },
+    // (Number) => Number
+    ceil: function(n) {
+      return StrictMath.ceil(n);
+    },
+    // (Number) => Number
+    cos: function(degrees) {
+      return StrictMath.cos(StrictMath.toRadians(degrees));
+    },
+    // (Number, Number) => Number
+    distance2_2D: function(x, y) {
+      return StrictMath.sqrt(x * x + y * y);
+    },
+    // (Number, Number, Number, Number) => Number
+    distance4_2D: function(x1, y1, x2, y2) {
+      return this.distance2_2D(x1 - x2, y1 - y2);
+    },
+    // (Number) => Number
+    exp: function(n) {
+      return StrictMath.exp(n);
+    },
+    // (Number) => Number
+    floor: function(n) {
+      return StrictMath.floor(n);
+    },
+    // (Number) => Number
+    ln: function(n) {
+      return StrictMath.log(n);
+    },
+    // (Number, Number) => Number
+    log: function(num, base) {
+      return StrictMath.log(num) / StrictMath.log(base);
+    },
+    // (Number*) => Number
+    max: function(...xs) {
+      return Math.max(...xs); // Variadic `max` doesn't exist on the Java `Math` object --JAB (9/23/15)
+    },
+
+    // (Number*) => Number
+    min: function(...xs) {
+      return Math.min(...xs); // Variadic `min` doesn't exist on the Java `Math` object --JAB (9/15/15)
+    },
+
+    // (Number, Number) => Number
+    mod: function(a, b) {
+      return modulo(a, b);
+    },
+    // (Number) => Number
+    normalizeHeading: function(heading) {
+      if ((0 <= heading && heading < 360)) {
+        return heading;
+      } else {
+        return ((heading % 360) + 360) % 360;
+      }
+    },
+    // (Number, Number) => Number
+    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);
+      }
+    },
+    // (Number, Number) => Number
+    pow: function(base, exponent) {
+      return StrictMath.pow(base, exponent);
+    },
+    // (Number) => Number
+    round: function(n) {
+      return StrictMath.round(n);
+    },
+    // (Number) => Number
+    sin: function(degrees) {
+      return StrictMath.sin(StrictMath.toRadians(degrees));
+    },
+    // (Number) => Number
+    sqrt: function(n) {
+      return StrictMath.sqrt(n);
+    },
+    // (Number) => Number
+    squash: function(x) {
+      if (StrictMath.abs(x) < 3.2e-15) {
+        return 0;
+      } else {
+        return x;
+      }
+    },
+    // (Number, Number) => Number
+    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;
+      }
+    },
+    // (Number) => Number
+    tan: function(degrees) {
+      return StrictMath.tan(StrictMath.toRadians(degrees));
+    },
+    // (Number) => Number
+    toInt: function(n) {
+      return n | 0;
+    },
+    // (Number) => Number
+    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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+
+  // [T] @ (String, T) => () => T
+  module.exports = function(name, 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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var AuxRandom, RNG, Random;
+
+  Random = require('../shim/random');
+
+  AuxRandom = require('../shim/auxrandom');
+
+  // We need an auxiliary RNG for non-deterministic RNG events (e.g. code run within monitors),
+  // so I sloppily manage what RNG is being used here.  I plan to, soon enough, clean up this
+  // mess by deleting this file and replacing it with a proper context-passing system. --JAB (10/17/14)
+  module.exports = RNG = (function() {
+    class RNG {
+
+      // () => RNG
+      constructor() {
+        // () => Number
+        this.nextGaussian = this.nextGaussian.bind(this);
+        // (Number) => Number
+        this.nextInt = this.nextInt.bind(this);
+        // (Number) => Number
+        this.nextLong = this.nextLong.bind(this);
+        // () => Number
+        this.nextDouble = this.nextDouble.bind(this);
+        this._mainRNG = Random;
+        this._currentRNG = this._mainRNG;
+      }
+
+      // () => String
+      exportState() {
+        return this._mainRNG.save();
+      }
+
+      // (String) => Unit
+      importState(state) {
+        this._mainRNG.load(state);
+      }
+
+      nextGaussian() {
+        return this._currentRNG.nextGaussian();
+      }
+
+      nextInt(limit) {
+        return this._currentRNG.nextInt(limit);
+      }
+
+      nextLong(limit) {
+        return this._currentRNG.nextLong(limit);
+      }
+
+      nextDouble() {
+        return this._currentRNG.nextDouble();
+      }
+
+      // (Number) => Unit
+      setSeed(seed) {
+        this._currentRNG.setSeed(seed);
+      }
+
+      // [T] @ (() => T) => T
+      withAux(f) {
+        return this._withAnother(AuxRandom)(f);
+      }
+
+      // [T] @ (() => T) => T
+      withClone(f) {
+        return this._withAnother(Random.clone())(f);
+      }
+
+      // [T] @ (Generator) => (() => T) => T
+      _withAnother(rng) {
+        return (f) => {
+          var prevRNG, result;
+          prevRNG = this._currentRNG;
+          this._currentRNG = rng;
+          result = (function() {
+            try {
+              return f();
+            } finally {
+              this._currentRNG = prevRNG;
+            }
+          }).call(this);
+          return result;
+        };
+      }
+
+    };
+
+    // type Generator = { nextInt: (Number) => Number, nextLong: (Number) => Number, nextDouble: () => Number, setSeed: (Number) => Unit }
+    RNG.prototype._currentRNG = void 0; // Generator
+
+    RNG.prototype._mainRNG = void 0; // Generator
+
+    return RNG;
+
+  }).call(this);
+
+}).call(this);
+
+},{"../shim/auxrandom":"shim/auxrandom","../shim/random":"shim/random"}],"util/shufflerator":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Iterator, Shufflerator;
+
+  Iterator = require('./iterator');
+
+  module.exports = Shufflerator = (function() {
+    class Shufflerator extends Iterator {
+
+      // [T] @ (Array[T], (T) => Boolean, (Number) => Number) => Shufflerator
+      constructor(items, _itemIsValid, _nextInt) {
+        super(items);
+        this._itemIsValid = _itemIsValid;
+        this._nextInt = _nextInt;
+        this._i = 0;
+        this._nextOne = null;
+        this._fetch();
+      }
+
+      // [U] @ ((T) => U) => Array[U]
+      map(f) {
+        var acc;
+        acc = [];
+        this.forEach(function(x) {
+          return acc.push(f(x));
+        });
+        return acc;
+      }
+
+      // ((T) => Unit) => Unit
+      forEach(f) {
+        var next;
+        while (this._hasNext()) {
+          next = this._next();
+          if (this._itemIsValid(next)) {
+            f(next);
+          }
+        }
+      }
+
+      // [U >: T] @ ((T) => Boolean, U) => U
+      find(f, dflt) {
+        var next;
+        while (this._hasNext()) {
+          next = this._next();
+          if (this._itemIsValid(next) && (f(next) === true)) {
+            return next;
+          }
+        }
+        return dflt;
+      }
+
+      // () => Array[T]
+      toArray() {
+        var acc;
+        acc = [];
+        this.forEach(function(x) {
+          return acc.push(x);
+        });
+        return acc;
+      }
+
+      // () => Boolean
+      _hasNext() {
+        return this._i <= this._items.length;
+      }
+
+      // () => T
+      _next() {
+        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)
+      */
+      // () => Unit
+      _fetch() {
+        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;
+        }
+      }
+
+    };
+
+    Shufflerator.prototype._i = void 0; // Number
+
+    Shufflerator.prototype._nextOne = void 0; // T
+
+    return Shufflerator;
+
+  }).call(this);
+
+}).call(this);
+
+},{"./iterator":"util/iterator"}],"util/stablesort":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var rangeUntil, zip;
+
+  ({zip} = require('brazierjs/array'));
+
+  ({rangeUntil} = require('brazierjs/number'));
+
+  // [T] @ (Array[(T, U)]) => ((U, T) => Int) => Array[T]
+  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() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var Timer;
+
+  module.exports = Timer = (function() {
+    class Timer {
+      // () => Timer
+      constructor() {
+        this.reset();
+      }
+
+      // () => Number
+      elapsed() {
+        return (Date.now() - this._startTime) / 1000;
+      }
+
+      // () => Unit
+      reset() {
+        this._startTime = Date.now();
+      }
+
+    };
+
+    // Number
+    Timer.prototype._startTime = void 0;
+
+    return Timer;
+
+  }).call(this);
+
+}).call(this);
+
+},{}],"util/typechecker":[function(require,module,exports){
+(function() {
+  // (C) Uri Wilensky. https://github.com/NetLogo/Tortoise
+  var JSType;
+
+  /*
+  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)
+  */
+  JSType = class JSType {
+    constructor(_x) { // (Any) => JSType
+      this._x = _x;
+    }
+
+    isArray() {
+      return Array.isArray(this._x);
+    }
+
+    isBoolean() {
+      return typeof this._x === "boolean";
+    }
+
+    isFunction() {
+      return typeof this._x === "function";
+    }
+
+    isNumber() {
+      return typeof this._x === "number";
+    }
+
+    isObject() {
+      return typeof this._x === "object";
+    }
+
+    isString() {
+      return typeof this._x === "string";
+    }
+
+  };
+
+  module.exports = function(x) {
+    return new JSType(x);
+  };
+
+}).call(this);
+
+},{}]},{},["bootstrap"]);
+</script>
+
+    <script>(function() {
+  var all, allMixedCase, commands, constants, directives, linkVars, patchVars, reporters, turtleVars, unsupported;
+
+  directives = ['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', 'hubnet-broadcast', 'hubnet-broadcast-clear-output', 'hubnet-broadcast-message', 'hubnet-clear-override', 'hubnet-clear-overrides', 'hubnet-kick-all-clients', 'hubnet-kick-client', 'hubnet-fetch-message', 'hubnet-reset', 'hubnet-reset-perspective', 'hubnet-send', 'hubnet-send-clear-output', 'hubnet-send-follow', 'hubnet-send-message', 'hubnet-send-override', 'hubnet-send-watch', '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-background-color', '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', 'stop-inspecting', 'stop-inspecting-dead-agents', 'tick', 'tick-advance', 'tie', 'type', 'untie', 'update-plots', 'uphill', 'uphill4', 'user-message', 'wait', 'watch', 'watch-me', 'while', 'with-local-randomness', 'without-interruption', 'write'];
+
+  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-experiment-name', '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-anonymous-command\\?', 'is-anonymous-reporter\\?', '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'];
+
+  turtleVars = ['WHO', 'COLOR', 'HEADING', 'XCOR', 'YCOR', 'SHAPE', 'LABEL', 'LABEL-COLOR', 'BREED', 'HIDDEN\\?', 'SIZE', 'PEN-SIZE', 'PEN-MODE'];
+
+  patchVars = ['PXCOR', 'PYCOR', 'PCOLOR', 'PLABEL', 'PLABEL-COLOR'];
+
+  linkVars = ['END1', 'END2', 'COLOR', 'LABEL', 'LABEL-COLOR', 'HIDDEN\\?', 'BREED', 'THICKNESS', 'SHAPE', 'TIE-MODE'];
+
+  constants = ['TRUE', 'FALSE', 'NOBODY', 'E', 'PI', 'gray', 'grey', 'red', 'orange', 'brown', 'yellow', 'green', 'lime', 'turquoise', 'cyan', 'sky', 'blue', 'violet', 'magenta', 'pink', 'black', 'white'];
+
+  unsupported = ['ask-concurrent', 'beep', 'display', 'export-interface', 'file-close', 'file-close-all', 'file-delete', 'file-flush', 'file-open', 'file-print', 'file-show', 'file-type', 'file-write', 'hubnet-broadcast', 'hubnet-broadcast-clear-output', 'hubnet-broadcast-message', 'hubnet-clear-override', 'hubnet-clear-overrides', 'hubnet-kick-all-clients', 'hubnet-kick-client', 'hubnet-fetch-message', 'hubnet-reset', 'hubnet-reset-perspective', 'hubnet-send', 'hubnet-send-clear-output', 'hubnet-send-follow', 'hubnet-send-message', 'hubnet-send-override', 'hubnet-send-watch', 'inspect', 'no-display', 'set-current-directory', 'file-at-end\\?', 'file-exists\\?', 'file-read', 'file-read-characters', 'file-read-line', 'hubnet-clients-list', 'hubnet-enter-message\\?', 'hubnet-exit-message\\?', 'hubnet-message', 'hubnet-message-source', 'hubnet-message-tag', 'hubnet-message-waiting\\?', 'movie-status', 'user-directory', 'user-file', 'user-new-file', 'user-one-of'];
+
+  allMixedCase = [].concat(commands, constants, directives, linkVars, patchVars, reporters, turtleVars);
+
+  all = allMixedCase.map(function(x) {
+    return x.toLowerCase();
+  });
+
+  window.keywords = {all, commands, constants, directives, linkVars, patchVars, reporters, turtleVars, unsupported};
+
+}).call(this);
+
+//# sourceMappingURL=keywords.js.map
+</script>
+    <script>(function() {
+  var allReporters, closeBracket, commands, commentRule, constantRule, constants, directives, linkVars, memberRegEx, notWordCh, openBracket, patchVars, reporters, turtleVars, variable, wordCh, wordEnd, wordRegEx;
+
+  ({commands, constants, directives, linkVars, patchVars, reporters, turtleVars} = window.keywords);
+
+  notWordCh = /[\s\[\(\]\)]/.source;
+
+  wordCh = /[^\s\[\(\]\)]/.source;
+
+  wordEnd = `(?=${notWordCh}|$)`;
+
+  wordRegEx = function(pattern) {
+    return new RegExp(`${pattern}${wordEnd}`, 'i');
+  };
+
+  memberRegEx = function(words) {
+    return wordRegEx(`(?:${words.join('|')})`);
+  };
+
+  // Rules for multiple states
+  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 + "+")
+  };
+
+  // Some arrays are reversed so that longer strings match first - BCH 1/9/2015, JAB (4/28/18)
+  allReporters = [].concat(reporters, turtleVars, patchVars, linkVars).reverse();
+
+  CodeMirror.defineSimpleMode('netlogo', {
+    start: [
+      {
+        token: 'keyword',
+        regex: wordRegEx("to(?:-report)?"),
+        indent: true
+      },
+      {
+        token: 'keyword',
+        regex: wordRegEx("end"),
+        dedent: true
+      },
+      {
+        token: 'keyword',
+        regex: memberRegEx(directives)
+      },
+      {
+        token: 'keyword',
+        regex: wordRegEx(`${wordCh}*-own`)
+      },
+      {
+        token: 'command',
+        regex: memberRegEx(commands.reverse())
+      },
+      {
+        token: 'reporter',
+        regex: memberRegEx(allReporters)
+      },
+      {
+        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", // The 'd's here are so that it reindents on `end`. BCH 1/9/2015,
+      lineComment: ";"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=codemirror-mode.js.map
+</script>
+    <script>(function() {
+  // input: number in [0, 140) range
+  // result: CSS color string
+  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;
+    [r, g, b] = array = netlogoColorToRGB(netlogoColor);
+    a = array.length > 3 ? array[3] : 255;
+    if (a < 255) {
+      return `rgba(${r}, ${g}, ${b}, ${a / 255})`;
+    } else {
+      return `rgb(${r}, ${g}, ${b})`;
+    }
+  };
+
+  // Since a turtle's color's transparency applies to its whole shape,  and not
+  // just the parts that use its default color, often we want to use the opaque
+  // version of its color so we can use global transparency on it. BCH 12/10/2014
+  window.netlogoColorToOpaqueCSS = function(netlogoColor) {
+    var array, b, g, r;
+    [r, g, b] = array = netlogoColorToRGB(netlogoColor);
+    return `rgb(${r}, ${g}, ${b})`;
+  };
+
+  // (Number) => String
+  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('')}`;
+  };
+
+  // (String) => Number
+  window.hexStringToNetlogoColor = function(hex) {
+    var b, g, hexPair, r, rgbHexes;
+    hexPair = "([0-9a-f]{2})";
+    rgbHexes = hex.toLowerCase().match(new RegExp(`#${hexPair}${hexPair}${hexPair}`)).slice(1);
+    [r, g, b] = rgbHexes.map(function(x) {
+      return parseInt(x, 16);
+    });
+    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;
+  }
+
+  // copied from api/Color.scala. note these aren't the same numbers as
+  // `map extract-rgb base-colors` gives you; see comments in Scala source
+  netlogoBaseColors = [
+    [
+      140,
+      140,
+      140 // gray       (5)
+    ],
+    [
+      215,
+      48,
+      39 // red       (15)
+    ],
+    [
+      241,
+      105,
+      19 // orange    (25)
+    ],
+    [
+      156,
+      109,
+      70 // brown     (35)
+    ],
+    [
+      237,
+      237,
+      47 // yellow    (45)
+    ],
+    [
+      87,
+      176,
+      58 // green     (55)
+    ],
+    [
+      42,
+      209,
+      57 // lime      (65)
+    ],
+    [
+      27,
+      158,
+      119 // turquoise (75)
+    ],
+    [
+      82,
+      196,
+      196 // cyan      (85)
+    ],
+    [
+      43,
+      140,
+      190 // sky       (95)
+    ],
+    [
+      50,
+      92,
+      168 // blue     (105)
+    ],
+    [
+      123,
+      78,
+      163 // violet   (115)
+    ],
+    [
+      166,
+      25,
+      105 // magenta  (125)
+    ],
+    [
+      224,
+      126,
+      149 // pink     (135)
+    ],
+    [
+      0,
+      0,
+      0 // black
+    ],
+    [
+      255,
+      255,
+      255 // white
+    ]
+  ];
+
+  cachedNetlogoColors = (function() {
+    var k, results;
+    results = [];
+    for (colorTimesTen = k = 0; k <= 1400; colorTimesTen = ++k) {
+      baseIndex = Math.floor(colorTimesTen / 100);
+      [r, g, b] = netlogoBaseColors[baseIndex];
+      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 = class NLWAlerter {
+    // Element -> Boolean -> NLWAlerter
+    constructor(_alertWindow, _isStandalone) {
+      this._alertWindow = _alertWindow;
+      this._isStandalone = _isStandalone;
+      this.alertContainer = this._alertWindow.querySelector("#alert-dialog");
+    }
+
+    // String -> Boolean -> String -> Unit
+    display(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 = '';
+    }
+
+    // String -> Boolean -> String -> Unit
+    displayError(content, dismissable = true, title = "Error") {
+      this.display(title, dismissable, content);
+    }
+
+    // Unit -> Unit
+    hide() {
+      this._alertWindow.style.display = 'none';
+    }
+
+  };
+
+  // (Array[String]) => Unit
+  window.showErrors = function(errors) {
+    if (errors.length > 0) {
+      if (window.nlwAlerter != null) {
+        window.nlwAlerter.displayError(errors.join('<br/>'));
+      } else {
+        alert(errors.join('\n'));
+      }
+    }
+  };
+
+  // [T] @ (() => T) => ((Array[String]) => Unit) => T
+  window.handlingErrors = function(f) {
+    return function(errorLog = window.showErrors) {
+      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/docs/faq#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>`;
+          errorLog([message]);
+          throw new Exception.HaltInterrupt;
+        } else {
+          throw ex;
+        }
+      }
+    };
+  };
+
+}).call(this);
+
+//# sourceMappingURL=global-noisy-things.js.map
+</script>
+    <script>(function() {
+  var PenBundle, PlotOps;
+
+  PenBundle = tortoise_require('engine/plot/pen');
+
+  PlotOps = tortoise_require('engine/plot/plotops');
+
+  window.HighchartsOps = (function() {
+    class HighchartsOps extends PlotOps {
+      constructor(elemID) {
+        var addPoint, registerPen, reset, resetPen, resize, thisOps, 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 num, options, series, type;
+          num = this._chart.series.length;
+          series = this._chart.addSeries({
+            color: this.colorToRGBString(pen.getColor()),
+            data: [],
+            dataLabels: {
+              enabled: false
+            },
+            name: pen.name
+          });
+          type = this.modeToString(pen.getDisplayMode());
+          options = thisOps.seriesTypeOptions(type);
+          series.update(options);
+          this._penNameToSeriesNum[pen.name] = num;
+        };
+        // This is a workaround for a bug in CS2 `@` detection: https://github.com/jashkenas/coffeescript/issues/5111
+        // -JMB December 2018
+        thisOps = null;
+        resetPen = (pen) => {
+          return () => {
+            var ref;
+            if ((ref = thisOps.penToSeries(pen)) != null) {
+              ref.setData([]);
+            }
+          };
+        };
+        addPoint = (pen) => {
+          return (x, y) => {
+            // Wrong, and disabled for performance reasons --JAB (10/19/14)
+            // color = @colorToRGBString(pen.getColor())
+            // @penToSeries(pen).addPoint({ marker: { fillColor: color }, x: x, y: y })
+            thisOps.penToSeries(pen).addPoint([x, y], false);
+          };
+        };
+        updatePenMode = (pen) => {
+          return (mode) => {
+            var options, series, type;
+            series = thisOps.penToSeries(pen);
+            if (series != null) {
+              type = thisOps.modeToString(mode);
+              options = thisOps.seriesTypeOptions(type);
+              series.update(options);
+            }
+          };
+        };
+        // Why doesn't the color change show up when I call `update` directly with a new color
+        // (like I can with a type in `updatePenMode`)?
+        // Send me an e-mail if you know why I can't do that.
+        // Leave a comment on this webzone if you know why I can't do that. --JAB (6/2/15)
+        updatePenColor = (pen) => {
+          return (color) => {
+            var hcColor, series;
+            hcColor = thisOps.colorToRGBString(color);
+            series = thisOps.penToSeries(pen);
+            series.options.color = hcColor;
+            series.update(series.options);
+          };
+        };
+        super(resize, reset, registerPen, resetPen, addPoint, updatePenMode, updatePenColor);
+        thisOps = this;
+        this._chart = Highcharts.chart(elemID, {});
+        this._penNameToSeriesNum = {};
+        //These pops remove the two redundant functions from the export-csv plugin
+        //see https://github.com/highcharts/export-csv and
+        //https://github.com/NetLogo/Galapagos/pull/364#discussion_r108308828 for more info
+        //--Camden Clark (3/27/17)
+        //I heard you like hacks, so I put hacks in your hacks.
+        //Highcharts uses the same menuItems for all charts, so we have to apply the hack once. - JMB November 2017
+        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;
+        }
+      }
+
+      // (PenBundle.DisplayMode) => String
+      modeToString(mode) {
+        var Bar, Line, Point;
+        ({Bar, Line, Point} = PenBundle.DisplayMode);
+        switch (mode) {
+          case Bar:
+            return 'column';
+          case Line:
+            return 'line';
+          case Point:
+            return 'scatter';
+          default:
+            return 'line';
+        }
+      }
+
+      // (String) => Highcharts.Options
+      seriesTypeOptions(type) {
+        var isLine, isScatter;
+        isScatter = type === 'scatter';
+        isLine = type === 'line';
+        return {
+          marker: {
+            enabled: isScatter,
+            radius: isScatter ? 1 : 4
+          },
+          lineWidth: isLine ? 2 : null,
+          type: isLine ? 'scatter' : type
+        };
+      }
+
+      // (PenBundle.Pen) => Highcharts.Series
+      penToSeries(pen) {
+        return this._chart.series[this._penNameToSeriesNum[pen.name]];
+      }
+
+      redraw() {
+        return this._chart.redraw();
+      }
+
+      resizeElem(x, y) {
+        return this._chart.setSize(x, y, false);
+      }
+
+    };
+
+    HighchartsOps.prototype._chart = void 0; // Highcharts.Chart
+
+    HighchartsOps.prototype._penNameToSeriesNum = void 0; // Object[String, Number]
+
+    return HighchartsOps;
+
+  }).call(this);
+
+}).call(this);
+
+//# sourceMappingURL=highcharts.js.map
+</script>
+    <script>(function() {
+  var ref;
+
+  window.exports = (ref = window.exports) != null ? ref : {};
+
+  window.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, ref1, ref2;
+              allModelStatuses = JSON.parse(req.responseText);
+              for (i = 0, len = allModelNames.length; i < len; i++) {
+                modelName = allModelNames[i];
+                modelStatus = (ref1 = (ref2 = allModelStatuses[modelName]) != null ? ref2.status : void 0) != null ? ref1 : 'unknown';
+                setModelCompilationStatus(modelName, modelStatus);
+              }
+              return window.modelSelect.trigger('chosen:updated');
+            }
+          });
+        }
+        return onComplete();
+      }
+    });
+  };
+
+  exports.selectModel = function(model) {
+    modelSelect.val(model);
+    return modelSelect.trigger("chosen:updated");
+  };
+
+  // (String) => Unit
+  exports.selectModelByURL = function(modelURL) {
+    var choiceElem, choiceElems, choicesArray, extractNMatches, modelName, modelPath, prefix, regexStr, truePath, truePrefix, urlIsInternal;
+    extractNMatches = function(regex) {
+      return function(n) {
+        return function(str) {
+          var result;
+          result = (new RegExp(regex)).exec(str);
+          return (function() {
+            var 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";
+      [prefix, modelName] = extractNMatches(regexStr)(2)(modelURL);
+      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.innerText === 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 : {};
+
+  // coffeelint: disable=max_line_length
+  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@#$#@#$#@";
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=new-model.js.map
+</script>
+    <script>(function() {
+  window.RactiveEditFormCheckbox = Ractive.extend({
+    data: function() {
+      return {
+        disabled: void 0, // Boolean
+        id: void 0, // String
+        isChecked: void 0, // Boolean
+        labelText: void 0, // String
+        name: void 0 // String
+      };
+    },
+    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, editFormCodeContainerFactory;
+
+  RactiveCodeContainerBase = Ractive.extend({
+    _editor: void 0, // CodeMirror
+    data: function() {
+      return {
+        code: void 0, // String
+        extraClasses: void 0, // Array[String]
+        extraConfig: void 0, // Object
+        id: void 0, // String
+        initialCode: void 0, // String
+        isDisabled: false,
+        injectedConfig: void 0, // Object
+        onchange: (function() {}), // (String) => Unit
+        style: void 0 // String
+      };
+    },
+    // An astute observer will ask what the purpose of `initialCode` is--why wouldn't we just make it
+    // equivalent to `code`?  It's a good (albeit maddening) question.  Ractive does some funny stuff
+    // if the code that comes in is the same as what is getting hit by `set` in the editor's on-change
+    // event.  Basically, even though we explicitly say all over the place that we don't want to be
+    // doing two-way binding, that `set` call will change the value here and everywhere up the chain.
+    // So, to avoid that, `initialCode` is a dummy variable, and we dump it into `code` as soon as
+    // reasonably possible.  --JAB (5/2/16)
+    oncomplete: function() {
+      var initialCode, ref;
+      initialCode = this.get('initialCode');
+      this.set('code', (ref = initialCode != null ? initialCode : this.get('code')) != null ? ref : "");
+      this._setupCodeMirror();
+    },
+    twoway: false,
+    _setupCodeMirror: function() {
+      var baseConfig, config, ref, ref1;
+      baseConfig = {
+        mode: 'netlogo',
+        theme: 'netlogo-default',
+        value: this.get('code').toString(),
+        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', () => {
+        var code;
+        code = this._editor.getValue();
+        this.set('code', code);
+        this.parent.fire('code-changed', code);
+        return this.get('onchange')(code);
+      });
+      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');
+        }
+      });
+    },
+    // (String) => Unit
+    setCode: function(code) {
+      var str;
+      str = code.toString();
+      if ((this._editor != null) && this._editor.getValue() !== str) {
+        this._editor.setValue(str);
+      }
+    },
+    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"
+          }
+        }
+      };
+    },
+    highlightProcedure: function(procedureName, index) {
+      var end, start;
+      end = this._editor.posFromIndex(index);
+      start = CodeMirror.Pos(end.line, end.ch - procedureName.length);
+      this._editor.setSelection(start, end);
+    },
+    getEditor: function() {
+      return this._editor;
+    }
+  });
+
+  window.RactiveCodeContainerOneLine = RactiveCodeContainerBase.extend({
+    oncomplete: function() {
+      var forceOneLine;
+      this._super();
+      forceOneLine = function(_, change) {
+        var oneLineText;
+        oneLineText = change.text.join('').replace(/\n/g, '');
+        change.update(change.from, change.to, [oneLineText]);
+        return true;
+      };
+      this._editor.on('beforeChange', forceOneLine);
+    }
+  });
+
+  // (Ractive) => Ractive
+  editFormCodeContainerFactory = function(container) {
+    return Ractive.extend({
+      data: function() {
+        return {
+          config: void 0, // Object
+          id: void 0, // String
+          label: void 0, // String
+          onchange: (function() {}), // (String) => Unit
+          style: void 0, // String
+          value: void 0 // String
+        };
+      },
+      twoway: false,
+      components: {
+        codeContainer: container
+      },
+      template: "<label for=\"{{id}}\">{{label}}</label>\n<codeContainer id=\"{{id}}\" initialCode=\"{{value}}\" injectedConfig=\"{{config}}\"\n               onchange=\"{{onchange}}\" style=\"{{style}}\" />"
+    });
+  };
+
+  window.RactiveEditFormOneLineCode = editFormCodeContainerFactory(RactiveCodeContainerOneLine);
+
+  window.RactiveEditFormMultilineCode = editFormCodeContainerFactory(RactiveCodeContainerMultiline);
+
+}).call(this);
+
+//# sourceMappingURL=code-container.js.map
+</script>
+    <script>(function() {
+  // This exists to address some trickiness.  Here are the relevant constraints:
+
+  //   1. HTML color pickers have higher color space resolution than the NetLogo color system
+  //   2. The color picker must be automatically updated when a color value updates in the engine
+  //   3. The engine must be automatically updated when a new color is chosen
+
+  // The logical solution for (2) and (3) is to do the normal two-way binding that we do for the all other
+  // NetLogo variables.  However, if we do that, the new color will be continually clobbered by the one from
+  // the engine, since the picker won't get updated until the color picker is closed (and you'll never close it,
+  // except out of frustration from the fact that your color choice is getting clobbered).  So, okay, we use
+  // `on-input` instead of `on-change` to update the color before closing the picker.  But then (1) comes into
+  // play.
+
+  // So you have this enormous space for visually choosing colors--tens of thousands of points.  However,
+  // only maybe 20 of those points are valid NetLogo colors.  So, with the variables bound together, you
+  // pick a color in the picker, and then the picker jumps to the nearest NetLogo-expressible color (which can
+  // be a pretty far jump).  NetLogo just keeps doing this, ad infinitum.  The user experience feels awful.
+  // So the solution that I've chosen here is to establish kind of a buffer zone, so that we only update the
+  // picker when a new value comes in from the engine.
+
+  // --JAB (4/111/18)
+  window.RactiveColorInput = Ractive.extend({
+    data: function() {
+      return {
+        class: void 0, // String
+        id: void 0, // String
+        isEnabled: true, // Boolean
+        name: void 0, // String
+        style: void 0, // String
+        value: void 0 // String
+      };
+    },
+    on: {
+      'handle-color-change': function({
+          node: {
+            value: hexValue
+          }
+        }) {
+        var color, ex;
+        color = (function() {
+          try {
+            return hexStringToNetlogoColor(hexValue);
+          } catch (error) {
+            ex = error;
+            return 0;
+          }
+        })();
+        this.set('value', color);
+        return false;
+      },
+      render: function() {
+        var observeValue;
+        observeValue = function(newValue, oldValue) {
+          var ex, hexValue, input;
+          if (newValue !== oldValue) {
+            hexValue = (function() {
+              try {
+                return netlogoColorToHexString(this.get('value'));
+              } catch (error) {
+                ex = error;
+                return "#000000";
+              }
+            }).call(this);
+            input = this.find('input');
+            input.value = hexValue;
+            // See Safari workaround comment below.  -JMB January 2019
+            if ((input.jsc != null)) {
+              input.style.backgroundColor = input.value;
+            }
+          }
+        };
+        this.observe('value', observeValue);
+      },
+      // This is a workaround for Safari's lack of support for `color` input types: https://caniuse.com/#feat=input-color
+      // It relies on the `jscolor-picker` package to provide the functionality instead of the browser.
+      // Once Safari and iOS Safari support `color` types properly, we can remove this code and the dependency.
+      //   -JMB January 2019
+      complete: function() {
+        var input;
+        input = this.find('input');
+        if (input.type === "text") {
+          input.style.color = "#00000000";
+          input.style.backgroundColor = input.value;
+          return input.jsc = new jscolor(input, {
+            hash: true,
+            styleElement: null
+          });
+        }
+      }
+    },
+    template: "<input id=\"{{id}}\" class=\"{{class}}\" name=\"{{name}}\" style=\"{{style}}\" type=\"color\"\n       on-change=\"handle-color-change\"\n       {{# !isEnabled }}disabled{{/}} />"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=color-input.js.map
+</script>
+    <script>(function() {
+  window.RactiveEditFormDropdown = Ractive.extend({
+    data: function() {
+      return {
+        changeEvent: void 0, // String
+        choices: void 0, // Array[String]
+        disableds: void 0, // Array[String]
+        name: void 0, // String
+        id: void 0, // String
+        label: void 0, // String
+        selected: void 0, // String
+        checkIsDisabled: function(item) {
+          var ref;
+          return ((ref = this.get('disableds')) != null ? ref : []).indexOf(item) !== -1;
+        }
+      };
+    },
+    on: {
+      // (Context) => Unit
+      '*.changed': function(_) {
+        var event;
+        event = this.get('changeEvent');
+        if ((event != null)) {
+          this.fire(event);
+        }
+      }
+    },
+    twoway: false,
+    template: "<div class=\"{{ divClass }}\">\n  <label for=\"{{ id }}\" class=\"widget-edit-input-label\">{{ label }}</label>\n  <select id=\"{{ id }}\" name=\"{{ name }}\" class=\"widget-edit-dropdown\" value=\"{{ selected }}\">\n    {{#choices }}\n      <option value=\"{{ this }}\" {{# checkIsDisabled(this) }} disabled {{/}}>{{ this }}</option>\n    {{/}}\n  </select>\n</div>"
+  });
+
+  window.RactiveTwoWayDropdown = window.RactiveEditFormDropdown.extend({
+    twoway: true
+  });
+
+}).call(this);
+
+//# sourceMappingURL=dropdown.js.map
+</script>
+    <script>(function() {
+  window.RactiveEditFormLabeledInput = Ractive.extend({
+    data: function() {
+      return {
+        attrs: void 0, // String
+        class: void 0, // String
+        divClass: "flex-row", // String
+        id: void 0, // String
+        labelStr: void 0, // String
+        labelStyle: void 0, // String
+        max: void 0, // Number
+        min: void 0, // Number
+        name: void 0, // String
+        onChange: void 0, // String
+        style: void 0, // String
+        type: void 0, // String
+        value: void 0 // Any
+      };
+    },
+    twoway: false,
+    on: {
+      // (Context) => Unit
+      'exec': function(context) {
+        var event;
+        event = this.get('onChange');
+        if (event) {
+          if (this.get('type') === 'number') {
+            this.set('value', this.clampNumber(this.get('value'), this.get('min'), this.get('max')));
+          }
+          this.fire(event, context);
+        }
+      }
+    },
+    // (Number, Number, Number) => Number
+    clampNumber: function(value, min, max) {
+      if ((min != null) && value < min) {
+        return min;
+      } else if ((max != null) && value > max) {
+        return max;
+      } else {
+        return value;
+      }
+    },
+    template: "<div class=\"{{ divClass }}\">\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      min=\"{{ min }}\" max=\"{{ max }}\" on-change=\"exec\"\n      type=\"{{ type }}\" value=\"{{ value }}\" style=\"{{ style }}\" {{ attrs }} />\n  </div>\n</div>"
+  });
+
+  window.RactiveTwoWayLabeledInput = RactiveEditFormLabeledInput.extend({
+    data: function() {
+      return {
+        attrs: 'lazy step="any"'
+      };
+    },
+    twoway: true
+  });
+
+}).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, // Number
+        id: void 0, // String
+        output: void 0 // String
+      };
+    },
+    observe: {
+      output: function() {
+        return this.update('output').then(() => {
+          var outputElem;
+          outputElem = this.find("#" + this.get("id"));
+          return outputElem != null ? outputElem.scrollTop = outputElem.scrollHeight : void 0;
+        });
+      }
+    },
+    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, // String
+        width: void 0 // String
+      };
+    },
+    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, // Boolean
+        label: void 0, // String
+        value: void 0 // Number
+      };
+    },
+    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, // String
+        name: void 0, // String
+        value: void 0 // String
+      };
+    },
+    twoway: false,
+    on: {
+      validate: function({node}) {
+        var validityStr, varName;
+        varName = node.value.toLowerCase();
+        validityStr = window.keywords.all.some(function(kw) {
+          return kw.toLowerCase() === varName;
+        }) ? `'${node.value}' is a reserved name` : "";
+        node.setCustomValidity(validityStr);
+        return false;
+      }
+    },
+    // coffeelint: disable=max_line_length
+    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\" on-input=\"validate\"\n       pattern=\"[=*!<>:#+/%'&$^.?\\-_a-zA-Z][=*!<>:#+/%'&$^.?\\-\\w]*\"\n       title=\"One or more alphanumeric characters and characters in (( $^.?=*!<>:#+/%'&-_ )).  Cannot start with a number\"\n       required />"
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=variable.js.map
+</script>
+    <script>(function() {
+  var None, maybe;
+
+  ({maybe, None} = tortoise_require('brazier/maybe'));
+
+  window.RactiveAsyncUserDialog = Ractive.extend({
+    lastUpdateMs: void 0, // Number
+    startX: void 0, // Number
+    startY: void 0, // Number
+    view: void 0, // Element
+    data: function() {
+      return {
+        isVisible: void 0, // Boolean
+        state: void 0, // Object[Any]
+        wareaHeight: void 0, // Number
+        wareaWidth: void 0, // Number
+        xLoc: 0, // Number
+        yLoc: 0 // Number
+      };
+    },
+    observe: {
+      isVisible: function(newValue, oldValue) {
+        if (newValue) {
+          this.set('xLoc', this.get('wareaWidth') * .1);
+          this.set('yLoc', (this.get('wareaHeight') * .1) + 150);
+          setTimeout((() => {
+            return this.find("#async-user-dialog").focus();
+          }), 0); // Can't focus dialog until visible --JAB (4/10/19)
+          this.fire('dialog-opened', this);
+        } else {
+          this.fire('dialog-closed', this);
+        }
+      }
+    },
+    on: {
+      'close-popup': function() {
+        this.set('isVisible', false);
+        return false;
+      },
+      'handle-key': function({
+          original: {keyCode}
+        }) {
+        var buttonID;
+        if (keyCode === 13) { // Enter
+          buttonID = (function() {
+            switch (this.get('state').type) {
+              case 'chooser':
+                return "async-dialog-chooser-ok";
+              case 'message':
+                return "async-dialog-message-ok";
+              case 'text-input':
+                return "async-dialog-input-ok";
+              case 'yes-or-no':
+                return "async-dialog-yon-yes";
+              default:
+                throw new Error(`Unknown async dialog type: ${(this.get('state').type)}`);
+            }
+          }).call(this);
+          document.getElementById(buttonID).click();
+          return false;
+        } else if (keyCode === 27) { // Esc
+          return this.fire('close-popup');
+        }
+      },
+      'perform-halt': function() {
+        this.fire('close-popup');
+        this.get('state').callback(None);
+        return false;
+      },
+      'perform-chooser-ok': function() {
+        var elem, index;
+        this.fire('close-popup');
+        elem = document.getElementById('async-dialog-chooser');
+        index = elem.selectedIndex;
+        elem.selectedIndex = 0;
+        this.get('state').callback(maybe(index));
+        return false;
+      },
+      'perform-input-ok': function() {
+        var elem, value;
+        this.fire('close-popup');
+        elem = document.getElementById('async-dialog-text-input');
+        value = elem.value;
+        elem.value = "";
+        this.get('state').callback(maybe(value));
+        return false;
+      },
+      'perform-message-ok': function() {
+        this.fire('close-popup');
+        this.get('state').callback(maybe(0));
+        return false;
+      },
+      'perform-no': function() {
+        this.fire('close-popup');
+        this.get('state').callback(maybe(false));
+        return false;
+      },
+      'perform-yes': function() {
+        this.fire('close-popup');
+        this.get('state').callback(maybe(true));
+        return false;
+      },
+      'show-state': function(event, state) {
+        this.set('state', state);
+        this.set('isVisible', true);
+        return false;
+      },
+      'show-chooser': function(event, message, choices, callback) {
+        this.fire('show-state', {}, {
+          type: 'chooser',
+          message,
+          choices,
+          callback
+        });
+        return false;
+      },
+      'show-text-input': function(event, message, callback) {
+        this.fire('show-state', {}, {
+          type: 'text-input',
+          message,
+          callback
+        });
+        return false;
+      },
+      'show-yes-or-no': function(event, message, callback) {
+        this.fire('show-state', {}, {
+          type: 'yes-or-no',
+          message,
+          callback
+        });
+        return false;
+      },
+      'show-message': function(event, message, callback) {
+        this.fire('show-state', {}, {
+          type: 'message',
+          message,
+          callback
+        });
+        return false;
+      },
+      'start-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, (x, y) => {
+          this.startX = this.get('xLoc') - x;
+          return this.startY = this.get('yLoc') - y;
+        });
+      },
+      'drag-dialog': function(event) {
+        return CommonDrag.drag.call(this, event, (x, y) => {
+          this.set('xLoc', this.startX + x);
+          return this.set('yLoc', this.startY + y);
+        });
+      },
+      'stop-drag': function() {
+        return CommonDrag.dragend.call(this, (function() {}));
+      }
+    },
+    // coffeelint: disable=max_line_length
+    template: "<div id=\"async-user-dialog\" class=\"async-popup\"\n     style=\"{{# !isVisible }}display: none;{{/}} top: {{yLoc}}px; left: {{xLoc}}px; max-width: {{wareaWidth * .4}}px; {{style}}\"\n     draggable=\"true\" on-drag=\"drag-dialog\" on-dragstart=\"start-drag\" on-dragend=\"stop-drag\"\n     on-keydown=\"handle-key\" tabindex=\"0\">\n  <div id=\"{{id}}-closer\" class=\"widget-edit-closer\" on-click=\"perform-halt\">X</div>\n  <div class=\"async-dialog-message\">{{state.message}}</div>\n  <div id=\"async-dialog-controls\" class=\"async-dialog-controls\">{{>controls}}</div>\n</div>",
+    partials: {
+      controls: "{{# state.type === 'message' }}\n  <div class=\"async-dialog-button-row\">\n    <input id=\"async-dialog-message-ok\" type=\"button\" on-click=\"perform-message-ok\" value=\"OK\"/>\n  </div>\n\n{{ elseif state.type === 'text-input' }}\n  <input id=\"async-dialog-text-input\" class=\"async-dialog-text-input\" type=\"text\" />\n  <div class=\"async-dialog-button-row\">\n    <input id=\"async-dialog-input-ok\" type=\"button\" on-click=\"perform-input-ok\" value=\"OK\"/>\n  </div>\n\n{{ elseif state.type === 'chooser' }}\n  <div class=\"h-center-flexbox\">\n    <select id=\"async-dialog-chooser\" class=\"async-dialog-chooser\" style=\"max-width: {{wareaWidth * .3}}px\">\n    {{#state.choices:i}}\n      <option {{# i === 0}} selected{{/}}>{{state.choices[i]}}</option>\n    {{/}}\n    </select>\n  </div>\n  <div class=\"async-dialog-button-row\">\n    <input id=\"async-dialog-chooser-ok\" type=\"button\" on-click=\"perform-chooser-ok\" value=\"OK\"/>\n  </div>\n\n{{ elseif state.type === 'yes-or-no' }}\n  <div class=\"async-dialog-button-row\">\n    <input id=\"async-dialog-yon-no\"  type=\"button\"                           on-click=\"perform-no\"  value=\"No\" />\n    <input id=\"async-dialog-yon-yes\" type=\"button\" style=\"margin-left: 5px;\" on-click=\"perform-yes\" value=\"Yes\"/>\n  </div>\n\n{{else}}\n  Invalid dialog state.\n\n{{/}}"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=async-user-dialog.js.map
+</script>
+    <script>(function() {
+  var alreadyHasA, defaultOptions, genWidgetCreator;
+
+  genWidgetCreator = function(name, widgetType, isEnabled = true, enabler = (function() {
+      return false;
+    })) {
+    return {
+      text: `Create ${name}`,
+      enabler,
+      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(...args);
+  });
+
+  window.RactiveContextable = Ractive.extend({
+    // type ContextMenuOptions = [{ text: String, isEnabled: Boolean, action: () => Unit }]
+    data: function() {
+      return {
+        contextMenuOptions: void 0 // ContextMenuOptions
+      };
+    },
+    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, // ContextMenuOptions
+        mouseX: 0, // Number
+        mouseY: 0, // Number
+        target: void 0, // Ractive
+        visible: false // Boolean
+      };
+    },
+    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-mouseup=\"..action(target, mouseX, mouseY)\">{{..text}}</li>\n        {{ else }}\n          <li class=\"context-menu-item disabled\" on-mouseup=\"ignore-click\">{{..text}}</li>\n        {{/}}\n      {{/}}\n    </ul>\n  </div>\n</div>\n{{/}}"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=context-menu.js.map
+</script>
+    <script>(function() {
+  // All callers of this should have the properties `view: Element` and `lastUpdateMs: Number`,
+  // and these functions should be called with `call(<Ractive>, <args...>)` --JAB (11/23/17)
+  window.CommonDrag = {
+    dragstart: function({original}, checkIsValid, callback) {
+      var clientX, clientY, dataTransfer, invisiGIF, view;
+      ({clientX, clientY, dataTransfer, view} = original);
+      if (checkIsValid(clientX, clientY)) {
+        // The invisible GIF is used to hide the ugly "ghost" images that appear by default when dragging
+        // The `setData` thing is done because, without it, Firefox feels that the drag hasn't really begun
+        // So we give them some bogus drag data and get on with our lives. --JAB (11/22/17)
+        invisiGIF = document.createElement('img');
+        invisiGIF.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
+        if (typeof dataTransfer.setDragImage === "function") {
+          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({
+        original: {clientX, clientY, view}
+      }, callback) {
+      var ref, ref1, root, x, y;
+      if (this.view != null) {
+        // Thanks, Firefox! --JAB (11/23/17)
+        root = (function(r) {
+          if (r.parent != null) {
+            return arguments.callee(r.parent);
+          } else {
+            return r;
+          }
+        })(this);
+        x = clientX !== 0 ? clientX : (ref = root.get('lastDragX')) != null ? ref : -1;
+        y = clientY !== 0 ? clientY : (ref1 = root.get('lastDragY')) != null ? ref1 : -1;
+        // When dragging stops, `client(X|Y)` tend to be very negative nonsense values
+        // We only take non-negative values here, to avoid the widget disappearing --JAB (3/22/16, 10/29/17)
+
+        // Only update drag coords 60 times per second.  If we don't throttle,
+        // all of this `set`ing murders the CPU --JAB (10/29/17)
+        if (this.view === view && x > 0 && y > 0 && ((new Date).getTime() - this.lastUpdateMs) >= (1000 / 60)) {
+          this.lastUpdateMs = (new Date).getTime();
+          callback(x, y);
+        }
+      }
+      return true;
+    },
+    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();
+      }
+    }
+  };
+
+  // Ugh.  Single inheritance is a pox.  --JAB (10/29/17)
+  window.RactiveDraggableAndContextable = RactiveContextable.extend({
+    lastUpdateMs: void 0, // Number
+    startLeft: void 0, // Number
+    startRight: void 0, // Number
+    startTop: void 0, // Number
+    startBottom: void 0, // Number
+    view: void 0, // Element
+    data: function() {
+      return {
+        left: void 0, // Number
+        right: void 0, // Number
+        top: void 0, // Number
+        bottom: void 0 // Number
+      };
+    },
+    nudge: function(direction) {
+      switch (direction) {
+        case "up":
+          if (this.get('top') > 0) {
+            this.set('top', this.get('top') - 1);
+            return this.set('bottom', this.get('bottom') - 1);
+          }
+          break;
+        case "down":
+          this.set('top', this.get('top') + 1);
+          return this.set('bottom', this.get('bottom') + 1);
+        case "left":
+          if (this.get('left') > 0) {
+            this.set('left', this.get('left') - 1);
+            return this.set('right', this.get('right') - 1);
+          }
+          break;
+        case "right":
+          this.set('left', this.get('left') + 1);
+          return this.set('right', this.get('right') + 1);
+        default:
+          return console.log(`'${direction}' is an impossible direction for nudging...`);
+      }
+    },
+    on: {
+      'start-widget-drag': function(event) {
+        return CommonDrag.dragstart.call(this, event, (function() {
+          return true;
+        }), (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;
+        });
+      },
+      'drag-widget': function(event) {
+        var isMac, isSnapping;
+        isMac = window.navigator.platform.startsWith('Mac');
+        isSnapping = (!isMac && !event.original.ctrlKey) || (isMac && !event.original.metaKey);
+        return CommonDrag.drag.call(this, event, (x, y) => {
+          var findAdjustment, newLeft, newTop, xAdjust, yAdjust;
+          findAdjustment = function(n) {
+            return n - (Math.round(n / 5) * 5);
+          };
+          xAdjust = isSnapping ? findAdjustment(this.startLeft + x) : 0;
+          yAdjust = isSnapping ? findAdjustment(this.startTop + y) : 0;
+          newLeft = this.startLeft + x - xAdjust;
+          newTop = this.startTop + y - yAdjust;
+          if (newLeft < 0) {
+            this.set('left', 0);
+            this.set('right', this.startRight - this.startLeft);
+          } else {
+            this.set('left', newLeft);
+            this.set('right', this.startRight + x - xAdjust);
+          }
+          if (newTop < 0) {
+            this.set('top', 0);
+            return this.set('bottom', this.startBottom - this.startTop);
+          } else {
+            this.set('top', newTop);
+            return this.set('bottom', this.startBottom + y - yAdjust);
+          }
+        });
+      },
+      'stop-widget-drag': function() {
+        return CommonDrag.dragend.call(this, () => {
+          this.startLeft = void 0;
+          this.startRight = void 0;
+          this.startTop = void 0;
+          return this.startBottom = void 0;
+        });
+      }
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=draggable.js.map
+</script>
+    <script>(function() {
+  window.EditForm = Ractive.extend({
+    lastUpdateMs: void 0, // Number
+    startX: void 0, // Number
+    startY: void 0, // Number
+    view: void 0, // Element
+    data: function() {
+      return {
+        parentClass: 'netlogo-widget-container', // String
+        submitLabel: 'OK', // String
+        cancelLabel: 'Cancel', // String
+        horizontalOffset: void 0, // Number
+        verticalOffset: void 0, // Number
+        amProvingMyself: false, // Boolean
+        idBasis: void 0, // String
+        style: void 0, // String
+        visible: void 0, // Boolean
+        xLoc: void 0, // Number
+        yLoc: void 0, // Number
+        draggable: true // Boolean
+      };
+    },
+    computed: {
+      id: (function() {
+        return `${this.get('idBasis')
+    // () => String
+}-edit-window`;
+      })
+    },
+    twoway: false,
+    // We make the bound values lazy and then call `resetPartials` when showing, so as to
+    // prevent the perpetuation of values after a change-and-cancel. --JAB (4/1/16)
+    lazy: true,
+    on: {
+      submit: function({node}) {
+        var newProps;
+        try {
+          newProps = this.genProps(node);
+          if (newProps != null) {
+            return this.fire('update-widget-value', {}, newProps);
+          }
+        } finally {
+          this.set('amProvingMyself', false);
+          this.fire('activate-cloaking-device');
+          return false;
+        }
+      },
+      'show-yourself': function() {
+        var container, containerMidX, containerMidY, dialogHalfHeight, dialogHalfWidth, elem, findParentByClass, ref, ref1, whatADrag;
+        findParentByClass = function(clss) {
+          return function({
+              parentElement: parent
+            }) {
+            if (parent != null) {
+              if (parent.classList.contains(clss)) {
+                return parent;
+              } else {
+                return findParentByClass(clss)(parent);
+              }
+            } else {
+              return void 0;
+            }
+          };
+        };
+        // Must unhide before measuring --JAB (3/21/16)
+        this.set('visible', true);
+        elem = this.getElem();
+        elem.focus();
+        this.fire('lock-selection', this.parent);
+        this.fire('edit-form-opened', this);
+        container = findParentByClass(this.get('parentClass'))(elem);
+        containerMidX = container.offsetWidth / 2;
+        containerMidY = container.offsetHeight / 2;
+        dialogHalfWidth = elem.offsetWidth / 2;
+        dialogHalfHeight = elem.offsetHeight / 2;
+        this.set('xLoc', (ref = this.get('horizontalOffset')) != null ? ref : containerMidX - dialogHalfWidth);
+        this.set('yLoc', (ref1 = this.get('verticalOffset')) != null ? ref1 : containerMidY - dialogHalfHeight);
+        this.resetPartial('widgetFields', this.partials.widgetFields);
+        // This is awful, but it's the least invasive way I have come up with to workaround a 3 year old Firefox bug.
+        // https://bugzilla.mozilla.org/show_bug.cgi?id=1189486
+        // -JMB 10/18.
+        whatADrag = (el) => {
+          el.addEventListener('focus', (_) => {
+            this.set('draggable', false);
+          });
+          return el.addEventListener('blur', (_) => {
+            this.set('draggable', true);
+          });
+        };
+        this.findAll('textarea').forEach(whatADrag);
+        this.findAll('input').forEach(whatADrag);
+        return false;
+      },
+      'activate-cloaking-device': function() {
+        this.set('visible', false);
+        this.fire('unlock-selection');
+        this.fire('edit-form-closed', this);
+        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, (x, y) => {
+          this.startX = this.get('xLoc') - x;
+          return this.startY = this.get('yLoc') - y;
+        });
+      },
+      'drag-edit-dialog': function(event) {
+        return CommonDrag.drag.call(this, event, (x, y) => {
+          this.set('xLoc', this.startX + x);
+          return this.set('yLoc', this.startY + y);
+        });
+      },
+      'stop-edit-drag': function() {
+        return CommonDrag.dragend.call(this, (function() {}));
+      },
+      'cancel-edit': function() {
+        this.fire('activate-cloaking-device');
+      },
+      'handle-key': function({
+          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=\"{{draggable}}\" 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=\"{{ submitLabel }}\" />\n        <input class=\"widget-edit-text\" type=\"button\" on-click=\"cancel-edit\" value=\"{{ cancelLabel }}\" />\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,
+    splice = [].splice;
+
+  WidgetEventGenerators = {
+    recompile: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('recompile');
+        },
+        type: "recompile"
+      };
+    },
+    recompileLite: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('recompile-lite');
+        },
+        type: "recompile-lite"
+      };
+    },
+    redrawView: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('redraw-view');
+        },
+        type: "redrawView"
+      };
+    },
+    refreshChooser: function() {
+      return {
+        // For whatever reason, if Ractive finds second argument of `fire` to be an object (in this case, our `widget`),
+        // it merges that arg into the context and ruins everything. --JAB (4/8/18)
+        run: function(ractive, widget) {
+          return ractive.fire('refresh-chooser', "ignore", 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}`
+      };
+    },
+    resizePatches: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('set-patch-size', widget.dimensions.patchSize);
+        },
+        type: "resizePatches"
+      };
+    },
+    resizeView: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('resize-view');
+        },
+        type: "resizeView"
+      };
+    },
+    updateEngineValue: function() {
+      return {
+        run: function(ractive, widget) {
+          return world.observer.setGlobal(widget.variable, widget.currentValue);
+        },
+        type: "updateCurrentValue"
+      };
+    },
+    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, // String
+        isEditing: void 0, // Boolean
+        isSelected: void 0, // Boolean
+        resizeDirs: ['left', 'right', 'top', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'],
+        widget: void 0 // Widget
+      };
+    },
+    components: {
+      editForm: void 0 // Element
+    },
+    computed: {
+      classes: function() {
+        return `${(this.get('isEditing') ? 'interface-unlocked' : '')}\n${(this.get('isSelected') ? 'selected' : '')}`;
+      },
+      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;`;
+      }
+    },
+    // (Object[Number]) => Unit
+    handleResize: function({left, right, top, bottom}) {
+      this.set('widget.left', left);
+      this.set('widget.right', right);
+      this.set('widget.top', top);
+      this.set('widget.bottom', bottom);
+    },
+    // () => Unit
+    handleResizeEnd: function() {},
+    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); // Original event name: "cutMyLifeIntoPieces" --JAB (11/8/17)
+      },
+      "*.update-widget-value": function(_, values) {
+        var event, eventArraysArray, events, ex, getByPath, i, isTroublesome, k, len, name, newies, oldies, 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 key, lastParent, parents, ref;
+              ref = path.split('.'), [...parents] = ref, [key] = splice.call(parents, -1);
+              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 = [].concat(...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}}\" class=\"editor-overlay{{#isSelected}} selected{{/}}\"\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, // String
+        display: void 0, // String
+        isForever: void 0, // Boolean
+        source: void 0, // String
+        startsDisabled: void 0, // Boolean
+        type: void 0 // String
+      };
+    },
+    computed: {
+      displayedType: {
+        get: function() {
+          return this._typeToDisplay(this.get('type'));
+        }
+      }
+    },
+    on: {
+      'handle-action-key-press': function({
+          event: {key},
+          node
+        }) {
+        if (key !== "Enter") {
+          return node.value = "";
+        }
+      }
+    },
+    twoway: false,
+    components: {
+      formCheckbox: RactiveEditFormCheckbox,
+      formCode: RactiveEditFormMultilineCode,
+      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",
+      // coffeelint: disable=max_line_length
+      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: 33px;\"\n          on-keypress=\"handle-action-key-press\" />\n</div>"
+    },
+    // coffeelint: enable=max_line_length
+    _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, // String
+        ticksStarted: void 0 // Boolean
+      };
+    },
+    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]
+      };
+    },
+    minWidth: 35,
+    minHeight: 30,
+    // coffeelint: disable=max_line_length
+    template: "{{>editorOverlay}}\n{{>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}}\" />",
+    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}} {{classes}}\"\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}} {{classes}}\">\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{{/}}"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=button.js.map
+</script>
+    <script>(function() {
+  var ChooserEditForm;
+
+  ChooserEditForm = EditForm.extend({
+    data: function() {
+      return {
+        choices: void 0, // String
+        display: void 0, // String
+        setHiddenInput: (function(code) {
+          var elem, ex, validityStr;
+          elem = this.find(`#${this.get('id')}-choices-hidden`);
+          elem.value = code;
+          validityStr = (function() {
+            try {
+              Converter.stringToJSValue(`[${code}]`);
+              return "";
+            } catch (error) {
+              ex = error;
+              return "Invalid format: Must be a space-separated list of NetLogo literal values";
+            }
+          })();
+          return elem.setCustomValidity(validityStr);
+        })
+      };
+    },
+    twoway: false,
+    components: {
+      formCode: RactiveEditFormMultilineCode,
+      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=\"\" onchange=\"{{setHiddenInput}}\" />\n<input id=\"{{id}}-choices-hidden\" name=\"trueCodeChoices\" class=\"all-but-hidden\"\n       style=\"margin: -5px 0 0 7px;\" type=\"text\" />\n<div class=\"widget-edit-hint-text\">Example: \"a\" \"b\" \"c\" 1 2 3</div>"
+    }
+  });
+
+  window.RactiveChooser = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this).delete],
+        resizeDirs: ['left', 'right']
+      };
+    },
+    components: {
+      editForm: ChooserEditForm
+    },
+    eventTriggers: function() {
+      var recompileEvent;
+      recompileEvent = this.findComponent('editForm').get('amProvingMyself') ? this._weg.recompileLite : this._weg.recompile;
+      return {
+        choices: [this._weg.refreshChooser],
+        variable: [recompileEvent, this._weg.rename]
+      };
+    },
+    minWidth: 55,
+    minHeight: 45,
+    // coffeelint: disable=max_line_length
+    template: "{{>editorOverlay}}\n<label id=\"{{id}}\" class=\"netlogo-widget netlogo-chooser netlogo-input {{classes}}\" 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}}\" />",
+    partials: {
+      literal: "{{# typeof . === \"string\"}}{{.}}{{/}}\n{{# typeof . === \"number\"}}{{.}}{{/}}\n{{# typeof . === \"boolean\"}}{{.}}{{/}}\n{{# typeof . === \"object\"}}\n  [{{#.}}\n    {{>literal}}\n  {{/}}]\n{{/}}"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=chooser.js.map
+</script>
+    <script>(function() {
+  window.RactiveModelCodeComponent = Ractive.extend({
+    data: function() {
+      return {
+        code: void 0, // String
+        isReadOnly: void 0, // Boolean
+        lastCompiledCode: void 0, // String
+        lastCompileFailed: false, // Boolean
+        procedureNames: {},
+        autoCompleteStatus: false, // Boolean
+        codeUsage: [],
+        usageVisibility: false, // Boolean
+        selectedCode: void 0, // String
+        usageLeft: void 0, // String
+        usageTop: void 0 // String
+      };
+    },
+    components: {
+      codeEditor: RactiveCodeContainerMultiline
+    },
+    computed: {
+      isStale: '(${code} !== ${lastCompiledCode}) || ${lastCompileFailed}'
+    },
+    // (String) => Unit
+    setCode: function(code) {
+      this.findComponent('codeEditor').setCode(code);
+    },
+    setupProceduresDropdown: function() {
+      $('#procedurenames-dropdown').chosen({
+        search_contains: true
+      });
+      $('#procedurenames-dropdown').on('change', () => {
+        var index, procedureNames, selectedProcedure;
+        procedureNames = this.get('procedureNames');
+        selectedProcedure = $('#procedurenames-dropdown').val();
+        index = procedureNames[selectedProcedure];
+        return this.findComponent('codeEditor').highlightProcedure(selectedProcedure, index);
+      });
+      $('#procedurenames-dropdown').on('chosen:showing_dropdown', () => {
+        return this.setProcedureNames();
+      });
+    },
+    getProcedureNames: function() {
+      var codeString, procedureCheck, procedureMatch, procedureNames;
+      codeString = this.get('code');
+      procedureNames = {};
+      procedureCheck = /^\s*(?:to|to-report)\s(?:\s*;.*\n)*\s*(\w\S*)/gm;
+      while ((procedureMatch = procedureCheck.exec(codeString))) {
+        procedureNames[procedureMatch[1]] = procedureMatch.index + procedureMatch[0].length;
+      }
+      return procedureNames;
+    },
+    setProcedureNames: function() {
+      var procedureNames;
+      procedureNames = this.getProcedureNames();
+      this.set('procedureNames', procedureNames);
+      $('#procedurenames-dropdown').trigger('chosen:updated');
+    },
+    setupAutoComplete: function(hintList) {
+      var editor;
+      CodeMirror.registerHelper('hintWords', 'netlogo', hintList);
+      editor = this.findComponent('codeEditor').getEditor();
+      editor.on('keyup', (cm, event) => {
+        if (!cm.state.completionActive && event.keyCode > 64 && event.keyCode < 91 && this.get('autoCompleteStatus')) {
+          return cm.showHint({
+            completeSingle: false
+          });
+        }
+      });
+    },
+    netLogoHintHelper: function(cm, options) {
+      var cur, found, from, term, to, token;
+      cur = cm.getCursor();
+      token = cm.getTokenAt(cur);
+      to = CodeMirror.Pos(cur.line, token.end);
+      if (token.string && /\S/.test(token.string[token.string.length - 1])) {
+        term = token.string;
+        from = CodeMirror.Pos(cur.line, token.start);
+      } else {
+        term = '';
+        from = to;
+      }
+      found = options.words.filter(function(word) {
+        return word.slice(0, term.length) === term;
+      });
+      if (found.length > 0) {
+        return {
+          list: found,
+          from: from,
+          to: to
+        };
+      }
+    },
+    autoCompleteWords: function() {
+      var allKeywords, supportedKeywords;
+      allKeywords = new Set(window.keywords.all);
+      supportedKeywords = Array.from(allKeywords).filter(function(kw) {
+        return !window.keywords.unsupported.includes(kw);
+      }).map(function(kw) {
+        return kw.replace("\\", "");
+      });
+      return Object.keys(this.getProcedureNames()).concat(supportedKeywords);
+    },
+    toggleLineComments: function(editor) {
+      var anchor, cursor, end, head, start;
+      ({start, end} = (editor.somethingSelected()) ? (({head, anchor} = editor.listSelections()[0]), (head.line > anchor.line || (head.line === anchor.line && head.ch > anchor.ch)) ? {
+        start: anchor,
+        end: head
+      } : {
+        start: head,
+        end: anchor
+      }) : (cursor = editor.getCursor(), {
+        start: cursor,
+        end: cursor
+      }));
+      if (!editor.uncomment(start, end)) {
+        editor.lineComment(start, end);
+      }
+    },
+    setupCodeUsagePopup: function() {
+      var codeUsageMap, editor;
+      editor = this.findComponent('codeEditor').getEditor();
+      codeUsageMap = {
+        'Ctrl-U': () => {
+          if (editor.somethingSelected()) {
+            return this.setCodeUsage();
+          }
+        },
+        'Cmd-U': () => {
+          if (editor.somethingSelected()) {
+            return this.setCodeUsage();
+          }
+        },
+        'Ctrl-;': () => {
+          this.toggleLineComments(editor);
+        },
+        'Cmd-;': () => {
+          this.toggleLineComments(editor);
+        }
+      };
+      editor.addKeyMap(codeUsageMap);
+      editor.on('cursorActivity', (cm) => {
+        if (this.get('usageVisibility')) {
+          return this.set('usageVisibility', false);
+        }
+      });
+    },
+    getCodeUsage: function() {
+      var check, codeString, codeUsage, editor, line, lineNumber, match, pos, selectedCode;
+      editor = this.findComponent('codeEditor').getEditor();
+      selectedCode = editor.getSelection().trim();
+      this.set('selectedCode', selectedCode);
+      codeString = this.get('code');
+      check = RegExp(`\\b(${selectedCode})\\b`, "g");
+      codeUsage = [];
+      while ((match = check.exec(codeString))) {
+        pos = editor.posFromIndex(match.index + match[1].length);
+        lineNumber = pos.line + 1;
+        line = editor.getLine(pos.line);
+        codeUsage.push({pos, lineNumber, line});
+      }
+      return codeUsage;
+    },
+    setCodeUsage: function() {
+      var codeUsage, editor, pos;
+      codeUsage = this.getCodeUsage();
+      editor = this.findComponent('codeEditor').getEditor();
+      this.set('codeUsage', codeUsage);
+      pos = editor.cursorCoords(editor.getCursor());
+      this.set('usageLeft', pos.left);
+      this.set('usageTop', pos.top);
+      this.set('usageVisibility', true);
+    },
+    on: {
+      'complete': function(_) {
+        this.setupProceduresDropdown();
+        CodeMirror.registerHelper('hint', 'fromList', this.netLogoHintHelper);
+        this.setupAutoComplete(this.autoCompleteWords());
+        this.setupCodeUsagePopup();
+      },
+      'recompile': function(_) {
+        this.setupAutoComplete(this.autoCompleteWords());
+      },
+      'jump-to-usage': function(context, usagePos) {
+        var editor, end, selectedCode, start;
+        editor = this.findComponent('codeEditor').getEditor();
+        selectedCode = this.get('selectedCode');
+        end = usagePos;
+        start = CodeMirror.Pos(end.line, end.ch - selectedCode.length);
+        editor.setSelection(start, end);
+        this.set('usageVisibility', false);
+      }
+    },
+    // coffeelint: disable=max_line_length
+    template: "<div class=\"netlogo-tab-content netlogo-code-container\"\n     grow-in='{disable:\"code-tab-toggle\"}' shrink-out='{disable:\"code-tab-toggle\"}'>\n  <ul class=\"netlogo-codetab-widget-list\">\n    <li class=\"netlogo-codetab-widget-listitem\">\n      <select class=\"netlogo-procedurenames-dropdown\" id=\"procedurenames-dropdown\" data-placeholder=\"Jump to Procedure\" tabindex=\"2\">\n        {{#each procedureNames:name}}\n          <option value=\"{{name}}\">{{name}}</option>\n        {{/each}}\n      </select>\n    </li>\n    <li class=\"netlogo-codetab-widget-listitem\">\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    </li>\n    <li class=\"netlogo-codetab-widget-listitem\">\n      <input type='checkbox' class=\"netlogo-autocomplete-checkbox\" checked='{{autoCompleteStatus}}'>\n      <label class=\"netlogo-autocomplete-label\">\n        Auto Complete {{# autoCompleteStatus}}Enabled{{else}}Disabled{{/}}\n      </label>\n    </li>\n  </ul>\n  <codeEditor id=\"netlogo-code-tab-editor\" code=\"{{code}}\"\n              injectedConfig=\"{ lineNumbers: true, readOnly: {{isReadOnly}} }\"\n              extraClasses=\"['netlogo-code-tab']\" />\n</div>\n<div class=\"netlogo-codeusage-popup\" style=\"left: {{usageLeft}}px; top: {{usageTop}}px;\">\n  {{# usageVisibility}}\n    <ul class=\"netlogo-codeusage-list\">\n      {{#each codeUsage}}\n        <li class=\"netlogo-codeusage-item\" on-click=\"[ 'jump-to-usage', this.pos ]\">{{this.lineNumber}}: {{this.line}}</li>\n      {{/each}}\n    </ul>\n  {{/}}\n</div>"
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=code-editor.js.map
+</script>
+    <script>(function() {
+  window.RactiveConsoleWidget = Ractive.extend({
+    data: function() {
+      return {
+        input: '',
+        isEditing: void 0, // Boolean (for widget editing)
+        agentTypes: ['observer', 'turtles', 'patches', 'links'],
+        agentTypeIndex: 0,
+        checkIsReporter: void 0, // (String) => Boolean
+        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) {
+            this.set('agentTypeIndex', index);
+            return this.focusCommandCenterEditor();
+          }
+        }
+      }
+    },
+    components: {
+      printArea: RactivePrintArea
+    },
+    onrender: function() {
+      var changeAgentType, commandCenterEditor, consoleErrorLog, moveInHistory, run;
+      changeAgentType = () => {
+        return this.set('agentTypeIndex', (this.get('agentTypeIndex') + 1) % this.get('agentTypes').length);
+      };
+      moveInHistory = (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);
+      };
+      consoleErrorLog = (messages) => {
+        return this.set('output', `${this.get('output')}ERROR: ${messages.join('\n')}\n`);
+      };
+      run = () => {
+        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, input});
+          }
+          this.set('historyIndex', history.length);
+          if (agentType !== 'observer') {
+            input = `ask ${agentType} [ ${input} ]`;
+          }
+          this.fire('run', {}, input, consoleErrorLog);
+          this.set('input', '');
+          return this.set('workingEntry', {});
+        }
+      };
+      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: () => {
+            return moveInHistory(-1);
+          },
+          Down: () => {
+            return moveInHistory(1);
+          },
+          Tab: () => {
+            return changeAgentType();
+          }
+        }
+      });
+      this.focusCommandCenterEditor = function() {
+        return commandCenterEditor.focus();
+      };
+      commandCenterEditor.on('beforeChange', function(_, change) {
+        var oneLineText;
+        oneLineText = change.text.join('').replace(/\n/g, '');
+        change.update(change.from, change.to, [oneLineText]);
+        return true;
+      });
+      commandCenterEditor.on('change', () => {
+        return this.set('input', commandCenterEditor.getValue());
+      });
+      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');
+        }
+      });
+    },
+    // String -> Unit
+    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() {
+  var isMac, keyRow, keyTable, platformCtrlHtml;
+
+  isMac = window.navigator.platform.startsWith('Mac');
+
+  platformCtrlHtml = isMac ? "&#8984;" : "ctrl";
+
+  // (Array[String], String) => String
+  keyRow = function(keys, explanation) {
+    return `<tr>\n  <td class="help-keys">${keys.map(function(key) {
+      return "<kbd>" + key + "</kbd>";
+    }).join('')}</td>\n  <td class="help-explanation">${explanation}</td>\n</tr>`;
+  };
+
+  // (Array[Array[Array[String], String]]) => String
+  keyTable = function(entries) {
+    return `<table class="help-key-table">\n  ${entries.map(function([keys, explanation]) {
+      return keyRow(keys, explanation);
+    }).join('\n')}\n</table>`;
+  };
+
+  window.RactiveHelpDialog = Ractive.extend({
+    data: function() {
+      return {
+        isOverlayUp: void 0, // Boolean
+        isVisible: void 0, // Boolean
+        stateName: void 0, // String
+        wareaHeight: void 0, // Number
+        wareaWidth: void 0 // Number
+      };
+    },
+    observe: {
+      isVisible: function(newValue, oldValue) {
+        this.set('isOverlayUp', newValue);
+        if (newValue) {
+          setTimeout((() => {
+            return this.find("#help-dialog").focus();
+          }), 0); // Dialog isn't visible yet, so can't be focused --JAB (5/2/18)
+          this.fire('dialog-opened', this);
+        } else {
+          this.fire('dialog-closed', this);
+        }
+      }
+    },
+    on: {
+      'close-popup': function() {
+        this.set('isVisible', false);
+        return false;
+      },
+      'handle-key': function({
+          original: {keyCode}
+        }) {
+        if (keyCode === 27) {
+          this.fire('close-popup');
+          return false;
+        }
+      }
+    },
+    // coffeelint: disable=max_line_length
+    template: "<div id=\"help-dialog\" class=\"help-popup\"\n     style=\"{{# !isVisible }}display: none;{{/}} top: {{(wareaHeight * .1) + 150}}px; left: {{wareaWidth * .1}}px; width: {{wareaWidth * .8}}px; {{style}}\"\n     on-keydown=\"handle-key\" tabindex=\"0\">\n  <div id=\"{{id}}-closer\" class=\"widget-edit-closer\" on-click=\"close-popup\">X</div>\n  <div>{{>helpText}}</div>\n</div>",
+    partials: {
+      helpAuthoringEditWidget: keyTable([[["enter"], "submit form"], [["escape"], "close form and ignore any changes made"]]),
+      helpAuthoringStandard: keyTable([[[platformCtrlHtml, "shift", "l"], "switch to interactive mode"], [[platformCtrlHtml, "shift", "h"], "toggle resizer visibility"], [["escape"], "close context menu if it is open, or deselect any selected widget"], [[platformCtrlHtml], "hold to ignore \"snap to grid\" while moving or resizing the selected widget"], [["&uarr;", "&darr;", "&larr;", "&rarr;"], "move widget, irrespective of the grid"]].concat(!isMac ? [[["delete"], "delete the selected widget"]] : [])),
+      helpInteractive: keyTable([[[platformCtrlHtml, "shift", "l"], "switch to authoring mode"], [[platformCtrlHtml, "u"], "find all usages of selected text (when in NetLogo Code editor)"], [[platformCtrlHtml, ";"], "comment/uncomment a line of code (when in NetLogo Code editor)"]]),
+      helpText: "<table>\n  {{# stateName === 'interactive' }}\n    {{>helpInteractive}}\n  {{elseif stateName === 'authoring - plain' }}\n    {{>helpAuthoringStandard}}\n  {{elseif stateName === 'authoring - editing widget' }}\n    {{>helpAuthoringEditWidget}}\n  {{else}}\n    Invalid help state.\n  {{/}}\n</table>"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=help-dialog.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', () => {
+        this.set('rawText', infoTabEditor.getValue());
+        return this.set('info', infoTabEditor.getValue());
+      });
+    },
+    template: "<div class='netlogo-info-editor'></div>"
+  });
+
+  window.RactiveInfoTabWidget = Ractive.extend({
+    components: {
+      infoeditor: RactiveInfoTabEditor
+    },
+    mdToHTML: function(md) {
+      // html_sanitize is provided by Google Caja - see https://code.google.com/p/google-caja/wiki/JsHtmlSanitizer
+      // RG 8/18/15
+      return window.html_sanitize(exports.toHTML(md), function(url) {
+        if (/^https?:\/\//.test(url)) {
+          return url;
+        } else {
+          return void 0; // URL Sanitizer
+        }
+      }, function(id) {
+        return id; // ID Sanitizer
+      });
+    },
+    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, // String
+        display: void 0, // String
+        isMultiline: void 0, // Boolean
+        value: void 0 // Any
+      };
+    },
+    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; // Color number for black
+            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",
+      // coffeelint: disable=max_line_length
+      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=\"['String', 'Number', 'Color', 'String (reporter)', 'String (commands)']\" />\n  <formCheckbox id=\"{{id}}-multiline-checkbox\" isChecked={{isMultiline}} labelText=\"Multiline\"\n                name=\"multiline\" disabled=\"typeof({{isMultiline}}) === 'undefined'\" />\n</div>\n<spacer height=\"10px\" />"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+  window.RactiveInput = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this).delete]
+      };
+    },
+    components: {
+      colorInput: RactiveColorInput,
+      editForm: InputEditForm,
+      editor: RactiveCodeContainerMultiline
+    },
+    eventTriggers: function() {
+      var amProvingSelf, recompileEvent;
+      amProvingSelf = this.findComponent('editForm').get('amProvingMyself');
+      recompileEvent = amProvingSelf ? this._weg.recompileLite : this._weg.recompile;
+      return {
+        currentValue: [this._weg.updateEngineValue],
+        variable: [recompileEvent, this._weg.rename]
+      };
+    },
+    on: {
+      // We get this event even when switching boxtypes (from Command/Reporter to anything else).
+      // However, this is a problem for Color and Number Inputs, because the order of things is:
+
+      //   * Set new default value (`0`)
+      //   * Plug it into the editor (where it converts to `"0"`)
+      //   * Update the data model with this value
+      //   * Throw out the editor and replace it with the proper HTML element
+      //   * Oh, gosh, my number is actually a string
+
+      // The proper fix is really to get rid of the editor before stuffing the new value into it,
+      // but that sounds fidgetty.  This fix is also fidgetty, but it's only fidgetty here, for Inputs;
+      // other widget types are left unbothered by this. --JAB (4/16/18)
+      'code-changed': function(_, newValue) {
+        if (this.get('widget').boxedValue.type.includes("String ")) {
+          this.set('widget.currentValue', newValue);
+        }
+        return false;
+      },
+      'handle-keypress': function({
+          original: {keyCode, target}
+        }) {
+        if ((!this.get('widget.boxedValue.multiline')) && keyCode === 13) { // Enter key in single-line input
+          target.blur();
+          return false;
+        }
+      },
+      render: function() {
+        // Scroll to bottom on value change --JAB (8/17/16)
+        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);
+          }
+        });
+      }
+    },
+    minWidth: 70,
+    minHeight: 43,
+    template: "{{>editorOverlay}}\n{{>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          />",
+    // coffeelint: disable=max_line_length
+    partials: {
+      input: "<label id=\"{{id}}\" class=\"netlogo-widget netlogo-input-box netlogo-input {{classes}}\" 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%;\" initialCode=\"{{widget.currentValue}}\" isDisabled=\"{{isEditing}}\" />\n  {{/}}\n  {{# widget.boxedValue.type === 'Color'}}\n    <colorInput class=\"netlogo-multiline-input\" style=\"margin: 0; width: 100%;\" value=\"{{widget.currentValue}}\" isEnabled=\"{{!isEditing}}\" />\n  {{/}}\n</label>"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=input.js.map
+</script>
+    <script>(function() {
+  var LabelEditForm;
+
+  LabelEditForm = EditForm.extend({
+    data: function() {
+      return {
+        color: void 0, // String
+        fontSize: void 0, // Number
+        text: void 0, // String
+        transparent: void 0, // Boolean
+        _color: void 0 // String
+      };
+    },
+    twoway: false,
+    components: {
+      colorInput: RactiveColorInput,
+      formCheckbox: RactiveEditFormCheckbox,
+      formFontSize: RactiveEditFormFontSize,
+      labeledInput: RactiveEditFormLabeledInput,
+      spacer: RactiveEditFormSpacer
+    },
+    genProps: function(form) {
+      return {
+        color: this.findComponent('colorInput').get('value'),
+        display: form.text.value,
+        fontSize: parseInt(form.fontSize.value),
+        transparent: form.transparent.checked
+      };
+    },
+    on: {
+      init: function() {
+        // A hack (because two-way binding isn't fully properly disabling?!) --JAB (4/11/18)
+        this.set('_color', this.get('color'));
+      }
+    },
+    partials: {
+      title: "Note",
+      // coffeelint: disable=max_line_length
+      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    <div class=\"flex-row\" style=\"align-items: center;\">\n      <label for=\"{{id}}-text-color\" class=\"widget-edit-input-label\">Text color:</label>\n      <div style=\"flex-grow: 1;\">\n        <colorInput id=\"{{id}}-text-color\" name=\"color\" class=\"widget-edit-text widget-edit-input widget-edit-color-pick\" value=\"{{_color}}\" />\n      </div>\n    </div>\n  </div>\n</div>\n\n<spacer height=\"15px\" />\n\n<formCheckbox id=\"{{id}}-transparent-checkbox\" isChecked={{transparent}} labelText=\"Transparent background\" name=\"transparent\" />"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+  window.RactiveLabel = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this).delete],
+        convertColor: netlogoColorToCSS
+      };
+    },
+    components: {
+      editForm: LabelEditForm
+    },
+    eventTriggers: function() {
+      return {};
+    },
+    minWidth: 13,
+    minHeight: 13,
+    template: "{{>editorOverlay}}\n{{>label}}\n{{>form}}",
+    // coffeelint: disable=max_line_length
+    partials: {
+      // Note that ">{{ display }}</pre>" thing is necessary. Since <pre> formats
+      // text exactly as it appears, an extra space between the ">" and the
+      // "{{ display }}" would result in an actual newline in the widget.
+      // BCH 7/28/2015
+      label: "<pre id=\"{{id}}\" class=\"netlogo-widget netlogo-text-box {{classes}}\"\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=\"{{widget.color}}\"\n          fontSize=\"{{widget.fontSize}}\" text=\"{{widget.display}}\"\n          transparent=\"{{widget.transparent}}\" />"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=label.js.map
+</script>
+    <script>(function() {
+  var MonitorEditForm;
+
+  MonitorEditForm = EditForm.extend({
+    data: function() {
+      return {
+        display: void 0, // String
+        fontSize: void 0, // Number
+        precision: void 0, // Number
+        source: void 0 // String
+      };
+    },
+    components: {
+      formCode: RactiveEditFormMultilineCode,
+      formFontSize: RactiveEditFormFontSize,
+      labeledInput: RactiveEditFormLabeledInput,
+      spacer: RactiveEditFormSpacer
+    },
+    twoway: false,
+    // Note how we obtain the code.  We don't grab it out of the form.  The code is not given a `name`.
+    // `name` is not valid on a `div`.  Our CodeMirror instances are using `div`s.  They *could* use
+    // `textarea`s, but I tried that, and it just makes things harder for us.  `textarea`s can take
+    // `name`s, yes, but CodeMirror only updates the true `textarea`'s value for submission when the
+    // `submit` event is triggered, and we're not using the proper `submit` event (since we're using
+    // Ractive's), so the `textarea` doesn't have the correct value when we get here.  It's much, much
+    // more straight-forward to just go digging in the form component for its value. --JAB (4/21/16)
+    genProps: function(form) {
+      var fontSize;
+      fontSize = parseInt(form.fontSize.value);
+      return {
+        display: (form.display.value !== "" ? form.display.value : void 0),
+        fontSize,
+        bottom: this.parent.get('widget.top') + (2 * fontSize) + 23,
+        precision: parseInt(form.precision.value),
+        source: this.findComponent('formCode').findComponent('codeContainer').get('code')
+      };
+    },
+    partials: {
+      title: "Monitor",
+      // coffeelint: disable=max_line_length
+      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>"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+  window.RactiveMonitor = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this).delete],
+        errorClass: void 0, // String
+        resizeDirs: ['left', 'right']
+      };
+    },
+    components: {
+      editForm: MonitorEditForm
+    },
+    eventTriggers: function() {
+      return {
+        source: [this._weg.recompile]
+      };
+    },
+    minWidth: 20,
+    minHeight: 45,
+    template: "{{>editorOverlay}}\n{{>monitor}}\n<editForm idBasis=\"{{id}}\" display=\"{{widget.display}}\" fontSize=\"{{widget.fontSize}}\"\n          precision=\"{{widget.precision}}\" source=\"{{widget.source}}\" />",
+    // coffeelint: disable=max_line_length
+    partials: {
+      monitor: "<div id=\"{{id}}\" class=\"netlogo-widget netlogo-monitor netlogo-output {{classes}}\"\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>"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=monitor.js.map
+</script>
+    <script>(function() {
+  var OutputEditForm;
+
+  OutputEditForm = EditForm.extend({
+    data: function() {
+      return {
+        fontSize: void 0 // Number
+      };
+    },
+    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 // String
+      };
+    },
+    components: {
+      editForm: OutputEditForm,
+      printArea: RactivePrintArea
+    },
+    eventTriggers: function() {
+      return {};
+    },
+    // String -> Unit
+    appendText: function(str) {
+      this.set('text', this.get('text') + str);
+    },
+    setText: function(str) {
+      this.set('text', str);
+    },
+    minWidth: 15,
+    minHeight: 25,
+    template: "{{>editorOverlay}}\n{{>output}}\n<editForm idBasis=\"{{id}}\" fontSize=\"{{widget.fontSize}}\" style=\"width: 285px;\" />",
+    // coffeelint: disable=max_line_length
+    partials: {
+      output: "<div id=\"{{id}}\" class=\"netlogo-widget netlogo-output netlogo-output-widget {{classes}}\" style=\"{{dims}}\">\n  <printArea id=\"{{id}}-print-area\" fontSize=\"{{widget.fontSize}}\" output=\"{{text}}\" />\n</div>"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).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({addedNodes}) {
+            var container, containerObserver;
+            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({
+                    addedNodes: addedNodies
+                  }) {
+                  var menu, menuObserver;
+                  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
+        });
+      }
+    },
+    minWidth: 100,
+    minHeight: 85,
+    // coffeelint: disable=max_line_length
+    template: "{{>editorOverlay}}\n<div id=\"{{id}}\" class=\"netlogo-widget netlogo-plot {{classes}}\"\n     style=\"{{dims}}{{#menuIsOpen}}z-index: 10;{{/}}\"></div>"
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=plot.js.map
+</script>
+    <script>(function() {
+  window.RactiveResizer = Ractive.extend({
+    _isLocked: false, // Boolean
+    _xAdjustment: void 0, // Number
+    _yAdjustment: void 0, // Number
+    data: function() {
+      return {
+        isEnabled: false, // Boolean
+        isVisible: true, // Boolean
+        target: null // Ractive
+      };
+    },
+    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');
+      }
+    },
+    // () => Unit
+    clearTarget: function() {
+      var target;
+      target = this.get('target');
+      if (!this._isLocked && (target != null)) {
+        if (!target.destroyed) {
+          target.set('isSelected', false);
+        }
+        this.set('target', null);
+      }
+    },
+    // (Ractive) => Unit
+    setTarget: function(newTarget) {
+      if (!this._isLocked) {
+        setTimeout((() => { // Use `setTimeout`, so any pending `clearTarget` resolves first --JAB (12/6/17)
+          this.clearTarget();
+          this.set('target', newTarget);
+          return newTarget.set('isSelected', true);
+        }), 0);
+      }
+    },
+    // (Ractive) => Unit
+    lockTarget: function(newTarget) {
+      if (!this._isLocked && (newTarget != null)) {
+        this.setTarget(newTarget);
+        this._isLocked = true;
+      }
+    },
+    // () => Unit
+    unlockTarget: function() {
+      this._isLocked = false;
+    },
+    on: {
+      'start-handle-drag': function(event) {
+        return CommonDrag.dragstart.call(this, event, (function() {
+          return true;
+        }), (x, y) => {
+          var left, top;
+          ({left, top} = this.find('.widget-resizer').getBoundingClientRect());
+          this._xAdjustment = left - this.get('left');
+          return this._yAdjustment = top - this.get('top');
+        });
+      },
+      'drag-handle': function(event) {
+        return CommonDrag.drag.call(this, event, (x, y) => {
+          var adjusters, bottom, clamp, dirCoordPairs, direction, isMac, isSnapping, left, newChanges, newCoords, oldBottom, oldCoords, oldLeft, oldRight, oldTop, right, snapToGrid, snappedX, snappedY, target, top, xCoord, yCoord;
+          snapToGrid = function(n) {
+            return n - (n - (Math.round(n / 10) * 10));
+          };
+          isMac = window.navigator.platform.startsWith('Mac');
+          isSnapping = (!isMac && !event.original.ctrlKey) || (isMac && !event.original.metaKey);
+          [snappedX, snappedY] = isSnapping ? [x, y].map(snapToGrid) : [x, y];
+          xCoord = snappedX - this._xAdjustment;
+          yCoord = snappedY - this._yAdjustment;
+          target = this.get('target');
+          oldLeft = target.get('left');
+          oldRight = target.get('right');
+          oldTop = target.get('top');
+          oldBottom = target.get('bottom');
+          left = ['left', xCoord];
+          right = ['right', xCoord];
+          top = ['top', yCoord];
+          bottom = ['bottom', yCoord];
+          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}'?`);
+            }
+          })();
+          clamp = (dir, value) => {
+            var newValue, 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 = target.get(opposite);
+            newValue = (function() {
+              switch (opposite) {
+                case 'left':
+                  return Math.max(value, oppositeValue + target.minWidth);
+                case 'top':
+                  return Math.max(value, oppositeValue + target.minHeight);
+                case 'right':
+                  return Math.min(value, oppositeValue - target.minWidth);
+                case 'bottom':
+                  return Math.min(value, oppositeValue - target.minHeight);
+                default:
+                  throw new Error(`No, really, what the heck opposite direction is '${opposite}'?`);
+              }
+            })();
+            return Math.round(newValue);
+          };
+          dirCoordPairs = adjusters.map(function([dir, currentCor]) {
+            return [dir, clamp(dir, currentCor)];
+          });
+          newChanges = dirCoordPairs.every(function([dir, coord]) {
+            return !(((dir === 'left') || (dir === 'top')) && (coord < 0));
+          }) ? dirCoordPairs.reduce((function(acc, [dir, coord]) {
+            acc[dir] = coord;
+            return acc;
+          }), {}) : {};
+          oldCoords = {
+            left: oldLeft,
+            top: oldTop,
+            bottom: oldBottom,
+            right: oldRight
+          };
+          newCoords = Object.assign(oldCoords, newChanges);
+          return this.get('target').handleResize(newCoords);
+        });
+      },
+      'stop-handle-drag': function() {
+        return CommonDrag.dragend.call(this, () => {
+          this._xAdjustment = void 0;
+          this._yAdjustment = void 0;
+          return this.get('target').handleResizeEnd();
+        });
+      }
+    },
+    // coffeelint: disable=max_line_length
+    template: "{{# isEnabled && isVisible && 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{{/}}"
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=resizer.js.map
+</script>
+    <script>(function() {
+  // coffeelint: disable=max_line_length
+  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, // Number
+        direction: void 0, // String
+        left: void 0, // Number
+        maxCode: void 0, // String
+        minCode: void 0, // String
+        right: void 0, // Number
+        stepCode: void 0, // String
+        top: void 0, // Number
+        units: void 0, // String
+        value: void 0, // Number
+        variable: void 0 // String
+      };
+    },
+    twoway: false,
+    components: {
+      column: FlexColumn,
+      formCheckbox: RactiveEditFormCheckbox,
+      formMaxCode: RactiveEditFormOneLineCode,
+      formMinCode: RactiveEditFormOneLineCode,
+      formStepCode: RactiveEditFormOneLineCode,
+      formVariable: RactiveEditFormVariable,
+      labeledInput: RactiveEditFormLabeledInput,
+      spacer: RactiveEditFormSpacer
+    },
+    genProps: function(form) {
+      var bottom, oldBottom, oldLeft, oldRight, oldTop, right, value;
+      value = Number.parseFloat(form.value.value);
+      oldTop = this.get('top');
+      oldRight = this.get('right');
+      oldBottom = this.get('bottom');
+      oldLeft = this.get('left');
+      [right, bottom] = (this.get('direction') === 'horizontal' && form.vertical.checked) || (this.get('direction') === 'vertical' && !form.vertical.checked) ? [oldLeft + (oldBottom - oldTop), oldTop + (oldRight - oldLeft)] : [oldRight, oldBottom];
+      return {
+        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,
+        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\n<div class=\"widget-edit-hint-text\" style=\"margin-left: 4px; margin-right: 4px;\">min, increment, and max may be numbers or reporters</div>\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 // String
+      };
+    },
+    on: {
+      'reset-if-invalid': function(context) {
+        // input elements don't reject out-of-range hand-typed numbers so we have to do the dirty work
+        if (context.node.validity.rangeOverflow) {
+          return this.set('widget.currentValue', this.get('widget.maxValue'));
+        } else if (context.node.validity.rangeUnderflow) {
+          return this.set('widget.currentValue', this.get('widget.minValue'));
+        }
+      }
+    },
+    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 {
+        currentValue: [this._weg.updateEngineValue],
+        max: [this._weg.recompile],
+        min: [this._weg.recompile],
+        step: [this._weg.recompile],
+        variable: [this._weg.recompile, this._weg.rename]
+      };
+    },
+    minWidth: 60,
+    minHeight: 33,
+    template: "{{>editorOverlay}}\n{{>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}}\" />",
+    partials: {
+      slider: "<label id=\"{{id}}\" class=\"netlogo-widget netlogo-slider netlogo-input {{errorClass}} {{classes}}\"\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\" on-change=\"reset-if-invalid\"\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;"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=slider.js.map
+</script>
+    <script>(function() {
+  var SwitchEditForm;
+
+  SwitchEditForm = EditForm.extend({
+    data: function() {
+      return {
+        display: void 0 // String
+      };
+    },
+    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']
+      };
+    },
+    // `on` and `currentValue` should be synonymous for Switches.  It is necessary that we
+    // update `on`, because that's what the widget reader looks at at compilation time in
+    // order to determine the value of the Switch. --JAB (3/31/16)
+    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() {
+      var recompileEvent;
+      recompileEvent = this.findComponent('editForm').get('amProvingMyself') ? this._weg.recompileLite : this._weg.recompile;
+      return {
+        variable: [recompileEvent, this._weg.rename]
+      };
+    },
+    minWidth: 35,
+    minHeight: 33,
+    template: "{{>editorOverlay}}\n{{>switch}}\n<editForm idBasis=\"{{id}}\" display=\"{{widget.display}}\" />",
+    // coffeelint: disable=max_line_length
+    partials: {
+      switch: "<label id=\"{{id}}\" class=\"netlogo-widget netlogo-switcher netlogo-input {{classes}}\" style=\"{{dims}}\">\n  <input type=\"checkbox\" checked=\"{{ widget.currentValue }}\" {{# isEditing }} disabled{{/}} />\n  <span class=\"netlogo-label\">{{ widget.display }}</span>\n</label>"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=switch.js.map
+</script>
+    <script>(function() {
+  window.RactiveModelTitle = RactiveContextable.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [
+          {
+            text: "Edit",
+            isEnabled: true,
+            action: () => {
+              return this.fire('edit-title');
+            }
+          }
+        ],
+        isEditing: void 0, // Boolean
+        title: void 0 // String
+      };
+    },
+    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 {{classes}}{{# isEditing }} interface-unlocked initial-color{{/}}\"\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, // String
+        hint: void 0, // String
+        label: void 0, // String
+        max: void 0, // Number
+        min: void 0, // Number
+        name: void 0, // String
+        value: void 0 // Number
+      };
+    },
+    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, // Number
+        isShowingTicks: void 0, // Boolean
+        maxX: void 0, // Number
+        maxY: void 0, // Number
+        minX: void 0, // Number
+        minY: void 0, // Number
+        patchSize: void 0, // Number
+        tickLabel: void 0, // String
+        turtleLabelSize: void 0, // Number
+        wrapsInX: void 0, // Boolean
+        wrapsInY: void 0 // Boolean
+      };
+    },
+    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': Number.parseInt(form.maxX.value),
+        'dimensions.maxPycor': Number.parseInt(form.maxY.value),
+        'dimensions.minPxcor': Number.parseInt(form.minX.value),
+        'dimensions.minPycor': Number.parseInt(form.minY.value),
+        'dimensions.patchSize': Number.parseInt(form.patchSize.value),
+        'dimensions.wrappingAllowedInX': form.wrapsInX.checked,
+        'dimensions.wrappingAllowedInY': form.wrapsInY.checked,
+        fontSize: Number.parseInt(form.turtleLabelSize.value),
+        frameRate: Number.parseInt(form.framerate.value),
+        showTickCounter: form.isShowingTicks.checked,
+        tickCounterLabel: form.tickLabel.value
+      };
+    },
+    // coffeelint: disable=max_line_length
+    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>"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+  window.RactiveView = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit],
+        resizeDirs: ['topLeft', 'topRight', 'bottomLeft', 'bottomRight'],
+        ticks: void 0 // String
+      };
+    },
+    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.resizePatches, this._weg.redrawView],
+        'dimensions.wrappingAllowedInX': [this._weg.updateTopology, this._weg.redrawView],
+        'dimensions.wrappingAllowedInY': [this._weg.updateTopology, this._weg.redrawView]
+      };
+    },
+    // (Object[Number]) => Unit
+    handleResize: function({
+        left: newLeft,
+        right: newRight,
+        top: newTop,
+        bottom: newBottom
+      }) {
+      var bottom, dHeight, dWidth, dx, dy, left, movedLeft, movedUp, newHeight, newWidth, oldBottom, oldHeight, oldLeft, oldRight, oldTop, oldWidth, patchSize, ratio, right, scaledHeight, scaledWidth, top;
+      if (newLeft >= 0 && newTop >= 0) {
+        oldLeft = this.get('left');
+        oldRight = this.get('right');
+        oldTop = this.get('top');
+        oldBottom = this.get('bottom');
+        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 ? newHeight / oldHeight : newWidth / oldWidth;
+        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 = scaledWidth - oldWidth;
+        dy = scaledHeight - oldHeight;
+        movedLeft = newLeft !== oldLeft;
+        movedUp = newTop !== oldTop;
+        [top, bottom] = movedUp ? [oldTop - dy, newBottom] : [newTop, oldBottom + dy];
+        [left, right] = movedLeft ? [oldLeft - dx, newRight] : [newLeft, oldRight + dx];
+        if (left >= 0 && top >= 0) {
+          this.set('widget.top', Math.round(top));
+          this.set('widget.bottom', Math.round(bottom));
+          this.set('widget.left', Math.round(left));
+          this.set('widget.right', Math.round(right));
+          this.findComponent('editForm').set('patchSize', patchSize);
+        }
+      }
+    },
+    // () => Unit
+    handleResizeEnd: function() {
+      this.fire('set-patch-size', this.findComponent('editForm').get('patchSize'));
+    },
+    minWidth: 10,
+    minHeight: 10,
+    // coffeelint: disable=max_line_length
+    template: "{{>editorOverlay}}\n{{>view}}\n<editForm idBasis=\"view\" style=\"width: 510px;\"\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}}\" />",
+    partials: {
+      view: "<div id=\"{{id}}\" class=\"netlogo-widget netlogo-view-container {{classes}}\" style=\"{{dims}}\"></div>"
+    }
+  });
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=view.js.map
+</script>
+    <script>(function() {
+  var IMAGE_SIZE, drawPath, setColoring;
+
+  IMAGE_SIZE = 300; // Images are 300x300, in line with netlogo shapes.
+
+  window.ShapeDrawer = class ShapeDrawer {
+    constructor(shapes1, onePixel1) {
+      this.shapes = shapes1;
+      this.onePixel = onePixel1;
+    }
+
+    setTransparency(ctx, color) {
+      return ctx.globalAlpha = color.length > 3 ? color[3] / 255 : 1;
+    }
+
+    drawShape(ctx, color, shapeName, 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();
+    }
+
+    // Does not clip. Clipping should be handled by the `drawShape` method that
+    // calls this. How clipping is performed depends on whether images are being
+    // cached or not. BCH 7/13/2015
+    drawRawShape(ctx, color, shapeName, thickness = 1) {
+      var elem, j, len, ref, shape;
+      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);
+      }
+    }
+
+  };
+
+  window.CachingShapeDrawer = class CachingShapeDrawer extends ShapeDrawer {
+    constructor(shapes, onePixel) {
+      // Maps (shape name, color) -> canvas
+      // Shape/color combinations are pre-rendered to these canvases so they can be
+      // quickly rendered to display.
+
+      // If memory is a problem, this can be turned into FIFO, LRU, or LFU cache.
+      // Alternatively, each turtle could have it's own personal image pre-rendered.
+      // This should be overall better, though, since it will perform well even if
+      // turtles are constantly changing shape or color.
+      super(shapes, onePixel);
+      this.shapeCache = {};
+    }
+
+    drawShape(ctx, color, shapeName, thickness = 1) {
+      var shapeCanvas, shapeCtx, shapeKey;
+      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);
+    }
+
+    shapeKey(shapeName, color) {
+      return [shapeName, netlogoColorToOpaqueCSS(color)];
+    }
+
+  };
+
+  setColoring = function(ctx, color, element) {
+    // Since a turtle's color's transparency applies to its whole shape,  and not
+    // just the parts that use its default color, we want to use the opaque
+    // version of its color so we can use global transparency on it. BCH 12/10/2014
+    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);
+      // Note that this is 1/20 the size of the image. Smaller this, and the
+      // lines are hard to see in most cases.
+      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() {
+  window.Line = class Line {
+    constructor(x11, y11, x21, y21) {
+      this.x1 = x11;
+      this.y1 = y11;
+      this.x2 = x21;
+      this.y2 = y21;
+    }
+
+    midpoint() {
+      var midpointX, midpointY;
+      midpointX = (this.x1 + this.x2) / 2;
+      midpointY = (this.y1 + this.y2) / 2;
+      return [midpointX, midpointY];
+    }
+
+  };
+
+  window.LinkDrawer = class LinkDrawer {
+    constructor(view, shapes) {
+      var directionIndicators, name, ref, shape;
+      this.traceCurvedLine = this.traceCurvedLine.bind(this);
+      this._drawLinkLine = this._drawLinkLine.bind(this);
+      this.view = view;
+      this.shapes = shapes;
+      directionIndicators = {};
+      ref = this.shapes;
+      for (name in ref) {
+        shape = ref[name];
+        directionIndicators[name] = shape['direction-indicator'];
+      }
+      this.linkShapeDrawer = new ShapeDrawer(directionIndicators, this.view.onePixel);
+    }
+
+    traceCurvedLine(x1, y1, x2, y2, cx, cy, ctx) {
+      ctx.moveTo(x1, y1);
+      return ctx.quadraticCurveTo(cx, cy, x2, y2);
+    }
+
+    shouldWrapInDim(canWrap, dimensionSize, cor1, cor2) {
+      var distance;
+      distance = Math.abs(cor1 - cor2);
+      return canWrap && distance > dimensionSize / 2;
+    }
+
+    calculateShortestLineAngle(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);
+    }
+
+    calculateComps(x1, y1, x2, y2, size) {
+      var xcomp, ycomp;
+      // Comps are NetLogo magic. Taken from the source.
+      // JTT 5/1/15
+      xcomp = (y2 - y1) / size;
+      ycomp = (x1 - x2) / size;
+      return [xcomp, ycomp];
+    }
+
+    calculateSublineOffset(centerOffset, thickness, xcomp, ycomp) {
+      var thicknessFactor, xOff, yOff;
+      thicknessFactor = thickness / this.view.onePixel;
+      xOff = centerOffset * thicknessFactor * xcomp;
+      yOff = centerOffset * thicknessFactor * ycomp;
+      return [xOff, yOff];
+    }
+
+    getOffsetSubline(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);
+    }
+
+    calculateControlPoint(midpointX, midpointY, curviness, xcomp, ycomp) {
+      var controlX, controlY;
+      controlX = midpointX - curviness * xcomp;
+      controlY = midpointY - curviness * ycomp;
+      return [controlX, controlY];
+    }
+
+    drawSubline({x1, y1, x2, y2}, dashPattern, thickness, color, isCurved, controlX, controlY, ctx) {
+      ctx.save();
+      ctx.beginPath();
+      ctx.setLineDash(dashPattern.map((x) => {
+        return x * this.view.onePixel;
+      }));
+      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();
+    }
+
+    drawShape(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);
+      }
+      // one pixel should == one patch (before scale) -- JTT 4/15/15
+      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();
+    }
+
+    drawLabel(x, y, labelText, color) {
+      return this.view.drawLabel(x - 3 * this.view.onePixel, y + 3 * this.view.onePixel, labelText, color);
+    }
+
+    draw(link, end1, end2, canWrapX, canWrapY, ctx = this.view.ctx, isStamp = false) {
+      var adjustedThickness, color, theta, thickness, wrapX, wrapY, x1, x2, y1, y2;
+      if (!link['hidden?']) {
+        ({color, thickness} = link);
+        ({
+          xcor: x1,
+          ycor: y1
+        } = end1);
+        ({
+          xcor: x2,
+          ycor: y2
+        } = end2);
+        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));
+      }
+    }
+
+    _drawLinkLine({
+        color,
+        size,
+        heading,
+        'directed?': isDirected,
+        shape: shapeName,
+        label,
+        'label-color': labelColor
+      }, thickness, ctx, isStamp) {
+      return ({x1, y1, x2, y2}) => {
+        var curviness, lines, linkShape;
+        linkShape = this.shapes[shapeName];
+        ({curviness, lines} = linkShape);
+        return lines.forEach((line) => {
+          var centerOffset, controlX, controlY, dashPattern, hasLabel, isCurved, isMiddleLine, midpointX, midpointY, offsetSubline, visible, xOff, xcomp, yOff, ycomp;
+          ({
+            'x-offset': centerOffset,
+            'dash-pattern': dashPattern,
+            'is-visible': visible
+          } = line);
+          if (visible) {
+            [xcomp, ycomp] = this.calculateComps(x1, y1, x2, y2, size);
+            [xOff, yOff] = this.calculateSublineOffset(centerOffset, thickness, xcomp, ycomp);
+            offsetSubline = this.getOffsetSubline(x1, y1, x2, y2, xOff, yOff);
+            isMiddleLine = line === lines[1];
+            isCurved = curviness > 0;
+            hasLabel = label != null;
+            [midpointX, midpointY] = offsetSubline.midpoint();
+            [controlX, controlY] = this.calculateControlPoint(midpointX, midpointY, curviness, xcomp, ycomp);
+            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);
+              }
+            }
+          }
+        });
+      };
+    }
+
+    getWrappedLines(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)];
+      }
+    }
+
+  };
+
+}).call(this);
+
+//# sourceMappingURL=link-drawer.js.map
+</script>
+    <script>(function() {
+  var Drawer, DrawingLayer, FOLLOW, OBSERVE, PatchDrawer, RIDE, SpotlightDrawer, TurtleDrawer, View, WATCH,
+    boundMethodCheck = function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } };
+
+  window.ViewController = class ViewController {
+    constructor(container, fontSize) {
+      this.mouseXcor = this.mouseXcor.bind(this);
+      this.mouseYcor = this.mouseYcor.bind(this);
+      this.container = container;
+      this.view = new View(fontSize);
+      this.turtleDrawer = new TurtleDrawer(this.view);
+      this.drawingLayer = new DrawingLayer(this.view, this.turtleDrawer, () => {
+        return this.repaint();
+      });
+      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();
+    }
+
+    mouseXcor() {
+      return this.view.xPixToPcor(this.mouseX);
+    }
+
+    mouseYcor() {
+      return this.view.yPixToPcor(this.mouseY);
+    }
+
+    initMouseTracking() {
+      this.view.visibleCanvas.addEventListener('mousedown', (e) => {
+        return this.mouseDown = true;
+      });
+      document.addEventListener('mouseup', (e) => {
+        return this.mouseDown = false;
+      });
+      this.view.visibleCanvas.addEventListener('mouseenter', (e) => {
+        return this.mouseInside = true;
+      });
+      this.view.visibleCanvas.addEventListener('mouseleave', (e) => {
+        return this.mouseInside = false;
+      });
+      return this.view.visibleCanvas.addEventListener('mousemove', (e) => {
+        var rect;
+        rect = this.view.visibleCanvas.getBoundingClientRect();
+        this.mouseX = e.clientX - rect.left;
+        return this.mouseY = e.clientY - rect.top;
+      });
+    }
+
+    // Unit -> Unit
+    initTouchTracking() {
+      var endTouch, trackTouch;
+      endTouch = (e) => {
+        this.mouseDown = false;
+        this.mouseInside = false;
+      };
+      trackTouch = ({clientX, clientY}) => {
+        var bottom, left, right, top;
+        ({bottom, left, top, right} = this.view.visibleCanvas.getBoundingClientRect());
+        if (((left <= clientX && clientX <= right)) && ((top <= clientY && clientY <= bottom))) {
+          this.mouseInside = true;
+          this.mouseX = clientX - left;
+          this.mouseY = clientY - top;
+        } else {
+          this.mouseInside = false;
+        }
+      };
+      document.addEventListener('touchend', endTouch);
+      document.addEventListener('touchcancel', endTouch);
+      this.view.visibleCanvas.addEventListener('touchmove', (e) => {
+        e.preventDefault();
+        trackTouch(e.changedTouches[0]);
+      });
+      this.view.visibleCanvas.addEventListener('touchstart', (e) => {
+        this.mouseDown = true;
+        trackTouch(e.touches[0]);
+      });
+    }
+
+    repaint() {
+      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);
+    }
+
+    applyUpdate(modelUpdate) {
+      return this.model.update(modelUpdate);
+    }
+
+    update(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();
+    }
+
+  };
+
+  // Perspective constants:
+  OBSERVE = 0;
+
+  RIDE = 1;
+
+  FOLLOW = 2;
+
+  WATCH = 3;
+
+  View = (function() {
+    class View {
+      constructor(fontSize1) {
+        this.usePatchCoordinates = this.usePatchCoordinates.bind(this);
+        this.fontSize = fontSize1;
+        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;
+      }
+
+      transformToWorld(world) {
+        return this.transformCanvasToWorld(world, this.canvas, this.ctx);
+      }
+
+      transformCanvasToWorld(world, canvas, ctx) {
+        var ref;
+        // 2 seems to look significantly better even on devices with devicePixelratio < 1. BCH 7/12/2015
+        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; // The size of one pixel in patch coords
+        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;
+      }
+
+      usePatchCoordinates(ctx = this.ctx) {
+        return (drawFn) => {
+          var h, w;
+          ctx.save();
+          w = this.canvas.width;
+          h = this.canvas.height;
+          // Argument rows are the standard transformation matrix columns. See spec.
+          // http://www.w3.org/TR/2dcontext/#dom-context-2d-transform
+          // BCH 5/16/2015
+          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();
+        };
+      }
+
+      withCompositing(gco, ctx = this.ctx) {
+        return function(drawFn) {
+          var oldGCO;
+          oldGCO = ctx.globalCompositeOperation;
+          ctx.globalCompositeOperation = gco;
+          drawFn();
+          return ctx.globalCompositeOperation = oldGCO;
+        };
+      }
+
+      offsetX() {
+        return this.worldCenterX - this.centerX;
+      }
+
+      offsetY() {
+        return this.worldCenterY - this.centerY;
+      }
+
+      // These convert between model coordinates and position in the canvas DOM element
+      // This will differ from untransformed canvas position if @quality != 1. BCH 5/6/2015
+      xPixToPcor(x) {
+        return (this.worldWidth * x / this.visibleCanvas.clientWidth + this.worldWidth - this.offsetX()) % this.worldWidth + this.minpxcor - .5;
+      }
+
+      yPixToPcor(y) {
+        return (-this.worldHeight * y / this.visibleCanvas.clientHeight + 2 * this.worldHeight - this.offsetY()) % this.worldHeight + this.minpycor - .5;
+      }
+
+      // Unlike the above functions, this accounts for @quality. This intentionally does not account
+      // for situations like follow (as it's used to make that calculation). BCH 5/6/2015
+      xPcorToCanvas(x) {
+        return (x - this.minpxcor + .5) / this.worldWidth * this.visibleCanvas.width;
+      }
+
+      yPcorToCanvas(y) {
+        return (this.maxpycor + .5 - y) / this.worldHeight * this.visibleCanvas.height;
+      }
+
+      // Wraps text
+      drawLabel(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, (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();
+          });
+        }
+      }
+
+      // drawFn: (xcor, ycor) ->
+      drawWrapped(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);
+              }
+            }
+          }
+        }
+      }
+
+      // Returns the agent being watched, or null.
+      watch(model) {
+        var id, links, observer, patches, turtles, type;
+        ({observer, turtles, links, patches} = model);
+        if (model.observer.perspective !== OBSERVE && observer.targetagent && observer.targetagent[1] >= 0) {
+          [type, id] = observer.targetagent;
+          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;
+        }
+      }
+
+      // Returns the agent being followed, or null.
+      follow(model) {
+        var persp;
+        persp = model.observer.perspective;
+        if (persp === FOLLOW || persp === RIDE) {
+          return this.watch(model);
+        } else {
+          return null;
+        }
+      }
+
+      // (Number) => Unit
+      setZoom(zoomLevel) {
+        this._zoomLevel = Number.isInteger(zoomLevel) ? Math.min(Math.max(0, zoomLevel), Math.floor(this.worldWidth / 2), Math.floor(this.worldHeight / 2)) : null;
+      }
+
+      repaint(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();
+      }
+
+      // A very naïve and unaesthetic implementation!
+      // I'm just throwing this together for a janky `hubnet-send-follow`.
+      // Do better! --JAB (10/21/17)
+
+      // () => Unit
+      _handleZoom() {
+        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();
+        }
+      }
+
+    };
+
+    // IDs used in watch and follow
+    View.prototype.turtleType = 1;
+
+    View.prototype.patchType = 2;
+
+    View.prototype.linkType = 3;
+
+    return View;
+
+  }).call(this);
+
+  Drawer = class Drawer {
+    constructor(view1) {
+      this.view = view1;
+    }
+
+  };
+
+  /*
+  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 = class DrawingLayer extends Drawer {
+    constructor(view, turtleDrawer, repaintView) {
+      super();
+      this.importDrawing = this.importDrawing.bind(this);
+      this.drawLine = this.drawLine.bind(this);
+      this.view = view;
+      this.turtleDrawer = turtleDrawer;
+      this.repaintView = repaintView;
+      this.canvas = document.createElement('canvas');
+      this.canvas.id = 'dlayer';
+      this.ctx = this.canvas.getContext('2d');
+    }
+
+    resizeCanvas() {
+      this.canvas.width = this.view.canvas.width;
+      return this.canvas.height = this.view.canvas.height;
+    }
+
+    clearDrawing() {
+      return this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
+    }
+
+    importDrawing(base64) {
+      var image;
+      boundMethodCheck(this, DrawingLayer);
+      this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
+      image = new Image();
+      image.onload = () => {
+        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) {
+          // canvas is "wider" than the image, use full image height and partial width
+          width = (imageRatio / canvasRatio) * this.canvas.width;
+        } else {
+          // canvas is "thinner" than the image, use full image width and partial height
+          height = (canvasRatio / imageRatio) * this.canvas.height;
+        }
+        this.ctx.drawImage(image, (this.canvas.width - width) / 2, (this.canvas.height - height) / 2, width, height);
+        this.repaintView();
+      };
+      image.src = base64;
+    }
+
+    _rgbToCss([r, g, b]) {
+      return `rgb(${r}, ${g}, ${b})`;
+    }
+
+    makeMockTurtleObject({
+        x: xcor,
+        y: ycor,
+        shapeName: shape,
+        size,
+        heading,
+        color
+      }) {
+      return {xcor, ycor, shape, size, heading, color};
+    }
+
+    makeMockLinkObject({
+        x1,
+        y1,
+        x2,
+        y2,
+        shapeName,
+        color,
+        heading,
+        size,
+        'directed?': isDirected,
+        'hidden?': isHidden,
+        midpointX,
+        midpointY,
+        thickness
+      }) {
+      var end1, end2, mockLink;
+      end1 = {
+        xcor: x1,
+        ycor: y1
+      };
+      end2 = {
+        xcor: x2,
+        ycor: y2
+      };
+      mockLink = {
+        shape: shapeName,
+        color,
+        heading,
+        size,
+        'directed?': isDirected,
+        'hidden?': isHidden,
+        midpointX,
+        midpointY,
+        thickness
+      };
+      return [mockLink, end1, end2];
+    }
+
+    stampTurtle(turtleStamp) {
+      var mockTurtleObject;
+      mockTurtleObject = this.makeMockTurtleObject(turtleStamp);
+      return this.view.usePatchCoordinates(this.ctx)(() => {
+        return this.view.withCompositing(this.compositingOperation(turtleStamp.stampMode), this.ctx)(() => {
+          return this.turtleDrawer.drawTurtle(mockTurtleObject, this.ctx, true);
+        });
+      });
+    }
+
+    stampLink(linkStamp) {
+      var mockLinkObject;
+      mockLinkObject = this.makeMockLinkObject(linkStamp);
+      return this.view.usePatchCoordinates(this.ctx)(() => {
+        return this.view.withCompositing(this.compositingOperation(linkStamp.stampMode), this.ctx)(() => {
+          return this.turtleDrawer.linkDrawer.draw(...mockLinkObject, this.wrapX, this.wrapY, this.ctx, true);
+        });
+      });
+    }
+
+    compositingOperation(mode) {
+      if (mode === 'erase') {
+        return 'destination-out';
+      } else {
+        return 'source-over';
+      }
+    }
+
+    drawStamp({agentType, stamp}) {
+      if (agentType === 'turtle') {
+        return this.stampTurtle(stamp);
+      } else if (agentType === 'link') {
+        return this.stampLink(stamp);
+      }
+    }
+
+    drawLine({
+        rgb: color,
+        size,
+        penMode,
+        fromX: x1,
+        fromY: y1,
+        toX: x2,
+        toY: y2
+      }) {
+      var penColor;
+      boundMethodCheck(this, DrawingLayer);
+      if (penMode !== 'up') {
+        penColor = color;
+        return this.view.usePatchCoordinates(this.ctx)(() => {
+          this.ctx.save();
+          this.ctx.strokeStyle = this._rgbToCss(penColor);
+          this.ctx.lineWidth = size * this.view.onePixel;
+          this.ctx.lineCap = 'round';
+          this.ctx.beginPath();
+          this.ctx.moveTo(x1, y1);
+          this.ctx.lineTo(x2, y2);
+          this.view.withCompositing(this.compositingOperation(penMode), this.ctx)(() => {
+            return this.ctx.stroke();
+          });
+          return this.ctx.restore();
+        });
+      }
+    }
+
+    draw() {
+      return this.events.forEach((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.imageBase64);
+        }
+      });
+    }
+
+    repaint(model) {
+      var world;
+      // Potato --JTT 5/29/15
+      // I think Jordan makes a good point here. --JAB (8/6/15)
+      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);
+    }
+
+  };
+
+  SpotlightDrawer = (function() {
+    class SpotlightDrawer extends Drawer {
+      constructor(view) {
+        super();
+        this.view = view;
+      }
+
+      outer() {
+        return 10 / this.view.patchsize;
+      }
+
+      middle() {
+        return 8 / this.view.patchsize;
+      }
+
+      inner() {
+        return 4 / this.view.patchsize;
+      }
+
+      drawCircle(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();
+      }
+
+      drawSpotlight(xcor, ycor, size, dimOther) {
+        var ctx;
+        ctx = this.view.ctx;
+        ctx.lineWidth = this.view.onePixel;
+        ctx.beginPath();
+        // Draw arc anti-clockwise so that it's subtracted from the fill. See the
+        // fill() documentation and specifically the "nonzero" rule. BCH 3/17/2015
+        if (dimOther) {
+          this.view.drawWrapped(xcor, ycor, size + this.outer(), (x, y) => {
+            ctx.moveTo(x, y); // Don't want the context to draw a path between the circles. BCH 5/6/2015
+            return ctx.arc(x, y, (size + this.outer()) / 2, 0, 2 * Math.PI, true);
+          });
+          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(), (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);
+        });
+      }
+
+      adjustSize(size) {
+        return Math.max(size, this.view.worldWidth / 16, this.view.worldHeight / 16);
+      }
+
+      dimensions(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];
+        }
+      }
+
+      repaint(model) {
+        return this.view.usePatchCoordinates()(() => {
+          var size, watched, xcor, ycor;
+          watched = this.view.watch(model);
+          if (watched != null) {
+            [xcor, ycor, size] = this.dimensions(watched);
+            return this.drawSpotlight(xcor, ycor, this.adjustSize(size), model.observer.perspective === WATCH);
+          }
+        });
+      }
+
+    };
+
+    // Names and values taken from org.nlogo.render.SpotlightDrawer
+    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'; // for clearing with 'destination-out' compositing
+
+    return SpotlightDrawer;
+
+  }).call(this);
+
+  TurtleDrawer = class TurtleDrawer extends Drawer {
+    constructor(view) {
+      super();
+      this.view = view;
+      this.turtleShapeDrawer = new ShapeDrawer({}, this.view.onePixel);
+      this.linkDrawer = new LinkDrawer(this.view, {});
+    }
+
+    drawTurtle(turtle, ctx = this.view.ctx, isStamp = false) {
+      var size, xcor, ycor;
+      if (!turtle['hidden?']) {
+        xcor = turtle.xcor;
+        ycor = turtle.ycor;
+        size = turtle.size;
+        this.view.drawWrapped(xcor, ycor, size, ((x, y) => {
+          return this.drawTurtleAt(turtle, x, y, ctx);
+        }));
+        if (!isStamp) {
+          return this.view.drawLabel(xcor + turtle.size / 2, ycor - turtle.size / 2, turtle.label, turtle['label-color'], ctx);
+        }
+      }
+    }
+
+    drawTurtleAt(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();
+    }
+
+    drawLink(link, end1, end2, wrapX, wrapY) {
+      return this.linkDrawer.draw(link, end1, end2, wrapX, wrapY);
+    }
+
+    repaint(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()(() => {
+        this.drawAgents(links, (world.linkbreeds != null) ? world.linkbreeds : ["LINKS"], (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"], (turtle) => {
+          return this.drawTurtle(turtle);
+        });
+      });
+    }
+
+    drawAgents(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;
+    }
+
+  };
+
+  // Works by creating a scratchCanvas that has a pixel per patch. Those pixels
+  // are colored accordingly. Then, the scratchCanvas is drawn onto the main
+  // canvas scaled. This is very, very fast. It also prevents weird lines between
+  // patches.
+  PatchDrawer = class PatchDrawer {
+    constructor(view1) {
+      this.view = view1;
+      this.scratchCanvas = document.createElement('canvas');
+      this.scratchCtx = this.scratchCanvas.getContext('2d');
+    }
+
+    colorPatches(patches) {
+      var b, g, height, i, imageData, j, k, maxX, maxY, minX, minY, numPatches, patch, r, ref, 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;
+          [r, g, b] = netlogoColorToRGB(patch.pcolor);
+          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);
+    }
+
+    labelPatches(patches) {
+      return this.view.usePatchCoordinates()(() => {
+        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;
+      });
+    }
+
+    clearPatches() {
+      this.view.ctx.fillStyle = "black";
+      return this.view.ctx.fillRect(0, 0, this.view.canvas.width, this.view.canvas.height);
+    }
+
+    repaint(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);
+      }
+    }
+
+  };
+
+}).call(this);
+
+//# sourceMappingURL=view-controller.js.map
+</script>
+    <script>(function() {
+  // (String, Ractive) => ((String) => Unit) => Unit
+  var genAsyncDialogConfig, genDialogConfig, genIOConfig, genImportExportConfig, genInspectionConfig, genMouseConfig, genOutputConfig, genPlotOps, genWorldConfig, importFile;
+
+  importFile = function(type, ractive) {
+    return function(callback) {
+      var elem, listener;
+      listener = function(event) {
+        var file, reader;
+        reader = new FileReader;
+        reader.onload = function(e) {
+          return callback(e.target.result);
+        };
+        if (event.target.files.length > 0) {
+          file = event.target.files[0];
+          if (type === "image" || (type === "any" && file.type.startsWith("image/"))) {
+            reader.readAsDataURL(file);
+          } else {
+            reader.readAsText(file);
+          }
+        }
+        return elem.removeEventListener('change', listener);
+      };
+      elem = ractive.find('#general-file-input');
+      elem.addEventListener('change', listener);
+      elem.click();
+      elem.value = "";
+    };
+  };
+
+  // (Ractive, ViewController) => AsyncDialogConfig
+  genAsyncDialogConfig = function(ractive, viewController) {
+    var clearMouse, tellDialog;
+    clearMouse = function() {
+      viewController.mouseDown = false;
+    };
+    tellDialog = function(eventName, ...args) {
+      return ractive.findComponent('asyncDialog').fire(eventName, ...args);
+    };
+    return {
+      getChoice: function(message, choices) {
+        return function(callback) {
+          clearMouse();
+          tellDialog('show-chooser', message, choices, callback);
+        };
+      },
+      getText: function(message) {
+        return function(callback) {
+          clearMouse();
+          tellDialog('show-text-input', message, callback);
+        };
+      },
+      getYesOrNo: function(message) {
+        return function(callback) {
+          clearMouse();
+          tellDialog('show-yes-or-no', message, callback);
+        };
+      },
+      showMessage: function(message) {
+        return function(callback) {
+          clearMouse();
+          tellDialog('show-message', message, callback);
+        };
+      }
+    };
+  };
+
+  // (ViewController) => DialogConfig
+  genDialogConfig = function(viewController) {
+    var clearMouse;
+    clearMouse = function() {
+      viewController.mouseDown = false;
+    };
+    return {
+      // `yesOrNo` should eventually be changed to use a proper synchronous, three-button,
+      // customizable dialog... when HTML and JS start to support that. --JAB (6/1/16)
+
+      // Uhh, they probably never will.  Instead, we should favor the `dialog` extension,
+      // for which we provide "asyncDialog" shims above. --JAB (4/5/19)
+      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);
+      }
+    };
+  };
+
+  // (Ractive, ViewController) => ImportExportConfig
+  genImportExportConfig = function(ractive, viewController) {
+    return {
+      exportFile: function(contents) {
+        return function(filename) {
+          window.saveAs(new Blob([contents], {
+            type: "text/plain:charset=utf-8"
+          }), filename);
+        };
+      },
+      exportBlob: function(blob) {
+        return function(filename) {
+          return window.saveAs(blob, filename);
+        };
+      },
+      getNlogo: function() {
+        var _, result, success, v;
+        ({result, success} = (new BrowserCompiler()).exportNlogo({
+          info: Tortoise.toNetLogoMarkdown(ractive.get('info')),
+          code: ractive.get('code'),
+          widgets: (function() {
+            var ref, results;
+            ref = ractive.get('widgetObj');
+            results = [];
+            for (_ in ref) {
+              v = ref[_];
+              results.push(v);
+            }
+            return results;
+          })(),
+          turtleShapes: turtleShapes,
+          linkShapes: linkShapes
+        }));
+        if (success) {
+          return result;
+        } else {
+          throw new Error("The current model could not be converted to 'nlogo' format");
+        }
+      },
+      getOutput: function() {
+        var ref, ref1;
+        return (ref = (ref1 = ractive.findComponent('outputWidget')) != null ? ref1.get('text') : void 0) != null ? ref : ractive.findComponent('console').get('output');
+      },
+      getViewBase64: function() {
+        return viewController.view.visibleCanvas.toDataURL("image/png");
+      },
+      getViewBlob: function(callback) {
+        return viewController.view.visibleCanvas.toBlob(callback, "image/png");
+      },
+      importFile: function(path) {
+        return function(callback) {
+          importFile("any", ractive)(callback);
+        };
+      },
+      importModel: function(nlogoContents, modelName) {
+        window.postMessage({
+          nlogo: nlogoContents,
+          path: modelName,
+          type: "nlw-load-model"
+        }, "*");
+      }
+    };
+  };
+
+  // () => InspectionConfig
+  genInspectionConfig = function() {
+    var clearDead, inspect, stopInspecting;
+    inspect = (function(agent) {
+      return window.alert("Agent inspection is not yet implemented");
+    });
+    stopInspecting = (function(agent) {});
+    clearDead = (function() {});
+    return {inspect, stopInspecting, clearDead};
+  };
+
+  // (Ractive) => IOConfig
+  genIOConfig = function(ractive) {
+    return {
+      importFile: function(filepath) {
+        return function(callback) {
+          console.warn("Unsupported operation: `importFile`");
+        };
+      },
+      slurpFileDialogAsync: function(callback) {
+        importFile("any", ractive)(callback);
+      },
+      slurpURL: function(url) {
+        var combine, contentType, ref, req, response, uint8Str;
+        req = new XMLHttpRequest();
+        // Setting the async option to `false` is deprecated and "bad" as far as HTML/JS is
+        // concerned.  But this is NetLogo and NetLogo model code doesn't have a concept of
+        // async execution, so this is the best we can do.  As long as it isn't used on a
+        // per-tick basis or in a loop, it should be okay.  -JMB August 2017, JAB (10/25/18)
+        req.open("GET", url, false);
+        req.overrideMimeType('text\/plain; charset=x-user-defined'); // Get as binary string -- JAB (10/27/18)
+        req.send();
+        response = req.response;
+        contentType = req.getResponseHeader("content-type");
+        if (contentType.startsWith("image/")) {
+          combine = function(acc, i) {
+            return acc + String.fromCharCode(response.charCodeAt(i) & 0xff);
+          };
+          uint8Str = (function() {
+            var results = [];
+            for (var j = 0, ref = response.length; 0 <= ref ? j < ref : j > ref; 0 <= ref ? j++ : j--){ results.push(j); }
+            return results;
+          }).apply(this).reduce(combine, "");
+          return `data:${contentType};base64,${btoa(uint8Str)}`;
+        } else {
+          return response;
+        }
+      },
+      slurpURLAsync: function(url) {
+        return function(callback) {
+          fetch(url).then(function(response) {
+            if (response.headers.get("content-type").startsWith("image/")) {
+              return response.blob().then(function(blob) {
+                var reader;
+                reader = new FileReader;
+                reader.onload = function(e) {
+                  return callback(e.target.result);
+                };
+                return reader.readAsDataURL(blob);
+              });
+            } else {
+              return response.text().then(callback);
+            }
+          });
+        };
+      }
+    };
+  };
+
+  // (ViewController) => MouseConfig
+  genMouseConfig = function(viewController) {
+    return {
+      peekIsDown: function() {
+        return viewController.mouseDown;
+      },
+      peekIsInside: function() {
+        return viewController.mouseInside;
+      },
+      peekX: viewController.mouseXcor,
+      peekY: viewController.mouseYcor
+    };
+  };
+
+  // (Element, Ractive) => [HighchartsOps]
+  genPlotOps = function(container, ractive) {
+    var display, id, j, len, plotOps, type, widgets;
+    widgets = Object.values(ractive.get('widgetObj'));
+    plotOps = {};
+    for (j = 0, len = widgets.length; j < len; j++) {
+      ({display, id, type} = widgets[j]);
+      if (type === "plot") {
+        plotOps[display] = new HighchartsOps(container.querySelector(`#netlogo-plot-${id}`));
+      }
+    }
+    return plotOps;
+  };
+
+  // (Ractive, (String) => Unit) => OutputConfig
+  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);
+        }
+      }
+    };
+  };
+
+  // (Ractive) => WorldConfig
+  genWorldConfig = function(ractive) {
+    return {
+      resizeWorld: function() {
+        var runningForeverButtons, widgets;
+        widgets = Object.values(ractive.get('widgetObj'));
+        runningForeverButtons = widgets.filter(function({type, forever, running}) {
+          return type === "button" && forever && running;
+        });
+        runningForeverButtons.forEach(function(button) {
+          return button.running = false;
+        });
+      }
+    };
+  };
+
+  // (Ractive, ViewController, Element) => Configs
+  window.genConfigs = function(ractive, viewController, container) {
+    var appendToConsole;
+    appendToConsole = function(str) {
+      return ractive.set('consoleOutput', ractive.get('consoleOutput') + str);
+    };
+    return {
+      asyncDialog: genAsyncDialogConfig(ractive, viewController),
+      base64ToImageData: window.synchroDecoder,
+      dialog: genDialogConfig(viewController),
+      importExport: genImportExportConfig(ractive, viewController),
+      inspection: genInspectionConfig(),
+      io: genIOConfig(ractive),
+      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() {
+  // (WidgetController) => Unit
+  var hasProp = {}.hasOwnProperty;
+
+  window.controlEventTraffic = function(controller) {
+    var checkActionKeys, createWidget, dropOverlay, hailSatan, mousetrap, onCloseDialog, onCloseEditForm, onOpenDialog, onOpenEditForm, onQMark, onWidgetBottomChange, onWidgetRightChange, onWidgetValueChange, openDialogs, ractive, redrawView, refreshChooser, refreshDims, rejectDupe, renameGlobal, resizeView, setPatchSize, toggleBooleanData, trackFocus, unregisterWidget, updateTopology, viewController;
+    ({ractive, viewController} = controller);
+    openDialogs = new Set([]);
+    // (Event) => Unit
+    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')) {
+            if (w.forever) {
+              w.running = !w.running;
+            } else {
+              w.run();
+            }
+          }
+        }
+      }
+    };
+    // (String, Number, Number) => Unit
+    createWidget = function(widgetType, pageX, pageY) {
+      controller.createWidget(widgetType, pageX, pageY);
+    };
+    dropOverlay = function() {
+      ractive.set('isHelpVisible', false);
+      ractive.set('isOverlayUp', false);
+    };
+    // Thanks, Firefox.  Maybe just put the proper values in the `drag` event, in the
+    // future, instead of sending us `0` for them every time? --JAB (11/23/17)
+
+    // (RactiveEvent) => Unit
+    hailSatan = function({
+        event: {clientX, clientY}
+      }) {
+      ractive.set("lastDragX", clientX);
+      ractive.set("lastDragY", clientY);
+    };
+    onCloseDialog = function(dialog) {
+      var temp;
+      openDialogs.delete(dialog);
+      ractive.set('someDialogIsOpen', openDialogs.size > 0);
+      temp = document.scrollTop;
+      document.querySelector('.netlogo-model').focus();
+      document.scrollTop = temp;
+    };
+    onCloseEditForm = function(editForm) {
+      ractive.set('someEditFormIsOpen', false);
+      onCloseDialog(editForm);
+    };
+    onQMark = (function() {
+      var focusedElement;
+      focusedElement = void 0;
+      return function({target}) {
+        var elem, helpIsNowVisible, isProbablyEditingText, ref;
+        isProbablyEditingText = (((ref = target.tagName.toLowerCase()) === "input" || ref === "textarea") && !target.readOnly) || target.contentEditable === "true";
+        if (!isProbablyEditingText) {
+          helpIsNowVisible = !ractive.get('isHelpVisible');
+          ractive.set('isHelpVisible', helpIsNowVisible);
+          elem = helpIsNowVisible ? (focusedElement = document.activeElement, ractive.find('#help-dialog')) : focusedElement;
+          elem.focus();
+        }
+      };
+    })();
+    onOpenDialog = function(dialog) {
+      openDialogs.add(dialog);
+      ractive.set('someDialogIsOpen', true);
+    };
+    onOpenEditForm = function(editForm) {
+      ractive.set('someEditFormIsOpen', true);
+      onOpenDialog(editForm);
+    };
+    // () => Unit
+    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;
+      })()));
+    };
+    // () => Unit
+    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;
+      })()));
+    };
+    // (Any, Any, String, Number) => Unit
+    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);
+      }
+    };
+    // () => Unit
+    redrawView = function() {
+      controller.redraw();
+      viewController.repaint();
+    };
+    // (Widget.Chooser) => Boolean
+    refreshChooser = function(chooser) {
+      var eq;
+      ({eq} = tortoise_require('brazier/equals'));
+      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;
+    };
+    // () => Unit
+    refreshDims = function() {
+      onWidgetRightChange();
+      onWidgetBottomChange();
+    };
+    // (String) => Unit
+    rejectDupe = function(varName) {
+      showErrors([`There is already a widget of a different type with a variable named '${varName}'`]);
+    };
+    // (String, String, Any) => Boolean
+    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({variable}) {
+        return variable === oldName;
+      })(ractive.get('widgetObj'))) {
+        world.observer.setGlobal(oldName, void 0);
+      }
+      world.observer.setGlobal(newName, value);
+      return false;
+    };
+    // () => Unit
+    resizeView = function() {
+      var maxpxcor, maxpycor, minpxcor, minpycor, patchsize;
+      ({minpxcor, maxpxcor, minpycor, maxpycor, patchsize} = viewController.model.world);
+      setPatchSize(patchsize);
+      world.resize(minpxcor, maxpxcor, minpycor, maxpycor);
+      refreshDims();
+    };
+    // (Number) => Unit
+    setPatchSize = function(patchSize) {
+      world.setPatchSize(patchSize);
+      refreshDims();
+    };
+    // (String) => Unit
+    toggleBooleanData = function(dataName) {
+      var newData;
+      if (!ractive.get('someDialogIsOpen')) {
+        newData = !ractive.get(dataName);
+        ractive.set(dataName, newData);
+      }
+    };
+    // (Node) => Unit
+    trackFocus = function(node) {
+      ractive.set('hasFocus', document.activeElement === node);
+    };
+    // (_, Number, Boolean) => Unit
+    unregisterWidget = function(_, id, wasNew) {
+      controller.removeWidgetById(id, wasNew);
+      refreshDims();
+    };
+    // () => Unit
+    updateTopology = function() {
+      var wrapX, wrapY;
+      ({
+        wrappingallowedinx: wrapX,
+        wrappingallowediny: wrapY
+      } = viewController.model.world);
+      world.changeTopology(wrapX, wrapY);
+    };
+    mousetrap = Mousetrap(ractive.find('.netlogo-model'));
+    mousetrap.bind(['up', 'down', 'left', 'right'], function(_, name) {
+      return ractive.fire('nudge-widget', name);
+    });
+    mousetrap.bind(['ctrl+shift+l', 'command+shift+l'], function() {
+      return ractive.fire('toggle-interface-lock');
+    });
+    mousetrap.bind(['ctrl+shift+h', 'command+shift+h'], function() {
+      return ractive.fire('hide-resizer');
+    });
+    mousetrap.bind('del', function() {
+      return ractive.fire('delete-selected');
+    });
+    mousetrap.bind('escape', function() {
+      return ractive.fire('deselect-widgets');
+    });
+    mousetrap.bind('?', onQMark);
+    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', function() {
+      return toggleBooleanData('isEditing');
+    });
+    ractive.on('toggle-orientation', function() {
+      return toggleBooleanData('isVertical');
+    });
+    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('drop-overlay', function(_, event) {
+      return dropOverlay();
+    });
+    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(_, nada, 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();
+    });
+    ractive.on('*.dialog-closed', function(_, dialog) {
+      return onCloseDialog(dialog);
+    });
+    ractive.on('*.dialog-opened', function(_, dialog) {
+      return onOpenDialog(dialog);
+    });
+    ractive.on('*.edit-form-closed', function(_, editForm) {
+      return onCloseEditForm(editForm);
+    });
+    ractive.on('*.edit-form-opened', function(_, editForm) {
+      return onOpenEditForm(editForm);
+    });
+  };
+
+}).call(this);
+
+//# sourceMappingURL=event-traffic-control.js.map
+</script>
+    <script>(function() {
+  // (Ractive) => Unit
+  window.handleContextMenu = function(ractive) {
+    var handleContextMenu, hideContextMenu;
+    hideContextMenu = function(event) {
+      var contextMenu;
+      if ((event != null ? event.button : void 0) !== 2) { // Thanks, Firefox, you freaking moron. --JAB (12/6/17)
+        // See this ticket: https://bugzilla.mozilla.org/show_bug.cgi?id=184051
+        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, theEditFormIsntUp;
+      theEditFormIsntUp = this.get("isEditing") && !this.findAllComponents('editForm').some(function(form) {
+        return form.get('visible');
+      });
+      if (theEditFormIsntUp) {
+        [{component}, {pageX, pageY}] = c == null ? [a, b] : [b, c];
+        ractive.fire('deselect-widgets');
+        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() {
+  // (Ractive) => Unit
+  window.handleWidgetSelection = function(ractive) {
+    var deleteSelected, deselectThoseWidgets, hideResizer, justSelectIt, lockSelection, nudgeWidget, 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');
+      if (ractive.get('isEditing') && (selected != null)) {
+        widget = selected.get('widget');
+        hasNoEditWindowUp = document.querySelector('.widget-edit-popup') == null;
+        if ((widget != null) && (widget.type !== "view") && hasNoEditWindowUp) {
+          unlockSelection();
+          deselectThoseWidgets();
+          ractive.fire('unregister-widget', widget.id);
+        }
+      }
+    };
+    justSelectIt = function(event) {
+      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();
+    });
+    hideResizer = function() {
+      if (ractive.get("isEditing")) {
+        ractive.set('isResizerVisible', !ractive.get('isResizerVisible'));
+        return false;
+      } else {
+        return true;
+      }
+    };
+    nudgeWidget = function(event, direction) {
+      var selected;
+      selected = resizer().get('target');
+      if ((selected != null) && (!ractive.get('someDialogIsOpen'))) {
+        selected.nudge(direction);
+        return false;
+      } else {
+        return true;
+      }
+    };
+    ractive.on('*.select-component', justSelectIt);
+    ractive.on('*.select-widget', selectThatWidget);
+    ractive.on('deselect-widgets', deselectThoseWidgets);
+    ractive.on('delete-selected', deleteSelected);
+    ractive.on('hide-resizer', hideResizer);
+    ractive.on('nudge-widget', nudgeWidget);
+    ractive.on('*.lock-selection', lockSelection);
+    return ractive.on('*.unlock-selection', unlockSelection);
+  };
+
+}).call(this);
+
+//# sourceMappingURL=handle-widget-selection.js.map
+</script>
+    <script>(function() {
+  // (Element|String, Array[Widget], String, String, Boolean, String, String, (String) => Boolean) => WidgetController
+  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;
+    // This sucks. The buttons need to be able to invoke a redraw and widget
+    // update (unless we want to wait for the next natural redraw, possibly one
+    // second depending on speed slider), but we can't make the controller until
+    // the widgets are filled out. So, we close over the `controller` variable
+    // and then fill it out at the end when we actually make the thing.
+    // BCH 11/10/2014
+    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({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;
+  };
+
+  // (Array[(Object[Any], String)], Any) => Unit
+  entwine = function(objKeyPairs, value) {
+    var backingValue, i, key, len, obj;
+    backingValue = value;
+    for (i = 0, len = objKeyPairs.length; i < len; i++) {
+      [obj, key] = objKeyPairs[i];
+      Object.defineProperty(obj, key, {
+        get: function() {
+          return backingValue;
+        },
+        set: function(newValue) {
+          return backingValue = newValue;
+        }
+      });
+    }
+  };
+
+  // (Widgets.View, ViewController.View) => Unit
+  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() {
+  // (Array[Widget], () => Unit) => Unit
+  var reporterOf;
+
+  window.setUpWidgets = function(widgets, updateUI) {
+    var i, id, len, widget;
+// Note that this must execute before models so we can't call any model or
+// engine functions. BCH 11/5/2014
+    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}`);
+  };
+
+  // Destructive - Adds everything for maintaining state to the widget models,
+  // such `currentValue`s and actual functions for buttons instead of just code.
+  window.setUpWidget = function(widget, id, updateUI) {
+    widget.id = id;
+    if (widget.variable != null) {
+      // Convert from NetLogo variables to Tortoise variables.
+      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);
+    }
+  };
+
+  // (InputBox, InputBox) => Unit
+  window.setUpInputBox = function(source, destination) {
+    destination.boxedValue = source.boxedValue;
+    destination.currentValue = destination.boxedValue.value;
+    destination.variable = source.variable;
+    destination.display = destination.variable;
+  };
+
+  // (Switch, Switch) => Unit
+  window.setUpSwitch = function(source, destination) {
+    destination.on = source.on;
+    destination.currentValue = destination.on;
+  };
+
+  // (Chooser, Chooser) => Unit
+  window.setUpChooser = function(source, destination) {
+    destination.choices = source.choices;
+    destination.currentChoice = source.currentChoice;
+    destination.currentValue = destination.choices[destination.currentChoice];
+  };
+
+  // (() => Unit) => (Button, Button) => Unit
+  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 : []));
+        };
+      }
+    };
+  };
+
+  // (Monitor, Monitor) => Unit
+  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";
+    }
+  };
+
+  // (Slider, Slider) => Unit
+  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;
+    }
+  };
+
+  // (Element, Array[Widget], String, String, Boolean, String, String, (String) => Boolean) => Ractive
+  window.generateRactiveSkeleton = function(container, widgets, code, info, isReadOnly, filename, checkIsReporter) {
+    var animateWithClass, model;
+    model = {
+      checkIsReporter,
+      code,
+      consoleOutput: '',
+      exportForm: false,
+      hasFocus: false,
+      height: 0,
+      info,
+      isEditing: false,
+      isHelpVisible: false,
+      isOverlayUp: false,
+      isReadOnly,
+      isResizerVisible: true,
+      isStale: false,
+      isVertical: true,
+      lastCompiledCode: code,
+      lastCompileFailed: false,
+      lastDragX: void 0,
+      lastDragY: void 0,
+      modelTitle: dropNLogoExtension(filename),
+      outputWidgetOutput: '',
+      primaryView: void 0,
+      someDialogIsOpen: false,
+      someEditFormIsOpen: false,
+      speed: 0.0,
+      ticks: "", // Remember, ticks initialize to nothing, not 0
+      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: {
+        asyncDialog: RactiveAsyncUserDialog,
+        console: RactiveConsoleWidget,
+        contextMenu: RactiveContextMenu,
+        editableTitle: RactiveModelTitle,
+        codePane: RactiveModelCodeComponent,
+        helpDialog: RactiveHelpDialog,
+        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,
+        spacer: RactiveEditFormSpacer
+      },
+      computed: {
+        stateName: function() {
+          if (this.get('isEditing')) {
+            if (this.get('someEditFormIsOpen')) {
+              return 'authoring - editing widget';
+            } else {
+              return 'authoring - plain';
+            }
+          } else {
+            return 'interactive';
+          }
+        }
+      },
+      data: function() {
+        return model;
+      }
+    });
+  };
+
+  // coffeelint: disable=max_line_length
+  template = "<div class=\"netlogo-model netlogo-display-{{# isVertical }}vertical{{ else }}horizontal{{/}}\" 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 id=\"modal-overlay\" class=\"modal-overlay\" style=\"{{# !isOverlayUp }}display: none;{{/}}\" on-click=\"drop-overlay\"></div>\n\n  <div class=\"netlogo-display-vertical\">\n\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-display-horizontal\">\n\n      <div class=\"netlogo-toggle-container{{#!someDialogIsOpen}} enabled{{/}}\" on-click=\"toggle-interface-lock\">\n        <div class=\"netlogo-interface-unlocker {{#isEditing}}interface-unlocked{{/}}\"></div>\n        <spacer width=\"5px\" />\n        <span class=\"netlogo-toggle-text\">Mode: {{#isEditing}}Authoring{{else}}Interactive{{/}}</span>\n      </div>\n\n      <div class=\"netlogo-toggle-container{{#!someDialogIsOpen}} enabled{{/}}\" on-click=\"toggle-orientation\">\n        <div class=\"netlogo-model-orientation {{#isVertical}}vertical-display{{/}}\"></div>\n        <spacer width=\"5px\" />\n        <span class=\"netlogo-toggle-text\">Commands and Code: {{#isVertical}}Bottom{{else}}Right Side{{/}}</span>\n      </div>\n\n    </div>\n\n    <asyncDialog wareaHeight=\"{{height}}\" wareaWidth=\"{{width}}\"></asyncDialog>\n    <helpDialog isOverlayUp=\"{{isOverlayUp}}\" isVisible=\"{{isHelpVisible}}\" stateName=\"{{stateName}}\" wareaHeight=\"{{height}}\" wareaWidth=\"{{width}}\"></helpDialog>\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{{#isEditing}} interface-unlocked{{/}}\"\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}}\" isVisible=\"{{isResizerVisible}}\" />\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>\n\n  <div class=\"netlogo-tab-area\" style=\"min-width: {{Math.min(width, 500)}}px; 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=\"general-file-input\" type=\"file\" name=\"general-file\" style=\"display: none;\" />\n\n</div>";
+
+  partials = {
+    errorClass: "{{# !compilation.success}}netlogo-widget-error{{/}}",
+    widgetID: "netlogo-{{type}}-{{id}}"
+  };
+
+  // coffeelint: enable=max_line_length
+
+}).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 = class WidgetController {
+    // (Ractive, ViewController, Configs)
+    constructor(ractive, viewController, configs) {
+      var chartOps, component, display, ref;
+      // (String, () => Unit) => Unit
+      this.setCode = this.setCode.bind(this);
+      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));
+      }
+    }
+
+    // (String, Number, Number) => Unit
+    createWidget(widgetType, x, y) {
+      var adjustedX, adjustedY, base, id, mixin, rect, widget;
+      rect = document.querySelector('.netlogo-widget-container').getBoundingClientRect();
+      adjustedX = Math.round(x - rect.left);
+      adjustedY = Math.round(y - rect.top);
+      base = {
+        left: adjustedX,
+        top: adjustedY,
+        type: widgetType
+      };
+      mixin = defaultWidgetMixinFor(widgetType, adjustedX, adjustedY);
+      widget = Object.assign(base, mixin);
+      id = Math.max(...Object.keys(this.ractive.get('widgetObj')).map(parseFloat)) + 1;
+      window.setUpWidget(widget, id, (() => {
+        this.redraw();
+        return this.updateWidgets();
+      }));
+      if (widget.currentValue != null) {
+        world.observer.setGlobal(widget.variable, widget.currentValue);
+      }
+      this.ractive.get('widgetObj')[id] = widget;
+      this.ractive.update('widgetObj');
+      this.ractive.findAllComponents("").find(function(c) {
+        return c.get('widget') === widget;
+      }).fire('initialize-widget');
+    }
+
+    // () => Unit
+    runForevers() {
+      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();
+        }
+      }
+    }
+
+    // () => Unit
+    updateWidgets() {
+      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();
+    }
+
+    // (Number, Boolean) => Unit
+    removeWidgetById(id, widgetWasNew = false) {
+      var widgetType;
+      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');
+        }
+      }
+    }
+
+    // () => Array[Widget]
+    widgets() {
+      var _, ref, results, v;
+      ref = this.ractive.get('widgetObj');
+      results = [];
+      for (_ in ref) {
+        v = ref[_];
+        results.push(v);
+      }
+      return results;
+    }
+
+    // (Array[Widget], Array[Widget]) => Unit
+    freshenUpWidgets(realWidgets, newWidgets) {
+      var i, index, len, newWidget, props, realWidget, ref, setterUpper;
+      for (index = i = 0, len = newWidgets.length; i < len; index = ++i) {
+        newWidget = newWidgets[index];
+        [props, setterUpper] = (function() {
+          switch (newWidget.type) {
+            case "button":
+              return [
+                buttonProps,
+                window.setUpButton(() => {
+                  this.redraw();
+                  return this.updateWidgets();
+                })
+              ];
+            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);
+        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();
+          }
+          // This can go away when `res.model.result` stops blowing away all of the globals
+          // on recompile/when the world state is preserved across recompiles.  --JAB (6/9/16)
+          if ((ref = newWidget.type) === "chooser" || ref === "inputBox" || ref === "slider" || ref === "switch") {
+            world.observer.setGlobal(newWidget.variable, realWidget.currentValue);
+          }
+        }
+      }
+      this.updateWidgets();
+    }
+
+    // () => Number
+    speed() {
+      return this.ractive.get('speed');
+    }
+
+    setCode(code, successCallback) {
+      var ref;
+      this.ractive.set('code', code);
+      if ((ref = this.ractive.findComponent('codePane')) != null) {
+        ref.setCode(code);
+      }
+      this.ractive.fire('controller.recompile', successCallback);
+    }
+
+    // () => Unit
+    redraw() {
+      if (Updater.hasUpdates()) {
+        this.viewController.update(Updater.collectUpdates());
+      }
+    }
+
+    // () => Unit
+    teardown() {
+      this.ractive.teardown();
+    }
+
+    // () => String
+    code() {
+      return this.ractive.get('code');
+    }
+
+  };
+
+  // (Widget) => Unit
+  updateWidget = function(widget) {
+    var desiredHeight, desiredWidth, err, isNum, isntValidValue, maxPxcor, maxPycor, maxValue, minPxcor, minPycor, minValue, patchSize, 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();
+            isNum = typeof value === "number";
+            isntValidValue = !((value != null) && (!isNum || isFinite(value)));
+            if (isntValidValue) {
+              return 'N/A';
+            } else {
+              if ((widget.precision != null) && isNum) {
+                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':
+        // Soooooo apparently range inputs don't visually update when you set
+        // their max, but they DO update when you set their min (and will take
+        // new max values into account)... Ractive ignores sets when you give it
+        // the same value, so we have to tweak it slightly and then set it back.
+        // Consequently, we can't rely on ractive's detection of value changes
+        // so we'll end up thrashing the DOM.
+        // BCH 10/23/2014
+        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':
+        ({maxPxcor, maxPycor, minPxcor, minPycor, patchSize} = widget.dimensions);
+        desiredWidth = Math.round(patchSize * (maxPxcor - minPxcor + 1));
+        desiredHeight = Math.round(patchSize * (maxPycor - minPycor + 1));
+        widget.right = widget.left + desiredWidth;
+        widget.bottom = widget.top + desiredHeight;
+    }
+  };
+
+  // coffeelint: disable=max_line_length
+  // (String, Number, Number) => Unit
+  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}?`);
+    }
+  };
+
+  // [T <: Widget] @ Array[String] => T => T => Boolean
+  widgetEqualsBy = function(props) {
+    return function(w1) {
+      return function(w2) {
+        var eq, locationProps;
+        ({eq} = tortoise_require('brazier/equals'));
+        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'];
+
+  // coffeelint: enable=max_line_length
+
+}).call(this);
+
+//# sourceMappingURL=widget-controller.js.map
+</script>
+    <script>(function() {
+  /*
+
+    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 =
+      {
+        experimentName:      String
+        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]] }]
+
+   */
+  var cartesianProduct, executeRun, genCartesianSet;
+
+  // (BehaviorSpaceConfig, (String, Any) => Unit, (Any) => Any) => Results
+  window.runBabyBehaviorSpace = function(config, setGlobal, dump) {
+    var combination, experimentName, finalParameterSet, finalResults, flatten, go, iterationLimit, key, metrics, pSet, parameterSet, repetitionsPerCombo, results, setup, stopCondition, value;
+    ({experimentName, parameterSet, repetitionsPerCombo, metrics, setup, go, stopCondition, iterationLimit} = config);
+    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) {
+      return [].concat(...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;
+    })());
+    window.Meta.behaviorSpaceName = experimentName != null ? experimentName : "BabyBehaviorSpace";
+    window.Meta.behaviorSpaceRun = 0;
+    finalResults = (function() {
+      var j, len, 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);
+        window.Meta.behaviorSpaceRun = window.Meta.behaviorSpaceRun + 1;
+        results1.push({
+          config: pSet,
+          results
+        });
+      }
+      return results1;
+    })();
+    window.Meta.behaviorSpaceName = "";
+    window.Meta.behaviorSpaceRun = 0;
+    return finalResults;
+  };
+
+  // Code courtesy of Danny at https://stackoverflow.com/a/36234242/1116979
+  // (Array[Array[Any]]) => Array[Array[Any]]
+  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);
+      }), []);
+    }, [[]]);
+  };
+
+  // (Array[VariableConfig], Number) => Array[Object[Any]]
+  genCartesianSet = function(variables) {
+    var basicParameterSet, condense;
+    basicParameterSet = variables.map(function({
+        name,
+        parameterSpace: {type, values, min, max, interval}
+      }) {
+      var x;
+      values = (function() {
+        var j, ref, ref1, ref2, results1;
+        switch (type) {
+          case "discreteValues":
+            return values;
+          case "range":
+            results1 = [];
+            for (x = j = ref = min, ref1 = max, ref2 = interval; ref2 !== 0 && (ref2 > 0 ? j <= ref1 : j >= ref1); x = j += ref2) {
+              results1.push(x);
+            }
+            return results1;
+            break;
+          default:
+            throw new Exception(`Unknown parameter space type: ${type}`);
+        }
+      })();
+      return values.map(function(value) {
+        return {name, value};
+      });
+    });
+    condense = (function(acc, {name, value}) {
+      acc[name] = value;
+      return acc;
+    });
+    return cartesianProduct(basicParameterSet).map(function(combo) {
+      return combo.reduce(condense, {});
+    });
+  };
+
+  // (() => Unit, () => Unit, () => Boolean, Number, Object[Metric], (Any) => Any) => Object[Object[Any]]
+  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, reporter;
+      ms = {};
+      for (name in metrics) {
+        ({reporter, interval} = metrics[name]);
+        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,
+    splice = [].splice;
+
+  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.5.2';
+
+  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();
+    }
+  };
+
+  // performance.now gives submillisecond timing, which improves the event loop
+  // for models with submillisecond go procedures. Unfortunately, iOS Safari
+  // doesn't support it. BCH 10/3/2014
+  now = (ref = typeof performance !== "undefined" && performance !== null ? performance.now.bind(performance) : void 0) != null ? ref : Date.now.bind(Date);
+
+  // See http://perfectionkills.com/global-eval-what-are-the-options/ for what
+  // this is doing. This is a holdover till we get the model attaching to an
+  // object instead of global namespace. - BCH 11/3/2014
+  globalEval = eval;
+
+  window.AgentModel = tortoise_require('agentmodel');
+
+  window.SessionLite = (function() {
+    class SessionLite {
+
+      // (Element|String, Array[Widget], String, String, Boolean, String, String, Boolean, (String) => Unit)
+      constructor(container, widgets, code, info, readOnly, filename, modelJS, lastCompileFailed, displayError) {
+        var checkIsReporter, ref1;
+        this.eventLoop = this.eventLoop.bind(this);
+        this.promptFilename = this.promptFilename.bind(this);
+        this.alertErrors = this.alertErrors.bind(this);
+        this.displayError = displayError;
+        checkIsReporter = (str) => {
+          var compileRequest;
+          compileRequest = {
+            code: this.widgetController.code(),
+            widgets: this.widgetController.widgets()
+          };
+          return (new BrowserCompiler()).isReporter(str, compileRequest);
+        };
+        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', (_, callback) => {
+          return this.recompile(callback);
+        });
+        this.widgetController.ractive.on('*.recompile-lite', (_, callback) => {
+          return this.recompileLite(callback);
+        });
+        this.widgetController.ractive.on('export-nlogo', (_, event) => {
+          return this.exportNlogo(event);
+        });
+        this.widgetController.ractive.on('export-html', (_, event) => {
+          return this.exportHtml(event);
+        });
+        this.widgetController.ractive.on('open-new-file', (_, event) => {
+          return this.openNewFile();
+        });
+        this.widgetController.ractive.on('console.run', (_, code, errorLog) => {
+          return this.run(code, errorLog);
+        });
+        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);
+      }
+
+      modelTitle() {
+        return this.widgetController.ractive.get('modelTitle');
+      }
+
+      startLoop() {
+        if (procedures.startup != null) {
+          window.handlingErrors(procedures.startup)();
+        }
+        this.widgetController.redraw();
+        this.widgetController.updateWidgets();
+        return requestAnimationFrame(this.eventLoop);
+      }
+
+      updateDelay() {
+        var delay, speed, speedFactor, viewWidget;
+        viewWidget = this.widgetController.widgets().filter(function({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);
+        }
+      }
+
+      redrawDelay() {
+        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;
+        }
+      }
+
+      eventLoop(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();
+        if (!this.widgetController.ractive.get('isEditing')) {
+// maxNumUpdates can be 0. Need to guarantee i is ascending.
+          for (i = j = 1, ref1 = maxNumUpdates; j <= ref1; i = j += 1) {
+            this._lastUpdate = now();
+            this.widgetController.runForevers();
+            if (now() >= updatesDeadline) {
+              break;
+            }
+          }
+        }
+        if (Updater.hasUpdates()) {
+          // First conditional checks if we're on time with updates. If so, we may as
+          // well redraw. This keeps animations smooth for fast models. BCH 11/4/2014
+          if (i > maxNumUpdates || now() - this._lastRedraw > this.redrawDelay() || this.drawEveryFrame) {
+            this._lastRedraw = now();
+            this.widgetController.redraw();
+          }
+        }
+        // Widgets must always be updated, because global variables and plots can be
+        // altered without triggering an "update".  That is to say that `Updater`
+        // only concerns itself with View updates. --JAB (9/2/15)
+        return this.widgetController.updateWidgets();
+      }
+
+      teardown() {
+        this.widgetController.teardown();
+        return cancelAnimationFrame(this._eventLoopTimeout);
+      }
+
+      // (() => Unit) => Unit
+      recompileLite(successCallback = (function() {})) {
+        var lastCompileFailed, someWidgetIsFailing;
+        lastCompileFailed = this.widgetController.ractive.get('lastCompileFailed');
+        someWidgetIsFailing = this.widgetController.widgets().some(function(w) {
+          var ref1;
+          return ((ref1 = w.compilation) != null ? ref1.success : void 0) === false;
+        });
+        if (lastCompileFailed || someWidgetIsFailing) {
+          this.recompile(successCallback);
+        }
+      }
+
+      // (() => Unit) => Unit
+      recompile(successCallback = (function() {})) {
+        var code, oldWidgets, onCompile;
+        code = this.widgetController.code();
+        oldWidgets = this.widgetController.widgets();
+        onCompile = (res) => {
+          var state;
+          if (res.model.success) {
+            state = world.exportState();
+            world.clearAll();
+            this.widgetController.redraw(); // Redraw right before `Updater` gets clobbered --JAB (2/27/18)
+            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);
+            res.model.result.forEach((r) => {
+              return r.lineNumber = code.slice(0, r.start).split("\n").length;
+            });
+            return this.alertCompileError(res.model.result);
+          }
+        };
+        return Tortoise.startLoading(() => {
+          return codeCompile(code, [], [], oldWidgets, onCompile, this.alertCompileError);
+        });
+      }
+
+      getNlogo() {
+        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
+        });
+      }
+
+      exportNlogo() {
+        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);
+          }
+        }
+      }
+
+      promptFilename(extension) {
+        var suggestion;
+        suggestion = this.modelTitle() + extension;
+        return window.prompt('Filename:', suggestion);
+      }
+
+      exportHtml() {
+        var exportName;
+        exportName = this.promptFilename(".html");
+        if (exportName != null) {
+          window.req = new XMLHttpRequest();
+          req.open('GET', standaloneURL);
+          req.onreadystatechange = () => {
+            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");
+              }
+            }
+          };
+          return req.send("");
+        }
+      }
+
+      // () => Unit
+      openNewFile() {
+        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"
+          }, "*");
+        }
+      }
+
+      // (Object[Any], ([{ config: Object[Any], results: Object[Array[Any]] }]) => Unit) => Unit
+      asyncRunBabyBehaviorSpace(config, reaction) {
+        return Tortoise.startLoading(() => {
+          reaction(this.runBabyBehaviorSpace(config));
+          return Tortoise.finishLoading();
+        });
+      }
+
+      // (Object[Any]) => [{ config: Object[Any], results: Object[Array[Any]] }]
+      runBabyBehaviorSpace({experimentName, parameterSet, repetitionsPerCombo, metrics, setupCode, goCode, stopConditionCode, iterationLimit}) {
+        var _, compiledMetrics, convert, go, last, map, massagedConfig, metricFs, miniDump, pipeline, ref1, result, setGlobal, setup, stopCondition, toObject, unwrapCompilation, zip;
+        ({last, map, toObject, zip} = tortoise_require('brazier/array'));
+        ({pipeline} = tortoise_require('brazier/function'));
+        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({
+              result: compiledCode,
+              success
+            }) {
+            return new Function(`${prefix}${(success ? compiledCode : defaultCode)}`);
+          };
+        };
+        [setup, go] = result.commands.map(unwrapCompilation("", ""));
+        ref1 = result.reporters.map(unwrapCompilation("return ", "-1")), [...metricFs] = ref1, [_] = splice.call(metricFs, -1);
+        stopCondition = unwrapCompilation("return ", "false")(last(result.reporters));
+        convert = function([{reporter, interval}, f]) {
+          return [
+            reporter,
+            {
+              reporter: f,
+              interval
+            }
+          ];
+        };
+        compiledMetrics = pipeline(zip(metrics), map(convert), toObject)(metricFs);
+        massagedConfig = {
+          experimentName,
+          parameterSet,
+          repetitionsPerCombo,
+          metrics: compiledMetrics,
+          setup,
+          go,
+          stopCondition,
+          iterationLimit
+        };
+        setGlobal = world.observer.setGlobal.bind(world.observer);
+        miniDump = function(x) {
+          var ref2;
+          if (Array.isArray(x)) {
+            return x.map(miniDump);
+          } else if ((ref2 = typeof x) === "boolean" || ref2 === "number" || ref2 === "string") {
+            return x;
+          } else {
+            return workspace.dump(x);
+          }
+        };
+        return window.runBabyBehaviorSpace(massagedConfig, setGlobal, miniDump);
+      }
+
+      // (String, (Array[String]) => Unit) => Unit
+      run(code, errorLog) {
+        var compileErrorLog;
+        compileErrorLog = (result) => {
+          return this.alertCompileError(result, errorLog);
+        };
+        Tortoise.startLoading();
+        return codeCompile(this.widgetController.code(), [code], [], this.widgetController.widgets(), ({
+            commands,
+            model: {
+              result: modelResult,
+              success: modelSuccess
+            }
+          }) => {
+          var ex, result, success;
+          if (modelSuccess) {
+            [{result, success}] = commands;
+            if (success) {
+              try {
+                return window.handlingErrors(new Function(result))(errorLog);
+              } catch (error) {
+                ex = error;
+                if (!(ex instanceof Exception.HaltInterrupt)) {
+                  throw ex;
+                }
+              }
+            } else {
+              return compileErrorLog(result);
+            }
+          } else {
+            return compileErrorLog(modelResult);
+          }
+        }, compileErrorLog);
+      }
+
+      // (String, (String, Array[{ message: String}]) => String) =>
+      //  { success: true, value: Any } | { success: false, error: String }
+      runReporter(code, errorLog) {
+        var compileParams, compileResult, ex, message, modelResult, modelSuccess, reporter, reporterValue, reporters, result, success;
+        errorLog = errorLog != null ? errorLog : function(prefix, errs) {
+          var message;
+          message = `${prefix}: ${errs.map(function(err) {
+            return err.message;
+          })}`;
+          console.error(message);
+          return message;
+        };
+        compileParams = {
+          code: this.widgetController.code(),
+          widgets: this.widgetController.widgets(),
+          commands: [],
+          reporters: [code],
+          turtleShapes: typeof turtleShapes !== "undefined" && turtleShapes !== null ? turtleShapes : [],
+          linkShapes: typeof linkShapes !== "undefined" && linkShapes !== null ? linkShapes : []
+        };
+        compileResult = (new BrowserCompiler()).fromModel(compileParams);
+        ({
+          reporters,
+          model: {
+            result: modelResult,
+            success: modelSuccess
+          }
+        } = compileResult);
+        if (!modelSuccess) {
+          message = errorLog("Compiler error", modelResult);
+          return {
+            success: false,
+            error: message
+          };
+        }
+        [{result, success}] = reporters;
+        if (!success) {
+          message = errorLog("Reporter error", result);
+          return {
+            success: false,
+            error: message
+          };
+        }
+        reporter = new Function(`return ( ${result} );`);
+        try {
+          reporterValue = reporter();
+          return {
+            success: true,
+            value: reporterValue
+          };
+        } catch (error) {
+          ex = error;
+          message = errorLog("Runtime error", [ex]);
+          return {
+            success: false,
+            error: message
+          };
+        }
+      }
+
+      alertCompileError(result, errorLog = this.alertErrors) {
+        return errorLog(result.map(function(err) {
+          if (err.lineNumber != null) {
+            return `(Line ${err.lineNumber}) ${err.message}`;
+          } else {
+            return err.message;
+          }
+        }));
+      }
+
+      alertErrors(messages) {
+        return this.displayError(messages.join('\n'));
+      }
+
+    };
+
+    SessionLite.prototype.widgetController = void 0; // WidgetController
+
+    return SessionLite;
+
+  }).call(this);
+
+}).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 : String, (String) => (), (XMLHttpRequest) => () => Unit
+  handleAjaxLoad = (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("");
+  };
+
+  // newSession: String|DomElement, ModelResult, Boolean, String => SessionLite
+  newSession = function(container, modelResult, readOnly = false, filename = "export", lastCompileFailed, onError = void 0) {
+    var code, info, result, widgets, wiggies;
+    ({
+      code,
+      info,
+      model: {result},
+      widgets: wiggies
+    } = modelResult);
+    widgets = globalEval(wiggies);
+    info = toNetLogoWebMarkdown(info);
+    return new SessionLite(container, widgets, code, info, readOnly, filename, result, lastCompileFailed, onError);
+  };
+
+  // We separate on both / and \ because we get URLs and Windows-esque filepaths
+  normalizedFileName = function(path) {
+    var pathComponents;
+    pathComponents = path.split(/\/|\\/);
+    return decodeURI(pathComponents[pathComponents.length - 1]);
+  };
+
+  loadData = function(container, pathOrURL, name, loader, onError) {
+    return {
+      container,
+      loader,
+      onError,
+      modelPath: pathOrURL,
+      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;
+    };
+  };
+
+  // process: function which takes a loader as an argument, producing a function that can be run
+  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/docs/faq#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();
+    };
+  };
+
+  // process: optional argument that allows the loading process to be async to
+  // give the animation time to come up.
+  startLoading = function(process) {
+    document.querySelector("#loading-overlay").style.display = "";
+    // This gives the loading animation time to come up. BCH 7/25/2015
+    if ((process != null)) {
+      return setTimeout(process, 20);
+    }
+  };
+
+  finishLoading = function() {
+    return document.querySelector("#loading-overlay").style.display = "none";
+  };
+
+  fromNlogo = function(nlogo, container, path, callback, 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 = 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);
+    }
+  };
+
+  // If we have a compiler failure, maybe just the code section has errors.
+  // We do a second chance compile to see if it'll work without code so we
+  // can get some widgets/plots on the screen and let the user fix those
+  // errors up.  -JMB August 2017
+
+  // (String, BrowserCompiler, (Model) => Session?) => Boolean
+  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 {
+        // It mutates state, but it's an easy way to get the code re-added
+        // so it can be edited/fixed.
+        result.code = nlogo.substring(0, first);
+        onSuccess(result, true);
+        return result.model.success;
+      }
+    }
+  };
+
+  Tortoise = {startLoading, finishLoading, fromNlogo, fromURL, toNetLogoMarkdown, toNetLogoWebMarkdown};
+
+  if (typeof window !== "undefined" && window !== null) {
+    window.Tortoise = Tortoise;
+  } else {
+    exports.Tortoise = Tortoise;
+  }
+
+  // See http://perfectionkills.com/global-eval-what-are-the-options/ for what
+  // this is doing. This is a holdover till we get the model attaching to an
+  // object instead of global namespace. - BCH 11/3/2014
+  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)+'staging.netlogoweb.org'+r.url},webSocketURL: function(s){return _s('ws',s)+'staging.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="SIR-COVID19_V0.nlogo">
+
+;======================================
+; Initialisation de nos pauvres tortues
+;======================================
+
+turtles-own[
+  futur-etat
+  duree-maladie
+]
+
+
+;
+; Initialisation des tortues
+; - la couleur code l'état blanche = S, rouge = I, vert = R
+; - position aléatoire
+; - non infectée (blanche)
+to initialisation-tortues
+  create-turtles population-initiale [
+    set futur-etat white
+    set size 0.5
+    set duree-maladie 0
+    setxy random-pxcor random-pycor
+  ]
+end
+
+;
+; On tire au hasard nb-premiere-infectee tortues.
+; Leur état change donc.
+;
+to souche-infection
+  ask n-of nb-premiere-infectee turtles [
+    set futur-etat red
+  ]
+end
+
+to initialisation
+  ca
+  if (alea-fixe) [random-seed 19]
+  initialisation-tortues
+  souche-infection
+  maj-etat
+  reset-ticks
+end
+
+
+;=============================
+; La simulation, le modèle SIR
+;=============================
+
+;
+; Déplacement des tortues. On pourrait avoir un déplacement plus sophistiqué.
+;
+to bouge
+   ask turtles [
+    right random 360
+    forward pas
+  ]
+end
+
+;
+; Contamination S -> I
+; On compte le nombre de voisines infectées en fonction de la distance
+; La contamination se fait en fonction d'une probabilité
+;
+to infection-des-saines
+  ask turtles with [color = white] [
+   let nombre-de-voisines-infectees  (count other turtles with [color = red] in-radius distance-non-sociale)
+   if (random-float 1 <  1 - (((1 - proba-de-transmission) ^ nombre-de-voisines-infectees)))
+    [set futur-etat red]
+  ]
+end
+
+;
+; Les infectées sortent de la maladie, elles deviennent remise I -> R
+;
+to fin-maladie
+  ask turtles with [color = red]
+  [
+    if (duree-maladie > duree-contagion) [ set futur-etat green]
+  ]
+end
+
+
+to maj-etat
+  ask turtles [
+    set color futur-etat
+    if (color = red) [set duree-maladie duree-maladie + 1]
+  ]
+end
+
+;===========================
+; Lancement de la simulation
+;===========================
+to execute
+  let n count turtles with [color = red]
+  if (n = 0) or (n = population-initiale) [stop]
+  infection-des-saines
+  fin-maladie
+  maj-etat
+  bouge
+  tick
+end
+
+@#$#@#$#@
+GRAPHICS-WINDOW
+253
+10
+690
+448
+-1
+-1
+13.0
+1
+10
+1
+1
+1
+0
+1
+1
+1
+-16
+16
+-16
+16
+0
+0
+1
+ticks
+30.0
+
+BUTTON
+20
+30
+138
+63
+initialisation
+initialisation
+NIL
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+BUTTON
+21
+63
+138
+96
+NIL
+execute
+T
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+SLIDER
+18
+165
+251
+198
+population-initiale
+population-initiale
+0
+2000
+1000.0
+1
+1
+NIL
+HORIZONTAL
+
+SLIDER
+18
+198
+251
+231
+nb-premiere-infectee
+nb-premiere-infectee
+0
+50
+4.0
+1
+1
+NIL
+HORIZONTAL
+
+SLIDER
+19
+297
+250
+330
+pas
+pas
+0
+10
+0.8
+.1
+1
+NIL
+HORIZONTAL
+
+SLIDER
+19
+330
+250
+363
+distance-non-sociale
+distance-non-sociale
+0
+5
+1.5
+0.1
+1
+NIL
+HORIZONTAL
+
+SWITCH
+138
+30
+255
+63
+alea-fixe
+alea-fixe
+1
+1
+-1000
+
+SLIDER
+18
+231
+251
+264
+proba-de-transmission
+proba-de-transmission
+0
+1
+0.09
+0.01
+1
+%
+HORIZONTAL
+
+BUTTON
+138
+63
+255
+96
+pas à pas
+execute
+NIL
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+SLIDER
+18
+263
+251
+296
+duree-contagion
+duree-contagion
+0
+20
+10.0
+1
+1
+NIL
+HORIZONTAL
+
+PLOT
+689
+12
+1236
+447
+Évolution de l'infection
+Temps
+%
+0.0
+10.0
+0.0
+1.0
+true
+true
+"set-current-plot-pen \"Sains\"" ""
+PENS
+"Infectés" 1.0 0 -5298144 true "" "plotxy ticks 100 * (count turtles with [color = red]) / population-initiale\n"
+"Sains" 1.0 2 -16777216 true "" "plotxy ticks 100 * (count turtles with [color = white]) / population-initiale"
+"Remis" 1.0 2 -10899396 true "" "plotxy ticks 100 * (count turtles with [color = green]) / population-initiale"
+
+@#$#@#$#@
+## 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
+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
+@#$#@#$#@
+NetLogo 6.1.1
+@#$#@#$#@
+@#$#@#$#@
+@#$#@#$#@
+@#$#@#$#@
+@#$#@#$#@
+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   = "https://staging.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>
-- 
GitLab