Roman Hergenreder 5 years ago
parent
commit
6df7db7cb7
75 changed files with 5302 additions and 156 deletions
  1. 12 156
      Day 14/decode.py
  2. 13 0
      Day 18/.idea/Day 18.iml
  3. 8 0
      Day 18/.idea/artifacts/Day_18_jar.xml
  4. 6 0
      Day 18/.idea/misc.xml
  5. 8 0
      Day 18/.idea/modules.xml
  6. 6 0
      Day 18/.idea/sbt.xml
  7. 6 0
      Day 18/.idea/vcs.xml
  8. 871 0
      Day 18/.idea/workspace.xml
  9. BIN
      Day 18/Evil.png
  10. BIN
      Day 18/NotEvil.png
  11. BIN
      Day 18/Question.png
  12. BIN
      Day 18/Sad.png
  13. 12 0
      Day 18/decode.py
  14. BIN
      Day 18/evil.jar
  15. BIN
      Day 18/evil.jar.bak
  16. BIN
      Day 18/hackvent2018.evil.EvilAction.class
  17. BIN
      Day 18/hackvent2018.evil.EvilEvent.class
  18. BIN
      Day 18/hackvent2018.evil.EvilImages.class
  19. BIN
      Day 18/hackvent2018/evil/EvilAction.class
  20. BIN
      Day 18/hackvent2018/evil/EvilEvent.class
  21. BIN
      Day 18/hackvent2018/evil/EvilHandler.class
  22. BIN
      Day 18/hackvent2018/evil/EvilImages.class
  23. BIN
      Day 18/hackvent2018/evil/EvilType.class
  24. BIN
      Day 18/hackvent2018/evil/EvilWindow.class
  25. BIN
      Day 18/out/artifacts/Day_18_jar/Day 18.jar
  26. 5 0
      Day 18/out/production/Day 18/META-INF/MANIFEST.MF
  27. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/Evil.class
  28. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/EvilAction.class
  29. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/EvilEvent.class
  30. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/EvilHandler.class
  31. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/EvilImages.class
  32. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/EvilLoader.class
  33. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/EvilType.class
  34. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/EvilWindow.class
  35. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/Evilist.class
  36. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/Main.class
  37. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/NotEvil.class
  38. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/Question.class
  39. BIN
      Day 18/out/production/Day 18/hackvent2018/evil/Sad.class
  40. 1 0
      Day 18/output.bin
  41. BIN
      Day 18/patch/EvilAction.class
  42. 5 0
      Day 18/src/META-INF/MANIFEST.MF
  43. 390 0
      Day 18/src/hackvent2018/evil/Evil.java
  44. 82 0
      Day 18/src/hackvent2018/evil/EvilAction.java
  45. 31 0
      Day 18/src/hackvent2018/evil/EvilEvent.java
  46. 33 0
      Day 18/src/hackvent2018/evil/EvilHandler.java
  47. 28 0
      Day 18/src/hackvent2018/evil/EvilImages.java
  48. 48 0
      Day 18/src/hackvent2018/evil/EvilLoader.java
  49. 16 0
      Day 18/src/hackvent2018/evil/EvilType.java
  50. 53 0
      Day 18/src/hackvent2018/evil/EvilWindow.java
  51. 16 0
      Day 18/src/hackvent2018/evil/Evilist.java
  52. 27 0
      Day 18/src/hackvent2018/evil/Main.java
  53. 327 0
      Day 18/src/hackvent2018/evil/NotEvil.java
  54. 333 0
      Day 18/src/hackvent2018/evil/Question.java
  55. 324 0
      Day 18/src/hackvent2018/evil/Sad.java
  56. 75 0
      Day 19/decode.py
  57. 63 0
      Day 19/decode_new.py
  58. BIN
      Day 19/ida-20181219-110218-51.dmp
  59. BIN
      Day 19/ida-20181219-112445-57.dmp
  60. BIN
      Day 19/promo.id0
  61. BIN
      Day 19/promo.id1
  62. 2488 0
      Day 19/promo.js
  63. BIN
      Day 19/promo.nam
  64. BIN
      Day 19/promo.til
  65. BIN
      Day 19/promo.wasm
  66. BIN
      Day 19/promo_new.wasm
  67. 5 0
      Day 19/test.cpp
  68. BIN
      Day 20/HaRdvent.id0
  69. BIN
      Day 20/HaRdvent.id1
  70. BIN
      Day 20/HaRdvent.nam
  71. BIN
      Day 20/HaRdvent.nro
  72. BIN
      Day 20/HaRdvent.til
  73. 10 0
      Day 20/decode.py
  74. BIN
      Day 20/exctracted.jpeg
  75. BIN
      Day 20/ida-20181220-112813-47.dmp

+ 12 - 156
Day 14/decode.py

@@ -1,13 +1,13 @@
 #!/usr/bin/python
 
 import math
+import sys
+import random
 
 c = int("2A4C9AA52257B56837369D5DD7019451C0EC04427EB95EB741D0273D55", 16)
 n = int("0D8A7A45D9BE42BB3F03F710CF105628E8080F6105224612481908DC721", 16)
 t = int("1398ED7F59A62962D5A47DD0D32B71156DD6AF6B46BEA949976331B8E1", 16)
 
-# print(len(hex(t)[2:])*4)
-
 def linear_diophantine_equation(a, b):
     if b > a:
         return linear_diophantine_equation(b, a)
@@ -39,161 +39,17 @@ def is_square_num(n):
 def is_int(n):
     return int(n) == n
 
-# m*m - k*n = c
-# (m*m)/c - (k*n)/c = 1       k' = k * c
-# m * m * c^-1 - k' * n = 1
-
-# c = m*m - k*n
-# c = 1*x - k*n  mit x = m^2
-
-# c = gcd(m, n)
-
-d, x, y = linear_diophantine_equation(n, c)
-print(d, x, y)
-
-for i in range(-10, 10):
-    print(i, test_solution(y + i * t))
-    # h = hex(y)[2:]
-    # print(''.join([chr(int(h[i:i+2], 16)) for i in range(len(h))]))
-
-# print(y * c + x * n)
-
-# y1 * c + x1 * n = 1
-# y2 * m*m + x2 * n = 1
-
-# y2 * m*m + x2 * n = y1 * c + x1 * n
-# y2 * m*m + (x2-x1)*n = y1 * c
-# -y1*c + (x2-x1)*n = y2*m*m
-
-lcm = c * n
-while not is_square_num(lcm):
-    lcm += n
-
-print(hex(lcm))
-print(is_square_num(lcm))
-
-# tmp = -1 * y * c - x * n
-#
-# solution = tmp + n*n
-# while not is_square_num(solution) and not test_solution(math.sqrt(solution)):
-#     solution += n
-#
-#     if is_square_num(solution):
-#         print(len(hex(math.sqrt(solution))[2:]), hex(int(math.sqrt(solution))))
-#
-
-#
-# print(is_square_num(x))
-# print(test_solution(x))
-# # print(hex(d))
-
-# ggT(m², n) = ggT(c, n)
-
-# print(gcd(c,n))
-
-# gcd(m**2, n) = 1
-#
-# 1 = x*m**2 + y*n
-# 1 = x*m**2*c + y*n
-#
-# x1*m**2 + y1*n = x2*m**2*c + y2*n
-# 0 = m**2*x2*c-x1*m**2 + (y1-y2)*n
-#
-# gcd(m**2*c, n) = gcd(m**2, n)
-#
-# print(gcd(c, n))
+def is_nth_root_num(a, b):
+    c = a**(1/float(b))
+    return abs(math.pow(c, b) - a) < 0.000001
 
-# m = int("c20cd4b471c96cc2eaab1d1c6e33494219679ae97e48506e311ddbba35", 16)
-# print(m**2 % n - c)
-# print(test_solution(m))
+def log(a, b):
+    return math.log(a) / math.log(b)
 
-# mult_inverse = multiplicative_inverse(c, n)
-#
-# d, x, y = linear_diophantine_equation(mult_inverse, n)
-# print(d,x,y)
-#
-# print(mult_inverse*x - y*n)
-#
-# print(is_square_num(x))
-# print(is_square_num(y))
-
-# print(is_square_num(c))
+def ascii(n):
+    h = hex(n)[2:]
+    return ''.join([chr(int(h[i:i+2], 16)) for i in range(0, len(h), 2)])
 
 # n > t > c
-
-# m              = flag
-
-# m**2 % n = x**2
-# m**2 + k*n = c
-# m % n = x
-# m - k*n = x
-# m = x + k * n
-
-# x = int(math.sqrt(c))
-#
-# while not test_solution(x):
-#     x += n
-#     print(hex(x), hex(((x**2)%n)-c))
-# print(x)
-#
-#
-# d, x, y = linear_diophantine_equation(mult_inverse, mult_inverse*n)
-# print(hex(d + 6*t - 2*c), test_solution(d + 6*t - 2*c))
-
-# x = math.sqrt(n)
-# print(x)
-#
-# print(test_solution(c * math.sqrt()))
-
-# print(test_solution(math.floor(math.sqrt(c * n))))
-
-# c = (m**2) % n
-# c = m*m - k*n
-# 1 = (m**2)/c - (k*n)/c
-# 1 = (m**2)/c - k*(n/c)
-
-# k = 1
-# test = k * n / c
-# while test != math.floor(test):
-#     k += 1
-#     test = k * n / c
-#
-# print(k, test)
-
-
-# x = m*m
-# c = x % n
-# c = x - k*n
-# c = k*n+x
-# x ~ (48 56 31 38 2d) ^ 2
-# m_guess = int("485631382d616161612d616161612d616161612d616161612d61616161", 16)
-# x_guess = m_guess ** 2
-# k_guess = (c - x_guess) / n
-#
-# i = 0
-# while not test_solution(m_guess):
-#     m_guess += 1
-#     i += 1
-#
-# print(i, m_guess)
-
-# print(test_solution(math.sqrt(c + n)))
-
-# print(math.sqrt(c))
-
-# c = x**2
-# m**2 % n = x**2
-# m % n = x
-
-# i = 0
-# solutioni = 0
-# while i < 100:
-#     i += 1
-#     if test_solution(i):
-#         print(i, i**2%n)
-
-# 4**2 % 13 = 3
-# 9**2 % 13 = 3
-# 17**2 % 13 = 3
-# 22**2 % 13 = 3
-# 30**2 % 13 = 3
+# gcd(m, n) = gcd(m², n) = gcd(c, n) = gcd(t, n) = gcd(t, c) = gcd(t*c, n) = 1
+# m² ≡ c (mod n)

+ 13 - 0
Day 18/.idea/Day 18.iml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="com.thoughtworks.xstream:xstream:1.4.11.1" level="project" />
+    <orderEntry type="library" name="javassist:javassist:3.12.1.GA" level="project" />
+  </component>
+</module>

+ 8 - 0
Day 18/.idea/artifacts/Day_18_jar.xml

@@ -0,0 +1,8 @@
+<component name="ArtifactManager">
+  <artifact type="jar" build-on-make="true" name="Day 18:jar">
+    <output-path>$PROJECT_DIR$/out/artifacts/Day_18_jar</output-path>
+    <root id="archive" name="Day 18.jar">
+      <element id="module-output" name="Day 18" />
+    </root>
+  </artifact>
+</component>

+ 6 - 0
Day 18/.idea/misc.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 8 - 0
Day 18/.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/Day 18.iml" filepath="$PROJECT_DIR$/.idea/Day 18.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
Day 18/.idea/sbt.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ScalaSbtSettings">
+    <option name="customVMPath" />
+  </component>
+</project>

+ 6 - 0
Day 18/.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>

+ 871 - 0
Day 18/.idea/workspace.xml

@@ -0,0 +1,871 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="06cb540d-322a-40ef-9ca3-76e5d50d477a" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/.idea/artifacts/Day_18_jar.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/sbt.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/hackvent2018/evil/Main.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../Day 14/decode.py" beforeDir="false" afterPath="$PROJECT_DIR$/../Day 14/decode.py" afterDir="false" />
+    </list>
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FUSProjectUsageTrigger">
+    <session id="1369169411">
+      <usages-collector id="statistics.lifecycle.project">
+        <counts>
+          <entry key="project.closed" value="4" />
+          <entry key="project.open.time.11" value="1" />
+          <entry key="project.open.time.12" value="1" />
+          <entry key="project.open.time.4" value="1" />
+          <entry key="project.open.time.8" value="1" />
+          <entry key="project.open.time.9" value="1" />
+          <entry key="project.opened" value="5" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.extensions.open">
+        <counts>
+          <entry key="MF" value="1" />
+          <entry key="class" value="94" />
+          <entry key="java" value="44" />
+          <entry key="mf" value="2" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.types.open">
+        <counts>
+          <entry key="CLASS" value="94" />
+          <entry key="JAVA" value="44" />
+          <entry key="Manifest" value="3" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.extensions.edit">
+        <counts>
+          <entry key="class" value="15" />
+          <entry key="java" value="2384" />
+          <entry key="mf" value="1" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.types.edit">
+        <counts>
+          <entry key="CLASS" value="15" />
+          <entry key="JAVA" value="2384" />
+          <entry key="Manifest" value="1" />
+        </counts>
+      </usages-collector>
+    </session>
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/Evilist.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="240">
+              <caret line="16" selection-start-line="16" selection-end-line="16" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/Main.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="195">
+              <caret line="16" column="5" selection-start-line="16" selection-start-column="5" selection-end-line="16" selection-end-column="5" />
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/EvilWindow.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="510">
+              <caret line="46" column="14" selection-start-line="46" selection-start-column="14" selection-end-line="46" selection-end-column="14" />
+              <folding>
+                <element signature="e#0#1797#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/EvilAction.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="73">
+              <caret line="53" column="65" selection-start-line="53" selection-start-column="65" selection-end-line="53" selection-end-column="65" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Class" />
+      </list>
+    </option>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>111</find>
+      <find>78</find>
+      <find>78, 111</find>
+      <find>eventResult</find>
+    </findStrings>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/src/MANIFEST.mf" />
+        <option value="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/Evil.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/EvilLoader.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/Question.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/Sad.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/Test.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/EvilImages.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/EvilType.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/EvilEvent.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/EvilHandler.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/Main.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/Evilist.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/EvilWindow.java" />
+        <option value="$PROJECT_DIR$/src/hackvent2018/evil/EvilAction.java" />
+      </list>
+    </option>
+  </component>
+  <component name="InstancesTracker">
+    <option name="classes">
+      <map>
+        <entry key="hackvent2018.evil.NotEvil" value="CREATION" />
+      </map>
+    </option>
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="x" value="200" />
+    <option name="y" value="257" />
+    <option name="width" value="1272" />
+    <option name="height" value="692" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true">
+    <ConfirmationsSetting value="2" id="Add" />
+  </component>
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="PackagesPane" />
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="artifacts" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="artifacts" type="462c0819:PsiDirectoryNode" />
+              <item name="Day_18_jar" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="production" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="production" type="462c0819:PsiDirectoryNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="production" type="462c0819:PsiDirectoryNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="hackvent2018" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="production" type="462c0819:PsiDirectoryNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="hackvent2018" type="462c0819:PsiDirectoryNode" />
+              <item name="evil" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="hackvent2018" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="hackvent2018" type="462c0819:PsiDirectoryNode" />
+              <item name="evil" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="Day 18" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Day 18" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="META-INF" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="Downloaded.Files.Path.Enabled" value="false" />
+    <property name="Repository.Attach.JavaDocs" value="false" />
+    <property name="Repository.Attach.Sources" value="false" />
+    <property name="project.structure.last.edited" value="Artifacts" />
+    <property name="project.structure.proportion" value="0.15" />
+    <property name="project.structure.side.proportion" value="0.2" />
+  </component>
+  <component name="RecentsManager">
+    <key name="MoveFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/out/production/Day 18/hackvent2018/evil" />
+    </key>
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager" selected="Application.Evilist">
+    <configuration name="Evilist" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="hackvent2018.evil.Evilist" />
+      <module name="Day 18" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="hackvent2018.evil.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="Main" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="hackvent2018.evil.Main" />
+      <module name="Day 18" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="hackvent2018.evil.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="Test" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="hackvent2018.evil.Test" />
+      <module name="Day 18" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="hackvent2018.evil.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <list>
+      <item itemvalue="Application.Evilist" />
+      <item itemvalue="Application.Main" />
+      <item itemvalue="Application.Test" />
+    </list>
+    <recent_temporary>
+      <list>
+        <item itemvalue="Application.Evilist" />
+        <item itemvalue="Application.Main" />
+        <item itemvalue="Application.Test" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="SbtLocalSettings">
+    <option name="projectSyncType">
+      <map>
+        <entry key="$PROJECT_DIR$/../../../Programming/Java/Intellij/SE/Aufgabe_1" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../Programming/Java/Intellij/SE/Aufgabe_5" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../Programming/Java/Intellij/SE/Aufgabe_6" value="PREVIEW" />
+      </map>
+    </option>
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="06cb540d-322a-40ef-9ca3-76e5d50d477a" name="Default Changelist" comment="" />
+      <created>1545089712863</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1545089712863</updated>
+    </task>
+    <servers />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="200" y="257" width="1272" height="692" extended-state="0" />
+    <editor active="true" />
+    <layout>
+      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.40016368" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info id="Project Explorer" order="2" />
+      <window_info id="Designer" order="3" />
+      <window_info id="UI Designer" order="4" />
+      <window_info id="Job Explorer" order="5" />
+      <window_info id="Favorites" order="6" side_tool="true" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Find" order="1" />
+      <window_info anchor="bottom" id="Run" order="2" weight="0.5323993" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.48320693" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="bottom" id="Console" order="7" />
+      <window_info anchor="bottom" id="Messages" order="8" weight="0.32936078" />
+      <window_info anchor="bottom" id="Terminal" order="9" />
+      <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
+      <window_info anchor="bottom" id="Version Control" order="11" show_stripe_button="false" />
+      <window_info anchor="bottom" id="SBT Console" order="12" />
+      <window_info anchor="right" id="Commander" order="0" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+      <window_info anchor="right" id="Palette" order="3" />
+      <window_info anchor="right" id="FAQ Robot" order="4" />
+      <window_info anchor="right" id="Palette&#9;" order="5" />
+      <window_info anchor="right" id="Maven Projects" order="6" />
+    </layout>
+    <layout-to-restore>
+      <window_info content_ui="combo" id="Project" order="0" weight="0.2550586" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info id="Project Explorer" order="2" />
+      <window_info id="Designer" order="3" />
+      <window_info id="UI Designer" order="4" />
+      <window_info id="Job Explorer" order="5" />
+      <window_info id="Favorites" order="6" side_tool="true" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Find" order="1" />
+      <window_info anchor="bottom" id="Run" order="2" visible="true" weight="0.32936078" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.48320693" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="bottom" id="Console" order="7" />
+      <window_info anchor="bottom" id="Messages" order="8" weight="0.32936078" />
+      <window_info anchor="bottom" id="Terminal" order="9" />
+      <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
+      <window_info anchor="bottom" id="Version Control" order="11" show_stripe_button="false" />
+      <window_info anchor="bottom" id="SBT Console" order="12" />
+      <window_info anchor="right" id="Commander" order="0" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+      <window_info anchor="right" id="Palette" order="3" />
+      <window_info anchor="right" id="FAQ Robot" order="4" />
+      <window_info anchor="right" id="Palette&#9;" order="5" />
+      <window_info anchor="right" id="Maven Projects" order="6" />
+    </layout-to-restore>
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>jar:///usr/lib/jvm/java-8-openjdk/jre/lib/rt.jar!/java/lang/ClassLoader.class</url>
+          <line>256</line>
+          <properties />
+          <option name="timeStamp" value="13" />
+        </line-breakpoint>
+      </breakpoints>
+    </breakpoint-manager>
+  </component>
+  <component name="debuggerHistoryManager">
+    <expressions id="filteringjava.lang.String">
+      <expression>
+        <expression-string>contains(&quot;jpg&quot;)</expression-string>
+        <language-id>JAVA</language-id>
+        <evaluation-mode>EXPRESSION</evaluation-mode>
+      </expression>
+      <expression>
+        <expression-string>contains(&quot;png&quot;)</expression-string>
+        <language-id>JAVA</language-id>
+        <evaluation-mode>EXPRESSION</evaluation-mode>
+      </expression>
+      <expression>
+        <expression-string>toLowerCase().contains(&quot;18&quot;)</expression-string>
+        <language-id>JAVA</language-id>
+        <evaluation-mode>EXPRESSION</evaluation-mode>
+      </expression>
+      <expression>
+        <expression-string>toLowerCase().contains(&quot;HV&quot;)</expression-string>
+        <language-id>JAVA</language-id>
+        <evaluation-mode>EXPRESSION</evaluation-mode>
+      </expression>
+      <expression>
+        <expression-string>toLowerCase().contains(&quot;flag&quot;)</expression-string>
+        <language-id>JAVA</language-id>
+        <evaluation-mode>EXPRESSION</evaluation-mode>
+      </expression>
+      <expression>
+        <expression-string>contains(&quot;HV&quot;)</expression-string>
+        <language-id>JAVA</language-id>
+        <evaluation-mode>EXPRESSION</evaluation-mode>
+      </expression>
+      <expression>
+        <expression-string>contains(&quot;click&quot;)</expression-string>
+        <language-id>JAVA</language-id>
+        <evaluation-mode>EXPRESSION</evaluation-mode>
+      </expression>
+      <expression>
+        <expression-string>contains(&quot;flag&quot;)</expression-string>
+        <language-id>JAVA</language-id>
+        <evaluation-mode>EXPRESSION</evaluation-mode>
+      </expression>
+      <expression>
+        <expression-string>HV</expression-string>
+        <language-id>JAVA</language-id>
+        <evaluation-mode>EXPRESSION</evaluation-mode>
+      </expression>
+    </expressions>
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/hackvent2018/evil/EvilHandler.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="150">
+          <caret line="10" column="26" lean-forward="true" selection-start-line="10" selection-start-column="26" selection-end-line="10" selection-end-column="26" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://$MAVEN_REPOSITORY$/javassist/javassist/3.12.1.GA/javassist-3.12.1.GA.jar!/javassist/CtClass.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="330">
+          <caret line="439" selection-start-line="439" selection-end-line="439" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/hackvent2018/evil/EvilImages.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="150">
+          <caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/out/production/Day 18/hackvent2018/evil/EvilLoader.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="195">
+          <caret line="17" column="22" lean-forward="true" selection-start-line="17" selection-start-column="22" selection-end-line="17" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://$MAVEN_REPOSITORY$/javassist/javassist/3.12.1.GA/javassist-3.12.1.GA.jar!/javassist/CtClassType.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="857">
+          <caret line="188" selection-start-line="188" selection-end-line="188" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar:///usr/lib/jvm/java-8-openjdk/jre/lib/rt.jar!/sun/instrument/InstrumentationImpl.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="300">
+          <caret line="31" column="48" selection-start-line="31" selection-start-column="48" selection-end-line="31" selection-end-column="48" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar:///usr/lib/jvm/java-8-openjdk/jre/lib/rt.jar!/java/lang/ClassLoader.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="236">
+          <caret line="258" selection-start-line="258" selection-end-line="258" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/MANIFEST.mf" />
+    <entry file="file://$PROJECT_DIR$/src/META-INF/MANIFEST.MF">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="75">
+          <caret line="5" lean-forward="true" selection-start-line="5" selection-end-line="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/EvilLoader.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="543">
+          <caret line="48" lean-forward="true" selection-start-line="48" selection-end-line="48" />
+          <folding>
+            <element signature="e#157#158#0" expanded="true" />
+            <element signature="e#186#187#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/NotEvil.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="15">
+          <caret line="25" column="57" selection-start-line="25" selection-start-column="57" selection-end-line="25" selection-end-column="57" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/Question.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="543">
+          <caret line="333" lean-forward="true" selection-start-line="333" selection-end-line="333" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/Sad.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="543">
+          <caret line="324" lean-forward="true" selection-start-line="324" selection-end-line="324" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-8828YN/hackvent2018/evil/EvilAction.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="195">
+          <caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/EvilImages.class" />
+    <entry file="file://$PROJECT_DIR$/out/production/Day 18/hackvent2018/evil/EvilAction.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="75">
+          <caret line="6" lean-forward="true" selection-start-line="6" selection-end-line="6" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-pUk7pl/hackvent2018/evil/EvilWindow.class" />
+    <entry file="file://$PROJECT_DIR$/EvilType.class" />
+    <entry file="file://$PROJECT_DIR$/hackvent2018.evil.EvilType.class" />
+    <entry file="file://$PROJECT_DIR$/hackvent2018.evil.EvilAction.class">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/hackvent2018.evil.EvilImages.class">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/hackvent2018.evil.EvilEvent.class">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/Test.java" />
+    <entry file="file:///tmp/hackvent2018.evil.EvilAction.class">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-nmQrwP/hackvent2018.evil.EvilWindow.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="25" column="47" lean-forward="true" selection-start-line="25" selection-start-column="47" selection-end-line="25" selection-end-column="47" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-6QXTrQ/hackvent2018.evil.EvilHandler.class">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-27FeGO/hackvent2018.evil.EvilImages.class">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-Lh0YQ0/hackvent2018.evil.EvilAction.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="630">
+          <caret line="47" column="61" lean-forward="true" selection-start-line="47" selection-start-column="61" selection-end-line="47" selection-end-column="61" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-1dPlum/hackvent2018.evil.EvilHandler.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="45">
+          <caret line="3" column="2" lean-forward="true" selection-start-line="3" selection-start-column="2" selection-end-line="3" selection-end-column="2" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-ipznX7/hackvent2018.evil.EvilAction.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="105">
+          <caret line="15" column="34" selection-start-line="15" selection-start-column="34" selection-end-line="15" selection-end-column="69" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-yGZdqa/hackvent2018.evil.EvilImages.class">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-4PUTk6/hackvent2018.evil.EvilType.class">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-tzt74l/hackvent2018.evil.EvilImages.class">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/Evil.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="543">
+          <caret line="376" column="38" lean-forward="true" selection-start-line="376" selection-start-column="38" selection-end-line="376" selection-end-column="38" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-tIcdwU/hackvent2018.evil.EvilEvent.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="225">
+          <caret line="15" column="32" lean-forward="true" selection-start-line="15" selection-start-column="32" selection-end-line="15" selection-end-column="32" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-OjaThG/hackvent2018.evil.EvilWindow.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="90">
+          <caret line="6" lean-forward="true" selection-end-line="53" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-LYxMxg/hackvent2018.evil.EvilImages.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="45">
+          <caret line="3" column="2" lean-forward="true" selection-end-line="28" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-Jne3gz/hackvent2018.evil.EvilType.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="45">
+          <caret line="3" column="2" lean-forward="true" selection-end-line="16" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/EvilType.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="16" lean-forward="true" selection-start-line="16" selection-end-line="16" />
+          <folding>
+            <element signature="e#0#237#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/EvilImages.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="255">
+          <caret line="19" column="41" lean-forward="true" selection-start-line="19" selection-start-column="41" selection-end-line="19" selection-end-column="41" />
+          <folding>
+            <element signature="e#0#686#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-BUL2nO/hackvent2018.evil.EvilAction.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="285">
+          <caret line="24" column="43" lean-forward="true" selection-end-line="82" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-tDaHPe/hackvent2018.evil.EvilEvent.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="180">
+          <caret line="12" lean-forward="true" selection-end-line="31" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/EvilEvent.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="465">
+          <caret line="31" lean-forward="true" selection-start-line="31" selection-end-line="31" />
+          <folding>
+            <element signature="e#0#850#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-qTA3id/hackvent2018.evil.EvilHandler.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="345">
+          <caret line="28" column="5" lean-forward="true" selection-end-line="33" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/EvilHandler.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="420">
+          <caret line="33" lean-forward="true" selection-start-line="33" selection-end-line="33" />
+          <folding>
+            <element signature="e#0#639#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.cache/.fr-ybt32c/EvilAction.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-45">
+          <caret line="3" column="2" lean-forward="true" selection-start-line="3" selection-start-column="2" selection-end-line="3" selection-end-column="2" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/Evilist.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="16" selection-start-line="16" selection-end-line="16" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="195">
+          <caret line="16" column="5" selection-start-line="16" selection-start-column="5" selection-end-line="16" selection-end-column="5" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/EvilWindow.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="510">
+          <caret line="46" column="14" selection-start-line="46" selection-start-column="14" selection-end-line="46" selection-end-column="14" />
+          <folding>
+            <element signature="e#0#1797#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/hackvent2018/evil/EvilAction.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="73">
+          <caret line="53" column="65" selection-start-line="53" selection-start-column="65" selection-end-line="53" selection-end-column="65" />
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ArtifactsStructureConfigurable.UI">
+        <settings>
+          <artifact-editor />
+          <last-edited>Day 18:jar</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+                <option value="0.5" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="FacetStructureConfigurable.UI">
+        <settings>
+          <last-edited>No facets are configured</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="GlobalLibrariesConfigurable.UI">
+        <settings>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="JdkListConfigurable.UI">
+        <settings>
+          <last-edited>1.8</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ModuleStructureConfigurable.UI">
+        <settings>
+          <last-edited>Day 18</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+                <option value="0.6" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ProjectJDKs.UI">
+        <settings>
+          <last-edited>1.8</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ProjectLibrariesConfigurable.UI">
+        <settings>
+          <last-edited>com.thoughtworks.xstream:xstream:1.4.11.1</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>

BIN
Day 18/Evil.png


BIN
Day 18/NotEvil.png


BIN
Day 18/Question.png


BIN
Day 18/Sad.png


+ 12 - 0
Day 18/decode.py

@@ -0,0 +1,12 @@
+#!/usr/bin/python
+
+evilEvent = [-83, 8, 119, 19, 73, 17, 2, 83, 126, 17, 33, 119, 115, 6, 38, 16, 26, 23, 10, 127, 20, 85, 81, 47, 13, 88, 43, 0, 70, 27, -122, 8, 83, 17, 125, 46, 78, 64, 89, 78, 41]
+evilAction = [-64, 15, 15, 10, 82, 79, 76, 67, 76]
+
+# ascii = ''.join([chr(x + 128) for  x in data])
+
+print(len(data))
+
+# f = open('output.bin', 'wb')
+# f.write(bytes([x + 128 for x in data]))
+# f.close()

BIN
Day 18/evil.jar


BIN
Day 18/evil.jar.bak


BIN
Day 18/hackvent2018.evil.EvilAction.class


BIN
Day 18/hackvent2018.evil.EvilEvent.class


BIN
Day 18/hackvent2018.evil.EvilImages.class


BIN
Day 18/hackvent2018/evil/EvilAction.class


BIN
Day 18/hackvent2018/evil/EvilEvent.class


BIN
Day 18/hackvent2018/evil/EvilHandler.class


BIN
Day 18/hackvent2018/evil/EvilImages.class


BIN
Day 18/hackvent2018/evil/EvilType.class


BIN
Day 18/hackvent2018/evil/EvilWindow.class


BIN
Day 18/out/artifacts/Day_18_jar/Day 18.jar


+ 5 - 0
Day 18/out/production/Day 18/META-INF/MANIFEST.MF

@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Main-Class: hackvent2018.evil.Evilist
+Created-By: Evilist HomeBrew
+Built-By: evilist
+Build-Jdk: 666

BIN
Day 18/out/production/Day 18/hackvent2018/evil/Evil.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/EvilAction.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/EvilEvent.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/EvilHandler.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/EvilImages.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/EvilLoader.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/EvilType.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/EvilWindow.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/Evilist.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/Main.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/NotEvil.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/Question.class


BIN
Day 18/out/production/Day 18/hackvent2018/evil/Sad.class


+ 1 - 0
Day 18/output.bin

@@ -0,0 +1 @@
+-┬В⌠и▒┌сЧ▒║ВС├╕░ ≈┼Ъ■уя╞█ь╚─ф⌡┬с▒Щ╝нюын╘

BIN
Day 18/patch/EvilAction.class


+ 5 - 0
Day 18/src/META-INF/MANIFEST.MF

@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Main-Class: hackvent2018.evil.Evilist
+Created-By: Evilist HomeBrew
+Built-By: evilist
+Build-Jdk: 666

+ 390 - 0
Day 18/src/hackvent2018/evil/Evil.java

@@ -0,0 +1,390 @@
+package hackvent2018.evil;
+
+public class Evil
+{
+    public static byte[] b = {
+        -119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1, 44,
+        0, 0, 1, 44, 8, 3, 0, 0, 0, 78, -93, 126, 71, 0, 0, 2, -3, 80, 76, 84,
+        69, 0, 1, 0, 7, 0, 0, 3, 6, 2, 17, 2, 2, 25, 1, 0, 13, 6, 4, 24,
+        3, 6, 30, 2, 0, 34, 1, 2, 2, 10, 13, 45, 0, 1, 29, 4, 10, 8, 11, 7,
+        49, 0, 2, 43, 2, 1, 38, 3, 6, 22, 8, 9, 52, 1, 0, 56, 0, 2, 36, 6,
+        6, 60, 1, 0, 19, 13, 12, 66, 0, 4, 70, 0, 1, 45, 7, 6, 24, 13, 14, 50,
+        6, 9, 62, 3, 11, 77, 0, 0, 13, 18, 20, 42, 10, 14, 29, 14, 16, 16, 18, 15,
+        52, 8, 13, 65, 5, 7, 78, 1, 9, 58, 7, 10, 54, 9, 8, 81, 2, 5, 9, 22,
+        22, 88, 1, 2, 61, 9, 6, 35, 16, 14, 98, 0, 3, 96, 0, 9, 76, 7, 10, 69,
+        9, 13, 52, 15, 17, 43, 18, 19, 15, 26, 26, 23, 24, 23, 72, 11, 8, 91, 5, 14,
+        40, 20, 19, 66, 13, 12, 28, 24, 23, 50, 18, 18, 38, 22, 20, 86, 9, 11, 111, 2,
+        7, 109, 2, 13, 37, 23, 25, 80, 13, 15, 68, 16, 21, 95, 9, 11, 62, 19, 19, 45,
+        24, 24, 104, 8, 10, 31, 28, 29, 37, 27, 28, 29, 30, 28, 61, 21, 24, 104, 9, 17,
+        22, 32, 32, 27, 31, 33, 97, 12, 19, 122, 6, 15, 99, 13, 15, -125, 4, 14, 92, 16,
+        17, 124, 8, 10, 108, 13, 14, 80, 21, 27, 116, 12, 18, 87, 20, 26, 117, 13, 13, 61,
+        28, 32, 89, 21, 22, -113, 6, 15, 47, 33, 35, 53, 32, 31, -121, 10, 10, 40, 36, 35,
+        44, 35, 35, 73, 27, 29, 29, 39, 40, 111, 17, 17, 34, 38, 40, 79, 26, 29, 37, 38,
+        36, 69, 29, 31, -121, 11, 22, Byte.MAX_VALUE, 14, 19, 61, 33, 35, 66, 32, 31, -119, 13, 18, -92,
+        5, 19, -100, 10, 22, -110, 13, 23, -108, 14, 18, 58, 39, 40, -117, 17, 20, 69, 36, 39,
+        47, 43, 42, 36, 46, 47, -98, 13, 16, 52, 42, 43, 41, 45, 47, 31, 48, 47, 44, 46,
+        43, 68, 40, 41, Byte.MAX_VALUE, 26, 32, -104, 20, 21, -87, 15, 23, 53, 47, 48, 66, 44, 43, -95,
+        18, 25, -77, 13, 28, 36, 53, 53, 48, 50, 48, -76, 14, 22, 47, 51, 53, 64, 47, 49,
+        43, 53, 54, -84, 19, 18, -66, 15, 28, -55, 12, 26, -84, 21, 25, 54, 56, 54, 47, 58,
+        58, 74, 51, 51, -72, 21, 25, 65, 55, 55, 61, 57, 56, -61, 22, 24, -52, 19, 29, -61,
+        22, 30, -42, 17, 34, 70, 60, 60, -40, 20, 29, 61, 63, 60, 54, 65, 66, 77, 60, 63,
+        69, 64, 63, -29, 20, 34, -48, 26, 31, 65, 67, 64, -7, 16, 32, -37, 26, 31, -17, 20,
+        34, -7, 17, 39, 82, 65, 68, -16, 23, 35, -26, 26, 36, -6, 20, 40, 70, 71, 69, 74,
+        70, 70, 68, 72, 75, 80, 69, 70, -24, 28, 31, -15, 25, 36, -4, 23, 34, 64, 76, 76,
+        73, 75, 72, -13, 28, 37, -12, 30, 37, -1, 29, 36, -11, 32, 38, 64, 82, 81, 70, 81,
+        81, 84, 79, 78, 76, 81, 83, 79, 81, 78, 94, 83, 84, 76, 88, 89, 85, 87, 84, 90,
+        86, 85, 85, 90, 92, 91, 93, 90, 81, 96, 96, 90, 94, 97, 99, 93, 93, 95, 97, 94,
+        100, 102, 99, 93, 104, 105, 107, 102, 101, 99, 110, 110, 109, 111, 108, 104, 114, 115, 116, 111,
+        110, 116, 117, 115, 108, 119, 120, 113, 118, 120, 122, 117, 116, 121, 123, 120, 114, 126, Byte.MAX_VALUE, Byte.MIN_VALUE,
+        123, 122, 124, -127, -125, Byte.MIN_VALUE, -126, Byte.MAX_VALUE, 120, -124, -123, -123, -122, -125, Byte.MIN_VALUE, -115, -115, -121, -117, -114,
+        -118, -116, -119, -112, -110, -113, -120, -108, -107, -114, -109, -107, -105, -110, -112, -109, -104, -101, -105, -104,
+        -107, -100, -99, -102, -103, -98, -95, -96, -94, -97, -98, -93, -91, -92, -86, -84, -88, -86, -89, -85,
+        -80, -78, -82, -80, -83, -80, -75, -72, -76, -74, -77, -74, -69, -67, -71, -69, -72, -67, -65, -68,
+        -66, -61, -58, -62, -60, -63, -58, -56, -59, -59, -54, -51, -54, -52, -55, -48, -46, -49, -50, -45,
+        -43, -45, -43, -46, -43, -38, -35, -40, -37, -41, -36, -34, -37, -33, -31, -34, -30, -28, -31, -27,
+        -25, -28, -23, -21, -25, -20, -18, -21, -16, -14, -17, -13, -11, -15, -10, -8, -11, -2, -8, -9,
+        -7, -4, -8, -2, -1, -4, -44, 46, 122, -61, 0, 0, 0, 1, 98, 75, 71, 68, 0, -120,
+        5, 29, 72, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 29, -121, 0, 0, 29, -121, 1,
+        -113, -27, -15, 101, 0, 0, 0, 7, 116, 73, 77, 69, 7, -30, 9, 19, 18, 23, 42, 25,
+        126, -80, 119, 0, 0, 26, 119, 73, 68, 65, 84, 120, -38, -19, -99, 11, 84, 83, 87, -42,
+        Byte.MIN_VALUE, 19, 82, 30, 117, 28, 35, 5, 31, 117, -20, 76, -85, 84, 105, 25, -80, 118, 84, 44,
+        -74, -108, -87, 83, -117, 51, -88, 48, 12, 83, 28, -75, 29, 71, -115, -14, 26, Byte.MAX_VALUE, -91, 29,
+        -25, -105, 22, 45, -42, 63, -94, 77, -101, 43, 70, -37, -117, -71, 55, 61, -119, 109, 115, -93,
+        103, -79, 106, -75, 106, 125, -65, -97, -29, -37, 90, -48, 42, -30, 19, 5, -103, 8, -124, Byte.MIN_VALUE,
+        57, -21, 79, 80, 32, 64, -98, 55, -9, -34, 60, -9, 90, -70, 64, -13, -40, -25, -69, -25,
+        -20, -77, -9, 62, -25, -20, -61, 67, 1, 113, 88, 120, 1, 4, 1, 88, 1, 88, 1, 88,
+        1, 88, 1, 88, 1, 88, 1, 4, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88,
+        1, 4, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 4, 1, 88, 1, 88,
+        1, 88, 1, 88, 78, -119, -95, 89, -81, 107, -84, -85, -68, 116, -20, -48, 55, -85, 86, 77,
+        22, -76, 73, -17, 85, -85, 86, -19, 58, -10, -97, -86, 27, 15, 26, -101, -12, -51, -122,
+        0, -84, 22, -19, -99, -85, 103, 15, 126, -13, -55, 91, -31, -111, 3, 99, 82, 39, 102, 23, 20,
+        44, -109, -75, 73, -119, -15, -73, -100, -44, -108, -127, 3, -61, -61, -25, 124, -78, 109, -1, -113,
+        87, -17, 61, -16, 99, 88, 119, 79, 110, 92, 60, -19, -49, 19, -90, 100, -117, -91, 50, 92,
+        -83, Byte.MIN_VALUE, 16, 82, 70, 1, -19, 98, -4, 5, -102, 68, -119, 99, -46, -94, -20, -44, 63, -51,
+        -100, -70, 120, -57, -123, 106, 63, -124, 85, Byte.MAX_VALUE, 126, 57, 47, 100, 82, 46, 70, 58, 35, 106,
+        44, -9, 119, -67, 121, -53, -49, -41, -5, 15, 44, -67, -10, -6, -82, 55, -98, 24, -110, 35,
+        43, 83, 64, -32, 20, 44, 18, 64, -107, -86, 52, 115, -80, -32, 111, -5, 110, 106, -11, -66,
+        15, -85, -27, -6, -63, -81, -34, -118, -50, -108, 2, 57, -92, 72, 90, 66, 65, -107, 90, 60,
+        37, 122, -26, -6, 19, -41, 91, 124, 26, 86, -51, -50, -31, -81, -25, 98, 4, 73, 1, -46,
+        21, 49, -102, 51, 53, 33, 22, 13, 27, -66, -89, -50, 71, 97, 25, -102, -50, -60, 11, -110,
+        75, -95, 107, -100, 58, 117, 49, 108, -84, 96, -22, 79, 28, 58, 21, 92, -63, 106, -68, -74,
+        43, 44, -70, 24, -86, 40, -110, 65, -95, 20, -118, -126, -127, -3, -73, 87, -43, -5, 20, -84,
+        -102, -67, 31, 12, -50, 47, 81, 48, -41, -85, -38, 5, -62, -110, -4, -60, 5, 123, 107, 124,
+        6, -42, -99, -27, -63, -23, -124, -102, 100, 77, -44, 50, 81, -16, -41, 119, 125, 1, -106, -66,
+        -6, -85, 39, 50, 40, 72, -78, 41, 0, -110, 25, -126, 47, 110, -21, -67, 28, -106, -2, -54,
+        -38, -56, 76, -75, 28, -112, 44, 11, 80, -111, 89, -111, 95, 92, -47, 123, 51, -84, -118, -7,
+        -119, 98, 28, -78, -114, -86, 21, 23, -123, 75, 18, -25, -105, 123, 45, -84, 27, -29, -124, 98,
+        -118, -28, 82, -60, 61, -30, -85, -67, 17, -106, -31, -34, 119, -95, -123, 101, -36, -78, 34, 41,
+        77, 86, -40, 119, -9, -68, 14, 86, -35, -114, 97, -103, 56, 36, 57, 23, -120, 103, 14, -5,
+        65, -21, 93, -80, 78, -59, 103, 17, 0, -112, 110, 16, 0, -16, -108, -105, 79, 122, 17, -84,
+        -69, 83, -61, 49, 72, -70, 77, 40, -20, -105, 83, -17, 122, 9, -84, -6, -61, -62, 28, 5,
+        69, -70, 81, 40, -104, 39, 60, -94, -13, 6, 88, -27, 51, -58, 18, 110, 69, -43, 106, -70,
+        100, 105, 51, 126, -10, 120, 88, -51, -101, 34, 48, -46, 19, 4, 72, Byte.MAX_VALUE, -15, -75, -34, -93,
+        97, 61, -84, -103, 22, 77, 2, -113, Byte.MIN_VALUE, 69, 82, 32, 102, 94, -115, 7, -61, 106, 57, 33,
+        -52, -89, 60, -124, -107, -55, -89, -49, -113, 56, -95, -9, 84, 88, -38, -91, 35, 74, 32, -23,
+        65, 66, 17, 35, 22, 107, 61, 19, 86, 85, 112, 22, 69, 122, -104, Byte.MIN_VALUE, -36, -34, -73, 61,
+        16, -106, -31, 100, -104, 68, 67, 122, -100, -64, 69, 97, 39, 91, 60, 13, -106, 126, 83, -84,
+        103, 13, -63, 118, 90, -91, 67, 54, -22, 61, 11, 86, -19, -8, 52, 53, 32, 61, 82, Byte.MIN_VALUE,
+        50, -3, 15, -11, -98, 4, -21, 70, -97, 60, 13, -23, -79, 2, -77, 122, 87, 121, 14, -84,
+        -118, -105, 10, 32, -23, -63, -94, 41, 122, -87, -36, 83, 96, 29, -115, -112, 82, -92, 71, 11,
+        -75, 108, -64, 41, -113, Byte.MIN_VALUE, 101, -8, -95, -65, -89, -102, 43, 51, -61, 69, -124, 108, -16,
+        0, 88, 45, 7, -6, 122, 60, 42, 19, 45, -59, -96, -35, 45, -18, -122, -43, -76, -93, 31, -18,
+        13, -80, -116, -109, -30, -32, 77, 122, -9, -62, 106, 90, 60, 65, -19, 21, -84, -116, -76, -16,
+        -92, 25, 15, -35, 9, -85, 105, 109, 6, 36, -67, 70, 52, 19, -106, 52, -71, 15, -106, 110,
+        67, 12, -23, 77, -94, 24, -5, -107, -50, 93, -80, 30, -82, -120, 33, -127, 87, -47, 34, -57,
+        46, 119, 19, 44, -61, -106, 56, 72, 122, -103, -56, -93, 54, -71, 5, -106, -47, 103, -96, 72,
+        -81, 19, -8, 43, 23, 60, 8, -6, -80, 14, 60, -123, 3, -17, -125, 5, -44, -79, -121, -71,
+        -121, 117, 52, -108, -16, -62, -114, 101, -14, -27, 123, -99, -30, 26, 86, -43, -45, 106, 64, 122,
+        -91, 0, -100, Byte.MAX_VALUE, -117, 91, 88, 53, -81, -120, -67, -108, -107, -47, 108, 73, -98, -66, -61, 37,
+        44, -35, -44, 124, -81, 101, 101, -92, -107, 61, 77, -57, 33, -84, -23, 25, -112, -12, 98, -95,
+        82, -26, 113, 7, 107, 103, 108, 25, -23, -43, -94, -118, -36, -54, 21, -84, -53, -49, -111, 94,
+        46, Byte.MIN_VALUE, 20, 94, -28, 6, -106, 118, -92, -44, -37, 97, -111, 20, 54, -14, 30, 39, -80, -30,
+        -13, 32, -23, -3, -110, 63, -81, -123, 3, 88, -21, 71, 40, 72, 95, -112, -24, 61, -20, -61,
+        -70, -4, -100, 26, -8, 2, 43, Byte.MIN_VALUE, -121, -107, -77, 13, -85, 126, 26, -26, 19, -84, -116, 102,
+        -85, 116, 104, 13, -53, -80, 54, -89, -110, -66, 34, 32, 103, 125, 51, -85, -80, 42, 122, 40,
+        -127, -49, -48, 82, -10, -85, 96, 19, 86, 93, 79, 12, -110, -66, -45, -75, -106, -123, 52, -80,
+        8, 107, -59, 66, 31, 98, 101, 12, 18, 69, 11, -40, -125, 117, 57, -114, -14, -34, 110, 100,
+        -55, 124, -64, -2, 23, -39, -126, -43, 52, 89, -20, -67, 115, -97, 88, 6, 44, 57, -14, -15,
+        90, -106, 96, -19, -114, -15, 90, -29, 14, -54, -110, 82, 44, -7, -46, 96, -30, 94, 3, 43,
+        -80, 106, -8, -72, -41, -62, -62, -30, -126, 19, -28, -106, -2, 67, -42, 75, -53, 10, -84, -9,
+        115, -27, 94, -39, -87, 40, 92, 18, -53, -29, -15, 34, 44, 110, -73, -125, 89, -97, -79, 1,
+        -21, 98, -108, 55, -58, -124, 64, 69, -50, -115, -30, 27, 89, -15, 66, 44, 122, -120, Byte.MIN_VALUE, 10,
+        -83, 96, 30, 86, -29, 18, 111, -116, 115, 32, -103, 30, -46, -118, -118, -57, 19, 88, 62, 85,
+        75, 97, 67, -11, -116, -61, -70, 24, -93, -18, -98, 66, -13, -12, 20, 31, -98, -14, -104, -108,
+        9, 86, -79, 101, -65, 7, 78, 56, -54, 52, -84, -58, 23, -91, 93, -39, -32, 24, -27, -55,
+        -72, 32, -108, -92, 11, 120, 29, -62, -97, 101, -59, -95, 38, 38, 107, 25, -122, -75, 123, 8,
+        -20, -106, -11, 15, 93, 8, 20, -98, -118, -117, 82, 20, -58, -102, -93, 50, 74, -70, -75, -24,
+        -29, -43, -93, -52, -62, -46, -14, -80, 46, -99, 24, 22, 26, 31, -106, 64, -28, -103, -55, 45,
+        0, 37, 3, -8, -68, 46, 18, -85, -76, -14, 98, 113, -120, -98, 81, 88, 27, -45, -70, 76,
+        -68, 80, -14, 88, -123, -28, -107, -72, -121, -115, 70, 64, 17, -59, 3, 120, -35, 101, 16, 110,
+        -27, 13, -102, -33, -18, 102, 18, 86, -51, 43, 93, 21, 90, -39, -34, -57, -7, 113, -77, 74,
+        -53, 40, 15, 26, Byte.MAX_VALUE, -40, -84, -2, 60, 75, 18, 81, 106, 53, 105, -54, -41, 50, 7, -53,
+        -80, 63, -81, 75, -25, -63, -51, 31, 29, 63, 36, 1, 83, 121, 6, 46, 32, -105, 77, 8,
+        -31, 91, 100, -59, 19, -84, -76, -10, 46, -71, 104, 35, 115, -80, -22, 103, 119, 125, 40, 9,
+        -35, -6, -8, 34, -113, Byte.MIN_VALUE, 69, 76, -30, 89, 23, -119, -11, -18, 56, 78, -53, 24, -84, -118,
+        -24, 46, -26, 51, -103, -41, -3, -23, 9, 103, 97, 36, 116, -93, -11, 2, 10, -68, 56, -127,
+        103, 75, 22, 90, Byte.MAX_VALUE, 111, -58, 105, -58, 96, -67, -74, -120, -22, -100, 51, -77, -84, -52, 47,
+        98, 115, 40, -71, -101, 112, 1, -107, 90, 20, -59, -77, 45, 19, -84, -65, 93, -6, -98, -98,
+        33, 88, 21, -31, -99, -93, -62, 108, -66, 53, 117, -8, 33, 34, -75, 91, 122, 23, 36, -45,
+        -8, 124, -98, 61, -79, -95, -39, -32, 74, -122, 96, -3, -79, -72, -77, 59, 39, 26, 31, 100,
+        93, 33, 126, -78, 20, -25, -74, -80, 10, 0, 74, 44, -51, 46, 40, -98, 32, -127, -80, 49,
+        -121, -26, -81, 98, 6, -42, -43, 8, 85, -89, 15, 86, -1, 111, -80, 109, -75, 94, -56, -62,
+        32, -28, -48, 84, -27, 36, -40, 71, 21, -102, 36, -106, 83, -74, -62, 72, 65, 53, 35, -80,
+        54, 22, 118, 105, 121, 9, -106, 34, -80, -93, 90, 108, -127, -126, 19, 92, 64, -125, -89, 11,
+        -19, -113, -65, -32, -84, 82, 96, -37, -73, 81, -92, 124, -51, 4, -84, -38, -55, 22, -62, 4,
+        92, 100, 79, -61, -112, 92, 14, 34, 33, 80, 50, -62, 62, 41, 30, 63, -61, -66, 38, Byte.MIN_VALUE,
+        124, 82, -53, 0, -84, -53, -81, 90, 116, -2, 64, 74, -124, 29, 61, -7, 19, 36, 4, 96,
+        -49, 87, -91, 32, -79, 40, -111, -25, -64, 0, -100, Byte.MIN_VALUE, 59, -110, -31, -123, -55, 39, 92, -121,
+        101, -8, -90, -56, 74, -84, 74, 44, 28, 100, 79, -47, -88, 116, -79, -122, -99, -39, 17, 66,
+        113, -58, 0, 7, 80, -11, 23, 97, 26, -121, 20, 0, -40, 10, -67, -53, -80, -76, -67, 8,
+        -85, -77, 16, 46, -115, -77, 59, 7, 9, 115, 89, 112, 85, -95, 38, 59, 74, -32, -64,
+        0, 12, 45, -60, 29, 78, 81, 42, 95, -65, -29, 50, -84, -1, -60, -40, 74, -67, -85, 36, -79,
+        118, 117, -26, 39, -81, 84, 50, -104, 85, 5, 64, 77, 100, -123, 56, -48, -87, -8, 33, 89,
+        78, -7, 48, 19, 79, -70, 12, -85, 79, 17, 101, -5, 25, -117, 71, -124, -38, -43, -5, -7,
+        20, 9, -50, 72, -88, 13, 32, -60, 10, 18, -8, -114, -96, 26, 32, -62, 85, 78, 125, -76,
+        -28, 99, -125, -117, -80, -86, 5, 10, -69, -122, 22, -101, 101, 31, -105, -32, -7, 52, 73, -103,
+        -85, 121, 85, 74, 14, -77, 19, 34, 120, -114, -56, 11, 5, 78, -41, 71, -59, -19, 46, 33,
+        -38, -125, -75, 41, -51, -111, 5, 48, 101, -82, -3, 113, -63, -25, -121, -92, 19, -82, -104, 47,
+        0, -79, 100, 71, 12, -107, 41, -88, 23, -45, 40, -27, 12, -57, 30, 114, 13, 86, -13, 112,
+        2, 56, 102, 113, 115, -123, -114, -76, 35, 74, 68, -85, 116, -66, -47, 3, 33, -80, 44, -57,
+        -6, -108, 113, 0, 22, -45, -70, -59, Byte.MIN_VALUE, 90, -42, -57, 53, 88, -41, -122, 57, -70, -78, 10,
+        65, -73, 21, 2, -53, 50, 96, 108, -18, 74, -96, 114, -94, -117, 65, 69, 25, -106, -109, 54,
+        Byte.MIN_VALUE, -17, 32, -86, -124, 2, -70, -79, -106, 38, -20, -106, 75, -80, -10, -25, 2, -57, -97, 62,
+        46, 77, 115, -88, 69, -4, 16, 97, 114, 1, -48, 56, -14, -8, 1, 84, 105, 36, -23, 3,
+        66, 28, 36, -59, -29, 37, 99, 74, -38, 19, -119, 66, -76, -59, 21, 88, 77, 107, -99, -85,
+        118, 72, 41, 29, -75, 42, -58, 30, 38, 18, -85, -19, 89, 22, 53, 54, 55, -111, -25, -80,
+        -16, -7, 73, -124, 43, 83, 8, -123, -115, 55, -72, 0, 75, -5, 14, -31, 108, 14, 14, -49,
+        -24, -17, 112, 55, -32, -11, 79, -104, 85, 32, -58, 30, -33, 80, 100, -70, -93, -56, -12, -105,
+        113, 126, 85, -30, -40, -54, 69, 57, 105, -125, 4, 60, 39, 36, 98, -126, 76, -29, -38, 116,
+        -85, 120, -93, -58, 5, 88, -41, -93, -23, -92, 76, 10, 99, -99, 105, 35, 63, 116, -64, -96,
+        -72, 73, 105, -77, 102, -119, 10, -117, 11, 77, Byte.MAX_VALUE, -109, -30, -60, -72, 40, 97, 8, -49, 57,
+        -23, 53, -73, 4, -70, -22, -55, 81, -55, 63, -70, 0, 107, 95, 38, -99, -17, 7, -54, -46,
+        9, 78, 54, -43, 56, -124, 30, 11, 47, -114, 76, -26, 57, 45, -62, 69, 56, 3, 65, 2,
+        40, -38, 97, -96, 15, -21, 111, 82, 64, -45, 37, 34, 28, 55, 94, 93, 36, -119, 76, 114,
+        22, 116, -1, 69, 101, -52, -124, 83, -91, 31, 54, -46, -122, 85, 47, 112, 37, 43, -105, -11,
+        2, 45, 92, -23, 32, -63, -87, -41, -121, 38, 73, -28, 76, 37, 26, -15, 65, -1, -91, 13,
+        -85, 98, -80, 11, 123, -3, 0, -60, -59, 105, 52, 112, -91, -61, 1, -50, -96, -54, -59, 40,
+        -26, 114, 102, 32, -26, 42, 109, 88, 107, 93, 62, 44, -89, -52, 18, 56, 11, 107, 33, -20,
+        -27, -8, 4, 88, -56, 108, 114, -111, -54, -36, 71, 27, 22, -81, -60, 101, 93, 32, 85, 24,
+        -27, 28, -81, -123, 10, 7, 95, 31, 18, -73, 72, -59, 112, -94, 31, -120, -33, -96, 11, -21,
+        110, 48, 3, 59, 110, 1, -124, -110, 20, 39, 6, 22, -65, 64, -27, -48, -21, -94, 68, 98,
+        21, -29, 107, 34, 64, 41, -48, -45, -124, 85, 30, -85, 98, 70, 5, -14, -47, 126, 97, -57,
+        96, 45, -46, 56, -16, -86, 4, 49, 59, -117, -109, -102, -16, -97, 105, -62, -38, 59, -117, -79,
+        71, 7, 32, -103, 18, -62, 119, 40, 105, 39, 17, -37, 123, -123, 64, -60, -38, -106, 48, -59,
+        -40, 61, 52, 97, 45, 102, -78, -94, 38, 80, 80, -117, -110, 28, 72, 29, -124, 72, 109, -62,
+        -30, 11, 19, 22, 41, -40, -37, 80, 1, -77, -105, -48, -125, 85, 63, -99, 97, -125, 64, 65,
+        -94, 56, -35, 94, 82, 42, 20, 43, -74, -79, 88, 58, -74, Byte.MIN_VALUE, -35, -59, 110, 64, 4, 25,
+        104, -63, -70, 55, -121, 5, 101, 72, 37, -106, 100, 115, -11, 63, 66, 54, -53, -38, Byte.MAX_VALUE, -59,
+        21, -86, 89, -33, 78, -82, 9, -82, -93, 5, -21, -38, 36, 118, 30, 30, 84, -120, -109, 67,
+        -83, 6, 67, -49, -109, 34, -117, 41, -80, 23, 22, -110, 92, 92, -71, -94, 26, 117, -107, 22,
+        -84, 31, 83, 88, 91, 76, 86, 65, -15, -36, -124, 1, 22, -3, -87, 1, -35, 67, 67, 97,
+        108, 122, 1, 110, Byte.MAX_VALUE, -79, -42, -24, -92, 40, -28, 26, -115, 70, -82, Byte.MIN_VALUE, -12, 83, -3, 10,
+        91, 11, -45, -42, 97, 25, 14, 102, -45, 92, 86, 55, -87, 108, -44, -104, -78, -35, 50, 53,
+        -127, 21, -89, 117, 15, 31, -29, -54, 98, 59, 111, 49, -103, 43, 41, -63, -95, -3, -39, 15,
+        106, 72, 73, 102, 116, 95, -95, 48, 44, 50, 41, -75, -104, -92, -69, 16, 14, 11, 55, -46,
+        -127, -43, -78, -83, -120, -98, 19, 44, 74, 126, 33, 42, 42, 46, 45, -41, -127, 10, 91,
+        0, 64, 44, 55, 73, -40, -106, -99, 49, -55, -17, -116, -80, 30, -1, 30, -101, 94, -88, -90, 28,
+        116, -89, -88, -36, 40, -2, -72, 117, 103, 42, -85, -85, -85, 43, 79, 109, 125, 57, -24, -71,
+        -71, 56, -67, 71, 45, 89, 67, 7, -106, -2, 75, 103, 75, -50, 80, -92, 116, -54, -21, -45,
+        87, -20, 61, 121, -27, -22, -43, -53, 39, -74, 44, -98, -102, -112, -125, -39, -75, -56, -58, -114,
+        -88, 41, -61, 37, -123, 57, 105, -23, 70, -58, 81, 81, -23, 101, -125, -110, -45, -46, 11, 11,
+        48, 80, 38, 119, -16, 18, 87, 0, -91, 25, 111, -82, -65, 108, 94, 33, 95, Byte.MAX_VALUE, 117, -29,
+        -44, 100, 41, -99, -23, 64, 61, 95, 71, 3, 86, -45, -1, 56, 121, -37, -112, 70, 60, -28,
+        -97, 39, -82, -101, -87, -84, -83, -36, -1, 82, 76, -119, 35, -53, 67, 70, -81, 2, 42, 20,
+        114, -109, 40, 72, -29, 31, -93, -43, 113, -36, -19, -92, -108, -81, -66, 120, -74, -74, 123, 74,
+        -4, -30, 123, -47, 52, 22, 47, -44, -1, -44, -46, Byte.MIN_VALUE, -91, 123, -34, -87, -4, 59, 0, -55,
+        -67, 43, -70, 86, -29, 53, 52, 30, -29, -77, 125, 96, 31, 16, 97, -37, 44, 87, 1, -42,
+        -19, 17, 16, 78, Byte.MAX_VALUE, -71, 122, -26, 61, 26, -80, 26, -61, -99, 26, -11, 120, -20, 106, -117,
+        49, 104, -35, -72, 116, 37, -101, -84, -88, -46, -112, 115, 86, -37, 112, -66, 119, -79, -77, 125,
+        75, -3, -10, 77, 26, -80, -18, -10, 115, 42, 92, -113, -37, 107, -51, -10, -83, -97, -64, 98,
+        -33, -94, -120, -2, -25, 108, 4, 40, -73, -99, -65, -71, 108, -62, 85, 26, -80, -86, 6, 58,
+        -47, 70, 69, -20, -50, 78, -67, -78, -78, -86, -61, 17, -42, 47, 17, -79, 119, -72, 26, 70,
+        -38, -34, 40, 116, 46, -42, -39, 79, 28, 115, -123, 6, -84, -97, 98, 28, -121, 5, 11, -29,
+        -51, 119, -95, 46, 15, 50, -54, -116, 27, -19, 65, 38, -65, -124, -83, 40, 5, 20, 76, 51,
+        -41, -7, -122, -47, 105, 8, 90, -66, -57, -52, -38, 55, -81, 112, -10, 14, -35, 41, 103, 105,
+        -64, 58, 54, -47, 9, 88, -31, 55, 58, -34, 88, -39, -26, 80, -98, 106, -117, 73, 15, 37,
+        -79, 54, 16, -109, -52, -6, 65, -27, -72, -74, 111, 94, -35, 49, -93, -107, -113, 114, -78, 91,
+        103, 31, -95, 1, -21, -48, 20, -121, 91, 8, -80, -105, 58, 98, -11, -6, -98, -19, -18, 119,
+        -101, -54, -115, 97, 56, 75, -84, -120, 119, 58, -80, 84, -104, 57, -2, 47, -73, 91, -127, -122,
+        32, 39, 115, 95, -76, 96, 125, -109, 77, 57, 62, 24, -66, -17, 120, -33, -87, 14, -107, -113,
+        -73, 5, 3, Byte.MAX_VALUE, 101, -21, -126, 72, -39, 39, -19, 11, 125, -115, 11, -52, -61, -92, 117, -19,
+        -6, 60, -119, 57, 55, 14, -117, -66, -89, 1, 107, 85, -127, -29, -80, -78, -51, -66, -32, 64,
+        -121, -58, 7, -38, 96, -51, 94, 6, 88, -121, -91, 125, -42, 28, -42, 56, -49, -123, 85, -12,
+        -79, -103, -53, -47, -95, 113, -37, -91, 83, -51, -3, 75, -40, 26, -122, 51, -37, -121, 97, -13,
+        86, 115, 88, -25, -37, 61, -45, 32, 39, -125, 30, 90, -80, -90, 57, 62, -115, 24, -99, 104,
+        51, -121, 116, 119, -101, -62, 27, -38, -118, 91, -34, 10, 103, 43, 19, -91, 30, 113, -67, 35,
+        -66, -7, -56, -52, 0, -76, -37, -48, 43, -49, 59, 121, -117, 25, 45, 88, 2, -103, 19, -101,
+        -13, -110, -52, 22, 39, 91, -50, 60, 58, 52, -74, -67, 29, -32, -44, 28, -74, 102, 67, -112,
+        -1, -127, 89, 112, 85, 49, -29, -15, 100, 120, -69, -99, -107, 97, -115, -77, -21, -80, -40, -81,
+        89, -122, 5, 8, -66, -7, -95, -86, -90, 11, 91, -73, -98, -22, -24, 107, -25, -124, 44, 86,
+        -79, -23, -43, -87, -108, 76, 67, 101, -59, -123, 106, -13, -80, -85, -14, 117, 103, 63, 16, 19,
+        -78, 12, -117, -124, -59, -15, 86, 115, -41, 55, 126, 83, -62, 94, 62, 24, 98, -126, 107, -74,
+        78, 105, -67, 34, -11, 60, 88, 36, -75, 48, -34, -54, -127, -67, -14, -89, 37, 108, -26, -50,
+        -95, -92, -113, -11, -8, -92, -22, -27, 28, -32, -127, -80, 72, -86, -104, Byte.MAX_VALUE, -36, 82, 24, -67,
+        53, -116, -19, -22, 72, -104, -32, -72, -107, -60, -8, -103, 96, -79, -13, -49, -119, 11, 88, 36,
+        36, 34, -33, -68, -84, -19, 84, 38, 85, 95, 119, -18, -107, 36, 37, -37, -89, 52, 33, -47,
+        111, -38, -75, -18, -101, -48, 116, 55, -65, 8, -57, 105, -12, 105, 78, 96, -111, 20, 40, -114,
+        -98, -3, -19, -39, -101, 15, 90, 13, 108, 83, -35, -11, 19, 107, 102, -114, 17, 115, 80, -38,
+        -121, 82, 20, 12, -7, -32, -56, 77, -13, -25, -44, 114, -5, -56, 103, -79, -39, -76, 86, 25,
+        -71, -127, 101, -70, -44, -122, -112, -92, -1, -2, -39, -95, -29, -57, -113, 31, 62, -12, -39, -41,
+        77, -89, 41, -72, 57, 90, 14, -108, -104, 104, -12, -48, 53, 7, 42, 110, -41, -43, -43, -35,
+        42, 63, -71, 102, -8, -56, 12, 12, -89, 103, 42, -23, -63, -94, -107, 87, 1, 20, -108, -109,
+        98, -79, 24, -93, 20, -112, -45, -118, 43, -108, 2, -49, 121, -75, 95, 40, -97, -49, 15, -19,
+        -105, -108, -125, -45, 95, -112, -91, 5, -21, -75, 101, 116, -65, 15, 80, 20, -27, -122, -46, 52,
+        0, -54, 53, 101, 38, -47, -88, 92, 57, 79, 37, -3, -112, -35, -40, -48, -89, -124, -19, 64,
+        58, 0, 43, 0, -53, 9, 88, -5, 50, -95, 95, -62, -54, 62, 64, 39, 7, -97, -22, -89,
+        -80, -24, -92, -107, -49, -116, -15, 79, 88, 121, -89, -39, 94, 55, -12, 33, -95, -75, 110, 120,
+        107, -96, Byte.MAX_VALUE, 26, -8, -79, 116, 86, -92, 27, -62, 113, Byte.MAX_VALUE, 100, -91, 126, -5, 22, -99, 93,
+        52, 81, -124, 95, -62, -6, -57, 29, 46, -10, 103, -7, 8, 44, 90, -5, -77, -12, -97, 75,
+        -3, 18, 22, -83, -99, Byte.MAX_VALUE, 52, -9, -108, 122, -71, 0, 108, 5, -105, -69, -107, -67, 91, 104,
+        -18, 86, 70, 103, 83, -4, 17, 86, -6, 126, 90, -80, -86, 38, -7, 33, 44, -43, -88, 43,
+        -76, 96, -35, -103, -29, -121, -80, 52, -63, 119, -23, -99, 10, -101, -25, -121, -10, 29, -25, -47,
+        59, 21, -58, -20, 121, 67, 47, 49, 89, -39, -45, 105, 30, -50, -36, -110, -27, 119, -95, 52,
+        -3, -109, -84, -25, 18, 85, 126, 103, -78, 104, -97, -111, -66, -37, -69, -52, -33, 76, 22, -3,
+        -45, -9, -120, 71, 0, 63, -125, 69, -65, -82, 3, 3, 21, 67, -68, 76, -88, -52, 109, -76,
+        97, -99, 25, 44, -9, -77, -98, 21, 115, -119, 54, 44, 109, -120, -97, -39, 44, 124, 80, 45,
+        -3, -6, 89, 35, -91, -2, 101, -76, 92, -87, -97, 69, -77, 50, -101, -9, -114, -62, -94, 29,
+        15, 57, -83, -7, -25, -43, -10, 61, -19, 44, -105, -43, 36, -67, 60, -40, 121, -87, -38, -107,
+        58, -91, 95, -8, 83, 30, 30, 16, 46, -43, 41, 69, -35, 46, 9, -13, -23, -64, -48, -75,
+        10, -72, -24, 90, -100, 31, -71, -91, -82, -42, 86, 110, 30, -114, -5, 77, -41, -94, -92, 46,
+        86, -19, 70, 27, -3, 39, 77, 3, 83, 92, -84, 7, -17, -64, 77, 3, 62, 35, -22, 30,
+        -82, -34, 52, 96, -17, 14, 11, 31, -102, 11, -91, 31, -70, 122, -121, -123, -99, -37, 81, 124,
+        73, 50, -19, -34, 113, 104, -1, -34, -99, 30, 126, -78, -103, 70, 25, -25, -6, -67, 59, -122,
+        85, -2, -79, -118, 15, -80, -91, 77, 46, -61, 66, -27, -81, -6, -57, 92, -56, -60, 93, 97,
+        -106, 111, -95, -13, -67, -114, -59, -52, 45, 116, -24, -37, 98, 63, -104, 15, 21, 115, -105, 32,
+        38, 96, 93, -23, -81, -16, -125, -114, 21, 114, -101, 17, 88, -24, -103, 98, -97, -9, -30, -87,
+        -4, -9, 16, 51, -80, -70, -34, -10, -21, -117, 50, -8, 42, 67, -80, -48, 107, 62, -17, -59,
+        75, -89, 53, 49, 5, -85, -62, -41, -77, -53, 32, -29, 36, 98, 10, 86, -3, 95, 101, 62,
+        110, -78, -34, -84, 101, 12, -106, -63, -57, 19, -90, 114, -47, 70, -60, 24, 44, 84, -13, 10,
+        -23, -61, -76, 0, -50, -41, 50, 8, 11, 109, 76, -15, -31, -35, 71, -14, -33, -18, 70, 76,
+        -62, -46, -14, 125, 55, -67, 12, -80, 80, 61, -93, -80, -48, -82, 104, -33, -11, 30, 82, 15,
+        35, 102, 97, 53, -66, -24, -91, -37, 30, -20, 107, 77, -68, 81, -57, 48, 44, 116, 49, 70,
+        -19, -115, -84, -96, 93, -89, 7, -90, 31, 68, 76, -61, 106, 92, 82, -30, 125, 93, 11, 40,
+        115, 120, 118, 18, -67, 20, 54, -76, -111, 113, 88, -24, 92, -100, -41, 69, -120, 20, -106, 56,
+        -2, 69, -37, -39, 56, 64, -11, -70, Byte.MIN_VALUE, -104, -121, -123, -2, 88, -88, -16, 58, 88, 65, 23,
+        -1, 97, -37, 122, -64, -52, 121, -120, 13, 88, 53, 94, -25, 62, -88, -110, 54, -36, -98, 96,
+        -5, 37, -78, 94, 90, 86, 96, -95, 93, 99, 28, -125, 5, 100, -78, -36, 60, 73, -111, 120,
+        -39, 50, -103, -116, 80, -86, 91, 111, -90, -91, 0, -32, -100, 52, 37, -23, -45, 84, -98, 106,
+        91, -43, -119, 123, 13, -20, -64, 106, -100, 44, 118, 108, 6, -54, 29, -60, -21, -71, -12, -32,
+        -10, 47, -65, -100, 51, 115, 80, 100, -65, -33, -58, 76, -100, -110, 93, -76, -116, 32, -53, 90,
+        111, 121, -31, -50, 95, -61, -61, -85, -48, -34, 108, 91, -49, 8, -108, -60, 59, -47, -79, -100,
+        -126, -123, 46, -57, 57, -42, 82, 101, 73, -63, -92, 62, -13, 79, -42, 26, -102, 26, -21, -75,
+        -9, -81, 92, 57, -74, -17, -101, -113, -33, -32, 11, 66, 126, 57, 36, 37, -73, 120, -91, 70,
+        -93, -30, -124, 25, -116, -34, 109, 104, -7, -34, -26, 66, 30, 28, 112, 17, -79, 5, -53, -80,
+        -44, -47, 11, 41, Byte.MIN_VALUE, -23, 118, 119, -34, 103, -25, 27, 90, -52, 58, 102, 77, -43, -123, -9,
+        -89, -65, -33, -13, -55, -98, -61, 70, -3, 93, 84, 72, -32, -72, 90, -83, 38, 89, 27, -98,
+        84, -42, 124, 61, 106, -2, -9, 50, 91, -84, 68, 11, 16, 107, -80, 80, 93, 16, -26, 112,
+        58, 30, 106, -16, -4, -24, 30, -97, -97, -66, 105, 126, -59, -53, -26, 10, -124, 26, -76, 55,
+        43, 79, 31, -36, 50, -12, -35, -113, -33, -7, 75, 82, 74, 94, 118, -111, 84, -122, 67, 83,
+        95, 99, -78, -77, 81, -54, 49, -13, 27, 16, -46, 63, 39, -77, 21, 20, -10, 110, 96, 17,
+        22, -70, -48, 67, -23, 68, 93, 92, 8, 9, -55, -108, -60, -9, 54, 118, 92, -119, -77, -71,
+        -67, 64, 52, -38, 112, -95, -15, -34, -99, -21, -105, 79, -20, -5, -14, -33, -3, -123, -125, -94,
+        83, 114, -60, -91, -86, 50, 13, 67, -59, -17, 32, -15, -44, 118, -109, -81, 89, -5, -108, -115,
+        23, -87, 7, 87, 32, 54, 97, -95, -51, -87, -50, -122, 102, 106, 124, 97, 98, -48, -5, 23,
+        30, 5, -10, 51, 42, -37, 63, 105, -35, 99, 77, 13, 45, -51, -51, 15, -74, -2, -25, -48,
+        23, -15, 60, 126, 104, -92, 40, 119, 101, -21, -20, -23, -38, -40, -108, 23, 10, -114, -73, 26,
+        Byte.MIN_VALUE, -118, 33, -42, 71, 2, -56, 89, -33, -52, 46, -84, 7, 111, 58, 95, -93, 21, -54, -43,
+        121, -111, -126, 79, 43, 30, -24, -48, -77, -75, -35, 96, -75, -106, 114, 89, -41, -70, 94, 80,
+        Byte.MAX_VALUE, -29, -46, -50, -115, -29, -121, -57, -1, 126, 82, 122, -114, 24, -109, 17, -72, -102, -122, -49,
+        1, 40, 92, 58, -22, -35, -57, -9, -63, -20, -77, 94, -41, -118, 42, 29, 90, -125, -40, -123,
+        -123, 46, 63, -89, 118, -2, -87, 3, -88, 33, -14, 99, -94, 62, 61, 29, 116, -53, 10, 44,
+        -77, -8, 76, -89, -67, 121, -27, -20, -109, -33, 126, -15, -55, 59, 125, 7, -90, 78, -55, 19,
+        47, 35, -28, 26, 21, 116, 108, -2, -92, -96, 10, -53, 28, -44, -89, -3, 4, -3, -101, 86,
+        -41, -91, Byte.MIN_VALUE, 50, -76, 2, -79, 13, 11, -83, 31, 65, 43, -22, 1, 20, 32, -92, 11, 121,
+        -61, -41, -108, 55, -37, -127, -43, 42, -29, 116, 77, -115, -1, -67, Byte.MAX_VALUE, -17, -62, -79, 93, -1,
+        124, 67, 16, -42, 107, 72, 106, -98, -92, 84, 83, -10, 8, 26, -80, 102, 33, -27, -118, -107,
+        -87, -67, 66, 118, -35, -39, -36, 118, -3, -120, -127, 111, -67, -40, 106, -12, 110, -60, 62, 44,
+        20, 79, -1, 96, 29, 37, 5, 11, -61, 121, -13, 126, 110, -74, 7, -53, 48, -50, 60, 121,
+        121, -9, -42, -7, -19, 107, 95, 14, 10, -30, 63, -105, -104, -98, 82, 88, 76, -112, 22, -30,
+        61, 53, 94, 32, -118, 19, -12, -36, 96, -28, 100, 88, -35, 54, -40, -85, -7, 86, -113, -105,
+        -26, -49, 107, -31, 2, -106, 118, 36, -3, 34, 53, 20, 9, -53, -108, 121, -111, -95, -33, -100,
+        -69, -65, -38, -20, -76, 90, 99, 87, 88, 119, 63, -22, -6, -83, -121, 107, 80, -67, -74, -86,
+        -4, -56, -63, -11, 107, -2, 53, 124, -63, -20, -39, -77, -1, -14, -10, 99, 73, 124, -5, -19,
+        63, -49, -2, -37, -65, -2, -75, 102, -1, -27, 71, -112, -12, -19, -92, -49, 68, -53, -83, -123,
+        -40, 35, -17, 33, 46, 96, 25, -51, -106, 107, 73, 38, -88, -112, 21, -116, 121, -67, -49, -102,
+        43, -19, -124, -102, 87, 63, -24, -4, 21, -73, -70, -63, 90, -35, 113, 120, -71, 113, 67, 99,
+        109, -19, -3, -101, -41, 31, -53, -10, -99, 55, 110, -34, -81, 107, -22, -104, -39, 110, -73, -65,
+        121, -87, -107, 43, 14, 0, 41, -68, -120, -72, -127, -123, 126, -120, 117, -15, -16, -76, 113, -126,
+        -61, -119, -100, -72, 103, 86, -100, 107, -74, 12, -21, 118, 55, 88, 51, 58, -90, -82, -90, 5,
+        -99, -90, -4, 51, -25, -69, -98, 41, 109, 59, 65, -33, 52, -44, 74, -98, 68, 21, -71, 21,
+        113, 5, 11, -51, -56, 96, 96, 95, 13, -91, 80, 22, 70, -14, 62, -5, 73, -85, 55, -76,
+        116, -21, 89, -53, -69, 41, -38, 17, 8, 52, 125, -44, 105, 53, -26, -25, 51, 93, 94, -70,
+        -82, 109, Byte.MIN_VALUE, -33, 25, 109, 89, 77, 42, 101, 30, -30, 14, -42, -125, -87, -7, 76, 68, 116,
+        70, -113, 2, -49, -119, 9, -1, -4, 72, -27, -126, 46, 69, -85, -50, 28, -80, 1, 75, -65,
+        -70, -66, 19, -40, -19, 93, -78, 44, -49, -74, 85, 72, 57, -99, 110, -47, 113, Byte.MIN_VALUE, -39, -45,
+        116, 28, -62, 66, 53, -81, -120, -103, -119, Byte.MAX_VALUE, -115, 19, 62, 46, -50, -100, -60, 95, 122, -82,
+        -45, 110, -125, 83, -35, 97, 117, -28, 82, -12, 107, 59, -27, 85, 110, -19, -18, 12, 75, -41,
+        -42, -90, -26, -11, 22, -107, -124, -110, -89, -17, 32, 46, 97, -95, -86, -89, -43, 76, 102, 11,
+        64, 113, 98, -16, 31, 15, -44, 91, -121, -91, 11, 66, -114, -62, -86, 106, -69, -51, -23, -63,
+        -121, 50, -53, -117, -11, -73, 16, -73, -80, -48, -47, 80, -100, -47, 44, -127, 10, 22, 15, 9,
+        -103, 124, -32, -50, -125, 86, -29, 125, -8, 84, 87, Byte.MAX_VALUE, -59, 113, 88, -57, -73, 63, -2, -31,
+        106, -76, 5, Byte.MAX_VALUE, 12, 16, -67, 78, 33, -82, 97, -95, 3, -111, -52, -90, -28, 1, -108, -109,
+        69, 19, 7, -2, 117, -45, -23, 91, -51, 104, 117, -91, 77, 88, -99, -90, -125, -69, 123, 58,
+        -69, -105, 107, -37, -34, -5, 93, 78, -9, -57, 9, -44, -79, -121, 17, -9, -80, 90, 14, -12,
+        101, 60, 109, 7, 40, -91, 76, 34, 122, 107, -8, -106, 25, 85, 93, -89, -108, -98, 29, 63,
+        55, 111, -19, 84, -29, -86, 102, 107, -89, -55, -47, -16, -14, 99, -108, -75, -95, -35, -97, 38,
+        Byte.MIN_VALUE, -65, -38, -35, -30, 6, 88, -56, -80, 37, -127, -107, -115, -71, 20, -60, 69, -31, -4, -49,
+        46, -23, 12, 102, -61, -21, -46, 90, -77, -57, -76, -75, -45, 81, -26, -102, -51, -99, 96, -43,
+        -73, -103, -84, 13, 25, -118, -18, -50, 104, -44, 38, -6, 13, 118, 5, 22, 122, -72, 98, 12,
+        59, -37, -74, 76, 73, -118, -68, -127, 97, 31, 30, -65, 126, -65, -39, 105, 88, -73, 30, 95,
+        109, 88, 45, -80, 96, 38, -58, 126, -122, -36, 4, 11, -23, 54, -60, -80, -74, -16, 14, 85,
+        -124, 56, 51, 97, -50, -102, -67, -41, 90, 125, -94, 75, -85, 29, -123, 85, -15, 104, 34, -43,
+        -81, 40, -20, -42, -17, 21, 99, -65, -46, -71, 13, 22, 106, 90, -101, -63, -30, 22, 121,
+        0, -44, 56, 54, 107, -44, -109, -45, -49, 104, -47, -123, -35, 86, 97, -43, 111, -18, 68, -32, -16,
+        -93, -24, -25, 100, 66, -73, -49, -45, 76, 88, -46, -124, -36, 7, 11, 53, 45, 126, 85, -51,
+        -22, -30, -87, 49, -22, 38, 11, -121, 8, 126, 19, -65, 85, -89, 107, -77, -52, -122, 61, 55,
+        58, -63, 90, 103, 14, -85, 101, 115, 107, 16, 121, -5, -41, -91, -35, -4, -85, -124, 25, 15,
+        -111, 59, 97, 33, -35, -106, -66, 108, 47, -22, 27, 125, 10, -123, 56, -87, 95, -8, -57, 59,
+        126, -68, -39, -102, -89, 48, 28, -88, -76, 14, 75, -73, -63, -28, -124, 93, 13, -23, -102, 34,
+        5, -54, -63, 63, -24, -111, 123, 97, 25, 53, -17, -53, -63, 26, 51, -123, 43, -119, 101, 5,
+        41, Byte.MAX_VALUE, -98, -66, 116, Byte.MAX_VALUE, 101, 61, 58, 80, 101, 29, 86, -61, -122, 6, -124, -114, -12, -106,
+        118, 49, 15, 64, 49, -56, 5, -97, -127, 41, 88, -56, -16, 67, -88, -102, -85, 109, 12,
+        0, 22, -91, 9, 121, 125, -2, 112, 92, 107, 21, 86, -35, 58, -125, -10, -3, 72, -68, -101, -33,
+        46, -36, -32, 114, 75, 25, Byte.MIN_VALUE, 101, -116, 124, 34, 48, -50, 54, 125, 80, -14, 50, 82, 44,
+        -22, 27, 26, -15, -7, -15, -14, -69, -9, 27, -102, -116, -82, 88, -117, 57, -84, -106, 11, 75,
+        -74, 61, 49, -79, -85, 71, 67, 73, -5, -97, 66, -98, 1, 11, 85, -116, 44, -30, -16, -36,
+        24, -96, -96, 70, -119, 21, 101, -114, 25, -14, -113, 79, -42, 108, -39, 123, -10, -57, 113, -107,
+        55, -17, 52, -24, 26, -18, -35, -66, 118, 118, -1, -73, -81, 61, -107, -121, -53, -69, -80, -46,
+        20, -68, 84, -114, 60, 5, 22, -70, -47, 39, -97, -29, -126, 119, -90, -43, 68, 37, 78, -108,
+        -118, 115, 68, Byte.MAX_VALUE, 18, -116, 126, 107, -12, 51, 67, -97, 25, 61, 108, -44, -33, -25, 98, 50,
+        -68, -37, 58, 35, -52, -22, 83, -123, 60, 7, 22, -86, 29, -97, -90, 118, -53, 78, 55, 96,
+        -20, 103, 4, 5, -95, -62, -76, 51, -57, -30, -38, 34, 80, -90, -1, -95, 30, 121, 18, 44,
+        -92, -33, 20, 91, -30, -82, 35, -100, 54, -97, 18, 44, 29, -78, 81, -113, 60, 11, 22, 50,
+        -100, 12, -109, 104, 72, -113, 19, -72, 40, -20, 100, 11, -14, 52, 88, 8, 85, 5, 103, 121,
+        -36, 41, 12, -112, -37, -5, 54, 115, 45, 100, 16, 22, -46, 46, 29, 81, -30, 81, -89, -87,
+        41, 98, -60, 98, 45, -14, 76, 88, -88, -27, -124, 48, 31, 122, -52, -114, 102, 64, -27, 71,
+        -100, -48, 35, 79, -123, -123, 30, -42, 76, -117, -10, -108, -109, -119, 20, -120, -103, 87, -61, 104,
+        -21, 24, -122, -123, 80, -13, -90, 8, -49, -88, -87, 8, -92, -65, -8, 90, -113, 60, 27, 22,
+        66, -27, 51, -58, 18, 110, 55, -12, 80, -106, 54, -29, 103, -58, -101, -58, 60, 44, 84, Byte.MAX_VALUE,
+        88, -104, -93, 112, 43, 46, 10, -26, 9, -113, -22, -112, 55, -64, 66, -24, -18, -44, 112, -52,
+        -115, -45, 34, -123, -3, 114, -86, -106, -115, 118, -79, 2, 11, -95, 83, 125, -78, 8, -32, -98,
+        -8, -121, -60, 83, -30, -49, -79, -45, 42, -106, 96, 33, -19, -114, 97, -103, 56, -9, -67, 11,
+        64, 124, -54, -24, -67, 117, -56, -69, 96, 33, -61, -67, 109, -62, -123, 101, 20, -41, -58, 42,
+        43, -12, -69, 123, 108, 53, -119, 61, 88, -90, -60, -51, 56, -95, -104, 91, 90, -30, -80, -8,
+        90, 22, 27, -60, 38, 44, -124, 42, -26, 39, -118, 113, -118, 19, -37, 5, 40, 92, -110, 56,
+        -65, -126, -43, -26, -80, 11, 11, -23, -81, -84, -115, -100, -94, -106, -77, -114, 11, -56, -15, 41,
+        -31, 107, -81, -24, -111, 55, -61, 50, -30, -86, -2, -22, -119, 12, 10, -78, 108, -42, -55, 12,
+        -63, 87, -9, -12, 108, -73, -123, 117, 88, -90, 5, -49, -81, -125, -45, 9, 22, 11, 29, -88,
+        101, Byte.MAX_VALUE, -17, -67, -95, -114, -125, -122, 112, 1, 11, -95, -102, -67, 31, 12, -50, 47, 81, 48,
+        -97, -111, 0, 16, 98, -103, -119, -13, -113, -44, 113, -46, 12, 110, 96, 33, -44, 120, 109, 87,
+        88, 116, 1, 84, 49, 58, 59, 82, 42, 50, -65, -33, -81, 119, 94, -41, 113, -44, 8, -82,
+        96, 25, 29, -81, -90, -97, -26, 9, -110, 75, 21, Byte.MIN_VALUE, 57, -89, 10, 27, -53, -101, 119, -95,
+        -39, -64, 89, 19, -72, -125, -43, 58, 28, 119, 14, 31, -99, -123, 17, 106, -54, -75, 80, 8,
+        0, 74, 77, -120, 69, -61, -34, 61, 90, -57, -87, -6, -36, -62, 66, -88, -27, -6, -111, -81,
+        103, 70, 79, 17, -85, 53, 116, -113, -84, 82, 80, -91, -106, 76, 25, 50, 115, -3, -23, -101,
+        28, -21, -50, 57, 44, -109, 51, -15, -32, -42, -95, -111, -126, 126, -103, 37, 101, 78, 91, 124,
+        35, 40, 57, -106, -38, 47, 100, -14, -79, -101, 15, -12, -36, 107, -18, 6, 88, -113, -110, 94,
+        -25, -105, 7, 9, 18, 114, -99, -54, -86, -86, -107, -30, 89, -65, 11, 14, 90, 119, 73, -25,
+        38, -91, -35, 5, -53, 36, -43, -25, -74, 44, -98, -6, -50, -92, -119, -39, 69, 82, 12, -57,
+        31, -83, 40, -73, 30, -13, 109, 21, -54, 36, -90, Byte.MAX_VALUE, 3, -72, 12, -109, -2, 95, -2, -104,
+        73, 115, -34, 93, -79, -9, 114, -83, 27, 21, 118, 39, 44, -109, 60, -72, 115, -19, -20, -63,
+        -17, 62, -97, 19, 30, 62, 36, 58, 53, 53, -81, -96, -96, 0, 43, -111, -103, -124, 40, 50,
+        -2, -100, -97, 58, 49, 102, 96, -65, 30, -65, -97, -13, -27, 15, -5, 47, 95, -69, -33, -32,
+        102, 101, -35, 13, -85, -43, -87, 104, -42, 55, 53, 54, -36, -8, -7, -40, -79, 109, -85, 86,
+        125, -6, 27, -63, 35, -7, -44, -8, -13, -9, -57, 14, 85, 84, -35, -42, -23, -102, -12, 45,
+        6, 15, 80, -44, 19, 96, 121, -115, 4, 96, 5, 96, 5, 96, 5, 96, 5, 96, 5, 96,
+        5, 36, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 32, 1, 88, 1, 88, 1,
+        88, 1, 88, 1, 88, 1, 88, 1, 9, -64, 10, -64, 10, -64, 10, -64, 10, -64, -14, 81,
+        -7, Byte.MAX_VALUE, -22, 49, 3, -6, -103, -10, -14, 116, 0, 0, 0, 0, 73, 69, 78, 68, -82, 66,
+        96, -126 };
+}

+ 82 - 0
Day 18/src/hackvent2018/evil/EvilAction.java

@@ -0,0 +1,82 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by Fernflower decompiler)
+//
+
+package hackvent2018.evil;
+
+import java.awt.Component;
+import java.util.Arrays;
+import java.util.Iterator;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+
+public class EvilAction {
+    private byte[] b = new byte[]{-64, 15, 15, 10, 82, 79, 76, 67, 76};
+
+    public EvilAction() {
+    }
+
+    public String[] getMenu() {
+        /*
+        Iterator var2 = System.getenv().keySet().iterator();
+
+        while(var2.hasNext()) {
+            String s = (String)var2.next();
+            if (Arrays.equals(this.b, this.xor(s.getBytes(), NotEvil.b))) {
+                String[] t = new String[]{"No", "Go away", "Yes"};
+                return t;
+            }
+        }
+
+        String[] u = new String[]{"No", "Go away"};
+        return u;*/
+
+        String[] t = new String[]{"No", "Go away", "Yes"};
+        return t;
+    }
+
+    public ImageIcon respond1(int answer) {
+        switch(answer) {
+            case 0:
+                return EvilImages.getIcon(EvilType.NOTEVIL);
+            case 1:
+                return EvilImages.getIcon(EvilType.SAD);
+            case 2:
+                // Iterator var3 = System.getenv().keySet().iterator();
+
+                return EvilImages.getIcon(EvilType.EVIL);
+
+                /*while(var3.hasNext()) {
+                    String s = (String)var3.next();
+                    if (Arrays.equals(this.b, this.xor(s.getBytes(), NotEvil.b))) {
+                        return EvilImages.getIcon(EvilType.EVIL);
+                    }
+                }
+
+                return EvilImages.getIcon(EvilType.NOTEVIL);
+                */
+            default:
+                return EvilImages.getIcon(EvilType.SAD);
+        }
+    }
+
+    public void respond2(int answer) {
+        if (answer == 2) {
+            String[] buttons2 = new String[]{"Cool"};
+            JOptionPane.showOptionDialog((Component)null, EvilEvent.eventResult(), "Evilist", -1, 1, (Icon)null, buttons2, buttons2[0]);
+        }
+
+    }
+
+    private byte[] xor(byte[] c, byte[] b) {
+        byte[] x = new byte[c.length];
+
+        for(int i = 0; i < c.length; ++i) {
+            x[i] = (byte)(c[i] ^ b[i]);
+        }
+
+        return x;
+    }
+}

+ 31 - 0
Day 18/src/hackvent2018/evil/EvilEvent.java

@@ -0,0 +1,31 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by Fernflower decompiler)
+//
+
+package hackvent2018.evil;
+
+public class EvilEvent {
+    private static byte[] b = new byte[]{-83, 8, 119, 19, 73, 17, 2, 83, 126, 17, 33, 119, 115, 6, 38, 16, 26, 23, 10, 127, 20, 85, 81, 47, 13, 88, 43, 0, 70, 27, -122, 8, 83, 17, 125, 46, 78, 64, 89, 78, 41};
+
+    public EvilEvent() {
+    }
+
+    static String eventResult() {
+        byte[] x = xor(b, NotEvil.b, 0);
+        x = xor(x, Evil.b, 100);
+        x = xor(x, Sad.b, 200);
+        x = xor(x, Question.b, 300);
+        return new String(x);
+    }
+
+    private static byte[] xor(byte[] c, byte[] b, int offset) {
+        byte[] x = new byte[c.length];
+
+        for(int i = 0; i < c.length; ++i) {
+            x[i] = (byte)(c[i] ^ b[i + offset]);
+        }
+
+        return x;
+    }
+}

+ 33 - 0
Day 18/src/hackvent2018/evil/EvilHandler.java

@@ -0,0 +1,33 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by Fernflower decompiler)
+//
+
+package hackvent2018.evil;
+
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+public class EvilHandler implements MouseListener {
+    private EvilWindow ew;
+
+    public EvilHandler(EvilWindow ew) {
+        this.ew = ew;
+    }
+
+    public void mouseClicked(MouseEvent e) {
+        this.ew.ask();
+    }
+
+    public void mousePressed(MouseEvent e) {
+    }
+
+    public void mouseReleased(MouseEvent e) {
+    }
+
+    public void mouseEntered(MouseEvent e) {
+    }
+
+    public void mouseExited(MouseEvent e) {
+    }
+}

+ 28 - 0
Day 18/src/hackvent2018/evil/EvilImages.java

@@ -0,0 +1,28 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by Fernflower decompiler)
+//
+
+package hackvent2018.evil;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.ImageIcon;
+
+public class EvilImages {
+    private static List<ImageIcon> iiList = new ArrayList();
+
+    public EvilImages() {
+    }
+
+    public static void preloadImages() {
+        iiList.add(new ImageIcon(NotEvil.b));
+        iiList.add(new ImageIcon(Sad.b));
+        iiList.add(new ImageIcon(Question.b));
+        iiList.add(new ImageIcon(Evil.b));
+    }
+
+    public static ImageIcon getIcon(EvilType evilType) {
+        return (ImageIcon)iiList.get(evilType.ordinal());
+    }
+}

+ 48 - 0
Day 18/src/hackvent2018/evil/EvilLoader.java

@@ -0,0 +1,48 @@
+package hackvent2018.evil;
+
+import java.lang.reflect.Field;
+
+public class EvilLoader
+    extends ClassLoader
+{
+    public EvilLoader(ClassLoader parent)
+    {
+        super(parent);
+    }
+
+    private Class getClass(String name)
+        throws ClassNotFoundException
+    {
+        byte[] b = loadEvilClass(name);
+        return defineClass(name, b, 0, b.length);
+    }
+
+    public Class<?> loadClass(String name)
+        throws ClassNotFoundException
+    {
+        try
+        {
+            return getClass(name);
+        }
+        catch (ClassFormatError cfe)
+        {
+            return super.loadClass(name);
+        }
+        catch (ClassNotFoundException cnfe) {}
+        return super.loadClass(name);
+    }
+
+    private byte[] loadEvilClass(String name)
+        throws ClassNotFoundException
+    {
+        Class clazz = EvilLoader.class.getClassLoader().loadClass(name);
+        try
+        {
+            return (byte[])clazz.getField("b").get(clazz);
+        }
+        catch (IllegalArgumentException|IllegalAccessException|NoSuchFieldException|SecurityException|ClassFormatError e1)
+        {
+            throw new ClassNotFoundException(e1.toString());
+        }
+    }
+}

+ 16 - 0
Day 18/src/hackvent2018/evil/EvilType.java

@@ -0,0 +1,16 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by Fernflower decompiler)
+//
+
+package hackvent2018.evil;
+
+public enum EvilType {
+    NOTEVIL,
+    SAD,
+    QUESTION,
+    EVIL;
+
+    private EvilType() {
+    }
+}

+ 53 - 0
Day 18/src/hackvent2018/evil/EvilWindow.java

@@ -0,0 +1,53 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by Fernflower decompiler)
+//
+
+package hackvent2018.evil;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+public class EvilWindow {
+    private JFrame frame = new JFrame("Evilist (Click on Image)");
+    private JLabel label = new JLabel();
+    private JPanel jp = new JPanel();
+
+    public EvilWindow() {
+        EvilImages.preloadImages();
+        this.frame.setDefaultCloseOperation(3);
+        this.frame.setBackground(Color.BLACK);
+        this.jp.setBackground(Color.BLACK);
+        this.label.setBackground(Color.BLACK);
+        this.setIcon(EvilImages.getIcon(EvilType.QUESTION));
+        this.jp.add(this.label);
+        this.frame.getContentPane().add(this.jp);
+        this.frame.pack();
+        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+        this.frame.setLocation(dim.width / 2 - this.frame.getSize().width / 2, dim.height / 2 - this.frame.getSize().height / 2 - 150);
+        this.frame.setVisible(true);
+        this.label.addMouseListener(new EvilHandler(this));
+    }
+
+    public void ask() {
+        EvilAction ea = new EvilAction();
+        this.setIcon(EvilImages.getIcon(EvilType.QUESTION));
+        String[] buttons = ea.getMenu();
+        int answer = JOptionPane.showOptionDialog((Component)null, "Are you evil?", "Evilist", -1, 3, (Icon)null, buttons, buttons[0]);
+        ImageIcon ii = ea.respond1(answer);
+        this.setIcon(ii);
+        ea.respond2(answer);
+    }
+
+    private void setIcon(ImageIcon ii) {
+        this.label.setIcon(ii);
+    }
+}

+ 16 - 0
Day 18/src/hackvent2018/evil/Evilist.java

@@ -0,0 +1,16 @@
+package hackvent2018.evil;
+
+public class Evilist
+{
+    public static void main(String[] args)
+        throws Exception
+    {
+        /*EvilLoader evilLoader = new EvilLoader(Evilist.class.getClassLoader());
+
+        EvilLoader loader = new EvilLoader(Evilist.class.getClassLoader());
+        Class<?> clazz = loader.loadClass("hackvent2018.evil.EvilWindow");
+        clazz.newInstance();*/
+
+        new EvilWindow();
+    }
+}

+ 27 - 0
Day 18/src/hackvent2018/evil/Main.java

@@ -0,0 +1,27 @@
+package hackvent2018.evil;
+
+import java.io.File;
+import java.io.FileOutputStream;
+
+public class Main extends ClassLoader {
+
+    private EvilLoader evilLoader;
+
+    public Main() {
+        this.evilLoader = new EvilLoader(this);
+    }
+
+    public static void main(String[] args) throws Exception {
+        Main outputter = new Main();
+
+   //     outputter.outputClassToFile("hackvent2018.evil.EvilAction", "/tmp", EvilAction.b);
+
+    }
+
+    public void outputClassToFile(String name, String path, byte[] data) throws Exception {
+        Class regeneratedClass = evilLoader.loadClass(name);
+        FileOutputStream output = new FileOutputStream(new File(path + "/" + regeneratedClass.getCanonicalName() + ".class"));
+        output.write(data);
+        output.close();
+    }
+}

+ 327 - 0
Day 18/src/hackvent2018/evil/NotEvil.java

@@ -0,0 +1,327 @@
+ package hackvent2018.evil;
+ 
+ public class NotEvil {
+   public static byte[] b = {
+     -119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1, 44, 
+     0, 0, 1, 44, 8, 3, 0, 0, 0, 78, -93, 126, 71, 0, 0, 3, 0, 80, 76, 84, 
+     69, 0, 1, 0, 3, 0, 6, 7, 0, 0, 0, 3, 6, 3, 5, 1, 11, 3, 2, 7, 
+     9, 5, 18, 8, 0, 12, 11, 0, 10, 11, 21, 20, 11, 2, 16, 15, 4, 12, 16, 28, 
+     25, 15, 0, 15, 17, 13, 21, 18, 0, 16, 17, 25, 20, 19, 11, 17, 21, 23, 30, 20, 
+     0, 25, 22, 8, 27, 23, 1, 24, 22, 25, 24, 23, 16, 22, 24, 22, 35, 24, 0, 21, 
+     25, 36, 24, 25, 32, 27, 27, 25, 33, 28, 3, 31, 29, 17, 33, 29, 12, 40, 29, 
+     0, 28, 30, 27, 39, 32, 3, 31, 33, 30, 38, 34, 19, 47, 34, 1, 40, 35, 15, 31, 35, 
+     47, 35, 36, 34, 38, 36, 27, 44, 37, 2, 43, 37, 9, 38, 37, 41, 37, 39, 37, 38, 
+     39, 47, 52, 40, 2, 41, 42, 44, 50, 43, 13, 46, 43, 27, 44, 43, 34, 36, 43, 60, 
+     39, 43, 55, 58, 44, 0, 50, 44, 24, 44, 46, 44, 59, 49, 5, 46, 48, 55, 63, 48, 
+     6, 44, 48, 62, 56, 49, 18, 55, 49, 28, 49, 49, 52, 60, 50, 14, 54, 50, 34, 66, 
+     50, 1, 51, 53, 50, 55, 53, 42, 70, 53, 0, 53, 54, 62, 66, 56, 13, 64, 56, 28, 
+     60, 56, 40, 74, 56, 1, 55, 57, 55, 63, 57, 36, 72, 60, 11, 78, 60, 0, 78, 61, 
+     6, 60, 62, 59, 68, 63, 46, 82, 64, 1, 62, 64, 61, 73, 64, 29, 62, 63, 72, 71, 
+     64, 37, 76, 65, 22, 61, 65, 67, 71, 65, 43, 67, 65, 69, 65, 67, 64, 68, 67, 60, 
+     79, 68, 18, 70, 67, 55, 87, 68, 0, 86, 68, 5, 69, 71, 68, 69, 70, 78, 74, 71, 
+     59, 76, 71, 54, 73, 71, 75, 69, 73, 75, 74, 73, 66, 94, 74, 4, 92, 74, 12, 72, 
+     74, 71, 89, 75, 20, 97, 77, 0, 103, 76, 0, 77, 79, 76, 76, 80, 82, 102, 81, 1, 
+     78, 80, 89, 102, 81, 12, 108, 81, 0, 107, 84, 6, 84, 83, 87, 86, 85, 78, 114, 85, 
+     0, 85, 87, 84, 85, 86, 96, 111, 88, 0, 90, 87, 75, 116, 93, 6, 122, 92, 0, 119, 
+     94, 0, 94, 93, 85, 92, 93, 102, 96, 93, 97, 91, 95, 108, 94, 96, 93, 99, 96, 83, 
+     124, 99, 2, -127, 98, 0, Byte.MAX_VALUE, 102, 7, 101, 101, 110, 101, 103, 100, 103, 102, 106, 104, 103, 
+     95, -120, 104, 0, -123, 106, 0, 108, 107, 111, 107, 108, 106, -115, 108, 6, -119, 110, 6, 107, 
+     108, 117, -112, 110, 0, 111, 110, 102, 110, 112, 109, -107, 114, 2, -112, 116, 0, 115, 116, 125, 
+     117, 116, 120, 116, 118, 115, -103, 118, 9, -106, 121, 10, -99, 121, 0, 119, 123, 126, 122, 122, 
+     -125, 126, 124, Byte.MIN_VALUE, -93, Byte.MAX_VALUE, 7, 125, Byte.MAX_VALUE, 124, Byte.MIN_VALUE, -127, -118, -87, -125, 0, -123, -126, -122, Byte.MAX_VALUE, 
+     -124, -122, -126, -124, -127, -82, -120, 7, -123, -118, -115, -77, -117, 0, -119, -118, -121, -119, -118, -108, 
+     -114, -116, -112, -73, -113, 2, -112, -112, -114, -116, -111, -108, -68, -109, 13, -66, -108, 0, -109, -108, 
+     -99, -111, -106, -104, -104, -106, -102, -61, -103, 3, -104, -102, -105, -57, -100, 11, -98, -100, -96, -53, 
+     -97, 0, -103, -98, -95, -98, -96, -99, -49, -94, 2, -91, -94, -89, -45, -90, 13, -95, -90, -87, 
+     -92, -90, -93, -42, -88, 0, -38, -84, 1, -87, -85, -88, -84, -86, -82, -89, -84, -82, -33, -80, 
+     13, -31, -79, 0, -29, -77, 0, -77, -80, -76, -83, -78, -76, -80, -78, -81, -26, -74, 1, -79, 
+     -74, -71, -22, -71, 11, -18, -68, 0, -68, -70, -66, -73, -68, -65, -70, -68, -71, -15, -65, 
+     0, -66, -64, -67, -10, -61, 11, -61, -63, -59, -7, -59, 17, -63, -60, -64, -65, -59, -57, -4, -56, 
+     0, -2, -54, 0, -58, -56, -60, -1, -53, 2, -1, -52, 6, -55, -53, -56, -57, -52, -49, -2, 
+     -48, 11, -50, -52, -48, -1, -46, 17, -3, -44, 17, -1, -42, 0, -3, -38, 0, -47, -45, -48, 
+     -43, -45, -41, -48, -43, -40, -42, -41, -44, -39, -37, -40, -35, -37, -33, -39, -34, -31, -34, -33, 
+     -36, -30, -28, -31, -31, -26, -24, -25, -24, -27, -26, -20, -18, -22, -20, -23, -21, -16, -13, -18, 
+     -16, -19, -19, -13, -11, -15, -13, -16, -13, -11, -14, -10, -8, -11, -12, -7, -4, -10, -5, -2, 
+     -7, -5, -8, -5, -3, -6, -2, -1, -4, -80, 116, -84, 91, 0, 0, 0, 1, 98, 75, 71, 
+     68, 0, -120, 5, 29, 72, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 29, -121, 
+     0, 0, 29, -121, 1, -113, -27, -15, 101, 0, 0, 0, 7, 116, 73, 77, 69, 7, -30, 9, 19, 18, 
+     22, 57, -124, -37, -64, -24, 0, 0, 21, 35, 73, 68, 65, 84, 120, -38, -19, -35, 123, 92, 
+     20, -43, 30, 0, -16, 84, 34, 13, 5, 76, 73, -51, -9, -85, 76, 19, -45, -118, 107, -103, 
+     -103, -92, -103, 107, 33, 62, -56, -110, 106, 13, -115, -56, 124, 96, -87, 92, 73, -51, -14, -102, 
+     104, -112, 17, -127, -120, 33, -94, -92, -124, -118, 74, -70, 34, -74, 82, -69, 8, -19, -94, 44, 
+     -113, 21, -111, -7, 120, 62, 122, -4, -20, 106, 75, -127, 60, 90, 119, -71, 119, 57, 119, -111, 
+     96, 23, 31, 59, -17, -39, 89, 103, 126, Byte.MAX_VALUE, -44, -76, -42, 52, -13, -99, 115, -50, -100, 57, 
+     -49, 7, -112, 24, -124, -29, 1, -111, 64, -60, 18, -79, 68, 44, 17, 75, -60, 18, -79, 68, 
+     2, 17, 75, -60, 18, -79, 68, 44, 17, 75, -60, 18, 9, 68, 44, 17, 75, -60, 18, -79, 
+     68, 44, 17, 75, 36, 16, -79, 68, 44, 17, 75, -60, 18, -79, 68, 44, 30, 92, -125, -59, 
+     108, -84, -83, -83, 46, -54, -33, -97, -12, -3, 123, -17, 45, 28, -25, -43, 26, -61, 22, -66, 
+     -9, -31, -9, 73, 39, 126, -67, 90, 91, -5, -9, 77, -117, -120, -123, 26, 74, 78, 39, 126, 
+     -71, 120, -47, 60, -119, 100, 73, 68, 92, 114, -102, 76, 38, 43, -48, -76, -122, 42, 91, -106, 
+     -107, -102, -4, 85, -124, 68, 50, -17, -19, 15, 87, 36, 30, 42, 50, 52, 9, 23, -85, -22, 
+     88, 80, -33, 46, -45, 62, 73, -51, 81, -87, -118, -75, 21, 24, -80, 6, 118, 123, 52, -1, 
+     88, 81, -82, -43, -88, 20, -87, -111, 111, 120, 122, 7, -3, 88, 41, 56, -84, -58, -6, -22, 
+     19, -85, 61, 30, -108, 38, -28, -22, 33, -68, 83, -24, -82, 1, 32, -44, -87, 82, -105, 116, 
+     -21, -4, -50, -31, 63, -22, -51, 66, -63, 50, -107, -92, -84, 122, 51, 96, 93, -102, 2, 18, 
+     -122, 106, 7, -106, 25, 61, 123, -18, 7, 41, -123, 38, 1, 96, -99, -3, -96, -21, 27, -79, 
+     10, 77, 57, 32, -23, 100, 79, -122, 105, 20, -37, -33, -24, 18, 82, 120, 95, 99, -35, -84, 
+     77, -14, 24, 20, -85, -127, -44, -99, -20, -46, 24, -106, 60, -58, 35, -2, -22, -51, -90, -5, 
+     19, -85, 48, 113, -111, 36, -50, 90, 72, 49, 64, 117, 43, -96, 94, 25, -25, 63, 107, -125, 
+     -70, -15, -66, -61, 106, 58, -12, -40, -53, 105, -25, -54, -103, -126, 106, 77, 95, -27, -25, -46, 
+     -33, -24, -70, -85, -23, 126, -62, 50, 27, -74, 117, 12, 80, 64, -122, -91, 90, -13, -93, 114, 
+     118, -57, 109, 6, -13, 125, -126, 101, 58, -2, -127, Byte.MAX_VALUE, -100, 74, -49, 10, -43, 45, 46, -67, 
+     42, -50, 63, -12, -48, -51, -5, 1, 107, 71, -33, 5, -14, 114, -42, -92, 90, -77, -93, 60, 
+     -36, 123, -121, -85, 99, -3, 125, -62, 67, -86, -124, 24, 7, 1, 85, 82, -73, 61, 117, 46, 
+     -116, 85, -69, 119, -6, 82, -123, 14, 96, -100, 4, -48, 41, -105, 14, -37, 91, -21, -86, 88, 
+     59, 122, 111, 86, 97, -100, -122, 106, 115, -17, 29, -82, -120, 101, -50, 115, -105, 22, 67, -116, 
+     -29, Byte.MIN_VALUE, -59, 82, -49, 60, -77, -85, 97, 21, -123, 78, -51, -31, 42, 3, -74, -49, -116, -71, 
+     -110, -73, -44, 46, -123, -43, 16, 52, 86, 94, -31, 4, -86, 91, 92, 21, -14, 9, 65, 13, 
+     46, -125, -43, 116, -92, 99, -84, -109, -92, -2, -15, -118, -19, 120, -60, -30, 26, 88, 37, 111, 
+     73, -107, 58, -52, -87, -95, 83, 73, 3, 75, 93, 1, 107, -61, -64, 44, -116, 7, -111, 53, 
+     112, 67, 35, -33, -79, -86, -6, -123, 97, Byte.MIN_VALUE, 15, 88, 0, 11, -21, 87, -59, 107, -84, -58, 
+     -108, -111, 25, 16, -29, 73, -64, -116, -111, 41, -115, -4, -59, -86, -13, 93, -87, 1, 24, 111, 
+     2, 104, 86, -6, -42, -15, 21, 43, -65, -13, 78, -120, -15, 42, -32, -50, -50, -89, 120, -119, 
+     -43, -72, -43, 79, -82, -61, 120, 22, 58, -7, -44, -83, 70, -2, 97, -43, 60, -75, 82, 11, 
+     48, -34, 5, -48, -82, 125, -86, -122, 111, 88, 23, -35, -109, 117, 24, 47, 67, -105, -20, 126, 
+     -111, 87, 88, 77, 71, 70, -54, 32, -58, -45, Byte.MIN_VALUE, -78, 33, 71, -102, 120, -124, -75, -62, 95, 
+     3, 48, -2, -122, -58, Byte.MAX_VALUE, 5, 111, -80, 76, -95, 1, 58, -116, -41, -95, 11, 8, 53, -15, 
+     3, -85, 42, 56, 2, 96, 60, 15, 16, 17, 92, -59, 7, -84, -53, 125, -45, 49, 23, -120, 
+     -12, -66, 87, -100, -113, 85, -27, -98, 1, 92, 1, 11, 28, -19, 89, -27, 108, -84, -46, -98, 
+     89, 16, 115, -119, Byte.MIN_VALUE, 89, 61, 75, -99, -117, 85, -38, 43, 23, 96, 46, 18, 32, -73, 87, 
+     -119, 51, -79, -118, 122, 42, 48, 23, 10, 5, -51, -100, -8, 0, -51, 60, 8, 92, 9, 11, 
+     -48, -52, -119, 116, -80, 74, 92, 40, 15, 50, -110, 19, 105, 96, 25, 92, 43, 15, -74, -26, 
+     68, -125, 51, -80, -82, -69, 103, 1, -41, -61, 2, 89, 30, -107, -36, 99, 85, -11, 77, -65, 
+     103, -99, 1, -112, 9, -50, 27, -101, -67, 13, 92, 99, -103, -34, -70, 119, 93, 84, -107, -111, 
+     73, 60, -28, 92, 107, -127, -116, -73, 76, 28, 99, -123, 126, 122, -17, -53, -39, -18, 70, 34, 
+     36, -92, -22, -76, -112, 112, 56, 120, 6, -97, -122, 114, -117, -75, 66, -30, -32, -114, 126, 32, 
+     -125, -75, Byte.MIN_VALUE, 12, -106, 106, 109, 36, -63, 88, -21, -24, -27, 35, 89, -63, 37, -42, 79, -2, 
+     58, -89, 96, -55, 59, 19, 62, 111, -90, -93, 22, 27, -1, 35, -36, 97, -107, -114, -44, 96, 
+     60, -57, 114, -49, 116, -40, 26, 56, -74, -110, 43, -84, 27, -18, 50, -32, -38, 88, 64, -26, 
+     89, -61, 13, -106, -23, -87, 31, 28, -33, 32, -1, -79, 48, -8, -125, -81, -123, 19, -84, -83, 
+     -111, 56, -115, -56, 46, Byte.MIN_VALUE, -123, -23, -61, -73, 114, -127, -11, -117, 68, -117, -71, 62, 22, -90, 
+     -99, -112, -49, 62, 86, -115, -121, 28, -17, -106, -110, 93, 1, -53, 122, -82, 6, -74, -79, 26, 
+     125, -15, 59, 83, -75, 42, 18, -95, -63, -72, -81, 58, -76, -44, 31, 18, 72, 23, 91, 100, 
+     -79, 18, 35, 9, -92, 4, -42, 62, 13, 21, -61, -5, 19, -116, 33, -8, 35, -22, 96, 120, 
+     10, -69, 88, -122, -31, -92, 82, 2, -13, 31, 118, 76, 62, 4, -51, 112, 3, -101, 88, -106, 
+     -63, 25, 46, -40, 44, 115, -17, 79, -22, -63, 108, 98, 125, -79, 4, 98, -9, 81, 64, -23, 
+     86, -10, -80, 74, 6, 96, -9, 89, 12, 40, 97, 11, -53, 18, 72, -93, 109, -44, 9, -19, 
+     124, 68, -38, 77, -25, 88, 88, -62, 58, 38, -91, 118, 69, 80, -89, -65, 86, -82, 44, 40, 
+     80, 98, 122, -67, 14, 50, -105, -111, 1, -124, 80, 103, 13, -14, 75, 30, -40, 66, 122, -116, 
+     29, 44, 99, 71, 74, 115, -68, 42, 50, 99, -98, 31, -46, -95, -45, -83, -24, -32, 53, 97, 
+     115, -70, -106, 33, 43, 109, 86, -22, -90, -80, 9, 19, 38, 60, 31, -74, 41, 38, -109, -22, 
+     75, 90, -43, -47, -56, 10, 86, 80, 52, -39, -127, 69, 80, -109, -71, 110, -34, 11, 33, -119, 
+     -22, 11, 55, 90, 82, -5, 13, 67, 97, 74, -56, 11, 115, 35, -45, -49, -47, -103, 48, 13, 
+     -32, -17, -103, 95, 125, 52, -27, -59, -112, 13, 41, -57, 11, -83, 113, 50, 37, 113, -59, -117, 
+     -29, -25, 69, -92, 41, 0, -23, 100, -85, -117, 9, 98, 3, -85, 112, 12, 89, 42, 109, -28, 
+     -16, 101, -89, 13, 119, -52, 93, 54, 25, -44, 27, 71, 74, 11, -88, 102, 71, -96, -49, -106, 
+     12, -7, -4, -28, -107, -22, 118, 45, -23, -106, 90, 67, -55, 55, 47, -115, -39, 73, -70, 96, 
+     4, 35, -117, -104, -57, 50, -49, -105, -109, -68, -116, -72, 14, 14, 6, 10, 39, 117, -40, 76, 
+     17, 43, -73, -1, 35, -65, -36, -21, -84, 101, -95, 29, 73, 87, 4, -27, -13, -51, -116, 99, 
+     21, 74, 42, 72, 37, 43, -27, -52, 16, -121, -19, 107, 55, -42, 76, -52, 38, -97, -72, -96, 
+     106, -19, 83, 14, -117, -28, -54, -96, -25, 115, -56, 113, -107, -5, 23, 50, -114, -43, -99, 84, 
+     -97, 21, -52, -24, Byte.MAX_VALUE, 28, -17, -91, -84, 126, -14, 7, -46, -123, -96, -84, -1, 46, -68, 37, 
+     9, 10, -97, -116, -42, -109, -54, -121, -14, -18, 76, 99, -19, -102, 77, -22, -58, 20, 62, -10, 
+     -29, 85, 44, 101, 7, 54, 6, -50, -103, -109, -108, -41, 62, 91, 54, 120, -110, -83, -73, 41, 
+     -68, 46, -33, 118, 93, -105, -54, -50, -33, -2, -109, -23, -47, 24, 82, 73, 86, 55, 123, 23, 
+     -77, 88, -11, -98, -28, -122, 35, -49, 62, 110, -85, 113, -4, -14, -66, -83, -31, 100, -4, 1, 
+     -5, -68, 89, 57, -100, 100, 53, -30, -7, 51, -10, 125, -30, 39, -106, 121, -74, -100, -75, -33, 
+     -58, 60, -5, 57, 58, -90, 39, 73, 77, -30, 3, 26, -49, 122, 70, -79, -10, 110, 34, -11, 
+     -80, 10, 94, 104, -53, 44, 53, -29, -37, -73, 51, -115, -8, -51, -2, 91, 51, -109, 84, 38, 
+     -116, -75, -17, -17, 75, -22, 109, Byte.MAX_VALUE, -38, -47, 39, -20, 123, -97, 102, -110, 43, 95, 55, -19, 
+     101, 18, -53, 56, -99, 84, 125, 20, 38, 68, -75, -3, -89, -29, 111, 111, -107, -21, -9, -89, 
+     -19, -68, 103, -42, -109, 57, -83, -34, 126, 76, -57, -65, 111, 63, -81, -35, 43, -14, -17, 87, 
+     -55, -91, 88, -43, 116, 35, -125, 88, -121, -105, -112, 43, -121, -41, 30, 108, 27, 107, -45, -5, 
+     -114, 54, -52, -13, -74, -13, 94, -8, -120, -52, 105, 53, 110, 118, 99, 120, -18, 56, -19, 43, 
+     118, 47, -108, 53, 71, -55, 21, -122, 75, 14, 51, -120, -27, -111, 75, 14, 107, 123, 98, 91, 
+     51, -12, 29, 41, -53, -45, -82, -24, 87, -81, -91, -118, 117, -2, 14, -84, -95, -115, -44, -79, 
+     114, 61, -104, -61, -38, 61, -101, -28, 59, 94, -11, 98, 91, -70, -82, 115, -65, 119, 118, 105, 
+     -38, -112, 73, 57, 27, -114, -66, 29, -53, 46, 113, 24, 73, 102, 67, -21, 11, 113, 55, 83, 
+     88, -26, -66, -92, -121, 67, 74, -20, 42, 122, -15, -29, -37, -68, -36, -121, 46, -77, -81, 82, 
+     84, -11, 81, 81, 46, -32, 27, -34, 111, -9, 20, 60, -73, -103, 41, 23, -16, -51, -61, 39, 
+     -5, -102, 25, -62, 58, 25, 70, -70, -86, 45, -17, -11, -121, -35, 125, 93, -6, -19, -64, 50, 
+     107, -20, 57, 113, -79, 93, -91, -66, -50, 59, -109, -28, 67, 24, 107, -73, 22, -120, -27, -4, 
+     -74, 126, 109, 53, -110, -3, -41, -37, 85, 29, -114, -110, -2, 50, 8, 59, -55, 12, -106, 57, 
+     -108, -20, 87, 97, -13, 124, -122, 14, 103, 113, -57, 14, 122, -89, -110, 125, 8, -73, 87, 74, 
+     107, -50, -17, -39, -77, -25, 112, 89, -5, 111, 5, 35, -55, 74, 105, -53, -45, 13, 53, 51, 
+     -126, -11, -121, Byte.MAX_VALUE, 57, -123, -26, 109, -59, -56, 93, 14, -65, 13, -21, 15, -7, -112, -97, -94, 
+     104, -3, -36, -39, -117, 55, 108, -81, -24, 25, 114, -97, 59, -83, 95, -120, Byte.MAX_VALUE, 48, -126, 21, 
+     -1, 45, -107, -74, 39, 80, -4, -43, -48, -88, 123, -50, 125, 111, -36, -31, 27, 89, 64, -31, 
+     -76, 80, 21, -2, -76, -61, 110, -9, -21, 65, 19, 40, -75, 125, -125, 111, -29, 25, -63, -22, 
+     88, 64, -79, 49, -91, 98, -91, -37, -5, -91, 119, -5, -100, -66, 20, -38, 105, 1, -43, -90, 
+     77, -112, -19, -96, -119, -26, 82, -88, 91, 2, -59, 86, -59, -126, -114, 76, 96, -19, 11, -48, 
+     83, -68, 47, 76, 87, 17, -19, 55, 106, -11, 62, -11, 21, -61, 95, Byte.MAX_VALUE, -101, 77, 38, 115, 
+     67, -11, 95, 87, -44, -121, 62, 31, 59, 38, -70, -104, -14, 57, 49, -96, 63, 58, 117, -56, 
+     -58, -45, 87, 107, -37, 21, 50, -106, 122, 67, -47, -114, -105, -122, -17, 4, 84, -37, 20, -11, 
+     1, -5, -24, 99, 89, -70, -46, -103, 70, 1, -127, 42, 43, 53, -30, -29, -71, -81, -49, 120, 
+     -10, -71, -25, -98, -99, -12, -6, -36, -113, -105, 38, 103, 21, 96, -12, 58, 45, 0, -8, 61, 
+     99, 93, 75, -77, -14, 73, -75, 90, 93, 120, -90, -71, 89, -7, -107, 121, 75, -45, 114, 1, 
+     -11, 19, -125, -36, -57, -24, 99, 21, 77, -29, 107, -65, -86, 38, 107, -5, -26, 91, 29, 22, 
+     51, 105, 116, 88, -40, 61, -41, 105, 69, 116, -79, -102, -94, 82, 121, -37, 97, -33, -38, 21, 
+     -90, -125, -116, -84, -42, -100, -98, 72, 23, -21, -26, 44, 13, 38, -112, -48, -52, 50, -47, -60, 
+     -94, 84, -55, 114, -51, -64, -81, 106, -31, 97, 37, -59, 1, -95, 96, -127, -72, 36, -102, 88, 
+     -35, -27, -104, 96, 2, -73, -25, 2, 7, -85, -84, -113, 78, 56, 88, -70, 62, 101, -76, -80, 
+     86, -59, 66, -31, 96, -63, -40, 85, 116, -80, -52, 93, 53, 64, 56, 88, 64, -45, -43, 76, 
+     3, -85, 116, -102, Byte.MIN_VALUE, 18, 86, 115, -67, -76, -108, 6, -42, -34, 24, 32, 36, 44, 16, -77, 
+     -105, 58, -106, 101, -107, 28, 19, 84, -56, 87, 89, 40, 99, -43, -65, -87, 17, 22, -106, -26, 
+     -51, 122, -54, 88, Byte.MAX_VALUE, 77, 45, 23, 22, 86, -71, -60, 64, 25, -21, -105, 117, -104, -64, 98, 
+     -35, 17, -54, 88, -85, -45, -127, -80, -84, 64, -6, 106, -54, 88, 94, 5, 66, 75, 89, -118, 
+     -18, 84, -79, 106, 30, -124, 66, -61, -126, 110, 53, 20, -79, -114, 5, -24, -124, -122, -91, 11, 
+     56, 70, 17, 43, 36, 89, 120, 41, 43, 57, -124, 34, 86, 95, 57, 16, 26, 22, -112, -9, 
+     -91, -122, 101, -20, 34, -72, 92, 104, -51, -121, 93, -22, 40, 97, -107, 76, -125, -62, -61, 114, 
+     -8, 45, -19, 0, -21, -52, 39, 66, -60, 114, 52, -100, -58, 1, 86, 74, 50, 16, 30, 22, 
+     72, 78, -95, -126, -43, -76, 33, 27, 19, 96, 100, 111, 104, -94, Byte.MIN_VALUE, 101, 94, -84, 18, 34, 
+     -106, 106, -79, -103, 2, -42, -51, -123, -62, -60, 90, 120, -109, 2, 86, -19, -53, -59, 66, -60, 
+     -46, -50, -85, -91, -126, 53, 83, 43, 72, -84, -103, 84, -80, -86, 37, 21, 66, -60, -86, -112, 
+     -4, 69, 1, -85, 100, 41, 38, -56, -120, 40, -92, Byte.MIN_VALUE, -107, 31, 1, -124, 104, 5, 34, -50, 
+     80, -64, -38, 31, 39, 76, -84, -28, 3, 20, -80, -110, -110, 5, -118, -107, 68, 1, 43, 94, 
+     -96, 88, 105, 95, 83, -64, 90, 40, 19, 102, 1, 47, 91, 72, 1, -21, 61, -95, 98, -67, 
+     39, 98, -79, -101, -78, -124, -102, 13, 11, -122, 81, -64, -14, 81, 9, 19, 75, -29, 69, 1, 
+     -53, 75, 35, 98, -119, 88, 34, -106, -120, 37, 98, -119, 88, 34, -106, -120, 69, 24, 107, -100, 
+     64, -21, 89, -54, 41, 98, 13, 94, -4, 54, 20, -79, -100, 28, -39, 84, -80, 62, 79, 19, 
+     102, -29, 95, -22, -9, 98, -77, 50, 97, 44, 74, -51, -54, 123, 18, -124, -119, -107, 64, -91, 
+     -61, 66, -80, 93, 97, -7, 20, -80, -44, -97, 10, -77, Byte.MIN_VALUE, 95, -86, -90, -46, 125, 31, 32, 
+     -48, -18, -5, 106, 74, 3, 67, -54, -123, -120, 69, 109, 96, 72, -19, 92, 65, 14, 57, 42, 
+     -98, 91, 79, 1, -53, -72, -24, -100, 16, -79, -50, 45, 50, 82, -64, 50, 125, 40, -56, 47, 
+     -23, -33, 67, -87, 12, -109, -76, -84, -111, 11, 17, 43, -121, -46, 0, 92, -108, 40, -60, -17, 
+     29, -80, 51, -111, -46, 56, -8, -45, 43, -123, 56, 105, -32, -109, -45, -108, -80, 74, 5, 57, 
+     29, 101, 98, 9, 37, -84, -38, 46, 122, -31, 97, -23, -69, -44, 82, -100, 66, -89, 20, -34, 
+     20, -70, 28, -118, 83, -24, -60, -55, -103, 100, -80, 126, 10, 19, 28, -106, 46, -32, 39, -118, 
+     88, Byte.MAX_VALUE, 62, 36, -68, 57, -46, 15, -3, 73, 121, -87, 2, -91, -48, -80, -108, 94, -108, -41, 
+     117, -8, 80, 92, 4, -125, 56, -42, -31, 117, 66, -61, 90, 119, -118, 50, -106, 65, 104, -19, 
+     Byte.MAX_VALUE, 116, 22, -18, 105, 16, -36, -110, 80, -81, 81, 95, 18, -86, 49, 68, 96, 37, -68, 114, 
+     5, -11, -59, -58, -48, -34, -19, -30, 50, 118, -124, -79, -118, -58, 10, -86, 90, -86, -101, 72, 
+     103, -127, 68, 75, 87, 33, -107, -16, 64, -45, -75, -111, -50, -94, -82, 31, -60, 9, 105, 81, 
+     -41, -72, 21, -76, 86, -64, 45, -22, 65, 16, 11, -16, 29, -107, -64, 5, -62, 30, 103, -71, 
+     89, -120, 58, -5, 91, 126, -65, 10, 96, 26, -2, -62, -57, 116, 23, -94, 70, -15, -47, -60, 
+     16, 52, 62, 71, 121, -99, -74, -96, 79, 58, -34, -11, -127, -24, 120, -102, 88, Byte.MAX_VALUE, 16, 92, 
+     125, 19, -28, -72, -15, -71, 2, 11, 100, 62, -72, -49, -78, 124, 42, -35, -59, -13, -115, -77, 
+     8, -10, 30, -62, -51, 97, 124, -58, 10, -33, -119, -101, 67, 84, -77, -116, 52, -79, -102, -66, 
+     36, -70, 49, 115, -123, 87, 66, 90, 107, 100, -56, -27, 57, -83, 113, -73, 35, -5, -61, 123, 
+     -3, -100, 35, 87, 22, 51, 16, -38, 91, 123, -126, -108, 63, -113, -101, -18, 65, -58, -105, 77, 
+     52, -79, 80, -31, -53, 4, 91, 0, -117, -69, 126, -35, 22, -97, 79, -17, 57, 121, 122, 75, 
+     76, -10, -102, -34, 26, 3, 38, -73, 29, 122, -39, 14, -57, 13, 108, 59, -100, -34, -45, 118, 
+     104, -3, -35, -25, -95, Byte.MAX_VALUE, -94, 91, -73, Byte.MAX_VALUE, 14, 124, 30, 110, -3, -87, -19, -49, -20, Byte.MAX_VALUE, 
+     124, -56, -89, -101, -19, -25, -121, -5, -73, -4, -83, 71, 31, 107, -12, 88, Byte.MIN_VALUE, 91, 97, -44, 
+     -67, -116, -69, -97, 52, -2, -114, 78, -113, 41, 8, 22, -15, 65, -10, 15, 102, 116, -21, 30, 
+     122, 55, 108, -37, 93, -66, 111, 91, 33, -50, -83, -95, -19, 48, 47, -40, 86, 7, 30, 106, 
+     119, -122, -77, -74, -33, -9, -25, -3, 115, 48, -89, 109, 97, -52, -15, -74, Byte.MAX_VALUE, -47, -10, 35, 
+     90, 108, -73, 59, -18, -11, -47, 45, Byte.MAX_VALUE, -81, -70, 108, -115, 29, -47, -72, 9, 75, -63, -64, 
+     38, 69, 104, -73, -124, -40, 107, -82, -8, 67, -5, -27, -127, 70, -73, -18, -83, -9, 103, 27, 
+     86, 99, -16, 13, 27, -106, -19, -16, 55, 27, -118, -55, 30, 43, 111, -114, 109, -60, 102, -85, 
+     -63, -100, -42, -83, 36, -51, -29, 109, 117, -19, 64, -37, -34, -122, -17, -37, -19, 34, 118, 121, 
+     -124, -35, -55, 14, 36, -29, -106, -71, -110, -35, 12, 96, -95, -50, -60, -118, 120, -19, -84, 122, 
+     -2, 98, 125, -99, -122, 91, -68, 119, 70, 76, 96, 109, 33, 54, 18, -73, 124, 94, 53, Byte.MAX_VALUE, 
+     -79, -90, -32, -83, 50, 7, 98, -74, 48, -126, 117, 85, 66, -88, -86, 85, -79, -64, -64, 95, 
+     -84, -57, -107, -72, -107, -84, 106, 70, -80, -52, 111, 41, 8, -27, -61, 117, 103, 40, 97, -27, 
+     5, -78, -113, 85, -41, 13, 47, 115, -28, -52, 103, 102, -101, 81, 116, -100, 88, 103, 107, -14, 
+     46, 74, 88, -37, -10, -77, -125, 117, 105, -76, -19, -8, 87, Byte.MAX_VALUE, -100, -6, 15, 12, 59, -114, 
+     -104, -63, 50, 121, -85, -120, -108, 90, -39, 83, 40, 97, -59, -37, -80, -22, -58, -37, 99, 5, 
+     -45, -61, -38, 111, 87, 8, 125, -80, -45, -15, -29, 6, 5, -34, 38, -122, -80, -48, 46, 66, 
+     -101, 103, -106, 119, -85, -93, -119, 85, 53, -57, 126, -122, 71, 18, 61, -84, 3, 27, 109, -11, 
+     -73, 46, 56, -37, 7, -23, 37, -69, 16, 83, 88, -88, 35, -111, -19, -36, -95, 116, 31, 77, 
+     -84, 63, -19, -79, -110, -10, 48, -122, -107, 63, 22, 39, 23, -54, 25, -36, -50, 29, -19, -113, 
+     32, -14, -79, 42, -9, 118, -120, 101, 9, -82, 113, 18, 22, -18, -122, -106, 75, -10, 49, -120, 
+     85, -9, 36, -111, -10, 23, -8, 120, -87, 67, -84, Byte.MAX_VALUE, 95, 119, 14, 86, -3, 20, -100, -85, 
+     -41, 76, -87, 103, 16, 11, -19, -35, 68, -32, -123, 8, 119, 110, -32, 37, 86, -87, -44, -15, 
+     87, 52, -36, -76, 23, 49, -119, 85, -5, 104, 49, -111, 23, -30, -28, 90, 62, 98, -67, -109, 
+     -31, -72, -8, 40, 126, -76, -106, 81, 44, -126, 47, -60, -11, -57, 120, -120, 117, -74, -113, -29, 
+     -117, -42, 7, -20, 66, -52, 98, 33, 15, 34, 107, 120, 43, 60, 76, -4, -61, 122, 52, -51, 
+     113, 17, -110, -19, -127, -104, -58, -54, 15, 32, 82, -60, 71, -82, -30, 29, -42, 113, -1, 107, 
+     -114, 47, 58, 32, -97, 113, 44, -53, 124, 66, -99, 98, -3, -117, 72, 99, -19, 97, 21, -85, 
+     -2, 25, -100, -99, -106, 100, -13, 45, -116, 99, -95, -4, 81, 4, 94, -120, 32, -5, 85, 19, 
+     73, -84, 87, 46, -78, -118, -75, 27, 103, -65, 51, 56, 74, -115, -104, -57, 66, -81, 38, 16, 
+     -7, -98, 94, -14, 19, -81, -80, 42, 123, 56, -82, 99, -23, -94, -125, 16, 27, 88, 117, 15, 
+     18, 25, -83, -91, -22, Byte.MAX_VALUE, -98, 99, -84, 25, 85, 119, -59, 74, 106, -2, -74, -84, 121, 4, 
+     103, -17, 32, -27, -125, 13, -84, 96, -95, 95, -106, 16, -22, -50, -20, -44, -64, 45, 86, 111, 
+     -45, 93, -79, -102, -113, 45, 33, 63, 56, -50, 13, 21, 1, 39, 17, 59, 88, -1, -99, -111, 
+     69, -96, 102, -86, 75, -104, -12, 95, -74, -80, 94, 105, -3, -70, 108, -104, 97, 33, -126, -11, 
+     35, -50, 43, 28, 100, 5, 91, 88, -62, 66, -91, 3, 9, -75, 2, 70, 110, -91, -120, 85, 
+     19, -120, -125, 53, -72, -43, -91, 38, -104, 8, -42, -15, 65, 120, -101, 37, 12, 44, 69, 108, 
+     97, -95, 47, 8, -75, -103, -106, -113, -39, 74, 13, -21, -4, 70, -5, 126, -110, -61, -74, -38, 
+     69, -21, 80, -96, 126, -83, 46, 55, -120, 96, -3, -22, -127, -45, -116, 5, 3, -66, 64, -20, 
+     97, 89, -6, 101, 18, -56, -120, 0, 27, 114, 122, 4, 109, -84, 64, -37, -17, 27, -49, 83, 
+     -64, 90, -68, -11, -103, 2, -100, -117, -51, -24, 103, 97, 17, 11, 93, 25, 66, 100, 23, 16, 
+     -96, -102, -26, 118, -99, 46, -42, -100, -13, -12, -80, -106, -69, 103, -31, -11, 116, -114, -68, -114, 
+     -40, -60, 66, 41, 43, 9, 117, 34, -86, 124, -74, 56, 25, 43, -65, 63, -34, -122, -125, 32, 
+     108, 55, 98, 23, -53, -12, 68, 26, -111, 98, 11, 104, -4, -65, -5, -97, 51, -79, -14, 71, 
+     41, 32, -34, 88, -64, 39, 44, 44, 99, -95, 106, -81, 92, 34, 105, 11, 104, -61, -26, 19, 
+     -60, -70, -52, 2, -42, 55, -93, -16, -122, -77, Byte.MIN_VALUE, 92, -81, 106, -60, 54, 22, -54, -9, 35, 
+     -74, 121, 17, 8, -21, -35, 64, 0, -53, 52, 24, 49, -114, -43, -72, -54, 15, -9, -127, 106, 
+     -57, -28, 35, -10, -79, -48, -122, -11, -60, -122, -43, 92, -37, 62, 44, -33, 41, 88, 87, -25, 
+     44, -63, -67, 66, -72, 62, 10, 113, -127, 117, 115, 82, 28, -79, -15, 109, 64, -2, -14, 23, 
+     -88, -90, 13, -85, 105, -29, 69, 78, -80, 14, 13, 72, -57, -1, -52, -120, -101, 116, -109, 19, 
+     44, 84, -25, 65, 120, -25, 67, -23, -45, -25, 109, 88, -37, -54, -72, -64, 10, -11, -61, -17, 
+     -119, 2, 89, 30, 117, -120, 27, 44, 84, 52, -106, -24, -56, 100, -104, -22, -45, -63, -52, 33, 
+     -42, -119, 51, 79, 70, 18, -87, -39, -116, -67, Byte.MIN_VALUE, -72, -62, 66, 63, 74, -120, 14, 122, 7, 
+     -86, -16, -89, 11, 57, -61, 90, -26, -67, 32, -121, 72, -97, -99, -1, 62, -60, 29, 22, 90, 
+     -18, 79, 124, 98, -66, -36, -85, 101, 48, 41, -21, 88, -26, -92, 14, -87, -124, 38, Byte.MAX_VALUE, -7, 
+     47, 71, 92, 98, -95, -64, -11, 36, 102, -51, 68, 12, 57, 84, -51, 58, -106, -15, -28, 51, 
+     82, 45, -95, 4, -65, 46, 16, 113, -117, 101, -100, -111, 74, 124, -6, 9, 84, -59, -116, -120, 
+     50, 33, 86, -79, 14, -7, 46, 33, 54, -84, 26, -90, -50, -7, -101, 99, 44, 84, -29, -99, 
+     78, 106, -78, -50, 74, -9, -3, 91, 88, -61, -78, -28, 121, 78, 32, 58, 19, 36, -35, -69, 
+     6, 113, -115, -123, -54, 122, -55, -56, 76, 4, -45, 21, 72, 31, -2, -26, -86, -59, 33, 86, 
+     -103, -3, 32, -40, -64, 75, 68, -79, -82, 28, -97, -20, 47, -69, 70, -20, 98, Byte.MIN_VALUE, -84, -41, 
+     37, -60, 61, 22, -86, 28, -106, 67, 70, 11, 64, 85, -62, -76, 23, 79, -35, -114, 101, -76, 
+     27, 26, -7, -101, -83, 113, 20, -103, 71, -101, -119, 97, 93, 112, 27, 23, -109, -117, 17, -68, 
+     18, -112, 51, -84, 18, 57, 3, 11, -107, 122, -110, 94, 51, 42, 103, -116, 91, -110, -79, 29, 
+     -106, -3, 104, -65, 60, 59, 44, -109, -35, -8, 89, 7, 88, 7, 30, -11, 73, 39, -15, -64, 
+     -108, -98, -91, -56, 57, 88, -88, -48, 35, -101, -92, 22, -48, 23, 68, 14, -6, -20, -25, 106, 
+     55, 35, 93, -84, 38, 100, 49, -100, 94, 61, 72, 42, -45, 19, 47, 58, 65, 118, -81, 66, 
+     -28, 44, 44, 116, -106, 92, 78, 108, -55, -115, -38, -100, -72, 119, -35, 54, -88, 105, 97, 53, 
+     4, 87, 38, 62, -5, -38, -6, -84, 115, -112, -60, -1, -97, 94, 30, -92, -115, 69, 37, 39, 
+     -74, -116, -75, -117, -23, -17, -74, 56, -113, 50, -42, -59, 45, -99, 58, -81, -51, 37, -5, -104, 
+     -24, -27, 65, -6, 88, -24, 108, -9, 108, 74, 90, 80, -81, 73, -112, -12, 89, -76, -29, -12, 
+     -87, 25, 102, -30, 88, -125, 27, 106, -81, -100, 73, -4, 108, -112, 95, -116, 66, 15, -55, -106, 
+     0, -78, -18, 103, -111, 115, -79, 80, -27, Byte.MIN_VALUE, 52, -118, -109, -93, 33, -44, -54, 51, 98, 36, 
+     29, -98, 11, -7, 46, -33, 96, 113, -120, 117, -21, 109, 111, 40, 74, -23, -16, -20, -108, 119, 
+     -41, -89, -27, 104, 32, 36, -3, -124, 96, -38, Byte.MIN_VALUE, 74, -28, 108, 44, 84, -43, 37, -99, -50, 
+     84, -14, -118, 2, 44, 99, -77, -65, 71, -89, 78, -63, -15, -5, -109, -74, -36, 21, -21, 122, 
+     -16, -58, 125, -127, -113, 116, 114, 27, -77, 50, -115, -14, 60, 108, -104, -34, -91, 10, 57, 31, 
+     11, -43, -8, -82, -93, 53, 125, -39, 90, -26, -21, -12, -27, 5, 105, 95, 69, 78, -11, -17, 
+     -47, 103, -30, 107, -81, -65, -7, -71, 53, 86, 119, -73, -2, -27, -11, -41, 94, 123, 125, 80, 
+     15, 63, 73, 120, -92, 53, 57, 93, -45, 67, -22, 79, 101, -99, 111, 13, -30, 3, 22, 50, 
+     45, -101, 13, 105, -81, -22, 0, 0, -76, -122, 86, -5, -69, 82, -87, -108, 53, 71, -74, 76, 
+     -106, 101, 61, 86, 106, -75, -51, Byte.MAX_VALUE, 0, -24, -4, 15, 0, -100, -67, -52, -124, -8, -127, -123, 
+     -48, -14, -31, 90, -116, -57, -95, 29, -66, -100, -111, -37, 100, 6, 11, -3, 56, 74, -58, -37, 
+     53, 48, 96, -10, -40, 31, 17, -97, -80, -112, 122, 64, 44, 79, -41, -23, -44, -59, 14, 80, 
+     35, 126, 97, 33, -29, -120, 112, 126, 98, -123, -113, 48, 34, -66, 97, 33, -53, -102, -103, 10, 
+     -34, 101, 69, -88, -104, -71, -58, -126, -8, -121, -123, -48, -55, -127, 124, 91, 109, 11, -58, 13, 
+     60, -55, -32, 13, 50, -119, -123, 76, -109, 102, -13, 74, 11, -50, -98, 100, 66, 124, -59, 66, 
+     40, -22, -15, 44, -34, -84, -93, 5, -78, 30, -113, 98, -10, -18, 24, -58, 66, 37, 83, 8, 
+     118, -79, -80, -98, -86, -76, -46, 119, 74, 17, -65, -79, 80, 83, -68, -37, 81, 62, 36, 43, 
+     -103, 91, 60, -45, -73, -58, 60, 22, 66, -105, 94, 88, -87, 116, 114, -30, -126, -86, -107, 47, 
+     92, 66, -82, Byte.MIN_VALUE, -123, 76, 7, 31, -33, 4, -100, 88, 116, 1, -80, -87, -1, 65, 19, 114, 
+     13, 44, 43, -41, 114, 15, -71, -45, 18, 23, -108, 123, 44, 55, -79, 114, 91, -20, 96, 33, 
+     84, -26, -69, 64, -18, -116, -44, 5, Byte.MIN_VALUE, 124, -127, 111, 25, 75, 55, -59, 22, 22, -78, -100, 
+     28, 39, -27, -66, -24, -126, 74, -23, -72, -29, -1, 67, -82, -122, 101, -115, -61, -18, -31, 21, 
+     -100, 38, 46, 80, 17, -18, 126, -104, -59, 27, 98, 19, 11, 53, 110, 29, -70, 73, -55, 85, 
+     102, 4, 64, -71, 105, -24, -42, 70, -28, -86, 88, 8, 85, 31, -6, 87, 64, -74, -114, 3, 
+     46, -96, -109, 73, -1, 117, -88, -102, -35, -69, 97, 25, -53, 26, 71, -6, -7, -27, -80, 94, 
+     118, -63, 28, -65, 126, -121, 89, -65, 21, -10, -79, 16, 58, -11, -60, -76, 12, 37, 6, -40, 
+     -53, Byte.MAX_VALUE, -86, -116, -87, -66, -57, 56, -72, 17, 46, -80, -112, -91, -28, -69, -105, 2, 50, 33, 
+     43, -23, 11, -62, -93, -46, 81, 81, 106, 11, -70, 95, -80, -84, 95, -116, -115, 103, 7, 123, 
+     -59, -108, 51, -98, -70, 0, -74, -35, 107, -80, -38, -36, -60, -51, 93, 112, -124, -43, 28, -91, 
+     107, -6, -66, -101, -82, -60, 32, 67, 98, 0, 98, -54, -12, -113, -98, 90, 83, -54, -35, 29, 
+     112, -120, -123, 80, 67, 105, -54, 34, -65, -81, 114, -12, 12, -12, 50, 66, 125, 78, -76, -33, 
+     -28, -17, -44, -11, 92, 94, 63, -89, 88, -51, -59, 87, 117, -110, -89, 91, 100, 54, -35, 78, 
+     -45, -36, 72, 47, -49, 120, -125, -91, -119, -37, -117, -25, 26, -85, 57, 46, -17, 120, 110, -16, 
+     71, -79, 57, 74, 45, 105, 50, 0, -96, -74, 32, 39, -7, -93, 103, -98, -5, -26, -118, 19, 
+     46, -36, 25, 88, -51, -107, -43, -110, -125, -85, -34, 30, 35, -115, 78, 63, -89, -45, 19, 26, 
+     18, 3, 32, -44, 93, 59, -105, 25, 45, 29, -13, -26, -58, -125, -22, 106, -25, 92, -75, -109, 
+     -80, -102, 51, 100, 99, 99, -31, -74, 25, 110, 110, 126, -21, -45, 10, -102, -57, 50, -36, 43, 
+     -107, 53, -1, 9, -124, -102, -116, 88, -65, -50, 110, -93, -73, 20, 54, 52, 90, -100, 118, -55, 
+     -50, -61, -6, 39, -82, -28, 71, -123, 60, -15, -40, 75, -13, 62, 89, 31, -105, -106, 45, 83, 
+     88, -93, 64, -45, 18, -25, -84, -57, -14, -20, -20, 111, -93, 63, -7, 120, -30, 99, 79, 4, 
+     69, -99, -70, -20, -20, 107, 117, 58, -42, -83, 48, 26, 46, -88, 79, -1, 124, 48, -22, -69, 
+     -1, 124, -10, -39, 103, 111, 15, 31, -39, 28, -61, 39, 90, -1, 97, 75, 84, -30, -49, 63, 
+     -85, 47, 92, 53, 54, -15, -31, 50, -7, -127, -27, 34, 33, 98, -119, 88, 34, -106, -120, 37, 
+     98, -119, 88, 98, -120, 88, 34, -106, -120, 37, 98, -119, 88, 34, -106, 24, 34, -106, -120, 37, 
+     98, -119, 88, 34, -106, -120, 37, -122, -120, 37, 98, -119, 88, 34, -106, -120, 37, 98, -119, -15, 
+     Byte.MAX_VALUE, 81, -18, 72, -58, -14, 91, -36, 92, 0, 0, 0, 0, 73, 69, 78, 68, -82, 66, 96, 
+     -126 };
+ }
+
+
+/* Location:              /home/roman/data/HACKvent/2018/Day 18/evil.jar!/hackvent2018/evil/NotEvil.class
+ * Java compiler version: 8 (52.0)
+ * JD-Core Version:       0.7.1
+ */

+ 333 - 0
Day 18/src/hackvent2018/evil/Question.java

@@ -0,0 +1,333 @@
+package hackvent2018.evil;
+
+public class Question
+{
+    public static byte[] b = {
+        -119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1, 44,
+        0, 0, 1, 44, 8, 3, 0, 0, 0, 78, -93, 126, 71, 0, 0, 3, 0, 80, 76, 84,
+        69, 0, 1, 0, 4, 1, 7, 3, 5, 1, 6, 7, 18, 6, 9, 5, 11, 7, 13, 5,
+        9, 24, 11, 10, 0, 16, 15, 4, 14, 14, 23, 15, 15, 19, 19, 16, 0, 15, 16, 30,
+        16, 18, 14, 22, 18, 1, 18, 21, 3, 21, 21, 0, 22, 21, 24, 23, 24, 0, 22, 23,
+        21, 26, 25, 11, 28, 26, 0, 26, 25, 18, 26, 27, 6, 27, 26, 30, 30, 29, 2, 25,
+        27, 44, 27, 27, 39, 31, 31, 5, 31, 31, 13, 34, 32, 0, 31, 31, 24, 31, 32, 30,
+        39, 36, 0, 37, 37, 15, 35, 36, 34, 36, 36, 44, 38, 37, 31, 35, 36, 54, 37, 36,
+        49, 40, 39, 11, 39, 37, 40, 39, 40, 23, 44, 41, 0, 44, 42, 8, 44, 42, 31, 41,
+        42, 40, 49, 45, 5, 42, 43, 51, 45, 45, 23, 40, 44, 56, 48, 46, 14, 45, 46, 29,
+        46, 45, 38, 45, 45, 48, 52, 48, 1, 49, 48, 21, 55, 51, 0, 49, 51, 49, 48, 50,
+        62, 55, 53, 20, 59, 54, 2, 50, 51, 59, 49, 51, 71, 56, 56, 3, 53, 53, 46, 58,
+        57, 0, 56, 56, 32, 64, 57, 0, 57, 55, 43, 56, 57, 39, 52, 56, 68, 62, 58, 20,
+        58, 56, 59, 62, 61, 1, 57, 58, 56, 57, 58, 66, 65, 63, 3, 66, 64, 0, 65, 64,
+        12, 59, 61, 77, 62, 63, 61, 66, 66, 21, 67, 65, 33, 70, 68, 0, 65, 63, 67, 66,
+        65, 57, 73, 70, 2, 65, 66, 74, 69, 69, 46, 73, 72, 12, 74, 71, 23, 76, 73,
+        0, 72, 70, 57, 67, 69, 84, 70, 71, 69, 72, 70, 74, 76, 74, 42, 71, 72, 80, 73, 73,
+        65, 82, 78, 2, 74, 75, 57, 77, 77, 53, 85, 81, 0, 83, 80, 16, 77, 79, 76, 75,
+        78, 92, 89, 84, 0, 78, 79, 87, 82, 80, 69, 89, 85, 10, 80, 81, 84, 92, 87, 2,
+        95, 89, 0, 81, 84, 98, 85, 87, 84, 85, 86, 94, 87, 86, 90, 99, 93, 0, 89, 89,
+        78, 103, 96, 3, 106, 98, 0, 90, 94, 108, 96, 95, 87, 96, 94, 97, 94, 95, 93, 94,
+        94, 103, 91, 96, 98, 110, 102, 0, 108, 105, 0, 114, 106, 3, 101, 102, 100, 101, 101, 110,
+        103, 101, 105, 113, 110, 0, 118, 109, 0, 100, 105, 107, 118, 114, 0, 110, 108, 112, 111, 110,
+        102, 109, 109, 118, 109, 111, 108, 123, 118, 0, 109, 113, 116, Byte.MAX_VALUE, 122, 0, 116, 115, 107, 112,
+        117, 119, 115, 116, 125, 119, 116, 120, 113, 117, -125, -125, 125, 2, 117, 119, 116, -121, -127,
+        0, 122, 124, 121, 122, 123, -124, 125, 125, Byte.MIN_VALUE, -115, -122, 0, 126, Byte.MIN_VALUE, 125, Byte.MIN_VALUE, -127, -118, -127, -125,
+        Byte.MIN_VALUE, -109, -117, 0, -126, -125, -122, -123, -121, -124, -105, -113, 0, -117, -119, -115, -99, -109, 0, -118,
+        -117, -107, -117, -115, -118, -96, -105, 0, -118, -113, -111, -111, -113, -109, -92, -103, 1, -86, -98,
+        0, -108, -106, -109, -91, -96, 0, -104, -107, -102, -110, -105, -102, -106, -105, -95, -81, -93, 0, -85, -90,
+        2, -100, -100, -90, -77, -90, 0, -97, -100, -95, -100, -98, -101, -102, -97, -95, -79, -86, 0, -75,
+        -82, 0, -94, -92, -95, -91, -93, -89, -72, -80, 3, -68, -76, 0, -90, -85, -83, -87, -85, -88,
+        -84, -86, -82, -63, -72, 0, -82, -80, -83, -60, -69, 4, -78, -80, -76, -83, -78, -76, -56, -66,
+        0, -76, -74, -78, -50, -61, 0, -69, -71, -67, -74, -69, -66, -71, -69, -72, -44, -56, 0, -62,
+        -64, -60, -38, -51, 0, -64, -62, -65, -36, -48, 6, -63, -58, -56, -33, -46, 0, -57, -59, -55,
+        -59, -57, -60, -29, -43, 0, -55, -53, -56, -31, -39, 0, -26, -40, 0, -51, -53, -49, -56, -51,
+        -48, -22, -38, 0, -20, -36, 0, -24, -33, 0, -46, -44, -47, -21, -30, 0, -49, -43, -41, -42,
+        -45, -40, -17, -27, 0, -15, -25, 0, -40, -37, -41, -12, -23, 0, -34, -37, -32, -40, -35, -33,
+        -9, -20, 0, -35, -33, -36, -6, -17, 0, -2, -14, 0, -1, -13, 0, -26, -28, -24, -1, -12,
+        0, -31, -26, -24, -27, -25, -28, -3, -9, 0, -1, -7, 0, -1, -6, 0, -3, -3, 0, -26,
+        -20, -18, -1, -1, 1, -20, -18, -22, -21, -16, -13, -14, -12, -16, -17, -11, -9, -10, -8, -11,
+        -6, -4, -8, -8, -3, -1, -2, -1, -4, 20, 118, 37, -88, 0, 0, 0, 1, 98, 75, 71,
+        68, 0, -120, 5, 29, 72, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 29, -121,
+        0, 0, 29, -121, 1, -113, -27, -15, 101, 0, 0, 0, 7, 116, 73, 77, 69, 7, -30, 9, 19, 18,
+        23, 10, 34, 16, -112, -65, 0, 0, 22, 3, 73, 68, 65, 84, 120, -38, -19, -35, 123, 124,
+        19, 85, -66, 0, 112, 59, 2, 45, 86, -22, 82, 41, 47, -41, 96, 65, 20, -84, 80, 20,
+        -75, Byte.MIN_VALUE, -30, -78, 8, 42, -108, Byte.MIN_VALUE, 43, -107, -78, -46, 5, 100, 123, 23, 33, -70, -68, 67,
+        65, -47, -108, -105, -58, 11, -40, 43, 108, 8, 53, -108, 64, 5, 35, 45, -80, 82, -19, -75,
+        -75, -115, 54, 107, -115, 41, -90, 65, 47, -124, 0, 53, -124, 22, 74, -89, -103, -29, 7, 102,
+        62, -45, 79, 40, -119, -25, -90, 105, 43, -48, -92, 77, 58, -113, -52, 36, -103, -33, 95, -120,
+        -102, -52, 124, 115, -50, -103, -33, 57, 115, 30, 119, 64, 33, 2, -114, 59, 4, 2, 1, 75,
+        -64, 18, -80, 4, 44, 1, 75, -64, 18, 8, 4, 44, 1, 75, -64, 18, -80, 4, 44, 1,
+        75, 32, 16, -80, 4, 44, 1, 75, -64, 18, -80, 4, 44, -127, 64, -64, 18, -80, 4, 44,
+        1, 75, -64, 18, -80, -72, -65, 4, -105, -77, -7, 122, 83, -61, -119, -54, -35, 123, -42, -50,
+        -103, 51, 53, 58, -90, 45, -94, -89, -50, -103, 51, 103, -49, -18, -81, -65, -1, -71, -87, -23,
+        70, -77, 75, -64, -126, 87, 107, -85, 62, -49, 125, -21, -65, 102, 39, 38, 77, 17, -17, -112,
+        23, 22, 29, -41, -103, -37, -29, 108, 105, 81, -47, 113, -71, 124, -123, 120, 98, 98, -54, -20,
+        -75, -101, -14, 42, -86, 107, 29, -111, -117, 117, -79, 120, -13, -4, -44, -41, 50, -91, -86, -29,
+        90, 67, 93, 61, 65, 18, 45, -127, -125, -33, 3, -9, -4, 5, 73, -126, 58, -77, -66, 84,
+        -93, 92, -2, -6, -13, 51, 86, -18, -84, 104, -120, 60, -84, -53, -57, -34, -72, -5, -34, 76,
+        -91, -42, 92, 83, -121, -74, -46, 96, -99, 71, -21, Byte.MAX_VALUE, Byte.MIN_VALUE, -38, 44, -26, -62, -100, 89, -67,
+        -17, -37, -14, -115, 35, 98, -80, 92, -50, 11, -37, -121, 32, -45, 119, 24, 90, 74, 17, -42,
+        -67, 112, 23, 55, 84, 39, 19, -35, 49, -6, 64, -93, -53, 21, -10, 88, -41, 107, -65, 120,
+        107, 92, -94, 84, 11, 72, 2, -57, 40, 5, -64, 73, -46, 86, -104, -111, -16, -36, -121, 85,
+        87, 92, -31, -116, 117, 62, 111, -18, -53, -110, 124, -67, 91, 10, 96, 116, 2, 16, 100, -99,
+        78, -111, 49, 123, -27, -25, -75, 97, -118, -43, 124, -8, -31, 33, 89, 58, 11, -38, -3, -54,
+        -41, 73, -123, -84, 55, 21, 46, 31, -8, 116, 113, 24, 98, 93, 123, -73, -57, -108, 66, 28,
+        99, 60, -14, -109, -18, -38, -19, 8, 43, -84, 95, 43, -34, -116, -109, -103, 72, 22, -84, 48,
+        -126, -44, 101, -58, 109, 56, -47, 20, 46, 88, 23, -1, -11, -41, -76, -125, 117, -84, 80, -75,
+        4, 78, -102, -107, -45, -25, 28, 106, 8, 7, -84, 83, -117, -122, -53, -11, 40, 1, 48, -10,
+        2, 16, 117, 90, -23, -56, 119, 26, 66, 29, -21, -14, -62, 24, 37, 106, -57, -40, 15, -69,
+        57, 59, -22, -35, -26, 16, -58, 114, -43, -82, -118, -106, -93, 4, 22, -108, 112, 23, -81, 21,
+        49, -97, 94, 117, -123, 40, -42, -87, -51, 41, 114, 11, 9, -80, 96, 5, 32, -115, -117, -57,
+        -18, -84, 13, 69, 44, -57, -54, 103, 84, 102, 34, 120, 84, -98, -74, 30, 51, -26, 60, -111,
+        27, 122, 88, -5, 123, 102, -97, -59, -126, 75, -27, 41, 93, 118, 83, 102, -17, -81, 67, 10,
+        -53, 117, 122, -126, -56, 76, 96, -100, 4, 32, -11, 113, 11, 26, 66, 7, -21, -54, 7, -125,
+        -14, 73, Byte.MIN_VALUE, 113, 21, 56, -74, 35, 33, -9, 106, -120, 96, 29, 26, -75, -125, -85, 98, -43,
+        -2, 96, 52, 74, -97, -6, 38, 20, -80, 26, -97, -99, 104, -80, 3, -116, -37, 0, 104, -7,
+        -120, 69, 14, -66, 99, -71, -114, 68, -87, 48, -82, -87, 90, -71, -74, -10, 62, -61, 111, -84,
+        -85, 31, 36, -102, 8, -116, 23, 1, -120, -94, -8, -3, 14, 30, 99, 85, 60, -71, -18, 23,
+        28, -29, 75, -112, 102, -55, -76, 106, -34, 98, -83, 30, -85, -77, 3, -116, 63, 1, -48, -29,
+        -3, 118, -15, 19, -53, 49, 50, -61, -122, -15, 44, Byte.MIN_VALUE, 37, 101, -95, -109, -121, 88, -43, 67,
+        -28, 4, -64, 120, -89, 5, 36, 19, 26, 120, -121, 117, -8, -47, 66, 2, -29, 97, 0, -96,
+        122, -92, -116, 95, 88, -50, -91, -45, -115, 0, -61, -8, -87, -91, 75, -34, -58, 39, 44, -41,
+        -29, -39, 40, 79, -83, 90, -62, -102, -74, -112, 63, 88, 77, -61, 101, 60, -90, 114, 23, 46,
+        76, -100, 122, -125, 39, 88, 85, -93, 114, 120, -40, -76, -29, -32, -42, 4, 85, -106, 122, -114,
+        23, 88, -33, 63, 86, -60, 63, 43, 64, 26, 107, 110, -43, 2, -22, -31, -25, 121, Byte.MIN_VALUE, -11,
+        85, -116, -98, -121, 25, 3, -98, 19, -81, -67, -83, 47, 1, -118, 122, -2, -56, 57, -42, -79,
+        56, 35, -50, -65, 86, 74, 43, 66, 16, -21, -19, -65, 33, -95, -115, 57, -63, 49, 86, -15,
+        8, 11, -33, -46, 43, -36, -82, -49, 64, -36, -111, 73, 118, 120, 119, -83, 123, -92, -118, 83,
+        -84, -3, 73, 124, 75, -81, 0, 105, -110, -58, -74, 88, 33, -47, 29, 47, 13, -108, 15, 40,
+        -26, 16, -21, 99, 81, 13, -49, -84, 8, 116, 107, 2, -46, 22, -39, 29, -81, 13, 55, -11,
+        43, -29, 12, -85, 108, -48, 37, -98, 89, -31, -91, -56, -51, 16, -103, -67, -118, -99, -87, -33,
+        121, -114, -80, 78, -120, 76, -68, -78, -62, 81, -3, 20, -28, -42, -56, -9, -70, 60, 80, -46,
+        -17, 34, 39, 88, 21, 3, 116, 124, 122, 14, 2, 92, 47, -117, -66, -51, 10, -119, -13, 30,
+        93, 35, 10, -5, -1, -52, 1, 86, 85, Byte.MAX_VALUE, 61, -97, -98, -125, 36, 42, -117, 67, 58, -122,
+        -118, -12, 110, -44, 74, -121, 93, 12, 58, 86, -45, -125, 124, -54, 69, 1, -82, 70, 124, 68,
+        -76, -81, -127, 91, -11, -76, 96, 99, 57, 39, -28, -16, -120, -86, 94, 63, 17, -15, 25, 74,
+        95, -123, Byte.MAX_VALUE, -15, -126, -32, 98, -71, 22, 73, 113, -66, 20, 44, 64, -24, 37, 72, 39, -111,
+        108, -13, 53, -64, -107, -79, 62, -104, 88, -82, -11, 18, -66, -116, 95, 1, -46, -70, -4, 30,
+        -92, -45, 40, -14, -11, -65, 92, 18, 31, 10, 34, 86, -39, -28, 58, -66, 88, 97, -118, 56,
+        -92, -117, -104, -114, -6, -6, -65, 76, -94, -13, 65, -61, 106, 76, -32, 73, 39, 7, -96, -122,
+        -8, -82, -88, -112, -104, 88, -97, 88, 68, 81, -52, -115, 32, 97, 57, -18, 58, -56, -117, -92,
+        1, 7, -33, 73, -70, -92, 66, -90, 107, 59, -103, -52, 67, -18, 120, -48, 25, 20, 44, -41,
+        75, 57, 36, 47, 26, 43, -125, -76, -53, 26, -120, -120, 52, 117, -99, -2, -88, 68, -42, -74,
+        -96, 96, 29, -110, -96, 124, 40, 86, -8, 123, 93, 83, 33, -14, -70, -82, 102, -88, 88, -57,
+        87, 5, 1, -85, -63, -69, Byte.MAX_VALUE, -54, 69, -71, 42, -116, -23, -102, 42, -59, -36, 117, -77, 10,
+        116, 3, -102, 89, -57, 114, -114, -50, -25, -68, 71, -120, -93, -70, -116, -82, -87, 18, 85, 126,
+        -45, 64, 82, 62, -115, 117, -84, -43, -53, -71, -50, 70, -35, -115, -43, -14, -82, -87, -94, -27,
+        102, -1, -77, 52, 1, -106, -98, -53, 50, 86, 89, 50, -41, -39, 40, -127, 73, -69, 78, 23,
+        -112, -103, -58, Byte.MIN_VALUE, -26, -14, 0, -53, -120, 115, -84, 98, 93, 29, 101, -32, 58, -61, -46, -8,
+        105, -84, 98, -113, 6, -4, 81, 5, Byte.MAX_VALUE, 102, 21, -21, 67, 25, -73, -115, 85, -67, 33, -39,
+        15, -107, -92, 59, -53, 95, 38, 126, -58, 34, -42, -119, 120, 27, -121, 5, 11, 16, -33, -83,
+        -24, -102, 10, -55, -48, 118, 103, 74, 57, 110, -114, 62, -49, 26, -106, -13, -18, 114, 14, 83,
+        119, -46, -110, -27, 39, -77, -118, 47, -71, -44, -67, 39, 53, 89, -16, 39, 39, 91, 88, -101,
+        -41, 113, 103, 5, Byte.MIN_VALUE, 34, -38, 79, -79, -110, 95, -22, -10, -89, -38, 51, -118, 89, -62, 58,
+        63, -126, -77, -44, 29, -96, -70, 68, 63, 84, 73, 122, 42, -99, 48, -29, 35, 14, 118, -80,
+        86, -27, 115, -42, 99, -42, 73, -3, 80, 37, -86, 9, 74, -91, 30, 72, 119, -77, -126, -11,
+        67, 98, 61, 71, 73, -24, -1, 45, -114, -11, 99, -107, 67, 117, -79, 30, -80, 70, -97, 102,
+        3, 107, -32, -105, -100, -12, 115, Byte.MIN_VALUE, 93, -26, -89, 93, 71, -60, 102, -22, -103, 50, -111, -1,
+        48, 11, 88, 31, -92, 115, 50, 48, 99, 47, 23, -7, -95, 66, 10, 104, 117, -64, -56, -108,
+        98, -58, -79, 26, -122, 91, 56, 72, -79, 80, -19, 76, 63, 82, -79, -46, 58, 122, -113, 104,
+        -96, 75, 109, 102, 26, 43, 79, -63, -127, 21, -111, -29, -81, 88, 45, -42, -47, -34, -84, 5,
+        -51, -84, 100, 24, -21, -6, 8, 35, 23, -19, -107, -39, 52, -67, 43, -86, -72, -94, 75, -12,
+        -37, 81, 80, 50, -118, 97, -84, -35, 18, 110, 70, -79, Byte.MIN_VALUE, -95, -117, 84, 116, 57, 51, 35,
+        32, 68, -30, 103, -116, 98, 57, -94, -51, 28, 117, 10, -55, -126, 78, -97, -127, 122, -122, -106,
+        22, -29, -58, -69, 110, 48, -119, -11, -122, -108, -77, 119, 20, -92, -36, -9, -69, -26, 124, -26,
+        118, -41, 32, 51, -14, 24, -60, -70, -40, -105, -61, 33, -65, 122, -79, -49, 44, 20, 48, 119,
+        69, -64, 52, -58, -63, 28, 86, -98, -100, -53, -111, 25, -93, 87, -2, 62, -111, -31, -105, -68,
+        104, 102, 21, 99, 88, 77, 83, 59, -66, -48, -79, 90, -104, 9, -77, 37, -112, 90, -110, Byte.MAX_VALUE,
+        59, -43, 32, 53, -45, -5, 32, Byte.MIN_VALUE, -29, Byte.MAX_VALUE, 103, 12, -85, 34, -77, -61, 112, 3, 42, -119,
+        103, 40, 82, 2, 25, -56, 32, 55, -34, -102, 46, 100, -1, -60, -4, 64, 17, 42, 58, -51,
+        20, -42, -97, 59, -18, 63, -25, -77, 25, -95, 20, 9, 1, -115, -6, -96, 55, -13, -8, 116,
+        29, -58, 66, 18, 67, -26, 76, 99, 8, -21, -57, 65, 29, 75, 125, -3, 76, -90, -80, 6,
+        5, -124, 5, -38, -25, Byte.MAX_VALUE, 68, -105, -80, -77, 23, 23, -80, 7, 52, -64, 28, 0, -42, -77,
+        106, -126, 99, 44, -116, 60, -24, -95, 90, -50, -38, -106, 17, -60, -114, 119, 24, -63, -70, -40,
+        7, 112, 93, -78, -36, 90, 50, 119, 22, 90, -54, -34, 6, 55, -64, 54, -46, -63, 4, 86,
+        -82, -36, -85, 65, 13, 62, 22, 81, 16, -89, -87, 103, -11, 13, 64, 102, 5, 3, 88, -41,
+        -89, 121, 79, 4, 9, 62, 22, -88, -77, -78, -68, 107, -53, -105, 111, -69, -24, 99, -99, 74,
+        67, 121, Byte.MIN_VALUE, -59, 126, -104, -109, -102, -23, 99, -19, 82, 98, 17, -127, 69, 72, -2, -105, 62,
+        -42, 99, 62, 102, 55, -124, 35, 22, 126, 124, 52, 109, -84, -45, 73, 88, 100, -108, 44, Byte.MIN_VALUE,
+        70, 55, -46, -59, 90, -90, 32, 34, 3, 11, 35, -41, 109, -93, -119, -27, 66, 124, -115, -6,
+        -123, 37, 22, 110, -72, -113, 38, 86, -59, 120, 50, 66, -86, -95, -69, 104, 61, 115, -118, 30,
+        -42, 82, -97, -37, -15, -124, 39, 22, -112, -25, -47, -62, -70, -10, -96, -49, -101, 9, 79, 44,
+        76, -65, -38, 73, 7, -21, -44, -21, -10, Byte.MIN_VALUE, 71, 122, 89, 28, -94, 9, 86, 94, 58, -69,
+        -119, 14, -42, 23, 114, -33, -29, 75, 42, 41, 67, 33, -73, -13, 8, 11, 77, -85, -91, -127,
+        -27, 90, 83, -46, 73, -70, 75, 50, 20, -68, -38, 65, 3, -105, -17, -95, -125, -11, -94, 25,
+        -117, -96, 0, -70, -87, 52, -80, 46, -92, -96, 17, -123, -123, 70, 59, -87, 99, -19, -109, 18,
+        -111, -124, -123, -111, -29, -65, -94, -114, 53, -95, 16, -113, 40, 44, 66, -71, -120, 50, -106, 11,
+        57, -53, -17, -19, -23, -16, -74, 67, -2, 24, 107, -31, -115, -67, 41, 99, -99, 70, 72, -2,
+        74, -39, 81, -44, 88, -94, -108, -17, 120, -81, 84, 107, 69, -103, 58, Byte.MIN_VALUE, -123, -68, -13, 50,
+        85, -84, -3, 18, -98, 98, -31, -104, -71, 84, 54, -17, -66, -121, 94, -40, -68, 109, -13, -74,
+        -91, -113, 15, 126, -18, -97, 74, -99, -115, -119, -43, 106, -60, -85, -107, 84, -79, -26, 106, 120,
+        -39, -66, -29, 68, -119, -12, -59, 55, 14, 85, -3, 126, -104, Byte.MIN_VALUE, -13, 92, -39, -74, -65, 76,
+        103, -30, 36, 22, 92, -71, -109, 34, -106, 107, -16, 79, 124, 108, -78, 8, -29, -8, 39, -118,
+        -81, 116, -100, 81, -43, 116, -2, -3, 4, 57, -96, -5, -29, 2, -19, 82, -118, 88, -115, 3,
+        -7, 88, -80, 72, 121, -49, 35, -66, -33, -61, 52, 46, -120, -47, -47, -3, -12, -77, 51, 28,
+        -44, -80, 78, -67, -52, -65, -60, 1, -104, 38, 61, -37, -7, -24, 111, -59, 3, 106, -102, 19,
+        -55, 108, -81, -3, 74, 13, -21, 11, -2, -19, 107, 75, -22, -58, -18, -17, -86, -98, -44, -50,
+        -51, -76, -47, -6, -123, -47, -52, 115, -44, -80, -14, -44, 124, -61, 34, -113, -2, -47, -49, -90,
+        125, -51, 91, -90, -48, -38, -108, 30, -107, 84, 83, -62, 114, -83, -41, -13, -83, 14, -102, 17,
+        -65, -37, -86, 57, 63, 88, 71, -25, 39, 6, -118, -61, -108, -80, -100, -85, -116, 60, -61, -78,
+        -115, 15, 96, -27, -120, -29, 33, 58, 9, 15, 80, Byte.MAX_VALUE, 68, 9, -21, -6, 107, 116, -58, 103,
+        -4, -98, -92, 77, 33, 103, -56, 9, 100, 90, 16, -68, -48, -57, 64, -67, -39, 2, -91, 107,
+        41, 97, 53, -51, 59, 75, 49, 103, 108, 25, -43, -85, 105, 57, -66, -34, -22, 25, -33, 99,
+        104, 35, 8, 96, -23, 27, -40, -103, 86, 95, -45, 24, 88, 2, -6, -65, 82, -62, -70, 58,
+        -77, -114, -110, -108, 65, -109, 37, -119, -67, 39, -38, 19, 113, 113, 83, -78, 84, -12, -49, -115,
+        110, 27, 63, 9, 112, 33, -124, -21, -17, -91, Byte.MIN_VALUE, 122, -77, 40, -94, -124, -43, 32, -18, -26,
+        15, 4, -20, -88, 69, -103, 30, 21, -43, 119, -38, 43, -101, 54, -19, 107, -119, -67, -101, 54,
+        45, -101, 54, 50, 42, 106, -46, 14, 19, 74, 119, 38, 61, 48, 34, -127, 46, -79, -87, -92,
+        -79, -75, -112, 45, -114, 18, 86, -27, -118, 110, 85, 125, -36, 110, 84, -91, -12, 122, 120, -47,
+        -10, 3, 7, 60, 78, -98, 104, -7, -45, -127, 3, 31, 45, 27, 115, -9, -40, -106, 83, 108,
+        105, -75, 88, 27, 3, 94, -96, 123, -27, 121, -22, 107, 110, 113, -47, 101, 42, 88, 21, 89,
+        -35, -72, 57, 64, 106, 37, -29, -98, 94, -77, -5, 64, 59, -45, 109, -79, -17, -64, -98, -73,
+        103, -116, 74, 47, -96, 115, 60, 114, 125, -14, -27, Byte.MIN_VALUE, 23, 81, -50, 47, -89, -4, 69, 100,
+        87, -109, -68, 59, -57, -38, -85, 12, -4, 27, 113, 116, 121, -52, -62, 15, -9, -8, -126, -6,
+        61, 118, -81, -23, 39, -90, 113, -108, -97, -23, -103, -64, -49, -90, -35, -103, 77, -7, 123, 72,
+        -55, 103, 84, -80, 118, -85, 3, -58, 2, -122, -72, -47, 123, -10, -6, -115, 125, -81, 68, 83,
+        111, 122, 117, 107, 3, -57, -86, -100, 72, 121, 32, -114, -108, -18, -89, -126, -11, -33, 5, -127,
+        98, -31, -91, 125, -106, 29, -40, 27, 64, -20, 123, -73, -73, -126, -22, -44, -48, -14, -19, -34,
+        88, -50, -53, -105, 27, 125, 17, 54, -60, 81, -58, 34, 100, 31, 83, -63, -6, -101, 54, -64,
+        -37, 34, -114, -10, 121, 123, -33, -34, Byte.MIN_VALUE, 98, -33, -121, 3, 21, 20, 71, Byte.MIN_VALUE, 11, -67, -121,
+        -27, 78, 110, 120, -96, -49, -24, 77, 62, -102, -78, 107, 81, -44, -79, 14, 46, 100, 19, 11,
+        24, -2, -16, 126, Byte.MIN_VALUE, 86, 45, 90, 67, 116, 76, 97, -3, -48, -57, 51, 93, -94, 71, 35,
+        -93, 88, -102, 87, 88, 45, 89, -46, 101, 1, 91, -71, 99, 77, 18, -75, 122, -88, 125, -85,
+        67, -123, 115, 12, -13, 88, 29, -127, -61, -68, 46, -3, 92, 50, 13, 44, 74, 37, -21, -111,
+        0, 87, -6, -102, -121, -66, -65, -3, -9, -40, -35, 89, -20, 105, -113, -35, -67, -88, 109, 35,
+        -81, -1, 91, 7, -84, 31, 122, 120, -80, -10, 93, 67, 46, 120, 101, 61, 98, -22, 88, -123,
+        -108, 74, 86, -100, 53, 32, 44, -96, -67, 59, -11, 102, -116, -98, -32, -119, 97, 15, -76, 71,
+        -21, 63, 79, 24, 125, 51, 122, 78, -90, 116, 98, -92, 57, -71, -61, 60, -11, 111, 123, -76,
+        77, 91, -22, -29, -107, 25, 109, 86, 81, 78, 29, Byte.MIN_VALUE, -71, 47, -101, 88, -7, -37, 26, 111,
+        -58, -103, -45, -98, 104, -65, -115, 123, 31, -72, -48, -6, 23, 63, -2, -89, 61, 126, -40, -107,
+        68, 105, 52, 2, 76, 57, 121, -5, -11, -99, -23, -45, -2, 45, 29, -121, -51, 93, Byte.MAX_VALUE, -94,
+        -66, -4, 29, -104, -94, -40, -60, -46, -8, -40, -108, -79, -19, 54, 14, 92, -16, -47, 69, 57,
+        -106, 73, -87, -114, 16, -86, 5, 29, 62, 104, 67, -37, -73, -20, -11, 26, 92, 126, -103, -58,
+        -80, 3, -85, 88, -104, 113, 97, 115, 103, 88, 27, 62, -11, 113, 58, -15, 27, -44, -22, 8,
+        -80, 34, -41, 58, 124, -46, 18, -49, -105, 120, -1, 30, -97, -48, -104, 34, -57, 50, -106, 109,
+        -94, -9, 124, -71, -44, 54, -83, 37, 62, 70, 126, 6, 90, -87, -43, 17, 82, 62, -33, 43,
+        121, -40, -76, 106, -5, 73, -17, -79, -46, -95, 52, -42, -101, -77, -116, 5, -68, -22, -121, 59,
+        93, 108, 107, 77, 124, 36, -116, -37, -88, -82, -28, 7, -24, -40, -64, -42, -56, -81, -95, -13,
+        86, -118, 109, 44, 116, -4, -37, 94, -29, 111, -97, 122, -80, 126, -16, -2, -44, -81, -110, -50,
+        82, -66, -113, -46, 9, -127, 108, 103, 120, 56, 17, -27, 47, 22, 6, 64, -46, 46, -81, 30,
+        -102, 51, 21, 25, -26, -93, 92, 125, -125, -48, 56, -40, -56, 46, 93, -32, -33, -22, -44, -67,
+        -76, -114, 78, -94, -120, 117, 79, -64, 109, 11, -72, -108, -78, -59, -5, 48, -101, -109, 62, -6,
+        108, -69, 68, 70, 58, -81, 94, -48, -108, 92, Byte.MAX_VALUE, 101, -21, 98, -86, -122, -42, 91, 86, -36,
+        120, 23, 21, -84, -87, -127, -17, 12, 12, 46, -55, 71, -27, -7, -33, -4, -90, 120, -102, -44,
+        74, -17, 78, -84, 25, -85, -69, -2, -102, -22, 97, 74, -102, -81, -112, 10, -39, -19, 27, -74,
+        104, 97, -58, Byte.MAX_VALUE, -10, -34, -43, -11, 82, -48, 99, -125, -59, 58, -38, 3, -15, 117, -21, -98,
+        -22, 106, -26, -58, -31, -66, 37, 52, 87, 7, 83, -20, 27, 118, 7, -53, -13, 66, 65, 18,
+        -75, -32, 100, -89, 47, -13, 54, 33, 19, 105, 79, 113, 105, 125, 101, 28, -43, -23, -118, -45,
+        -26, 101, 34, -38, 59, 87, 81, -60, 122, -77, -92, 123, 95, 12, 72, -117, 92, -108, -80, -10,
+        -109, 115, -75, 87, -101, -100, 109, 77, -117, -53, 121, -3, -41, 43, -25, -54, -34, 26, -102, -80,
+        -50, 64, 50, 51, 39, -121, 52, 38, -50, 57, -31, 107, -39, -56, -107, 79, 18, 86, -40, 105,
+        -65, 114, 35, -44, 111, 83, -63, -38, -93, -22, -18, -35, 1, -110, 52, 104, 100, 51, -25, -3,
+        -29, -51, -107, 43, 115, 61, -79, 126, -27, -110, Byte.MAX_VALUE, -52, 75, -109, -86, -66, 3, 36, 99, -45,
+        -105, 112, -96, -103, -66, 32, -81, -6, -10, -25, 111, 83, -59, -26, -25, -92, 6, 6, -10, 125,
+        -96, 56, -84, -4, 63, 106, 10, -9, 7, 112, -68, -34, 98, -44, -105, 107, -107, 10, 119, 40,
+        -117, -54, 117, 6, -13, 37, 64, 48, -6, 34, 31, 16, -65, 104, 101, -29, 30, 90, 93, 92,
+        -19, -23, -1, -72, 46, -97, -56, 125, 105, -28, 44, -75, -111, -111, -67, 12, -56, -84, -61, 84,
+        -80, -66, -55, -94, 81, 24, Byte.MIN_VALUE, -35, 19, 24, 91, 97, 71, 13, -86, -76, 1, 81, -83, 33,
+        -110, 106, -84, 76, 45, 5, 33, -109, 40, -67, 10, -85, -112, -14, 122, -59, 0, 32, 72, -110,
+        48, 25, -115, 70, 27, 115, -45, 41, 90, -80, 18, 41, 97, -43, -90, -13, 126, -31, -114, -69,
+        -46, -29, 12, -97, 63, -126, -2, -95, -103, -46, -60, 16, 113, 29, 22, 113, 1, 44, -44, 38,
+        -122, 52, -51, -85, -119, 64, 44, -61, 115, -108, -80, 28, -81, -103, 35, 16, -85, -4, 77, 74,
+        88, 55, -34, 52, 70, 32, -106, 102, 59, -75, 9, -72, 43, 117, 17, -120, -107, 115, -120, -38,
+        -44, -18, -36, 124, 16, 113, 88, 118, 41, -75, -87, -35, -16, 115, 89, -28, 97, -43, -65, 94,
+        75, 13, -85, -22, 117, 60, -30, -80, -22, -26, 93, -95, -122, -43, 48, -124, -120, 56, 44, -21,
+        95, 40, 46, 116, 114, 14, -74, 68, 90, 61, 4, 58, -86, 75, -24, -32, 11, -123, -111, 86,
+        -76, 112, 21, -43, -59, -103, 48, 87, 70, 70, 24, 22, -111, 94, 70, 21, -21, 68, 66, -60,
+        97, -11, -85, -91, -68, -81, 3, 82, 23, 89, -115, 22, 48, -33, 73, 125, 19, -116, 84, 97,
+        19, -116, -64, -79, -10, 101, 69, -40, -10, 42, -109, -118, -87, 99, 93, 72, -79, 71, 84, 45,
+        68, 17, 7, 117, 44, -41, -40, -97, 34, 10, 75, -21, -25, -72, -94, -82, -79, 54, 104, 35,
+        42, -53, 82, -20, -91, -127, 5, 15, -27, 68, 18, 22, -102, 126, -118, 14, -42, -87, 87, 35,
+        -87, -47, -94, -71, 65, 98, -45, -104, 72, -38, -102, 77, -73, -26, 6, 29, 44, 56, -1, 120,
+        -28, 100, 90, 64, 65, 111, 83, 87, 120, 44, 61, 114, 122, 60, -8, -84, 42, 122, 88, -82,
+        -88, -6, 72, -23, -15, 0, -45, 96, 39, 61, 44, -72, 80, 17, 41, 73, 60, -103, -75, 5,
+        -46, -60, -6, 49, 41, 66, 26, 45, 64, 68, 95, -96, -117, 5, -57, 25, 34, -93, 30, -30,
+        -123, -12, -113, 101, Byte.MIN_VALUE, 31, -87, 35, 3, -117, -112, 28, -95, -113, 85, -99, 25, 25, -87, 86,
+        77, -54, 53, -6, 88, -114, -44, -97, 34, -94, 104, 29, 125, 23, -46, -57, -126, -37, -28, -111,
+        -16, 60, -76, 75, -104, 56, -2, 10, 94, -20, 23, 1, 88, -96, 126, 66, 19, 19, 88, -16,
+        89, 117, -8, 103, -15, -92, -100, -103, 35, -5, -32, -9, -125, -20, -31, -34, 106, 1, 52, -26,
+        34, 51, 88, 112, 120, 81, -72, 99, 17, -7, -81, 64, -122, -80, -54, 36, -31, 62, -86, -59,
+        -32, 1, -74, -51, -49, -101, -8, 83, 97, 90, -94, 101, -110, 50, -31, 43, 112, 106, -5, -99,
+        51, 121, 52, 50, -4, -105, -100, -53, 14, 34, 104, -91, 105, 61, 33, 4, -77, 90, 107, -12,
+        90, -83, 78, -93, 118, 71, -10, -70, 91, 35, 75, -87, -42, -108, 27, 81, 10, 123, -26, -95,
+        -103, -107, -52, 97, -99, -21, -113, 115, 32, -44, -18, -125, -102, 76, 122, -115, 70, 37, 93, 33,
+        73, 18, -119, -30, 99, 99, -29, 39, 77, -98, 60, 41, -53, -83, 35, 83, -87, 111, -115, -4,
+        -9, -42, -83, 16, -117, -30, -60, 42, 115, 55, -97, -34, -64, 52, -26, 26, 115, 88, 112, 110,
+        -80, -89, -120, 0, -67, 86, -73, 35, 71, 38, 22, 39, -73, -98, 101, 52, 83, -100, -87, -56,
+        81, 106, 117, 58, Byte.MAX_VALUE, -77, -96, Byte.MIN_VALUE, 85, -109, -127, -56, -70, -41, 67, 35, 50, 119, 66, 6,
+        -79, 28, -120, 21, -80, -48, -10, 120, 26, 31, 12, 69, 109, 53, 53, 38, -109, 81, 111, -56,
+        87, 43, 101, -21, 36, -109, 39, 39, -59, -58, -118, 68, 73, -46, 21, 114, -51, -63, 114, -109,
+        9, 109, 59, -94, -89, -91, 73, -14, -65, -98, 2, 16, -92, 53, 51, -66, 59, -21, 14, -15,
+        -97, 122, 57, -103, -60, -126, -37, -91, Byte.MIN_VALUE, 25, -94, -10, -54, -123, -38, -84, -33, -23, 75, 10,
+        52, 57, 57, -39, 18, -119, 36, 35, 35, 61, 61, 45, 77, -100, 37, -37, -86, 86, 23, -24,
+        -76, 38, 107, -51, 45, 64, -35, -2, 102, 64, -86, 19, -69, -15, -29, -126, -119, -97, 64, 70,
+        -79, -82, -115, 48, -47, 107, 126, 90, -119, -84, 102, 125, 65, 97, 118, 118, 102, 74, -118, 40,
+        65, 36, -98, -68, 92, -102, -91, 80, 20, -108, -105, -21, 13, 6, -117, -39, -118, -42, -73, 61,
+        -47, 112, -38, 123, -25, -30, -39, -118, -64, 47, -81, 100, 56, 100, 22, 11, -26, 41, -88, -44,
+        51, -49, 115, -52, -82, -45, -85, -107, 57, 105, -23, 9, 45, -83, -113, 104, -6, 36, -71, 60,
+        -33, 115, 72, -121, 39, 88, 90, 102, 103, 76, 15, 120, -9, 77, 52, -93, -118, 105, -84, -117,
+        -61, -3, -50, -43, -14, 108, -90, -20, 110, Byte.MIN_VALUE, -22, -84, 103, -49, -102, -51, 122, 77, -127, 92,
+        -74, 98, -14, -92, -8, -24, -24, -8, -72, 116, -119, 76, -83, -42, 26, 77, 109, 117, 11, -57,
+        1, -53, 125, 2, -21, 116, 75, -96, 63, -86, 33, -43, -63, 52, 22, -36, -74, -40, -49, 3,
+        17, -41, 22, -27, -85, 21, 82, 119, 19, -108, -111, 54, 115, 124, -118, 88, -110, -87, 84, 104,
+        74, 75, 77, 103, 109, 55, -101, -97, -32, -91, -28, 51, 117, -127, -18, 88, 56, -27, 11, -56,
+        56, -106, -77, 111, 121, -41, 67, 53, -28, -58, 21, 91, -73, -86, -114, 30, -43, 106, -11, 38,
+        -45, 47, -105, -48, -10, -26, 25, 112, -47, -79, 4, -91, 1, -18, 27, 66, 106, -58, 64, -26,
+        -79, -32, Byte.MAX_VALUE, 18, 81, 63, 61, 119, 119, -76, -91, 4, -36, 119, -68, 3, 108, 10, -127, 13,
+        57, -49, 6, 22, 92, 82, 16, 126, -125, 15, -72, 116, 19, 100, 5, -21, 92, -78, 53, -20,
+        -76, -12, 67, 111, -80, -125, -27, 122, 71, 26, 110, 67, -90, 68, -6, 97, -56, 14, 22, 108,
+        -70, -21, -53, -16, 26, -114, 39, -14, -97, 117, -79, -123, 5, 79, -58, -122, -43, -60, 120, 96,
+        -119, -70, 0, 89, -61, -126, 27, -28, 97, -123, 53, -13, 99, -56, 34, 86, -45, 40, 125, 24,
+        105, 105, -26, 64, 54, -79, 96, 89, 114, -8, -76, 90, 117, -9, -97, 98, 23, 11, 46, 92,
+        17, 46, 79, 68, 114, -46, 46, -56, 50, 86, -13, 3, -123, -31, 81, 17, 9, -27, 24, 23,
+        -37, 88, -16, -25, 71, 45, 97, -47, -72, -21, -5, 55, 66, -42, -79, -32, -57, 25, -31, 80,
+        17, -47, -108, 10, 24, 4, 44, -41, -76, 48, 88, -32, 74, 100, 110, -7, 45, 24, 88, -48,
+        -39, -77, 36, -44, -101, 45, 60, -1, 97, 8, -125, -126, 5, -49, -36, 31, -30, -13, 76, 65,
+        73, -33, -58, 96, 97, -63, 98, 49, 26, -54, 90, -64, -4, -24, -49, 48, 104, 88, -65, 109,
+        -103, 28, -54, -71, 41, -102, 116, 24, 6, 15, 11, -62, 105, 91, 67, 86, 11, 16, -110, -43,
+        48, -88, 88, -51, 19, -108, 33, 91, -80, -92, 51, 92, -63, -59, -126, 13, 79, -106, -122, 102,
+        -39, -62, 85, 11, -102, 97, -112, -79, 96, 117, -116, 62, 20, -75, -56, -94, 97, 13, 48, -24,
+        88, -16, 71, 36, 4, 19, 8, -68, 52, -22, 12, -28, 0, 11, 126, -109, 104, 12, 53, 45,
+        80, -34, -1, 52, -28, 4, 11, 126, -98, 108, 14, -83, -102, 72, -24, -58, 85, 65, -114, -80,
+        -32, -79, 120, 75, 40, 105, -111, -122, -72, 74, -56, 25, 22, -4, 119, 66, 8, -19, 101, -118,
+        -21, -112, -17, 33, -121, 88, -16, -16, 8, 115, -88, 44, -34, 4, -70, -5, -53, 32, -89, 88,
+        -16, 80, -94, 46, 52, 106, 34, 81, 52, -76, 18, 114, -116, 5, 43, 7, -24, 66, -95, 108,
+        -111, -102, -2, -43, -112, 115, 44, 120, -94, 71, 8, 104, -127, -4, 123, 27, 33, 15, -80, -32,
+        -119, -66, 26, -64, -17, -124, 11, -40, 21, -125, 25, -80, 98, 2, 11, 94, 24, 35, -25, -11,
+        -8, 22, -80, 73, 94, 112, 64, -98, 96, -63, -85, 75, 36, -105, -8, -37, -52, 19, -26, -76,
+        45, -51, -112, 55, 88, -80, 121, -125, -56, -60, 87, 45, 82, 31, -65, -1, 6, -28, 17, 22,
+        -124, -97, 69, 107, -7, -71, -50, -50, 126, 16, -7, -106, -95, 123, 100, 12, 11, 86, 13, 83,
+        -93, -4, 123, 42, -30, 54, -7, 83, 13, -112, 119, 88, -80, 118, 81, 58, -17, -6, -43, -124,
+        126, -30, -22, -85, -112, -121, 88, -16, -6, -2, -8, 82, 126, -67, 126, 37, -13, -29, -65, 114,
+        66, 94, 98, 65, 120, -78, 103, 22, -113, 82, 8, Byte.MIN_VALUE, 101, 12, -68, -52, -28, -19, 49, -117,
+        5, -101, -25, 78, 50, -14, 36, 65, 5, -88, 118, -24, 26, 23, -28, 49, 22, -124, 121, -113,
+        41, 108, 124, 104, -71, 72, -77, -20, -55, 50, -122, -17, -115, 113, 44, 88, -5, 110, 82, 57,
+        -25, 90, Byte.MIN_VALUE, -48, 12, -6, -32, 87, -56, 123, 44, -24, -6, -74, -25, 123, 28, 87, 69, Byte.MIN_VALUE,
+        -90, -113, -68, 0, 97, 8, 96, 65, -24, -104, -15, -57, 114, 14, 59, -117, -32, 82, 126, -97,
+        45, 78, 24, 34, 88, 16, 126, 53, 35, 83, -57, 81, -23, 34, -48, 34, -15, -36, 19, -84,
+        -36, 21, 75, 88, -48, -15, -7, -13, -103, 53, 100, -16, -71, 0, -87, -101, 50, -89, -62, 9,
+        67, 10, 11, -62, -90, 61, -47, 114, Byte.MIN_VALUE, 7, -3, 25, -72, -72, -57, -111, 27, 108, -35, 18,
+        123, 88, 16, 54, 46, -116, 43, -86, 11, -30, 6, 73, -64, 94, -109, -35, 115, -115, -125, -67,
+        27, 98, 19, -53, -35, -71, 126, 105, -100, -54, 76, 4, -121, 11, 7, -58, -100, 39, 54, 95,
+        100, -13, 118, -40, -59, -126, -82, -22, 45, -55, 50, 35, -55, 126, 109, 36, -56, -14, -27, -29,
+        118, -98, -121, 48, -124, -79, -36, 92, 87, -74, 15, 72, 55, -77, -52, -123, -109, -38, -92, -5,
+        63, 107, 112, -63, 16, -57, 114, -121, -13, -93, -98, 105, 90, 22, -9, -17, -76, -93, -57, 19,
+        123, -1, 27, 6, 33, -18, 8, -58, -105, 52, Byte.MAX_VALUE, -4, -8, -117, 74, 35, -118, 51, -34, 122,
+        1, Byte.MIN_VALUE, -37, 12, 27, -97, 120, -70, 24, -62, -80, -63, -126, -16, -73, -86, -51, 83, 51, 84,
+        38, -126, -47, -42, 30, -112, -104, 46, 103, -26, -100, -36, 83, 16, -122, 21, -106, 59, 126, -83,
+        92, 37, 26, -81, -79, -111, 12, -11, -78, 1, 65, 90, -34, 19, 61, -74, -67, -70, 41, 104,
+        119, 16, 68, -84, -106, -42, -21, -21, 84, 68, 92, -60, -60, -74, 15, 0, 88, 85, -55, -56,
+        -110, -45, -82, 96, 94, 126, 112, -79, 90, -6, 65, -97, 60, -34, -21, 85, -75, -79, 6, -91,
+        -72, -107, -120, -69, -107, 2, 117, 22, -3, -114, -79, 119, -49, 45, 118, 6, -7, -38, -125, -114,
+        -43, -110, -39, 23, -81, -97, 49, 75, -110, 83, 100, 66, -55, 110, -75, 97, 0, 39, 72, -78,
+        78, -81, -111, 75, 102, -49, -33, 89, -47, 28, -4, 11, -25, 2, -85, -91, 124, -99, -85, -36,
+        -71, 54, 57, 81, -94, -48, 90, -55, 64, -60, 60, 78, -124, -79, 80, 46, 78, -100, -3, -42,
+        -95, -86, -38, 102, 78, -82, -102, 35, -84, -106, 108, -43, 121, -29, -52, -111, 85, 67, -112, -40,
+        116, -59, 113, 115, 103, 91, -4, 120, -74, -32, 114, -1, 75, -44, -88, -108, 37, 34, -56, -109,
+        -37, -65, -67, 118, -61, 5, 57, -117, 59, 32, -57, -15, -13, -31, 53, 99, -18, -20, 117, -1,
+        -84, -84, -115, -22, -93, 37, 103, 45, -26, -77, -74, -42, -88, 49, 91, 44, 53, -91, -123, -102,
+        -83, 27, -45, 103, -11, -70, -77, -9, -78, 45, 101, 103, -72, -66, 84, -18, -79, 60, 113, -19,
+        92, -59, -95, -68, -11, 75, -25, 15, 30, 60, 120, 96, 66, 107, -36, -21, -2, -13, -32, -91,
+        75, 87, -26, -26, -107, 85, 94, 107, -26, -59, 85, -14, 4, 43, 68, 66, -64, 18, -80, 4,
+        44, 1, 75, -64, 18, -80, -124, 16, -80, 4, 44, 1, 75, -64, 18, -80, 4, 44, 33, 4,
+        44, 1, 75, -64, 18, -80, 4, 44, 1, 75, 8, 1, 75, -64, 18, -80, 4, 44, 1, 75,
+        -64, 18, -30, -1, 1, 59, -126, 122, -23, Byte.MAX_VALUE, -26, 4, -9, 0, 0, 0, 0, 73, 69, 78,
+        68, -82, 66, 96, -126 };
+}

+ 324 - 0
Day 18/src/hackvent2018/evil/Sad.java

@@ -0,0 +1,324 @@
+package hackvent2018.evil;
+
+public class Sad
+{
+    public static byte[] b = {
+        -119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1, 44,
+        0, 0, 1, 44, 8, 3, 0, 0, 0, 78, -93, 126, 71, 0, 0, 2, -3, 80, 76, 84,
+        69, 0, 1, 0, 4, 1, 6, 0, 3, 6, 3, 6, 2, 6, 7, 18, 7, 10, 6, 11,
+        10, 0, 11, 9, 14, 13, 16, 12, 15, 16, 24, 18, 17, 7, 18, 16, 20, 22, 19, 2,
+        18, 21, 3, 26, 23, 9, 24, 23, 15, 22, 23, 30, 23, 24, 22, 25, 24, 27, 26, 27,
+        6, 25, 27, 14, 27, 28, 35, 30, 28, 32, 32, 30, 21, 33, 32, 8, 31, 32, 15, 30,
+        31, 29, 35, 36, 19, 34, 34, 42, 36, 37, 14, 37, 35, 38, 35, 37, 35, 40, 38, 27,
+        41, 40, 13, 40, 40, 19, 40, 39, 33, 39, 41, 24, 43, 44, 22, 42, 43, 41, 43, 44,
+        32, 47, 45, 12, 44, 45, 28, 47, 46, 19, 43, 44, 51, 45, 44, 47, 47, 47, 25, 51,
+        50, 23, 49, 51, 33, 51, 50, 38, 51, 51, 29, 51, 49, 52, 49, 50, 48, 52, 51, 44,
+        55, 53, 20, 50, 51, 59, 55, 54, 27, 57, 58, 19, 59, 57, 30, 59, 56, 44, 56, 59,
+        24, 55, 57, 54, 56, 56, 64, 53, 58, 60, 59, 59, 37, 58, 58, 50, 59, 57, 60, 63,
+        64, 24, 66, 63, 30, 65, 63, 35, 61, 63, 60, 64, 64, 51, 64, 66, 32, 64, 63, 66,
+        66, 66, 43, 63, 64, 72, 66, 66, 58, 66, 67, 49, 65, 67, 64, 69, 70, 30, 72, 72,
+        26, 69, 72, 37, 73, 71, 42, 72, 71, 63, 72, 70, 73, 68, 72, 74, 70, 72, 69, 70,
+        71, 80, 74, 75, 34, 78, 79, 38, 75, 77, 74, 81, 80, 34, 82, 80, 51, 77, 78, 86,
+        81, 79, 66, 80, 78, 81, 80, 79, 72, 80, 83, 47, 82, 83, 42, 77, 81, 83, 80, 82,
+        79, 86, 87, 45, 88, 87, 40, 90, 88, 35, 82, 86, 88, 84, 86, 83, 90, 90, 49, 89,
+        87, 91, 92, 91, 44, 90, 89, 81, 95, 94, 47, 93, 92, 84, 94, 91, 95, 91, 93, 90,
+        99, 97, 44, 98, 97, 50, 93, 94, 102, 91, 95, 98, 95, 97, 94, 98, 96, 100, 102, 101,
+        53, 104, 102, 48, 102, 105, 50, 97, 102, 104, 100, 102, 99, 102, 101, 105, 108, 105, 51, 110,
+        108, 54, 108, 110, 48, 109, 112, 56, 106, 108, 105, 109, 107, 111, 107, 108, 117, 106, 111, 113,
+        112, 115, 59, 114, 116, 54, 113, 111, 115, 118, 118, 50, 117, 119, 57, 114, 116, 113, 117, 115,
+        119, 114, 119, 121, 123, 123, 55, 122, 124, 62, 119, 124, 126, Byte.MAX_VALUE, Byte.MIN_VALUE, 66, 122, 124, 121, 125,
+        123, Byte.MAX_VALUE, -127, -127, 61, 126, Byte.MIN_VALUE, 125, -120, -122, 59, -121, -121, 66, -127, -125, Byte.MIN_VALUE, -121, -124, -120,
+        -126, -121, -119, -116, -117, 70, -122, -120, -123, -113, -115, 66, -115, -117, -113, -120, -115, -112, -108, -110,
+        70, -116, -114, -117, -110, -112, -108, -104, -106, 74, -101, -105, 69, -104, -102, 70, -100, -102, 78, -104,
+        -107, -103, -109, -104, -101, -101, -98, 80, -105, -103, -106, -97, -95, 77, -96, -99, -95, -99, -97, -100,
+        -101, -96, -94, -92, -89, 82, -87, -86, 78, -87, -84, 87, -92, -90, -93, -94, -89, -86, -88, -90,
+        -86, -82, -81, 83, -78, -78, 86, -81, -84, -79, -86, -81, -79, -83, -81, -85, -75, -74, 89, -71,
+        -71, 93, -67, -68, 89, -79, -74, -71, -72, -75, -70, -67, -67, 96, -73, -71, -75, -62, -63, 93,
+        -66, -68, -64, -69, -64, -61, -66, -64, -68, -56, -57, 99, -61, -63, -59, -51, -53, 103, -56, -58,
+        -54, -47, -50, 99, -60, -55, -53, -49, -46, 101, -55, -53, -56, -109, -40, -17, -46, -43, 104, -102,
+        -39, -22, -96, -37, -27, -43, -40, 107, -47, -49, -45, -52, -47, -44, -49, -46, -50, -92, -34, -36,
+        -39, -36, 111, -83, -31, -42, -34, -33, 107, -76, -30, -49, -41, -39, -42, -37, -40, -36, -43, -37,
+        -35, -67, -27, -58, -29, -28, 111, -63, -24, -64, -26, -24, 115, -37, -31, -29, -56, -21, -71, -33,
+        -31, -34, -22, -21, 118, -49, -19, -77, -20, -19, 120, -31, -26, -24, -28, -26, -29, -16, -16, 116,
+        -36, -15, -91, -13, -14, 118, -27, -21, -19, -29, -12, -98, -23, -21, -24, -25, -10, -103, -9, -10,
+        122, -21, -8, -108, -17, -6, -112, -5, -6, 125, -16, -14, -17, -14, -4, -117, -19, -13, -11, -3,
+        -4, Byte.MAX_VALUE, -10, -2, -122, -1, -2, 122, -1, -2, -127, -1, -1, -125, -11, -9, -13, -1, -1, -119,
+        -8, -5, -9, -2, -1, -4, -37, -38, -3, -8, 0, 0, 0, 1, 98, 75, 71, 68, 0, -120,
+        5, 29, 72, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 29, -121, 0, 0, 29, -121, 1,
+        -113, -27, -15, 101, 0, 0, 0, 7, 116, 73, 77, 69, 7, -30, 9, 19, 18, 23, 27, 72,
+        -96, -80, 77, 0, 0, 21, 96, 73, 68, 65, 84, 120, -38, -19, -35, 123, 88, 84, -43, -38,
+        0, -16, -55, 57, -124, -95, 7, 79, 68, 38, -110, -95, 24, 117, 52, -95, -68, 20, 81, 120,
+        -44, -46, -58, 46, 20, 106, 6, 114, -52, 52, -95, 44, 34, -17, 102, 41, -95, -106, 26, 114,
+        -60, 11, -118, -120, 122, 70, 41, -87, 32, 39, 11, -121, 2, 83, 70, 27, 112, -68, 96, -109,
+        70, 115, 56, 124, -45, -16, 73, -24, 52, -58, -73, -49, 25, -110, -10, -13, -50, -52, 122, -66,
+        -31, -110, -96, -52, 48, 123, -42, -66, -114, 123, -65, 79, Byte.MAX_VALUE, -16, -104, 110, -42, -6, -19, -75,
+        -42, 94, -73, -67, -74, 12, 73, 65, 57, 100, 18, -127, -124, 37, 97, 73, 88, 18, -106, -124,
+        37, 97, 73, 4, 18, -106, -124, 37, 97, 73, 88, 18, -106, -124, 37, 17, 72, 88, 18, -106,
+        -124, 37, 97, 73, 88, 18, -106, 68, 32, 97, 73, 88, 18, -106, -124, -27, 93, -40, -102, 47,
+        -42, -41, 29, 43, -34, -69, 97, -11, -44, -87, 83, 31, 9, -18, -120, 7, -90, 78, 125, 122,
+        -53, -122, 93, -59, -57, -21, -22, 47, 94, -79, 73, 88, 8, 57, -50, 21, 111, -99, -7, -48,
+        -45, Byte.MAX_VALUE, Byte.MAX_VALUE, -19, -19, -115, 74, -107, 90, -83, 59, -91, -85, 49, 119, -124, -31, -44, -87, 83,
+        101, -22, 34, -27, 7, 11, 95, 123, -14, -23, -121, 102, -82, 41, 57, 33, 102, 44, 91, -59,
+        -5, -3, 123, 5, -89, -26, 107, 1, 72, -46, -7, -97, -69, 0, 18, 0, -76, 5, 115, 66,
+        100, 97, 43, 42, 108, -30, -61, 106, -86, 44, 92, -14, -52, -125, 73, -69, 53, 22, 59, 64,
+        15, 78, 93, -60, 0, -20, -106, -61, -71, 73, Byte.MAX_VALUE, 125, 98, 69, 97, 101, -109, 120, -80, -102,
+        -10, -116, 13, 122, 45, 95, 103, 36, 40, 58, 93, 35, 70, 24, -85, 63, 122, -83, -49, -40,
+        61, -105, 68, Byte.MIN_VALUE, 117, -91, -2, -45, -15, 55, 39, 29, -10, -102, -23, 58, -78, -61, 41, 55,
+        -113, -1, -72, -34, 118, 67, 99, -99, 120, 47, 46, 121, -69, -90, -123, -114, -44, 31, 94, 45,
+        -38, -19, -55, 113, 107, -114, -33, -88, 88, -114, -67, 125, 66, -44, 68, 11, -55, 88, -76, 16,
+        7, 67, -3, 119, -34, Byte.MIN_VALUE, 88, -105, -113, 44, 29, -80, -80, -38, 14, 36, -93, 1, 118, 93,
+        -58, -112, 5, 71, -102, 110, 40, -84, 11, 43, -5, -81, -46, -104, -127, 97, -86, -10, -6, 104,
+        -42, -82, -22, 63, -65, -23, 70, -63, 114, 92, 90, 32, -49, 38, 88, Byte.MIN_VALUE, -70, 10, 70, 100,
+        -53, 87, -41, 59, 110, 4, -84, -110, 89, 10, 37, 1, 44, 90, -75, 22, 47, -117, 50, 126,
+        102, -119, -49, 99, 125, 27, 52, -15, -108, -107, -28, 32, 90, 116, 49, -3, -65, -11, 101, 44,
+        -37, -79, -23, 15, 106, -20, 64, 114, 18, -50, -50, -41, -125, -45, 43, 109, -66, -118, 85, 49,
+        34, 85, 7, 28, 81, -75, -113, 33, -75, 41, -9, 29, -9, 73, -84, 75, 113, -63, -27, 28,
+        74, 117, 120, 105, -6, 78, -81, -9, 57, -84, -90, 53, 35, -117, Byte.MIN_VALUE, 115, -85, -42, -54, 88,
+        48, 50, -21, -78, 111, 97, 125, -20, -81, 36, 72, -98, -62, -102, -21, Byte.MAX_VALUE, -64, -121, -80, -50,
+        -59, 62, 106, 4, -66, -84, -100, -123, -53, -12, 104, -36, 57, 95, -63, 90, 121, -65, 26, -8,
+        -77, 106, 107, -23, 15, -33, -65, -58, 39, -80, -22, -125, -106, -13, 42, -43, -31, -107, 60, -80,
+        86, -16, 88, -51, -17, 13, -41, 8, -64, -118, 36, -19, -27, 81, -21, -101, -123, -115, 85, -37,
+        63, -97, 16, -124, 85, -21, -120, 113, 119, -1, 90, 1, 99, 57, 14, 4, -108, 11, -124, -86,
+        -115, -85, -68, 111, -79, 67, -88, 88, 77, -45, 82, 76, 2, -78, 114, 106, 25, 83, -89, 53,
+        11, 19, -21, -76, -65, 82, 80, 84, 109, -95, -108, -99, 22, 34, 86, 97, -56, 41, 16, 30,
+        22, 104, 67, 11, -123, -121, 53, 75, 65, 8, -113, -86, 85, -53, 28, 51, 77, 96, 88, -51,
+        -93, 51, 64, -112, 86, -83, -99, -120, -123, -109, 46, 10, 9, -21, -36, 64, -107, 80, -87, 90,
+        -121, 63, -86, -96, -45, -62, -63, 58, -17, -89, 35, -123, 28, -96, -21, 125, 82, 40, 88, -123,
+        -125, 116, 64, 10, 91, 75, 31, 81, 40, 12, -84, -11, -118, 6, -127, 91, -75, 54, -13, -47,
+        91, -123, Byte.MIN_VALUE, -11, -50, -93, 86, -66, 4, 26, 27, -67, -104, -120, 120, 120, 19, -1, 88, -53,
+        -46, 120, 123, 12, -38, -109, -125, -67, 24, -76, 91, -109, 22, -13, -115, -75, 52, -123, -73, 25,
+        81, -46, -24, 39, -109, 121, 51, 29, -76, 112, 61, -65, 88, -53, -98, -27, -81, -71, 106, -119,
+        -105, 57, 35, 82, 75, 57, 5, -42, -25, -42, -16, -119, -75, 108, 121, 11, 111, 88, -96, -108,
+        -75, -123, -33, 114, -54, -1, -94, 101, -7, 98, -2, -80, -106, 60, -58, -29, 76, 123, -107, -20,
+        -113, 8, 49, 80, 78, 70, -46, 38, -66, -80, 120, 108, -37, 73, -78, 49, 88, -42, 25, -101,
+        -87, 38, -60, -102, -76, -110, 31, -84, -49, -98, -91, -45, -74, -45, 116, -122, 69, -78, -82, 65,
+        -71, 112, -127, -94, -112, 15, -84, 125, 3, 26, -15, -77, 74, -108, -57, 107, 104, 89, 21, -55,
+        -82, 11, 37, -75, 73, 15, -80, 12, 57, -64, 61, -42, -111, 104, 11, 110, -39, 0, 123, 89,
+        -76, 76, -106, 64, 103, 11, -82, 86, 126, 61, -106, 44, -86, -118, -94, 86, 72, 9, -41, 88,
+        77, 1, 6, -20, 71, -66, 49, -86, 45, 119, 52, -90, -96, -95, 58, 68, -42, 61, 10, -88,
+        93, -48, 60, -8, 2, -73, 88, -11, 119, 96, -82, 76, 0, 84, 45, -22, 40, 21, 41, -76,
+        118, 119, -25, -6, 117, -41, 82, 104, 41, -75, -124, -27, -73, 54, 115, -119, 101, 27, -95, -58,
+        -76, 34, 82, -81, 86, -96, -34, 70, 90, 77, 124, 67, 100, 119, 45, 121, -66, -99, 82, -125,
+        119, 123, 51, -121, 88, -17, -28, 96, 89, -127, -87, -96, 107, -50, 10, 104, -10, -76, 54, 7,
+        118, -61, -110, 41, -12, 20, 82, 6, 57, -53, -72, -61, -38, -6, 44, 94, -43, -55, -66, -74,
+        -91, -119, -89, 57, -84, -124, -102, -28, -18, -123, 43, Byte.MIN_VALUE, -54, 125, 108, 73, -36, -55, 21, -42,
+        -15, -69, -79, -78, -90, -22, -42, -54, -104, 105, 119, -29, -9, -69, 104, -25, -93, 45, -98, -1,
+        -95, 37, -32, 56, 55, 88, -51, 67, -67, -97, 24, 5, -21, 65, 69, -9, 108, -47, -33, 65,
+        2, 6, 23, -123, -53, 79, 73, 122, -70, 48, -100, 26, 122, -103, 19, -84, -69, -68, 95, 75,
+        -123, 83, -111, 114, 23, 101, 64, 102, -95, 63, 92, 2, -115, -117, -57, 98, -108, -57, 110, 9,
+        20, 77, -30, 2, 43, 43, -43, -18, 101, 118, 72, 67, -94, -52, 117, 100, 51, 48, -74, 4,
+        34, -66, -5, -115, -112, 31, -76, 122, -72, 52, 60, -101, -59, 62, -42, -71, -119, 94, 54, -53,
+        -96, 75, -23, -19, -58, 74, 54, -56, 66, 50, -96, 5, -22, -16, -18, -105, 78, -84, 1, 15,
+        13, 67, -24, 49, -42, -79, -122, -106, 123, -103, -105, 85, 114, 119, 84, -78, 20, 53, 19, 88,
+        -83, -109, 9, -82, 90, -82, -125, -98, 70, 1, -79, 14, -106, -79, 102, -83, -13, -90, -26, 56,
+        59, 86, 110, -87, 2, 82, -11, -52, -51, -16, -40, 15, -71, 40, 92, -55, 30, 10, 87, -58,
+        59, -20, 98, -107, 62, 14, -34, -44, -113, -51, -3, -36, -106, -86, 85, 6, -110, -55, -55, 48,
+        -80, 108, 118, 113, 63, 10, 122, 108, 94, 33, -28, 0, -101, 88, -74, -15, 6, 47, 26, -34,
+        -93, 33, 110, 75, 85, -102, -103, -15, 105, 67, -88, 10, -19, -2, -117, -30, 123, 122, 44, -126,
+        -15, -82, 38, 22, -79, 22, 124, 0, -108, 75, -107, -85, -114, 85, 7, 85, 110, 13, 43, -81,
+        30, 90, 114, -70, -1, -82, -48, -3, 61, 105, -19, -34, -64, 30, 86, 69, 0, 101, 43, 99,
+        -88, -37, 10, -104, -51, -34, -94, -84, -95, 123, 89, -106, 39, -12, -16, -12, -74, -36, 118, -98,
+        45, 44, -37, 61, 122, -118, 71, 48, -24, -45, -36, 73, -35, -10, 46, -101, 107, -3, -50, 86,
+        -78, 123, 23, 53, 80, -35, 67, -113, 54, -56, -63, 18, 86, 94, 38, 53, 43, -29, -100,
+        0, 119, 86, -7, 70, -106, -41, 56, 64, -81, 112, 81, -72, -36, -2, 82, -56, -50, 98, 7, -85,
+        -71, -81, -119, -46, 6, -124, 124, -73, 109, -43, -69, 36, 7, -85, 65, -112, -21, -30, 86, 29,
+        117, -9, -73, -119, -5, -101, 88, -63, 26, -21, 121, -38, 22, Byte.MIN_VALUE, -56, 15, 118, -41, 91, 87,
+        114, -76, -39, 6, -86, 93, -116, -82, 82, -36, 61, 126, -107, 115, -39, -64, 42, -115, -12, -100,
+        87, 80, -6, -71, -23, -124, -54, -117, -72, 92, Byte.MIN_VALUE, 45, -22, -98, Byte.MIN_VALUE, -34, 110, 90, 46, -24,
+        -5, 53, 11, 88, -45, -12, 30, -89, 97, -54, -94, -36, -108, -86, -16, -51, -36, 46, -57, -126,
+        -15, -6, -62, 37, -113, -81, 113, 55, 116, 29, -31, 96, 28, -85, 34, -55, -45, 48, -66, 60,
+        -58, 93, 91, -91, -30, 124, -73, 27, 88, -53, -81, 105, -71, 66, 52, 110, 55, 101, -64, -14,
+        82, -58, -79, -4, 122, -34, -83, 2, -90, 104, 55, -11, 47, 32, -97, -97, 69, 126, 75, -25,
+        -52, -115, -4, -35, -98, -110, 80, 61, -108, 105, -84, -84, -123, 61, -49, 98, -103, -35, 12, 109,
+        -94, -107, 102, -98, -10, 67, 56, -57, 16, 29, -125, -21, -8, -98, -105, 95, 33, 101, 39, -77,
+        88, 77, 97, 30, -101, 118, 87, 84, -95, 26, -66, -74, 80, -74, -9, 11, 82, 91, -117, -107,
+        -38, -61, 60, 32, -104, 111, 106, 102, 20, -85, -40, -29, -102, 9, 116, -21, -76, -53, 35, 63,
+        -31, -5, 69, 2, 40, -117, -116, -9, 92, -78, 33, 123, 43, -93, 88, -125, 107, 60, -33, -58,
+        57, -41, -51, -125, -105, 89, -8, -33, -60, 12, -108, 14, 118, 49, 63, 114, -123, 65, -84, -99,
+        84, -106, -38, 77, 93, -102, 45, 121, 72, -103, -32, -73, 123, 119, 33, -51, 56, -64, 28, -106,
+        -51, -97, 74, 43, 13, -70, -85, -113, -97, -104, 34, -46, -121, -84, 72, 82, -33, -113, 57, -84,
+        -62, 69, -44, 70, -48, -38, -114, -3, 25, 85, -36, -66, 32, 6, 0, 116, -73, -58, 61, -69,
+        -113, 41, 44, -57, 100, 19, -59, 95, -102, 43, -109, -7, 69, 105, 92, -91, 28, -64, 106, 50,
+        -22, -85, -85, 13, 38, 51, 48, -42, -20, 59, -81, -44, 104, -48, 105, 62, -36, -67, 123, -9,
+        -121, 90, -99, -95, 17, 123, 59, 33, -24, 111, 119, 48, -124, 85, -105, 72, -75, 3, 0, 41,
+        1, 71, 93, 84, 64, -89, -108, -22, -107, -65, 62, -13, -52, 27, 111, -66, -7, -30, -72, 33,
+        15, -25, 48, 115, -100, 29, -40, 107, 114, 30, 11, Byte.MAX_VALUE, 113, 69, 86, 97, 73, 73, 73, 113,
+        -42, -118, -105, 34, 30, -34, -120, 123, 101, 72, 62, -58, 16, -42, -36, 34, -54, 41, 0, 87,
+        -81, -46, -127, -23, 45, -39, -13, 95, 94, -99, 10, 57, -67, -38, 63, 66, 77, -65, -1, 5,
+        85, 35, 111, 122, -1, -38, -119, -50, -38, -9, 123, -123, 99, 30, -108, -96, 89, -62, 12, 86,
+        -19, -51, -34, 100, -95, -5, -97, -44, 44, -4, 91, -34, 117, -109, 70, -57, 95, -120, 80, -47,
+        -84, Byte.MIN_VALUE, -97, 79, 121, -63, -43, -104, -18, -56, -52, -119, 88, 7, 6, 89, -122, 52, 49, -126,
+        53, 63, -97, 78, -91, -127, 67, -127, 95, 117, 63, 1, -52, 113, 41, -114, -50, -69, 25, -48,
+        -14, 96, 92, -99, -21, 86, -58, 113, 97, -58, 112, -116, -25, 11, 108, -4, 7, 19, 88, 77,
+        -3, -23, 89, -35, -18, 102, 7, 103, 86, 4, -10, 114, 52, 24, -18, -18, -46, -25, 110, -86,
+        61, 95, 123, -51, -31, -63, -1, -68, -93, -38, -5, -83, 43, 38, -103, -125, 1, -84, -46, 85,
+        116, -118, -64, 71, -9, -72, -35, -38, -13, -79, 2, -77, 51, 6, -122, -48, -50, 26, -40, -76,
+        32, -52, -39, 91, 25, -72, -96, -21, 45, 57, 54, 88, -17, -67, 86, -38, 62, 6, -80, -106,
+        106, 105, 20, 44, -45, 29, 93, -18, -41, -123, 13, -109, 86, 116, 109, -111, -41, -32, 109, -74,
+        36, -119, -66, 21, -99, -3, -27, -80, 63, 102, 66, -69, 14, -122, -65, -19, -21, 117, -87, -123,
+        -102, -89, 28, -76, -79, 28, 3, 104, -20, -49, -125, -20, -50, -9, 25, -102, -106, -74, 101, 106,
+        110, 103, -115, -71, -28, -113, 55, 41, -72, -67, -53, -46, -24, -24, -50, 121, -29, -82, 121, -35,
+        -111, -31, -3, 101, -89, 92, -90, -115, -11, -49, -123, 116, 106, 97, -97, -50, 3, -8, 86, 119,
+        100, -86, -53, 2, -63, -54, 12, -84, 107, 63, -48, 121, -14, 64, 69, -105, -111, -5, -89, 93,
+        -109, -3, -124, -9, 13, -30, -10, -113, 105, 99, -7, 87, -45, -40, -37, 95, -43, -65, -77, 96,
+        93, -51, 84, 103, 77, -84, 29, -126, 113, 109, -48, 63, 101, 115, 56, 108, -51, 109, -79, -94,
+        11, 86, -20, 23, -97, 125, -10, -39, -89, -85, -37, 98, -76, -65, -9, -5, -12, -75, -29, -23,
+        98, 29, 15, -91, 83, -80, 10, -26, 95, -67, -48, -34, -85, -103, -102, -41, 121, -11, 1, 24,
+        -5, -107, 97, 119, -97, -72, -72, -72, -40, -114, 24, 61, 48, 44, 44, -84, -19, -89, -23, -45,
+        -29, 90, 99, -18, 60, 103, -52, 93, 49, 1, -29, 92, -100, -66, -75, 52, -79, -78, 10, -24,
+        96, 125, 56, -21, -77, 29, -19, -79, 107, 82, 103, -29, -46, -98, 43, 103, 76, 15, -88, -63,
+        -72, -24, -26, 81, -37, -74, 116, -60, 54, -73, 49, 107, 45, -112, -65, -1, -22, -35, -123, -41,
+        -83, -95, -121, 101, -5, 27, -99, -19, -41, 96, -112, -115, -2, -93, 8, 76, 106, -29, -103, -79,
+        96, -63, -126, 121, 87, 35, 54, 6, -89, 100, -19, Byte.MAX_VALUE, 104, -57, 54, -113, 49, -7, 19, 32,
+        Byte.MAX_VALUE, -6, -105, 87, 55, 26, -116, -73, 92, -95, -123, 117, 57, -98, -42, 32, 14, -122, -83, -36,
+        113, 109, 116, -51, -48, -82, -2, 69, 56, -59, -42, -4, -105, 45, 30, -83, -74, -36, 105, 36,
+        Byte.MAX_VALUE, 59, 123, -10, 55, -17, 82, -5, -28, 9, 90, 88, 95, 126, Byte.MIN_VALUE, -39, 111, -4, -41, -17,
+        -19, -3, -9, 81, 61, -28, 104, 73, 63, -68, -117, 79, 124, -33, 35, -42, -122, -111, 22, -14,
+        -25, -77, 103, -2, -41, -53, 38, -74, -112, 22, 86, 92, 57, 94, -111, -6, -27, 76, 123, 123,
+        65, -60, -68, -68, -53, -19, -35, 15, -46, -30, 97, -87, 7, -18, -14, 96, -75, 43, -84, Byte.MIN_VALUE,
+        -4, -3, -57, -77, 103, -49, -4, -18, -35, -124, -23, 92, 58, 88, -74, -101, -15, -58, 111, 112,
+        -10, -20, 15, -19, 63, 53, 4, -68, -20, -90, -123, -39, 113, 107, 62, 110, -27, 78, -72, -85,
+        -25, 86, 107, -57, -88, 104, 32, -1, 115, -42, -119, -11, -109, 119, 21, 124, 36, 29, -84, 47,
+        49, -89, 6, 126, 114, -90, -13, -41, -114, 69, -71, -16, -25, -73, -72, -56, -38, -114, 119, 6,
+        102, 98, 63, 103, 97, -50, -124, 109, 61, 112, 109, -103, 28, -17, -68, -12, -1, -100, 113, 106,
+        -3, -32, 85, -47, -126, -92, -45, 52, -80, 38, 99, -75, -64, -28, 111, 63, 56, -45, -7, 99,
+        71, 2, 26, -45, -1, -76, 100, -41, 117, 89, -37, -79, 101, -60, 29, -121, 105, -12, 73, -84,
+        -117, -126, 86, -69, -45, -38, -79, 33, 40, -79, -11, 33, -37, 106, 117, -10, -69, -1, -13, -82,
+        11, -73, 20, 31, -53, -10, 23, -68, -91, -65, -97, 90, 19, -6, -35, Byte.MAX_VALUE, -2, 72, -126, 38,
+        36, 108, 73, -41, 62, -47, -90, 13, -79, -14, 116, 122, 19, -15, 80, 20, -16, -68, -21, 103,
+        -30, -106, -105, 3, -38, -5, -93, 56, 88, 6, 63, 124, -84, -17, -89, -32, -27, -24, -69, -42,
+        116, -98, -3, -91, 115, 90, -77, 124, -31, -72, -80, -5, -90, -51, 90, 54, Byte.MAX_VALUE, -39, -21, -45,
+        38, -36, -7, 64, -30, 110, -38, 71, 116, -126, 105, -29, -67, -9, -51, -33, 118, 77, -111, -35,
+        -79, 107, -37, -78, -121, 6, -81, 51, -76, -33, -121, -74, 59, -10, -125, 119, -17, 25, 65, 64,
+        45, 54, 86, 41, -34, 28, -54, Byte.MAX_VALUE, -37, 110, -22, -39, 107, -98, -37, -124, 89, -109, -7, -42,
+        -56, -104, -24, -60, -52, 79, 12, 22, 43, 35, -53, 59, 102, 85, -60, 77, 35, -26, 110, -72,
+        -38, -123, -37, -14, -14, -120, -101, 66, -117, -82, 118, -94, Byte.MAX_VALUE, -5, -15, -52, -103, -17, -2, -21,
+        -27, 45, 72, -33, -121, -115, -75, 30, -17, -20, -123, 118, -84, 51, 63, -69, 88, -35, -93, -65,
+        -60, 119, -51, -14, -114, 49, 63, 113, 72, -24, -67, 99, 90, -29, -34, -16, 33, 9, 5, -41,
+        110, -17, -3, -11, 87, -81, -81, -88, -103, -119, -115, -11, 18, -26, 113, 4, 63, -74, 105, -3,
+        -121, -109, -27, -43, 22, -109, 65, 87, 85, 85, -91, 51, 52, 88, 25, -72, 15, -60, -88, 43,
+        -72, 88, -111, -104, 103, -126, -76, 61, 13, Byte.MAX_VALUE, 38, 125, 49, -98, -84, -57, -60, -70, -16, 48,
+        -10, -103, 32, -65, -4, -14, -101, 79, 90, -111, 11, -65, -57, -60, -38, -69, 14, 72, -79, -59,
+        71, -59, -104, 88, -49, Byte.MAX_VALUE, 46, 62, -84, -61, 11, 48, -79, 122, 85, -117, 15, -85, -6, 17,
+        60, -84, 75, -67, -20, -94, -77, 34, 45, 125, -15, -80, -114, 69, -120, 16, 11, 6, -100, -61,
+        -62, -38, 35, -62, -10, -99, -124, -108, 98, 44, -84, 53, 42, 49, 98, 41, -25, 99, 97, -67,
+        80, 35, 70, 44, -51, 8, 28, 44, -57, -40, 22, 82, -124, 88, -90, 91, 112, -80, -102, -98,
+        16, 97, -63, 34, 73, -69, Byte.MAX_VALUE, 19, 6, -42, -59, -65, -117, 18, 11, -18, -1, 30, 3, -85,
+        126, 54, 41, 74, -84, -39, -57, 48, -80, -2, -67, 80, -100, 37, -21, -35, 18, 12, -84, 19,
+        31, -120, -77, 100, -87, -10, 97, 96, 21, 43, -59, -119, 85, -108, -121, -127, -75, -9, 35, 81,
+        98, -111, -43, -17, 97, 96, 109, 80, -117, 19, -53, -80, 24, 7, -21, -112, 56, -79, -116, 43,
+        48, -80, -34, -48, -119, 19, -53, -12, 6, 6, -42, 84, 9, 75, -62, -14, -120, -11, 38, 14,
+        -42, 41, 113, 98, 53, 62, -125, -127, 117, -81, 81, -100, 88, -106, -31, 24, 88, -63, 102, -111,
+        98, 69, 74, 88, 18, -106, -124, 37, 97, 73, 88, 18, -106, -124, -123, -127, -11, Byte.MIN_VALUE, 65, -62,
+        -110, -122, 59, 30, -62, -4, -92, -124, 37, -115, 13, 5, 51, -21, -16, -26, 97, -87, 100, 73,
+        -45, -54, 30, -62, -80, 76, -62, -94, -114, -123, 51, 7, 47, -42, -91, 48, 21, -50, 82, 88,
+        -55, 110, 9, -117, 50, 86, -99, 88, -105, -17, 75, 113, 54, -122, -92, -118, -77, 100, -67, 118,
+        68, -38, 69, 67, 25, 107, -36, 9, 12, -84, -53, -49, -120, 115, 51, -37, -83, 23, 48, -80,
+        108, 19, -60, -120, 5, 102, -84, 109, -110, -114, -79, 38, 49, 110, -64, 61, 21, -124, -75, 91,
+        121, -27, 65, 105, 107, 55, 101, -84, -68, -51, 98, -60, 90, -72, 15, 11, -21, -56, 72, 49,
+        -66, -114, 50, -28, 52, 22, 86, -99, 92, -124, 88, 4, -26, -117, 78, -88, -105, 65, -124, -81,
+        -48, -115, -63, -60, -118, 21, -29, -53, -103, 111, 98, 98, 109, 18, -31, 107, 97, 69, -5, 48,
+        -79, -50, 63, 38, 62, -84, -27, 39, 112, -113, 42, -120, 22, -33, -46, -31, 20, -36, -93, 10,
+        -48, 84, -15, 45, 29, -58, 98, 31, -126, -127, 121, -68, -118, 15, -9, -78, -76, 47, 96, 31,
+        -81, 82, -100, 35, -78, 70, 11, -46, -13, -80, -79, 78, 78, 20, 27, 86, -65, -45, -8, -121,
+        -115, 5, -119, 11, 11, 12, 114, 26, -57, -40, 77, 59, 36, 42, 45, -8, -120, -58, 49, 118,
+        -88, 80, 92, 61, 45, 72, -86, -96, -127, -27, -112, 19, 98, -62, 50, 79, 116, -48, 57, -44,
+        53, -74, 92, 76, 88, -6, -23, -76, 78, -64, 61, -112, 35, -86, 38, 107, 15, 45, -84, -117,
+        -15, 86, 17, 97, 77, -87, -28, -15, -120, 115, 31, -77, 34, 110, -79, -47, 59, 60, Byte.MAX_VALUE, -3,
+        126, 46, -97, -121, 12, 31, 55, -23, -27, 47, -49, -99, 79, -13, 75, 3, -57, 67, Byte.MIN_VALUE, 19,
+        36, -46, -46, 104, 52, -24, 85, 69, -83, 113, -48, 96, 48, -103, 9, -18, -47, 110, -93, -5,
+        89, 6, -44, 71, 15, 108, 67, -39, -51, -22, -20, 68, 69, -62, -100, -44, 69, -71, -7, -83,
+        -79, 57, 53, 117, -114, 34, 38, 85, 121, -118, -28, -44, 75, 59, 6, -47, -59, -38, -16, 54,
+        -69, 9, -122, 6, -27, 32, -71, 34, 71, 11, -42, 46, -97, -59, -122, 22, 107, 75, -7, -94,
+        16, -65, 100, 45, -121, 92, -37, -9, -48, -58, 114, 12, 50, -77, 87, -90, 44, -102, -4, -124,
+        -120, -12, 50, -85, 29, 92, 125, 20, -47, 110, 84, -58, 68, 46, 82, -101, 56, 2, -101, -46,
+        68, 27, 11, -51, -45, -79, 69, 101, 76, 11, 78, 57, 88, -45, -61, -9, 120, -99, -51, -106,
+        -87, 42, 61, 80, 81, -59, 1, 23, -104, -58, -38, -24, 99, -107, 102, -80, -110, 82, -30, 104,
+        66, -17, 76, 51, 5, 5, Byte.MIN_VALUE, -94, -64, -88, 67, 22, -42, -79, -46, 60, -42, 66, 10, 88,
+        -105, -62, Byte.MIN_VALUE, -7, 66, 101, 88, 21, -99, -94, 38, 40, 22, 24, Byte.MIN_VALUE, -14, -12, -24, -75, 122,
+        86, -117, 23, -104, -27, -51, 12, 96, -95, 105, 74, 96, -70, -60, 39, 7, 40, -51, -34, 93,
+        -76, 37, -33, 47, -115, -51, 99, -11, 32, -121, -62, 119, 70, 41, 96, -99, 11, 102, 50, -111,
+        64, 84, -91, -123, -25, -72, 44, 37, 0, -18, -113, 65, 119, -2, 73, 118, -56, -94, 42, -42,
+        62, 79, 77, 12, 103, -26, 51, -93, 104, -70, -118, -63, 35, -36, 15, 70, -60, -105, 119, -5,
+        12, 104, -101, -113, -35, 82, 83, -90, -54, 77, 79, 79, -49, 84, 29, 52, -72, 16, -125, -58,
+        50, 69, -116, -50, -50, 14, -105, -10, 85, -60, 12, -42, -71, 4, 43, 83, -91, 74, 23, 17,
+        -34, -67, -109, 75, -104, 107, -54, -42, -50, -119, -111, -53, -3, -94, 19, 50, 91, 123, -91, -15,
+        10, -71, 44, 42, 109, -65, -63, 76, 92, 119, 70, 35, -108, -11, -98, -61, -54, 6, 12, -26,
+        62, -115, -20, -120, 51, 49, -45, -84, -85, 20, 9, -27, 46, 106, 88, -74, 34, 121, -107, 82,
+        -83, 49, -127, -3, 106, 45, -76, 19, 90, 85, -10, 28, 69, 66, -78, -23, -6, 107, 40, 35,
+        -34, 98, 126, 76, 1, -90, -37, 109, 12, 97, 81, -3, -100, -69, -121, 4, -43, 4, 39, 24,
+        92, 22, 81, -62, -11, 56, 16, 90, 8, 115, 99, -9, -29, 63, -119, -125, -127, -117, -104, 126,
+        48, -62, -93, -123, -120, 41, -84, -53, -2, 102, -102, -87, 3, -78, 42, 45, -124, -95, -90, 15,
+        90, 22, -123, 42, 27, 25, -27, -86, 9, 64, -116, 97, -95, -99, 41, -12, -46, 6, 6, 69,
+        100, -103, -107, -71, -57, -124, 97, -35, -96, 124, 38, 75, 87, -58, 23, 12, 98, -95, -63, 53,
+        116, -46, 66, -84, -107, 23, 49, 91, 113, Byte.MIN_VALUE, -120, 9, 101, -82, -91, -73, -116, 111, 102, 18,
+        -117, -58, 66, 62, 88, -14, 35, 50, 27, -104, 111, -109, 15, -59, -92, 104, -103, -39, -57, 9,
+        -39, 91, 17, -109, 88, -105, -79, -57, 60, -96, -14, -53, 110, 96, -27, 105, 79, 28, 13, 72,
+        109, 97, -30, -55, 99, -110, -37, 24, -59, 66, -21, -45, 113, -110, 5, 80, -107, 24, -55, -38,
+        40, 5, 96, 109, -24, 126, 11, -19, -85, -61, 43, 59, 17, -77, 88, -56, 15, -93, 119, 3,
+        53, -119, -118, -14, 22, 54, 71, 116, -6, -12, 72, 21, -35, 62, -67, -31, 94, -60, 52, 86,
+        69, -110, -9, -97, -109, -49, 15, 40, 96, 123, 34, -54, -39, 123, 123, -100, -34, 107, 51, -16,
+        118, 41, -29, 88, 104, -110, 119, -33, 74, 1, 40, 122, 60, -83, -111, -125, 73, 59, -40, 31,
+        -71, -42, 72, -29, -61, -32, -43, 119, -38, -104, -57, 58, 50, -52, -18, 85, 5, 9, 79, 52,
+        114, 51, 29, 12, -106, -126, -64, 92, -20, -25, 34, -12, -83, 64, -52, 99, -95, 81, -44, -5,
+        74, 96, -54, 14, 80, 115, -73, -44, 0, -90, -104, 72, -36, -39, 27, -27, 12, -60, 6, -42,
+        -91, -66, 13, 84, 107, -58, -26, -16, 28, -126, -37, -59, -39, -93, -118, 120, -100, -89, 46, 88,
+        -17, -65, -64, 10, 22, -38, -73, -111, 90, 2, -86, -126, -25, 112, -65, -88, 12, 7, -3, 48,
+        58, -50, -80, 106, 43, 98, 7, -85, 121, 4, -123, -18, 3, -24, -105, 71, -106, -13, -79,
+        0, 15, -106, -76, -88, 34, 47, -5, 41, -96, 13, 106, 102, 9, 11, 125, -29, 113, 45, 31, 32,
+        51, 80, 69, -16, -77, 89, 1, 72, 125, 74, -72, 119, -33, -15, 38, -62, -49, 35, -74, -80,
+        -48, -85, 61, Byte.MAX_VALUE, -5, 25, 90, -76, -95, -119, -64, -29, -50, 74, 40, 15, 88, -21, -59, -102,
+        48, 40, -41, 32, -10, -80, 28, 99, 76, 61, 118, 16, -29, 21, 26, 126, 55, -95, 2, -111,
+        31, -107, 73, -11, 118, 65, 67, 88, 19, -117, 88, -88, 116, -92, -5, -124, 64, -90, 92, 45,
+        Byte.MIN_VALUE, -17, 26, 17, -23, 84, 123, 45, 16, -4, 21, 98, 19, 11, -51, 114, 91, 17, 33, 59,
+        -115, 16, -60, -34, 102, -69, 46, 58, -75, -118, 74, 74, -42, 45, 64, -20, 98, 57, -18, 113,
+        -5, 62, -113, -123, 20, 72, 64, -117, 38, -100, -62, -85, -110, -6, 88, 27, -53, 88, -88, 46,
+        -38, 23, 118, -103, -126, -25, -17, 20, -61, -35, -57, 16, -37, 88, -104, 51, 91, -36, -9, 35,
+        60, -3, -123, -92, 44, -60, 62, 22, -70, -89, -32, 70, 120, -19, -94, 40, 22, 113, -127, 101,
+        27, -22, -5, 31, -74, 5, -61, -64, 43, -100, 96, -95, 35, 119, -5, -68, 85, 99, -33, -29,
+        -120, 27, 44, -108, 21, -29, -29, 69, -53, -102, -80, 23, 113, -123, -123, -26, 109, -12, 105, 45,
+        -56, Byte.MAX_VALUE, 21, 113, -121, -43, 60, 74, -19, -61, 90, 80, 112, 87, 51, -121, 88, -88, -74, -113,
+        -58, 103, -75, 64, 115, 107, 19, -30, 18, 11, -43, 5, -42, -8, -86, -107, 105, -16, 57, -60,
+        45, 22, 58, 54, -46, 71, -117, 22, 4, 126, -119, -72, -58, 66, 121, -61, 27, 124, -47, -54,
+        28, -67, 7, 113, -113, -123, -66, 120, -50, 7, -117, -107, 61, 97, 31, -30, 3, 11, 45, 94,
+        14, -66, 86, 21, 33, 113, 22, -30, 7, 11, -83, 124, -50, -73, -34, 115, 5, 72, -7, 7,
+        -30, 11, 11, -67, -18, 91, -25, 47, -61, -86, -7, -120, 63, 44, -37, -52, 20, 31, 42, 91,
+        -42, -92, -7, 54, 30, -79, 16, -38, -12, 28, -8, 76, 29, 76, -38, 68, 51, -77, 116, -79,
+        -48, 50, -97, 105, -27, 19, 95, 71, 124, 99, -95, -107, -113, -7, -60, -87, 34, -60, 99, 89,
+        -120, Byte.MAX_VALUE, 44, -12, 113, -108, 15, 20, 45, 8, -35, -119, -124, Byte.MIN_VALUE, -123, -10, -124, -22, 5, -50,
+        5, -6, 97, 121, 72, 24, 88, -24, 100, -96, 86, -48, 90, -96, -23, -9, 45, 18, 10, 22,
+        58, -33, -89, 76, -56, 86, -121, -4, -49, 35, -31, 96, -95, -38, -55, -21, -124, -6, 80, 4,
+        120, 123, 122, 29, 18, 18, 22, -78, 45, -119, 18, 104, -9, -44, 50, 124, 30, 67, 121, 100,
+        12, 11, -95, -68, 97, 58, 1, -106, 45, -48, -115, -52, 67, -62, -61, 66, -57, -121, 102, -125,
+        -32, -86, 96, 78, -65, -109, 72, -120, 88, 8, -115, 74, 52, 11, -118, 11, -120, 57, 19, 28,
+        72, -96, 88, 40, 111, -112, -112, 86, 125, 64, 29, -70, -121, -47, -20, 49, -117, -123, -102, -18,
+        -55, 16, -116, 22, -84, -69, -21, 18, 18, 50, 22, 114, -52, 31, 41, -120, 14, 42, Byte.MIN_VALUE, 118,
+        -36, -21, 14, 36, 108, 44, 103, 119, 126, 76, -118, 21, -8, 111, -83, -110, -58, 84, 50, -98,
+        53, -26, -79, 16, 122, 63, 64, -57, -13, -34, 82, -48, -9, -37, -60, 66, -58, -40, -64, 66,
+        39, 39, -65, -62, -25, -82, 36, -48, 39, -115, 58, -119, 124, 5, 11, 57, 42, -6, 101, -13,
+        54, -4, -127, -52, -34, 21, 54, -28, 59, 88, 8, 53, -65, 62, 76, -51, -57, -26, 101, 32,
+        14, 15, 91, -42, -52, 82, -90, -40, -62, 66, -24, -36, -46, 33, 42, -82, 75, 23, 64, -39,
+        -16, 37, -25, 88, -53, 18, 123, 88, 8, -43, -10, 87, 24, 57, -43, -126, -102, -119, 65, -89,
+        89, -52, 16, -101, 88, 8, -107, 76, 72, 41, -25, -86, 116, 1, -108, 39, 77, 46, 97, 53,
+        59, -20, 98, 33, -37, -55, -15, 3, -72, -31, -78, -85, -121, 79, 58, -18, 64, -66, -116, -27,
+        -116, 111, -18, 27, -89, 54, -77, -21, 5, 96, -42, -116, 27, -11, 21, -21, 89, 97, 31, 11,
+        -95, -54, -107, 17, 25, 70, -10, -72, -64, 110, -56, -120, 88, 83, -55, 65, 70, -72, -64, 114,
+        -42, -58, 29, 55, 37, -77, -75, 2, 4, 53, -119, -67, -74, 56, 56, -55, 6, 55, 88, -50,
+        40, 124, 106, -36, -10, 42, -122, 15, 75, 118, 94, 77, -69, 125, -54, -40, 66, -82, -14, -64,
+        25, 22, 114, 92, 44, 25, -13, -25, 124, -126, 57, 46, 0, 34, -9, -74, 49, -97, -42, 59,
+        -48, -115, -121, -43, 26, 23, -106, -35, 50, 91, 101, -80, -48, 7, 3, -80, 24, -117, 102, -33,
+        -78, -78, -98, -45, -28, 115, -117, -27, 44, 95, -107, 121, 51, 98, 94, 81, 53, -40, -15, -63,
+        90, 15, -23, 84, -67, 18, 61, 35, -81, -46, -63, 113, -30, -71, -58, 106, 107, -18, -65, -98,
+        43, 11, -55, -44, -31, 113, 1, -24, -14, 35, -28, 51, -66, -74, -15, -112, 112, 62, -80, -38,
+        -106, -126, -74, -114, 29, 51, 59, -29, 115, -115, -63, 74, -19, 59, 12, 109, Byte.MAX_VALUE, -53, -88, -3,
+        -4, -125, -39, -93, -97, -38, 90, -55, 83, -94, -7, -62, 114, -58, -27, -70, -54, -68, -105, -18,
+        -8, -13, -61, 25, -86, -102, -114, 19, 74, -35, 41, 57, -1, -73, 81, -107, -7, -32, 109, -95,
+        111, 108, 59, -15, -17, -53, -4, -91, -104, 71, -84, -114, 58, -7, 77, -34, -28, 62, -2, -125,
+        39, -66, -107, -83, 42, 55, 24, 76, -50, 48, 91, -38, -93, -63, -7, -77, -63, -88, 41, -54,
+        125, 119, -54, -32, 63, -7, 79, -53, -6, -6, 2, -33, 105, -27, 29, -85, 93, -84, -18, 100,
+        105, 113, -34, -42, -59, -117, -33, 112, -58, -72, -56, -74, 24, -2, -94, -13, -25, -59, -117, -77,
+        -14, -118, 75, 43, -21, -102, 5, -111, 76, 97, 96, -7, 72, 72, 88, 18, -106, -124, 37, 97,
+        73, 88, 18, -106, 20, 18, -106, -124, 37, 97, 73, 88, 18, -106, -124, 37, -123, -124, 37, 97,
+        73, 88, 18, -106, -124, 37, 97, 73, 33, 97, 73, 88, 18, -106, -124, -27, 75, -15, -1, 58,
+        -37, -102, -15, 114, -81, 89, -22, 0, 0, 0, 0, 73, 69, 78, 68, -82, 66, 96, -126 };
+}

+ 75 - 0
Day 19/decode.py

@@ -0,0 +1,75 @@
+#!/usr/bin/python
+
+		# document
+		# 		.querySelector('.validate')
+		# 		.addEventListener(
+		# 				'click',
+		# 				function() {
+		# 					var promoCode = document
+		# 							.getElementById('promoCode').value;
+		# 					var strptr = Module._malloc(promoCode.length + 2);
+		# 					Module.writeAsciiToMemory(promoCode, strptr, false);
+        #
+		# 					var retstrptr = Module.ccall('checkPromoCode',
+		# 							'number', [ 'number' ], [ strptr ]);
+        #
+		# 					var retstr = Pointer_stringify(retstrptr);
+		# 					document.getElementById("flag").innerHTML = "<h2>Your flag is</h2><p>"
+		# 							+ retstr + "</p>";
+		# 				});
+        #
+
+# var promoCode = document.getElementById('promoCode').value;
+# var retstrptr = Module.ccall('checkPromoCode', 'number', [ 'number' ], [ strptr ]);
+# var retstr = Pointer_stringify(retstrptr);
+
+# promoCode = ""
+# strptr = [0 for i in range(len(promoCode) + 2)]
+# retstr = hex(strptr)
+#
+#
+# if strptr & 3 == 0:
+#     r2 = trptr
+# else
+
+def ascii(h):
+    return ''.join([chr(int(h[i:i+2], 16)) for i in range(0,len(h),2)])
+
+# def f32(ptr):
+
+
+
+gvar_400 = 'F0BC51F36874F2C1' # 8 Bytes
+gvar_408 = 'E357D1A08AAB8700' # 8 Bytes
+gvar_410 = '2FEB8572F31271DE' # 8 Bytes
+gvar_418 = 'ABABA787'         # 6 Bytes
+gvar_41C = '74FF'             # 2 Bytes
+
+gvars = [gvar_400, gvar_408, gvar_410, gvar_418, gvar_41C]
+r11 = ''.join(gvars)
+r11 = [int(r11[i:i+2], 16) for i in range(0, len(r11), 2)] # 30 Bytes
+r22 = [0 for i in range(15)]                               # 15 Bytes
+r33 = "HV18-TRYH-ARDE-RTRY_HARD_ER!!"
+
+input = [0 for i in range(15)] # ???
+r44 = 0
+r55 = 165
+
+for r59 in range(15):
+    r60 = input[r59] * r55 + 1337
+    r44 = input[r59] + r44 + r60
+    r61 = r60 % 255
+    r22[r59] = r61
+    r55 = r61
+
+print(r44)
+
+result = []
+for i in range(30):
+    var142 = r11[i]
+    var153 = r22[i%15]
+    result.append(chr(var142 ^ var153))
+
+print(''.join(result))
+
+# F0 ^ r55 = 48

+ 63 - 0
Day 19/decode_new.py

@@ -0,0 +1,63 @@
+#!/usr/bin/python
+
+gvar_400 = "217A1F180C53651F" # 8 Bytes
+gvar_408 = "3D597206213A4104" # 8 Bytes
+gvar_410 = "695676183C433A2B" # 8 Bytes
+gvar_418 = "41360D"           # 3 Bytes
+gvar_41C = "745C00"           # 3 Bytes
+gvar_420 = "690000000D"       # 5 Bytes
+gvar_428 = "6E00000038"       # 5 Bytes
+gvar_430 = "370000006F"       # 5 Bytes
+gvar_438 = "290000006B"       # 5 Bytes
+gvar_440 = "3600000008"       # 5 Bytes
+gvar_448 = "1C00000023"       # 5 Bytes
+gvar_450 = "6F0000006E"       # 5 Bytes
+gvar_458 = "2E00000000"       # 1 Byte
+
+def memcpy(dest, src, offset, len):
+    for i in range(len):
+        dest[offset + i] = src[i]
+
+# r22 = char[32]
+# r22[0:7]   = gvar_400
+# r22[8:15]  = gvar_408
+# r22[16:23] = gvar_410
+# r22[24:27] = gvar_418
+# r22[28:31] = gvar_41C
+
+# r33 = char[20]
+# r33[0:4]   = gvar_420
+# r33[5:9]   = gvar_428
+# r33[10:14] = gvar_430
+# r33[15:19] = gvar_438
+# r33[8:12]  = gvar_440
+# r33[10:14] = gvar_448
+# r33[12:16] = gvar_450
+# r33[14:18] = gvar_458
+
+# r42 = "HV18-TRYH-ARDE-RTRY_HARD_ER!!"
+
+r22 = ["0" for i in range(32)]
+r33 = ["0" for i in range(20)]
+r42 = "HV18-TRYH-ARDE-RTRY_HARD_ER!!"
+input = 0
+
+memcpy(r22, gvar_400, 0, 8)
+memcpy(r22, gvar_408, 8, 8)
+memcpy(r22, gvar_410, 16, 8)
+memcpy(r22, gvar_418, 24, 4)
+memcpy(r22, gvar_41C, 28, 4)
+
+memcpy(r33, gvar_400, 0, 5)
+memcpy(r33, gvar_428, 5, 5)
+memcpy(r33, gvar_430, 10, 5)
+memcpy(r33, gvar_438, 15, 5)
+memcpy(r33, gvar_440, 8, 5)
+memcpy(r33, gvar_448, 10, 5)
+memcpy(r33, gvar_450, 12, 5)
+memcpy(r33, gvar_458, 14, 5)
+
+
+r3 = 0
+for r43 in range(0, 15):
+    if

BIN
Day 19/ida-20181219-110218-51.dmp


BIN
Day 19/ida-20181219-112445-57.dmp


BIN
Day 19/promo.id0


BIN
Day 19/promo.id1


+ 2488 - 0
Day 19/promo.js

@@ -0,0 +1,2488 @@
+// The Module object: Our interface to the outside world. We import
+// and export values on it. There are various ways Module can be used:
+// 1. Not defined. We create it here
+// 2. A function parameter, function(Module) { ..generated code.. }
+// 3. pre-run appended it, var Module = {}; ..generated code..
+// 4. External script tag defines var Module.
+// We need to check if Module already exists (e.g. case 3 above).
+// Substitution will be replaced with actual code on later stage of the build,
+// this way Closure Compiler will not mangle it (e.g. case 4. above).
+// Note that if you want to run closure, and also to use Module
+// after the generated code, you will need to define   var Module = {};
+// before the code. Then that object will be used in the code, and you
+// can continue to use Module afterwards as well.
+var Module = typeof Module !== 'undefined' ? Module : {};
+
+// --pre-jses are emitted after the Module integration code, so that they can
+// refer to Module (if they choose; they can also define Module)
+// {{PRE_JSES}}
+
+// Sometimes an existing Module object exists with properties
+// meant to overwrite the default module functionality. Here
+// we collect those properties and reapply _after_ we configure
+// the current environment's defaults to avoid having to be so
+// defensive during initialization.
+var moduleOverrides = {};
+var key;
+for (key in Module) {
+  if (Module.hasOwnProperty(key)) {
+    moduleOverrides[key] = Module[key];
+  }
+}
+
+Module['arguments'] = [];
+Module['thisProgram'] = './this.program';
+Module['quit'] = function(status, toThrow) {
+  throw toThrow;
+};
+Module['preRun'] = [];
+Module['postRun'] = [];
+
+// Determine the runtime environment we are in. You can customize this by
+// setting the ENVIRONMENT setting at compile time (see settings.js).
+
+var ENVIRONMENT_IS_WEB = false;
+var ENVIRONMENT_IS_WORKER = false;
+var ENVIRONMENT_IS_NODE = false;
+var ENVIRONMENT_IS_SHELL = false;
+ENVIRONMENT_IS_WEB = typeof window === 'object';
+ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
+ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;
+ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
+
+if (Module['ENVIRONMENT']) {
+  throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)');
+}
+
+// Three configurations we can be running in:
+// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)
+// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)
+// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)
+
+assert(typeof Module['memoryInitializerPrefixURL'] === 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['pthreadMainPrefixURL'] === 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['cdInitializerPrefixURL'] === 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['filePackagePrefixURL'] === 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead');
+
+// `/` should be present at the end if `scriptDirectory` is not empty
+var scriptDirectory = '';
+function locateFile(path) {
+  if (Module['locateFile']) {
+    return Module['locateFile'](path, scriptDirectory);
+  } else {
+    return scriptDirectory + path;
+  }
+}
+
+if (ENVIRONMENT_IS_NODE) {
+  scriptDirectory = __dirname + '/';
+
+  // Expose functionality in the same simple way that the shells work
+  // Note that we pollute the global namespace here, otherwise we break in node
+  var nodeFS;
+  var nodePath;
+
+  Module['read'] = function shell_read(filename, binary) {
+    var ret;
+      if (!nodeFS) nodeFS = require('fs');
+      if (!nodePath) nodePath = require('path');
+      filename = nodePath['normalize'](filename);
+      ret = nodeFS['readFileSync'](filename);
+    return binary ? ret : ret.toString();
+  };
+
+  Module['readBinary'] = function readBinary(filename) {
+    var ret = Module['read'](filename, true);
+    if (!ret.buffer) {
+      ret = new Uint8Array(ret);
+    }
+    assert(ret.buffer);
+    return ret;
+  };
+
+  if (process['argv'].length > 1) {
+    Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/');
+  }
+
+  Module['arguments'] = process['argv'].slice(2);
+
+  if (typeof module !== 'undefined') {
+    module['exports'] = Module;
+  }
+
+  process['on']('uncaughtException', function(ex) {
+    // suppress ExitStatus exceptions from showing an error
+    if (!(ex instanceof ExitStatus)) {
+      throw ex;
+    }
+  });
+  // Currently node will swallow unhandled rejections, but this behavior is
+  // deprecated, and in the future it will exit with error status.
+  process['on']('unhandledRejection', function(reason, p) {
+    err('node.js exiting due to unhandled promise rejection');
+    process['exit'](1);
+  });
+
+  Module['quit'] = function(status) {
+    process['exit'](status);
+  };
+
+  Module['inspect'] = function () { return '[Emscripten Module object]'; };
+} else
+if (ENVIRONMENT_IS_SHELL) {
+
+
+  if (typeof read != 'undefined') {
+    Module['read'] = function shell_read(f) {
+      return read(f);
+    };
+  }
+
+  Module['readBinary'] = function readBinary(f) {
+    var data;
+    if (typeof readbuffer === 'function') {
+      return new Uint8Array(readbuffer(f));
+    }
+    data = read(f, 'binary');
+    assert(typeof data === 'object');
+    return data;
+  };
+
+  if (typeof scriptArgs != 'undefined') {
+    Module['arguments'] = scriptArgs;
+  } else if (typeof arguments != 'undefined') {
+    Module['arguments'] = arguments;
+  }
+
+  if (typeof quit === 'function') {
+    Module['quit'] = function(status) {
+      quit(status);
+    }
+  }
+} else
+if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
+  if (ENVIRONMENT_IS_WEB) {
+    if (document.currentScript) {
+      scriptDirectory = document.currentScript.src;
+    }
+  } else { // worker
+    scriptDirectory = self.location.href;
+  }
+  // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.
+  // otherwise, slice off the final part of the url to find the script directory.
+  // if scriptDirectory does not contain a slash, lastIndexOf will return -1,
+  // and scriptDirectory will correctly be replaced with an empty string.
+  if (scriptDirectory.indexOf('blob:') !== 0) {
+    scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);
+  } else {
+    scriptDirectory = '';
+  }
+
+
+  Module['read'] = function shell_read(url) {
+      var xhr = new XMLHttpRequest();
+      xhr.open('GET', url, false);
+      xhr.send(null);
+      return xhr.responseText;
+  };
+
+  if (ENVIRONMENT_IS_WORKER) {
+    Module['readBinary'] = function readBinary(url) {
+        var xhr = new XMLHttpRequest();
+        xhr.open('GET', url, false);
+        xhr.responseType = 'arraybuffer';
+        xhr.send(null);
+        return new Uint8Array(xhr.response);
+    };
+  }
+
+  Module['readAsync'] = function readAsync(url, onload, onerror) {
+    var xhr = new XMLHttpRequest();
+    xhr.open('GET', url, true);
+    xhr.responseType = 'arraybuffer';
+    xhr.onload = function xhr_onload() {
+      if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
+        onload(xhr.response);
+        return;
+      }
+      onerror();
+    };
+    xhr.onerror = onerror;
+    xhr.send(null);
+  };
+
+  Module['setWindowTitle'] = function(title) { document.title = title };
+} else
+{
+  throw new Error('environment detection error');
+}
+
+// Set up the out() and err() hooks, which are how we can print to stdout or
+// stderr, respectively.
+// If the user provided Module.print or printErr, use that. Otherwise,
+// console.log is checked first, as 'print' on the web will open a print dialogue
+// printErr is preferable to console.warn (works better in shells)
+// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.
+var out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));
+var err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));
+
+// Merge back in the overrides
+for (key in moduleOverrides) {
+  if (moduleOverrides.hasOwnProperty(key)) {
+    Module[key] = moduleOverrides[key];
+  }
+}
+// Free the object hierarchy contained in the overrides, this lets the GC
+// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.
+moduleOverrides = undefined;
+
+
+
+// {{PREAMBLE_ADDITIONS}}
+
+var STACK_ALIGN = 16;
+
+// stack management, and other functionality that is provided by the compiled code,
+// should not be used before it is ready
+stackSave = stackRestore = stackAlloc = setTempRet0 = getTempRet0 = function() {
+  abort('cannot use the stack before compiled code is ready to run, and has provided stack access');
+};
+
+function staticAlloc(size) {
+  assert(!staticSealed);
+  var ret = STATICTOP;
+  STATICTOP = (STATICTOP + size + 15) & -16;
+  assert(STATICTOP < TOTAL_MEMORY, 'not enough memory for static allocation - increase TOTAL_MEMORY');
+  return ret;
+}
+
+function dynamicAlloc(size) {
+  assert(DYNAMICTOP_PTR);
+  var ret = HEAP32[DYNAMICTOP_PTR>>2];
+  var end = (ret + size + 15) & -16;
+  HEAP32[DYNAMICTOP_PTR>>2] = end;
+  if (end >= TOTAL_MEMORY) {
+    var success = enlargeMemory();
+    if (!success) {
+      HEAP32[DYNAMICTOP_PTR>>2] = ret;
+      return 0;
+    }
+  }
+  return ret;
+}
+
+function alignMemory(size, factor) {
+  if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default
+  var ret = size = Math.ceil(size / factor) * factor;
+  return ret;
+}
+
+function getNativeTypeSize(type) {
+  switch (type) {
+    case 'i1': case 'i8': return 1;
+    case 'i16': return 2;
+    case 'i32': return 4;
+    case 'i64': return 8;
+    case 'float': return 4;
+    case 'double': return 8;
+    default: {
+      if (type[type.length-1] === '*') {
+        return 4; // A pointer
+      } else if (type[0] === 'i') {
+        var bits = parseInt(type.substr(1));
+        assert(bits % 8 === 0);
+        return bits / 8;
+      } else {
+        return 0;
+      }
+    }
+  }
+}
+
+function warnOnce(text) {
+  if (!warnOnce.shown) warnOnce.shown = {};
+  if (!warnOnce.shown[text]) {
+    warnOnce.shown[text] = 1;
+    err(text);
+  }
+}
+
+var asm2wasmImports = { // special asm2wasm imports
+    "f64-rem": function(x, y) {
+        return x % y;
+    },
+    "debugger": function() {
+        debugger;
+    }
+};
+
+
+
+var jsCallStartIndex = 1;
+var functionPointers = new Array(0);
+
+// 'sig' parameter is only used on LLVM wasm backend
+function addFunction(func, sig) {
+  if (typeof sig === 'undefined') {
+    err('warning: addFunction(): You should provide a wasm function signature string as a second argument. This is not necessary for asm.js and asm2wasm, but is required for the LLVM wasm backend, so it is recommended for full portability.');
+  }
+  var base = 0;
+  for (var i = base; i < base + 0; i++) {
+    if (!functionPointers[i]) {
+      functionPointers[i] = func;
+      return jsCallStartIndex + i;
+    }
+  }
+  throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
+}
+
+function removeFunction(index) {
+  functionPointers[index-jsCallStartIndex] = null;
+}
+
+var funcWrappers = {};
+
+function getFuncWrapper(func, sig) {
+  if (!func) return; // on null pointer, return undefined
+  assert(sig);
+  if (!funcWrappers[sig]) {
+    funcWrappers[sig] = {};
+  }
+  var sigCache = funcWrappers[sig];
+  if (!sigCache[func]) {
+    // optimize away arguments usage in common cases
+    if (sig.length === 1) {
+      sigCache[func] = function dynCall_wrapper() {
+        return dynCall(sig, func);
+      };
+    } else if (sig.length === 2) {
+      sigCache[func] = function dynCall_wrapper(arg) {
+        return dynCall(sig, func, [arg]);
+      };
+    } else {
+      // general case
+      sigCache[func] = function dynCall_wrapper() {
+        return dynCall(sig, func, Array.prototype.slice.call(arguments));
+      };
+    }
+  }
+  return sigCache[func];
+}
+
+
+function makeBigInt(low, high, unsigned) {
+  return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));
+}
+
+function dynCall(sig, ptr, args) {
+  if (args && args.length) {
+    assert(args.length == sig.length-1);
+    assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\'');
+    return Module['dynCall_' + sig].apply(null, [ptr].concat(args));
+  } else {
+    assert(sig.length == 1);
+    assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\'');
+    return Module['dynCall_' + sig].call(null, ptr);
+  }
+}
+
+
+function getCompilerSetting(name) {
+  throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work';
+}
+
+var Runtime = {
+  // FIXME backwards compatibility layer for ports. Support some Runtime.*
+  //       for now, fix it there, then remove it from here. That way we
+  //       can minimize any period of breakage.
+  dynCall: dynCall, // for SDL2 port
+  // helpful errors
+  getTempRet0: function() { abort('getTempRet0() is now a top-level function, after removing the Runtime object. Remove "Runtime."') },
+  staticAlloc: function() { abort('staticAlloc() is now a top-level function, after removing the Runtime object. Remove "Runtime."') },
+  stackAlloc: function() { abort('stackAlloc() is now a top-level function, after removing the Runtime object. Remove "Runtime."') },
+};
+
+// The address globals begin at. Very low in memory, for code size and optimization opportunities.
+// Above 0 is static memory, starting with globals.
+// Then the stack.
+// Then 'dynamic' memory for sbrk.
+var GLOBAL_BASE = 1024;
+
+
+// === Preamble library stuff ===
+
+// Documentation for the public APIs defined in this file must be updated in:
+//    site/source/docs/api_reference/preamble.js.rst
+// A prebuilt local version of the documentation is available at:
+//    site/build/text/docs/api_reference/preamble.js.txt
+// You can also build docs locally as HTML or other formats in site/
+// An online HTML version (which may be of a different version of Emscripten)
+//    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
+
+
+
+//========================================
+// Runtime essentials
+//========================================
+
+// whether we are quitting the application. no code should run after this.
+// set in exit() and abort()
+var ABORT = false;
+
+// set by exit() and abort().  Passed to 'onExit' handler.
+// NOTE: This is also used as the process return code code in shell environments
+// but only when noExitRuntime is false.
+var EXITSTATUS = 0;
+
+/** @type {function(*, string=)} */
+function assert(condition, text) {
+  if (!condition) {
+    abort('Assertion failed: ' + text);
+  }
+}
+
+var globalScope = this;
+
+// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
+function getCFunc(ident) {
+  var func = Module['_' + ident]; // closure exported function
+  assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');
+  return func;
+}
+
+var JSfuncs = {
+  // Helpers for cwrap -- it can't refer to Runtime directly because it might
+  // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find
+  // out what the minified function name is.
+  'stackSave': function() {
+    stackSave()
+  },
+  'stackRestore': function() {
+    stackRestore()
+  },
+  // type conversion from js to c
+  'arrayToC' : function(arr) {
+    var ret = stackAlloc(arr.length);
+    writeArrayToMemory(arr, ret);
+    return ret;
+  },
+  'stringToC' : function(str) {
+    var ret = 0;
+    if (str !== null && str !== undefined && str !== 0) { // null string
+      // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0'
+      var len = (str.length << 2) + 1;
+      ret = stackAlloc(len);
+      stringToUTF8(str, ret, len);
+    }
+    return ret;
+  }
+};
+
+// For fast lookup of conversion functions
+var toC = {
+  'string': JSfuncs['stringToC'], 'array': JSfuncs['arrayToC']
+};
+
+
+// C calling interface.
+function ccall(ident, returnType, argTypes, args, opts) {
+  function convertReturnValue(ret) {
+    if (returnType === 'string') return Pointer_stringify(ret);
+    if (returnType === 'boolean') return Boolean(ret);
+    return ret;
+  }
+
+  var func = getCFunc(ident);
+  var cArgs = [];
+  var stack = 0;
+  assert(returnType !== 'array', 'Return type should not be "array".');
+  if (args) {
+    for (var i = 0; i < args.length; i++) {
+      var converter = toC[argTypes[i]];
+      if (converter) {
+        if (stack === 0) stack = stackSave();
+        cArgs[i] = converter(args[i]);
+      } else {
+        cArgs[i] = args[i];
+      }
+    }
+  }
+  var ret = func.apply(null, cArgs);
+  ret = convertReturnValue(ret);
+  if (stack !== 0) stackRestore(stack);
+  return ret;
+}
+
+function cwrap(ident, returnType, argTypes, opts) {
+  return function() {
+    return ccall(ident, returnType, argTypes, arguments, opts);
+  }
+}
+
+/** @type {function(number, number, string, boolean=)} */
+function setValue(ptr, value, type, noSafe) {
+  type = type || 'i8';
+  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
+    switch(type) {
+      case 'i1': HEAP8[((ptr)>>0)]=value; break;
+      case 'i8': HEAP8[((ptr)>>0)]=value; break;
+      case 'i16': HEAP16[((ptr)>>1)]=value; break;
+      case 'i32': HEAP32[((ptr)>>2)]=value; break;
+      case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
+      case 'float': HEAPF32[((ptr)>>2)]=value; break;
+      case 'double': HEAPF64[((ptr)>>3)]=value; break;
+      default: abort('invalid type for setValue: ' + type);
+    }
+}
+
+/** @type {function(number, string, boolean=)} */
+function getValue(ptr, type, noSafe) {
+  type = type || 'i8';
+  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
+    switch(type) {
+      case 'i1': return HEAP8[((ptr)>>0)];
+      case 'i8': return HEAP8[((ptr)>>0)];
+      case 'i16': return HEAP16[((ptr)>>1)];
+      case 'i32': return HEAP32[((ptr)>>2)];
+      case 'i64': return HEAP32[((ptr)>>2)];
+      case 'float': return HEAPF32[((ptr)>>2)];
+      case 'double': return HEAPF64[((ptr)>>3)];
+      default: abort('invalid type for getValue: ' + type);
+    }
+  return null;
+}
+
+var ALLOC_NORMAL = 0; // Tries to use _malloc()
+var ALLOC_STACK = 1; // Lives for the duration of the current function call
+var ALLOC_STATIC = 2; // Cannot be freed
+var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
+var ALLOC_NONE = 4; // Do not allocate
+
+// allocate(): This is for internal use. You can use it yourself as well, but the interface
+//             is a little tricky (see docs right below). The reason is that it is optimized
+//             for multiple syntaxes to save space in generated code. So you should
+//             normally not use allocate(), and instead allocate memory using _malloc(),
+//             initialize it with setValue(), and so forth.
+// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
+//        in *bytes* (note that this is sometimes confusing: the next parameter does not
+//        affect this!)
+// @types: Either an array of types, one for each byte (or 0 if no type at that position),
+//         or a single type which is used for the entire block. This only matters if there
+//         is initial data - if @slab is a number, then this does not matter at all and is
+//         ignored.
+// @allocator: How to allocate memory, see ALLOC_*
+/** @type {function((TypedArray|Array<number>|number), string, number, number=)} */
+function allocate(slab, types, allocator, ptr) {
+  var zeroinit, size;
+  if (typeof slab === 'number') {
+    zeroinit = true;
+    size = slab;
+  } else {
+    zeroinit = false;
+    size = slab.length;
+  }
+
+  var singleType = typeof types === 'string' ? types : null;
+
+  var ret;
+  if (allocator == ALLOC_NONE) {
+    ret = ptr;
+  } else {
+    ret = [typeof _malloc === 'function' ? _malloc : staticAlloc, stackAlloc, staticAlloc, dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
+  }
+
+  if (zeroinit) {
+    var stop;
+    ptr = ret;
+    assert((ret & 3) == 0);
+    stop = ret + (size & ~3);
+    for (; ptr < stop; ptr += 4) {
+      HEAP32[((ptr)>>2)]=0;
+    }
+    stop = ret + size;
+    while (ptr < stop) {
+      HEAP8[((ptr++)>>0)]=0;
+    }
+    return ret;
+  }
+
+  if (singleType === 'i8') {
+    if (slab.subarray || slab.slice) {
+      HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);
+    } else {
+      HEAPU8.set(new Uint8Array(slab), ret);
+    }
+    return ret;
+  }
+
+  var i = 0, type, typeSize, previousType;
+  while (i < size) {
+    var curr = slab[i];
+
+    type = singleType || types[i];
+    if (type === 0) {
+      i++;
+      continue;
+    }
+    assert(type, 'Must know what type to store in allocate!');
+
+    if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
+
+    setValue(ret+i, curr, type);
+
+    // no need to look up size unless type changes, so cache it
+    if (previousType !== type) {
+      typeSize = getNativeTypeSize(type);
+      previousType = type;
+    }
+    i += typeSize;
+  }
+
+  return ret;
+}
+
+// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready
+function getMemory(size) {
+  if (!staticSealed) return staticAlloc(size);
+  if (!runtimeInitialized) return dynamicAlloc(size);
+  return _malloc(size);
+}
+
+/** @type {function(number, number=)} */
+function Pointer_stringify(ptr, length) {
+  if (length === 0 || !ptr) return '';
+  // Find the length, and check for UTF while doing so
+  var hasUtf = 0;
+  var t;
+  var i = 0;
+  while (1) {
+    assert(ptr + i < TOTAL_MEMORY);
+    t = HEAPU8[(((ptr)+(i))>>0)];
+    hasUtf |= t;
+    if (t == 0 && !length) break;
+    i++;
+    if (length && i == length) break;
+  }
+  if (!length) length = i;
+
+  var ret = '';
+
+  if (hasUtf < 128) {
+    var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
+    var curr;
+    while (length > 0) {
+      curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
+      ret = ret ? ret + curr : curr;
+      ptr += MAX_CHUNK;
+      length -= MAX_CHUNK;
+    }
+    return ret;
+  }
+  return UTF8ToString(ptr);
+}
+
+// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns
+// a copy of that string as a Javascript String object.
+
+function AsciiToString(ptr) {
+  var str = '';
+  while (1) {
+    var ch = HEAP8[((ptr++)>>0)];
+    if (!ch) return str;
+    str += String.fromCharCode(ch);
+  }
+}
+
+// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
+// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.
+
+function stringToAscii(str, outPtr) {
+  return writeAsciiToMemory(str, outPtr, false);
+}
+
+// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns
+// a copy of that string as a Javascript String object.
+
+var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;
+function UTF8ArrayToString(u8Array, idx) {
+  var endPtr = idx;
+  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
+  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
+  while (u8Array[endPtr]) ++endPtr;
+
+  if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
+    return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));
+  } else {
+    var u0, u1, u2, u3, u4, u5;
+
+    var str = '';
+    while (1) {
+      // For UTF8 byte structure, see:
+      // http://en.wikipedia.org/wiki/UTF-8#Description
+      // https://www.ietf.org/rfc/rfc2279.txt
+      // https://tools.ietf.org/html/rfc3629
+      u0 = u8Array[idx++];
+      if (!u0) return str;
+      if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }
+      u1 = u8Array[idx++] & 63;
+      if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }
+      u2 = u8Array[idx++] & 63;
+      if ((u0 & 0xF0) == 0xE0) {
+        u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
+      } else {
+        u3 = u8Array[idx++] & 63;
+        if ((u0 & 0xF8) == 0xF0) {
+          u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;
+        } else {
+          u4 = u8Array[idx++] & 63;
+          if ((u0 & 0xFC) == 0xF8) {
+            u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;
+          } else {
+            u5 = u8Array[idx++] & 63;
+            u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;
+          }
+        }
+      }
+      if (u0 < 0x10000) {
+        str += String.fromCharCode(u0);
+      } else {
+        var ch = u0 - 0x10000;
+        str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
+      }
+    }
+  }
+}
+
+// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns
+// a copy of that string as a Javascript String object.
+
+function UTF8ToString(ptr) {
+  return UTF8ArrayToString(HEAPU8,ptr);
+}
+
+// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',
+// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.
+// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.
+// Parameters:
+//   str: the Javascript string to copy.
+//   outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.
+//   outIdx: The starting offset in the array to begin the copying.
+//   maxBytesToWrite: The maximum number of bytes this function can write to the array.
+//                    This count should include the null terminator,
+//                    i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.
+//                    maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.
+// Returns the number of bytes written, EXCLUDING the null terminator.
+
+function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {
+  if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.
+    return 0;
+
+  var startIdx = outIdx;
+  var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.
+  for (var i = 0; i < str.length; ++i) {
+    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
+    // See http://unicode.org/faq/utf_bom.html#utf16-3
+    // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
+    var u = str.charCodeAt(i); // possibly a lead surrogate
+    if (u >= 0xD800 && u <= 0xDFFF) {
+      var u1 = str.charCodeAt(++i);
+      u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);
+    }
+    if (u <= 0x7F) {
+      if (outIdx >= endIdx) break;
+      outU8Array[outIdx++] = u;
+    } else if (u <= 0x7FF) {
+      if (outIdx + 1 >= endIdx) break;
+      outU8Array[outIdx++] = 0xC0 | (u >> 6);
+      outU8Array[outIdx++] = 0x80 | (u & 63);
+    } else if (u <= 0xFFFF) {
+      if (outIdx + 2 >= endIdx) break;
+      outU8Array[outIdx++] = 0xE0 | (u >> 12);
+      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
+      outU8Array[outIdx++] = 0x80 | (u & 63);
+    } else if (u <= 0x1FFFFF) {
+      if (outIdx + 3 >= endIdx) break;
+      outU8Array[outIdx++] = 0xF0 | (u >> 18);
+      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
+      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
+      outU8Array[outIdx++] = 0x80 | (u & 63);
+    } else if (u <= 0x3FFFFFF) {
+      if (outIdx + 4 >= endIdx) break;
+      outU8Array[outIdx++] = 0xF8 | (u >> 24);
+      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);
+      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
+      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
+      outU8Array[outIdx++] = 0x80 | (u & 63);
+    } else {
+      if (outIdx + 5 >= endIdx) break;
+      outU8Array[outIdx++] = 0xFC | (u >> 30);
+      outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63);
+      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);
+      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
+      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
+      outU8Array[outIdx++] = 0x80 | (u & 63);
+    }
+  }
+  // Null-terminate the pointer to the buffer.
+  outU8Array[outIdx] = 0;
+  return outIdx - startIdx;
+}
+
+// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
+// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.
+// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.
+// Returns the number of bytes written, EXCLUDING the null terminator.
+
+function stringToUTF8(str, outPtr, maxBytesToWrite) {
+  assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
+  return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);
+}
+
+// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.
+
+function lengthBytesUTF8(str) {
+  var len = 0;
+  for (var i = 0; i < str.length; ++i) {
+    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
+    // See http://unicode.org/faq/utf_bom.html#utf16-3
+    var u = str.charCodeAt(i); // possibly a lead surrogate
+    if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);
+    if (u <= 0x7F) {
+      ++len;
+    } else if (u <= 0x7FF) {
+      len += 2;
+    } else if (u <= 0xFFFF) {
+      len += 3;
+    } else if (u <= 0x1FFFFF) {
+      len += 4;
+    } else if (u <= 0x3FFFFFF) {
+      len += 5;
+    } else {
+      len += 6;
+    }
+  }
+  return len;
+}
+
+// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
+// a copy of that string as a Javascript String object.
+
+var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;
+function UTF16ToString(ptr) {
+  assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');
+  var endPtr = ptr;
+  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
+  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
+  var idx = endPtr >> 1;
+  while (HEAP16[idx]) ++idx;
+  endPtr = idx << 1;
+
+  if (endPtr - ptr > 32 && UTF16Decoder) {
+    return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));
+  } else {
+    var i = 0;
+
+    var str = '';
+    while (1) {
+      var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
+      if (codeUnit == 0) return str;
+      ++i;
+      // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
+      str += String.fromCharCode(codeUnit);
+    }
+  }
+}
+
+// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
+// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.
+// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.
+// Parameters:
+//   str: the Javascript string to copy.
+//   outPtr: Byte address in Emscripten HEAP where to write the string to.
+//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
+//                    terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.
+//                    maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.
+// Returns the number of bytes written, EXCLUDING the null terminator.
+
+function stringToUTF16(str, outPtr, maxBytesToWrite) {
+  assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!');
+  assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
+  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
+  if (maxBytesToWrite === undefined) {
+    maxBytesToWrite = 0x7FFFFFFF;
+  }
+  if (maxBytesToWrite < 2) return 0;
+  maxBytesToWrite -= 2; // Null terminator.
+  var startPtr = outPtr;
+  var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;
+  for (var i = 0; i < numCharsToWrite; ++i) {
+    // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
+    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
+    HEAP16[((outPtr)>>1)]=codeUnit;
+    outPtr += 2;
+  }
+  // Null-terminate the pointer to the HEAP.
+  HEAP16[((outPtr)>>1)]=0;
+  return outPtr - startPtr;
+}
+
+// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.
+
+function lengthBytesUTF16(str) {
+  return str.length*2;
+}
+
+function UTF32ToString(ptr) {
+  assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!');
+  var i = 0;
+
+  var str = '';
+  while (1) {
+    var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
+    if (utf32 == 0)
+      return str;
+    ++i;
+    // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.
+    // See http://unicode.org/faq/utf_bom.html#utf16-3
+    if (utf32 >= 0x10000) {
+      var ch = utf32 - 0x10000;
+      str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
+    } else {
+      str += String.fromCharCode(utf32);
+    }
+  }
+}
+
+// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
+// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.
+// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.
+// Parameters:
+//   str: the Javascript string to copy.
+//   outPtr: Byte address in Emscripten HEAP where to write the string to.
+//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
+//                    terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.
+//                    maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.
+// Returns the number of bytes written, EXCLUDING the null terminator.
+
+function stringToUTF32(str, outPtr, maxBytesToWrite) {
+  assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!');
+  assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
+  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
+  if (maxBytesToWrite === undefined) {
+    maxBytesToWrite = 0x7FFFFFFF;
+  }
+  if (maxBytesToWrite < 4) return 0;
+  var startPtr = outPtr;
+  var endPtr = startPtr + maxBytesToWrite - 4;
+  for (var i = 0; i < str.length; ++i) {
+    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
+    // See http://unicode.org/faq/utf_bom.html#utf16-3
+    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
+    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
+      var trailSurrogate = str.charCodeAt(++i);
+      codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
+    }
+    HEAP32[((outPtr)>>2)]=codeUnit;
+    outPtr += 4;
+    if (outPtr + 4 > endPtr) break;
+  }
+  // Null-terminate the pointer to the HEAP.
+  HEAP32[((outPtr)>>2)]=0;
+  return outPtr - startPtr;
+}
+
+// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.
+
+function lengthBytesUTF32(str) {
+  var len = 0;
+  for (var i = 0; i < str.length; ++i) {
+    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
+    // See http://unicode.org/faq/utf_bom.html#utf16-3
+    var codeUnit = str.charCodeAt(i);
+    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.
+    len += 4;
+  }
+
+  return len;
+}
+
+// Allocate heap space for a JS string, and write it there.
+// It is the responsibility of the caller to free() that memory.
+function allocateUTF8(str) {
+  var size = lengthBytesUTF8(str) + 1;
+  var ret = _malloc(size);
+  if (ret) stringToUTF8Array(str, HEAP8, ret, size);
+  return ret;
+}
+
+// Allocate stack space for a JS string, and write it there.
+function allocateUTF8OnStack(str) {
+  var size = lengthBytesUTF8(str) + 1;
+  var ret = stackAlloc(size);
+  stringToUTF8Array(str, HEAP8, ret, size);
+  return ret;
+}
+
+function demangle(func) {
+  warnOnce('warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling');
+  return func;
+}
+
+function demangleAll(text) {
+  var regex =
+    /__Z[\w\d_]+/g;
+  return text.replace(regex,
+    function(x) {
+      var y = demangle(x);
+      return x === y ? x : (x + ' [' + y + ']');
+    });
+}
+
+function jsStackTrace() {
+  var err = new Error();
+  if (!err.stack) {
+    // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,
+    // so try that as a special-case.
+    try {
+      throw new Error(0);
+    } catch(e) {
+      err = e;
+    }
+    if (!err.stack) {
+      return '(no stack trace available)';
+    }
+  }
+  return err.stack.toString();
+}
+
+function stackTrace() {
+  var js = jsStackTrace();
+  if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace']();
+  return demangleAll(js);
+}
+
+// Memory management
+
+var PAGE_SIZE = 16384;
+var WASM_PAGE_SIZE = 65536;
+var ASMJS_PAGE_SIZE = 16777216;
+var MIN_TOTAL_MEMORY = 16777216;
+
+function alignUp(x, multiple) {
+  if (x % multiple > 0) {
+    x += multiple - (x % multiple);
+  }
+  return x;
+}
+
+var HEAP,
+/** @type {ArrayBuffer} */
+  buffer,
+/** @type {Int8Array} */
+  HEAP8,
+/** @type {Uint8Array} */
+  HEAPU8,
+/** @type {Int16Array} */
+  HEAP16,
+/** @type {Uint16Array} */
+  HEAPU16,
+/** @type {Int32Array} */
+  HEAP32,
+/** @type {Uint32Array} */
+  HEAPU32,
+/** @type {Float32Array} */
+  HEAPF32,
+/** @type {Float64Array} */
+  HEAPF64;
+
+function updateGlobalBuffer(buf) {
+  Module['buffer'] = buffer = buf;
+}
+
+function updateGlobalBufferViews() {
+  Module['HEAP8'] = HEAP8 = new Int8Array(buffer);
+  Module['HEAP16'] = HEAP16 = new Int16Array(buffer);
+  Module['HEAP32'] = HEAP32 = new Int32Array(buffer);
+  Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);
+  Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);
+  Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);
+  Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);
+  Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);
+}
+
+var STATIC_BASE, STATICTOP, staticSealed; // static area
+var STACK_BASE, STACKTOP, STACK_MAX; // stack area
+var DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk
+
+  STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;
+  staticSealed = false;
+
+
+// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
+function writeStackCookie() {
+  assert((STACK_MAX & 3) == 0);
+  HEAPU32[(STACK_MAX >> 2)-1] = 0x02135467;
+  HEAPU32[(STACK_MAX >> 2)-2] = 0x89BACDFE;
+}
+
+function checkStackCookie() {
+  if (HEAPU32[(STACK_MAX >> 2)-1] != 0x02135467 || HEAPU32[(STACK_MAX >> 2)-2] != 0x89BACDFE) {
+    abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x' + HEAPU32[(STACK_MAX >> 2)-2].toString(16) + ' ' + HEAPU32[(STACK_MAX >> 2)-1].toString(16));
+  }
+  // Also test the global address 0 for integrity. This check is not compatible with SAFE_SPLIT_MEMORY though, since that mode already tests all address 0 accesses on its own.
+  if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) throw 'Runtime error: The application has corrupted its heap memory area (address zero)!';
+}
+
+function abortStackOverflow(allocSize) {
+  abort('Stack overflow! Attempted to allocate ' + allocSize + ' bytes on the stack, but stack has only ' + (STACK_MAX - stackSave() + allocSize) + ' bytes available!');
+}
+
+
+function abortOnCannotGrowMemory() {
+  abort('Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ');
+}
+
+
+function enlargeMemory() {
+  abortOnCannotGrowMemory();
+}
+
+
+var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
+var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216;
+if (TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');
+
+// Initialize the runtime's memory
+// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
+assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined,
+       'JS engine does not provide full typed array support');
+
+
+
+// Use a provided buffer, if there is one, or else allocate a new one
+if (Module['buffer']) {
+  buffer = Module['buffer'];
+  assert(buffer.byteLength === TOTAL_MEMORY, 'provided buffer should be ' + TOTAL_MEMORY + ' bytes, but it is ' + buffer.byteLength);
+} else {
+  // Use a WebAssembly memory where available
+  if (typeof WebAssembly === 'object' && typeof WebAssembly.Memory === 'function') {
+    assert(TOTAL_MEMORY % WASM_PAGE_SIZE === 0);
+    Module['wasmMemory'] = new WebAssembly.Memory({ 'initial': TOTAL_MEMORY / WASM_PAGE_SIZE, 'maximum': TOTAL_MEMORY / WASM_PAGE_SIZE });
+    buffer = Module['wasmMemory'].buffer;
+  } else
+  {
+    buffer = new ArrayBuffer(TOTAL_MEMORY);
+  }
+  assert(buffer.byteLength === TOTAL_MEMORY);
+  Module['buffer'] = buffer;
+}
+updateGlobalBufferViews();
+
+
+function getTotalMemory() {
+  return TOTAL_MEMORY;
+}
+
+// Endianness check (note: assumes compiler arch was little-endian)
+  HEAP32[0] = 0x63736d65; /* 'emsc' */
+HEAP16[1] = 0x6373;
+if (HEAPU8[2] !== 0x73 || HEAPU8[3] !== 0x63) throw 'Runtime error: expected the system to be little-endian!';
+
+function callRuntimeCallbacks(callbacks) {
+  while(callbacks.length > 0) {
+    var callback = callbacks.shift();
+    if (typeof callback == 'function') {
+      callback();
+      continue;
+    }
+    var func = callback.func;
+    if (typeof func === 'number') {
+      if (callback.arg === undefined) {
+        Module['dynCall_v'](func);
+      } else {
+        Module['dynCall_vi'](func, callback.arg);
+      }
+    } else {
+      func(callback.arg === undefined ? null : callback.arg);
+    }
+  }
+}
+
+var __ATPRERUN__  = []; // functions called before the runtime is initialized
+var __ATINIT__    = []; // functions called during startup
+var __ATMAIN__    = []; // functions called when main() is to be run
+var __ATEXIT__    = []; // functions called during shutdown
+var __ATPOSTRUN__ = []; // functions called after the main() is called
+
+var runtimeInitialized = false;
+var runtimeExited = false;
+
+
+function preRun() {
+  // compatibility - merge in anything from Module['preRun'] at this time
+  if (Module['preRun']) {
+    if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
+    while (Module['preRun'].length) {
+      addOnPreRun(Module['preRun'].shift());
+    }
+  }
+  callRuntimeCallbacks(__ATPRERUN__);
+}
+
+function ensureInitRuntime() {
+  checkStackCookie();
+  if (runtimeInitialized) return;
+  runtimeInitialized = true;
+  callRuntimeCallbacks(__ATINIT__);
+}
+
+function preMain() {
+  checkStackCookie();
+  callRuntimeCallbacks(__ATMAIN__);
+}
+
+function exitRuntime() {
+  checkStackCookie();
+  callRuntimeCallbacks(__ATEXIT__);
+  runtimeExited = true;
+}
+
+function postRun() {
+  checkStackCookie();
+  // compatibility - merge in anything from Module['postRun'] at this time
+  if (Module['postRun']) {
+    if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
+    while (Module['postRun'].length) {
+      addOnPostRun(Module['postRun'].shift());
+    }
+  }
+  callRuntimeCallbacks(__ATPOSTRUN__);
+}
+
+function addOnPreRun(cb) {
+  __ATPRERUN__.unshift(cb);
+}
+
+function addOnInit(cb) {
+  __ATINIT__.unshift(cb);
+}
+
+function addOnPreMain(cb) {
+  __ATMAIN__.unshift(cb);
+}
+
+function addOnExit(cb) {
+  __ATEXIT__.unshift(cb);
+}
+
+function addOnPostRun(cb) {
+  __ATPOSTRUN__.unshift(cb);
+}
+
+// Deprecated: This function should not be called because it is unsafe and does not provide
+// a maximum length limit of how many bytes it is allowed to write. Prefer calling the
+// function stringToUTF8Array() instead, which takes in a maximum length that can be used
+// to be secure from out of bounds writes.
+/** @deprecated */
+function writeStringToMemory(string, buffer, dontAddNull) {
+  warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');
+
+  var /** @type {number} */ lastChar, /** @type {number} */ end;
+  if (dontAddNull) {
+    // stringToUTF8Array always appends null. If we don't want to do that, remember the
+    // character that existed at the location where the null will be placed, and restore
+    // that after the write (below).
+    end = buffer + lengthBytesUTF8(string);
+    lastChar = HEAP8[end];
+  }
+  stringToUTF8(string, buffer, Infinity);
+  if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.
+}
+
+function writeArrayToMemory(array, buffer) {
+  assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)')
+  HEAP8.set(array, buffer);
+}
+
+function writeAsciiToMemory(str, buffer, dontAddNull) {
+  for (var i = 0; i < str.length; ++i) {
+    assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff);
+    HEAP8[((buffer++)>>0)]=str.charCodeAt(i);
+  }
+  // Null-terminate the pointer to the HEAP.
+  if (!dontAddNull) HEAP8[((buffer)>>0)]=0;
+}
+
+function unSign(value, bits, ignore) {
+  if (value >= 0) {
+    return value;
+  }
+  return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts
+                    : Math.pow(2, bits)         + value;
+}
+function reSign(value, bits, ignore) {
+  if (value <= 0) {
+    return value;
+  }
+  var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
+                        : Math.pow(2, bits-1);
+  if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that
+                                                       // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
+                                                       // TODO: In i64 mode 1, resign the two parts separately and safely
+    value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
+  }
+  return value;
+}
+
+assert(Math['imul'] && Math['fround'] && Math['clz32'] && Math['trunc'], 'this is a legacy browser, build with LEGACY_VM_SUPPORT');
+
+var Math_abs = Math.abs;
+var Math_cos = Math.cos;
+var Math_sin = Math.sin;
+var Math_tan = Math.tan;
+var Math_acos = Math.acos;
+var Math_asin = Math.asin;
+var Math_atan = Math.atan;
+var Math_atan2 = Math.atan2;
+var Math_exp = Math.exp;
+var Math_log = Math.log;
+var Math_sqrt = Math.sqrt;
+var Math_ceil = Math.ceil;
+var Math_floor = Math.floor;
+var Math_pow = Math.pow;
+var Math_imul = Math.imul;
+var Math_fround = Math.fround;
+var Math_round = Math.round;
+var Math_min = Math.min;
+var Math_max = Math.max;
+var Math_clz32 = Math.clz32;
+var Math_trunc = Math.trunc;
+
+// A counter of dependencies for calling run(). If we need to
+// do asynchronous work before running, increment this and
+// decrement it. Incrementing must happen in a place like
+// Module.preRun (used by emcc to add file preloading).
+// Note that you can add dependencies in preRun, even though
+// it happens right before run - run will be postponed until
+// the dependencies are met.
+var runDependencies = 0;
+var runDependencyWatcher = null;
+var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
+var runDependencyTracking = {};
+
+function getUniqueRunDependency(id) {
+  var orig = id;
+  while (1) {
+    if (!runDependencyTracking[id]) return id;
+    id = orig + Math.random();
+  }
+  return id;
+}
+
+function addRunDependency(id) {
+  runDependencies++;
+  if (Module['monitorRunDependencies']) {
+    Module['monitorRunDependencies'](runDependencies);
+  }
+  if (id) {
+    assert(!runDependencyTracking[id]);
+    runDependencyTracking[id] = 1;
+    if (runDependencyWatcher === null && typeof setInterval !== 'undefined') {
+      // Check for missing dependencies every few seconds
+      runDependencyWatcher = setInterval(function() {
+        if (ABORT) {
+          clearInterval(runDependencyWatcher);
+          runDependencyWatcher = null;
+          return;
+        }
+        var shown = false;
+        for (var dep in runDependencyTracking) {
+          if (!shown) {
+            shown = true;
+            err('still waiting on run dependencies:');
+          }
+          err('dependency: ' + dep);
+        }
+        if (shown) {
+          err('(end of list)');
+        }
+      }, 10000);
+    }
+  } else {
+    err('warning: run dependency added without ID');
+  }
+}
+
+function removeRunDependency(id) {
+  runDependencies--;
+  if (Module['monitorRunDependencies']) {
+    Module['monitorRunDependencies'](runDependencies);
+  }
+  if (id) {
+    assert(runDependencyTracking[id]);
+    delete runDependencyTracking[id];
+  } else {
+    err('warning: run dependency removed without ID');
+  }
+  if (runDependencies == 0) {
+    if (runDependencyWatcher !== null) {
+      clearInterval(runDependencyWatcher);
+      runDependencyWatcher = null;
+    }
+    if (dependenciesFulfilled) {
+      var callback = dependenciesFulfilled;
+      dependenciesFulfilled = null;
+      callback(); // can add another dependenciesFulfilled
+    }
+  }
+}
+
+Module["preloadedImages"] = {}; // maps url to image data
+Module["preloadedAudios"] = {}; // maps url to audio data
+
+
+
+var memoryInitializer = null;
+
+
+
+var /* show errors on likely calls to FS when it was not included */ FS = {
+  error: function() {
+    abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with  -s FORCE_FILESYSTEM=1');
+  },
+  init: function() { FS.error() },
+  createDataFile: function() { FS.error() },
+  createPreloadedFile: function() { FS.error() },
+  createLazyFile: function() { FS.error() },
+  open: function() { FS.error() },
+  mkdev: function() { FS.error() },
+  registerDevice: function() { FS.error() },
+  analyzePath: function() { FS.error() },
+  loadFilesFromDB: function() { FS.error() },
+
+  ErrnoError: function ErrnoError() { FS.error() },
+};
+Module['FS_createDataFile'] = FS.createDataFile;
+Module['FS_createPreloadedFile'] = FS.createPreloadedFile;
+
+
+
+// Prefix of data URIs emitted by SINGLE_FILE and related options.
+var dataURIPrefix = 'data:application/octet-stream;base64,';
+
+// Indicates whether filename is a base64 data URI.
+function isDataURI(filename) {
+  return String.prototype.startsWith ?
+      filename.startsWith(dataURIPrefix) :
+      filename.indexOf(dataURIPrefix) === 0;
+}
+
+
+
+
+function integrateWasmJS() {
+  // wasm.js has several methods for creating the compiled code module here:
+  //  * 'native-wasm' : use native WebAssembly support in the browser
+  //  * 'interpret-s-expr': load s-expression code from a .wast and interpret
+  //  * 'interpret-binary': load binary wasm and interpret
+  //  * 'interpret-asm2wasm': load asm.js code, translate to wasm, and interpret
+  //  * 'asmjs': no wasm, just load the asm.js code and use that (good for testing)
+  // The method is set at compile time (BINARYEN_METHOD)
+  // The method can be a comma-separated list, in which case, we will try the
+  // options one by one. Some of them can fail gracefully, and then we can try
+  // the next.
+
+  // inputs
+
+  var method = 'native-wasm';
+
+  var wasmTextFile = 'promo.wast';
+  var wasmBinaryFile = 'promo.wasm';
+  var asmjsCodeFile = 'promo.temp.asm.js';
+
+  if (!isDataURI(wasmTextFile)) {
+    wasmTextFile = locateFile(wasmTextFile);
+  }
+  if (!isDataURI(wasmBinaryFile)) {
+    wasmBinaryFile = locateFile(wasmBinaryFile);
+  }
+  if (!isDataURI(asmjsCodeFile)) {
+    asmjsCodeFile = locateFile(asmjsCodeFile);
+  }
+
+  // utilities
+
+  var wasmPageSize = 64*1024;
+
+  var info = {
+    'global': null,
+    'env': null,
+    'asm2wasm': asm2wasmImports,
+    'parent': Module // Module inside wasm-js.cpp refers to wasm-js.cpp; this allows access to the outside program.
+  };
+
+  var exports = null;
+
+
+  function mergeMemory(newBuffer) {
+    // The wasm instance creates its memory. But static init code might have written to
+    // buffer already, including the mem init file, and we must copy it over in a proper merge.
+    // TODO: avoid this copy, by avoiding such static init writes
+    // TODO: in shorter term, just copy up to the last static init write
+    var oldBuffer = Module['buffer'];
+    if (newBuffer.byteLength < oldBuffer.byteLength) {
+      err('the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here');
+    }
+    var oldView = new Int8Array(oldBuffer);
+    var newView = new Int8Array(newBuffer);
+
+
+    newView.set(oldView);
+    updateGlobalBuffer(newBuffer);
+    updateGlobalBufferViews();
+  }
+
+  function fixImports(imports) {
+    return imports;
+  }
+
+  function getBinary() {
+    try {
+      if (Module['wasmBinary']) {
+        return new Uint8Array(Module['wasmBinary']);
+      }
+      if (Module['readBinary']) {
+        return Module['readBinary'](wasmBinaryFile);
+      } else {
+        throw "both async and sync fetching of the wasm failed";
+      }
+    }
+    catch (err) {
+      abort(err);
+    }
+  }
+
+  function getBinaryPromise() {
+    // if we don't have the binary yet, and have the Fetch api, use that
+    // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web
+    if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {
+      return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {
+        if (!response['ok']) {
+          throw "failed to load wasm binary file at '" + wasmBinaryFile + "'";
+        }
+        return response['arrayBuffer']();
+      }).catch(function () {
+        return getBinary();
+      });
+    }
+    // Otherwise, getBinary should be able to get it synchronously
+    return new Promise(function(resolve, reject) {
+      resolve(getBinary());
+    });
+  }
+
+  // do-method functions
+
+
+  function doNativeWasm(global, env, providedBuffer) {
+    if (typeof WebAssembly !== 'object') {
+      // when the method is just native-wasm, our error message can be very specific
+      abort('No WebAssembly support found. Build with -s WASM=0 to target JavaScript instead.');
+      err('no native wasm support detected');
+      return false;
+    }
+    // prepare memory import
+    if (!(Module['wasmMemory'] instanceof WebAssembly.Memory)) {
+      err('no native wasm Memory in use');
+      return false;
+    }
+    env['memory'] = Module['wasmMemory'];
+    // Load the wasm module and create an instance of using native support in the JS engine.
+    info['global'] = {
+      'NaN': NaN,
+      'Infinity': Infinity
+    };
+    info['global.Math'] = Math;
+    info['env'] = env;
+    // handle a generated wasm instance, receiving its exports and
+    // performing other necessary setup
+    function receiveInstance(instance, module) {
+      exports = instance.exports;
+      if (exports.memory) mergeMemory(exports.memory);
+      Module['asm'] = exports;
+      Module["usingWasm"] = true;
+      removeRunDependency('wasm-instantiate');
+    }
+    addRunDependency('wasm-instantiate');
+
+    // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback
+    // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel
+    // to any other async startup actions they are performing.
+    if (Module['instantiateWasm']) {
+      try {
+        return Module['instantiateWasm'](info, receiveInstance);
+      } catch(e) {
+        err('Module.instantiateWasm callback failed with error: ' + e);
+        return false;
+      }
+    }
+
+    // Async compilation can be confusing when an error on the page overwrites Module
+    // (for example, if the order of elements is wrong, and the one defining Module is
+    // later), so we save Module and check it later.
+    var trueModule = Module;
+    function receiveInstantiatedSource(output) {
+      // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.
+      // receiveInstance() will swap in the exports (to Module.asm) so they can be called
+      assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?');
+      trueModule = null;
+      receiveInstance(output['instance'], output['module']);
+    }
+    function instantiateArrayBuffer(receiver) {
+      getBinaryPromise().then(function(binary) {
+        return WebAssembly.instantiate(binary, info);
+      }).then(receiver).catch(function(reason) {
+        err('failed to asynchronously prepare wasm: ' + reason);
+        abort(reason);
+      });
+    }
+    // Prefer streaming instantiation if available.
+    if (!Module['wasmBinary'] &&
+        typeof WebAssembly.instantiateStreaming === 'function' &&
+        !isDataURI(wasmBinaryFile) &&
+        typeof fetch === 'function') {
+      WebAssembly.instantiateStreaming(fetch(wasmBinaryFile, { credentials: 'same-origin' }), info)
+        .then(receiveInstantiatedSource)
+        .catch(function(reason) {
+          // We expect the most common failure cause to be a bad MIME type for the binary,
+          // in which case falling back to ArrayBuffer instantiation should work.
+          err('wasm streaming compile failed: ' + reason);
+          err('falling back to ArrayBuffer instantiation');
+          instantiateArrayBuffer(receiveInstantiatedSource);
+        });
+    } else {
+      instantiateArrayBuffer(receiveInstantiatedSource);
+    }
+    return {}; // no exports yet; we'll fill them in later
+  }
+
+
+  // We may have a preloaded value in Module.asm, save it
+  Module['asmPreload'] = Module['asm'];
+
+  // Memory growth integration code
+
+  var asmjsReallocBuffer = Module['reallocBuffer'];
+
+  var wasmReallocBuffer = function(size) {
+    var PAGE_MULTIPLE = Module["usingWasm"] ? WASM_PAGE_SIZE : ASMJS_PAGE_SIZE; // In wasm, heap size must be a multiple of 64KB. In asm.js, they need to be multiples of 16MB.
+    size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size
+    var old = Module['buffer'];
+    var oldSize = old.byteLength;
+    if (Module["usingWasm"]) {
+      // native wasm support
+      try {
+        var result = Module['wasmMemory'].grow((size - oldSize) / wasmPageSize); // .grow() takes a delta compared to the previous size
+        if (result !== (-1 | 0)) {
+          // success in native wasm memory growth, get the buffer from the memory
+          return Module['buffer'] = Module['wasmMemory'].buffer;
+        } else {
+          return null;
+        }
+      } catch(e) {
+        console.error('Module.reallocBuffer: Attempted to grow from ' + oldSize  + ' bytes to ' + size + ' bytes, but got error: ' + e);
+        return null;
+      }
+    }
+  };
+
+  Module['reallocBuffer'] = function(size) {
+    if (finalMethod === 'asmjs') {
+      return asmjsReallocBuffer(size);
+    } else {
+      return wasmReallocBuffer(size);
+    }
+  };
+
+  // we may try more than one; this is the final one, that worked and we are using
+  var finalMethod = '';
+
+  // Provide an "asm.js function" for the application, called to "link" the asm.js module. We instantiate
+  // the wasm module at that time, and it receives imports and provides exports and so forth, the app
+  // doesn't need to care that it is wasm or olyfilled wasm or asm.js.
+
+  Module['asm'] = function(global, env, providedBuffer) {
+    env = fixImports(env);
+
+    // import table
+    if (!env['table']) {
+      var TABLE_SIZE = Module['wasmTableSize'];
+      if (TABLE_SIZE === undefined) TABLE_SIZE = 1024; // works in binaryen interpreter at least
+      var MAX_TABLE_SIZE = Module['wasmMaxTableSize'];
+      if (typeof WebAssembly === 'object' && typeof WebAssembly.Table === 'function') {
+        if (MAX_TABLE_SIZE !== undefined) {
+          env['table'] = new WebAssembly.Table({ 'initial': TABLE_SIZE, 'maximum': MAX_TABLE_SIZE, 'element': 'anyfunc' });
+        } else {
+          env['table'] = new WebAssembly.Table({ 'initial': TABLE_SIZE, element: 'anyfunc' });
+        }
+      } else {
+        env['table'] = new Array(TABLE_SIZE); // works in binaryen interpreter at least
+      }
+      Module['wasmTable'] = env['table'];
+    }
+
+    if (!env['memoryBase']) {
+      env['memoryBase'] = Module['STATIC_BASE']; // tell the memory segments where to place themselves
+    }
+    if (!env['tableBase']) {
+      env['tableBase'] = 0; // table starts at 0 by default, in dynamic linking this will change
+    }
+
+    // try the methods. each should return the exports if it succeeded
+
+    var exports;
+    exports = doNativeWasm(global, env, providedBuffer);
+
+    assert(exports, 'no binaryen method succeeded. consider enabling more options, like interpreting, if you want that: http://kripken.github.io/emscripten-site/docs/compiling/WebAssembly.html#binaryen-methods');
+
+
+    return exports;
+  };
+
+  var methodHandler = Module['asm']; // note our method handler, as we may modify Module['asm'] later
+}
+
+integrateWasmJS();
+
+// === Body ===
+
+var ASM_CONSTS = [];
+
+
+
+
+
+STATIC_BASE = GLOBAL_BASE;
+
+STATICTOP = STATIC_BASE + 2768;
+/* global initializers */  __ATINIT__.push();
+
+
+
+
+
+
+
+var STATIC_BUMP = 2768;
+Module["STATIC_BASE"] = STATIC_BASE;
+Module["STATIC_BUMP"] = STATIC_BUMP;
+
+/* no memory initializer */
+var tempDoublePtr = STATICTOP; STATICTOP += 16;
+
+assert(tempDoublePtr % 8 == 0);
+
+function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
+
+  HEAP8[tempDoublePtr] = HEAP8[ptr];
+
+  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
+
+  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
+
+  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
+
+}
+
+function copyTempDouble(ptr) {
+
+  HEAP8[tempDoublePtr] = HEAP8[ptr];
+
+  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
+
+  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
+
+  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
+
+  HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
+
+  HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
+
+  HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
+
+  HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
+
+}
+
+// {{PRE_LIBRARY}}
+
+
+  function ___lock() {}
+
+  
+  var SYSCALLS={varargs:0,get:function (varargs) {
+        SYSCALLS.varargs += 4;
+        var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];
+        return ret;
+      },getStr:function () {
+        var ret = Pointer_stringify(SYSCALLS.get());
+        return ret;
+      },get64:function () {
+        var low = SYSCALLS.get(), high = SYSCALLS.get();
+        if (low >= 0) assert(high === 0);
+        else assert(high === -1);
+        return low;
+      },getZero:function () {
+        assert(SYSCALLS.get() === 0);
+      }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;
+  try {
+   // llseek
+      var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();
+      // NOTE: offset_high is unused - Emscripten's off_t is 32-bit
+      var offset = offset_low;
+      FS.llseek(stream, offset, whence);
+      HEAP32[((result)>>2)]=stream.position;
+      if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state
+      return 0;
+    } catch (e) {
+    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
+    return -e.errno;
+  }
+  }
+
+  
+  function flush_NO_FILESYSTEM() {
+      // flush anything remaining in the buffers during shutdown
+      var fflush = Module["_fflush"];
+      if (fflush) fflush(0);
+      var printChar = ___syscall146.printChar;
+      if (!printChar) return;
+      var buffers = ___syscall146.buffers;
+      if (buffers[1].length) printChar(1, 10);
+      if (buffers[2].length) printChar(2, 10);
+    }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;
+  try {
+   // writev
+      // hack to support printf in NO_FILESYSTEM
+      var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();
+      var ret = 0;
+      if (!___syscall146.buffers) {
+        ___syscall146.buffers = [null, [], []]; // 1 => stdout, 2 => stderr
+        ___syscall146.printChar = function(stream, curr) {
+          var buffer = ___syscall146.buffers[stream];
+          assert(buffer);
+          if (curr === 0 || curr === 10) {
+            (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));
+            buffer.length = 0;
+          } else {
+            buffer.push(curr);
+          }
+        };
+      }
+      for (var i = 0; i < iovcnt; i++) {
+        var ptr = HEAP32[(((iov)+(i*8))>>2)];
+        var len = HEAP32[(((iov)+(i*8 + 4))>>2)];
+        for (var j = 0; j < len; j++) {
+          ___syscall146.printChar(stream, HEAPU8[ptr+j]);
+        }
+        ret += len;
+      }
+      return ret;
+    } catch (e) {
+    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
+    return -e.errno;
+  }
+  }
+
+  function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;
+  try {
+   // ioctl
+      return 0;
+    } catch (e) {
+    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
+    return -e.errno;
+  }
+  }
+
+  function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;
+  try {
+   // close
+      var stream = SYSCALLS.getStreamFromFD();
+      FS.close(stream);
+      return 0;
+    } catch (e) {
+    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
+    return -e.errno;
+  }
+  }
+
+  function ___unlock() {}
+
+  
+  function _emscripten_memcpy_big(dest, src, num) {
+      HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
+      return dest;
+    } 
+
+   
+
+  
+  function ___setErrNo(value) {
+      if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;
+      else err('failed to set errno from JS');
+      return value;
+    } 
+DYNAMICTOP_PTR = staticAlloc(4);
+
+STACK_BASE = STACKTOP = alignMemory(STATICTOP);
+
+STACK_MAX = STACK_BASE + TOTAL_STACK;
+
+DYNAMIC_BASE = alignMemory(STACK_MAX);
+
+HEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;
+
+staticSealed = true; // seal the static portion of memory
+
+assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
+
+var ASSERTIONS = true;
+
+/** @type {function(string, boolean=, number=)} */
+function intArrayFromString(stringy, dontAddNull, length) {
+  var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;
+  var u8array = new Array(len);
+  var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
+  if (dontAddNull) u8array.length = numBytesWritten;
+  return u8array;
+}
+
+function intArrayToString(array) {
+  var ret = [];
+  for (var i = 0; i < array.length; i++) {
+    var chr = array[i];
+    if (chr > 0xFF) {
+      if (ASSERTIONS) {
+        assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ')  at offset ' + i + ' not in 0x00-0xFF.');
+      }
+      chr &= 0xFF;
+    }
+    ret.push(String.fromCharCode(chr));
+  }
+  return ret.join('');
+}
+
+
+
+function nullFunc_ii(x) { err("Invalid function pointer called with signature 'ii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  err("Build with ASSERTIONS=2 for more info.");abort(x) }
+
+function nullFunc_iiii(x) { err("Invalid function pointer called with signature 'iiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  err("Build with ASSERTIONS=2 for more info.");abort(x) }
+
+Module['wasmTableSize'] = 10;
+
+Module['wasmMaxTableSize'] = 10;
+
+function invoke_ii(index,a1) {
+  var sp = stackSave();
+  try {
+    return Module["dynCall_ii"](index,a1);
+  } catch(e) {
+    stackRestore(sp);
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    Module["setThrew"](1, 0);
+  }
+}
+
+function invoke_iiii(index,a1,a2,a3) {
+  var sp = stackSave();
+  try {
+    return Module["dynCall_iiii"](index,a1,a2,a3);
+  } catch(e) {
+    stackRestore(sp);
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    Module["setThrew"](1, 0);
+  }
+}
+
+Module.asmGlobalArg = {};
+
+Module.asmLibraryArg = { "abort": abort, "assert": assert, "enlargeMemory": enlargeMemory, "getTotalMemory": getTotalMemory, "abortOnCannotGrowMemory": abortOnCannotGrowMemory, "abortStackOverflow": abortStackOverflow, "nullFunc_ii": nullFunc_ii, "nullFunc_iiii": nullFunc_iiii, "invoke_ii": invoke_ii, "invoke_iiii": invoke_iiii, "___lock": ___lock, "___setErrNo": ___setErrNo, "___syscall140": ___syscall140, "___syscall146": ___syscall146, "___syscall54": ___syscall54, "___syscall6": ___syscall6, "___unlock": ___unlock, "_emscripten_memcpy_big": _emscripten_memcpy_big, "flush_NO_FILESYSTEM": flush_NO_FILESYSTEM, "DYNAMICTOP_PTR": DYNAMICTOP_PTR, "tempDoublePtr": tempDoublePtr, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX };
+// EMSCRIPTEN_START_ASM
+var asm =Module["asm"]// EMSCRIPTEN_END_ASM
+(Module.asmGlobalArg, Module.asmLibraryArg, buffer);
+
+var real____errno_location = asm["___errno_location"]; asm["___errno_location"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real____errno_location.apply(null, arguments);
+};
+
+var real__checkPromoCode = asm["_checkPromoCode"]; asm["_checkPromoCode"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real__checkPromoCode.apply(null, arguments);
+};
+
+var real__fflush = asm["_fflush"]; asm["_fflush"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real__fflush.apply(null, arguments);
+};
+
+var real__free = asm["_free"]; asm["_free"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real__free.apply(null, arguments);
+};
+
+var real__main = asm["_main"]; asm["_main"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real__main.apply(null, arguments);
+};
+
+var real__malloc = asm["_malloc"]; asm["_malloc"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real__malloc.apply(null, arguments);
+};
+
+var real__sbrk = asm["_sbrk"]; asm["_sbrk"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real__sbrk.apply(null, arguments);
+};
+
+var real_establishStackSpace = asm["establishStackSpace"]; asm["establishStackSpace"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real_establishStackSpace.apply(null, arguments);
+};
+
+var real_getTempRet0 = asm["getTempRet0"]; asm["getTempRet0"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real_getTempRet0.apply(null, arguments);
+};
+
+var real_setTempRet0 = asm["setTempRet0"]; asm["setTempRet0"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real_setTempRet0.apply(null, arguments);
+};
+
+var real_setThrew = asm["setThrew"]; asm["setThrew"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real_setThrew.apply(null, arguments);
+};
+
+var real_stackAlloc = asm["stackAlloc"]; asm["stackAlloc"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real_stackAlloc.apply(null, arguments);
+};
+
+var real_stackRestore = asm["stackRestore"]; asm["stackRestore"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real_stackRestore.apply(null, arguments);
+};
+
+var real_stackSave = asm["stackSave"]; asm["stackSave"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return real_stackSave.apply(null, arguments);
+};
+Module["asm"] = asm;
+var ___errno_location = Module["___errno_location"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["___errno_location"].apply(null, arguments) };
+var _checkPromoCode = Module["_checkPromoCode"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["_checkPromoCode"].apply(null, arguments) };
+var _fflush = Module["_fflush"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["_fflush"].apply(null, arguments) };
+var _free = Module["_free"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["_free"].apply(null, arguments) };
+var _main = Module["_main"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["_main"].apply(null, arguments) };
+var _malloc = Module["_malloc"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["_malloc"].apply(null, arguments) };
+var _memcpy = Module["_memcpy"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["_memcpy"].apply(null, arguments) };
+var _memset = Module["_memset"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["_memset"].apply(null, arguments) };
+var _sbrk = Module["_sbrk"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["_sbrk"].apply(null, arguments) };
+var establishStackSpace = Module["establishStackSpace"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["establishStackSpace"].apply(null, arguments) };
+var getTempRet0 = Module["getTempRet0"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["getTempRet0"].apply(null, arguments) };
+var runPostSets = Module["runPostSets"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["runPostSets"].apply(null, arguments) };
+var setTempRet0 = Module["setTempRet0"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["setTempRet0"].apply(null, arguments) };
+var setThrew = Module["setThrew"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["setThrew"].apply(null, arguments) };
+var stackAlloc = Module["stackAlloc"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["stackAlloc"].apply(null, arguments) };
+var stackRestore = Module["stackRestore"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["stackRestore"].apply(null, arguments) };
+var stackSave = Module["stackSave"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["stackSave"].apply(null, arguments) };
+var dynCall_ii = Module["dynCall_ii"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["dynCall_ii"].apply(null, arguments) };
+var dynCall_iiii = Module["dynCall_iiii"] = function() {
+  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
+  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+  return Module["asm"]["dynCall_iiii"].apply(null, arguments) };
+;
+
+
+
+// === Auto-generated postamble setup entry stuff ===
+
+Module['asm'] = asm;
+
+if (!Module["intArrayFromString"]) Module["intArrayFromString"] = function() { abort("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["intArrayToString"]) Module["intArrayToString"] = function() { abort("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+Module["ccall"] = ccall;
+if (!Module["cwrap"]) Module["cwrap"] = function() { abort("'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["setValue"]) Module["setValue"] = function() { abort("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["getValue"]) Module["getValue"] = function() { abort("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["allocate"]) Module["allocate"] = function() { abort("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["getMemory"]) Module["getMemory"] = function() { abort("'getMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["Pointer_stringify"]) Module["Pointer_stringify"] = function() { abort("'Pointer_stringify' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["AsciiToString"]) Module["AsciiToString"] = function() { abort("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["stringToAscii"]) Module["stringToAscii"] = function() { abort("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["UTF8ArrayToString"]) Module["UTF8ArrayToString"] = function() { abort("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["UTF8ToString"]) Module["UTF8ToString"] = function() { abort("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["stringToUTF8Array"]) Module["stringToUTF8Array"] = function() { abort("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["stringToUTF8"]) Module["stringToUTF8"] = function() { abort("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["lengthBytesUTF8"]) Module["lengthBytesUTF8"] = function() { abort("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["UTF16ToString"]) Module["UTF16ToString"] = function() { abort("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["stringToUTF16"]) Module["stringToUTF16"] = function() { abort("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["lengthBytesUTF16"]) Module["lengthBytesUTF16"] = function() { abort("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["UTF32ToString"]) Module["UTF32ToString"] = function() { abort("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["stringToUTF32"]) Module["stringToUTF32"] = function() { abort("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["lengthBytesUTF32"]) Module["lengthBytesUTF32"] = function() { abort("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["allocateUTF8"]) Module["allocateUTF8"] = function() { abort("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["stackTrace"]) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["addOnPreRun"]) Module["addOnPreRun"] = function() { abort("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["addOnInit"]) Module["addOnInit"] = function() { abort("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["addOnPreMain"]) Module["addOnPreMain"] = function() { abort("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["addOnExit"]) Module["addOnExit"] = function() { abort("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["addOnPostRun"]) Module["addOnPostRun"] = function() { abort("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["writeStringToMemory"]) Module["writeStringToMemory"] = function() { abort("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["writeArrayToMemory"]) Module["writeArrayToMemory"] = function() { abort("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+Module["writeAsciiToMemory"] = writeAsciiToMemory;
+if (!Module["addRunDependency"]) Module["addRunDependency"] = function() { abort("'addRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["removeRunDependency"]) Module["removeRunDependency"] = function() { abort("'removeRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["ENV"]) Module["ENV"] = function() { abort("'ENV' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["FS"]) Module["FS"] = function() { abort("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["FS_createFolder"]) Module["FS_createFolder"] = function() { abort("'FS_createFolder' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["FS_createPath"]) Module["FS_createPath"] = function() { abort("'FS_createPath' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["FS_createDataFile"]) Module["FS_createDataFile"] = function() { abort("'FS_createDataFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["FS_createPreloadedFile"]) Module["FS_createPreloadedFile"] = function() { abort("'FS_createPreloadedFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["FS_createLazyFile"]) Module["FS_createLazyFile"] = function() { abort("'FS_createLazyFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["FS_createLink"]) Module["FS_createLink"] = function() { abort("'FS_createLink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["FS_createDevice"]) Module["FS_createDevice"] = function() { abort("'FS_createDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["FS_unlink"]) Module["FS_unlink"] = function() { abort("'FS_unlink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") };
+if (!Module["GL"]) Module["GL"] = function() { abort("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["staticAlloc"]) Module["staticAlloc"] = function() { abort("'staticAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["dynamicAlloc"]) Module["dynamicAlloc"] = function() { abort("'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["warnOnce"]) Module["warnOnce"] = function() { abort("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["loadDynamicLibrary"]) Module["loadDynamicLibrary"] = function() { abort("'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["loadWebAssemblyModule"]) Module["loadWebAssemblyModule"] = function() { abort("'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["getLEB"]) Module["getLEB"] = function() { abort("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["getFunctionTables"]) Module["getFunctionTables"] = function() { abort("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["alignFunctionTables"]) Module["alignFunctionTables"] = function() { abort("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["registerFunctions"]) Module["registerFunctions"] = function() { abort("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["addFunction"]) Module["addFunction"] = function() { abort("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["removeFunction"]) Module["removeFunction"] = function() { abort("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["getFuncWrapper"]) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["prettyPrint"]) Module["prettyPrint"] = function() { abort("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["makeBigInt"]) Module["makeBigInt"] = function() { abort("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["dynCall"]) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["getCompilerSetting"]) Module["getCompilerSetting"] = function() { abort("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["stackSave"]) Module["stackSave"] = function() { abort("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["stackRestore"]) Module["stackRestore"] = function() { abort("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["stackAlloc"]) Module["stackAlloc"] = function() { abort("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["establishStackSpace"]) Module["establishStackSpace"] = function() { abort("'establishStackSpace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["print"]) Module["print"] = function() { abort("'print' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Module["printErr"]) Module["printErr"] = function() { abort("'printErr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };if (!Module["ALLOC_NORMAL"]) Object.defineProperty(Module, "ALLOC_NORMAL", { get: function() { abort("'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } });
+if (!Module["ALLOC_STACK"]) Object.defineProperty(Module, "ALLOC_STACK", { get: function() { abort("'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } });
+if (!Module["ALLOC_STATIC"]) Object.defineProperty(Module, "ALLOC_STATIC", { get: function() { abort("'ALLOC_STATIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } });
+if (!Module["ALLOC_DYNAMIC"]) Object.defineProperty(Module, "ALLOC_DYNAMIC", { get: function() { abort("'ALLOC_DYNAMIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } });
+if (!Module["ALLOC_NONE"]) Object.defineProperty(Module, "ALLOC_NONE", { get: function() { abort("'ALLOC_NONE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } });
+
+
+
+
+/**
+ * @constructor
+ * @extends {Error}
+ * @this {ExitStatus}
+ */
+function ExitStatus(status) {
+  this.name = "ExitStatus";
+  this.message = "Program terminated with exit(" + status + ")";
+  this.status = status;
+};
+ExitStatus.prototype = new Error();
+ExitStatus.prototype.constructor = ExitStatus;
+
+var initialStackTop;
+var calledMain = false;
+
+dependenciesFulfilled = function runCaller() {
+  // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
+  if (!Module['calledRun']) run();
+  if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
+}
+
+Module['callMain'] = function callMain(args) {
+  assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
+  assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called');
+
+  args = args || [];
+
+  ensureInitRuntime();
+
+  var argc = args.length+1;
+  var argv = stackAlloc((argc + 1) * 4);
+  HEAP32[argv >> 2] = allocateUTF8OnStack(Module['thisProgram']);
+  for (var i = 1; i < argc; i++) {
+    HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]);
+  }
+  HEAP32[(argv >> 2) + argc] = 0;
+
+
+  try {
+
+    var ret = Module['_main'](argc, argv, 0);
+
+
+    // if we're not running an evented main loop, it's time to exit
+      exit(ret, /* implicit = */ true);
+  }
+  catch(e) {
+    if (e instanceof ExitStatus) {
+      // exit() throws this once it's done to make sure execution
+      // has been stopped completely
+      return;
+    } else if (e == 'SimulateInfiniteLoop') {
+      // running an evented main loop, don't immediately exit
+      Module['noExitRuntime'] = true;
+      return;
+    } else {
+      var toLog = e;
+      if (e && typeof e === 'object' && e.stack) {
+        toLog = [e, e.stack];
+      }
+      err('exception thrown: ' + toLog);
+      Module['quit'](1, e);
+    }
+  } finally {
+    calledMain = true;
+  }
+}
+
+
+
+
+/** @type {function(Array=)} */
+function run(args) {
+  args = args || Module['arguments'];
+
+  if (runDependencies > 0) {
+    return;
+  }
+
+  writeStackCookie();
+
+  preRun();
+
+  if (runDependencies > 0) return; // a preRun added a dependency, run will be called later
+  if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame
+
+  function doRun() {
+    if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening
+    Module['calledRun'] = true;
+
+    if (ABORT) return;
+
+    ensureInitRuntime();
+
+    preMain();
+
+    if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();
+
+    if (Module['_main'] && shouldRunNow) Module['callMain'](args);
+
+    postRun();
+  }
+
+  if (Module['setStatus']) {
+    Module['setStatus']('Running...');
+    setTimeout(function() {
+      setTimeout(function() {
+        Module['setStatus']('');
+      }, 1);
+      doRun();
+    }, 1);
+  } else {
+    doRun();
+  }
+  checkStackCookie();
+}
+Module['run'] = run;
+
+function checkUnflushedContent() {
+  // Compiler settings do not allow exiting the runtime, so flushing
+  // the streams is not possible. but in ASSERTIONS mode we check
+  // if there was something to flush, and if so tell the user they
+  // should request that the runtime be exitable.
+  // Normally we would not even include flush() at all, but in ASSERTIONS
+  // builds we do so just for this check, and here we see if there is any
+  // content to flush, that is, we check if there would have been
+  // something a non-ASSERTIONS build would have not seen.
+  // How we flush the streams depends on whether we are in NO_FILESYSTEM
+  // mode (which has its own special function for this; otherwise, all
+  // the code is inside libc)
+  var print = out;
+  var printErr = err;
+  var has = false;
+  out = err = function(x) {
+    has = true;
+  }
+  try { // it doesn't matter if it fails
+    var flush = flush_NO_FILESYSTEM;
+    if (flush) flush(0);
+  } catch(e) {}
+  out = print;
+  err = printErr;
+  if (has) {
+    warnOnce('stdio streams had content in them that was not flushed. you should set NO_EXIT_RUNTIME to 0 (see the FAQ), or make sure to emit a newline when you printf etc.');
+  }
+}
+
+function exit(status, implicit) {
+  checkUnflushedContent();
+
+  // if this is just main exit-ing implicitly, and the status is 0, then we
+  // don't need to do anything here and can just leave. if the status is
+  // non-zero, though, then we need to report it.
+  // (we may have warned about this earlier, if a situation justifies doing so)
+  if (implicit && Module['noExitRuntime'] && status === 0) {
+    return;
+  }
+
+  if (Module['noExitRuntime']) {
+    // if exit() was called, we may warn the user if the runtime isn't actually being shut down
+    if (!implicit) {
+      err('exit(' + status + ') called, but NO_EXIT_RUNTIME is set, so halting execution but not exiting the runtime or preventing further async execution (build with NO_EXIT_RUNTIME=0, if you want a true shutdown)');
+    }
+  } else {
+
+    ABORT = true;
+    EXITSTATUS = status;
+    STACKTOP = initialStackTop;
+
+    exitRuntime();
+
+    if (Module['onExit']) Module['onExit'](status);
+  }
+
+  Module['quit'](status, new ExitStatus(status));
+}
+
+var abortDecorators = [];
+
+function abort(what) {
+  if (Module['onAbort']) {
+    Module['onAbort'](what);
+  }
+
+  if (what !== undefined) {
+    out(what);
+    err(what);
+    what = JSON.stringify(what)
+  } else {
+    what = '';
+  }
+
+  ABORT = true;
+  EXITSTATUS = 1;
+
+  var extra = '';
+  var output = 'abort(' + what + ') at ' + stackTrace() + extra;
+  if (abortDecorators) {
+    abortDecorators.forEach(function(decorator) {
+      output = decorator(output, what);
+    });
+  }
+  throw output;
+}
+Module['abort'] = abort;
+
+if (Module['preInit']) {
+  if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
+  while (Module['preInit'].length > 0) {
+    Module['preInit'].pop()();
+  }
+}
+
+// shouldRunNow refers to calling main(), not run().
+var shouldRunNow = true;
+if (Module['noInitialRun']) {
+  shouldRunNow = false;
+}
+
+Module["noExitRuntime"] = true;
+
+run();
+
+
+
+
+
+// {{MODULE_ADDITIONS}}
+
+
+

BIN
Day 19/promo.nam


BIN
Day 19/promo.til


BIN
Day 19/promo.wasm


BIN
Day 19/promo_new.wasm


+ 5 - 0
Day 19/test.cpp

@@ -0,0 +1,5 @@
+int main() {
+  unsigned int i = 10;
+  unsigned int *par0 =  &i;
+  int r3 = (int)par0;
+}

BIN
Day 20/HaRdvent.id0


BIN
Day 20/HaRdvent.id1


BIN
Day 20/HaRdvent.nam


BIN
Day 20/HaRdvent.nro


BIN
Day 20/HaRdvent.til


+ 10 - 0
Day 20/decode.py

@@ -0,0 +1,10 @@
+#!/usr/bin/python
+
+encrypted = "f42df92b389fffca59598465c7a51d36082ecfea567a900e5eac9e5e9fb1"
+
+print((0xF4 - 0x48) % 256)
+print((0x2D - 0x56) % 256)
+print((0xf9 - 0x31) % 256)
+print((0x2b - 0x38) % 256)
+
+print(len(encrypted))

BIN
Day 20/exctracted.jpeg


BIN
Day 20/ida-20181220-112813-47.dmp