on master help sign in
Bump version number to 0.7.
commitcbfbd0a29b675aa0f3fdba0d36a1b622abc96e6e authorevancz <info@elm-lang.org> dateWed 26 Dec 2012, 16:14 (14 years ago) parentc231fc3
7 files changed+3973−274
core-js/cat.bat+1−1 core-js/cat.sh+4 elm-server/elm-server.cabal+3−3 elm/Elm.cabal+2−2 elm/elm-runtime-0.6.0.2.js−134 elm/elm-runtime-0.6.js−134 elm/elm-runtime-0.7.js+3963
core-js/cat.bat+1−1
@@ -2,4 +2,4 @@ copy /B Guid.js+foreign\JavaScript.js+foreign\JSON.js+Value.js+List.js+Maybe.js+
22
33cd ..\elm
44
5−copy /B ..\elm-mini.js elm-runtime-0.6.0.3.js
5+copy /B ..\elm-mini.js elm-runtime-0.7.js
core-js/cat.sh+4
@@ -1,3 +1,7 @@
1+# I do not use this script, so it may be out of date.
2+# Please make sure that this matches with cat.bat to
3+# avoid confusing "errors".
4+
15cat \
26 Guid.js\
37 foreign/JavaScript.js\
elm-server/elm-server.cabal+3−3
@@ -1,5 +1,5 @@
11Name: elm-server
2−Version: 0.6.0.3
2+Version: 0.7
33Synopsis: The Elm language server.
44Description: This package provides a standalone, Happstack-based Elm server.
55
@@ -32,7 +32,7 @@ Executable elm-server
3232 parsec >= 3.1.1,
3333 blaze-html >= 0.5.1,
3434 HTTP >= 4000,
35− happstack-server == 7.1.1,
35+ happstack-server == 7.1.1 || == 7.0.2,
3636 deepseq,
3737 filepath,
38− Elm >= 0.6.0.3
38+ Elm >= 0.7
elm/Elm.cabal+2−2
@@ -1,6 +1,6 @@
11
22Name: Elm
3−Version: 0.6.0.3
3+Version: 0.7
44Synopsis: The Elm language module.
55Description: Elm aims to make client-side web-development more pleasant.
66 It is a statically/strongly typed, functional reactive
@@ -22,7 +22,7 @@ Category: Compiler, Language
2222Build-type: Simple
2323
2424Extra-source-files: changelog.txt
25−Data-files: elm-runtime-0.6.0.3.js
25+Data-files: elm-runtime-0.7.js
2626Cabal-version: >=1.8
2727
2828source-repository head
elm/elm-runtime-0.6.0.2.jsdeleted−134
@@ -1,134 +0,0 @@
1−Elm={};var Guid=function(){var d=0;return{guid:function(){return d+=1}}}();
2−Elm.JavaScript=function(){function d(b){for(var a=["Nil"],c=b.length;c--;)a=["Cons",b[c],a];return a}function c(b){for(var a=[];"Cons"===b[0];)a.push(b[1]),b=b[2];return a}function b(b){return b.slice(1)}function e(b){return["Tuple"+b.length].concat(b)}return{castJSBoolToBool:function(b){return b},castBoolToJSBool:function(b){return b},castJSNumberToFloat:function(b){return b},castFloatToJSNumber:function(b){return b},castJSNumberToInt:function(b){return~~b},castIntToJSNumber:function(b){return b},
3−Experimental:{castJSElementToElement:function(b){return function(a){return function(c){return["Element",Guid.guid(),["EExternalHtml",c],b,a,1,Nothing,Nothing]}}},castElementToJSElement:function(b){return Render.render(b)}},castJSArrayToList:d,castListToJSArray:c,castJSStringToString:d,castStringToJSString:function(b){return"string"===typeof b?b:c(b).join("")},castTupleToJSTuple2:b,castTupleToJSTuple3:b,castTupleToJSTuple4:b,castTupleToJSTuple5:b,castJSTupleToTuple2:e,castJSTupleToTuple3:e,castJSTupleToTuple4:e,
4−castJSTupleToTuple5:e}}();var JSjson=window.JSON;
5−Elm.JSON=function(){function d(a,b){return function(c){return function(n){var h=e.castStringToJSString(c);return n[1].hasOwnProperty(h)&&(n=n[1][h],n[0]===a)?n[1]:b}}}function c(a){return function(b){function c(a){switch(a[0]){case "JsonNull":return null;case "JsonString":return e.castStringToJSString(a[1]);case "JsonObject":var h={},a=a[1][1],f;for(f in a)h[f]=c(a[f]);return h;case "JsonArray":h=e.castListToJSArray(a[1]);for(f=h.length;f--;)h[f]=c(h[f]);return h;default:return a[1]}}return JSjson.stringify(c(["JsonObject",
6−b]),null,e.castStringToJSString(a))}}function b(a){function b(a){switch(typeof a){case "string":return["JsonString",e.castJSStringToString(a)];case "number":return["JsonNumber",e.castJSNumberToFloat(a)];case "boolean":return["JsonBool",e.castJSBoolToBool(a)];case "object":if(null===a)return["JsonNull"];for(var h in a)a[h]=b(a[h]);return a instanceof Array?["JsonArray",e.castJSArrayToList(a)]:["JsonObject",["JSON",a]]}}var a=JSjson.parse(a),c;for(c in a)a[c]=b(a[c]);return["JSON",a]}var e=Elm.JavaScript,
7−i=["JSON",{}];return{empty:i,singleton:function(a){return function(b){var c={};c[e.castStringToJSString(a)]=b;return["JSON",c]}},insert:function(a){return function(b){return function(c){var c=c[1],n={},h;for(h in c)n[h]=c[h];n[e.castStringToJSString(a)]=b;return["JSON",n]}}},lookup:function(a){return function(b){var c=e.castStringToJSString(a);return b[1].hasOwnProperty(c)?["Just",b[1][c]]:["Nothing"]}},findString:d("JsonString",["Nil"]),findObject:d("JsonObject",i),findArray:d("JsonArray",["Nil"]),
8−findWithDefault:function(a){return function(b){return function(c){var n=e.castStringToJSString(b);return c[1].hasOwnProperty(n)?c[1][n]:a}}},remove:function(a){return function(b){var b=b[1],c={},n;for(n in b)c[n]=b[n];delete c[e.castStringToJSString(a)];return["JSON",c]}},toPrettyJSString:c,toJSString:c(""),fromJSString:b,toPrettyString:function(a){return function(b){return e.castJSStringToString(c(a)(b))}},toString:function(a){return e.castJSStringToString(c("")(a))},fromString:function(a){return b(e.castStringToJSString(a))},
9−toList:function(a){var a=a[1],b=[],c;for(c in a)b.push(Value.Tuple(e.castJSStringToString(c),a[c]));return e.castJSArrayToList(b)},fromList:function(a){for(var a=e.castListToJSArray(a),b={},c=a.length;c--;)b[e.castStringToJSString(a[c][1])]=a[c][2];return["JSON",b]},JsonString:function(a){return["JsonString",a]},JsonNumber:function(a){return["JsonNumber",a]},JsonBool:function(a){return["JsonBool",a]},JsonNull:["JsonNull"],JsonArray:function(a){return["JsonArray",a]},JsonObject:function(a){return["JsonObject",
10−a]}}}();
11−var Value=function(){function d(a){if(0==a.length)return a;for(var a=a.replace(/"/g,"&#34;").replace(/'/g,"&#39;").replace(/</g,"&#60;").replace(/>/g,"&#62;").replace(/\n/g,"<br/>"),a=a.split("<br/>"),b=a.length;b--;){var c=a,n=b,h;h=a[b];if(0!=h.length){h=h.split("");" "==h[0]&&(h[0]="&nbsp;");for(var f=h.length;--f;)" "==h[f][0]&&" "==h[f-1]&&(h[f-1]+=h[f],h[f]="");for(f=h.length;f--;)if(1<h[f].length&&" "==h[f][0]){for(var g=h[f].split(""),e=g.length-2;0<=e;e-=2)g[e]="&nbsp;";h[f]=g.join("")}h=h.join("");
12−h=" "===h[h.length-1]?h.slice(0,-1)+"&nbsp;":h}c[n]=h}return a.join("<br/>")}var c=function(a,b){if("object"===typeof a){if(a===b)return!0;if(a.length!==b.length)return!1;for(var e=a.length;e--;)if(!c(a[e],b[e]))return!1;return!0}return a===b},b=function(a){if("boolean"===typeof a)return a?"True":"False";if("number"!==typeof a){if("string"===typeof a&&2>a.length)return"'"+a+"'";if(a[0]){if("Tuple"===a[0].substring(0,5)){for(var c="",e=a.length;--e;)c=","+b(a[e])+c;","===c[0]&&(c=c.substring(1));return"("+
13−c+")"}if("Cons"===a[0])for(var e="string"===typeof a[1]?'"':"]",n="string"===typeof a[1]?"":",",h="string"===typeof a[1]?function(a){return a}:b,c=("string"===typeof a[1]?'"':"[")+h(a[1]),a=a[2];;)if("Cons"===a[0])c+=n+h(a[1]),a=a[2];else return c+e;else{if("Nil"===a[0])return"[]";if("JSON"===a[0])return"(JSON.fromList "+b(Elm.JSON.toList(a))+")";if("RBNode"===a[0]||"RBEmpty"===a[0])return a=Elm.Dict.foldr(function(a){return function(h){return function(b){return["Cons",["Tuple2",a,h],b]}}})(["Nil"])(a),
14−c="Dict","Cons"===a[0]&&"Tuple0"===a[1][2][0]&&(c="Set",a=Elm.List.map(function(a){return a[1]})(a)),"("+c+".fromList "+b(a)+")";c="";for(e=a.length;--e;)c=" "+b(a[e])+c;c=a[0]+c;return 1<a.length?"("+c+")":c}}}return a+""},e=function(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b},i;i=document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,b,c){a.attachEvent("on"+b,c)};return{eq:c,str:e,show:function(a){return e(b(a))},Tuple:function(){var a=arguments.length,
15−b=Array(a+1);for(b[0]="Tuple"+arguments.length;a--;)b[a+1]=arguments[a];return b},append:function(a,b){if("string"===typeof a&&"string"===typeof b)return a.concat(b);if("Nil"===a[0])return b;for(var c=["Cons",a[1],["Nil"]],e=c,a=a[2];"Cons"===a[0];)e[2]=["Cons",a[1],["Nil"]],a=a[2],e=e[2];e[2]=b;return c},listToArray:function(a){for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return b},toText:function(a){if("string"===typeof a)return d(a);for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return d(b.join(""))},
16−properEscape:d,getTextSize:function(a,b,c){var e=document.createElement("div");e.innerHTML=c;e.style.textAlign="left";0<a&&(e.style.width=a+"px");e.style.visibility="hidden";e.style.styleFloat="left";e.style.cssFloat="left";document.body.appendChild(e);c=window.getComputedStyle(e,null);a=c.getPropertyValue("width").slice(0,-2)-0;c=c.getPropertyValue("height").slice(0,-2)-0;document.body.removeChild(e);return[Math.ceil(a),Math.ceil(Math.max(b,c))]},getSize:function(a){a=a.cloneNode(!0);a.style.visibility=
17−"hidden";a.style.styleFloat="left";a.style.cssFloat="left";document.body.appendChild(a);var b=a.offsetWidth,c=a.offsetHeight;document.body.removeChild(a);return[b,c]},getExcess:function(a){a=a.cloneNode(!0);a.style.visibility="hidden";a.style.styleFloat="left";a.style.cssFloat="left";document.body.appendChild(a);var b=a.offsetWidth,c=a.offsetHeight,e=window.getComputedStyle(a,null),h=e.getPropertyValue("width").slice(0,-2)-0,e=e.getPropertyValue("height").slice(0,-2)-0;document.body.removeChild(a);
18−return[b-h,c-e]},groupForms:function(a){for(var a=Elm.JavaScript.castListToJSArray(a),b=[],c=[],e=a.length;e--;){var h=a[e];switch(h[4][0]){case "FElement":0<c.length&&(b.push(c),c=[]);b.push(h);break;default:c.push(h)}}0<c.length&&b.push(c);return b},wrap:function(a){var b=Value.getSize(a);return["Element",Guid.guid(),["EHtml",a],b[0],b[1],1,["Nothing"],["Nothing"]]},addListener:i}}();
19−Elm.List=function(){function d(b){return function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&h("map");for(var c=["Cons",b(a[1]),["Nil"]],f=c,a=a[2];"Cons"===a[0];)f[2]=["Cons",b(a[1]),["Nil"]],a=a[2],f=f[2];return c}}function c(a){return function(b){return function(c){var f=b;if("Nil"===c[0])return f;for("Cons"!==c[0]&&h("foldl");"Cons"===c[0];)f=a(c[1])(f),c=c[2];return f}}}function b(a){return function(b){return function(c){var f=b;if("Nil"===c[0])return f;"Cons"!==c[0]&&h("foldr");for(var g=[];"Cons"===
20−c[0];)g.push(c[1]),c=c[2];for(c=g.length;c--;)f=a(g[c])(f);return f}}}function e(a){return function(b){var h;"Cons"!==b[0]?h=void 0:(h=b[1],b=b[2],h=c(a)(h)(b));return h}}function i(a){return function(b){return function(c){if("Nil"===c[0])return["Cons",b,["Nil"]];"Cons"!==c[0]&&h("scanl");for(var f=[b];"Cons"===c[0];)b=a(c[1])(b),f.push(b),c=c[2];for(var c=["Nil"],g=f.length;g--;)c=["Cons",f[g],c];return c}}}function a(b){return function(c){a:{for(var h=[function(b){return"Nil"!==b[0]?void 0:["Tuple2",
21−["Nil"],["Nil"]]},function(c){if("Cons"===c[0]){var h=c[1],c=c[2];var f=a(b)(c);"Tuple2"!==f[0]?h=void 0:(c=f[1],f=f[2],h=b(h)?["Tuple2",["Cons",h,c],f]:["Tuple2",c,["Cons",h,f]]);return h}}],f=h.length;f--;){var g=h[f](c);if(void 0!==g){c=g;break a}}c=void 0}return c}}function j(b){a:{for(var a=[function(b){return"Nil"!==b[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(b){if("Cons"!==b[0])b=void 0;else if(b=["Tuple2",b[1],j(b[2])],"Tuple2"!==b[0]||"Tuple2"!==b[1][0])b=void 0;else var a=b[1][1],c=
22−b[1][2],b="Tuple2"!==b[2][0]?void 0:["Tuple2",["Cons",a,b[2][1]],["Cons",c,b[2][2]]];return b}],c=a.length;c--;){var h=a[c](b);if(void 0!==h){b=h;break a}}b=void 0}return b}function l(b){return function(a){a:{for(var c=[function(b){return"Nil"!==b[0]?void 0:["Nil"]},function(b){if("Cons"===b[0]){var a=b[1];return"Nil"!==b[2][0]?void 0:["Cons",a,["Nil"]]}},function(a){if("Cons"===a[0]){var c=a[1];if("Cons"===a[2][0]){var h=a[2][1],a=a[2][2];return["Cons",c,["Cons",b,l(b)(["Cons",h,a])]]}}}],h=c.length;h--;){var f=
23−c[h](a);if(void 0!==f){a=f;break a}}a=void 0}return a}}function n(b){return function(a){a:{for(var c=[function(b){return"Nil"!==b[0]?void 0:["Nil"]},function(b){if("Cons"===b[0]){var a=b[1];return"Nil"!==b[2][0]?void 0:a}},function(a){if("Cons"===a[0]){var c=a[1];if("Cons"===a[2][0]){var h=a[2][1],a=a[2][2];return Value.append(c,Value.append(b,n(b)(["Cons",h,a])))}}}],h=c.length;h--;){var f=c[h](a);if(void 0!==f){a=f;break a}}a=void 0}return a}}var h=function(b){throw"Function '"+b+"' expecting a list!";
24−},f=c(function(b){return function(a){return["Cons",b,a]}})(["Nil"]),g=b(function(b){return function(a){return Value.append(b,a)}})(["Nil"]),s=c(function(b){return function(a){return b&&a}})(!0),k=c(function(b){return function(a){return b||a}})(!1),p=c(function(b){return function(a){return b+a}})(0),m=c(function(b){return function(a){return b*a}})(1),x=e(function(b){return function(a){return Math.max(b,a)}}),u=e(function(b){return function(a){return Math.min(b,a)}});return{head:function(b){if("Cons"!==
25−b[0])throw"Error: 'head' only accepts lists of length greater than one.";return b[1]},tail:function(b){if("Cons"!==b[0])throw"Error: 'tail' only accepts lists of length greater than one.";return b[2]},last:function(b){if("Cons"!==b[0])throw"Error: 'last' only accepts lists of length greater than one.";for(var a=b[1];"Cons"===b[0];)a=b[1],b=b[2];return a},map:d,foldl:c,foldr:b,foldl1:e,foldr1:function(b){return function(a){if("Nil"===a[0])throw"'foldr1' requires an non-empty list.";"Cons"!==a[0]&&
26−h("foldr1");for(var c=[];"Cons"===a[0];)c.push(a[1]),a=a[2];for(var a=c.pop(),f=c.length;f--;)a=b(c[f])(a);return a}},scanl:i,scanl1:function(b){return function(a){if("Cons"!==a[0])throw"Error: 'scanl1' requires a list of at least length 1.";return i(b)(a[1])(a[2])}},filter:function(b){return function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&h("filter");for(var c=[];"Cons"===a[0];)b(a[1])&&c.push(a[1]),a=a[2];for(var a=["Nil"],f=c.length;f--;)a=["Cons",c[f],a];return a}},length:function(b){for(var a=
27−0;"Cons"===b[0];)a+=1,b=b[2];return a},reverse:f,concat:g,concatMap:function(b){return function(a){return g(d(b)(a))}},and:s,or:k,all:function(b){return c(function(a){return function(c){return c&&b(a)}})(!0)},any:function(b){return c(function(a){return function(c){return c||b(a)}})(!1)},sum:p,product:m,maximum:x,minimum:u,partition:a,zipWith:function(b){return function(a){return function(c){if("Nil"===a[0]||"Nil"===c[0])return["Nil"];("Cons"!==a[0]||"Cons"!==c[0])&&h("zipWith");for(var f=[];"Cons"===
28−a[0]&&"Cons"===c[0];)f.push(b(a[1])(c[1])),a=a[2],c=c[2];for(var c=["Nil"],g=f.length;g--;)c=["Cons",f[g],c];return c}}},zip:function(a){return function(b){if("Nil"===a[0]||"Nil"===b[0])return["Nil"];("Cons"!==a[0]||"Cons"!==b[0])&&h("zip");for(var c=[];"Cons"===a[0]&&"Cons"===b[0];)c.push(["Tuple2",a[1],b[1]]),a=a[2],b=b[2];for(var b=["Nil"],f=c.length;f--;)b=["Cons",c[f],b];return b}},unzip:j,intersperse:l,intercalate:n,sort:function(b){if("Nil"===b[0])return b;"Cons"!==b[0]&&h("sort");for(var a=
29−[];"Cons"===b[0];)a.push(b[1]),b=b[2];a.sort(function(b,a){return b-a});for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b},take:function(b){return function(a){if(0>=b)return["Nil"];if("Nil"===a[0])return a;"Cons"!==a[0]&&h("take");var c=["Cons",a[1],["Nil"]],f=c,a=a[2];for(--b;"Cons"===a[0]&&0<b;)f[2]=["Cons",a[1],["Nil"]],f=f[2],a=a[2],--b;return c}},drop:function(b){return function(a){if("Nil"===a[0])return a;for("Cons"!==a[0]&&h("drop");"Cons"===a[0]&&0<b;)a=a[2],--b;return a}}}}();
30−Elm.Maybe=function(){function d(b){return function(c){return"Just"===b[0]?["Cons",b[1],c]:c}}function c(b){return function(c){return function(d){var a=b(c);return"Just"===a[0]?["Cons",a[1],d]:d}}}return{Just:function(b){return["Just",b]},Nothing:["Nothing"],catMaybes:Elm.List.foldr(d)(["Nil"]),isJust:function(b){return"Just"===b[0]},isNothing:function(b){return"Nothing"===b[0]},fromMaybe:function(b){return function(c){return"Just"===c[0]?c[1]:b}},consMaybe:d,mapMaybe:function(b){return Elm.List.foldr(c(b))(["Nil"])},
31−maybe:function(b){return function(c){return function(d){return"Just"===d[0]?c(d[1]):b}}}}}();
32−Elm.Char=function(){function d(b,a){return function(c){c=c.charCodeAt(0);return b<=c&&c<=a}}var c=d(48,57),b=d(97,102),e=d(65,70);return{fromCode:function(b){return String.fromCharCode(b)},toCode:function(b){return b.charCodeAt(0)},toUpper:function(b){return b.toUpperCase()},toLower:function(b){return b.toLowerCase()},toLocaleUpper:function(b){return b.toLocaleUpperCase()},toLocaleLower:function(b){return b.toLocaleLowerCase()},isLower:d(97,122),isUpper:d(65,90),isDigit:c,isOctDigit:d(48,55),isHexDigit:function(d){return c(d)||
33−b(d)||e(d)}}}();
34−Elm.Color=function(){function d(c){var b=c.value*c.saturation,e=c.hue/60,d=b*(1-Math.abs(e%2-1)),a=0,j=0,l=0;0<=e&&1>e?(a=b,j=d,l=0):1<=e&&2>e?(a=d,j=b,l=0):2<=e&&3>e?(a=0,j=b,l=d):3<=e&&4>e?(a=0,j=d,l=b):4<=e&&5>e?(a=d,j=0,l=b):5<=e&&6>e&&(a=b,j=0,l=d);c=c.value-b;return["Color",Math.round(255*(a+c)),Math.round(255*(j+c)),Math.round(255*(l+c)),1]}return{rgba:function(c){return function(b){return function(e){return function(d){return["Color",c,b,e,d]}}}},rgb:function(c){return function(b){return function(e){return["Color",c,
35−b,e,1]}}},hsva:function(c){return function(b){return function(e){return function(i){var a=d({hue:c,saturation:b,value:e});a[4]=i;return a}}}},hsv:function(c){return function(b){return function(e){return d({hue:c,saturation:b,value:e})}}},red:["Color",255,0,0,1],green:["Color",0,255,0,1],blue:["Color",0,0,255,1],yellow:["Color",255,255,0,1],cyan:["Color",0,255,255,1],magenta:["Color",255,0,255,1],black:["Color",0,0,0,1],white:["Color",255,255,255,1],gray:["Color",128,128,128,1],grey:["Color",128,128,
36−128,1],complement:function(c){var b;b=c[1]/255;var e=c[2]/255,c=c[3]/255,i=Math.max(b,e,c),a=Math.min(b,e,c),a=i-a,j=0;0===a?j=0:i===b?j=(e-c)/a%6:i===e?j=(c-b)/a+2:i===c&&(j=(b-e)/a+4);b={value:i,hue:60*j,saturation:0===i?0:a/i};b.hue=(b.hue+180)%360;return d(b)},extract:function(c){return 1===c[4]?"rgb("+c[1]+","+c[2]+","+c[3]+")":"rgba("+c[1]+","+c[2]+","+c[3]+","+c[4]+")"}}}();
37−var Collage=function(){function d(b,a){var c=a.length-1;if(!(0>=c))for(b.moveTo(a[c][1],a[c][2]);c--;)b.lineTo(a[c][1],a[c][2])}function c(b,a,c,g){0===b.length&&(b=[8,4]);var e=g.length-1;if(!(0>=e)){var k=g[e][1],d=g[e][2],m=0,l=0,i=0,j=0,q=0,r=0,v=b.length,w=!0,y=b[0];for(a.moveTo(k,d);e--;){m=g[e][1];l=g[e][2];i=m-k;j=l-d;for(q=Math.sqrt(i*i+j*j);y<=q;)k+=i*y/q,d+=j*y/q,a[w?"lineTo":"moveTo"](k,d),i=m-k,j=l-d,q=Math.sqrt(i*i+j*j),w=!w,r=(r+1)%v,y=b[r];0<q&&(a[w?"lineTo":"moveTo"](m,l),y-=q);k=
38−m;d=l}}a.strokeStyle=Elm.Color.extract(c);a.stroke()}function b(b,a,f,g,e){a.clearRect(0,0,f,g);for(f=e.length;f--;){var k=e[f],p=b,g=a,m=k[1],i=k[2],j=k[3][1],t=k[3][2],k=k[4];g.save();(0!==j||0!==t)&&g.translate(j,t);m!==~~m&&g.rotate(2*Math.PI*m);1!==i&&g.scale(i,i);g.beginPath();switch(k[0]){case "FLine":a:switch(p=g,m=k,k=m[3][1],m[1][0]){case "Solid":m=m[2];d(p,k);p.strokeStyle=Elm.Color.extract(m);p.stroke();break;case "Dotted":c([3,3],p,m[2],k);break a;case "Dashed":c([8,4],p,m[2],k);break a;
39−case "Custom":c(m[1][1],p,m[2],k)}break;case "FShape":a:switch(j=p,i=g,p=k[1],m=k[2],k=k[3][1],p[0]){case "Filled":p=i;d(p,k);p.fillStyle=Elm.Color.extract(m);p.fill();break a;case "Outlined":p=i;d(p,k);p.strokeStyle=Elm.Color.extract(m);p.stroke();break a;case "Textured":m=j;p=p[1];j=new Image;j.src=l.castStringToJSString(p);j.onload=m;d(i,k);i.fillStyle=i.createPattern(j,"repeat");i.fill();break a;case "CustomOutline":c(p[1],i,m,k)}break;case "FImage":m=g,i=k[1],j=k[2],k=k[3],t=new Image,t.onload=
40−p,t.src=l.castStringToJSString(k),m.drawImage(t,-i/2,-j/2,i,j)}g.restore()}}function e(a,c,f){var g=Render.newElement("canvas"),a=~~a,c=~~c;g.style.width=a+"px";g.style.height=c+"px";g.style.display="block";g.width=a;g.height=c;if(g.getContext){var e=g.getContext("2d");b(function(){b(this,e,a,c,f)},e,a,c,f);return g}g.innerHTML="Your browser does not support the canvas element.";return g}function i(a,b,c,g,e,k,d){var m=Render.render(d),c="translate("+(e-d[3]/2)+"px,"+(k-d[4]/2)+"px) "+(1===g?"":"scale("+
41−g+","+g+")")+" "+(c===~~c?"":"rotate("+360*c+"deg)");m.style.transform=c;m.style.msTransform=c;m.style.MozTransform=c;m.style.webkitTransform=c;m.style.OTransform=c;c=Render.newElement("div");Render.addTo(c,m);c.style.width=~~a+"px";c.style.height=~~b+"px";c.style.overflow="hidden";return c}function a(a,c,f){if(!Value.eq(f,c)){var g=a.style.width.slice(0,-2)-0,d=a.style.height.slice(0,-2)-0;if("object"===typeof f[0]){if("object"===typeof c[0]&&a.getContext){var k=a.getContext("2d");return b(function(){b(this,
42−k,g,d,f)},k,g,d,f)}c=e(g,d,f);c.style.position="absolute";return a.parentNode.replaceChild(c,a)}c=i(g,d,f[1],f[2],f[3][1],f[3][2],f[4][1]);c.style.position="absolute";return a.parentNode.replaceChild(c,a)}}function j(a,b,c,g,e){var k=0,d,m=(a[1]-g[1])/c,a=(a[2]-g[2])/c;0!==b&&(b*=-2*Math.PI,c=m*Math.cos(b)-a*Math.sin(b),a=m*Math.sin(b)+a*Math.cos(b),m=c);if(0===e.length)return!1;d=e[0];for(c=e.length-1;c--;){b=e[c];g=d[1];d=d[2];var i=b[1],l=b[2];if(d<l)var j=d,q=l;else j=l,q=d;if(g<i)var r=g,v=i;
43−else r=i,v=g;j<a&&a<=q&&m<=v&&(m<=r||m<=(a-d)*(i-g)/(l-d)+g)&&++k;d=b}return 1===k%2}var l=Elm.JavaScript;return{collage:function(a,b,c){if(0===c.length)return e(a,b,[]);for(var g=Array(c.length),d=c.length;d--;){var k=c[d];g[d]="string"===typeof k[0]?i(a,b,k[1],k[2],k[3][1],k[3][2],k[4][1]):e(a,b,k)}return 1===c.length?g[0]:Render.flowWith(Render.goIn,function(a){return a},g)},updateCollage:function(b,c,f){if(1===f.length)return a(b,c[0],f[0]);for(var b=b.childNodes,g=b.length,e=g;e--;)a(b[g-e-1],
44−c[e],f[e])},insideForm:function(a){return function(b){var c=a[1],g=a[2];if(6>b.length){var e=b[3][1],d=b[3][2],p=0,i=b[2];switch(b[4][0]){case "FShape":for(var l=b[4][3][1],u=l.length;--u;)var t=l[u],p=Math.max(p,t[1]*t[1]+t[2]*t[2]);p*=i*i;break;case "FImage":l=i*b[4][1]/2;i=i*b[4][2]/2;p=l*l+i*i;break;case "FElement":l=i*b[4][1][3]/2,i=i*b[4][1][4]/2,p=l*l+i*i}b.push(function(b,a){var c=b-e,f=a-d;return c*c+f*f<p+1})}if(!b[5](c,g))return!1;var q,r;switch(b[4][0]){case "FShape":return j(a,b[1],b[2],
45−b[3],b[4][3][1]);case "FLine":return!1;case "FImage":q=b[4][1]/2;r=b[4][2]/2;break;case "FElement":q=b[4][1][3]/2,r=b[4][1][4]/2}return j(a,b[1],b[2],b[3],[[null,q,r],[null,-q,r],[null,-q,-r],[null,q,-r],[null,q,r]])}}}}();
46−Elm.Graphics=function(){function d(b){return function(a){return["Position",b,a]}}function c(b){return function(a){return["EText",b,a]}}function b(b){return function(a){return["EFlow",b,m.castListToJSArray(a)]}}function e(b){return["Line",m.castListToJSArray(b)]}function i(b){return function(a){var c=m.castListToJSArray(b);0<c.length&&c.push(c[0]);return["Shape",c,a]}}function a(b){return function(a){return function(c){return function(f){return["Form",b,a,c,f]}}}}function j(b){return function(a){return function(c){return["FLine",
47−b,a,c]}}}function l(b){return function(a){return function(c){return["FShape",b,a,c]}}}function n(b,a,c,f,h,g){return["Element",Guid.guid(),b,a,c,f,h,g]}function h(b,a,c){return["Element",Guid.guid(),b,a,c,1,["Nothing"],["Nothing"]]}function f(b){return~~b[3]}function g(b){return~~b[4]}function s(b){return function(a){return function(c){return h(["EImage",m.castStringToJSString(c)],b,a)}}}function k(b){return function(a){return h(w,b,a)}}function p(b){return function(a){return function(c){var f=map(function(c){return["Tuple2",
48−b/2*Math.cos(2*(Math.PI/50)*c),a/2*Math.sin(2*(Math.PI/50)*c)]}),h=49,g=["Nil"];if(0<=h){do g=["Cons",h,g];while(0<h--)}return i(f(g))(c)}}}for(this.i in Elm.List)eval("var "+this.i+" = Elm.List[this.i];");var m=Elm.JavaScript,x=["DRight"],u=["DDown"],t=["DOut"],q=["Near"],r=["Mid"],v=["Far"],w=["EEmpty"],y=["Solid"],z=["Dotted"],A=["Dashed"],B=["Filled"],C=["Outlined"],D=d(q)(q),E=d(v)(q),F=d(q)(v),G=d(v)(v),H=d(q)(r),I=d(v)(r),q=d(r)(q),v=d(r)(v),r=d(r)(r);return{left:["DLeft"],right:x,down:u,up:["DUp"],
49−inward:["DIn"],outward:t,topLeft:D,topRight:E,bottomLeft:F,bottomRight:G,midLeft:H,midRight:I,midTop:q,midBottom:v,middle:r,middleAt:function(b){return function(a){return["PositionAt",b,a]}},topLeftAt:function(b){return function(a){return["PositionTL",b,a]}},topRightAt:function(b){return function(a){return["PositionTR",b,a]}},bottomLeftAt:function(b){return function(a){return["PositionBL",b,a]}},bottomRightAt:function(b){return function(a){return["PositionBR",b,a]}},absolute:function(b){return["Absolute",
50−b]},relative:function(b){return["Relative",b]},width:function(b){return function(a){var c=a[2];switch(c[0]){case "EImage":case "EVideo":return n(a[2],b,a[4]*b/a[3],a[5],a[6],a[7]);case "EText":return c=Value.getTextSize(b,a[4],c[2]),n(a[2],b,c[1],a[5],a[6],a[7])}return n(a[2],b,a[4],a[5],a[6],a[7])}},height:function(b){return function(a){switch(a[2][0]){case "EImage":case "EVideo":return n(a[2],a[3]*b/a[4],b,a[5],a[6],a[7])}return n(a[2],a[3],b,a[5],a[6],a[7])}},size:function(b){return function(a){return function(c){return n(c[2],
51−b,a,c[5],c[6],c[7])}}},opacity:function(b){return function(a){return n(a[2],a[3],a[4],b,a[6],a[7])}},color:function(b){return function(a){return n(a[2],a[3],a[4],a[5],["Just",b],a[7])}},link:function(a){return function(b){return n(b[2],b[3],b[4],b[5],b[6],["Just",m.castStringToJSString(a)])}},widthOf:f,heightOf:g,sizeOf:function(b){return["Tuple2",~~b[3],~~b[4]]},text:function(b){var a=Value.getTextSize(0,0,b);return h(c("left")(b),a[0],a[1])},asText:function(b){var b=Elm.Text.monospace(Value.toText(Value.show(b))),
52−a=Value.getTextSize(0,0,b);return h(c("left")(b),a[0],a[1])},plainText:function(b){var b=Value.toText(b),a=Value.getTextSize(0,0,b);return h(c("left")(b),a[0],a[1])},centeredText:function(b){var a=Value.getTextSize(0,0,b);return h(c("center")(b),a[0],a[1])},justifiedText:function(b){var a=Value.getTextSize(0,0,b);return h(c("justify")(b),a[0],a[1])},rightedText:function(b){var a=Value.getTextSize(0,0,b);return h(c("right")(b),a[0],a[1])},image:s,images:function(b){var a=Elm.Signal.constant(k(0)(0)),
53−b=Elm.Signal.lift(function(b){var b=m.castStringToJSString(b),c=new Image;c.onload=function(){Dispatcher.notify(a.id,s(this.width)(this.height)(b))};c.src=b})(b);return Elm.Signal.lift2(function(b){return function(){return b}})(a)(b)},video:function(b){return function(a){return function(c){return h(["EVideo",m.castStringToJSString(c)],b,a)}}},fittedImage:function(b){return function(a){return function(c){return h(["EFittedImage",m.castStringToJSString(c)],b,a)}}},flow:function(a){return function(c){var e;
54−e=map(f)(c);a:{switch(a[0]){case "DLeft":e=sum(e);break a;case "DRight":e=sum(e);break a}e=maximum(e)}var d;d=map(g)(c);a:{switch(a[0]){case "DDown":d=sum(d);break a;case "DUp":d=sum(d);break a}d=maximum(d)}return h(b(a)(c),e,d)}},above:function(a){return function(c){return h(b(u)(["Cons",a,["Cons",c,["Nil"]]]),Math.max(~~a[3],~~c[3]),~~a[4]+~~c[4])}},below:function(a){return function(c){return h(b(u)(["Cons",c,["Cons",a,["Nil"]]]),Math.max(~~a[3],~~c[3]),~~a[4]+~~c[4])}},beside:function(a){return function(c){return h(b(x)(["Cons",
55−a,["Cons",c,["Nil"]]]),~~a[3]+~~c[3],Math.max(~~a[4],~~c[4]))}},layers:function(a){return h(b(t)(a),maximum(map(f)(a)),maximum(map(g)(a)))},collage:function(a){return function(b){return function(c){return h(["ECollage",a,b,Value.groupForms(c)],a,b)}}},spacer:k,container:function(a){return function(b){return function(c){return function(f){return h(["EContainer",c,f],a,b)}}}},line:e,segment:function(a){return function(b){return e(["Cons",a,["Cons",b,["Nil"]]])}},polygon:i,rect:function(a){return function(b){return function(c){return i(["Cons",
56−["Tuple2",0-a/2,0-b/2],["Cons",["Tuple2",0-a/2,b/2],["Cons",["Tuple2",a/2,b/2],["Cons",["Tuple2",a/2,0-b/2],["Nil"]]]]])(c)}}},oval:p,circle:function(a){return p(2*a)(2*a)},ngon:function(a){return function(b){return function(c){var f=map(function(c){return["Tuple2",b*Math.cos(2*(Math.PI/a)*c),b*Math.sin(2*(Math.PI/a)*c)]}),h=a-1,g=["Nil"];if(0<=h){do g=["Cons",h,g];while(0<h--)}return i(f(g))(c)}}},solid:function(b){return function(c){return a(0)(1)(["Tuple2",0,0])(j(y)(b)(c))}},dotted:function(b){return function(c){return a(0)(1)(["Tuple2",
57−0,0])(j(z)(b)(c))}},dashed:function(b){return function(c){return a(0)(1)(["Tuple2",0,0])(j(A)(b)(c))}},customLine:function(b){return function(c){return function(f){return a(0)(1)(["Tuple2",0,0])(j(["Custom",m.castListToJSArray(b)])(c)(f))}}},filled:function(b){return function(c){return a(0)(1)(c[2])(l(B)(b)(c))}},outlined:function(b){return function(c){return a(0)(1)(c[2])(l(C)(b)(c))}},customOutline:function(b){return function(c){return function(f){return a(0)(1)(f[2])(l(["CustomOutline",m.castListToJSArray(b)])(c)(f))}}},
58−textured:function(b){return function(c){return a(0)(1)(c[2])(l(["Textured",b])(null)(c))}},sprite:function(b){return function(c){return function(f){return function(h){return a(0)(1)(h)(["FImage",c,f,m.castStringToJSString(b)])}}}},toForm:function(b){return function(c){return a(0)(1)(b)(["FElement",c])}},rotate:function(b){return function(c){a:{switch(c[0]){case "Form":var f=c[2],h=c[3],g=c[4],c=a(b+c[1])(f)(h)(g);break a}throw"Non-exhaustive pattern match in case";}return c}},scale:function(b){return function(c){return a(c[1])(b*
59−c[2])(c[3])(c[4])}},move:function(b){return function(c){return function(f){var h;a:{switch(f[0]){case "Form":h=f[1];var g=f[2],e=f[3],f=f[4];switch(e[0]){case "Tuple2":var d=e[1],e=e[2];h=a(h)(g)(["Tuple2",b+d,c+e])(f);break a}}throw"Non-exhaustive pattern match in case";}return h}}},isWithin:Collage.insideForm}}();
60−Elm.Text=function(){function d(b){return Value.toText(b)}var c=function(b){return function(a){return"<"+b+' style="padding:0;margin:0">'+a+"</"+b+">"}},b=function(b,a){return function(c){return"<span style='"+b+":"+a+"'>"+c+"</span>"}},e=function(a){a=Elm.JavaScript.castStringToJSString(a);return b("font-family",a)},i=c("h1"),a=b("font-style","italic"),c=c("b"),j=b("text-decoration","underline"),l=b("text-decoration","overline"),n=b("text-decoration","line-through");return{fromString:d,toText:d,header:i,
61−height:function(a){return b("font-size",a+"em")},italic:a,bold:c,underline:j,overline:l,strikeThrough:n,monospace:e("monospace"),typeface:e,color:function(a){return b("color",Elm.Color.extract(a))},link:function(b){return function(a){return"<a href='"+d(b)+"'>"+a+"</a>"}}}}();
62−var Render=function(){function d(b){b=document.createElement(b);b.style.padding="0";b.style.margin="0";return b}function c(b){return b}function b(b){b.style.styleFloat="left";b.style.cssFloat="left";return b}function e(b){b.style.position="absolute";return b}function i(b,a,c){for(var e=d("div"),k=c.length;k--;){var i=b(a(c[k]));e.appendChild(i)}return e}function a(b){switch(b[0]){case "Absolute":return b[1]+"px";case "Relative":return 100*b[1]+"%"}}function j(b,c){c.style.position="absolute";c.style.margin=
63−"auto";switch(b[0]){case "Position":"Far"!==b[1][0]&&(c.style.left=0);"Near"!==b[1][0]&&(c.style.right=0);"Far"!==b[2][0]&&(c.style.top=0);"Near"!==b[2][0]&&(c.style.bottom=0);break;case "PositionAt":c.style.top=a(b[2]);c.style.left=a(b[1]);var g="translate("+~~(-c.style.width.slice(0,-2)/2)+"px,"+~~(-c.style.height.slice(0,-2)/2)+"px)";c.style.transform=g;c.style.msTransform=g;c.style.MozTransform=g;c.style.webkitTransform=g;c.style.OTransform=g;break;default:g=b[0].slice(-2),c.style["T"===g[0]?
64−"top":"bottom"]=a(b[2]),c.style["L"===g[1]?"left":"right"]=a(b[1])}}function l(a){var f={};switch(a[2][0]){case "EText":var f=a[2][1],g=a[2][2],s=d("div");s.innerHTML=g;s.style.textAlign=f;f=s;break;case "EImage":f=a[2][1];g=d("img");g.src=f;g.name=f;g.style.display="block";f=g;break;case "EVideo":s=a[2][1];f=d("video");f.controls="controls";g=d("source");g.src=s;s=s.split(".");g.type="video/"+s[s.length-1];f.appendChild(g);f.style.display="block";break;case "EFittedImage":var k=a[3],p=a[4],f=a[2][1],
65−g=d("div");g.style.width=k+"px";g.style.height=p+"px";g.style.position="relative";g.style.overflow="hidden";var m=d("img");m.onload=function(){m.style.position="absolute";m.style.margin="auto";var b=k,a=p;k/p>this.width/this.height?a=Math.round(this.height*k/this.width):b=Math.round(this.width*p/this.height);m.style.width=b+"px";m.style.height=a+"px";m.style.left=(k-b)/2+"px";m.style.top=(p-a)/2+"px"};m.src=f;m.name=f;g.appendChild(m);f=g;break;case "EFlow":a:{f=a[2][2];switch(a[2][1][0]){case "DDown":f=
66−f.slice(0).reverse();case "DUp":f=i(c,l,f);break a;case "DRight":f=f.slice(0).reverse();case "DLeft":f=i(b,l,f);break a;case "DOut":f=f.slice(0).reverse();case "DIn":f=i(e,l,f);break a}f=void 0}break;case "ECollage":f=Collage.collage(a[2][1],a[2][2],a[2][3]);break;case "EEmpty":f=d("div");break;case "EContainer":g=a[2][1];f=l(a[2][2]);j(g,f);g=d("div");g.style.position="relative";g.style.overflow="hidden";g.appendChild(f);f=g;break;case "EHtml":f=a[2][1];"button"!==f.type&&(g=Value.getExcess(f),a[3]-=
67−g[0],a[4]-=g[1]);break;case "EExternalHtml":f=d("div"),f.appendChild(a[2][1])}f.id=a[1];f.style.width=~~a[3]+"px";f.style.height=~~a[4]+"px";1!==a[5]&&(f.style.opacity=a[5]);"Just"===a[6][0]&&(f.style.backgroundColor=Elm.Color.extract(a[6][1]));return"Just"===a[7][0]?(g=d("a"),g.href=a[7][1],g.appendChild(f),g):f}function n(a,f,g){"A"===a.tagName&&(a=a.firstChild);if(f[1]!==g[1]){if(f[2][0]!==g[2][0])return a.parentNode.replaceChild(l(g),a);var d=g[2],k=f[2];switch(d[0]){case "EText":d[1]!==k[1]&&
68−(a.style.textAlign=d[1]);d[2]!==k[2]&&(a.innerHTML=d[2]);break;case "EImage":d[1]!==k[1]&&(a.src=d[1]);break;case "EVideo":case "EFittedImage":if(!Value.eq(d,k)||g[3]!==f[3]||g[4]!==f[4])return a.parentNode.replaceChild(l(g),a);break;case "ECollage":if(d[1]!==k[1]||d[2]!==k[2]||d[3].length!==k[3].length)return a.parentNode.replaceChild(l(g),a);Collage.updateCollage(a,k[3],d[3]);break;case "EFlow":if(d[1]!==k[1])return a.parentNode.replaceChild(l(g),a);var i=d[2],m=a.childNodes;if(i.length!==m.length)return a.parentNode.replaceChild(l(g),
69−a);var k=k[2],x=function(a){return a};switch(d[1][0]){case "DDown":case "DUp":x=c;break;case "DRight":case "DLeft":x=b;break;case "DOut":case "DIn":x=e}for(d=m.length;d--;)n(m[d],k[d],i[d]),x(m[d]);break;case "EContainer":n(a.childNodes[0],k[2],d[2]);j(d[1],a.childNodes[0]);break;case "EHtml":g[1]!==f[1]&&(i=l(g),a.parentNode.replaceChild(i,a),a=i);"button"!==i.type&&(d=Value.getExcess(a),g[3]-=d[0],g[4]-=d[1]);break;case "EExternalHtml":g[1]!==f[1]&&a.parentNode.replaceChild(l(g),a)}g[3]!==f[3]&&
70−(a.style.width=~~g[3]+"px");g[4]!==f[4]&&(a.style.height=~~g[4]+"px");g[5]!==f[5]&&(a.style.opacity=g[5]);2===g[6].length&&(d=Elm.Color.extract(g[6][1]),d!==a.style.backgroundColor&&(a.style.backgroundColor=d));if(2===g[7].length&&(1===f[7].length||g[7][1]!==f[7][1]))a.parentNode.href=g[7][1];g[1]=f[1]}}return{render:l,update:n,addTo:function(a,b){a.appendChild(b)},newElement:d,flowWith:i,goIn:e}}();
71−Elm.Signal=function(){function d(a){this.id=Guid.guid();this.value=a;this.kids=[];this.defaultNumberOfKids=0;this.recv=function(a,b,c){if(b=b===this.id)this.value=c;n(this,a,b);return b};Dispatcher.inputs.push(this)}function c(a,b){this.id=Guid.guid();this.value=null;this.kids=[];this.count=0;this.changed=!1;b.reverse();this.recalc=function(){for(var c=a,e=b.length;e--;)c=c(b[e].value);this.value=c};this.recalc();this.recv=function(a,c){this.count+=1;c&&(this.changed=!0);this.count==b.length&&(this.changed&&
72−this.recalc(),n(this,a,this.changed),this.changed=!1,this.count=0)};for(var c=b.length;c--;)b[c].kids.push(this)}function b(a,b,c,e){this.id=Guid.guid();this.value=c?b(e.value):b;this.kids=[];this.recv=function(b,c){c&&(this.value=a(e.value)(this.value));n(this,b,c)};e.kids.push(this)}function e(a,b,c){this.id=Guid.guid();this.value=a(c.value)?b:c.value;this.kids=[];this.recv=function(b,e){var g=e&&!a(c.value);g&&(this.value=c.value);n(this,b,g)};c.kids.push(this)}function i(a){this.id=Guid.guid();
73−this.value=a.value;this.kids=[];this.recv=function(b,c){var e=c&&!Value.eq(this.value,a.value);e&&(this.value=a.value);n(this,b,e)};a.kids.push(this)}function a(a,b){this.id=Guid.guid();var c=(new window.Date).getTime();this.value=a?Value.Tuple(c,b.value):c;this.kids=[];this.recv=function(c,e){e&&(this.value=a?Value.Tuple(c,b.value):c);n(this,c,e)};b.kids.push(this)}function j(a,b){this.id=Guid.guid();this.value=b.value;this.kids=[];this.count=0;this.changed=!1;this.recv=function(c,e,d){d===a.id&&
74−(this.changed=e);this.count+=1;2==this.count&&(this.changed&&(this.value=b.value),n(this,c,this.changed),this.count=0,this.changed=!1)};a.kids.push(this);b.kids.push(this)}function l(a,b){this.id=Guid.guid();this.value=a.value;this.kids=[];this.next=null;this.count=0;this.changed=!1;this.recv=function(c,e,d){this.count+=1;e&&(this.changed=!0,d==b.id&&null===this.next&&(this.next=b.value),d==a.id&&(this.next=a.value));2==this.count&&(this.changed&&(this.value=this.next,this.next=null),n(this,c,this.changed),
75−this.changed=!1,this.count=0)};a.kids.push(this);b.kids.push(this)}var n=function(a,b,c){for(var e=a.kids,d=e.length;d--;)e[d].recv(b,c,a.id)},h=function(a){return function(b){return function(d){d=new c(function(a){return function(b){return[a,b]}},[a,d]);d=new e(function(a){return a[0]},[!0,b],d);return new c(function(a){return a[1]},[d])}}};return{constant:function(a){return new d(a)},lift:function(a){return function(b){return new c(a,[b])}},lift2:function(a){return function(b){return function(e){return new c(a,
76−[b,e])}}},lift3:function(a){return function(b){return function(e){return function(d){return new c(a,[b,e,d])}}}},lift4:function(a){return function(b){return function(e){return function(d){return function(h){return new c(a,[b,e,d,h])}}}}},lift5:function(a){return function(b){return function(e){return function(d){return function(h){return function(i){return new c(a,[b,e,d,h,i])}}}}}},lift6:function(a){return function(b){return function(e){return function(d){return function(h){return function(i){return function(l){return new c(a,
77−[b,e,d,h,i,l])}}}}}}},lift7:function(a){return function(b){return function(e){return function(d){return function(h){return function(i){return function(l){return function(j){return new c(a,[b,e,d,h,i,l,j])}}}}}}}},lift8:function(a){return function(b){return function(e){return function(d){return function(h){return function(i){return function(l){return function(j){return function(n){return new c(a,[b,e,d,h,i,l,j,n])}}}}}}}}},foldp:function(a){return function(c){return function(e){return new b(a,c,!1,
78−e)}}},foldp_:function(a){return function(c){return function(e){return new b(a,c,!0,e)}}},foldp1:function(a){return function(c){return new b(a,function(a){return a},!0,c)}},delay:function(a){return function(b){var e=new d(b.value),h=!0,b=new j(e,new c(function(a){return function(){return a}},[e,new c(function(b){h||setTimeout(function(){Dispatcher.notify(e.id,b)},a)},[b])])),h=!1;return b}},merge:function(a){return function(b){return new l(a,b)}},merges:function(a){return Elm.List.foldl1(function(a){return function(b){return new l(a,
79−b)}})(a)},average:function(a){return function(b){for(var e=Array(a),d=a;d--;)e[d]=0;var d=0,h=!1,i=0;return new c(function(b){i+=b-e[d];e[d]=b;b=i/Math.max(1,h?a:d);++d==a&&(h=!0,d=0);return b},[b])}},count:function(a){return new b(function(){return function(a){return a+1}},0,!1,a)},countIf:function(a){return function(c){return new b(function(b){return function(c){return a(b)?c+1:c}},0,!1,c)}},keepIf:function(a){return function(b){return function(c){return new e(function(b){return!a(b)},b,c)}}},dropIf:function(a){return function(b){return function(c){return new e(a,
80−b,c)}}},keepWhen:function(a){return h(new c(function(a){return!a},[a]))},dropWhen:h,dropRepeats:function(a){return new i(a)},sampleOn:function(a){return function(b){return new j(a,b)}},timestamp:function(b){return new a(!0,b)},timeOf:function(b){return new a(!1,b)}}}();
81−var Dispatcher=function(){function d(b){if(!b.hasOwnProperty("defaultNumberOfKids"))return!0;var a=b.kids.length;if(0==a)return!1;if(a>b.defaultNumberOfKids)return!0;for(var c=!1;a--;)c=c||d(b.kids[a]);return c}var c=null,b=[],e=null;return{initialize:function(){c=Elm.main();c.hasOwnProperty("recv")||(c=Elm.Signal.constant(c));e=c.value;for(var i=[],a=b.length;a--;)d(b[a])&&i.push(b[a]);b=i;document.getElementById("content").appendChild(Render.render(e));i=document.getElementById("widthChecker").offsetWidth;
82−i!==window.innerWidth&&Dispatcher.notify(Elm.Window.dimensions.id,Value.Tuple(i,window.innerHeight));c=Elm.Signal.lift(function(a){var b=document.getElementById("content");Render.update(b.firstChild,e,a);return e=a})(c)},notify:function(c,a){for(var e=(new window.Date).getTime(),d=!1,n=b.length;n--;)d=b[n].recv(e,c,a)||d;return d},inputs:b}}();
83−Elm.HTTP=function(){function d(b){return function(c){return function(e){return function(d){return{"0":"Request",length:1,verb:a.castStringToJSString(b),url:a.castStringToJSString(c),data:null===e?null:a.castStringToJSString(e),headers:d}}}}}function c(a){return d("GET")(a)(null)(["Nil"])}function b(b,c){return function(d){if(""!==d.url){var f={value:["Waiting"]};b.push(f);var g=null;window.ActiveXObject&&(g=new ActiveXObject("Microsoft.XMLHTTP"));window.XMLHttpRequest&&(g=new XMLHttpRequest);g.onreadystatechange=
84−function(){4===g.readyState&&(f.value=200===g.status?["Success",j(g.responseText)]:["Failure",g.status,j(g.statusText)],setTimeout(function(){e(b,c)},0))};g.open(d.verb,d.url,!0);Elm.List.map(function(b){g.setRequestHeader(a.castStringToJSString(b[1]),a.castStringToJSString(b[2]))})(d.headers);g.send(d.data)}}}function e(a,b){0<a.length&&(Dispatcher.notify(b.id,a[0].value),"Waiting"!==a[0].value[0]&&(a.shift(),setTimeout(function(){e(a,b)},0)))}function i(a){var c=Elm.Signal.constant(["Waiting"]),
85−a=Elm.Signal.lift(b([],c))(a);return Elm.Signal.lift2(function(a){return function(){return a}})(c)(a)}var a=Elm.JavaScript,j=Elm.JavaScript.castJSStringToString;return{get:c,post:function(a){return function(b){return d("POST")(a)(b)(["Nil"])}},request:d,send:i,sendGet:function(a){return i(Elm.Signal.lift(c)(a))}}}();
86−Elm.Input=function(){var d=Elm.JavaScript,c=Elm.JavaScript.castJSStringToString,b=function(a,b){a.placeholder=d.castStringToJSString(b);var e=Elm.Signal.constant(["Nil"]);Value.addListener(a,"keyup",function(){Dispatcher.notify(e.id,c(a.value));a.focus()});a.style.padding="1px";return Value.Tuple(Value.wrap(a),e)},e=function(a){a=document.createElement(a);a.style.padding="0";a.style.margin="0";return a},i=function(a){for(var b=e("select"),c=[];"Cons"===a[0];){var d=e("option"),h=Value.toText(a[1][1]);
87−d.value=h;d.innerHTML=h;b.appendChild(d);c.push(a[1][2]);a=a[2]}var f=Elm.Signal.constant(c[0]);Value.addListener(b,"change",function(){Dispatcher.notify(f.id,c[b.selectedIndex])});return Value.Tuple(Value.wrap(b),f)};return{textArea:function(a){return function(c){var d=e("textarea");d.rows=c;d.cols=a;return b(d,"")}},textField:function(a){var c=e("input");c.type="text";return b(c,a)},password:function(a){var c=e("input");c.type="password";return b(c,a)},checkbox:function(a){var b=e("input");b.type=
88−"checkbox";b.checked=a;var c=Elm.Signal.constant(a);Value.addListener(b,"change",function(){Dispatcher.notify(c.id,b.checked)});return Value.Tuple(Value.wrap(b),c)},dropDown:i,stringDropDown:function(a){return i(Elm.List.map(function(a){return Value.Tuple(a,a)})(a))},button:function(a){var b=e("input");b.type="button";b.value=d.castStringToJSString(a);var c=Elm.Signal.constant(!1);Value.addListener(b,"click",function(){Dispatcher.notify(c.id,!0);Dispatcher.notify(c.id,!1)});return Value.Tuple(Value.wrap(b),
89−c)}}}();
90−Elm.Keyboard={Raw:function(){function d(b,c){return"Nil"===c[0]?c:c[1]===b?c[2]:["Cons",c[1],d(b,c[2])]}var c=Elm.Signal.constant(["Nil"]),b=Elm.Signal.constant(["Nothing"]);Value.addListener(document,"keydown",function(b){var d;a:{for(d=c.value;"Nil"!==d[0];){if(d[1]===b.keyCode){d=!0;break a}d=d[2]}d=!1}d||Dispatcher.notify(c.id,["Cons",b.keyCode,c.value])||this.removeEventListener("keydown",arguments.callee,!1)});Value.addListener(document,"keyup",function(b){var i=d(b.keyCode,c.value);Dispatcher.notify(c.id,
91−i)||this.removeEventListener("keyup",arguments.callee,!1)});Value.addListener(window,"blur",function(b){Dispatcher.notify(c.id,["Nil"])||this.removeEventListener("blur",arguments.callee,!1)});Value.addListener(document,"keypress",function(c){var d=Dispatcher.notify(b.id,["Just",c.charCode||c.keyCode]);Dispatcher.notify(b.id,["Nothing"]);d||this.removeEventListener("keypress",arguments.callee,!1)});return{keysDown:c,charPressed:b}}()};
92−Elm.Mouse=function(){function d(a){var b=0,c=0;a||(a=window.event);if(a.pageX||a.pageY)b=a.pageX,c=a.pageY;else if(a.clientX||a.clientY)b=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,c=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;return Value.Tuple(b,c)}var c=Elm.Signal.constant(Value.Tuple(0,0));c.defaultNumberOfKids=2;var b=Elm.Signal.lift(function(a){return a[1]})(c);b.defaultNumberOfKids=0;var e=Elm.Signal.lift(function(a){return a[2]})(c);e.defaultNumberOfKids=
93−0;var i=Elm.Signal.constant(!1),a=Elm.Signal.constant(!1),j=Elm.Signal.constant(Value.Tuple());Value.addListener(document,"click",function(b){var c=Dispatcher.notify(a.id,!0),d=Dispatcher.notify(j.id,Value.Tuple());Dispatcher.notify(a.id,!1);!c&&!d&&this.removeEventListener("click",arguments.callee,!1)});Value.addListener(document,"mousedown",function(a){Dispatcher.notify(i.id,!0)||this.removeEventListener("mousedown",arguments.callee,!1)});Value.addListener(document,"mouseup",function(a){Dispatcher.notify(i.id,
94−!1)||this.removeEventListener("mouseup",arguments.callee,!1)});Value.addListener(document,"mousemove",function(a){Dispatcher.notify(c.id,d(a))||this.removeEventListener("mousemove",arguments.callee,!1)});return{position:c,x:b,y:e,isClicked:a,isDown:i,clicks:j,isClickedOn:function(a){var a=Render.render(a),b=Elm.Signal.constant(!1);Value.addListener(a,"click",function(){Dispatcher.notify(b.id,!0);Dispatcher.notify(b.id,!1)});return Value.Tuple(Value.wrap(a),b)}}}();
95−Elm.Random=function(){return{inRange:function(d){return function(c){return Elm.Signal.constant(Math.floor(Math.random()*(c-d+1))+d)}},randomize:function(d){return function(c){return function(b){return Elm.Signal.lift(function(){return Math.floor(Math.random()*(c-d+1))+d})(b)}}}}}();
96−Elm.Time=function(){function d(){return(new window.Date).getTime()}function c(b){return function(c){var i=1E3/b,a=d(),j=a,l=0,n=!0,h=Elm.Signal.constant(l),f=0;return Elm.Signal.lift2(function(b){return function(c){if(b){var e=!n&&b;f=setTimeout(function(){j=d();l=e?0:j-a;a=j;Dispatcher.notify(h.id,l)},i)}else n&&clearTimeout(f);n=b;return c}})(c)(h)}}Elm.Signal.constant(!0);return{fpsWhen:c,fps:function(b){return c(b)(Elm.Signal.constant(!0))},every:function(b){var c=Elm.Signal.constant(d());setInterval(function(){Dispatcher.notify(c.id,
97−d())},b);return c},delay:Elm.Signal.delay,since:function(b){return function(c){var d=Elm.Signal.count(Elm.Signal.delay(b)(c));return Elm.Signal.lift2(function(a){return function(b){return!Value.eq(a,b)}})(Elm.Signal.count(c))(d)}},after:function(b){var b=1E3*b,c=Elm.Signal.constant(!1);setTimeout(function(){Dispatcher.notify(c.id,!0)},b);return c},before:function(b){var b=1E3*b,c=Elm.Signal.constant(!0);setTimeout(function(){Dispatcher.notify(c.id,!1)},b);return c},hour:36E5,minute:6E4,second:1E3,
98−ms:1,inHours:function(b){return b/36E5},inMinutes:function(b){return b/6E4},inSeconds:function(b){return b/1E3},inMss:function(b){return b},toDate:function(b){return new window.Date(b)},read:function(b){b=window.Date.parse(b);return isNaN(b)?["Nothing"]:["Just",b]}}}();
99−Elm.Window=function(){var d=Elm.Signal.constant(Value.Tuple(window.innerWidth,window.innerHeight));d.defaultNumberOfKids=2;var c=Elm.Signal.lift(function(b){return b[1]})(d);c.defaultNumberOfKids=0;var b=Elm.Signal.lift(function(b){return b[2]})(d);b.defaultNumberOfKids=0;Value.addListener(window,"resize",function(b){var c=document.getElementById("widthChecker").offsetWidth;Dispatcher.notify(d.id,Value.Tuple(c,window.innerHeight))||this.removeEventListener("resize",arguments.callee,!1)});return{dimensions:d,
100−width:c,height:b}}();
101−Elm.Date=function(){var d="Sun Mon Tue Wed Thu Fri Sat".split(" "),c="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ");return{read:function(b){b=new window.Date(Elm.JavaScript.castStringToJSString(b));return isNaN(b.getTime())?["Nothing"]:["Just",b]},year:function(b){return b.getFullYear()},month:function(b){return[c[b.getMonth()]]},day:function(b){return b.getDate()},hour:function(b){return b.getHours()},minute:function(b){return b.getMinutes()},second:function(b){return b.getSeconds()},dayOfWeek:function(b){return[d[b.getDay()]]},
102−toTime:function(b){return b.getTime()},Mon:["Mon"],Tue:["Tue"],Wed:["Wed"],Thu:["Thu"],Fri:["Fri"],Sat:["Sat"],Sun:["Sun"],Jan:["Jan"],Feb:["Feb"],Mar:["Mar"],Apr:["Apr"],May:["May"],Jun:["Jun"],Jul:["Jul"],Aug:["Aug"],Sep:["Sep"],Oct:["Oct"],Nov:["Nov"],Dec:["Dec"]}}();Value.addListener(document,"elm_log",function(d){console.log(d.value)});Value.addListener(document,"elm_title",function(d){document.title=d.value});
103−Value.addListener(document,"elm_redirect",function(d){0<d.value.length&&(window.location=d.value)});
104−Elm.Prelude=function(){var d=function(c){return function(b){var e=c%b,e=0==c?0:0<b?0<=c?e:e+b:-d(-c)(-b);return e==b?0:e}};return{eq:Value.eq,id:function(c){return c},not:function(c){return!c},fst:function(c){return c[1]},snd:function(c){return c[2]},rem:function(c){return function(b){return c%b}},div:function(c){return function(b){return~~(c/b)}},otherwise:!0,compare:function(c){return function(b){if(c instanceof Array&&b instanceof Array){var d=c.length;if(d==b.length){for(var i=0;i<d;++i){var a=
105−compare(c[i])(b[i]);if("EQ"!==a[0])return a}return["EQ"]}}return[c===b?"EQ":c<b?"LT":"GT"]}},toFloat:function(c){return c},round:function(c){return Math.round(c)},floor:function(c){return Math.floor(c)},ceiling:function(c){return Math.ceil(c)},truncate:function(c){return~~c},readInt:function(c){var c=Elm.JavaScript.castStringToJSString(c),b=c.length;if(0===b)return["Nothing"];var d=0;if("-"==c[0]){if(1===b)return["Nothing"];d=1}for(;d<b;++d)if(!Elm.Char.isDigit(c[d]))return["Nothing"];return["Just",
106−parseInt(c)]},readFloat:function(c){var c=Elm.JavaScript.castStringToJSString(c),b=c.length;if(0===b)return["Nothing"];var d=0;if("-"==c[0]){if(1===b)return["Nothing"];d=1}for(var i=0;d<b;++d)if(!Elm.Char.isDigit(c[d])){if("."===c[d]&&(i+=1,1>=i))continue;return["Nothing"]}return["Just",parseFloat(c)]},sqrt:Math.sqrt,abs:Math.abs,pi:Math.PI,e:Math.E,sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,atan2:function(c){return function(b){return Math.atan2(c,b)}},mod:d,
107−min:function(c){return function(b){return Math.min(c,b)}},max:function(c){return function(b){return Math.max(c,b)}},flip:function(c){return function(b){return function(d){return c(d)(b)}}},clamp:function(c){return function(b){return function(d){return Math.min(b,Math.max(c,d))}}},curry:function(c){return function(b){return function(d){return c(["Tuple2",b,d])}}},uncurry:function(c){return function(b){if("Tuple2"!==b[0])throw"Function was uncurry'd but was not given a pair.";return c(b[1])(b[2])}},
108−logBase:function(c){return function(b){return Math.log(b)/Math.log(c)}},Just:Elm.Maybe.Just,Nothing:Elm.Maybe.Nothing,maybe:Elm.Maybe.maybe,map:Elm.List.map,zip:Elm.List.zip,zipWith:Elm.List.zipWith,filter:Elm.List.filter,head:Elm.List.head,tail:Elm.List.tail,last:Elm.List.last,length:Elm.List.length,reverse:Elm.List.reverse,foldr:Elm.List.foldr,foldr1:Elm.List.foldr1,foldl:Elm.List.foldl,foldl1:Elm.List.foldl1,and:Elm.List.and,or:Elm.List.or,all:Elm.List.all,any:Elm.List.any,sum:Elm.List.sum,product:Elm.List.product,
109−concat:Elm.List.concat,concatMap:Elm.List.concatMap,maximum:Elm.List.maximum,minimum:Elm.List.minimum,scanl:Elm.List.scanl,scanl1:Elm.List.scanl1,take:Elm.List.take,drop:Elm.List.drop,zip:Elm.List.zip,unzip:Elm.List.unzip,lift:Elm.Signal.lift,lift2:Elm.Signal.lift2,lift3:Elm.Signal.lift3,lift4:Elm.Signal.lift4,lift5:Elm.Signal.lift5,lift6:Elm.Signal.lift6,lift7:Elm.Signal.lift7,lift8:Elm.Signal.lift8,foldp:Elm.Signal.foldp,foldp1:Elm.Signal.foldp1,foldp_:Elm.Signal.foldp_,constant:Elm.Signal.constant,
110−merge:Elm.Signal.merge,count:Elm.Signal.count,countIf:Elm.Signal.countIf,average:Elm.Signal.average,keepIf:Elm.Signal.keepIf,dropIf:Elm.Signal.dropIf,keepWhen:Elm.Signal.keepWhen,dropWhen:Elm.Signal.dropWhen,dropRepeats:Elm.Signal.dropRepeats,sampleOn:Elm.Signal.sampleOn,timestamp:Elm.Signal.timestamp,timeOf:Elm.Signal.timeOf}}();(function(){var d=function(c){for(var b in c)Elm.Prelude[b]=c[b]};d(Elm.Color);d(Elm.Text);d(Elm.Graphics);d(Elm.Time);show=Value.show})();
111−Elm.Dict=function(){function d(a){return function(b){return function(c){return function(d){return function(e){return["RBNode",a,b,c,d,e]}}}}}function c(a){return function(){switch(a[0]){case "RBEmpty":return z(Value.str("(min RBEmpty) is not defined"));case "RBNode":switch(a[4][0]){case "RBEmpty":return["Tuple2",a[2],a[3]]}return c(a[4])}throw"Non-exhaustive pattern match in case";}()}function b(a){return function(c){var d;a:{switch(c[0]){case "RBEmpty":d=Nothing;break a;case "RBNode":d=function(){switch(compare(a)(c[2])[0]){case "EQ":return Just(c[3]);
112−case "GT":return b(a)(c[5]);case "LT":return b(a)(c[4])}throw"Non-exhaustive pattern match in case";}();break a}throw"Non-exhaustive pattern match in case";}return d}}function e(a){return function(b){return function(c){var d;a:{switch(c[0]){case "RBEmpty":d=a;break a;case "RBNode":d=function(){switch(compare(b)(c[2])[0]){case "EQ":return c[3];case "GT":return e(a)(b)(c[5]);case "LT":return e(a)(b)(c[4])}throw"Non-exhaustive pattern match in case";}();break a}throw"Non-exhaustive pattern match in case";
113−}return d}}}function i(a){return function(c){return q(b(a)(c))}}function a(a){a:{switch(a[0]){case "RBNode":switch(a[5][0]){case "RBNode":a=d(a[1])(a[5][2])(a[5][3])(d(r)(a[2])(a[3])(a[4])(a[5][4]))(a[5][5]);break a}}a=z(Value.str("rotateLeft of a node without enough children"))}return a}function j(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":a=d(a[1])(a[4][2])(a[4][3])(a[4][4])(d(r)(a[2])(a[3])(a[4][5])(a[5]));break a}}a=z(Value.str("rotateRight of a node without enough children"))}return a}
114−function l(a){a:{switch(a[0]){case "Black":a=r;break a;case "Red":a=v;break a}throw"Non-exhaustive pattern match in case";}return a}function n(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":switch(a[5][0]){case "RBNode":a=d(l(a[1]))(a[2])(a[3])(d(l(a[4][1]))(a[4][2])(a[4][3])(a[4][4])(a[4][5]))(d(l(a[5][1]))(a[5][2])(a[5][3])(a[5][4])(a[5][5]));break a}}}a=z(Value.str("color_flip called on a RBEmpty or RBNode with a RBEmpty child"))}return a}function h(b){a:switch(b[0]){case "RBNode":switch(b[5][0]){case "RBNode":switch(b[5][1][0]){case "Red":b=
115−a(b);break a}}}a:switch(b[0]){case "RBNode":switch(b[4][0]){case "RBNode":switch(b[4][1][0]){case "Red":switch(b[4][4][0]){case "RBNode":switch(b[4][4][1][0]){case "Red":b=j(b);break a}}}}}a:switch(b[0]){case "RBNode":switch(b[4][0]){case "RBNode":switch(b[4][1][0]){case "Red":switch(b[5][0]){case "RBNode":switch(b[5][1][0]){case "Red":b=n(b);break a}}}}}return b}function f(a){a:switch(a[0]){case "RBNode":switch(a[1][0]){case "Red":a=d(v)(a[2])(a[3])(a[4])(a[5]);break a}}return a}function g(a){return function(b){return function(c){var e=
116−function(c){var f;a:{switch(c[0]){case "RBEmpty":f=d(r)(a)(b)(w)(w);break a;case "RBNode":f=function(){switch(compare(a)(c[2])[0]){case "EQ":return d(c[1])(c[2])(b)(c[4])(c[5]);case "GT":return d(c[1])(c[2])(c[3])(c[4])(e(c[5]));case "LT":return d(c[1])(c[2])(c[3])(e(c[4]))(c[5])}throw"Non-exhaustive pattern match in case";}();f=h(f);break a}throw"Non-exhaustive pattern match in case";}return f};return f(e(c))}}}function s(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":switch(a[4][1][0]){case "Red":a=
117−!0;break a}}}a=!1}return a}function k(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":switch(a[4][4][0]){case "RBNode":switch(a[4][4][1][0]){case "Red":a=!0;break a}}}}a=!1}return a}function p(b){if(not(s(b))&&not(k(b))){b=n(b);a:switch(b[0]){case "RBNode":b:switch(b[5][0]){case "RBNode":switch(b[5][4][0]){case "RBNode":switch(b[5][4][1][0]){case "Red":b=n(a(d(b[1])(b[2])(b[3])(b[4])(j(b[5]))));break b}}}break a}}return b}function m(a){return function(b){var e;a:{switch(b[0]){case "RBEmpty":e=
118−w;break a;case "RBNode":if("LT"===compare(a)(b[2])[0]){e=p(b);b:{switch(e[0]){case "RBEmpty":e=z(Value.str("delLT on RBEmpty"));break b;case "RBNode":e=h(d(e[1])(e[2])(e[3])(del(e[4]))(e[5]));break b}break}}else{b=s(b)?j(b):b;b:{switch(b[0]){case "RBNode":switch(b[5][0]){case "RBEmpty":b=eq(a,b[2]);break b}}b=!1}if(b)e=w;else{var b=not,g;b:{switch(e[0]){case "RBNode":switch(e[5][0]){case "RBNode":switch(e[5][1][0]){case "Red":g=!0;break b}}}g=!1}if(b=b(g)){b=not;b:{switch(e[0]){case "RBNode":switch(e[5][0]){case "RBNode":switch(e[5][4][0]){case "RBNode":switch(e[5][4][1][0]){case "Red":g=
119−!0;break b}}}}g=!1}b=b(g)}b&&(e=n(e),e=k(e)?n(j(e)):e);b:{switch(e[0]){case "RBNode":b=eq(a,e[2]);break b}b=!1}if(b)b:{switch(e[0]){case "RBEmpty":e=z(Value.str("delEQ called on a RBEmpty"));break b;case "RBNode":g=c(e[5]);c:{switch(g[0]){case "Tuple2":b=g[1];break c}break}c:{switch(g[0]){case "Tuple2":g=g[2];break c}break}var b=d(e[1])(b)(g)(e[4]),i=function(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBEmpty":a=w;break a}}a=p(a);b:{switch(a[0]){case "RBEmpty":a=w;break b;case "RBNode":a=
120−h(d(a[1])(a[2])(a[3])(i(a[4]))(a[5]));break b}throw"Non-exhaustive pattern match in case";}}return a};e=f(i(e[5]));e=h(b(e));break b}break}else b:{switch(e[0]){case "RBEmpty":e=z(Value.str("delGT called on a RBEmpty"));break b;case "RBNode":e=h(d(e[1])(e[2])(e[3])(e[4])(del(e[5])));break b}break}}}break a}throw"Non-exhaustive pattern match in case";}return f(e)}}function x(a){return function(b){a:{switch(b[0]){case "RBEmpty":b=w;break a;case "RBNode":b=d(b[1])(b[2])(a(b[3]))(x(a)(b[4]))(x(a)(b[5]));
121−break a}throw"Non-exhaustive pattern match in case";}return b}}function u(a){return function(b){return function(c){a:{switch(c[0]){case "RBEmpty":c=b;break a;case "RBNode":c=u(a)(a(c[2])(c[3])(u(a)(b)(c[4])))(c[5]);break a}throw"Non-exhaustive pattern match in case";}return c}}}function t(a){return function(b){return function(c){a:{switch(c[0]){case "RBEmpty":c=b;break a;case "RBNode":c=t(a)(a(c[2])(c[3])(t(a)(b)(c[5])))(c[4]);break a}throw"Non-exhaustive pattern match in case";}return c}}}for(this.i in Elm.Prelude)eval("var "+
122−this.i+"=Elm.Prelude[this.i];");var q=Elm.Maybe.isJust,r=["Red"],v=["Black"],w=["RBEmpty"],y=w,z=function(a){return a};return{empty:y,lookup:b,findWithDefault:e,member:i,insert:g,singleton:function(a){return function(b){return g(a)(b)(w)}},remove:m,map:x,foldl:u,foldr:t,union:function(a){return function(b){return u(g)(b)(a)}},intersect:function(a){return function(b){return u(function(a){return function(c){return function(d){return i(a)(b)?g(a)(c)(d):d}}})(y)(a)}},diff:function(a){return function(b){return u(function(a){return function(){return function(b){return m(a)(b)}}})(a)(b)}},
123−keys:function(a){return u(function(a){return function(){return function(b){return["Cons",a,b]}}})(["Nil"])(a)},values:function(a){return u(function(){return function(a){return function(b){return["Cons",a,b]}}})(["Nil"])(a)},toList:function(a){return u(function(a){return function(b){return function(c){return["Cons",["Tuple2",a,b],c]}}})(["Nil"])(a)},fromList:function(a){return List.foldl(uncurry(g))(y)(a)}}}();
124−Elm.Set=function(){var d=Elm.Dict.empty,c=Elm.Dict.remove,b=Elm.Dict.member,e=Elm.Dict.union,i=Elm.Dict.intersect,a=Elm.Dict.diff,j=Elm.Dict.keys,l=Elm.List.foldl(function(a){return function(b){return Elm.Dict.insert(a)(["Tuple0"])(b)}})(d);return{empty:d,singleton:function(a){return Elm.Dict.singleton(a)(["Tuple0"])},insert:function(a){return Elm.Dict.insert(a)(["Tuple0"])},remove:c,member:b,union:e,intersect:i,diff:a,toList:j,fromList:l,foldl:function(a){return Elm.Dict.foldl(function(b){return function(){return function(c){return a(b)(c)}}})},
125−foldr:function(a){return Elm.Dict.foldr(function(b){return function(){return function(c){return a(b)(c)}}})},map:function(a){return function(b){b=j(b);return l(Elm.List.map(a)(b))}}}}();
126−(function(){try{var d={};for(this.i in Elm)eval("var "+this.i+"=Elm[this.i];");if(Elm.Automaton)throw"Module name collision, 'Automaton' is already defined.";Elm.Automaton=function(){function b(a){return["Automaton",a]}function c(a){return b(function(b){var d=unzip(map(function(a){a:{switch(a[0]){case "Automaton":a=a[1](b);break a}throw"Non-exhaustive pattern match in case";}return a})(a)),f;a:{switch(d[0]){case "Tuple2":f=d[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(d[0]){case "Tuple2":d=
127−d[2];break a}throw"Non-exhaustive pattern match in case";}return["Tuple2",f,c(d)]})}function i(a){return b(function(b){return["Tuple2",a(b),i(a)]})}function a(c){return function(d){return b(function(b){b=d(b)(c);return["Tuple2",b,a(b)(d)]})}}function j(a){return function(c){return b(function(b){var d=c(b)(a);a:{switch(d[0]){case "Tuple2":b=d[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(d[0]){case "Tuple2":d=d[2];break a}throw"Non-exhaustive pattern match in case";}return["Tuple2",
128−b,j(d)(c)]})}}function l(a){return function(b){a:{switch(a[0]){case "Tuple2":b:{switch(b[0]){case "Tuple2":b=["Tuple2",a[1]-b[1],a[2]-b[2]];break b}break}break a}throw"Non-exhaustive pattern match in case";}return b}}function n(a){return function(b){var c;a:{switch(a[0]){case "Tuple2":b:{switch(b[0]){case "Tuple2":var d=function(a){return["Tuple2",b[2],["Tuple2",a,b[2]]]};c=function(){switch(b[1][0]){case "DragFrom":var c;a[1]?c=["Tuple2",uncurry(move)(l(a[2])(b[1][1]))(b[2]),["Tuple2",["DragFrom",
129−b[1][1]],b[2]]]:(c=uncurry(move)(l(a[2])(b[1][1]))(b[2]),c=["Tuple2",c,["Tuple2",g,c]]);return c;case "Ignore":return d(a[1]?s:g);case "Listen":return d(not(a[1])?g:isWithin(a[2])(b[2])?["DragFrom",a[2]]:s)}throw"Non-exhaustive pattern match in case";}();break b}break}break a}throw"Non-exhaustive pattern match in case";}return c}}try{if(!(Elm.Prelude instanceof Object))throw"module not found";}catch(h){throw"Module 'Prelude' is missing. Compile with --make flag or load missing module in a separate JavaScript file.";
130−}var f={};for(this.i in Elm.Prelude)f[this.i]||eval("var "+this.i+" = Elm.Prelude[this.i];");var g=["Listen"],s=["Ignore"];d[">>>"]=function(a){return function(c){var e;a:{switch(a[0]){case "Automaton":e=a[1];break a}throw"Non-exhaustive pattern match in case";}var f;a:{switch(c[0]){case "Automaton":f=c[1];break a}throw"Non-exhaustive pattern match in case";}return b(function(a){var a=e(a),b;a:{switch(a[0]){case "Tuple2":b=a[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(a[0]){case "Tuple2":a=
131−a[2];break a}throw"Non-exhaustive pattern match in case";}var c=f(b);a:{switch(c[0]){case "Tuple2":b=c[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(c[0]){case "Tuple2":c=c[2];break a}throw"Non-exhaustive pattern match in case";}return["Tuple2",b,d[">>>"](a)(c)]})}};d["<<<"]=function(a){return function(b){return d[">>>"](b)(a)}};d["^>>"]=function(a){return function(b){return d[">>>"](i(a))(b)}};d[">>^"]=function(a){return function(b){return d[">>>"](a)(i(b))}};d["^<<"]=function(a){return function(b){return d[">>>"](b)(i(a))}};
132−d["<<^"]=function(a){return function(b){return d[">>>"](i(b))(a)}};f=a(0)(function(){return function(a){return 1+a}});return{$op:{">>>":d[">>>"],"<<<":d["<<<"],"^>>":d["^>>"],">>^":d[">>^"],"^<<":d["^<<"],"<<^":d["<<^"]},run:function(a){return function(b){a:{switch(a[0]){case "Automaton":b=lift(fst)(foldp_(function(a){return function(b){a:{switch(b[0]){case "Tuple2":switch(b[2][0]){case "Automaton":b=b[2][1](a);break a}}throw"Non-exhaustive pattern match in case";}return b}})(a[1])(b));break a}throw"Non-exhaustive pattern match in case";
133−}return b}},step:function(a){return function(b){a:{switch(a[0]){case "Automaton":b=a[1](b);break a}throw"Non-exhaustive pattern match in case";}return b}},combine:c,pure:i,init:a,init_:j,count:f,draggable:function(a){return j(["Tuple2",g,a])(n)}}}();Elm.main=function(){return Elm.Automaton.main}}catch(c){Elm.main=function(){document.body.innerHTML=Elm.Text.monospace('<br/><h2>Your browser may not be supported. Are you using a modern browser?</h2><br/><span style="color:grey">Runtime Error in Automaton module:<br/>'+
134−c+"</span>");throw c;}}})();
elm/elm-runtime-0.6.jsdeleted−134
@@ -1,134 +0,0 @@
1−Elm={};var Guid=function(){var d=0;return{guid:function(){return d+=1}}}();
2−Elm.JavaScript=function(){function d(b){for(var a=["Nil"],c=b.length;c--;)a=["Cons",b[c],a];return a}function c(b){for(var a=[];"Cons"===b[0];)a.push(b[1]),b=b[2];return a}function b(b){return b.slice(1)}function e(b){return["Tuple"+b.length].concat(b)}return{castJSBoolToBool:function(b){return b},castBoolToJSBool:function(b){return b},castJSNumberToFloat:function(b){return b},castFloatToJSNumber:function(b){return b},castJSNumberToInt:function(b){return~~b},castIntToJSNumber:function(b){return b},
3−Experimental:{castJSElementToElement:function(b){return function(a){return function(c){return["Element",Guid.guid(),["EExternalHtml",c],b,a,1,Nothing,Nothing]}}},castElementToJSElement:function(b){return Render.render(b)}},castJSArrayToList:d,castListToJSArray:c,castJSStringToString:d,castStringToJSString:function(b){return"string"===typeof b?b:c(b).join("")},castTupleToJSTuple2:b,castTupleToJSTuple3:b,castTupleToJSTuple4:b,castTupleToJSTuple5:b,castJSTupleToTuple2:e,castJSTupleToTuple3:e,castJSTupleToTuple4:e,
4−castJSTupleToTuple5:e}}();var JSjson=window.JSON;
5−Elm.JSON=function(){function d(a,b){return function(c){return function(n){var h=e.castStringToJSString(c);return n[1].hasOwnProperty(h)&&(n=n[1][h],n[0]===a)?n[1]:b}}}function c(a){return function(b){function c(a){switch(a[0]){case "JsonNull":return null;case "JsonString":return e.castStringToJSString(a[1]);case "JsonObject":var h={},a=a[1][1],f;for(f in a)h[f]=c(a[f]);return h;case "JsonArray":h=e.castListToJSArray(a[1]);for(f=h.length;f--;)h[f]=c(h[f]);return h;default:return a[1]}}return JSjson.stringify(c(["JsonObject",
6−b]),null,e.castStringToJSString(a))}}function b(a){function b(a){switch(typeof a){case "string":return["JsonString",e.castJSStringToString(a)];case "number":return["JsonNumber",e.castJSNumberToFloat(a)];case "boolean":return["JsonBool",e.castJSBoolToBool(a)];case "object":if(null===a)return["JsonNull"];for(var h in a)a[h]=b(a[h]);return a instanceof Array?["JsonArray",e.castJSArrayToList(a)]:["JsonObject",["JSON",a]]}}var a=JSjson.parse(a),c;for(c in a)a[c]=b(a[c]);return["JSON",a]}var e=Elm.JavaScript,
7−i=["JSON",{}];return{empty:i,singleton:function(a){return function(b){var c={};c[e.castStringToJSString(a)]=b;return["JSON",c]}},insert:function(a){return function(b){return function(c){var c=c[1],n={},h;for(h in c)n[h]=c[h];n[e.castStringToJSString(a)]=b;return["JSON",n]}}},lookup:function(a){return function(b){var c=e.castStringToJSString(a);return b[1].hasOwnProperty(c)?["Just",b[1][c]]:["Nothing"]}},findString:d("JsonString",["Nil"]),findObject:d("JsonObject",i),findArray:d("JsonArray",["Nil"]),
8−findWithDefault:function(a){return function(b){return function(c){var n=e.castStringToJSString(b);return c[1].hasOwnProperty(n)?c[1][n]:a}}},remove:function(a){return function(b){var b=b[1],c={},n;for(n in b)c[n]=b[n];delete c[e.castStringToJSString(a)];return["JSON",c]}},toPrettyJSString:c,toJSString:c(""),fromJSString:b,toPrettyString:function(a){return function(b){return e.castJSStringToString(c(a)(b))}},toString:function(a){return e.castJSStringToString(c("")(a))},fromString:function(a){return b(e.castStringToJSString(a))},
9−toList:function(a){var a=a[1],b=[],c;for(c in a)b.push(Value.Tuple(e.castJSStringToString(c),a[c]));return e.castJSArrayToList(b)},fromList:function(a){for(var a=e.castListToJSArray(a),b={},c=a.length;c--;)b[e.castStringToJSString(a[c][1])]=a[c][2];return["JSON",b]},JsonString:function(a){return["JsonString",a]},JsonNumber:function(a){return["JsonNumber",a]},JsonBool:function(a){return["JsonBool",a]},JsonNull:["JsonNull"],JsonArray:function(a){return["JsonArray",a]},JsonObject:function(a){return["JsonObject",
10−a]}}}();
11−var Value=function(){function d(a){if(0==a.length)return a;for(var a=a.replace(/"/g,"&#34;").replace(/'/g,"&#39;").replace(/</g,"&#60;").replace(/>/g,"&#62;").replace(/\n/g,"<br/>"),a=a.split("<br/>"),b=a.length;b--;){var c=a,n=b,h;h=a[b];if(0!=h.length){h=h.split("");" "==h[0]&&(h[0]="&nbsp;");for(var f=h.length;--f;)" "==h[f][0]&&" "==h[f-1]&&(h[f-1]+=h[f],h[f]="");for(f=h.length;f--;)if(1<h[f].length&&" "==h[f][0]){for(var g=h[f].split(""),e=g.length-2;0<=e;e-=2)g[e]="&nbsp;";h[f]=g.join("")}h=h.join("");
12−h=" "===h[h.length-1]?h.slice(0,-1)+"&nbsp;":h}c[n]=h}return a.join("<br/>")}var c=function(a,b){if("object"===typeof a){if(a===b)return!0;if(a.length!==b.length)return!1;for(var e=a.length;e--;)if(!c(a[e],b[e]))return!1;return!0}return a===b},b=function(a){if("boolean"===typeof a)return a?"True":"False";if("number"!==typeof a){if("string"===typeof a&&2>a.length)return"'"+a+"'";if(a[0]){if("Tuple"===a[0].substring(0,5)){for(var c="",e=a.length;--e;)c=","+b(a[e])+c;","===c[0]&&(c=c.substring(1));return"("+
13−c+")"}if("Cons"===a[0])for(var e="string"===typeof a[1]?'"':"]",n="string"===typeof a[1]?"":",",h="string"===typeof a[1]?function(a){return a}:b,c=("string"===typeof a[1]?'"':"[")+h(a[1]),a=a[2];;)if("Cons"===a[0])c+=n+h(a[1]),a=a[2];else return c+e;else{if("Nil"===a[0])return"[]";if("JSON"===a[0])return"(JSON.fromList "+b(Elm.JSON.toList(a))+")";if("RBNode"===a[0]||"RBEmpty"===a[0])return a=Elm.Dict.foldr(function(a){return function(h){return function(b){return["Cons",["Tuple2",a,h],b]}}})(["Nil"])(a),
14−c="Dict","Cons"===a[0]&&"Tuple0"===a[1][2][0]&&(c="Set",a=Elm.List.map(function(a){return a[1]})(a)),"("+c+".fromList "+b(a)+")";c="";for(e=a.length;--e;)c=" "+b(a[e])+c;c=a[0]+c;return 1<a.length?"("+c+")":c}}}return a+""},e=function(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b},i;i=document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,b,c){a.attachEvent("on"+b,c)};return{eq:c,str:e,show:function(a){return e(b(a))},Tuple:function(){var a=arguments.length,
15−b=Array(a+1);for(b[0]="Tuple"+arguments.length;a--;)b[a+1]=arguments[a];return b},append:function(a,b){if("string"===typeof a&&"string"===typeof b)return a.concat(b);if("Nil"===a[0])return b;for(var c=["Cons",a[1],["Nil"]],e=c,a=a[2];"Cons"===a[0];)e[2]=["Cons",a[1],["Nil"]],a=a[2],e=e[2];e[2]=b;return c},listToArray:function(a){for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return b},toText:function(a){if("string"===typeof a)return d(a);for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return d(b.join(""))},
16−properEscape:d,getTextSize:function(a,b,c){var e=document.createElement("div");e.innerHTML=c;e.style.textAlign="left";0<a&&(e.style.width=a+"px");e.style.visibility="hidden";e.style.styleFloat="left";e.style.cssFloat="left";document.body.appendChild(e);c=window.getComputedStyle(e,null);a=c.getPropertyValue("width").slice(0,-2)-0;c=c.getPropertyValue("height").slice(0,-2)-0;document.body.removeChild(e);return[Math.ceil(a),Math.ceil(Math.max(b,c))]},getSize:function(a){a=a.cloneNode(!0);a.style.visibility=
17−"hidden";a.style.styleFloat="left";a.style.cssFloat="left";document.body.appendChild(a);var b=a.offsetWidth,c=a.offsetHeight;document.body.removeChild(a);return[b,c]},getExcess:function(a){a=a.cloneNode(!0);a.style.visibility="hidden";a.style.styleFloat="left";a.style.cssFloat="left";document.body.appendChild(a);var b=a.offsetWidth,c=a.offsetHeight,e=window.getComputedStyle(a,null),h=e.getPropertyValue("width").slice(0,-2)-0,e=e.getPropertyValue("height").slice(0,-2)-0;document.body.removeChild(a);
18−return[b-h,c-e]},groupForms:function(a){for(var a=Elm.JavaScript.castListToJSArray(a),b=[],c=[],e=a.length;e--;){var h=a[e];switch(h[4][0]){case "FElement":0<c.length&&(b.push(c),c=[]);b.push(h);break;default:c.push(h)}}0<c.length&&b.push(c);return b},wrap:function(a){var b=Value.getSize(a);return["Element",Guid.guid(),["EHtml",a],b[0],b[1],1,["Nothing"],["Nothing"]]},addListener:i}}();
19−Elm.List=function(){function d(b){return function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&h("map");for(var c=["Cons",b(a[1]),["Nil"]],f=c,a=a[2];"Cons"===a[0];)f[2]=["Cons",b(a[1]),["Nil"]],a=a[2],f=f[2];return c}}function c(a){return function(b){return function(c){var f=b;if("Nil"===c[0])return f;for("Cons"!==c[0]&&h("foldl");"Cons"===c[0];)f=a(c[1])(f),c=c[2];return f}}}function b(a){return function(b){return function(c){var f=b;if("Nil"===c[0])return f;"Cons"!==c[0]&&h("foldr");for(var g=[];"Cons"===
20−c[0];)g.push(c[1]),c=c[2];for(c=g.length;c--;)f=a(g[c])(f);return f}}}function e(a){return function(b){var h;"Cons"!==b[0]?h=void 0:(h=b[1],b=b[2],h=c(a)(h)(b));return h}}function i(a){return function(b){return function(c){if("Nil"===c[0])return["Cons",b,["Nil"]];"Cons"!==c[0]&&h("scanl");for(var f=[b];"Cons"===c[0];)b=a(c[1])(b),f.push(b),c=c[2];for(var c=["Nil"],g=f.length;g--;)c=["Cons",f[g],c];return c}}}function a(b){return function(c){a:{for(var h=[function(b){return"Nil"!==b[0]?void 0:["Tuple2",
21−["Nil"],["Nil"]]},function(c){if("Cons"===c[0]){var h=c[1],c=c[2];var f=a(b)(c);"Tuple2"!==f[0]?h=void 0:(c=f[1],f=f[2],h=b(h)?["Tuple2",["Cons",h,c],f]:["Tuple2",c,["Cons",h,f]]);return h}}],f=h.length;f--;){var g=h[f](c);if(void 0!==g){c=g;break a}}c=void 0}return c}}function j(b){a:{for(var a=[function(b){return"Nil"!==b[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(b){if("Cons"!==b[0])b=void 0;else if(b=["Tuple2",b[1],j(b[2])],"Tuple2"!==b[0]||"Tuple2"!==b[1][0])b=void 0;else var a=b[1][1],c=
22−b[1][2],b="Tuple2"!==b[2][0]?void 0:["Tuple2",["Cons",a,b[2][1]],["Cons",c,b[2][2]]];return b}],c=a.length;c--;){var h=a[c](b);if(void 0!==h){b=h;break a}}b=void 0}return b}function l(b){return function(a){a:{for(var c=[function(b){return"Nil"!==b[0]?void 0:["Nil"]},function(b){if("Cons"===b[0]){var a=b[1];return"Nil"!==b[2][0]?void 0:["Cons",a,["Nil"]]}},function(a){if("Cons"===a[0]){var c=a[1];if("Cons"===a[2][0]){var h=a[2][1],a=a[2][2];return["Cons",c,["Cons",b,l(b)(["Cons",h,a])]]}}}],h=c.length;h--;){var f=
23−c[h](a);if(void 0!==f){a=f;break a}}a=void 0}return a}}function n(b){return function(a){a:{for(var c=[function(b){return"Nil"!==b[0]?void 0:["Nil"]},function(b){if("Cons"===b[0]){var a=b[1];return"Nil"!==b[2][0]?void 0:a}},function(a){if("Cons"===a[0]){var c=a[1];if("Cons"===a[2][0]){var h=a[2][1],a=a[2][2];return Value.append(c,Value.append(b,n(b)(["Cons",h,a])))}}}],h=c.length;h--;){var f=c[h](a);if(void 0!==f){a=f;break a}}a=void 0}return a}}var h=function(b){throw"Function '"+b+"' expecting a list!";
24−},f=c(function(b){return function(a){return["Cons",b,a]}})(["Nil"]),g=b(function(b){return function(a){return Value.append(b,a)}})(["Nil"]),s=c(function(b){return function(a){return b&&a}})(!0),k=c(function(b){return function(a){return b||a}})(!1),p=c(function(b){return function(a){return b+a}})(0),m=c(function(b){return function(a){return b*a}})(1),x=e(function(b){return function(a){return Math.max(b,a)}}),u=e(function(b){return function(a){return Math.min(b,a)}});return{head:function(b){if("Cons"!==
25−b[0])throw"Error: 'head' only accepts lists of length greater than one.";return b[1]},tail:function(b){if("Cons"!==b[0])throw"Error: 'tail' only accepts lists of length greater than one.";return b[2]},last:function(b){if("Cons"!==b[0])throw"Error: 'last' only accepts lists of length greater than one.";for(var a=b[1];"Cons"===b[0];)a=b[1],b=b[2];return a},map:d,foldl:c,foldr:b,foldl1:e,foldr1:function(b){return function(a){if("Nil"===a[0])throw"'foldr1' requires an non-empty list.";"Cons"!==a[0]&&
26−h("foldr1");for(var c=[];"Cons"===a[0];)c.push(a[1]),a=a[2];for(var a=c.pop(),f=c.length;f--;)a=b(c[f])(a);return a}},scanl:i,scanl1:function(b){return function(a){if("Cons"!==a[0])throw"Error: 'scanl1' requires a list of at least length 1.";return i(b)(a[1])(a[2])}},filter:function(b){return function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&h("filter");for(var c=[];"Cons"===a[0];)b(a[1])&&c.push(a[1]),a=a[2];for(var a=["Nil"],f=c.length;f--;)a=["Cons",c[f],a];return a}},length:function(b){for(var a=
27−0;"Cons"===b[0];)a+=1,b=b[2];return a},reverse:f,concat:g,concatMap:function(b){return function(a){return g(d(b)(a))}},and:s,or:k,all:function(b){return c(function(a){return function(c){return c&&b(a)}})(!0)},any:function(b){return c(function(a){return function(c){return c||b(a)}})(!1)},sum:p,product:m,maximum:x,minimum:u,partition:a,zipWith:function(b){return function(a){return function(c){if("Nil"===a[0]||"Nil"===c[0])return["Nil"];("Cons"!==a[0]||"Cons"!==c[0])&&h("zipWith");for(var f=[];"Cons"===
28−a[0]&&"Cons"===c[0];)f.push(b(a[1])(c[1])),a=a[2],c=c[2];for(var c=["Nil"],g=f.length;g--;)c=["Cons",f[g],c];return c}}},zip:function(a){return function(b){if("Nil"===a[0]||"Nil"===b[0])return["Nil"];("Cons"!==a[0]||"Cons"!==b[0])&&h("zip");for(var c=[];"Cons"===a[0]&&"Cons"===b[0];)c.push(["Tuple2",a[1],b[1]]),a=a[2],b=b[2];for(var b=["Nil"],f=c.length;f--;)b=["Cons",c[f],b];return b}},unzip:j,intersperse:l,intercalate:n,sort:function(b){if("Nil"===b[0])return b;"Cons"!==b[0]&&h("sort");for(var a=
29−[];"Cons"===b[0];)a.push(b[1]),b=b[2];a.sort(function(b,a){return b-a});for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b},take:function(b){return function(a){if(0>=b)return["Nil"];if("Nil"===a[0])return a;"Cons"!==a[0]&&h("take");var c=["Cons",a[1],["Nil"]],f=c,a=a[2];for(--b;"Cons"===a[0]&&0<b;)f[2]=["Cons",a[1],["Nil"]],f=f[2],a=a[2],--b;return c}},drop:function(b){return function(a){if("Nil"===a[0])return a;for("Cons"!==a[0]&&h("drop");"Cons"===a[0]&&0<b;)a=a[2],--b;return a}}}}();
30−Elm.Maybe=function(){function d(b){return function(c){return"Just"===b[0]?["Cons",b[1],c]:c}}function c(b){return function(c){return function(d){var a=b(c);return"Just"===a[0]?["Cons",a[1],d]:d}}}return{Just:function(b){return["Just",b]},Nothing:["Nothing"],catMaybes:Elm.List.foldr(d)(["Nil"]),isJust:function(b){return"Just"===b[0]},isNothing:function(b){return"Nothing"===b[0]},fromMaybe:function(b){return function(c){return"Just"===c[0]?c[1]:b}},consMaybe:d,mapMaybe:function(b){return Elm.List.foldr(c(b))(["Nil"])},
31−maybe:function(b){return function(c){return function(d){return"Just"===d[0]?c(d[1]):b}}}}}();
32−Elm.Char=function(){function d(b,a){return function(c){c=c.charCodeAt(0);return b<=c&&c<=a}}var c=d(48,57),b=d(97,102),e=d(65,70);return{fromCode:function(b){return String.fromCharCode(b)},toCode:function(b){return b.charCodeAt(0)},toUpper:function(b){return b.toUpperCase()},toLower:function(b){return b.toLowerCase()},toLocaleUpper:function(b){return b.toLocaleUpperCase()},toLocaleLower:function(b){return b.toLocaleLowerCase()},isLower:d(97,122),isUpper:d(65,90),isDigit:c,isOctDigit:d(48,55),isHexDigit:function(d){return c(d)||
33−b(d)||e(d)}}}();
34−Elm.Color=function(){function d(c){var b=c.value*c.saturation,e=c.hue/60,d=b*(1-Math.abs(e%2-1)),a=0,j=0,l=0;0<=e&&1>e?(a=b,j=d,l=0):1<=e&&2>e?(a=d,j=b,l=0):2<=e&&3>e?(a=0,j=b,l=d):3<=e&&4>e?(a=0,j=d,l=b):4<=e&&5>e?(a=d,j=0,l=b):5<=e&&6>e&&(a=b,j=0,l=d);c=c.value-b;return["Color",Math.round(255*(a+c)),Math.round(255*(j+c)),Math.round(255*(l+c)),1]}return{rgba:function(c){return function(b){return function(e){return function(d){return["Color",c,b,e,d]}}}},rgb:function(c){return function(b){return function(e){return["Color",c,
35−b,e,1]}}},hsva:function(c){return function(b){return function(e){return function(i){var a=d({hue:c,saturation:b,value:e});a[4]=i;return a}}}},hsv:function(c){return function(b){return function(e){return d({hue:c,saturation:b,value:e})}}},red:["Color",255,0,0,1],green:["Color",0,255,0,1],blue:["Color",0,0,255,1],yellow:["Color",255,255,0,1],cyan:["Color",0,255,255,1],magenta:["Color",255,0,255,1],black:["Color",0,0,0,1],white:["Color",255,255,255,1],gray:["Color",128,128,128,1],grey:["Color",128,128,
36−128,1],complement:function(c){var b;b=c[1]/255;var e=c[2]/255,c=c[3]/255,i=Math.max(b,e,c),a=Math.min(b,e,c),a=i-a,j=0;0===a?j=0:i===b?j=(e-c)/a%6:i===e?j=(c-b)/a+2:i===c&&(j=(b-e)/a+4);b={value:i,hue:60*j,saturation:0===i?0:a/i};b.hue=(b.hue+180)%360;return d(b)},extract:function(c){return 1===c[4]?"rgb("+c[1]+","+c[2]+","+c[3]+")":"rgba("+c[1]+","+c[2]+","+c[3]+","+c[4]+")"}}}();
37−var Collage=function(){function d(b,a){var c=a.length-1;if(!(0>=c))for(b.moveTo(a[c][1],a[c][2]);c--;)b.lineTo(a[c][1],a[c][2])}function c(b,a,c,g){0===b.length&&(b=[8,4]);var e=g.length-1;if(!(0>=e)){var k=g[e][1],d=g[e][2],m=0,l=0,i=0,j=0,q=0,r=0,v=b.length,w=!0,y=b[0];for(a.moveTo(k,d);e--;){m=g[e][1];l=g[e][2];i=m-k;j=l-d;for(q=Math.sqrt(i*i+j*j);y<=q;)k+=i*y/q,d+=j*y/q,a[w?"lineTo":"moveTo"](k,d),i=m-k,j=l-d,q=Math.sqrt(i*i+j*j),w=!w,r=(r+1)%v,y=b[r];0<q&&(a[w?"lineTo":"moveTo"](m,l),y-=q);k=
38−m;d=l}}a.strokeStyle=Elm.Color.extract(c);a.stroke()}function b(b,a,f,g,e){a.clearRect(0,0,f,g);for(f=e.length;f--;){var k=e[f],p=b,g=a,m=k[1],i=k[2],j=k[3][1],t=k[3][2],k=k[4];g.save();(0!==j||0!==t)&&g.translate(j,t);m!==~~m&&g.rotate(2*Math.PI*m);1!==i&&g.scale(i,i);g.beginPath();switch(k[0]){case "FLine":a:switch(p=g,m=k,k=m[3][1],m[1][0]){case "Solid":m=m[2];d(p,k);p.strokeStyle=Elm.Color.extract(m);p.stroke();break;case "Dotted":c([3,3],p,m[2],k);break a;case "Dashed":c([8,4],p,m[2],k);break a;
39−case "Custom":c(m[1][1],p,m[2],k)}break;case "FShape":a:switch(j=p,i=g,p=k[1],m=k[2],k=k[3][1],p[0]){case "Filled":p=i;d(p,k);p.fillStyle=Elm.Color.extract(m);p.fill();break a;case "Outlined":p=i;d(p,k);p.strokeStyle=Elm.Color.extract(m);p.stroke();break a;case "Textured":m=j;p=p[1];j=new Image;j.src=l.castStringToJSString(p);j.onload=m;d(i,k);i.fillStyle=i.createPattern(j,"repeat");i.fill();break a;case "CustomOutline":c(p[1],i,m,k)}break;case "FImage":m=g,i=k[1],j=k[2],k=k[3],t=new Image,t.onload=
40−p,t.src=l.castStringToJSString(k),m.drawImage(t,-i/2,-j/2,i,j)}g.restore()}}function e(a,c,f){var g=Render.newElement("canvas"),a=~~a,c=~~c;g.style.width=a+"px";g.style.height=c+"px";g.style.display="block";g.width=a;g.height=c;if(g.getContext){var e=g.getContext("2d");b(function(){b(this,e,a,c,f)},e,a,c,f);return g}g.innerHTML="Your browser does not support the canvas element.";return g}function i(a,b,c,g,e,k,d){var m=Render.render(d),c="translate("+(e-d[3]/2)+"px,"+(k-d[4]/2)+"px) "+(1===g?"":"scale("+
41−g+","+g+")")+" "+(c===~~c?"":"rotate("+360*c+"deg)");m.style.transform=c;m.style.msTransform=c;m.style.MozTransform=c;m.style.webkitTransform=c;m.style.OTransform=c;c=Render.newElement("div");Render.addTo(c,m);c.style.width=~~a+"px";c.style.height=~~b+"px";c.style.overflow="hidden";return c}function a(a,c,f){if(!Value.eq(f,c)){var g=a.style.width.slice(0,-2)-0,d=a.style.height.slice(0,-2)-0;if("object"===typeof f[0]){if("object"===typeof c[0]&&a.getContext){var k=a.getContext("2d");return b(function(){b(this,
42−k,g,d,f)},k,g,d,f)}c=e(g,d,f);c.style.position="absolute";return a.parentNode.replaceChild(c,a)}c=i(g,d,f[1],f[2],f[3][1],f[3][2],f[4][1]);c.style.position="absolute";return a.parentNode.replaceChild(c,a)}}function j(a,b,c,g,e){var k=0,d,m=(a[1]-g[1])/c,a=(a[2]-g[2])/c;0!==b&&(b*=-2*Math.PI,c=m*Math.cos(b)-a*Math.sin(b),a=m*Math.sin(b)+a*Math.cos(b),m=c);if(0===e.length)return!1;d=e[0];for(c=e.length-1;c--;){b=e[c];g=d[1];d=d[2];var i=b[1],l=b[2];if(d<l)var j=d,q=l;else j=l,q=d;if(g<i)var r=g,v=i;
43−else r=i,v=g;j<a&&a<=q&&m<=v&&(m<=r||m<=(a-d)*(i-g)/(l-d)+g)&&++k;d=b}return 1===k%2}var l=Elm.JavaScript;return{collage:function(a,b,c){if(0===c.length)return e(a,b,[]);for(var g=Array(c.length),d=c.length;d--;){var k=c[d];g[d]="string"===typeof k[0]?i(a,b,k[1],k[2],k[3][1],k[3][2],k[4][1]):e(a,b,k)}return 1===c.length?g[0]:Render.flowWith(Render.goIn,function(a){return a},g)},updateCollage:function(b,c,f){if(1===f.length)return a(b,c[0],f[0]);for(var b=b.childNodes,g=b.length,e=g;e--;)a(b[g-e-1],
44−c[e],f[e])},insideForm:function(a){return function(b){var c=a[1],g=a[2];if(6>b.length){var e=b[3][1],d=b[3][2],p=0,i=b[2];switch(b[4][0]){case "FShape":for(var l=b[4][3][1],u=l.length;--u;)var t=l[u],p=Math.max(p,t[1]*t[1]+t[2]*t[2]);p*=i*i;break;case "FImage":l=i*b[4][1]/2;i=i*b[4][2]/2;p=l*l+i*i;break;case "FElement":l=i*b[4][1][3]/2,i=i*b[4][1][4]/2,p=l*l+i*i}b.push(function(b,a){var c=b-e,f=a-d;return c*c+f*f<p+1})}if(!b[5](c,g))return!1;var q,r;switch(b[4][0]){case "FShape":return j(a,b[1],b[2],
45−b[3],b[4][3][1]);case "FLine":return!1;case "FImage":q=b[4][1]/2;r=b[4][2]/2;break;case "FElement":q=b[4][1][3]/2,r=b[4][1][4]/2}return j(a,b[1],b[2],b[3],[[null,q,r],[null,-q,r],[null,-q,-r],[null,q,-r],[null,q,r]])}}}}();
46−Elm.Graphics=function(){function d(b){return function(a){return["Position",b,a]}}function c(b){return function(a){return["EText",b,a]}}function b(b){return function(a){return["EFlow",b,m.castListToJSArray(a)]}}function e(b){return["Line",m.castListToJSArray(b)]}function i(b){return function(a){var c=m.castListToJSArray(b);0<c.length&&c.push(c[0]);return["Shape",c,a]}}function a(b){return function(a){return function(c){return function(f){return["Form",b,a,c,f]}}}}function j(b){return function(a){return function(c){return["FLine",
47−b,a,c]}}}function l(b){return function(a){return function(c){return["FShape",b,a,c]}}}function n(b,a,c,f,h,g){return["Element",Guid.guid(),b,a,c,f,h,g]}function h(b,a,c){return["Element",Guid.guid(),b,a,c,1,["Nothing"],["Nothing"]]}function f(b){return~~b[3]}function g(b){return~~b[4]}function s(b){return function(a){return function(c){return h(["EImage",m.castStringToJSString(c)],b,a)}}}function k(b){return function(a){return h(w,b,a)}}function p(b){return function(a){return function(c){var f=map(function(c){return["Tuple2",
48−b/2*Math.cos(2*(Math.PI/50)*c),a/2*Math.sin(2*(Math.PI/50)*c)]}),h=49,g=["Nil"];if(0<=h){do g=["Cons",h,g];while(0<h--)}return i(f(g))(c)}}}for(this.i in Elm.List)eval("var "+this.i+" = Elm.List[this.i];");var m=Elm.JavaScript,x=["DRight"],u=["DDown"],t=["DOut"],q=["Near"],r=["Mid"],v=["Far"],w=["EEmpty"],y=["Solid"],z=["Dotted"],A=["Dashed"],B=["Filled"],C=["Outlined"],D=d(q)(q),E=d(v)(q),F=d(q)(v),G=d(v)(v),H=d(q)(r),I=d(v)(r),q=d(r)(q),v=d(r)(v),r=d(r)(r);return{left:["DLeft"],right:x,down:u,up:["DUp"],
49−inward:["DIn"],outward:t,topLeft:D,topRight:E,bottomLeft:F,bottomRight:G,midLeft:H,midRight:I,midTop:q,midBottom:v,middle:r,middleAt:function(b){return function(a){return["PositionAt",b,a]}},topLeftAt:function(b){return function(a){return["PositionTL",b,a]}},topRightAt:function(b){return function(a){return["PositionTR",b,a]}},bottomLeftAt:function(b){return function(a){return["PositionBL",b,a]}},bottomRightAt:function(b){return function(a){return["PositionBR",b,a]}},absolute:function(b){return["Absolute",
50−b]},relative:function(b){return["Relative",b]},width:function(b){return function(a){var c=a[2];switch(c[0]){case "EImage":case "EVideo":return n(a[2],b,a[4]*b/a[3],a[5],a[6],a[7]);case "EText":return c=Value.getTextSize(b,a[4],c[2]),n(a[2],b,c[1],a[5],a[6],a[7])}return n(a[2],b,a[4],a[5],a[6],a[7])}},height:function(b){return function(a){switch(a[2][0]){case "EImage":case "EVideo":return n(a[2],a[3]*b/a[4],b,a[5],a[6],a[7])}return n(a[2],a[3],b,a[5],a[6],a[7])}},size:function(b){return function(a){return function(c){return n(c[2],
51−b,a,c[5],c[6],c[7])}}},opacity:function(b){return function(a){return n(a[2],a[3],a[4],b,a[6],a[7])}},color:function(b){return function(a){return n(a[2],a[3],a[4],a[5],["Just",b],a[7])}},link:function(a){return function(b){return n(b[2],b[3],b[4],b[5],b[6],["Just",m.castStringToJSString(a)])}},widthOf:f,heightOf:g,sizeOf:function(b){return["Tuple2",~~b[3],~~b[4]]},text:function(b){var a=Value.getTextSize(0,0,b);return h(c("left")(b),a[0],a[1])},asText:function(b){var b=Elm.Text.monospace(Value.toText(Value.show(b))),
52−a=Value.getTextSize(0,0,b);return h(c("left")(b),a[0],a[1])},plainText:function(b){var b=Value.toText(b),a=Value.getTextSize(0,0,b);return h(c("left")(b),a[0],a[1])},centeredText:function(b){var a=Value.getTextSize(0,0,b);return h(c("center")(b),a[0],a[1])},justifiedText:function(b){var a=Value.getTextSize(0,0,b);return h(c("justify")(b),a[0],a[1])},rightedText:function(b){var a=Value.getTextSize(0,0,b);return h(c("right")(b),a[0],a[1])},image:s,images:function(b){var a=Elm.Signal.constant(k(0)(0)),
53−b=Elm.Signal.lift(function(b){var b=m.castStringToJSString(b),c=new Image;c.onload=function(){Dispatcher.notify(a.id,s(this.width)(this.height)(b))};c.src=b})(b);return Elm.Signal.lift2(function(b){return function(){return b}})(a)(b)},video:function(b){return function(a){return function(c){return h(["EVideo",m.castStringToJSString(c)],b,a)}}},fittedImage:function(b){return function(a){return function(c){return h(["EFittedImage",m.castStringToJSString(c)],b,a)}}},flow:function(a){return function(c){var e;
54−e=map(f)(c);a:{switch(a[0]){case "DLeft":e=sum(e);break a;case "DRight":e=sum(e);break a}e=maximum(e)}var d;d=map(g)(c);a:{switch(a[0]){case "DDown":d=sum(d);break a;case "DUp":d=sum(d);break a}d=maximum(d)}return h(b(a)(c),e,d)}},above:function(a){return function(c){return h(b(u)(["Cons",a,["Cons",c,["Nil"]]]),Math.max(~~a[3],~~c[3]),~~a[4]+~~c[4])}},below:function(a){return function(c){return h(b(u)(["Cons",c,["Cons",a,["Nil"]]]),Math.max(~~a[3],~~c[3]),~~a[4]+~~c[4])}},beside:function(a){return function(c){return h(b(x)(["Cons",
55−a,["Cons",c,["Nil"]]]),~~a[3]+~~c[3],Math.max(~~a[4],~~c[4]))}},layers:function(a){return h(b(t)(a),maximum(map(f)(a)),maximum(map(g)(a)))},collage:function(a){return function(b){return function(c){return h(["ECollage",a,b,Value.groupForms(c)],a,b)}}},spacer:k,container:function(a){return function(b){return function(c){return function(f){return h(["EContainer",c,f],a,b)}}}},line:e,segment:function(a){return function(b){return e(["Cons",a,["Cons",b,["Nil"]]])}},polygon:i,rect:function(a){return function(b){return function(c){return i(["Cons",
56−["Tuple2",0-a/2,0-b/2],["Cons",["Tuple2",0-a/2,b/2],["Cons",["Tuple2",a/2,b/2],["Cons",["Tuple2",a/2,0-b/2],["Nil"]]]]])(c)}}},oval:p,circle:function(a){return p(2*a)(2*a)},ngon:function(a){return function(b){return function(c){var f=map(function(c){return["Tuple2",b*Math.cos(2*(Math.PI/a)*c),b*Math.sin(2*(Math.PI/a)*c)]}),h=a-1,g=["Nil"];if(0<=h){do g=["Cons",h,g];while(0<h--)}return i(f(g))(c)}}},solid:function(b){return function(c){return a(0)(1)(["Tuple2",0,0])(j(y)(b)(c))}},dotted:function(b){return function(c){return a(0)(1)(["Tuple2",
57−0,0])(j(z)(b)(c))}},dashed:function(b){return function(c){return a(0)(1)(["Tuple2",0,0])(j(A)(b)(c))}},customLine:function(b){return function(c){return function(f){return a(0)(1)(["Tuple2",0,0])(j(["Custom",m.castListToJSArray(b)])(c)(f))}}},filled:function(b){return function(c){return a(0)(1)(c[2])(l(B)(b)(c))}},outlined:function(b){return function(c){return a(0)(1)(c[2])(l(C)(b)(c))}},customOutline:function(b){return function(c){return function(f){return a(0)(1)(f[2])(l(["CustomOutline",m.castListToJSArray(b)])(c)(f))}}},
58−textured:function(b){return function(c){return a(0)(1)(c[2])(l(["Textured",b])(null)(c))}},sprite:function(b){return function(c){return function(f){return function(h){return a(0)(1)(h)(["FImage",c,f,m.castStringToJSString(b)])}}}},toForm:function(b){return function(c){return a(0)(1)(b)(["FElement",c])}},rotate:function(b){return function(c){a:{switch(c[0]){case "Form":var f=c[2],h=c[3],g=c[4],c=a(b+c[1])(f)(h)(g);break a}throw"Non-exhaustive pattern match in case";}return c}},scale:function(b){return function(c){return a(c[1])(b*
59−c[2])(c[3])(c[4])}},move:function(b){return function(c){return function(f){var h;a:{switch(f[0]){case "Form":h=f[1];var g=f[2],e=f[3],f=f[4];switch(e[0]){case "Tuple2":var d=e[1],e=e[2];h=a(h)(g)(["Tuple2",b+d,c+e])(f);break a}}throw"Non-exhaustive pattern match in case";}return h}}},isWithin:Collage.insideForm}}();
60−Elm.Text=function(){function d(b){return Value.toText(b)}var c=function(b){return function(a){return"<"+b+' style="padding:0;margin:0">'+a+"</"+b+">"}},b=function(b,a){return function(c){return"<span style='"+b+":"+a+"'>"+c+"</span>"}},e=function(a){a=Elm.JavaScript.castStringToJSString(a);return b("font-family",a)},i=c("h1"),a=b("font-style","italic"),c=c("b"),j=b("text-decoration","underline"),l=b("text-decoration","overline"),n=b("text-decoration","line-through");return{fromString:d,toText:d,header:i,
61−height:function(a){return b("font-size",a+"em")},italic:a,bold:c,underline:j,overline:l,strikeThrough:n,monospace:e("monospace"),typeface:e,color:function(a){return b("color",Elm.Color.extract(a))},link:function(b){return function(a){return"<a href='"+d(b)+"'>"+a+"</a>"}}}}();
62−var Render=function(){function d(b){b=document.createElement(b);b.style.padding="0";b.style.margin="0";return b}function c(b){return b}function b(b){b.style.styleFloat="left";b.style.cssFloat="left";return b}function e(b){b.style.position="absolute";return b}function i(b,a,c){for(var e=d("div"),k=c.length;k--;){var i=b(a(c[k]));e.appendChild(i)}return e}function a(b){switch(b[0]){case "Absolute":return b[1]+"px";case "Relative":return 100*b[1]+"%"}}function j(b,c){c.style.position="absolute";c.style.margin=
63−"auto";switch(b[0]){case "Position":"Far"!==b[1][0]&&(c.style.left=0);"Near"!==b[1][0]&&(c.style.right=0);"Far"!==b[2][0]&&(c.style.top=0);"Near"!==b[2][0]&&(c.style.bottom=0);break;case "PositionAt":c.style.top=a(b[2]);c.style.left=a(b[1]);var g="translate("+~~(-c.style.width.slice(0,-2)/2)+"px,"+~~(-c.style.height.slice(0,-2)/2)+"px)";c.style.transform=g;c.style.msTransform=g;c.style.MozTransform=g;c.style.webkitTransform=g;c.style.OTransform=g;break;default:g=b[0].slice(-2),c.style["T"===g[0]?
64−"top":"bottom"]=a(b[2]),c.style["L"===g[1]?"left":"right"]=a(b[1])}}function l(a){var f={};switch(a[2][0]){case "EText":var f=a[2][1],g=a[2][2],s=d("div");s.innerHTML=g;s.style.textAlign=f;f=s;break;case "EImage":f=a[2][1];g=d("img");g.src=f;g.name=f;g.style.display="block";f=g;break;case "EVideo":s=a[2][1];f=d("video");f.controls="controls";g=d("source");g.src=s;s=s.split(".");g.type="video/"+s[s.length-1];f.appendChild(g);f.style.display="block";break;case "EFittedImage":var k=a[3],p=a[4],f=a[2][1],
65−g=d("div");g.style.width=k+"px";g.style.height=p+"px";g.style.position="relative";g.style.overflow="hidden";var m=d("img");m.onload=function(){m.style.position="absolute";m.style.margin="auto";var b=k,a=p;k/p>this.width/this.height?a=Math.round(this.height*k/this.width):b=Math.round(this.width*p/this.height);m.style.width=b+"px";m.style.height=a+"px";m.style.left=(k-b)/2+"px";m.style.top=(p-a)/2+"px"};m.src=f;m.name=f;g.appendChild(m);f=g;break;case "EFlow":a:{f=a[2][2];switch(a[2][1][0]){case "DDown":f=
66−f.slice(0).reverse();case "DUp":f=i(c,l,f);break a;case "DRight":f=f.slice(0).reverse();case "DLeft":f=i(b,l,f);break a;case "DOut":f=f.slice(0).reverse();case "DIn":f=i(e,l,f);break a}f=void 0}break;case "ECollage":f=Collage.collage(a[2][1],a[2][2],a[2][3]);break;case "EEmpty":f=d("div");break;case "EContainer":g=a[2][1];f=l(a[2][2]);j(g,f);g=d("div");g.style.position="relative";g.style.overflow="hidden";g.appendChild(f);f=g;break;case "EHtml":f=a[2][1];"button"!==f.type&&(g=Value.getExcess(f),a[3]-=
67−g[0],a[4]-=g[1]);break;case "EExternalHtml":f=d("div"),f.appendChild(a[2][1])}f.id=a[1];f.style.width=~~a[3]+"px";f.style.height=~~a[4]+"px";1!==a[5]&&(f.style.opacity=a[5]);"Just"===a[6][0]&&(f.style.backgroundColor=Elm.Color.extract(a[6][1]));return"Just"===a[7][0]?(g=d("a"),g.href=a[7][1],g.appendChild(f),g):f}function n(a,f,g){"A"===a.tagName&&(a=a.firstChild);if(f[1]!==g[1]){if(f[2][0]!==g[2][0])return a.parentNode.replaceChild(l(g),a);var d=g[2],k=f[2];switch(d[0]){case "EText":d[1]!==k[1]&&
68−(a.style.textAlign=d[1]);d[2]!==k[2]&&(a.innerHTML=d[2]);break;case "EImage":d[1]!==k[1]&&(a.src=d[1]);break;case "EVideo":case "EFittedImage":if(!Value.eq(d,k)||g[3]!==f[3]||g[4]!==f[4])return a.parentNode.replaceChild(l(g),a);break;case "ECollage":if(d[1]!==k[1]||d[2]!==k[2]||d[3].length!==k[3].length)return a.parentNode.replaceChild(l(g),a);Collage.updateCollage(a,k[3],d[3]);break;case "EFlow":if(d[1]!==k[1])return a.parentNode.replaceChild(l(g),a);var i=d[2],m=a.childNodes;if(i.length!==m.length)return a.parentNode.replaceChild(l(g),
69−a);var k=k[2],x=function(a){return a};switch(d[1][0]){case "DDown":case "DUp":x=c;break;case "DRight":case "DLeft":x=b;break;case "DOut":case "DIn":x=e}for(d=m.length;d--;)n(m[d],k[d],i[d]),x(m[d]);break;case "EContainer":n(a.childNodes[0],k[2],d[2]);j(d[1],a.childNodes[0]);break;case "EHtml":g[1]!==f[1]&&(i=l(g),a.parentNode.replaceChild(i,a),a=i);"button"!==i.type&&(d=Value.getExcess(a),g[3]-=d[0],g[4]-=d[1]);break;case "EExternalHtml":g[1]!==f[1]&&a.parentNode.replaceChild(l(g),a)}g[3]!==f[3]&&
70−(a.style.width=~~g[3]+"px");g[4]!==f[4]&&(a.style.height=~~g[4]+"px");g[5]!==f[5]&&(a.style.opacity=g[5]);2===g[6].length&&(d=Elm.Color.extract(g[6][1]),d!==a.style.backgroundColor&&(a.style.backgroundColor=d));if(2===g[7].length&&(1===f[7].length||g[7][1]!==f[7][1]))a.parentNode.href=g[7][1];g[1]=f[1]}}return{render:l,update:n,addTo:function(a,b){a.appendChild(b)},newElement:d,flowWith:i,goIn:e}}();
71−Elm.Signal=function(){function d(a){this.id=Guid.guid();this.value=a;this.kids=[];this.defaultNumberOfKids=0;this.recv=function(a,b,c){if(b=b===this.id)this.value=c;n(this,a,b);return b};Dispatcher.inputs.push(this)}function c(a,b){this.id=Guid.guid();this.value=null;this.kids=[];this.count=0;this.changed=!1;b.reverse();this.recalc=function(){for(var c=a,e=b.length;e--;)c=c(b[e].value);this.value=c};this.recalc();this.recv=function(a,c){this.count+=1;c&&(this.changed=!0);this.count==b.length&&(this.changed&&
72−this.recalc(),n(this,a,this.changed),this.changed=!1,this.count=0)};for(var c=b.length;c--;)b[c].kids.push(this)}function b(a,b,c,e){this.id=Guid.guid();this.value=c?b(e.value):b;this.kids=[];this.recv=function(b,c){c&&(this.value=a(e.value)(this.value));n(this,b,c)};e.kids.push(this)}function e(a,b,c){this.id=Guid.guid();this.value=a(c.value)?b:c.value;this.kids=[];this.recv=function(b,e){var g=e&&!a(c.value);g&&(this.value=c.value);n(this,b,g)};c.kids.push(this)}function i(a){this.id=Guid.guid();
73−this.value=a.value;this.kids=[];this.recv=function(b,c){var e=c&&!Value.eq(this.value,a.value);e&&(this.value=a.value);n(this,b,e)};a.kids.push(this)}function a(a,b){this.id=Guid.guid();var c=(new window.Date).getTime();this.value=a?Value.Tuple(c,b.value):c;this.kids=[];this.recv=function(c,e){e&&(this.value=a?Value.Tuple(c,b.value):c);n(this,c,e)};b.kids.push(this)}function j(a,b){this.id=Guid.guid();this.value=b.value;this.kids=[];this.count=0;this.changed=!1;this.recv=function(c,e,d){d===a.id&&
74−(this.changed=e);this.count+=1;2==this.count&&(this.changed&&(this.value=b.value),n(this,c,this.changed),this.count=0,this.changed=!1)};a.kids.push(this);b.kids.push(this)}function l(a,b){this.id=Guid.guid();this.value=a.value;this.kids=[];this.next=null;this.count=0;this.changed=!1;this.recv=function(c,e,d){this.count+=1;e&&(this.changed=!0,d==b.id&&null===this.next&&(this.next=b.value),d==a.id&&(this.next=a.value));2==this.count&&(this.changed&&(this.value=this.next,this.next=null),n(this,c,this.changed),
75−this.changed=!1,this.count=0)};a.kids.push(this);b.kids.push(this)}var n=function(a,b,c){for(var e=a.kids,d=e.length;d--;)e[d].recv(b,c,a.id)},h=function(a){return function(b){return function(d){d=new c(function(a){return function(b){return[a,b]}},[a,d]);d=new e(function(a){return a[0]},[!0,b],d);return new c(function(a){return a[1]},[d])}}};return{constant:function(a){return new d(a)},lift:function(a){return function(b){return new c(a,[b])}},lift2:function(a){return function(b){return function(e){return new c(a,
76−[b,e])}}},lift3:function(a){return function(b){return function(e){return function(d){return new c(a,[b,e,d])}}}},lift4:function(a){return function(b){return function(e){return function(d){return function(h){return new c(a,[b,e,d,h])}}}}},lift5:function(a){return function(b){return function(e){return function(d){return function(h){return function(i){return new c(a,[b,e,d,h,i])}}}}}},lift6:function(a){return function(b){return function(e){return function(d){return function(h){return function(i){return function(l){return new c(a,
77−[b,e,d,h,i,l])}}}}}}},lift7:function(a){return function(b){return function(e){return function(d){return function(h){return function(i){return function(l){return function(j){return new c(a,[b,e,d,h,i,l,j])}}}}}}}},lift8:function(a){return function(b){return function(e){return function(d){return function(h){return function(i){return function(l){return function(j){return function(n){return new c(a,[b,e,d,h,i,l,j,n])}}}}}}}}},foldp:function(a){return function(c){return function(e){return new b(a,c,!1,
78−e)}}},foldp_:function(a){return function(c){return function(e){return new b(a,c,!0,e)}}},foldp1:function(a){return function(c){return new b(a,function(a){return a},!0,c)}},delay:function(a){return function(b){var e=new d(b.value),h=!0,b=new j(e,new c(function(a){return function(){return a}},[e,new c(function(b){h||setTimeout(function(){Dispatcher.notify(e.id,b)},a)},[b])])),h=!1;return b}},merge:function(a){return function(b){return new l(a,b)}},merges:function(a){return Elm.List.foldl1(function(a){return function(b){return new l(a,
79−b)}})(a)},average:function(a){return function(b){for(var e=Array(a),d=a;d--;)e[d]=0;var d=0,h=!1,i=0;return new c(function(b){i+=b-e[d];e[d]=b;b=i/Math.max(1,h?a:d);++d==a&&(h=!0,d=0);return b},[b])}},count:function(a){return new b(function(){return function(a){return a+1}},0,!1,a)},countIf:function(a){return function(c){return new b(function(b){return function(c){return a(b)?c+1:c}},0,!1,c)}},keepIf:function(a){return function(b){return function(c){return new e(function(b){return!a(b)},b,c)}}},dropIf:function(a){return function(b){return function(c){return new e(a,
80−b,c)}}},keepWhen:function(a){return h(new c(function(a){return!a},[a]))},dropWhen:h,dropRepeats:function(a){return new i(a)},sampleOn:function(a){return function(b){return new j(a,b)}},timestamp:function(b){return new a(!0,b)},timeOf:function(b){return new a(!1,b)}}}();
81−var Dispatcher=function(){function d(b){if(!b.hasOwnProperty("defaultNumberOfKids"))return!0;var a=b.kids.length;if(0==a)return!1;if(a>b.defaultNumberOfKids)return!0;for(var c=!1;a--;)c=c||d(b.kids[a]);return c}var c=null,b=[],e=null;return{initialize:function(){c=Elm.main();c.hasOwnProperty("recv")||(c=Elm.Signal.constant(c));e=c.value;for(var i=[],a=b.length;a--;)d(b[a])&&i.push(b[a]);b=i;document.getElementById("content").appendChild(Render.render(e));i=document.getElementById("widthChecker").offsetWidth;
82−i!==window.innerWidth&&Dispatcher.notify(Elm.Window.dimensions.id,Value.Tuple(i,window.innerHeight));c=Elm.Signal.lift(function(a){var b=document.getElementById("content");Render.update(b.firstChild,e,a);return e=a})(c)},notify:function(c,a){for(var e=(new window.Date).getTime(),d=!1,n=b.length;n--;)d=b[n].recv(e,c,a)||d;return d},inputs:b}}();
83−Elm.HTTP=function(){function d(b){return function(c){return function(e){return function(d){return{"0":"Request",length:1,verb:a.castStringToJSString(b),url:a.castStringToJSString(c),data:null===e?null:a.castStringToJSString(e),headers:d}}}}}function c(a){return d("GET")(a)(null)(["Nil"])}function b(b,c){return function(d){if(""!==d.url){var f={value:["Waiting"]};b.push(f);var g=null;window.ActiveXObject&&(g=new ActiveXObject("Microsoft.XMLHTTP"));window.XMLHttpRequest&&(g=new XMLHttpRequest);g.onreadystatechange=
84−function(){4===g.readyState&&(f.value=200===g.status?["Success",j(g.responseText)]:["Failure",g.status,j(g.statusText)],setTimeout(function(){e(b,c)},0))};g.open(d.verb,d.url,!0);Elm.List.map(function(b){g.setRequestHeader(a.castStringToJSString(b[1]),a.castStringToJSString(b[2]))})(d.headers);g.send(d.data)}}}function e(a,b){0<a.length&&(Dispatcher.notify(b.id,a[0].value),"Waiting"!==a[0].value[0]&&(a.shift(),setTimeout(function(){e(a,b)},0)))}function i(a){var c=Elm.Signal.constant(["Waiting"]),
85−a=Elm.Signal.lift(b([],c))(a);return Elm.Signal.lift2(function(a){return function(){return a}})(c)(a)}var a=Elm.JavaScript,j=Elm.JavaScript.castJSStringToString;return{get:c,post:function(a){return function(b){return d("POST")(a)(b)(["Nil"])}},request:d,send:i,sendGet:function(a){return i(Elm.Signal.lift(c)(a))}}}();
86−Elm.Input=function(){var d=Elm.JavaScript,c=Elm.JavaScript.castJSStringToString,b=function(a,b){a.placeholder=d.castStringToJSString(b);var e=Elm.Signal.constant(["Nil"]);Value.addListener(a,"keyup",function(){Dispatcher.notify(e.id,c(a.value));a.focus()});a.style.padding="1px";return Value.Tuple(Value.wrap(a),e)},e=function(a){a=document.createElement(a);a.style.padding="0";a.style.margin="0";return a},i=function(a){for(var b=e("select"),c=[];"Cons"===a[0];){var d=e("option"),h=Value.toText(a[1][1]);
87−d.value=h;d.innerHTML=h;b.appendChild(d);c.push(a[1][2]);a=a[2]}var f=Elm.Signal.constant(c[0]);Value.addListener(b,"change",function(){Dispatcher.notify(f.id,c[b.selectedIndex])});return Value.Tuple(Value.wrap(b),f)};return{textArea:function(a){return function(c){var d=e("textarea");d.rows=c;d.cols=a;return b(d,"")}},textField:function(a){var c=e("input");c.type="text";return b(c,a)},password:function(a){var c=e("input");c.type="password";return b(c,a)},checkbox:function(a){var b=e("input");b.type=
88−"checkbox";b.checked=a;var c=Elm.Signal.constant(a);Value.addListener(b,"change",function(){Dispatcher.notify(c.id,b.checked)});return Value.Tuple(Value.wrap(b),c)},dropDown:i,stringDropDown:function(a){return i(Elm.List.map(function(a){return Value.Tuple(a,a)})(a))},button:function(a){var b=e("input");b.type="button";b.value=d.castStringToJSString(a);var c=Elm.Signal.constant(!1);Value.addListener(b,"click",function(){Dispatcher.notify(c.id,!0);Dispatcher.notify(c.id,!1)});return Value.Tuple(Value.wrap(b),
89−c)}}}();
90−Elm.Keyboard={Raw:function(){function d(b,c){return"Nil"===c[0]?c:c[1]===b?c[2]:["Cons",c[1],d(b,c[2])]}var c=Elm.Signal.constant(["Nil"]),b=Elm.Signal.constant(["Nothing"]);Value.addListener(document,"keydown",function(b){var d;a:{for(d=c.value;"Nil"!==d[0];){if(d[1]===b.keyCode){d=!0;break a}d=d[2]}d=!1}d||Dispatcher.notify(c.id,["Cons",b.keyCode,c.value])||this.removeEventListener("keydown",arguments.callee,!1)});Value.addListener(document,"keyup",function(b){var i=d(b.keyCode,c.value);Dispatcher.notify(c.id,
91−i)||this.removeEventListener("keyup",arguments.callee,!1)});Value.addListener(window,"blur",function(b){Dispatcher.notify(c.id,["Nil"])||this.removeEventListener("blur",arguments.callee,!1)});Value.addListener(document,"keypress",function(c){var d=Dispatcher.notify(b.id,["Just",c.charCode||c.keyCode]);Dispatcher.notify(b.id,["Nothing"]);d||this.removeEventListener("keypress",arguments.callee,!1)});return{keysDown:c,charPressed:b}}()};
92−Elm.Mouse=function(){function d(a){var b=0,c=0;a||(a=window.event);if(a.pageX||a.pageY)b=a.pageX,c=a.pageY;else if(a.clientX||a.clientY)b=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,c=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;return Value.Tuple(b,c)}var c=Elm.Signal.constant(Value.Tuple(0,0));c.defaultNumberOfKids=2;var b=Elm.Signal.lift(function(a){return a[1]})(c);b.defaultNumberOfKids=0;var e=Elm.Signal.lift(function(a){return a[2]})(c);e.defaultNumberOfKids=
93−0;var i=Elm.Signal.constant(!1),a=Elm.Signal.constant(!1),j=Elm.Signal.constant(Value.Tuple());Value.addListener(document,"click",function(b){var c=Dispatcher.notify(a.id,!0),d=Dispatcher.notify(j.id,Value.Tuple());Dispatcher.notify(a.id,!1);!c&&!d&&this.removeEventListener("click",arguments.callee,!1)});Value.addListener(document,"mousedown",function(a){Dispatcher.notify(i.id,!0)||this.removeEventListener("mousedown",arguments.callee,!1)});Value.addListener(document,"mouseup",function(a){Dispatcher.notify(i.id,
94−!1)||this.removeEventListener("mouseup",arguments.callee,!1)});Value.addListener(document,"mousemove",function(a){Dispatcher.notify(c.id,d(a))||this.removeEventListener("mousemove",arguments.callee,!1)});return{position:c,x:b,y:e,isClicked:a,isDown:i,clicks:j,isClickedOn:function(a){var a=Render.render(a),b=Elm.Signal.constant(!1);Value.addListener(a,"click",function(){Dispatcher.notify(b.id,!0);Dispatcher.notify(b.id,!1)});return Value.Tuple(Value.wrap(a),b)}}}();
95−Elm.Random=function(){return{inRange:function(d){return function(c){return Elm.Signal.constant(Math.floor(Math.random()*(c-d+1))+d)}},randomize:function(d){return function(c){return function(b){return Elm.Signal.lift(function(){return Math.floor(Math.random()*(c-d+1))+d})(b)}}}}}();
96−Elm.Time=function(){function d(){return(new window.Date).getTime()}function c(b){return function(c){var i=1E3/b,a=d(),j=a,l=0,n=!0,h=Elm.Signal.constant(l),f=0;return Elm.Signal.lift2(function(b){return function(c){if(b){var e=!n&&b;f=setTimeout(function(){j=d();l=e?0:j-a;a=j;Dispatcher.notify(h.id,l)},i)}else n&&clearTimeout(f);n=b;return c}})(c)(h)}}Elm.Signal.constant(!0);return{fpsWhen:c,fps:function(b){return c(b)(Elm.Signal.constant(!0))},every:function(b){var c=Elm.Signal.constant(d());setInterval(function(){Dispatcher.notify(c.id,
97−d())},b);return c},delay:Elm.Signal.delay,since:function(b){return function(c){var d=Elm.Signal.count(Elm.Signal.delay(b)(c));return Elm.Signal.lift2(function(a){return function(b){return!Value.eq(a,b)}})(Elm.Signal.count(c))(d)}},after:function(b){var b=1E3*b,c=Elm.Signal.constant(!1);setTimeout(function(){Dispatcher.notify(c.id,!0)},b);return c},before:function(b){var b=1E3*b,c=Elm.Signal.constant(!0);setTimeout(function(){Dispatcher.notify(c.id,!1)},b);return c},hour:36E5,minute:6E4,second:1E3,
98−ms:1,inHours:function(b){return b/36E5},inMinutes:function(b){return b/6E4},inSeconds:function(b){return b/1E3},inMss:function(b){return b},toDate:function(b){return new window.Date(b)},read:function(b){b=window.Date.parse(b);return isNaN(b)?["Nothing"]:["Just",b]}}}();
99−Elm.Window=function(){var d=Elm.Signal.constant(Value.Tuple(window.innerWidth,window.innerHeight));d.defaultNumberOfKids=2;var c=Elm.Signal.lift(function(b){return b[1]})(d);c.defaultNumberOfKids=0;var b=Elm.Signal.lift(function(b){return b[2]})(d);b.defaultNumberOfKids=0;Value.addListener(window,"resize",function(b){var c=document.getElementById("widthChecker").offsetWidth;Dispatcher.notify(d.id,Value.Tuple(c,window.innerHeight))||this.removeEventListener("resize",arguments.callee,!1)});return{dimensions:d,
100−width:c,height:b}}();
101−Elm.Date=function(){var d="Sun Mon Tue Wed Thu Fri Sat".split(" "),c="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ");return{read:function(b){b=new window.Date(Elm.JavaScript.castStringToJSString(b));return isNaN(b.getTime())?["Nothing"]:["Just",b]},year:function(b){return b.getFullYear()},month:function(b){return[c[b.getMonth()]]},day:function(b){return b.getDate()},hour:function(b){return b.getHours()},minute:function(b){return b.getMinutes()},second:function(b){return b.getSeconds()},dayOfWeek:function(b){return[d[b.getDay()]]},
102−toTime:function(b){return b.getTime()},Mon:["Mon"],Tue:["Tue"],Wed:["Wed"],Thu:["Thu"],Fri:["Fri"],Sat:["Sat"],Sun:["Sun"],Jan:["Jan"],Feb:["Feb"],Mar:["Mar"],Apr:["Apr"],May:["May"],Jun:["Jun"],Jul:["Jul"],Aug:["Aug"],Sep:["Sep"],Oct:["Oct"],Nov:["Nov"],Dec:["Dec"]}}();Value.addListener(document,"elm_log",function(d){console.log(d.value)});Value.addListener(document,"elm_title",function(d){document.title=d.value});
103−Value.addListener(document,"elm_redirect",function(d){0<d.value.length&&(window.location=d.value)});
104−Elm.Prelude=function(){var d=function(c){return function(b){var e=c%b,e=0==c?0:0<b?0<=c?e:e+b:-d(-c)(-b);return e==b?0:e}};return{eq:Value.eq,id:function(c){return c},not:function(c){return!c},fst:function(c){return c[1]},snd:function(c){return c[2]},rem:function(c){return function(b){return c%b}},div:function(c){return function(b){return~~(c/b)}},otherwise:!0,compare:function(c){return function(b){if(c instanceof Array&&b instanceof Array){var d=c.length;if(d==b.length){for(var i=0;i<d;++i){var a=
105−compare(c[i])(b[i]);if("EQ"!==a[0])return a}return["EQ"]}}return[c===b?"EQ":c<b?"LT":"GT"]}},toFloat:function(c){return c},round:function(c){return Math.round(c)},floor:function(c){return Math.floor(c)},ceiling:function(c){return Math.ceil(c)},truncate:function(c){return~~c},readInt:function(c){var c=Elm.JavaScript.castStringToJSString(c),b=c.length;if(0===b)return["Nothing"];var d=0;if("-"==c[0]){if(1===b)return["Nothing"];d=1}for(;d<b;++d)if(!Char.isDigit(c[d]))return["Nothing"];return["Just",parseInt(c)]},
106−readFloat:function(c){var c=Elm.JavaScript.castStringToJSString(c),b=c.length;if(0===b)return["Nothing"];var d=0;if("-"==c[0]){if(1===b)return["Nothing"];d=1}for(var i=0;d<b;++d)if(!Char.isDigit(c[d])){if("."===c[d]&&(i+=1,1>=i))continue;return["Nothing"]}return["Just",parseFloat(c)]},sqrt:Math.sqrt,abs:Math.abs,pi:Math.PI,e:Math.E,sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,atan2:function(c){return function(b){return Math.atan2(c,b)}},mod:d,min:function(c){return function(b){return Math.min(c,
107−b)}},max:function(c){return function(b){return Math.max(c,b)}},flip:function(c){return function(b){return function(d){return c(d)(b)}}},clamp:function(c){return function(b){return function(d){return Math.min(b,Math.max(c,d))}}},curry:function(c){return function(b){return function(d){return c(["Tuple2",b,d])}}},uncurry:function(c){return function(b){if("Tuple2"!==b[0])throw"Function was uncurry'd but was not given a pair.";return c(b[1])(b[2])}},logBase:function(c){return function(b){return Math.log(b)/
108−Math.log(c)}},Just:Elm.Maybe.Just,Nothing:Elm.Maybe.Nothing,maybe:Elm.Maybe.maybe,map:Elm.List.map,zip:Elm.List.zip,zipWith:Elm.List.zipWith,filter:Elm.List.filter,head:Elm.List.head,tail:Elm.List.tail,last:Elm.List.last,length:Elm.List.length,reverse:Elm.List.reverse,foldr:Elm.List.foldr,foldr1:Elm.List.foldr1,foldl:Elm.List.foldl,foldl1:Elm.List.foldl1,and:Elm.List.and,or:Elm.List.or,all:Elm.List.all,any:Elm.List.any,sum:Elm.List.sum,product:Elm.List.product,concat:Elm.List.concat,concatMap:Elm.List.concatMap,
109−maximum:Elm.List.maximum,minimum:Elm.List.minimum,scanl:Elm.List.scanl,scanl1:Elm.List.scanl1,take:Elm.List.take,drop:Elm.List.drop,zip:Elm.List.zip,unzip:Elm.List.unzip,lift:Elm.Signal.lift,lift2:Elm.Signal.lift2,lift3:Elm.Signal.lift3,lift4:Elm.Signal.lift4,lift5:Elm.Signal.lift5,lift6:Elm.Signal.lift6,lift7:Elm.Signal.lift7,lift8:Elm.Signal.lift8,foldp:Elm.Signal.foldp,foldp1:Elm.Signal.foldp1,foldp_:Elm.Signal.foldp_,constant:Elm.Signal.constant,merge:Elm.Signal.merge,count:Elm.Signal.count,countIf:Elm.Signal.countIf,
110−average:Elm.Signal.average,keepIf:Elm.Signal.keepIf,dropIf:Elm.Signal.dropIf,keepWhen:Elm.Signal.keepWhen,dropWhen:Elm.Signal.dropWhen,dropRepeats:Elm.Signal.dropRepeats,sampleOn:Elm.Signal.sampleOn,timestamp:Elm.Signal.timestamp,timeOf:Elm.Signal.timeOf}}();(function(){var d=function(c){for(var b in c)Elm.Prelude[b]=c[b]};d(Elm.Color);d(Elm.Text);d(Elm.Graphics);d(Elm.Time);show=Value.show})();
111−Elm.Dict=function(){function d(a){return function(b){return function(c){return function(d){return function(e){return["RBNode",a,b,c,d,e]}}}}}function c(a){return function(){switch(a[0]){case "RBEmpty":return z(Value.str("(min RBEmpty) is not defined"));case "RBNode":switch(a[4][0]){case "RBEmpty":return["Tuple2",a[2],a[3]]}return c(a[4])}throw"Non-exhaustive pattern match in case";}()}function b(a){return function(c){var d;a:{switch(c[0]){case "RBEmpty":d=Nothing;break a;case "RBNode":d=function(){switch(compare(a)(c[2])[0]){case "EQ":return Just(c[3]);
112−case "GT":return b(a)(c[5]);case "LT":return b(a)(c[4])}throw"Non-exhaustive pattern match in case";}();break a}throw"Non-exhaustive pattern match in case";}return d}}function e(a){return function(b){return function(c){var d;a:{switch(c[0]){case "RBEmpty":d=a;break a;case "RBNode":d=function(){switch(compare(b)(c[2])[0]){case "EQ":return c[3];case "GT":return e(a)(b)(c[5]);case "LT":return e(a)(b)(c[4])}throw"Non-exhaustive pattern match in case";}();break a}throw"Non-exhaustive pattern match in case";
113−}return d}}}function i(a){return function(c){return q(b(a)(c))}}function a(a){a:{switch(a[0]){case "RBNode":switch(a[5][0]){case "RBNode":a=d(a[1])(a[5][2])(a[5][3])(d(r)(a[2])(a[3])(a[4])(a[5][4]))(a[5][5]);break a}}a=z(Value.str("rotateLeft of a node without enough children"))}return a}function j(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":a=d(a[1])(a[4][2])(a[4][3])(a[4][4])(d(r)(a[2])(a[3])(a[4][5])(a[5]));break a}}a=z(Value.str("rotateRight of a node without enough children"))}return a}
114−function l(a){a:{switch(a[0]){case "Black":a=r;break a;case "Red":a=v;break a}throw"Non-exhaustive pattern match in case";}return a}function n(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":switch(a[5][0]){case "RBNode":a=d(l(a[1]))(a[2])(a[3])(d(l(a[4][1]))(a[4][2])(a[4][3])(a[4][4])(a[4][5]))(d(l(a[5][1]))(a[5][2])(a[5][3])(a[5][4])(a[5][5]));break a}}}a=z(Value.str("color_flip called on a RBEmpty or RBNode with a RBEmpty child"))}return a}function h(b){a:switch(b[0]){case "RBNode":switch(b[5][0]){case "RBNode":switch(b[5][1][0]){case "Red":b=
115−a(b);break a}}}a:switch(b[0]){case "RBNode":switch(b[4][0]){case "RBNode":switch(b[4][1][0]){case "Red":switch(b[4][4][0]){case "RBNode":switch(b[4][4][1][0]){case "Red":b=j(b);break a}}}}}a:switch(b[0]){case "RBNode":switch(b[4][0]){case "RBNode":switch(b[4][1][0]){case "Red":switch(b[5][0]){case "RBNode":switch(b[5][1][0]){case "Red":b=n(b);break a}}}}}return b}function f(a){a:switch(a[0]){case "RBNode":switch(a[1][0]){case "Red":a=d(v)(a[2])(a[3])(a[4])(a[5]);break a}}return a}function g(a){return function(b){return function(c){var e=
116−function(c){var f;a:{switch(c[0]){case "RBEmpty":f=d(r)(a)(b)(w)(w);break a;case "RBNode":f=function(){switch(compare(a)(c[2])[0]){case "EQ":return d(c[1])(c[2])(b)(c[4])(c[5]);case "GT":return d(c[1])(c[2])(c[3])(c[4])(e(c[5]));case "LT":return d(c[1])(c[2])(c[3])(e(c[4]))(c[5])}throw"Non-exhaustive pattern match in case";}();f=h(f);break a}throw"Non-exhaustive pattern match in case";}return f};return f(e(c))}}}function s(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":switch(a[4][1][0]){case "Red":a=
117−!0;break a}}}a=!1}return a}function k(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBNode":switch(a[4][4][0]){case "RBNode":switch(a[4][4][1][0]){case "Red":a=!0;break a}}}}a=!1}return a}function p(b){if(not(s(b))&&not(k(b))){b=n(b);a:switch(b[0]){case "RBNode":b:switch(b[5][0]){case "RBNode":switch(b[5][4][0]){case "RBNode":switch(b[5][4][1][0]){case "Red":b=n(a(d(b[1])(b[2])(b[3])(b[4])(j(b[5]))));break b}}}break a}}return b}function m(a){return function(b){var e;a:{switch(b[0]){case "RBEmpty":e=
118−w;break a;case "RBNode":if("LT"===compare(a)(b[2])[0]){e=p(b);b:{switch(e[0]){case "RBEmpty":e=z(Value.str("delLT on RBEmpty"));break b;case "RBNode":e=h(d(e[1])(e[2])(e[3])(del(e[4]))(e[5]));break b}break}}else{b=s(b)?j(b):b;b:{switch(b[0]){case "RBNode":switch(b[5][0]){case "RBEmpty":b=eq(a,b[2]);break b}}b=!1}if(b)e=w;else{var b=not,g;b:{switch(e[0]){case "RBNode":switch(e[5][0]){case "RBNode":switch(e[5][1][0]){case "Red":g=!0;break b}}}g=!1}if(b=b(g)){b=not;b:{switch(e[0]){case "RBNode":switch(e[5][0]){case "RBNode":switch(e[5][4][0]){case "RBNode":switch(e[5][4][1][0]){case "Red":g=
119−!0;break b}}}}g=!1}b=b(g)}b&&(e=n(e),e=k(e)?n(j(e)):e);b:{switch(e[0]){case "RBNode":b=eq(a,e[2]);break b}b=!1}if(b)b:{switch(e[0]){case "RBEmpty":e=z(Value.str("delEQ called on a RBEmpty"));break b;case "RBNode":g=c(e[5]);c:{switch(g[0]){case "Tuple2":b=g[1];break c}break}c:{switch(g[0]){case "Tuple2":g=g[2];break c}break}var b=d(e[1])(b)(g)(e[4]),i=function(a){a:{switch(a[0]){case "RBNode":switch(a[4][0]){case "RBEmpty":a=w;break a}}a=p(a);b:{switch(a[0]){case "RBEmpty":a=w;break b;case "RBNode":a=
120−h(d(a[1])(a[2])(a[3])(i(a[4]))(a[5]));break b}throw"Non-exhaustive pattern match in case";}}return a};e=f(i(e[5]));e=h(b(e));break b}break}else b:{switch(e[0]){case "RBEmpty":e=z(Value.str("delGT called on a RBEmpty"));break b;case "RBNode":e=h(d(e[1])(e[2])(e[3])(e[4])(del(e[5])));break b}break}}}break a}throw"Non-exhaustive pattern match in case";}return f(e)}}function x(a){return function(b){a:{switch(b[0]){case "RBEmpty":b=w;break a;case "RBNode":b=d(b[1])(b[2])(a(b[3]))(x(a)(b[4]))(x(a)(b[5]));
121−break a}throw"Non-exhaustive pattern match in case";}return b}}function u(a){return function(b){return function(c){a:{switch(c[0]){case "RBEmpty":c=b;break a;case "RBNode":c=u(a)(a(c[2])(c[3])(u(a)(b)(c[4])))(c[5]);break a}throw"Non-exhaustive pattern match in case";}return c}}}function t(a){return function(b){return function(c){a:{switch(c[0]){case "RBEmpty":c=b;break a;case "RBNode":c=t(a)(a(c[2])(c[3])(t(a)(b)(c[5])))(c[4]);break a}throw"Non-exhaustive pattern match in case";}return c}}}for(this.i in Elm.Prelude)eval("var "+
122−this.i+"=Elm.Prelude[this.i];");var q=Elm.Maybe.isJust,r=["Red"],v=["Black"],w=["RBEmpty"],y=w,z=function(a){return a};return{empty:y,lookup:b,findWithDefault:e,member:i,insert:g,singleton:function(a){return function(b){return g(a)(b)(w)}},remove:m,map:x,foldl:u,foldr:t,union:function(a){return function(b){return u(g)(b)(a)}},intersect:function(a){return function(b){return u(function(a){return function(c){return function(d){return i(a)(b)?g(a)(c)(d):d}}})(y)(a)}},diff:function(a){return function(b){return u(function(a){return function(){return function(b){return m(a)(b)}}})(a)(b)}},
123−keys:function(a){return u(function(a){return function(){return function(b){return["Cons",a,b]}}})(["Nil"])(a)},values:function(a){return u(function(){return function(a){return function(b){return["Cons",a,b]}}})(["Nil"])(a)},toList:function(a){return u(function(a){return function(b){return function(c){return["Cons",["Tuple2",a,b],c]}}})(["Nil"])(a)},fromList:function(a){return List.foldl(uncurry(g))(y)(a)}}}();
124−Elm.Set=function(){var d=Elm.Dict.empty,c=Elm.Dict.remove,b=Elm.Dict.member,e=Elm.Dict.union,i=Elm.Dict.intersect,a=Elm.Dict.diff,j=Elm.Dict.keys,l=Elm.List.foldl(function(a){return function(b){return Elm.Dict.insert(a)(["Tuple0"])(b)}})(d);return{empty:d,singleton:function(a){return Elm.Dict.singleton(a)(["Tuple0"])},insert:function(a){return Elm.Dict.insert(a)(["Tuple0"])},remove:c,member:b,union:e,intersect:i,diff:a,toList:j,fromList:l,foldl:function(a){return Elm.Dict.foldl(function(b){return function(){return function(c){return a(b)(c)}}})},
125−foldr:function(a){return Elm.Dict.foldr(function(b){return function(){return function(c){return a(b)(c)}}})},map:function(a){return function(b){b=j(b);return l(Elm.List.map(a)(b))}}}}();
126−(function(){try{var d={};for(this.i in Elm)eval("var "+this.i+"=Elm[this.i];");if(Elm.Automaton)throw"Module name collision, 'Automaton' is already defined.";Elm.Automaton=function(){function b(a){return["Automaton",a]}function c(a){return b(function(b){var d=unzip(map(function(a){a:{switch(a[0]){case "Automaton":a=a[1](b);break a}throw"Non-exhaustive pattern match in case";}return a})(a)),f;a:{switch(d[0]){case "Tuple2":f=d[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(d[0]){case "Tuple2":d=
127−d[2];break a}throw"Non-exhaustive pattern match in case";}return["Tuple2",f,c(d)]})}function i(a){return b(function(b){return["Tuple2",a(b),i(a)]})}function a(c){return function(d){return b(function(b){b=d(b)(c);return["Tuple2",b,a(b)(d)]})}}function j(a){return function(c){return b(function(b){var d=c(b)(a);a:{switch(d[0]){case "Tuple2":b=d[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(d[0]){case "Tuple2":d=d[2];break a}throw"Non-exhaustive pattern match in case";}return["Tuple2",
128−b,j(d)(c)]})}}function l(a){return function(b){a:{switch(a[0]){case "Tuple2":b:{switch(b[0]){case "Tuple2":b=["Tuple2",a[1]-b[1],a[2]-b[2]];break b}break}break a}throw"Non-exhaustive pattern match in case";}return b}}function n(a){return function(b){var c;a:{switch(a[0]){case "Tuple2":b:{switch(b[0]){case "Tuple2":var d=function(a){return["Tuple2",b[2],["Tuple2",a,b[2]]]};c=function(){switch(b[1][0]){case "DragFrom":var c;a[1]?c=["Tuple2",uncurry(move)(l(a[2])(b[1][1]))(b[2]),["Tuple2",["DragFrom",
129−b[1][1]],b[2]]]:(c=uncurry(move)(l(a[2])(b[1][1]))(b[2]),c=["Tuple2",c,["Tuple2",g,c]]);return c;case "Ignore":return d(a[1]?s:g);case "Listen":return d(not(a[1])?g:isWithin(a[2])(b[2])?["DragFrom",a[2]]:s)}throw"Non-exhaustive pattern match in case";}();break b}break}break a}throw"Non-exhaustive pattern match in case";}return c}}try{if(!(Elm.Prelude instanceof Object))throw"module not found";}catch(h){throw"Module 'Prelude' is missing. Compile with --make flag or load missing module in a separate JavaScript file.";
130−}var f={};for(this.i in Elm.Prelude)f[this.i]||eval("var "+this.i+" = Elm.Prelude[this.i];");var g=["Listen"],s=["Ignore"];d[">>>"]=function(a){return function(c){var e;a:{switch(a[0]){case "Automaton":e=a[1];break a}throw"Non-exhaustive pattern match in case";}var f;a:{switch(c[0]){case "Automaton":f=c[1];break a}throw"Non-exhaustive pattern match in case";}return b(function(a){var a=e(a),b;a:{switch(a[0]){case "Tuple2":b=a[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(a[0]){case "Tuple2":a=
131−a[2];break a}throw"Non-exhaustive pattern match in case";}var c=f(b);a:{switch(c[0]){case "Tuple2":b=c[1];break a}throw"Non-exhaustive pattern match in case";}a:{switch(c[0]){case "Tuple2":c=c[2];break a}throw"Non-exhaustive pattern match in case";}return["Tuple2",b,d[">>>"](a)(c)]})}};d["<<<"]=function(a){return function(b){return d[">>>"](b)(a)}};d["^>>"]=function(a){return function(b){return d[">>>"](i(a))(b)}};d[">>^"]=function(a){return function(b){return d[">>>"](a)(i(b))}};d["^<<"]=function(a){return function(b){return d[">>>"](b)(i(a))}};
132−d["<<^"]=function(a){return function(b){return d[">>>"](i(b))(a)}};f=a(0)(function(){return function(a){return 1+a}});return{$op:{">>>":d[">>>"],"<<<":d["<<<"],"^>>":d["^>>"],">>^":d[">>^"],"^<<":d["^<<"],"<<^":d["<<^"]},run:function(a){return function(b){a:{switch(a[0]){case "Automaton":b=lift(fst)(foldp_(function(a){return function(b){a:{switch(b[0]){case "Tuple2":switch(b[2][0]){case "Automaton":b=b[2][1](a);break a}}throw"Non-exhaustive pattern match in case";}return b}})(a[1])(b));break a}throw"Non-exhaustive pattern match in case";
133−}return b}},step:function(a){return function(b){a:{switch(a[0]){case "Automaton":b=a[1](b);break a}throw"Non-exhaustive pattern match in case";}return b}},combine:c,pure:i,init:a,init_:j,count:f,draggable:function(a){return j(["Tuple2",g,a])(n)}}}();Elm.main=function(){return Elm.Automaton.main}}catch(c){Elm.main=function(){document.body.innerHTML=Elm.Text.monospace('<br/><h2>Your browser may not be supported. Are you using a modern browser?</h2><br/><span style="color:grey">Runtime Error in Automaton module:<br/>'+
134−c+"</span>");throw c;}}})();
elm/elm-runtime-0.7.jsnew file+3963
@@ -0,0 +1,3963 @@
1+
2+Elm = {};
3+
4+var Guid = function() {
5+ var counter = 0;
6+ var guid = function() { counter += 1; return counter; };
7+ return {guid : guid};
8+}();
9+Elm.JavaScript = function() {
10+ function castJSBoolToBool(b) { return b; }
11+ function castBoolToJSBool(b) { return b; }
12+
13+ function castJSNumberToFloat(n) { return n; }
14+ function castFloatToJSNumber(n) { return n; }
15+
16+ function castJSNumberToInt(n) { return ~~n; }
17+ function castIntToJSNumber(n) { return n; }
18+
19+ function castJSElementToElement(w) {
20+ return function(h) {
21+ return function(node) {
22+ return ["Element",Guid.guid(),
23+ ["EExternalHtml",node],
24+ w,h,1,Nothing,Nothing];
25+ }
26+ }
27+ }
28+ function castElementToJSElement(elem) { return Render.render(elem); }
29+
30+ function castJSArrayToList(arr) {
31+ var list = ["Nil"];
32+ for (var i = arr.length; i--; ) {
33+ list = [ "Cons", arr[i], list ];
34+ }
35+ return list;
36+ }
37+ function castListToJSArray(list) {
38+ var a = [];
39+ while (list[0] === "Cons") {
40+ a.push(list[1]);
41+ list = list[2];
42+ }
43+ return a;
44+ }
45+
46+ var castJSStringToString = castJSArrayToList;
47+ function castStringToJSString(str) {
48+ if (typeof str === "string") return str;
49+ return castListToJSArray(str).join('');
50+ }
51+
52+ function fromTuple(t) { return t.slice(1); }
53+ function toTuple(a) { return ["Tuple" + a.length].concat(a); }
54+
55+ return {castJSBoolToBool:castJSBoolToBool,
56+ castBoolToJSBool:castBoolToJSBool,
57+ castJSNumberToFloat:castJSNumberToFloat,
58+ castFloatToJSNumber:castFloatToJSNumber,
59+ castJSNumberToInt:castJSNumberToInt,
60+ castIntToJSNumber:castIntToJSNumber,
61+ Experimental : {castJSElementToElement:castJSElementToElement,
62+ castElementToJSElement:castElementToJSElement},
63+ castJSArrayToList:castJSArrayToList,
64+ castListToJSArray:castListToJSArray,
65+ castJSStringToString:castJSStringToString,
66+ castStringToJSString:castStringToJSString,
67+ castTupleToJSTuple2:fromTuple,
68+ castTupleToJSTuple3:fromTuple,
69+ castTupleToJSTuple4:fromTuple,
70+ castTupleToJSTuple5:fromTuple,
71+ castJSTupleToTuple2:toTuple,
72+ castJSTupleToTuple3:toTuple,
73+ castJSTupleToTuple4:toTuple,
74+ castJSTupleToTuple5:toTuple
75+ };
76+}();
77+
78+var JSjson = window.JSON;
79+Elm.JSON = function() {
80+ var JS = Elm.JavaScript;
81+ var empty = ['JSON',{}];
82+ function singleton(k) { return function(v) {
83+ var obj = {};
84+ obj[JS.castStringToJSString(k)] = v;
85+ return ['JSON', obj ];
86+ };
87+ }
88+ function insert(k) { return function(v) { return function(inObj) {
89+ var obj = inObj[1];
90+ var outObj = {};
91+ for (var i in obj) {
92+ outObj[i] = obj[i];
93+ }
94+ outObj[JS.castStringToJSString(k)] = v;
95+ return ['JSON', outObj ];
96+ };
97+ };
98+ }
99+
100+ function lookup(key) { return function(obj) {
101+ var k = JS.castStringToJSString(key);
102+ return obj[1].hasOwnProperty(k) ? ["Just", obj[1][k]] : ["Nothing"] ;
103+ };
104+ }
105+ function find(tipe,base) { return function (key) { return function(obj) {
106+ var k = JS.castStringToJSString(key);
107+ if (obj[1].hasOwnProperty(k)) {
108+ var v = obj[1][k];
109+ if (v[0] === tipe) { return v[1]; }
110+ }
111+ return base;
112+ };
113+ }
114+ }
115+ function lookupWithDefault(base) { return function(key) { return function(obj) {
116+ var k = JS.castStringToJSString(key);
117+ return obj[1].hasOwnProperty(k) ? obj[1][k] : base ;
118+ };
119+ };
120+ }
121+
122+ function remove(k) { return function(inObj) {
123+ var obj = inObj[1];
124+ var outObj = {};
125+ for (var i in obj) {
126+ outObj[i] = obj[i];
127+ }
128+ delete outObj[JS.castStringToJSString(k)];
129+ return ['JSON', outObj];
130+ };
131+ }
132+
133+ function JsonString(v) { return [ "JsonString", v ]; }
134+ function JsonNumber(v) { return [ "JsonNumber", v ]; }
135+ function JsonBool(v) { return [ "JsonBool", v ]; }
136+ var JsonNull = [ "JsonNull" ];
137+ function JsonArray(v) { return [ "JsonArray", v ]; }
138+ function JsonObject(v) { return [ "JsonObject", v ]; }
139+
140+ function toList(json) {
141+ var obj = json[1];
142+ var arr = [];
143+ for (var i in obj) {
144+ arr.push(Value.Tuple(JS.castJSStringToString(i), obj[i]));
145+ }
146+ return JS.castJSArrayToList(arr);
147+ }
148+ function fromList(list) {
149+ var arr = JS.castListToJSArray(list);
150+ var obj = {};
151+ for (var i = arr.length; i--; ) {
152+ obj[JS.castStringToJSString(arr[i][1])] = arr[i][2];
153+ }
154+ return [ "JSON", obj ];
155+ }
156+
157+ function toPrettyJSString(sep) { return function (obj) {
158+ function fromValue(v) {
159+ switch (v[0]) {
160+ case 'JsonNull' : return null;
161+ case 'JsonString' : return JS.castStringToJSString(v[1]);
162+ case 'JsonObject' :
163+ var o = {};
164+ var from = v[1][1];
165+ for (var i in from) {
166+ o[i] = fromValue(from[i]);
167+ }
168+ return o;
169+ case 'JsonArray' :
170+ var a = JS.castListToJSArray(v[1]);
171+ for (var i = a.length; i--; ) {
172+ a[i] = fromValue(a[i]);
173+ }
174+ return a;
175+ default :
176+ return v[1];
177+ }
178+ }
179+ return JSjson.stringify(fromValue([ 'JsonObject', obj ]), null, JS.castStringToJSString(sep));
180+ };
181+ }
182+ function fromJSString(str) {
183+ var obj = JSjson.parse(str);
184+ function toValue(v) {
185+ switch (typeof v) {
186+ case 'string' : return [ "JsonString", JS.castJSStringToString(v) ];
187+ case 'number' : return [ "JsonNumber", JS.castJSNumberToFloat(v) ];
188+ case 'boolean' : return [ "JsonBool", JS.castJSBoolToBool(v) ];
189+ case 'object' :
190+ if (v === null) return [ "JsonNull" ];
191+ for (var i in v) {
192+ v[i] = toValue(v[i]);
193+ }
194+ if (v instanceof Array) return [ "JsonArray", JS.castJSArrayToList(v) ];
195+ return [ "JsonObject", [ "JSON", v ] ];
196+ }
197+ }
198+ for (var i in obj) {
199+ obj[i] = toValue(obj[i]);
200+ }
201+ return ['JSON',obj];
202+ }
203+ return {empty : empty,
204+ singleton : singleton,
205+ insert : insert,
206+ lookup : lookup,
207+ findString : find("JsonString",["Nil"]),
208+ findObject : find("JsonObject", empty ),
209+ findArray : find("JsonArray" ,["Nil"]),
210+ findWithDefault : lookupWithDefault,
211+ remove : remove,
212+ toPrettyJSString : toPrettyJSString,
213+ toJSString : toPrettyJSString(''),
214+ fromJSString : fromJSString,
215+ toPrettyString : function(sep) { return function(v) {
216+ return JS.castJSStringToString(toPrettyJSString(sep)(v)); }; },
217+ toString : function(v) { return JS.castJSStringToString(toPrettyJSString('')(v)); },
218+ fromString : function(v) { return fromJSString(JS.castStringToJSString(v)); },
219+ toList : toList,
220+ fromList : fromList,
221+ JsonString : JsonString,
222+ JsonNumber : JsonNumber,
223+ JsonBool : JsonBool,
224+ JsonNull : JsonNull,
225+ JsonArray : JsonArray,
226+ JsonObject : JsonObject
227+ };
228+}();
229+
230+var Value = function(){
231+
232+ var eq = function(x,y) {
233+ if (typeof x === "object") {
234+ if (x.hasOwnProperty('_')) {
235+ for (var i in x) { if (x[i] != y[i]) return false; }
236+ for (var i in y) { if (x[i] != y[i]) return false; }
237+ return true;
238+ }
239+ if (x === y) return true;
240+ if (x.length !== y.length) return false;
241+ for (var i = x.length; i--; ) {
242+ if (!eq(x[i],y[i])) return false;
243+ }
244+ return true;
245+ }
246+ return x === y;
247+ };
248+
249+ var Tuple = function() {
250+ var len = arguments.length;
251+ var arr = new Array(len+1);
252+ arr[0] = "Tuple" + arguments.length;
253+ for (var i = len; i--; ) {
254+ arr[i+1] = arguments[i];
255+ }
256+ return arr;
257+ };
258+
259+ var listToArray = function(list) {
260+ var arr = [];
261+ while (list[0] === "Cons") {
262+ arr.push(list[1]);
263+ list = list[2];
264+ }
265+ return arr;
266+ };
267+
268+ function makeSpaces(s) {
269+ if (s.length == 0) { return s; }
270+ var arr = s.split('');
271+ if (arr[0] == ' ') { arr[0] = "&nbsp;" }
272+ for (var i = arr.length; --i; ) {
273+ if (arr[i][0] == ' ' && arr[i-1] == ' ') {
274+ arr[i-1] = arr[i-1] + arr[i];
275+ arr[i] = '';
276+ }
277+ }
278+ for (var i = arr.length; i--; ) {
279+ if (arr[i].length > 1 && arr[i][0] == ' ') {
280+ var spaces = arr[i].split('');
281+ for (var j = spaces.length - 2; j >= 0; j -= 2) {
282+ spaces[j] = '&nbsp;';
283+ }
284+ arr[i] = spaces.join('');
285+ }
286+ }
287+ arr = arr.join('');
288+ if (arr[arr.length-1] === " ") {
289+ return arr.slice(0,-1) + '&nbsp;';
290+ }
291+ return arr;
292+ }
293+
294+ function properEscape(str) {
295+ if (str.length == 0) return str;
296+ str = str //.replace(/&/g, "&#38;")
297+ .replace(/"/g, /*"*/ "&#34;")
298+ .replace(/'/g, /*'*/ "&#39;")
299+ .replace(/</g, "&#60;")
300+ .replace(/>/g, "&#62;")
301+ .replace(/\n/g, "<br/>");
302+ var arr = str.split('<br/>');
303+ for (var i = arr.length; i--; ) {
304+ arr[i] = makeSpaces(arr[i]);
305+ }
306+ return arr.join('<br/>');
307+ }
308+
309+ var toText = function(elmList) {
310+ if (typeof elmList === "string") return properEscape(elmList);
311+ var a = [];
312+ while (elmList[0] === "Cons") {
313+ a.push(elmList[1]);
314+ elmList = elmList[2];
315+ }
316+ return properEscape(a.join(''));
317+ };
318+
319+ function getTextSize(w,h,txt) {
320+ var t = document.createElement('div');
321+ t.innerHTML = txt;
322+ t.style.textAlign = 'left';
323+ if (w > 0) { t.style.width = w + "px"; }
324+
325+ t.style.visibility = "hidden";
326+ t.style.styleFloat = "left";
327+ t.style.cssFloat = "left";
328+
329+ document.body.appendChild(t);
330+ var cStyle = window.getComputedStyle(t,null);
331+ var realW = cStyle.getPropertyValue("width").slice(0,-2) - 0;
332+ var realH = cStyle.getPropertyValue("height").slice(0,-2) - 0;
333+ document.body.removeChild(t);
334+ //delete t;
335+ return [Math.ceil(realW),Math.ceil(Math.max(h,realH))];
336+ }
337+
338+ function getSize(e) {
339+ var t = e.cloneNode(true);
340+
341+ t.style.visibility = "hidden";
342+ t.style.styleFloat = "left";
343+ t.style.cssFloat = "left";
344+
345+ document.body.appendChild(t);
346+ var w = t.offsetWidth;
347+ var h = t.offsetHeight;
348+ document.body.removeChild(t);
349+ //delete t;
350+ return [w,h];
351+ }
352+
353+ function getExcess(e) {
354+ var t = e.cloneNode(true);
355+
356+ t.style.visibility = "hidden";
357+ t.style.styleFloat = "left";
358+ t.style.cssFloat = "left";
359+
360+ document.body.appendChild(t);
361+ var ow = t.offsetWidth;
362+ var oh = t.offsetHeight;
363+ var cStyle = window.getComputedStyle(t,null);
364+ var w = cStyle.getPropertyValue("width").slice(0,-2) - 0;
365+ var h = cStyle.getPropertyValue("height").slice(0,-2) - 0;
366+ document.body.removeChild(t);
367+ //delete t;
368+ return [ow-w,oh-h];
369+ }
370+
371+
372+ function groupForms(forms) {
373+ forms = Elm.JavaScript.castListToJSArray(forms);
374+ var groups = [];
375+ var arr = [];
376+ for (var i = forms.length; i--; ) {
377+ var f = forms[i];
378+ switch(f[4][0]) {
379+ case "FElement":
380+ if (arr.length > 0) {
381+ groups.push(arr);
382+ arr = [];
383+ }
384+ groups.push(f);
385+ break;
386+ default:
387+ arr.push(f);
388+ }
389+ }
390+ if (arr.length > 0) groups.push(arr);
391+ return groups;
392+ }
393+
394+ var toString = function(v) {
395+ if (typeof v === "function") {
396+ return "<function>";
397+ } else if (typeof v === "boolean") {
398+ return v ? "True" : "False";
399+ } else if (typeof v === "number") {
400+ return v+"";
401+ } else if (typeof v === "string" && v.length < 2) {
402+ return "'"+v+"'";
403+ } else if (typeof v === "object" && v.hasOwnProperty('_')) {
404+ var output = []
405+ for (var k in v) {
406+ if (k == '_') continue;
407+ for (var i = v[k].length; i--; ) {
408+ output.push(k + " = " + toString(v[k][i]));
409+ }
410+ }
411+ if (output.length === 0) return "{}";
412+ return "{ " + output.join(", ") + " }";
413+ } else if (v[0]) {
414+ if (v[0].substring(0,5) === "Tuple") {
415+ var output = new Array(v.length-1);
416+ for (var i = v.length; --i; ) { output[i-1] = toString(v[i]); }
417+ return "(" + output.join(",") + ")";
418+ } else if (v[0] === "Cons") {
419+ var start = (typeof v[1] === "string") ? '"' : "[";
420+ var end = (typeof v[1] === "string") ? '"' : "]";
421+ var div = (typeof v[1] === "string") ? "" : ",";
422+ var f = (typeof v[1] === "string") ? function(x){return x} : toString;
423+ var output = start + f(v[1]);
424+ v = v[2];
425+ while (true) {
426+ if (v[0] === "Cons") {
427+ output += div + f(v[1]);
428+ v = v[2];
429+ } else {
430+ return output + end;
431+ }
432+ }
433+ } else if (v[0] === "Nil") {
434+ return "[]";
435+ } else if (v[0] === "JSON") {
436+ return "(JSON.fromList " + toString(Elm.JSON.toList(v)) + ")";
437+ } else if (v[0] === "RBNode" || v[0] === "RBEmpty") {
438+ function cons(k){ return function(v) { return function(acc) { return ["Cons",["Tuple2",k,v],acc]; }; }; }
439+ var list = Elm.Dict.foldr(cons)(["Nil"])(v);
440+ var name = "Dict";
441+ if (list[0] === "Cons" && list[1][2][0] === "Tuple0") {
442+ name = "Set";
443+ list = Elm.List.map(function(x) { return x[1]; })(list);
444+ }
445+ return "(" + name + ".fromList " + toString(list) + ")";
446+ } else {
447+ var output = [];
448+ for (var i = v.length; --i; ) { output.push(toString(v[i])); }
449+ output = v[0] + ' ' + output.join(' ');
450+ return (v.length > 1) ? "(" + output + ")" : output;
451+ }
452+ }
453+ return v+"";
454+ };
455+ var show = function(v) { return str(toString(v)); };
456+ var append = function(xs,ys) {
457+ if (typeof xs === "string" && typeof ys === "string") {
458+ return xs.concat(ys);
459+ }
460+ if (xs[0] === "Nil") {
461+ return ys;
462+ }
463+ var root = ["Cons", xs[1], ["Nil"]];
464+ var curr = root;
465+ xs = xs[2];
466+ while (xs[0]==="Cons") {
467+ curr[2] = ["Cons", xs[1], ["Nil"]];
468+ xs = xs[2];
469+ curr = curr[2];
470+ }
471+ curr[2] = ys;
472+ return root;
473+ };
474+
475+ var str = function(s) {
476+ var out = ["Nil"];
477+ for (var i = s.length; i--; ) {
478+ out = ["Cons", s[i], out];
479+ }
480+ return out;
481+ };
482+
483+ function wrap(elem) {
484+ var p = Value.getSize(elem);
485+ return ["Element", Guid.guid(), ["EHtml",elem],
486+ p[0], p[1], 1, ["Nothing"], ["Nothing"]];
487+ }
488+ var addListener = function() {
489+ if(document.addEventListener) {
490+ return function(element, event, handler) {
491+ element.addEventListener(event, handler, false);
492+ };
493+ } else {
494+ return function(element, event, handler) {
495+ element.attachEvent('on' + event, handler);
496+ };
497+ }
498+ }();
499+
500+ return {eq:eq,
501+ str:str,
502+ show:show,
503+ Tuple:Tuple,
504+ append:append,
505+ listToArray:listToArray,
506+ toText : toText,
507+ properEscape : properEscape,
508+ getTextSize : getTextSize,
509+ getSize : getSize,
510+ getExcess : getExcess,
511+ groupForms : groupForms,
512+ wrap : wrap,
513+ addListener : addListener
514+ };
515+}();Elm.List = function() {
516+
517+ var throwError = function(f) {
518+ throw "Function '" + f + "' expecting a list!";
519+ }
520+
521+ function length(xs) {
522+ var out = 0;
523+ while (xs[0] === "Cons") {
524+ out += 1;
525+ xs = xs[2];
526+ }
527+ return out;
528+ };
529+ var reverse = foldl(function(x_72) {
530+ return function(y_73) {
531+ return["Cons", x_72, y_73]
532+ }
533+ })(["Nil"]);
534+ var concat = foldr(function(x_74) {
535+ return function(y_75) {
536+ return Value.append(x_74, y_75)
537+ }
538+ })(["Nil"]);
539+ var and = foldl(function(x_77) {
540+ return function(y_78) {
541+ return x_77 && y_78
542+ }
543+ })(true);
544+ var or = foldl(function(x_79) {
545+ return function(y_80) {
546+ return x_79 || y_80
547+ }
548+ })(false);
549+ var sum = foldl(function(x_89) {
550+ return function(y_90) {
551+ return x_89 + y_90
552+ }
553+ })(0);
554+ var product = foldl(function(x_91) {
555+ return function(y_92) {
556+ return x_91 * y_92
557+ }
558+ })(1);
559+ var maximum = foldl1(function(x) { return function(y) { return Math.max(x,y) } });
560+ var minimum = foldl1(function(x) { return function(y) { return Math.min(x,y) } });
561+ function head(v) {
562+ if (v[0] !== "Cons") {
563+ throw "Error: 'head' only accepts lists of length greater than one.";
564+ }
565+ return v[1];
566+ }
567+ function tail(v) {
568+ if (v[0] !== "Cons") {
569+ throw "Error: 'tail' only accepts lists of length greater than one.";
570+ }
571+ return v[2];
572+ }
573+ function last(v) {
574+ if (v[0] !== "Cons") {
575+ throw "Error: 'last' only accepts lists of length greater than one.";
576+ }
577+ var out = v[1];
578+ while (v[0] === "Cons") {
579+ out = v[1];
580+ v = v[2];
581+ }
582+ return out;
583+ }
584+ function map(f) {
585+ return function(xs) {
586+ if (xs[0] === "Nil") { return xs; }
587+ if (xs[0] !== "Cons") { throwError('map'); }
588+ var root = ["Cons", f(xs[1]), ["Nil"]];
589+ var curr = root;
590+ xs = xs[2];
591+ while (xs[0]==="Cons") {
592+ curr[2] = ["Cons", f(xs[1]), ["Nil"]];
593+ xs = xs[2];
594+ curr = curr[2];
595+ }
596+ return root;
597+ }
598+ }
599+ function foldl(f) {
600+ return function(b) {
601+ return function(xs) {
602+ var acc = b;
603+ if (xs[0] === "Nil") { return acc; }
604+ if (xs[0] !== "Cons") { throwError('foldl'); }
605+ while (xs[0] === "Cons") {
606+ acc = f(xs[1])(acc);
607+ xs = xs[2];
608+ }
609+ return acc;
610+ }
611+ }
612+ }
613+ function foldr(f) {
614+ return function(b) {
615+ return function(xs) {
616+ var acc = b;
617+ if (xs[0] === "Nil") { return acc; }
618+ if (xs[0] !== "Cons") { throwError('foldr'); }
619+ var arr = [];
620+ while (xs[0] === "Cons") {
621+ arr.push(xs[1]);
622+ xs = xs[2];
623+ }
624+ for (var i = arr.length; i--; ) {
625+ acc = f(arr[i])(acc);
626+ }
627+ return acc;
628+ }
629+ }
630+ }
631+ function foldl1(f_49) {
632+ return function(_temp_50) {
633+ return function(v) {
634+ if("Cons" !== v[0]) {
635+ return undefined
636+ }else {
637+ var x_51 = v[1];
638+ var xs_52 = v[2];
639+ return foldl(f_49)(x_51)(xs_52)
640+ }
641+ }(_temp_50)
642+ }
643+ }
644+ function foldr1(f) {
645+ return function(xs) {
646+ if (xs[0] === "Nil") { throw "'foldr1' requires an non-empty list." }
647+ if (xs[0] !== "Cons") { throwError('foldr1'); }
648+ var arr = [];
649+ while (xs[0] === "Cons") {
650+ arr.push(xs[1]);
651+ xs = xs[2];
652+ }
653+ var acc = arr.pop();
654+ for (var i = arr.length; i--; ) {
655+ acc = f(arr[i])(acc);
656+ }
657+ return acc;
658+ }
659+ }
660+ function scanl(f) {
661+ return function(b) {
662+ return function(xs) {
663+ if (xs[0] === "Nil") { return ["Cons",b,["Nil"]]; }
664+ if (xs[0] !== "Cons") { throwError('scanl'); }
665+ var arr = [b];
666+ while (xs[0] === "Cons") {
667+ b = f(xs[1])(b);
668+ arr.push(b);
669+ xs = xs[2];
670+ }
671+ var out = ["Nil"];
672+ for (var i = arr.length; i--; ) {
673+ out = ["Cons", arr[i], out];
674+ }
675+ return out;
676+ }
677+ }
678+ }
679+ function scanl1(f) {
680+ return function(xs) {
681+ if (xs[0] !== "Cons") {
682+ throw "Error: 'scanl1' requires a list of at least length 1.";
683+ }
684+ return scanl(f)(xs[1])(xs[2]);
685+ }
686+ }
687+ function filter(pred) {
688+ return function(xs) {
689+ if (xs[0] === "Nil") { return xs; }
690+ if (xs[0] !== "Cons") { throwError('filter'); }
691+ var arr = [];
692+ while (xs[0] === "Cons") {
693+ if (pred(xs[1])) { arr.push(xs[1]); }
694+ xs = xs[2];
695+ }
696+ var out = ["Nil"];
697+ for (var i = arr.length; i--; ) {
698+ out = ["Cons", arr[i], out];
699+ }
700+ return out;
701+ }
702+ }
703+ function concatMap(f_76) {
704+ return function(x) {
705+ return concat(map(f_76)(x))
706+ }
707+ }
708+ function all(pred) {
709+ return foldl(function(x) { return function(acc) {
710+ return acc && pred(x);
711+ };})(true);
712+ }
713+ function any(pred) {
714+ return foldl(function(x) { return function(acc) {
715+ return acc || pred(x);
716+ };})(false);
717+ }
718+ function partition(pred_93) {
719+ return function(lst_94) {
720+ return function() {
721+ var v = lst_94;
722+ var c = [function(v) {
723+ if("Nil" !== v[0]) {
724+ return undefined
725+ }else {
726+ return["Tuple2", ["Nil"], ["Nil"]]
727+ }
728+ }, function(v) {
729+ if("Cons" !== v[0]) {
730+ return undefined
731+ }else {
732+ var x_95 = v[1];
733+ var xs_96 = v[2];
734+ return function(v) {
735+ if("Tuple2" !== v[0]) {
736+ return undefined
737+ }else {
738+ var as_97 = v[1];
739+ var bs_98 = v[2];
740+ return pred_93(x_95) ? ["Tuple2", ["Cons", x_95, as_97], bs_98] : ["Tuple2", as_97, ["Cons", x_95, bs_98]]
741+ }
742+ }(partition(pred_93)(xs_96))
743+ }
744+ }];
745+ for(var i = c.length;i--;) {
746+ var r = c[i](v);
747+ if(r !== undefined) {
748+ return r
749+ }
750+ }
751+ }()
752+ }
753+ }
754+ function zipWith(f) {
755+ return function(listA) {
756+ return function(listB) {
757+ if (listA[0] === "Nil" || listB[0] === "Nil") { return ["Nil"]; }
758+ if (listA[0] !== "Cons" || listB[0] !== "Cons") { throwError('zipWith'); }
759+ var arr = [];
760+ while (listA[0] === "Cons" && listB[0] === "Cons") {
761+ arr.push(f(listA[1])(listB[1]));
762+ listA = listA[2];
763+ listB = listB[2];
764+ }
765+ var out = ["Nil"];
766+ for (var i = arr.length; i--; ) {
767+ out = ["Cons", arr[i], out];
768+ }
769+ return out;
770+ }
771+ }
772+ }
773+ function zip(listA) {
774+ return function(listB) {
775+ if (listA[0] === "Nil" || listB[0] === "Nil") { return ["Nil"]; }
776+ if (listA[0] !== "Cons" || listB[0] !== "Cons") { throwError('zip'); }
777+ var arr = [];
778+ while (listA[0] === "Cons" && listB[0] === "Cons") {
779+ arr.push(["Tuple2", listA[1], listB[1]]);
780+ listA = listA[2];
781+ listB = listB[2];
782+ }
783+ var out = ["Nil"];
784+ for (var i = arr.length; i--; ) {
785+ out = ["Cons", arr[i], out];
786+ }
787+ return out;
788+ }
789+ }
790+ function unzip(pairs_112) {
791+ return function() {
792+ var v = pairs_112;
793+ var c = [function(v) {
794+ if("Nil" !== v[0]) {
795+ return undefined
796+ }else {
797+ return["Tuple2", ["Nil"], ["Nil"]]
798+ }
799+ }, function(v) {
800+ if("Cons" !== v[0]) {
801+ return undefined
802+ }else {
803+ var p_113 = v[1];
804+ var ps_114 = v[2];
805+ return function(v) {
806+ if("Tuple2" !== v[0]) {
807+ return undefined
808+ }else {
809+ if("Tuple2" !== v[1][0]) {
810+ return undefined
811+ }else {
812+ var x_115 = v[1][1];
813+ var y_116 = v[1][2];
814+ if("Tuple2" !== v[2][0]) {
815+ return undefined
816+ }else {
817+ var xs_117 = v[2][1];
818+ var ys_118 = v[2][2];
819+ return["Tuple2", ["Cons", x_115, xs_117], ["Cons", y_116, ys_118]]
820+ }
821+ }
822+ }
823+ }(["Tuple2", p_113, unzip(ps_114)])
824+ }
825+ }];
826+ for(var i = c.length;i--;) {
827+ var r = c[i](v);
828+ if(r !== undefined) {
829+ return r
830+ }
831+ }
832+ }()
833+ }
834+ function intersperse(sep_119) {
835+ return function(xs_120) {
836+ return function() {
837+ var v = xs_120;
838+ var c = [function(v) {
839+ if("Nil" !== v[0]) {
840+ return undefined
841+ }else {
842+ return["Nil"]
843+ }
844+ }, function(v) {
845+ if("Cons" !== v[0]) {
846+ return undefined
847+ }else {
848+ var a_124 = v[1];
849+ if("Nil" !== v[2][0]) {
850+ return undefined
851+ }else {
852+ return["Cons", a_124, ["Nil"]]
853+ }
854+ }
855+ }, function(v) {
856+ if("Cons" !== v[0]) {
857+ return undefined
858+ }else {
859+ var a_121 = v[1];
860+ if("Cons" !== v[2][0]) {
861+ return undefined
862+ }else {
863+ var b_122 = v[2][1];
864+ var cs_123 = v[2][2];
865+ return["Cons", a_121, ["Cons", sep_119, intersperse(sep_119)(["Cons", b_122, cs_123])]]
866+ }
867+ }
868+ }];
869+ for(var i = c.length;i--;) {
870+ var r = c[i](v);
871+ if(r !== undefined) {
872+ return r
873+ }
874+ }
875+ }()
876+ }
877+ }
878+ function intercalate(sep_125) {
879+ return function(xs_126) {
880+ return function() {
881+ var v = xs_126;
882+ var c = [function(v) {
883+ if("Nil" !== v[0]) {
884+ return undefined
885+ }else {
886+ return["Nil"]
887+ }
888+ }, function(v) {
889+ if("Cons" !== v[0]) {
890+ return undefined
891+ }else {
892+ var a_130 = v[1];
893+ if("Nil" !== v[2][0]) {
894+ return undefined
895+ }else {
896+ return a_130
897+ }
898+ }
899+ }, function(v) {
900+ if("Cons" !== v[0]) {
901+ return undefined
902+ }else {
903+ var a_127 = v[1];
904+ if("Cons" !== v[2][0]) {
905+ return undefined
906+ }else {
907+ var b_128 = v[2][1];
908+ var cs_129 = v[2][2];
909+ return Value.append(a_127, Value.append(sep_125, intercalate(sep_125)(["Cons", b_128, cs_129])))
910+ }
911+ }
912+ }];
913+ for(var i = c.length;i--;) {
914+ var r = c[i](v);
915+ if(r !== undefined) {
916+ return r
917+ }
918+ }
919+ }()
920+ }
921+ }
922+ function sort(xs) {
923+ if (xs[0] === "Nil") { return xs; }
924+ if (xs[0] !== "Cons") { throwError('sort'); }
925+ var arr = [];
926+ while (xs[0] === "Cons") {
927+ arr.push(xs[1]);
928+ xs = xs[2];
929+ }
930+ arr.sort(function(a,b) { return a - b});
931+ var out = ["Nil"];
932+ for (var i = arr.length; i--; ) {
933+ out = [ "Cons", arr[i], out ];
934+ }
935+ return out;
936+ }
937+ function take(n) { return function(xs) {
938+ if (n <= 0) { return ["Nil"]; }
939+ if (xs[0] === "Nil") { return xs; }
940+ if (xs[0] !== "Cons") { throwError('take'); }
941+ var out = [ "Cons", xs[1], ["Nil"] ];
942+ var temp = out;
943+ xs = xs[2];
944+ --n;
945+ while (xs[0] === "Cons" && n > 0) {
946+ temp[2] = [ "Cons", xs[1], ["Nil"] ];
947+ temp = temp[2];
948+ xs = xs[2];
949+ --n;
950+ }
951+ return out;
952+ };
953+ }
954+ function drop(n) { return function(xs) {
955+ if (xs[0] === "Nil") { return xs; }
956+ if (xs[0] !== "Cons") { throwError('drop'); }
957+ while (xs[0] === "Cons" && n > 0) {
958+ xs = xs[2];
959+ --n;
960+ }
961+ return xs;
962+ };
963+ }
964+ return {head:head,
965+ tail:tail,
966+ last:last,
967+ map:map,
968+ foldl:foldl,
969+ foldr:foldr,
970+ foldl1:foldl1,
971+ foldr1:foldr1,
972+ scanl:scanl,
973+ scanl1:scanl1,
974+ filter:filter,
975+ length:length,
976+ reverse:reverse,
977+ concat:concat,
978+ concatMap:concatMap,
979+ and:and,
980+ or:or,
981+ all:all,
982+ any:any,
983+ sum:sum,
984+ product:product,
985+ maximum:maximum,
986+ minimum:minimum,
987+ partition:partition,
988+ zipWith:zipWith,
989+ zip:zip,
990+ unzip:unzip,
991+ intersperse:intersperse,
992+ intercalate:intercalate,
993+ sort:sort,
994+ take:take,
995+ drop:drop};
996+}();
997+Elm.Maybe = function() {
998+ function consMaybe(x) { return function(xs) {
999+ if (x[0] === "Just") return ["Cons", x[1], xs];
1000+ return xs;
1001+ };
1002+ }
1003+ function fromMaybe(b) { return function(m) {
1004+ if (m[0] === "Just") return m[1];
1005+ return b;
1006+ };
1007+ }
1008+ function mapCons(f) { return function(y) { return function(xs) {
1009+ var x = f(y);
1010+ if (x[0] === "Just") return ["Cons", x[1], xs];
1011+ return xs;
1012+ };
1013+ };
1014+ }
1015+ function maybe(b) { return function(f) { return function(m) {
1016+ if (m[0] === "Just") return f(m[1]);
1017+ return b;
1018+ };
1019+ };
1020+ }
1021+
1022+ return {Just : function(x) { return ["Just",x]; },
1023+ Nothing : ["Nothing"],
1024+ catMaybes : Elm.List.foldr(consMaybe)(["Nil"]),
1025+ isJust : function(m) { return m[0] === "Just"; },
1026+ isNothing : function(m) { return m[0] === "Nothing"; },
1027+ fromMaybe : fromMaybe,
1028+ consMaybe : consMaybe,
1029+ mapMaybe : function(f) { return Elm.List.foldr(mapCons(f))(["Nil"]); },
1030+ maybe : maybe
1031+ };
1032+}();
1033+
1034+Elm.Char = function() {
1035+ function isBetween(lo,hi) { return function(chr) {
1036+ var c = chr.charCodeAt(0);
1037+ return lo <= c && c <= hi;
1038+ };
1039+ }
1040+ var isDigit = isBetween('0'.charCodeAt(0),'9'.charCodeAt(0));
1041+ var chk1 = isBetween('a'.charCodeAt(0),'f'.charCodeAt(0));
1042+ var chk2 = isBetween('A'.charCodeAt(0),'F'.charCodeAt(0));
1043+
1044+ return {fromCode : function(c) { return String.fromCharCode(c); },
1045+ toCode : function(c) { return c.charCodeAt(0); },
1046+ toUpper : function(c) { return c.toUpperCase(); },
1047+ toLower : function(c) { return c.toLowerCase(); },
1048+ toLocaleUpper : function(c) { return c.toLocaleUpperCase(); },
1049+ toLocaleLower : function(c) { return c.toLocaleLowerCase(); },
1050+ isLower : isBetween('a'.charCodeAt(0),'z'.charCodeAt(0)),
1051+ isUpper : isBetween('A'.charCodeAt(0),'Z'.charCodeAt(0)),
1052+ isDigit : isDigit,
1053+ isOctDigit : isBetween('0'.charCodeAt(0),'7'.charCodeAt(0)),
1054+ isHexDigit : function(c) { return isDigit(c) || chk1(c) || chk2(c); }
1055+ };
1056+}();
1057+Elm.Color = function() {
1058+
1059+function Color_0(a1) {
1060+ return function(a2) {
1061+ return function(a3) {
1062+ return function(a4) {
1063+ return["Color", a1, a2, a3, a4]
1064+ }
1065+ }
1066+ }
1067+}
1068+var rgba_1 = Color_0;
1069+var red_3 = ["Color",255,0,0,1];
1070+var green_4 = ["Color",0,255,0,1];
1071+var blue_5 = ["Color",0,0,255,1];
1072+var yellow_6 = ["Color",255,255,0,1];
1073+var cyan_7 = ["Color",0,255,255,1];
1074+var magenta_8 = ["Color",255,0,255,1];
1075+var black_9 = ["Color",0,0,0,1];
1076+var white_10 = ["Color",255,255,255,1];
1077+var gray_11 = ["Color",128,128,128,1];
1078+var grey_12 = ["Color",128,128,128,1];
1079+function rgb_2(r_13) {
1080+ return function(g_14) {
1081+ return function(b_15) {
1082+ return ["Color",r_13,g_14,b_15,1]
1083+ }
1084+ }
1085+}
1086+function extract(c) {
1087+ if (c[4] === 1) { return 'rgb(' + c[1] + ',' + c[2] + ',' + c[3] + ')'; }
1088+ return 'rgba(' + c[1] + ',' + c[2] + ',' + c[3] + ',' + c[4] + ')';
1089+}
1090+function complement(rgb) {
1091+ var hsv = toHSV(rgb);
1092+ hsv.hue = (hsv.hue + 180) % 360;
1093+ return toRGB(hsv);
1094+}
1095+
1096+function hsva(h) { return function(s) { return function(v) { return function(a) {
1097+ var clr = toRGB({hue:h, saturation:s, value:v});
1098+ clr[4] = a;
1099+ return clr;
1100+ }; }; };
1101+}
1102+
1103+function hsv(h) { return function(s) { return function(v) {
1104+ return toRGB({hue:h, saturation:s, value:v}); }; }; }
1105+
1106+function toHSV(rgb) {
1107+ var hsv = {};
1108+ var r = rgb[1] / 255.0, g = rgb[2] / 255.0, b = rgb[3] / 255.0;
1109+ var M = Math.max(r,g,b);
1110+ var m = Math.min(r,g,b);
1111+ var c = M - m;
1112+
1113+ var h = 0;
1114+ if (c === 0) { h = 0; }
1115+ else if (M === r) { h = ((g - b) / c) % 6; }
1116+ else if (M === g) { h = ((b - r) / c) + 2; }
1117+ else if (M === b) { h = ((r - g) / c) + 4; }
1118+ h *= 60;
1119+
1120+ return { value : M, hue : h, saturation : (M === 0 ? 0 : c / M) };
1121+}
1122+
1123+function between(lo,hi,x) { return lo <= x && x < hi; }
1124+function norm(n) { return Math.round(n*255); }
1125+
1126+function toRGB(hsv) {
1127+ var c = hsv.value * hsv.saturation;
1128+ var hue = hsv.hue / 60;
1129+ var x = c * (1 - Math.abs((hue % 2) - 1));
1130+ var r = 0, g = 0, b = 0;
1131+ if (between(0,1,hue)) { r = c; g = x; b = 0; }
1132+ else if (between(1,2,hue)) { r = x; g = c; b = 0; }
1133+ else if (between(2,3,hue)) { r = 0; g = c; b = x; }
1134+ else if (between(3,4,hue)) { r = 0; g = x; b = c; }
1135+ else if (between(4,5,hue)) { r = x; g = 0; b = c; }
1136+ else if (between(5,6,hue)) { r = c; g = 0; b = x; }
1137+
1138+ var m = hsv.value - c;
1139+ return ["Color", norm(r+m), norm(g+m), norm(b+m), 1 ];
1140+}
1141+ return{rgba:rgba_1, rgb:rgb_2, hsva:hsva, hsv:hsv, red:red_3, green:green_4, blue:blue_5, yellow:yellow_6, cyan:cyan_7, magenta:magenta_8, black:black_9, white:white_10, gray:gray_11, grey:grey_12,complement:complement,extract:extract}
1142+}();
1143+var Collage = function() {
1144+
1145+var JS = Elm.JavaScript;
1146+
1147+function tracePoints(ctx,points) {
1148+ var i = points.length - 1;
1149+ if (i <= 0) return;
1150+ ctx.moveTo(points[i][1], points[i][2]);
1151+ while (i--) { ctx.lineTo(points[i][1], points[i][2]); }
1152+}
1153+
1154+function solid(ctx,color,points) {
1155+ tracePoints(ctx,points);
1156+ ctx.strokeStyle = Elm.Color.extract(color);
1157+ ctx.stroke();
1158+};
1159+
1160+function filled(ctx,color,points) {
1161+ tracePoints(ctx,points);
1162+ ctx.fillStyle = Elm.Color.extract(color);
1163+ ctx.fill();
1164+}
1165+
1166+function textured(redo,ctx,src,points) {
1167+ var img = new Image();
1168+ img.src = JS.castStringToJSString(src);
1169+ img.onload = redo;
1170+
1171+ tracePoints(ctx,points);
1172+ ctx.fillStyle = ctx.createPattern(img,'repeat');
1173+ ctx.fill();
1174+}
1175+
1176+function customLine(pattern,ctx,color,points) {
1177+ if (pattern.length === 0) { pattern = [8,4]; }
1178+ customLineHelp(ctx, pattern, points);
1179+ ctx.strokeStyle = Elm.Color.extract(color);
1180+ ctx.stroke();
1181+};
1182+
1183+var customLineHelp = function(ctx, pattern, points) {
1184+ var i = points.length - 1;
1185+ if (i <= 0) return;
1186+ var x0 = points[i][1], y0 = points[i][2];
1187+ var x1=0, y1=0, dx=0, dy=0, remaining=0, nx=0, ny=0;
1188+ var pindex = 0, plen = pattern.length;
1189+ var draw = true, segmentLength = pattern[0];
1190+ ctx.moveTo(x0,y0);
1191+ while (i--) {
1192+ x1 = points[i][1]; y1 = points[i][2];
1193+ dx = x1 - x0; dy = y1 - y0;
1194+ remaining = Math.sqrt(dx * dx + dy * dy);
1195+ while (segmentLength <= remaining) {
1196+ x0 += dx * segmentLength / remaining;
1197+ y0 += dy * segmentLength / remaining;
1198+ ctx[draw ? 'lineTo' : 'moveTo'](x0, y0);
1199+ // update starting position
1200+ dx = x1 - x0; dy = y1 - y0;
1201+ remaining = Math.sqrt(dx * dx + dy * dy);
1202+ // update pattern
1203+ draw = !draw;
1204+ pindex = (pindex + 1) % plen;
1205+ segmentLength = pattern[pindex];
1206+ }
1207+ if (remaining > 0) {
1208+ ctx[draw ? 'lineTo' : 'moveTo'](x1, y1);
1209+ segmentLength -= remaining;
1210+ }
1211+ x0 = x1; y0 = y1;
1212+ }
1213+};
1214+
1215+function drawLine(ctx,form) {
1216+ var points = form[3][1];
1217+ switch(form[1][0]) {
1218+ case "Solid" : return solid(ctx,form[2],points);
1219+ case "Dotted": return customLine([3,3],ctx,form[2],points);
1220+ case "Dashed": return customLine([8,4],ctx,form[2],points);
1221+ case "Custom": return customLine(form[1][1],ctx,form[2],points);
1222+ }
1223+};
1224+
1225+function drawShape(redo,ctx,shapeStyle,color,points) {
1226+ switch(shapeStyle[0]) {
1227+ case "Filled": return filled(ctx,color,points);
1228+ case "Outlined": return solid(ctx,color,points);
1229+ case "Textured": return textured(redo,ctx,shapeStyle[1],points);
1230+ case "CustomOutline":
1231+ return customLine(shapeStyle[1],ctx,color,points);
1232+ }
1233+};
1234+
1235+function drawImage(redo,ctx,w,h,src) {
1236+ var img = new Image();
1237+ img.onload = redo;
1238+ img.src = JS.castStringToJSString(src);
1239+ ctx.drawImage(img,-w/2,-h/2,w,h);
1240+}
1241+
1242+function renderForm(redo,ctx,theta,scale,x,y,form) {
1243+ ctx.save();
1244+ if (x !== 0 || y !== 0) ctx.translate(x,y);
1245+ if (theta !== ~~theta) ctx.rotate(2*Math.PI*theta);
1246+ if (scale !== 1) ctx.scale(scale,scale);
1247+ ctx.beginPath();
1248+ switch(form[0]) {
1249+ case "FLine": drawLine(ctx,form); break;
1250+ case "FShape": drawShape(redo,ctx,form[1],form[2],form[3][1]); break;
1251+ case "FImage": drawImage(redo,ctx,form[1],form[2],form[3]); break;
1252+ }
1253+ ctx.restore();
1254+};
1255+
1256+function renderForms(redo,ctx,w,h,forms) {
1257+ ctx.clearRect(0,0,w,h);
1258+ for (var i = forms.length; i--; ) {
1259+ var f = forms[i];
1260+ renderForm(redo,ctx,f[1],f[2],f[3][1],f[3][2],f[4]);
1261+ }
1262+}
1263+
1264+function collageForms(w,h,forms) {
1265+ var canvas = Render.newElement('canvas');
1266+ w = ~~w;
1267+ h = ~~h;
1268+ canvas.style.width = w + 'px';
1269+ canvas.style.height = h + 'px';
1270+ canvas.style.display = "block";
1271+ canvas.width = w;
1272+ canvas.height = h;
1273+ if (canvas.getContext) {
1274+ var ctx = canvas.getContext('2d');
1275+ function redo() { renderForms(this,ctx,w,h,forms); }
1276+ renderForms(redo,ctx,w,h,forms);
1277+ return canvas;
1278+ }
1279+ canvas.innerHTML = "Your browser does not support the canvas element.";
1280+ return canvas;
1281+};
1282+
1283+function collageElement(w,h,theta,scale,x,y,elem) {
1284+ var e = Render.render(elem);
1285+ var t = "translate(" + (x - elem[3] / 2) + "px,"+ (y - elem[4] / 2) + "px)";
1286+ var r = theta === (~~theta) ? "" : "rotate(" + theta*360 + "deg)";
1287+ var s = scale === 1 ? "" : "scale(" + scale + "," + scale + ")";
1288+ var transforms = t + " " + s + " " + r;
1289+ e.style.transform = transforms;
1290+ e.style.msTransform = transforms;
1291+ e.style.MozTransform = transforms;
1292+ e.style.webkitTransform = transforms;
1293+ e.style.OTransform = transforms;
1294+ var div = Render.newElement('div');
1295+ Render.addTo(div,e);
1296+ div.style.width = (~~w) + "px";
1297+ div.style.height = (~~h) + "px";
1298+ div.style.overflow = "hidden";
1299+ return div;
1300+}
1301+
1302+function collage(w,h,formss) {
1303+ if (formss.length === 0) { return collageForms(w,h,[]); }
1304+ var elems = new Array(formss.length);
1305+ for (var i = formss.length; i--; ) {
1306+ var f = formss[i];
1307+ if (typeof f[0] === "string") {
1308+ elems[i] = collageElement(w,h,f[1],f[2],f[3][1],f[3][2],f[4][1]);
1309+ } else {
1310+ elems[i] = collageForms(w,h,f);
1311+ }
1312+ }
1313+ if (formss.length === 1) { return elems[0]; }
1314+ return Render.flowWith(Render.goIn,function(x){return x},elems);
1315+}
1316+
1317+function updateFormSet(node,currSet,nextSet) {
1318+ if (Value.eq(nextSet,currSet)) return;
1319+ var w = node.style.width.slice(0,-2) - 0;
1320+ var h = node.style.height.slice(0,-2) - 0;
1321+ if (typeof nextSet[0] === "object") {
1322+ if (typeof currSet[0] === "object") {
1323+ if (node.getContext) {
1324+ var ctx = node.getContext('2d');
1325+ function redo() { renderForms(this,ctx,w,h,nextSet); }
1326+ return renderForms(redo,ctx,w,h,nextSet);
1327+ }
1328+ }
1329+ var newNode = collageForms(w,h,nextSet);
1330+ newNode.style.position = 'absolute';
1331+ return node.parentNode.replaceChild(newNode,node);
1332+ }
1333+ var f = nextSet;
1334+ var newNode = collageElement(w,h,f[1],f[2],f[3][1],f[3][2],f[4][1]);
1335+ newNode.style.position = 'absolute';
1336+ return node.parentNode.replaceChild(newNode,node);
1337+}
1338+
1339+// assumes that the form sets are the same length.
1340+function updateCollage(node,currs,nexts) {
1341+ if (nexts.length === 1) {
1342+ return updateFormSet(node,currs[0],nexts[0]);
1343+ }
1344+ var kids = node.childNodes;
1345+ var len = kids.length;
1346+ for (var i = len; i--; ) {
1347+ updateFormSet(kids[len-i-1], currs[i], nexts[i]);
1348+ }
1349+}
1350+
1351+function style(clr,n,list) {
1352+ return ["Tuple2",
1353+ '<span style="font-size:100%;color:' + clr + ';">' + n + '</span>',
1354+ list];
1355+}
1356+
1357+function insideForm(point) { return function(form) {
1358+ if (!inBoundsOf(point[1],point[2],form)) return false;
1359+ var hw, hh;
1360+ switch (form[4][0]) {
1361+ case "FShape": return insideShape(point,form[1],form[2],form[3],form[4][3][1]);
1362+ case "FLine": return false;
1363+ case "FImage":
1364+ hw = form[4][1] / 2;
1365+ hh = form[4][2] / 2;
1366+ break;
1367+ case "FElement":
1368+ hw = form[4][1][3] / 2;
1369+ hh = form[4][1][4] / 2;
1370+ break;
1371+ }
1372+ return insideShape(point,form[1],form[2],form[3],
1373+ [ [null, hw, hh],
1374+ [null,-hw, hh],
1375+ [null,-hw,-hh],
1376+ [null, hw,-hh],
1377+ [null, hw, hh] ]);
1378+ };
1379+}
1380+
1381+function inBoundsOf(px,py,form) {
1382+ if (form.length < 6) {
1383+ var fx = form[3][1], fy = form[3][2];
1384+ var radiusSquared = 0;
1385+ var scale = form[2];
1386+ switch (form[4][0]) {
1387+ case "FShape":
1388+ var points = form[4][3][1];
1389+ for (var i = points.length; --i; ) {
1390+ var p = points[i];
1391+ radiusSquared = Math.max(radiusSquared, p[1]*p[1] + p[2]*p[2]);
1392+ }
1393+ radiusSquared *= scale * scale;
1394+ break;
1395+ case "FLine":
1396+ break;
1397+ case "FImage":
1398+ var x = scale * form[4][1] / 2;
1399+ var y = scale * form[4][2] / 2;
1400+ radiusSquared = x*x + y*y;
1401+ break;
1402+ case "FElement":
1403+ var x = scale * form[4][1][3] / 2;
1404+ var y = scale * form[4][1][4] / 2;
1405+ radiusSquared = x*x + y*y;
1406+ break;
1407+ }
1408+ form.push(function(px,py) {
1409+ var dx = px - fx;
1410+ var dy = py - fy;
1411+ return dx*dx + dy*dy < radiusSquared + 1;
1412+ });
1413+ }
1414+ return form[5](px,py);
1415+}
1416+
1417+function insideShape(point,theta,scale,pos,points) {
1418+ var counter = 0;
1419+ var list = ["Nil"];
1420+ var p1,p2;
1421+
1422+ var x = (point[1] - pos[1]) / scale;
1423+ var y = (point[2] - pos[2]) / scale;
1424+ if (theta !== 0) {
1425+ var t = -2 * Math.PI * theta;
1426+ var nx = x * Math.cos(t) - y * Math.sin(t);
1427+ y = x * Math.sin(t) + y * Math.cos(t);
1428+ x = nx;
1429+ }
1430+
1431+ if (points.length === 0) { return false; }
1432+ p1 = points[0];
1433+ for (var i = points.length - 1; i--; ) {
1434+ p2 = points[i];
1435+ var p1x = p1[1], p1y = p1[2], p2x = p2[1], p2y = p2[2];
1436+
1437+ if (p1y < p2y) {var ymin=p1y, ymax=p2y;} else {var ymin=p2y, ymax=p1y;}
1438+ if (p1x < p2x) {var xmin=p1x, xmax=p2x;} else {var xmin=p2x, xmax=p1x;}
1439+
1440+ if (ymin < y && y <= ymax && x <= xmax) {
1441+ if (x <= xmin || x <= ((y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x)) {
1442+ ++counter;
1443+ }
1444+ }
1445+ p1 = p2;
1446+ }
1447+ return (counter % 2) === 1;
1448+}
1449+
1450+return {collage:collage, updateCollage:updateCollage, insideForm:insideForm};
1451+
1452+}();Elm.Graphics = function() {
1453+ for (this['i'] in Elm.List) {
1454+ eval('var ' + this['i'] + ' = Elm.List[this.i];');
1455+ }
1456+ var JS = Elm.JavaScript;
1457+ var DLeft_0 = ["DLeft"];
1458+ var DRight_1 = ["DRight"];
1459+ var DUp_2 = ["DUp"];
1460+ var DDown_3 = ["DDown"];
1461+ var DIn_4 = ["DIn"];
1462+ var DOut_5 = ["DOut"];
1463+ function Absolute_12(a1) {
1464+ return["Absolute", a1]
1465+ }
1466+ function Relative_13(a1) {
1467+ return["Relative", a1]
1468+ }
1469+ var Near_14 = ["Near"];
1470+ var Mid_15 = ["Mid"];
1471+ var Far_16 = ["Far"];
1472+ function Position_17(a1) {
1473+ return function(a2) {
1474+ return["Position", a1, a2]
1475+ }
1476+ }
1477+ function PositionTL_18(a1) {
1478+ return function(a2) {
1479+ return["PositionTL", a1, a2]
1480+ }
1481+ }
1482+ function PositionTR_19(a1) {
1483+ return function(a2) {
1484+ return["PositionTR", a1, a2]
1485+ }
1486+ }
1487+ function PositionBL_20(a1) {
1488+ return function(a2) {
1489+ return["PositionBL", a1, a2]
1490+ }
1491+ }
1492+ function PositionBR_21(a1) {
1493+ return function(a2) {
1494+ return["PositionBR", a1, a2]
1495+ }
1496+ }
1497+ function Element_37(id,e,w,h,o,c,l) {
1498+ return["Element", id, e, w, h, o, c, l ]
1499+ }
1500+ function EText_39(a1) {
1501+ return function(a2) {
1502+ return["EText", a1, a2]
1503+ }
1504+ }
1505+ function EImage_40(a1) {
1506+ return["EImage", JS.castStringToJSString(a1)]
1507+ }
1508+ function EVideo_41(a1) {
1509+ return["EVideo", JS.castStringToJSString(a1)]
1510+ }
1511+ function EFittedImage_42(a1) {
1512+ return["EFittedImage", JS.castStringToJSString(a1)]
1513+ }
1514+ function EFlow_43(a1) {
1515+ return function(a2) {
1516+ return["EFlow", a1, JS.castListToJSArray(a2)]
1517+ }
1518+ }
1519+ function ECollage_44(a1) {
1520+ return function(a2) {
1521+ return function(a3) {
1522+ return["ECollage", a1, a2, Value.groupForms(a3)]
1523+ }
1524+ }
1525+ }
1526+ var EEmpty_45 = ["EEmpty"];
1527+ function EContainer_46(a1) {
1528+ return function(a2) {
1529+ return["EContainer", a1, a2]
1530+ }
1531+ }
1532+ var Solid_68 = ["Solid"];
1533+ var Dotted_69 = ["Dotted"];
1534+ var Dashed_70 = ["Dashed"];
1535+ function Custom_71(a1) {
1536+ return["Custom", JS.castListToJSArray(a1)]
1537+ }
1538+ var Filled_72 = ["Filled"];
1539+ var Outlined_73 = ["Outlined"];
1540+ function CustomOutline_74(a1) {
1541+ return["CustomOutline", JS.castListToJSArray(a1)]
1542+ }
1543+ function Line_75(a1) {
1544+ return["Line", JS.castListToJSArray(a1)]
1545+ }
1546+ function Shape_78(a1) {
1547+ return function(a2) {
1548+ var points = JS.castListToJSArray(a1);
1549+ if (points.length > 0) { points.push(points[0]); }
1550+ return["Shape", points, a2];
1551+ }
1552+ }
1553+ function Form_84(a1) {
1554+ return function(a2) {
1555+ return function(a3) {
1556+ return function(a4) {
1557+ return["Form", a1, a2, a3, a4]
1558+ }
1559+ }
1560+ }
1561+ }
1562+ function FLine_85(a1) {
1563+ return function(a2) {
1564+ return function(a3) {
1565+ return["FLine", a1, a2, a3]
1566+ }
1567+ }
1568+ }
1569+ function FShape_86(a1) {
1570+ return function(a2) {
1571+ return function(a3) {
1572+ return["FShape", a1, a2, a3]
1573+ }
1574+ }
1575+ }
1576+ function FImage_87(a1) {
1577+ return function(a2) {
1578+ return function(a3) {
1579+ return["FImage", a1, a2, JS.castStringToJSString(a3)]
1580+ }
1581+ }
1582+ }
1583+ function FElement_88(a1) {
1584+ return["FElement", a1]
1585+ }
1586+ var left_6 = DLeft_0;
1587+ var right_7 = DRight_1;
1588+ var down_8 = DDown_3;
1589+ var up_9 = DUp_2;
1590+ var inward_10 = DIn_4;
1591+ var outward_11 = DOut_5;
1592+ var topLeft_22 = Position_17(Near_14)(Near_14);
1593+ var topRight_23 = Position_17(Far_16)(Near_14);
1594+ var bottomLeft_24 = Position_17(Near_14)(Far_16);
1595+ var bottomRight_25 = Position_17(Far_16)(Far_16);
1596+ var midLeft_26 = Position_17(Near_14)(Mid_15);
1597+ var midRight_27 = Position_17(Far_16)(Mid_15);
1598+ var midTop_28 = Position_17(Mid_15)(Near_14);
1599+ var midBottom_29 = Position_17(Mid_15)(Far_16);
1600+ var middle_30 = Position_17(Mid_15)(Mid_15);
1601+ function middleAt(a1) {
1602+ return function(a2) {
1603+ return["PositionAt", a1, a2]
1604+ }
1605+ }
1606+ var topLeftAt_31 = PositionTL_18;
1607+ var topRightAt_32 = PositionTR_19;
1608+ var bottomLeftAt_33 = PositionBL_20;
1609+ var bottomRightAt_34 = PositionBR_21;
1610+ var absolute_35 = Absolute_12;
1611+ var relative_36 = Relative_13;
1612+ function newElement_38(e,w,h,o,c,l) { return Element_37(Guid.guid(),e,w,h,o,c,l); }
1613+ function basicNewElement(e,w,h) { return Element_37(Guid.guid(),e,w,h,1,["Nothing"],["Nothing"]); }
1614+ var line_76 = Line_75;
1615+ var polygon_79 = Shape_78;
1616+ function sprite_96(src) {
1617+ return function(w) {
1618+ return function(h) {
1619+ return function(pos) {
1620+ return Form_84(0)(1)(pos)(FImage_87(w)(h)(src))
1621+ }
1622+ }
1623+ }
1624+ }
1625+ function toForm_97(pos) {
1626+ return function(e) {
1627+ return Form_84(0)(1)(pos)(FElement_88(e))
1628+ }
1629+ }
1630+ function width_47(w__101) {
1631+ return function(e) {
1632+ var be = e[2];
1633+ switch(be[0]) {
1634+ case "EImage":
1635+ case "EVideo":
1636+ return newElement_38(e[2],w__101,e[4] * w__101 / e[3], e[5], e[6], e[7]);
1637+ case "EText":
1638+ var p = Value.getTextSize(w__101,e[4],be[2]);
1639+ return newElement_38(e[2], w__101, p[1], e[5], e[6], e[7]);
1640+ }
1641+ return newElement_38(e[2], w__101, e[4], e[5], e[6], e[7]);
1642+ }
1643+ }
1644+ function height_48(h__108) {
1645+ return function(e) {
1646+ var be = e[2];
1647+ switch(be[0]) {
1648+ case "EImage":
1649+ case "EVideo":
1650+ return newElement_38(e[2], e[3] * h__108 / e[4], h__108, e[5], e[6], e[7]);
1651+ }
1652+ return newElement_38(e[2], e[3], h__108, e[5], e[6], e[7]);
1653+ }
1654+ }
1655+ function size_49(w) {
1656+ return function(h) {
1657+ return function(e) {
1658+ return newElement_38(e[2], w, h, e[5], e[6], e[7]);
1659+ }
1660+ }
1661+ }
1662+ function opacity_50(o) {
1663+ return function(e) {
1664+ return newElement_38(e[2], e[3], e[4], o, e[6], e[7]);
1665+ }
1666+ }
1667+ function color_51(c) {
1668+ return function(e) {
1669+ return newElement_38(e[2], e[3], e[4], e[5], ["Just",c], e[7]);
1670+ }
1671+ }
1672+ function link(lnk) {
1673+ return function(e) {
1674+ return newElement_38(e[2], e[3], e[4], e[5], e[6], ["Just", JS.castStringToJSString(lnk)]);
1675+ }
1676+ }
1677+ function widthOf_52(e) { return ~~e[3]; }
1678+ function heightOf_53(e) { return ~~e[4]; }
1679+ function sizeOf_54(e) { return["Tuple2", ~~e[3], ~~e[4]] }
1680+ function text_56(txt) {
1681+ var p = Value.getTextSize(0,0,txt);
1682+ return basicNewElement(EText_39("left")(txt), p[0], p[1])
1683+ }
1684+ function plainText(str) {
1685+ var txt = Value.toText(str);
1686+ var p = Value.getTextSize(0,0,txt);
1687+ return basicNewElement(EText_39("left")(txt),p[0],p[1])
1688+ }
1689+ function asText(v) {
1690+ var txt = Elm.Text.monospace(Value.toText(Value.show(v)));
1691+ var p = Value.getTextSize(0,0,txt);
1692+ return basicNewElement(EText_39("left")(txt),p[0],p[1])
1693+ }
1694+ function centeredText(txt) {
1695+ var p = Value.getTextSize(0,0,txt);
1696+ return basicNewElement(EText_39("center")(txt),p[0],p[1])
1697+ }
1698+ function justifiedText(txt) {
1699+ var p = Value.getTextSize(0,0,txt);
1700+ return basicNewElement(EText_39("justify")(txt),p[0],p[1])
1701+ }
1702+ function rightedText(txt) {
1703+ var p = Value.getTextSize(0,0,txt);
1704+ return basicNewElement(EText_39("right")(txt),p[0],p[1])
1705+ }
1706+ function image_57(w) {
1707+ return function(h) {
1708+ return function(src) {
1709+ return basicNewElement(EImage_40(src),w,h)
1710+ }
1711+ }
1712+ }
1713+ function images(srcs) {
1714+ var pics = Elm.Signal.constant(spacer_66(0)(0));
1715+ var update = Elm.Signal.lift(function(src) {
1716+ src = JS.castStringToJSString(src);
1717+ var img = new Image();
1718+ img.onload = function() {
1719+ Dispatcher.notify(pics.id,
1720+ image_57(this.width)(this.height)(src));
1721+ };
1722+ img.src = src;
1723+ })(srcs);
1724+ function f(x) { return function(y) { return x; } }
1725+ var combine = Elm.Signal.lift2(f)(pics)(update);
1726+ return combine;
1727+ }
1728+ function video_58(w) {
1729+ return function(h) {
1730+ return function(src) {
1731+ return basicNewElement(EVideo_41(src),w,h)
1732+ }
1733+ }
1734+ }
1735+ function fittedImage_59(w_147) {
1736+ return function(h_148) {
1737+ return function(s_149) {
1738+ return basicNewElement(EFittedImage_42(s_149),w_147,h_148)
1739+ }
1740+ }
1741+ }
1742+ function flow_60(dir_150) {
1743+ return function(es_151) {
1744+ return function() {
1745+ var w_152 = function() {
1746+ var ws_154 = map(widthOf_52)(es_151);
1747+ return function(case1) {
1748+ var case0 = case1;
1749+ switch(case0[0]) {
1750+ case "DLeft":
1751+ return sum(ws_154);
1752+ case "DRight":
1753+ return sum(ws_154)
1754+ }
1755+ return maximum(ws_154)
1756+ }(dir_150)
1757+ }();
1758+ var h_153 = function() {
1759+ var hs_155 = map(heightOf_53)(es_151);
1760+ return function(case3) {
1761+ var case2 = case3;
1762+ switch(case2[0]) {
1763+ case "DDown":
1764+ return sum(hs_155);
1765+ case "DUp":
1766+ return sum(hs_155)
1767+ }
1768+ return maximum(hs_155)
1769+ }(dir_150)
1770+ }();
1771+ return basicNewElement(EFlow_43(dir_150)(es_151), w_152, h_153)
1772+ }()
1773+ }
1774+ }
1775+ function above_61(e1_156) {
1776+ return function(e2_157) {
1777+ return basicNewElement(EFlow_43(DDown_3)(["Cons", e1_156, ["Cons", e2_157, ["Nil"]]]), Math.max(widthOf_52(e1_156),widthOf_52(e2_157)), heightOf_53(e1_156) + heightOf_53(e2_157));
1778+ }
1779+ }
1780+ function below_62(e1_158) {
1781+ return function(e2_159) {
1782+ return basicNewElement(EFlow_43(DDown_3)(["Cons", e2_159, ["Cons", e1_158, ["Nil"]]]), Math.max(widthOf_52(e1_158),widthOf_52(e2_159)), heightOf_53(e1_158) + heightOf_53(e2_159));
1783+ }
1784+ }
1785+ function beside_63(e1_160) {
1786+ return function(e2_161) {
1787+ return basicNewElement(EFlow_43(DRight_1)(["Cons", e1_160, ["Cons", e2_161, ["Nil"]]]), widthOf_52(e1_160) + widthOf_52(e2_161), Math.max(heightOf_53(e1_160),heightOf_53(e2_161)));
1788+ }
1789+ }
1790+ function layers_64(es_162) {
1791+ return basicNewElement(EFlow_43(DOut_5)(es_162), maximum(map(widthOf_52)(es_162)), maximum(map(heightOf_53)(es_162)))
1792+ }
1793+ function collage_65(w_163) {
1794+ return function(h_164) {
1795+ return function(forms_165) {
1796+ return basicNewElement(ECollage_44(w_163)(h_164)(forms_165),w_163,h_164)
1797+ }
1798+ }
1799+ }
1800+ function spacer_66(w_166) {
1801+ return function(h_167) {
1802+ return basicNewElement(EEmpty_45,w_166,h_167)
1803+ }
1804+ }
1805+ function container_67(w_169) {
1806+ return function(h_170) {
1807+ return function(pos_168) {
1808+ return function(e_171) {
1809+ return basicNewElement(EContainer_46(pos_168)(e_171),w_169,h_170)
1810+ }
1811+ }
1812+ }
1813+ }
1814+ function segment_77(p1_172) {
1815+ return function(p2_173) {
1816+ return Line_75(["Cons", p1_172, ["Cons", p2_173, ["Nil"]]])
1817+ }
1818+ }
1819+ function rect_80(w_174) {
1820+ return function(h_175) {
1821+ return function(pos_176) {
1822+ return Shape_78(["Cons", ["Tuple2", 0 - w_174 / 2, 0 - h_175 / 2],
1823+ ["Cons", ["Tuple2", 0 - w_174 / 2, h_175 / 2],
1824+ ["Cons", ["Tuple2", w_174 / 2, h_175 / 2],
1825+ ["Cons", ["Tuple2", w_174 / 2, 0 - h_175 / 2], ["Nil"]]]]])(pos_176)
1826+ }
1827+ }
1828+ }
1829+ function oval_81(w_177) {
1830+ return function(h_178) {
1831+ return function(pos_179) {
1832+ return function() {
1833+ var n_180 = 50;
1834+ return function() {
1835+ function f_181(i_182) {
1836+ return["Tuple2", w_177 / 2 * Math.cos(2 * (Math.PI / n_180) * i_182), h_178 / 2 * Math.sin(2 * (Math.PI / n_180) * i_182)];
1837+ }
1838+ return Shape_78(map(f_181)(function() {
1839+ var lo = 0;
1840+ var hi = n_180 - 1;
1841+ var lst = ["Nil"];
1842+ if(lo <= hi) {
1843+ do {
1844+ lst = ["Cons", hi, lst]
1845+ }while(hi-- > lo)
1846+ }
1847+ return lst
1848+ }()))(pos_179)
1849+ }()
1850+ }()
1851+ }
1852+ }
1853+ }
1854+ function circle_82(r_183) {
1855+ return oval_81(2 * r_183)(2 * r_183)
1856+ }
1857+ function ngon_83(n_184) {
1858+ return function(r_185) {
1859+ return function(pos_186) {
1860+ return function() {
1861+ var m_187 = n_184;
1862+ return function() {
1863+ function f_188(i_189) {
1864+ return["Tuple2", r_185 * Math.cos(2 * (Math.PI / m_187) * i_189), r_185 * Math.sin(2 * (Math.PI / m_187) * i_189)];
1865+ }
1866+ return Shape_78(map(f_188)(function() {
1867+ var lo = 0;
1868+ var hi = n_184 - 1;
1869+ var lst = ["Nil"];
1870+ if(lo <= hi) {
1871+ do {
1872+ lst = ["Cons", hi, lst]
1873+ }while(hi-- > lo)
1874+ }
1875+ return lst
1876+ }()))(pos_186)
1877+ }()
1878+ }()
1879+ }
1880+ }
1881+ }
1882+ function solid_89(clr_190) {
1883+ return function(ln_191) {
1884+ return Form_84(0)(1)(["Tuple2", 0, 0])(FLine_85(Solid_68)(clr_190)(ln_191))
1885+ }
1886+ }
1887+ function dotted_90(clr_192) {
1888+ return function(ln_193) {
1889+ return Form_84(0)(1)(["Tuple2", 0, 0])(FLine_85(Dotted_69)(clr_192)(ln_193))
1890+ }
1891+ }
1892+ function dashed_91(clr_194) {
1893+ return function(ln_195) {
1894+ return Form_84(0)(1)(["Tuple2", 0, 0])(FLine_85(Dashed_70)(clr_194)(ln_195))
1895+ }
1896+ }
1897+ function customLine_92(pattern_196) {
1898+ return function(clr_197) {
1899+ return function(ln_198) {
1900+ return Form_84(0)(1)(["Tuple2", 0, 0])(FLine_85(Custom_71(pattern_196))(clr_197)(ln_198))
1901+ }
1902+ }
1903+ }
1904+ function filled_93(clr) {
1905+ return function(shape) {
1906+ return Form_84(0)(1)(shape[2])(FShape_86(Filled_72)(clr)(shape));
1907+ }
1908+ }
1909+ function outlined_94(clr) {
1910+ return function(shape) {
1911+ return Form_84(0)(1)(shape[2])(FShape_86(Outlined_73)(clr)(shape));
1912+ }
1913+ }
1914+ function customOutline_95(pattern) {
1915+ return function(clr) {
1916+ return function(shape) {
1917+ return Form_84(0)(1)(shape[2])(FShape_86(CustomOutline_74(pattern))(clr)(shape));
1918+ }
1919+ }
1920+ }
1921+ function textured(src) {
1922+ return function(shape) {
1923+ return Form_84(0)(1)(shape[2])(FShape_86(["Textured",src])(null)(shape));
1924+ }
1925+ }
1926+ function rotate_98(t_212) {
1927+ return function(Form$thetascaleposform_213) {
1928+ return function(case5) {
1929+ var case0 = case5;
1930+ switch(case0[0]) {
1931+ case "Form":
1932+ var case1 = case0[1], case2 = case0[2], case3 = case0[3], case4 = case0[4];
1933+ return Form_84(t_212 + case1)(case2)(case3)(case4)
1934+ }
1935+ throw"Non-exhaustive pattern match in case";
1936+ }(Form$thetascaleposform_213)
1937+ }
1938+ }
1939+ function scale_99(s) {
1940+ return function(form) {
1941+ return Form_84(form[1])(s * form[2])(form[3])(form[4])
1942+ }
1943+ }
1944+ function move_100(x_224) {
1945+ return function(y_225) {
1946+ return function(Form$thetascaleTuple2$pxpyform_226) {
1947+ return function(case7) {
1948+ var case0 = case7;
1949+ switch(case0[0]) {
1950+ case "Form":
1951+ var case1 = case0[1], case2 = case0[2], case3 = case0[3], case4 = case0[4];
1952+ switch(case3[0]) {
1953+ case "Tuple2":
1954+ var case5 = case3[1], case6 = case3[2];
1955+ return Form_84(case1)(case2)(["Tuple2", x_224 + case5, y_225 + case6])(case4)
1956+ }
1957+ break
1958+ }
1959+ throw"Non-exhaustive pattern match in case";
1960+ }(Form$thetascaleTuple2$pxpyform_226)
1961+ }
1962+ }
1963+ }
1964+ return{left:left_6, right:right_7, down:down_8, up:up_9, inward:inward_10, outward:outward_11, topLeft:topLeft_22, topRight:topRight_23, bottomLeft:bottomLeft_24, bottomRight:bottomRight_25, midLeft:midLeft_26, midRight:midRight_27, midTop:midTop_28, midBottom:midBottom_29, middle:middle_30, middleAt:middleAt, topLeftAt:topLeftAt_31, topRightAt:topRightAt_32, bottomLeftAt:bottomLeftAt_33, bottomRightAt:bottomRightAt_34, absolute:absolute_35, relative:relative_36, width:width_47, height:height_48, size:size_49, opacity:opacity_50,
1965+ color:color_51, link:link, widthOf:widthOf_52, heightOf:heightOf_53, sizeOf:sizeOf_54, text:text_56, asText:asText, plainText:plainText, centeredText:centeredText, justifiedText:justifiedText, rightedText:rightedText, image:image_57, images:images, video:video_58, fittedImage:fittedImage_59, flow:flow_60, above:above_61, below:below_62, beside:beside_63, layers:layers_64, collage:collage_65, spacer:spacer_66, container:container_67, line:line_76, segment:segment_77, polygon:polygon_79, rect:rect_80, oval:oval_81, circle:circle_82, ngon:ngon_83, solid:solid_89, dotted:dotted_90, dashed:dashed_91, customLine:customLine_92, filled:filled_93,
1966+ outlined:outlined_94, customOutline:customOutline_95, textured:textured, sprite:sprite_96, toForm:toForm_97, rotate:rotate_98, scale:scale_99, move:move_100,
1967+ isWithin: Collage.insideForm}
1968+}();
1969+Elm.Text = function() {
1970+ function fromString(s) { return Value.toText(s); }
1971+
1972+ var addTag = function(tag) { return function(text) {
1973+ return '<' + tag + ' style="padding:0;margin:0">' + text + '</' + tag + '>';
1974+ };
1975+ };
1976+ var addStyle = function(style, value) { return function(text) {
1977+ return "<span style='" + style + ":" + value + "'>" + text + "</span>";
1978+ };
1979+ };
1980+
1981+ var typeface = function(name) {
1982+ name = Elm.JavaScript.castStringToJSString(name);
1983+ return addStyle('font-family', name);
1984+ };
1985+ var size = function(px) {
1986+ return addStyle('font-size', px + 'px');
1987+ };
1988+ var header = addTag('h1');
1989+ var height = function(h) { return addStyle('font-size', h+'em'); }
1990+ var italic = addStyle('font-style', 'italic');
1991+ var bold = addTag('b');
1992+ var color = function(c) {
1993+ return addStyle('color', Elm.Color.extract(c));
1994+ };
1995+ var underline = addStyle('text-decoration', 'underline');
1996+ var overline = addStyle('text-decoration', 'overline');
1997+ var strikeThrough = addStyle('text-decoration', 'line-through');
1998+ var link = function(href) { return function(text) {
1999+ return "<a href='" + fromString(href) + "'>" + text + "</a>";
2000+ };
2001+ };
2002+
2003+ return {fromString : fromString,
2004+ toText: fromString,
2005+ header : header,
2006+ height : height,
2007+ italic : italic,
2008+ bold : bold,
2009+ underline : underline,
2010+ overline : overline,
2011+ strikeThrough : strikeThrough,
2012+ monospace : typeface('monospace'),
2013+ typeface : typeface,
2014+ color : color,
2015+ link : link };
2016+}();
2017+
2018+var Render = function(){
2019+
2020+function newElement(elementType) {
2021+ var e = document.createElement(elementType);
2022+ e.style.padding = "0";
2023+ e.style.margin = "0";
2024+ return e;
2025+};
2026+
2027+function addTo(container, elem) {
2028+ container.appendChild(elem);
2029+};
2030+
2031+function makeText(pos,txt) {
2032+ var e = newElement('div');
2033+ e.innerHTML = txt;
2034+ e.style.textAlign = pos;
2035+ return e;
2036+};
2037+
2038+function image(src) {
2039+ var img = newElement('img');
2040+ img.src = src;
2041+ img.name = src;
2042+ img.style.display = "block";
2043+ return img;
2044+}
2045+
2046+function fittedImage(w,h,src) {
2047+ var e = newElement('div');
2048+ e.style.width = w + 'px';
2049+ e.style.height = h + 'px';
2050+ e.style.position = "relative";
2051+ e.style.overflow = "hidden";
2052+
2053+ var img = newElement('img');
2054+ img.onload = function() {
2055+ img.style.position = 'absolute';
2056+ img.style.margin = 'auto';
2057+
2058+ var sw = w, sh = h;
2059+ if (w / h > this.width / this.height) {
2060+ sh = Math.round(this.height * w / this.width);
2061+ } else {
2062+ sw = Math.round(this.width * h / this.height);
2063+ }
2064+ img.style.width = sw + 'px';
2065+ img.style.height = sh + 'px';
2066+ img.style.left = ((w - sw) / 2) + 'px';
2067+ img.style.top = ((h - sh) / 2) + 'px';
2068+ };
2069+ img.src = src;
2070+ img.name = src;
2071+ addTo(e,img);
2072+ return e;
2073+};
2074+
2075+var video = function(src) {
2076+ var e = newElement('video');
2077+ e.controls = "controls";
2078+ var source = newElement('source');
2079+ source.src = src;
2080+ var segs = src.split('.');
2081+ source.type = "video/" + segs[segs.length-1];
2082+ addTo(e, source);
2083+ e.style.display = "block";
2084+ return e;
2085+};
2086+
2087+function divify(e) {
2088+ var div = newElement('div');
2089+ addTo(div, e);
2090+ return div;
2091+};
2092+function goDown(e) {
2093+ return e //.tagName === "DIV" ? e : divify(e);
2094+};
2095+function goRight(e) {
2096+ e.style.styleFloat = "left";
2097+ e.style.cssFloat = "left";
2098+ return e;
2099+};
2100+function goIn(e) {
2101+ e.style.position = 'absolute';
2102+ return e;
2103+};
2104+function flowWith(f, prep, elist) {
2105+ var container = newElement('div');
2106+ for (var i = elist.length; i--; ) {
2107+ addTo(container, f(prep(elist[i])));
2108+ }
2109+ return container;
2110+};
2111+
2112+function flow(dir,elist) {
2113+ switch(dir) {
2114+ case "DDown": elist = elist.slice(0).reverse();
2115+ case "DUp": return flowWith(goDown,render,elist);
2116+ case "DRight": elist = elist.slice(0).reverse();
2117+ case "DLeft": return flowWith(goRight,render,elist);
2118+ case "DOut": elist = elist.slice(0).reverse();
2119+ case "DIn": return flowWith(goIn,render,elist);
2120+ };
2121+};
2122+
2123+function toPos(pos) {
2124+ switch(pos[0]) {
2125+ case "Absolute": return pos[1] + "px";
2126+ case "Relative": return (pos[1] * 100) + "%";
2127+ }
2128+}
2129+
2130+function setPos(pos,e) {
2131+ e.style.position = 'absolute';
2132+ e.style.margin = 'auto';
2133+ switch(pos[0]) {
2134+ case "Position":
2135+ if (pos[1][0] !== "Far") e.style.left = 0;
2136+ if (pos[1][0] !== "Near") e.style.right = 0;
2137+ if (pos[2][0] !== "Far") e.style.top = 0;
2138+ if (pos[2][0] !== "Near") e.style.bottom = 0;
2139+ break;
2140+ case "PositionAt":
2141+ e.style.top = toPos(pos[2]);
2142+ e.style.left = toPos(pos[1]);
2143+ var shift = "translate(" + ~~(-e.style.width.slice(0,-2) / 2) + "px," + ~~(-e.style.height.slice(0,-2) / 2) + "px)";
2144+ e.style.transform = shift;
2145+ e.style.msTransform = shift;
2146+ e.style.MozTransform = shift;
2147+ e.style.webkitTransform = shift;
2148+ e.style.OTransform = shift;
2149+ break;
2150+ default:
2151+ var p = pos[0].slice(-2);
2152+ e.style[p[0] === "T" ? 'top' : 'bottom'] = toPos(pos[2]);
2153+ e.style[p[1] === "L" ? 'left' : 'right'] = toPos(pos[1]);
2154+ }
2155+}
2156+
2157+function container(pos,elem) {
2158+ var e = render(elem);
2159+ setPos(pos,e);
2160+ var div = newElement('div');
2161+ div.style.position = "relative";
2162+ div.style.overflow = "hidden";
2163+ addTo(div,e);
2164+ return div;
2165+};
2166+
2167+function render(elem) {
2168+ var e = {};
2169+ switch(elem[2][0]) {
2170+ case "EText": e = makeText(elem[2][1],elem[2][2]); break;
2171+ case "EImage": e = image(elem[2][1]); break;
2172+ case "EVideo": e = video(elem[2][1]); break;
2173+ case "EFittedImage": e = fittedImage(elem[3],elem[4],elem[2][1]); break;
2174+ case "EFlow": e = flow(elem[2][1][0],elem[2][2]); break;
2175+ case "ECollage": e = Collage.collage(elem[2][1],elem[2][2],elem[2][3]); break;
2176+ case "EEmpty": e = newElement('div'); break;
2177+ case "EContainer": e = container(elem[2][1],elem[2][2]); break;
2178+ case "EHtml":
2179+ e = elem[2][1];
2180+ if (e.type !== 'button') {
2181+ var p = Value.getExcess(e);
2182+ elem[3] -= p[0];
2183+ elem[4] -= p[1];
2184+ }
2185+ break;
2186+ case "EExternalHtml":
2187+ e = newElement('div');
2188+ addTo(e, elem[2][1]);
2189+ break;
2190+ }
2191+ e.id = elem[1];
2192+ e.style.width = (~~elem[3]) + 'px';
2193+ e.style.height = (~~elem[4]) + 'px';
2194+ if (elem[5] !== 1) { e.style.opacity = elem[5]; }
2195+ if (elem[6][0] === "Just") {
2196+ e.style.backgroundColor = Elm.Color.extract(elem[6][1]);
2197+ }
2198+ if (elem[7][0] === "Just") {
2199+ var a = newElement('a');
2200+ a.href = elem[7][1];
2201+ addTo(a,e);
2202+ return a;
2203+ }
2204+ return e;
2205+};
2206+
2207+function update(node,curr,next) {
2208+ if (node.tagName === 'A') { node = node.firstChild; }
2209+ if (curr[1] === next[1]) return;
2210+ if (curr[2][0] !== next[2][0]) {
2211+ return node.parentNode.replaceChild(render(next),node);
2212+ }
2213+ var nextE = next[2], currE = curr[2];
2214+ switch(nextE[0]) {
2215+ case "EText":
2216+ if (nextE[1] !== currE[1]) node.style.textAlign = nextE[1];
2217+ if (nextE[2] !== currE[2]) node.innerHTML = nextE[2];
2218+ break;
2219+ case "EImage":
2220+ if (nextE[1] !== currE[1]) node.src = nextE[1];
2221+ break;
2222+ case "EVideo":
2223+ case "EFittedImage":
2224+ if (!Value.eq(nextE,currE) || next[3]!==curr[3] || next[4]!==curr[4]) {
2225+ return node.parentNode.replaceChild(render(next),node);
2226+ }
2227+ break;
2228+ case "ECollage":
2229+ if (nextE[1] !== currE[1] || nextE[2] !== currE[2] || nextE[3].length !== currE[3].length) {
2230+ return node.parentNode.replaceChild(render(next),node);
2231+ }
2232+ Collage.updateCollage(node,currE[3],nextE[3]);
2233+ break;
2234+ case "EFlow":
2235+ if (nextE[1] !== currE[1]) {
2236+ return node.parentNode.replaceChild(render(next),node);
2237+ }
2238+ var nexts = nextE[2];
2239+ var kids = node.childNodes;
2240+ if (nexts.length !== kids.length) {
2241+ return node.parentNode.replaceChild(render(next),node);
2242+ }
2243+ var currs = currE[2];
2244+ var goDir = function(x) { return x; };
2245+ switch(nextE[1][0]) {
2246+ case "DDown": case "DUp": goDir = goDown; break;
2247+ case "DRight": case "DLeft": goDir = goRight; break;
2248+ case "DOut": case "DIn": goDir = goIn; break;
2249+ }
2250+ for (var i = kids.length; i-- ;) {
2251+ update(kids[i],currs[i],nexts[i]);
2252+ goDir(kids[i]);
2253+ }
2254+ break;
2255+ case "EContainer":
2256+ update(node.childNodes[0],currE[2],nextE[2]);
2257+ setPos(nextE[1],node.childNodes[0]);
2258+ break;
2259+ case "EEmpty":
2260+ break;
2261+ case "EHtml":
2262+ if (next[1] !== curr[1]) {
2263+ var e = render(next);
2264+ node.parentNode.replaceChild(e,node);
2265+ node = e;
2266+ }
2267+ if (e.type !== 'button') {
2268+ var p = Value.getExcess(node);
2269+ next[3] -= p[0];
2270+ next[4] -= p[1];
2271+ }
2272+ break;
2273+ case "EExternalHtml":
2274+ if (next[1] !== curr[1])
2275+ node.parentNode.replaceChild(render(next),node);
2276+ break;
2277+ }
2278+ if (next[3] !== curr[3]) node.style.width = (~~next[3]) + 'px';
2279+ if (next[4] !== curr[4]) node.style.height = (~~next[4]) + 'px';
2280+ if (next[5] !== curr[5]) node.style.opacity = next[5];
2281+ if (next[6].length === 2) {
2282+ var clr = Elm.Color.extract(next[6][1]);
2283+ if (clr !== node.style.backgroundColor) node.style.backgroundColor = clr;
2284+ }
2285+ if (next[7].length === 2) {
2286+ if (curr[7].length === 1 || next[7][1] !== curr[7][1]) node.parentNode.href = next[7][1];
2287+ }
2288+ next[1] = curr[1];
2289+}
2290+
2291+return {render:render,update:update,addTo:addTo,newElement:newElement,flowWith:flowWith,goIn:goIn};
2292+
2293+}();
2294+Elm.Signal = function() {
2295+ var send = function(node, timestep, changed) {
2296+ var kids = node.kids;
2297+ for (var i = kids.length; i--; ) {
2298+ kids[i].recv(timestep, changed, node.id);
2299+ }
2300+ };
2301+ /**
2302+ * @constructor
2303+ */
2304+ function input(base) {
2305+ this.id = Guid.guid();
2306+ this.value = base;
2307+ this.kids = [];
2308+ this.defaultNumberOfKids = 0;
2309+ this.recv = function(timestep, eid, v) {
2310+ var changed = eid === this.id;
2311+ if (changed) { this.value = v; }
2312+ send(this, timestep, changed);
2313+ return changed;
2314+ };
2315+ Dispatcher.inputs.push(this);
2316+ };
2317+ /**
2318+ * @constructor
2319+ */
2320+ function lift(func,args) {
2321+ this.id = Guid.guid();
2322+ this.value = null;
2323+ this.kids = [];
2324+ this.count = 0;
2325+ this.changed = false;
2326+
2327+ args.reverse();
2328+ this.recalc = function() {
2329+ var f = func;
2330+ for (var i = args.length; i--; ) {
2331+ f = f(args[i].value);
2332+ }
2333+ this.value = f;
2334+ };
2335+ this.recalc();
2336+
2337+ this.recv = function(timestep, changed, parentID) {
2338+ this.count += 1;
2339+ if (changed) { this.changed = true; }
2340+ if (this.count == args.length) {
2341+ if (this.changed) { this.recalc() }
2342+ send(this, timestep, this.changed);
2343+ this.changed = false;
2344+ this.count = 0;
2345+ }
2346+ };
2347+ for (var i = args.length; i--; ) {
2348+ args[i].kids.push(this);
2349+ }
2350+ };
2351+ /**
2352+ * @constructor
2353+ */
2354+ function fold(func,base,baseIsFunc,input) {
2355+ this.id = Guid.guid();
2356+ this.value = baseIsFunc ? base(input.value) : base;
2357+ this.kids = [];
2358+ this.recv = function(timestep, changed, parentID) {
2359+ if (changed) { this.value = func(input.value)(this.value); }
2360+ send(this, timestep, changed);
2361+ };
2362+ input.kids.push(this);
2363+ };
2364+
2365+ /**
2366+ * @constructor
2367+ */
2368+ function dropIf(pred,base,input) {
2369+ this.id = Guid.guid();
2370+ this.value = pred(input.value) ? base : input.value;
2371+ this.kids = [];
2372+ this.recv = function(timestep, changed, parentID) {
2373+ var chng = changed && !pred(input.value);
2374+ if (chng) { this.value = input.value; }
2375+ send(this, timestep, chng);
2376+ };
2377+ input.kids.push(this);
2378+ };
2379+
2380+ /**
2381+ * @constructor
2382+ */
2383+ function dropRepeats(input) {
2384+ this.id = Guid.guid();
2385+ this.value = input.value;
2386+ this.kids = [];
2387+ this.recv = function(timestep, changed, parentID) {
2388+ var chng = changed && !Value.eq(this.value,input.value);
2389+ if (chng) { this.value = input.value; }
2390+ send(this, timestep, chng);
2391+ };
2392+ input.kids.push(this);
2393+ };
2394+
2395+ var dropWhen = function(s1) { return function(b) { return function(s2) {
2396+ var pairs = new lift(function(x){return function(y){return [x,y];};},[s1,s2]);
2397+ var dropped = new dropIf(function(p){return p[0];},[true,b],pairs);
2398+ return new lift(function(p){return p[1];},[dropped]); }; };
2399+ };
2400+
2401+ /**
2402+ * @constructor
2403+ */
2404+ function timeIndex(pair,s) {
2405+ this.id = Guid.guid();
2406+ var t = (new window.Date).getTime();
2407+ this.value = pair ? Value.Tuple(t,s.value) : t;
2408+ this.kids = [];
2409+ this.recv = function(timestep, changed, parentID) {
2410+ if (changed) this.value = pair ? Value.Tuple(timestep, s.value) : timestep;
2411+ send(this, timestep, changed);
2412+ };
2413+ s.kids.push(this);
2414+ }
2415+
2416+ /**
2417+ * @constructor
2418+ */
2419+ function sampleOn(s1,s2) {
2420+ this.id = Guid.guid();
2421+ this.value = s2.value;
2422+ this.kids = [];
2423+ this.count = 0;
2424+ this.changed = false;
2425+
2426+ this.recv = function(timestep, changed, parentID) {
2427+ if (parentID === s1.id) this.changed = changed;
2428+ this.count += 1;
2429+ if (this.count == 2) {
2430+ if (this.changed) { this.value = s2.value; }
2431+ send(this, timestep, this.changed);
2432+ this.count = 0;
2433+ this.changed = false;
2434+ }
2435+ };
2436+ s1.kids.push(this);
2437+ s2.kids.push(this);
2438+ };
2439+
2440+ function delay(t) { return function(s) {
2441+ var delayed = new input(s.value);
2442+ var firstEvent = true;
2443+ function update(v) {
2444+ if (firstEvent) return;
2445+ setTimeout(function() { Dispatcher.notify(delayed.id,v); },t);
2446+ }
2447+ function first(a) { return function(b) { return a; }; }
2448+ var out = new sampleOn(delayed,new lift(first, [delayed, new lift(update,[s])]));
2449+ firstEvent = false;
2450+ return out;
2451+ };
2452+ }
2453+
2454+ /**
2455+ * @constructor
2456+ */
2457+ function merge(s1,s2) {
2458+ this.id = Guid.guid();
2459+ this.value = s1.value;
2460+ this.kids = [];
2461+ this.next = null;
2462+ this.count = 0;
2463+ this.changed = false;
2464+
2465+ this.recv = function(timestep, changed, parentID) {
2466+ this.count += 1;
2467+ if (changed) {
2468+ this.changed = true;
2469+ if (parentID == s2.id && this.next === null) { this.next = s2.value; }
2470+ if (parentID == s1.id) { this.next = s1.value; }
2471+ }
2472+
2473+ if (this.count == 2) {
2474+ if (this.changed) {
2475+ this.value = this.next;
2476+ this.next = null;
2477+ }
2478+ send(this, timestep, this.changed);
2479+ this.changed = false;
2480+ this.count = 0;
2481+ }
2482+ };
2483+ s1.kids.push(this);
2484+ s2.kids.push(this);
2485+ };
2486+
2487+ function merges(ss) {
2488+ function mrg(x) { return function(y) { return new merge(x,y); }; }
2489+ return Elm.List.foldl1(mrg)(ss);
2490+ }
2491+
2492+ function average(sampleSize) { return function(s) {
2493+ var sample = new Array(sampleSize);
2494+ var i = sampleSize;
2495+ while (i--) sample[i] = 0;
2496+ i = 0;
2497+ var full = false;
2498+ var total = 0;
2499+ function f(n) {
2500+ total += n - sample[i];
2501+ sample[i] = n;
2502+ var avg = total / Math.max(1, full ? sampleSize : i);
2503+ if (++i == sampleSize) { full = true; i = 0; }
2504+ return avg;
2505+ }
2506+ return new lift(f, [s]);
2507+ };
2508+ }
2509+
2510+ return {
2511+ constant : function(v) { return new input(v); },
2512+ lift : function(f){return function(e){return new lift(f,[e]);};},
2513+ lift2 : function(f) {
2514+ return function(e1) { return function(e2) {
2515+ return new lift(f, [e1,e2]); };};},
2516+ lift3 : function(f) {
2517+ return function(e1) { return function(e2) {
2518+ return function(e3){return new lift(f,[e1,e2,e3]);};};};},
2519+ lift4 : function(f) {
2520+ return function(e1) { return function(e2) {
2521+ return function(e3) { return function(e4) {
2522+ return new lift(f, [e1,e2,e3,e4]);};};};};},
2523+ lift5 : function(f) {
2524+ return function(e1) { return function(e2) {
2525+ return function(e3) { return function(e4) {
2526+ return function(e5) {
2527+ return new lift(f, [e1,e2,e3,e4,e5]);};};};};};},
2528+ lift6 : function(f) { return function(e1) { return function(e2) {
2529+ return function(e3) { return function(e4) {
2530+ return function(e5) { return function(e6) {
2531+ return new lift(f, [e1,e2,e3,e4,e5,e6]); };};};};};};},
2532+ lift7 : function(f) { return function(e1) { return function(e2) {
2533+ return function(e3) { return function(e4) {
2534+ return function(e5) { return function(e6) {
2535+ return function(e7) {
2536+ return new lift(f, [e1,e2,e3,e4,e5,e6,e7]);};};};};};};};},
2537+ lift8 : function(f) { return function(e1) { return function(e2) {
2538+ return function(e3) { return function(e4) {
2539+ return function(e5) { return function(e6) {
2540+ return function(e7) { return function(e8) {
2541+ return new lift(f, [e1,e2,e3,e4,e5,e6,e7,e8]);};};};};};};};};},
2542+ foldp : function(f) { return function(b) { return function(e) {
2543+ return new fold(f,b,false,e); }; }; },
2544+ foldp_ : function(f) { return function(b) { return function(e) {
2545+ return new fold(f,b,true,e); }; }; },
2546+ foldp1 : function(f) { return function(e) {
2547+ return new fold(f,function(x){return x;},true,e); }; },
2548+ delay : delay,
2549+ merge : function(s1) { return function(s2) { return new merge(s1,s2)}; },
2550+ merges : merges,
2551+ average : average,
2552+ count : function(sig) {
2553+ var incr = function(_){return function(c){return c+1;};};
2554+ return new fold(incr,0,false,sig) },
2555+ countIf : function(pred) { return function(sig) {
2556+ var incr = function(x){return function(c){return pred(x) ? c+1 : c;};};
2557+ return new fold(incr,0,false,sig) }; },
2558+ keepIf : function(pred) { return function(base) { return function(sig) {
2559+ return new dropIf(function(x) { return !pred(x)},base,sig); }; }; },
2560+ dropIf : function(pred) { return function(base) { return function(sig) {
2561+ return new dropIf(pred,base,sig); }; }; },
2562+ keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
2563+ dropWhen : dropWhen,
2564+ dropRepeats : function(s) { return new dropRepeats(s);},
2565+ sampleOn : function(s1){return function(s2){return new sampleOn(s1,s2);};},
2566+ timestamp : function(s) { return new timeIndex(true, s); },
2567+ timeOf : function(s) { return new timeIndex(false, s); }
2568+ };
2569+}();
2570+var Dispatcher = function() {
2571+ var program = null;
2572+ var inputs = [];
2573+ var currentElement = null;
2574+
2575+ var initialize = function() {
2576+ program = Elm.main();
2577+ if (!program.hasOwnProperty('recv')) {
2578+ program = Elm.Signal.constant(program);
2579+ }
2580+
2581+ currentElement = program.value;
2582+ filterDeadInputs();
2583+
2584+ var content = document.getElementById('content');
2585+ content.appendChild(Render.render(currentElement));
2586+ var w = document.getElementById('widthChecker').offsetWidth;
2587+ if (w !== window.innerWidth) {
2588+ Dispatcher.notify(Elm.Window.dimensions.id, Value.Tuple(w, window.innerHeight));
2589+ }
2590+ program = Elm.Signal.lift(function(value) {
2591+ var content = document.getElementById('content');
2592+ Render.update(content.firstChild,currentElement,value);
2593+ currentElement = value;
2594+ return value;
2595+ })(program);
2596+ };
2597+ var notify = function(id, v) {
2598+ var timestep = (new window.Date).getTime();
2599+ var hasListener = false;
2600+ for (var i = inputs.length; i--; ) {
2601+ hasListener = inputs[i].recv(timestep, id, v) || hasListener;
2602+ }
2603+ return hasListener;
2604+ };
2605+
2606+ function isAlive(input) {
2607+ if (!input.hasOwnProperty('defaultNumberOfKids')) return true;
2608+ var len = input.kids.length;
2609+ if (len == 0) return false;
2610+ if (len > input.defaultNumberOfKids) return true;
2611+ var alive = false;
2612+ for (var i = len; i--; ) {
2613+ alive = alive || isAlive(input.kids[i]);
2614+ }
2615+ return alive;
2616+ }
2617+ function filterDeadInputs() {
2618+ var temp = [];
2619+ for (var i = inputs.length; i--; ) {
2620+ if (isAlive(inputs[i])) temp.push(inputs[i]);
2621+ }
2622+ inputs = temp;
2623+ }
2624+
2625+ return {initialize:initialize, notify:notify, inputs:inputs};
2626+}();Elm.HTTP = function() {
2627+ var JS = Elm.JavaScript;
2628+ var toElmString = Elm.JavaScript.castJSStringToString;
2629+ function request(verb) { return function(url) { return function(data) {
2630+ return function(headers) {
2631+ return {0 : "Request",
2632+ length : 1,
2633+ verb : JS.castStringToJSString(verb),
2634+ url : JS.castStringToJSString(url),
2635+ data : data === null ? null : JS.castStringToJSString(data),
2636+ headers : headers }; }; }; };
2637+ }
2638+ function get(url) { return request("GET")(url)(null)(["Nil"]); }
2639+ function post(url) { return function(data) {
2640+ return request("POST")(url)(data)(["Nil"]); }; }
2641+
2642+ function registerReq(queue,responses) { return function(req) {
2643+ if (req.url !== "") { sendReq(queue,responses,req); }
2644+ };
2645+ }
2646+
2647+ function updateQueue(queue,responses) {
2648+ if (queue.length > 0) {
2649+ Dispatcher.notify(responses.id, queue[0].value);
2650+ if (queue[0].value[0] !== "Waiting") {
2651+ queue.shift();
2652+ setTimeout(function() { updateQueue(queue,responses); }, 0);
2653+ }
2654+ }
2655+ }
2656+
2657+ function sendReq(queue,responses,req) {
2658+ var response = { value: ["Waiting"] };
2659+ queue.push(response);
2660+
2661+ var request = null;
2662+ if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); }
2663+ if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
2664+ request.onreadystatechange = function(e) {
2665+ if (request.readyState === 4) {
2666+ response.value = (request.status === 200
2667+ ? ["Success", toElmString(request.responseText)]
2668+ : ["Failure", request.status,
2669+ toElmString(request.statusText)]);
2670+ setTimeout(function() { updateQueue(queue,responses); }, 0);
2671+ }
2672+ };
2673+ request.open(req.verb, req.url, true);
2674+ Elm.List.map(function(pair) {
2675+ request.setRequestHeader(
2676+ JS.castStringToJSString(pair[1]),
2677+ JS.castStringToJSString(pair[2]));
2678+ })(req.headers);
2679+ request.send(req.data);
2680+ return null;
2681+ }
2682+
2683+ function send(requests) {
2684+ var responses = Elm.Signal.constant(["Waiting"]);
2685+ var sender = Elm.Signal.lift(registerReq([],responses))(requests);
2686+ function f(x) { return function(y) { return x; } }
2687+ var combine = Elm.Signal.lift2(f)(responses)(sender);
2688+ return combine;
2689+ }
2690+
2691+ return {get : get,
2692+ post : post,
2693+ request : request,
2694+ send : send,
2695+ sendGet : function(urls){return send(Elm.Signal.lift(get)(urls));}
2696+ };
2697+}();
2698+
2699+Elm.Input = function() {
2700+ var JS = Elm.JavaScript;
2701+ var toElmString = Elm.JavaScript.castJSStringToString;
2702+ var newTextInput = function(elem, ghostText) {
2703+ elem.placeholder = JS.castStringToJSString(ghostText);
2704+ var str = Elm.Signal.constant(["Nil"]);
2705+ Value.addListener(elem, 'keyup', function(e) {
2706+ Dispatcher.notify(str.id, toElmString(elem.value));
2707+ elem.focus();
2708+ });
2709+ elem.style.padding = "1px";
2710+ return Value.Tuple(Value.wrap(elem), str);
2711+ };
2712+ var newElement = function(name) {
2713+ var e = document.createElement(name);
2714+ e.style.padding = "0";
2715+ e.style.margin = "0";
2716+ return e;
2717+ };
2718+ var textArea = function(cols) { return function(rows) {
2719+ var textarea = newElement('textarea');
2720+ textarea.rows = rows;
2721+ textarea.cols = cols;
2722+ return newTextInput(textarea, "");
2723+ };
2724+ };
2725+ var textField = function(ghostText) {
2726+ var field = newElement('input');
2727+ field.type = 'text';
2728+ return newTextInput(field, ghostText);
2729+ };
2730+ var password = function(ghostText) {
2731+ var field = newElement('input');
2732+ field.type = 'password';
2733+ return newTextInput(field, ghostText);
2734+ };
2735+ var checkbox = function(checked) {
2736+ var box = newElement('input');
2737+ box.type = 'checkbox';
2738+ box.checked = checked;
2739+ var status = Elm.Signal.constant(checked);
2740+ Value.addListener(box, 'change', function(e) {
2741+ Dispatcher.notify(status.id, box.checked);
2742+ });
2743+ return Value.Tuple(Value.wrap(box), status);
2744+ };
2745+ var dropDown = function(options) {
2746+ var slct = newElement('select');
2747+ var opts = [];
2748+ while (options[0] === "Cons") {
2749+ var opt = newElement('option');
2750+ var str = Value.toText(options[1][1]);
2751+ opt.value = str;
2752+ opt.innerHTML = str;
2753+ slct.appendChild(opt);
2754+ opts.push(options[1][2]);
2755+ options = options[2];
2756+ }
2757+ var status = Elm.Signal.constant(opts[0]);
2758+ Value.addListener(slct, 'change', function(e) {
2759+ Dispatcher.notify(status.id, opts[slct.selectedIndex]);
2760+ });
2761+ return Value.Tuple(Value.wrap(slct), status);
2762+ };
2763+ var stringDropDown = function(opts) {
2764+ return dropDown(Elm.List.map (function(x) {return Value.Tuple(x,x);}) (opts));
2765+ };
2766+ var button = function(name) {
2767+ var b = newElement('input');
2768+ b.type = "button";
2769+ b.value = JS.castStringToJSString(name);
2770+ var press = Elm.Signal.constant(false);
2771+ Value.addListener(b, 'click', function(e) {
2772+ Dispatcher.notify(press.id, true);
2773+ Dispatcher.notify(press.id, false);
2774+ });
2775+ return Value.Tuple(Value.wrap(b),press);
2776+ };
2777+ return {textArea:textArea, textField:textField,
2778+ password:password, checkbox:checkbox,
2779+ dropDown:dropDown, stringDropDown:stringDropDown,
2780+ button:button};
2781+}();
2782+
2783+Elm.Keyboard = { Raw : function() {
2784+ var keysDown = Elm.Signal.constant(["Nil"]);
2785+ var charPressed = Elm.Signal.constant(["Nothing"]);
2786+ function remove(x,xs) {
2787+ if (xs[0] === "Nil") return xs;
2788+ if (xs[1] === x) return xs[2];
2789+ return ["Cons", xs[1], remove(x,xs[2])];
2790+ }
2791+ function has(x,xs) {
2792+ while (xs[0] !== "Nil") {
2793+ if (xs[1] === x) return true;
2794+ xs = xs[2];
2795+ }
2796+ return false;
2797+ }
2798+ Value.addListener(document, 'keydown', function(e) {
2799+ if (has(e.keyCode, keysDown.value)) return;
2800+ var hasListener = Dispatcher.notify(keysDown.id, ["Cons", e.keyCode, keysDown.value]);
2801+ if (!hasListener)
2802+ this.removeEventListener('keydown',arguments.callee,false);
2803+ });
2804+ Value.addListener(document, 'keyup', function(e) {
2805+ var codes = remove(e.keyCode, keysDown.value);
2806+ var hasListener = Dispatcher.notify(keysDown.id, codes);
2807+ if (!hasListener)
2808+ this.removeEventListener('keyup',arguments.callee,false);
2809+ });
2810+ Value.addListener(window, 'blur', function(e) {
2811+ var hasListener = Dispatcher.notify(keysDown.id, ["Nil"]);
2812+ if (!hasListener)
2813+ this.removeEventListener('blur',arguments.callee,false);
2814+ });
2815+ Value.addListener(document, 'keypress', function(e) {
2816+ var hasListener = Dispatcher.notify(charPressed.id, ["Just",e.charCode || e.keyCode]);
2817+ Dispatcher.notify(charPressed.id, ["Nothing"]);
2818+ if (!hasListener)
2819+ this.removeEventListener('keypress',arguments.callee,false);
2820+ });
2821+ return {keysDown:keysDown,
2822+ charPressed:charPressed};
2823+ }()
2824+};
2825+Elm.Mouse = function() {
2826+ var position = Elm.Signal.constant(Value.Tuple(0,0));
2827+ position.defaultNumberOfKids = 2;
2828+
2829+ var x = Elm.Signal.lift(function(p){return p[1];})(position);
2830+ x.defaultNumberOfKids = 0;
2831+ var y = Elm.Signal.lift(function(p){return p[2];})(position);
2832+ y.defaultNumberOfKids = 0;
2833+
2834+ var isDown = Elm.Signal.constant(false);
2835+ var isClicked = Elm.Signal.constant(false);
2836+ var clicks = Elm.Signal.constant(Value.Tuple());
2837+
2838+ function getXY(e) {
2839+ var posx = 0;
2840+ var posy = 0;
2841+ if (!e) e = window.event;
2842+ if (e.pageX || e.pageY) {
2843+ posx = e.pageX;
2844+ posy = e.pageY;
2845+ } else if (e.clientX || e.clientY) {
2846+ posx = e.clientX + document.body.scrollLeft +
2847+ document.documentElement.scrollLeft;
2848+ posy = e.clientY + document.body.scrollTop +
2849+ document.documentElement.scrollTop;
2850+ }
2851+ return Value.Tuple(posx, posy);
2852+ }
2853+
2854+ Value.addListener(document, 'click', function(e) {
2855+ var hasListener1 = Dispatcher.notify(isClicked.id, true);
2856+ var hasListener2 = Dispatcher.notify(clicks.id, Value.Tuple());
2857+ Dispatcher.notify(isClicked.id, false);
2858+ if (!hasListener1 && !hasListener2)
2859+ this.removeEventListener('click',arguments.callee,false);
2860+ });
2861+ Value.addListener(document, 'mousedown', function(e) {
2862+ var hasListener = Dispatcher.notify(isDown.id, true);
2863+ if (!hasListener)
2864+ this.removeEventListener('mousedown',arguments.callee,false);
2865+ });
2866+ Value.addListener(document, 'mouseup', function(e) {
2867+ var hasListener = Dispatcher.notify(isDown.id, false);
2868+ if (!hasListener)
2869+ this.removeEventListener('mouseup',arguments.callee,false);
2870+ });
2871+ Value.addListener(document, 'mousemove', function(e) {
2872+ var hasListener = Dispatcher.notify(position.id, getXY(e));
2873+ if (!hasListener)
2874+ this.removeEventListener('mousemove',arguments.callee,false);
2875+ });
2876+ var clickedOn = function(elem) {
2877+ var node = Render.render(elem);
2878+ var click = Elm.Signal.constant(false);
2879+ Value.addListener(node, 'click', function(e) {
2880+ Dispatcher.notify(click.id, true);
2881+ Dispatcher.notify(click.id, false);
2882+ });
2883+ return Value.Tuple(Value.wrap(node), click);
2884+ };
2885+ return {position: position,
2886+ x:x,
2887+ y:y,
2888+ isClicked: isClicked,
2889+ isDown: isDown,
2890+ clicks: clicks,
2891+ isClickedOn: clickedOn
2892+ };
2893+ }();
2894+Elm.Random = function() {
2895+ var inRange = function(min) { return function(max) {
2896+ return Elm.Signal.constant(Math.floor(Math.random() * (max-min+1)) + min);
2897+ };
2898+ };
2899+ var randomize = function(min) { return function(max) { return function(signal) {
2900+ function f(x) { return Math.floor(Math.random() * (max-min+1)) + min; }
2901+ return Elm.Signal.lift(f)(signal);
2902+ };
2903+ };
2904+ };
2905+ return { inRange:inRange, randomize:randomize };
2906+}();Elm.Time = function() {
2907+ function timeNow() { return (new window.Date).getTime(); }
2908+ function everyWhen(isOn) { return function(t) {
2909+ var clock = Elm.Signal.constant(timeNow());
2910+ function tellTime() { Dispatcher.notify(clock.id, timeNow()); }
2911+ setInterval(tellTime, t);
2912+ return clock;
2913+ };
2914+ }
2915+ function fpsWhen(desiredFPS) { return function (isOn) {
2916+ var msPerFrame = 1000 / desiredFPS;
2917+ var prev = timeNow(), curr = prev, diff = 0, wasOn = true;
2918+ var ticker = Elm.Signal.constant(diff);
2919+ function tick(zero) { return function() {
2920+ curr = timeNow();
2921+ diff = zero ? 0 : curr - prev;
2922+ prev = curr;
2923+ Dispatcher.notify(ticker.id, diff);
2924+ };
2925+ }
2926+ var timeoutID = 0;
2927+ function f(isOn) { return function(t) {
2928+ if (isOn) {
2929+ timeoutID = setTimeout(tick(!wasOn && isOn), msPerFrame);
2930+ } else if (wasOn) {
2931+ clearTimeout(timeoutID);
2932+ }
2933+ wasOn = isOn;
2934+ return t;
2935+ };
2936+ }
2937+ return Elm.Signal.lift2(f)(isOn)(ticker);
2938+ };
2939+ }
2940+ function since(t) { return function(s) {
2941+ function cmp(a) { return function(b) { return !Value.eq(a,b); }; }
2942+ var dcount = Elm.Signal.count(Elm.Signal.delay(t)(s));
2943+ return Elm.Signal.lift2(cmp)(Elm.Signal.count(s))(dcount);
2944+ };
2945+ }
2946+ function after(t) {
2947+ t *= 1000;
2948+ var thread = Elm.Signal.constant(false);
2949+ setTimeout(function() { Dispatcher.notify(thread.id, true); }, t);
2950+ return thread;
2951+ }
2952+ function before(t) {
2953+ t *= 1000;
2954+ var thread = Elm.Signal.constant(true);
2955+ setTimeout(function() { Dispatcher.notify(thread.id, false); }, t);
2956+ return thread;
2957+ }
2958+ function read(s) {
2959+ var t = window.Date.parse(s);
2960+ return isNaN(t) ? ["Nothing"] : ["Just",t];
2961+ }
2962+ return {fpsWhen : fpsWhen,
2963+ fps : function(t) { return fpsWhen(t)(Elm.Signal.constant(true)); },
2964+ every : everyWhen(Elm.Signal.constant(true)),
2965+ delay : Elm.Signal.delay,
2966+ since : since,
2967+ after : after,
2968+ before : before,
2969+ hour : 3600000,
2970+ minute : 60000,
2971+ second : 1000,
2972+ ms : 1,
2973+ inHours : function(t) { return t / 3600000; },
2974+ inMinutes : function(t) { return t / 60000; },
2975+ inSeconds : function(t) { return t / 1000; },
2976+ inMss : function(t) { return t; },
2977+ toDate : function(t) { return new window.Date(t); },
2978+ read : read
2979+ };
2980+
2981+}();Elm.Window = function() {
2982+ var dimensions = Elm.Signal.constant(Value.Tuple(window.innerWidth,
2983+ window.innerHeight));
2984+ dimensions.defaultNumberOfKids = 2;
2985+
2986+ var width = Elm.Signal.lift(function(p){return p[1];})(dimensions);
2987+ width.defaultNumberOfKids = 0;
2988+ var height = Elm.Signal.lift(function(p){return p[2];})(dimensions);
2989+ height.defaultNumberOfKids = 0;
2990+
2991+ Value.addListener(window, 'resize', function(e) {
2992+ var w = document.getElementById('widthChecker').offsetWidth;
2993+ var hasListener = Dispatcher.notify(dimensions.id,
2994+ Value.Tuple(w, window.innerHeight));
2995+ if (!hasListener)
2996+ this.removeEventListener('resize',arguments.callee,false);
2997+ });
2998+ return {dimensions:dimensions,width:width,height:height};
2999+}();
3000+
3001+Elm.Date = function() {
3002+
3003+ function dateNow() { return new window.Date; }
3004+ function readDate(str) {
3005+ var d = new window.Date(Elm.JavaScript.castStringToJSString(str));
3006+ if (isNaN(d.getTime())) return ["Nothing"];
3007+ return ["Just",d];
3008+ }
3009+
3010+ var dayTable = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
3011+ var monthTable = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
3012+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
3013+
3014+ return {
3015+ read : readDate,
3016+ year : function(d) { return d.getFullYear(); },
3017+ month : function(d) { return [monthTable[d.getMonth()]]; },
3018+ day : function(d) { return d.getDate(); },
3019+ hour : function(d) { return d.getHours(); },
3020+ minute : function(d) { return d.getMinutes(); },
3021+ second : function(d) { return d.getSeconds(); },
3022+ dayOfWeek : function(d) { return [dayTable[d.getDay()]]; },
3023+ toTime : function(d) { return d.getTime(); },
3024+ Mon : ["Mon"], Tue : ["Tue"], Wed : ["Wed"],
3025+ Thu : ["Thu"], Fri : ["Fri"], Sat : ["Sat"], Sun : ["Sun"],
3026+ Jan : ["Jan"], Feb : ["Feb"], Mar : ["Mar"], Apr : ["Apr"],
3027+ May : ["May"], Jun : ["Jun"], Jul : ["Jul"], Aug : ["Aug"],
3028+ Sep : ["Sep"], Oct : ["Oct"], Nov : ["Nov"], Dec : ["Dec"]
3029+ };
3030+
3031+}();
3032+
3033+Value.addListener(document, 'elm_log', function(e) { console.log(e.value); });
3034+Value.addListener(document, 'elm_title', function(e) {document.title = e.value;});
3035+Value.addListener(document, 'elm_redirect', function(e) {
3036+ if (e.value.length > 0) { window.location = e.value; }
3037+ });
3038+
3039+Elm.Prelude = function() {
3040+ var mod = function(x) { return function(y) {
3041+ var r = x % y;
3042+ var m = x==0 ? 0 : (y>0 ? (x>=0 ? r : r+y) : -mod(-x)(-y));
3043+ return m == y ? 0 : m;
3044+ }; };
3045+
3046+ var min = function(x) { return function(y) { return Math.min(x,y); }; };
3047+ var max = function(x) { return function(y) { return Math.max(x,y); }; };
3048+
3049+ var flip=function(f){return function(x){return function(y){return f(y)(x);};};};
3050+ var clamp = function(lo) { return function(hi) {
3051+ return function(x) { return Math.min(hi, Math.max(lo, x)); };
3052+ };
3053+ };
3054+ var curry = function(f) { return function(x) { return function(y) {
3055+ return f(["Tuple2",x,y]); }; };
3056+ };
3057+ var uncurry = function(f) { return function(p) {
3058+ if (p[0] !== "Tuple2") {
3059+ throw "Function was uncurry'd but was not given a pair.";
3060+ }
3061+ return f(p[1])(p[2]); };
3062+ };
3063+
3064+ var logBase=function(b){return function(x){return Math.log(x)/Math.log(b);};};
3065+
3066+ function readInt(str) {
3067+ var s = Elm.JavaScript.castStringToJSString(str);
3068+ var len = s.length;
3069+ if (len === 0) { return ["Nothing"]; }
3070+ var start = 0;
3071+ if (s[0] == '-') {
3072+ if (len === 1) { return ["Nothing"]; }
3073+ start = 1;
3074+ }
3075+ for (var i = start; i < len; ++i) {
3076+ if (!Elm.Char.isDigit(s[i])) { return ["Nothing"]; }
3077+ }
3078+ return ["Just", parseInt(s)];
3079+ }
3080+
3081+ function readFloat(str) {
3082+ var s = Elm.JavaScript.castStringToJSString(str);
3083+ var len = s.length;
3084+ if (len === 0) { return ["Nothing"]; }
3085+ var start = 0;
3086+ if (s[0] == '-') {
3087+ if (len === 1) { return ["Nothing"]; }
3088+ start = 1;
3089+ }
3090+ var dotCount = 0;
3091+ for (var i = start; i < len; ++i) {
3092+ if (Elm.Char.isDigit(s[i])) { continue; }
3093+ if (s[i] === '.') {
3094+ dotCount += 1;
3095+ if (dotCount <= 1) { continue; }
3096+ }
3097+ return ["Nothing"];
3098+ }
3099+ return ["Just", parseFloat(s)];
3100+ }
3101+
3102+ function compare(x) { return function (y) {
3103+ if (x instanceof Array && y instanceof Array) {
3104+ var len = x.length;
3105+ if (len == y.length) {
3106+ for (var i = 1; i < len; ++i) {
3107+ var cmp = compare(x[i])(y[i]);
3108+ if (cmp[0] === 'EQ') continue;
3109+ return cmp;
3110+ }
3111+ return ['EQ'];
3112+ }
3113+ return [ y.length == 1 ? 'GT' : 'LT' ];
3114+ }
3115+ return [ x === y ? 'EQ' : (x < y ? 'LT' : 'GT') ];
3116+ };
3117+ }
3118+ return {eq : Value.eq,
3119+ id : function(x) { return x; },
3120+ not : function(b) { return !b; },
3121+ fst : function(p) { return p[1]; },
3122+ snd : function(p) { return p[2]; },
3123+ rem : function(x) { return function(y) { return x % y; }; },
3124+ div : function(x) { return function(y) { return ~~(x / y); }; },
3125+ otherwise : true,
3126+ compare : compare,
3127+ toFloat : function(x) { return x; },
3128+ round : function(n) { return Math.round(n); },
3129+ floor : function(n) { return Math.floor(n); },
3130+ ceiling : function(n) { return Math.ceil(n); },
3131+ truncate : function(n) { return ~~n; },
3132+ readInt : readInt,
3133+ readFloat : readFloat,
3134+ sqrt : Math.sqrt,
3135+ abs : Math.abs,
3136+ pi : Math.PI,
3137+ e : Math.E,
3138+ sin : Math.sin,
3139+ cos : Math.cos,
3140+ tan : Math.tan,
3141+ asin : Math.asin,
3142+ acos : Math.acos,
3143+ atan : Math.atan,
3144+ atan2 : function(y) { return function(x) { return Math.atan2(y,x); }; },
3145+ mod : mod,
3146+ min : min,
3147+ max : max,
3148+ flip : flip,
3149+ clamp : clamp,
3150+ curry : curry,
3151+ uncurry : uncurry,
3152+ logBase : logBase,
3153+ Just : Elm.Maybe.Just,
3154+ Nothing : Elm.Maybe.Nothing,
3155+ maybe : Elm.Maybe.maybe,
3156+ map : Elm.List.map,
3157+ zip : Elm.List.zip,
3158+ zipWith : Elm.List.zipWith,
3159+ filter : Elm.List.filter,
3160+ head : Elm.List.head,
3161+ tail : Elm.List.tail,
3162+ last : Elm.List.last,
3163+ length : Elm.List.length,
3164+ reverse : Elm.List.reverse,
3165+ foldr : Elm.List.foldr,
3166+ foldr1 : Elm.List.foldr1,
3167+ foldl : Elm.List.foldl,
3168+ foldl1 : Elm.List.foldl1,
3169+ and : Elm.List.and,
3170+ or : Elm.List.or,
3171+ all : Elm.List.all,
3172+ any : Elm.List.any,
3173+ sum : Elm.List.sum,
3174+ product : Elm.List.product,
3175+ concat : Elm.List.concat,
3176+ concatMap : Elm.List.concatMap,
3177+ maximum : Elm.List.maximum,
3178+ minimum : Elm.List.minimum,
3179+ scanl : Elm.List.scanl,
3180+ scanl1 : Elm.List.scanl1,
3181+ take : Elm.List.take,
3182+ drop : Elm.List.drop,
3183+ zip : Elm.List.zip,
3184+ unzip : Elm.List.unzip,
3185+ lift : Elm.Signal.lift,
3186+ lift2 : Elm.Signal.lift2,
3187+ lift3 : Elm.Signal.lift3,
3188+ lift4 : Elm.Signal.lift4,
3189+ lift5 : Elm.Signal.lift5,
3190+ lift6 : Elm.Signal.lift6,
3191+ lift7 : Elm.Signal.lift7,
3192+ lift8 : Elm.Signal.lift8,
3193+ foldp : Elm.Signal.foldp,
3194+ foldp1 : Elm.Signal.foldp1,
3195+ foldp_ : Elm.Signal.foldp_,
3196+ constant : Elm.Signal.constant,
3197+ merge : Elm.Signal.merge,
3198+ count : Elm.Signal.count,
3199+ countIf : Elm.Signal.countIf,
3200+ average : Elm.Signal.average,
3201+ keepIf : Elm.Signal.keepIf,
3202+ dropIf : Elm.Signal.dropIf,
3203+ keepWhen : Elm.Signal.keepWhen,
3204+ dropWhen : Elm.Signal.dropWhen,
3205+ dropRepeats : Elm.Signal.dropRepeats,
3206+ sampleOn : Elm.Signal.sampleOn,
3207+ timestamp : Elm.Signal.timestamp,
3208+ timeOf : Elm.Signal.timeOf
3209+ };
3210+
3211+}();
3212+
3213+(function() {
3214+ var include = function(library) {
3215+ for (var i in library) {
3216+ Elm.Prelude[i] = library[i];
3217+ }
3218+ };
3219+ include (Elm.Color);
3220+ include (Elm.Text);
3221+ include (Elm.Graphics);
3222+ include (Elm.Time);
3223+
3224+ show = Value.show;
3225+
3226+}());
3227+
3228+Elm.Dict=function(){
3229+ var compare = Elm.Prelude.compare;
3230+ var uncurry = Elm.Prelude.uncurry;
3231+ var Nothing = Elm.Prelude.Nothing;
3232+ var Just = Elm.Prelude.Just;
3233+ var not = Elm.Prelude.not;
3234+ var eq = Elm.Prelude.eq;
3235+ var isJust=Elm.Maybe.isJust;
3236+ var Red_0=['Red'];
3237+ var Black_1=['Black'];
3238+ function RBNode_2(a1){
3239+ return function(a2){
3240+ return function(a3){
3241+ return function(a4){
3242+ return function(a5){
3243+ return ['RBNode',a1,a2,a3,a4,a5];};};};};}
3244+ var RBEmpty_3=['RBEmpty'];
3245+ function min_6(t_42){
3246+ return function(){
3247+ switch(t_42[0]){
3248+ case 'RBEmpty':
3249+ throw '(min RBEmpty) is not defined';
3250+ case 'RBNode':
3251+ switch(t_42[4][0]){
3252+ case 'RBEmpty':
3253+ return ['Tuple2',t_42[2],t_42[3]];
3254+ }
3255+ return min_6(t_42[4]);
3256+ }
3257+ throw "Non-exhaustive pattern match in case";}();}
3258+ function lookup_7(k_46){
3259+ return function(t_47){
3260+ return function(){
3261+ switch(t_47[0]){
3262+ case 'RBEmpty':
3263+ return Nothing;
3264+ case 'RBNode':
3265+ return function(){
3266+ var case12=compare(k_46)(t_47[2]);
3267+ switch(case12[0]){
3268+ case 'EQ':
3269+ return Just(t_47[3]);
3270+ case 'GT':
3271+ return lookup_7(k_46)(t_47[5]);
3272+ case 'LT':
3273+ return lookup_7(k_46)(t_47[4]);
3274+ }
3275+ throw "Non-exhaustive pattern match in case";}();
3276+ }
3277+ throw "Non-exhaustive pattern match in case";}();};}
3278+ function findWithDefault_8(base_52){
3279+ return function(k_53){
3280+ return function(t_54){
3281+ return function(){
3282+ switch(t_54[0]){
3283+ case 'RBEmpty':
3284+ return base_52;
3285+ case 'RBNode':
3286+ return function(){
3287+ var case19=compare(k_53)(t_54[2]);
3288+ switch(case19[0]){
3289+ case 'EQ':
3290+ return t_54[3];
3291+ case 'GT':
3292+ return findWithDefault_8(base_52)(k_53)(t_54[5]);
3293+ case 'LT':
3294+ return findWithDefault_8(base_52)(k_53)(t_54[4]);
3295+ }
3296+ throw "Non-exhaustive pattern match in case";}();
3297+ }
3298+ throw "Non-exhaustive pattern match in case";}();};};}
3299+ function member_9(k_59){
3300+ return function(t_60){
3301+ return isJust(lookup_7(k_59)(t_60));};}
3302+ function rotateLeft_10(t_61){
3303+ return function(){
3304+ switch(t_61[0]){
3305+ case 'RBNode':
3306+ switch(t_61[5][0]){
3307+ case 'RBNode':
3308+ return RBNode_2(t_61[1])(t_61[5][2])(t_61[5][3])(RBNode_2(Red_0)(t_61[2])(t_61[3])(t_61[4])(t_61[5][4]))(t_61[5][5]);
3309+ }break;
3310+ }
3311+ throw 'rotateLeft of a node without enough children';}();}
3312+ function rotateRight_11(t_71){
3313+ return function(){
3314+ switch(t_71[0]){
3315+ case 'RBNode':
3316+ switch(t_71[4][0]){
3317+ case 'RBNode':
3318+ return RBNode_2(t_71[1])(t_71[4][2])(t_71[4][3])(t_71[4][4])(RBNode_2(Red_0)(t_71[2])(t_71[3])(t_71[4][5])(t_71[5]));
3319+ }break;
3320+ }
3321+ throw 'rotateRight of a node without enough children';}();}
3322+ function rotateLeftIfNeeded_12(t_81){
3323+ return function(){
3324+ switch(t_81[0]){
3325+ case 'RBNode':
3326+ switch(t_81[5][0]){
3327+ case 'RBNode':
3328+ switch(t_81[5][1][0]){
3329+ case 'Red':
3330+ return rotateLeft_10(t_81);
3331+ }break;
3332+ }break;
3333+ }
3334+ return t_81;}();}
3335+ function rotateRightIfNeeded_13(t_82){
3336+ return function(){
3337+ switch(t_82[0]){
3338+ case 'RBNode':
3339+ switch(t_82[4][0]){
3340+ case 'RBNode':
3341+ switch(t_82[4][1][0]){
3342+ case 'Red':
3343+ switch(t_82[4][4][0]){
3344+ case 'RBNode':
3345+ switch(t_82[4][4][1][0]){
3346+ case 'Red':
3347+ return rotateRight_11(t_82);
3348+ }break;
3349+ }break;
3350+ }break;
3351+ }break;
3352+ }
3353+ return t_82;}();}
3354+ function otherColor_14(c_83){
3355+ return function(){
3356+ switch(c_83[0]){
3357+ case 'Black':
3358+ return Red_0;
3359+ case 'Red':
3360+ return Black_1;
3361+ }
3362+ throw "Non-exhaustive pattern match in case";}();}
3363+ function color_flip_15(t_84){
3364+ return function(){
3365+ switch(t_84[0]){
3366+ case 'RBNode':
3367+ switch(t_84[4][0]){
3368+ case 'RBNode':
3369+ switch(t_84[5][0]){
3370+ case 'RBNode':
3371+ return RBNode_2(otherColor_14(t_84[1]))(t_84[2])(t_84[3])(RBNode_2(otherColor_14(t_84[4][1]))(t_84[4][2])(t_84[4][3])(t_84[4][4])(t_84[4][5]))(RBNode_2(otherColor_14(t_84[5][1]))(t_84[5][2])(t_84[5][3])(t_84[5][4])(t_84[5][5]));
3372+ }break;
3373+ }break;
3374+ }
3375+ throw 'color_flip called on a RBEmpty or RBNode with a RBEmpty child';}();}
3376+ function color_flipIfNeeded_16(t_98){
3377+ return function(){
3378+ switch(t_98[0]){
3379+ case 'RBNode':
3380+ switch(t_98[4][0]){
3381+ case 'RBNode':
3382+ switch(t_98[4][1][0]){
3383+ case 'Red':
3384+ switch(t_98[5][0]){
3385+ case 'RBNode':
3386+ switch(t_98[5][1][0]){
3387+ case 'Red':
3388+ return color_flip_15(t_98);
3389+ }break;
3390+ }break;
3391+ }break;
3392+ }break;
3393+ }
3394+ return t_98;}();}
3395+ function fixUp_17(t_99){
3396+ return color_flipIfNeeded_16(rotateRightIfNeeded_13(rotateLeftIfNeeded_12(t_99)));}
3397+ function ensureBlackRoot_18(t_100){
3398+ return function(){
3399+ switch(t_100[0]){
3400+ case 'RBNode':
3401+ switch(t_100[1][0]){
3402+ case 'Red':
3403+ return RBNode_2(Black_1)(t_100[2])(t_100[3])(t_100[4])(t_100[5]);
3404+ }break;
3405+ }
3406+ return t_100;}();}
3407+ function insert_19(k_105){
3408+ return function(v_106){
3409+ return function(t_107){
3410+ return function(){
3411+ function ins_108(t_109){
3412+ return function(){
3413+ switch(t_109[0]){
3414+ case 'RBEmpty':
3415+ return RBNode_2(Red_0)(k_105)(v_106)(RBEmpty_3)(RBEmpty_3);
3416+ case 'RBNode':
3417+ return function(){
3418+ var h_115=function(){
3419+ var case114=compare(k_105)(t_109[2]);
3420+ switch(case114[0]){
3421+ case 'EQ':
3422+ return RBNode_2(t_109[1])(t_109[2])(v_106)(t_109[4])(t_109[5]);
3423+ case 'GT':
3424+ return RBNode_2(t_109[1])(t_109[2])(t_109[3])(t_109[4])(ins_108(t_109[5]));
3425+ case 'LT':
3426+ return RBNode_2(t_109[1])(t_109[2])(t_109[3])(ins_108(t_109[4]))(t_109[5]);
3427+ }
3428+ throw "Non-exhaustive pattern match in case";}();
3429+ return fixUp_17(h_115);}();
3430+ }
3431+ throw "Non-exhaustive pattern match in case";}();}
3432+ return ensureBlackRoot_18(ins_108(t_107));}();};};}
3433+ function singleton_20(k_116){
3434+ return function(v_117){
3435+ return insert_19(k_116)(v_117)(RBEmpty_3);};}
3436+ function isRed_21(t_118){
3437+ return function(){
3438+ switch(t_118[0]){
3439+ case 'RBNode':
3440+ switch(t_118[1][0]){
3441+ case 'Red':
3442+ return true;
3443+ }break;
3444+ }
3445+ return false;}();}
3446+ function isRedLeft_22(t_119){
3447+ return function(){
3448+ switch(t_119[0]){
3449+ case 'RBNode':
3450+ switch(t_119[4][0]){
3451+ case 'RBNode':
3452+ switch(t_119[4][1][0]){
3453+ case 'Red':
3454+ return true;
3455+ }break;
3456+ }break;
3457+ }
3458+ return false;}();}
3459+ function isRedLeftLeft_23(t_120){
3460+ return function(){
3461+ switch(t_120[0]){
3462+ case 'RBNode':
3463+ switch(t_120[4][0]){
3464+ case 'RBNode':
3465+ switch(t_120[4][4][0]){
3466+ case 'RBNode':
3467+ switch(t_120[4][4][1][0]){
3468+ case 'Red':
3469+ return true;
3470+ }break;
3471+ }break;
3472+ }break;
3473+ }
3474+ return false;}();}
3475+ function isRedRight_24(t_121){
3476+ return function(){
3477+ switch(t_121[0]){
3478+ case 'RBNode':
3479+ switch(t_121[5][0]){
3480+ case 'RBNode':
3481+ switch(t_121[5][1][0]){
3482+ case 'Red':
3483+ return true;
3484+ }break;
3485+ }break;
3486+ }
3487+ return false;}();}
3488+ function isRedRightLeft_25(t_122){
3489+ return function(){
3490+ switch(t_122[0]){
3491+ case 'RBNode':
3492+ switch(t_122[5][0]){
3493+ case 'RBNode':
3494+ switch(t_122[5][4][0]){
3495+ case 'RBNode':
3496+ switch(t_122[5][4][1][0]){
3497+ case 'Red':
3498+ return true;
3499+ }break;
3500+ }break;
3501+ }break;
3502+ }
3503+ return false;}();}
3504+ function moveRedLeft_26(t_123){
3505+ return function(){
3506+ var t__124=color_flip_15(t_123);
3507+ return function(){
3508+ switch(t__124[0]){
3509+ case 'RBNode':
3510+ return function(){
3511+ switch(t__124[5][0]){
3512+ case 'RBNode':
3513+ switch(t__124[5][4][0]){
3514+ case 'RBNode':
3515+ switch(t__124[5][4][1][0]){
3516+ case 'Red':
3517+ return color_flip_15(rotateLeft_10(RBNode_2(t__124[1])(t__124[2])(t__124[3])(t__124[4])(rotateRight_11(t__124[5]))));
3518+ }break;
3519+ }break;
3520+ }
3521+ return t__124;}();
3522+ }
3523+ return t__124;}();}();}
3524+ function moveRedRight_27(t_130){
3525+ return function(){
3526+ var t__131=color_flip_15(t_130);
3527+ return (isRedLeftLeft_23(t__131)?color_flip_15(rotateRight_11(t__131)):t__131);}();}
3528+ function moveRedLeftIfNeeded_28(t_132){
3529+ return ((not(isRedLeft_22(t_132))&&not(isRedLeftLeft_23(t_132)))?moveRedLeft_26(t_132):t_132);}
3530+ function moveRedRightIfNeeded_29(t_133){
3531+ return ((not(isRedRight_24(t_133))&&not(isRedRightLeft_25(t_133)))?moveRedRight_27(t_133):t_133);}
3532+ function deleteMin_30(t_134){
3533+ return function(){
3534+ function del_135(t_136){
3535+ return function(){
3536+ switch(t_136[0]){
3537+ case 'RBNode':
3538+ switch(t_136[4][0]){
3539+ case 'RBEmpty':
3540+ return RBEmpty_3;
3541+ }break;
3542+ }
3543+ return function(){
3544+ var case198=moveRedLeftIfNeeded_28(t_136);
3545+ switch(case198[0]){
3546+ case 'RBEmpty':
3547+ return RBEmpty_3;
3548+ case 'RBNode':
3549+ return fixUp_17(RBNode_2(case198[1])(case198[2])(case198[3])(del_135(case198[4]))(case198[5]));
3550+ }
3551+ throw "Non-exhaustive pattern match in case";}();}();}
3552+ return ensureBlackRoot_18(del_135(t_134));}();}
3553+ function remove_31(k_142){
3554+ return function(t_143){
3555+ return function(){
3556+ function eq_and_noRightNode_144(t_150){
3557+ return function(){
3558+ switch(t_150[0]){
3559+ case 'RBNode':
3560+ switch(t_150[5][0]){
3561+ case 'RBEmpty':
3562+ return eq(k_142,t_150[2]);
3563+ }break;
3564+ }
3565+ return false;}();}
3566+ function eq_145(t_152){
3567+ return function(){
3568+ switch(t_152[0]){
3569+ case 'RBNode':
3570+ return eq(k_142,t_152[2]);
3571+ }
3572+ return false;}();}
3573+ function delLT_146(t_154){
3574+ return function(){
3575+ var case216=moveRedLeftIfNeeded_28(t_154);
3576+ switch(case216[0]){
3577+ case 'RBEmpty':
3578+ throw 'delLT on RBEmpty';
3579+ case 'RBNode':
3580+ return fixUp_17(RBNode_2(case216[1])(case216[2])(case216[3])(del_149(case216[4]))(case216[5]));
3581+ }
3582+ throw "Non-exhaustive pattern match in case";}();}
3583+ function delEQ_147(t_160){
3584+ return function(){
3585+ switch(t_160[0]){
3586+ case 'RBEmpty':
3587+ throw 'delEQ called on a RBEmpty';
3588+ case 'RBNode':
3589+ return function(){
3590+ var Tuple2$k_v__164=min_6(t_160[5]);
3591+ var k__165=function(){
3592+ switch(Tuple2$k_v__164[0]){
3593+ case 'Tuple2':
3594+ return Tuple2$k_v__164[1];
3595+ }
3596+ throw "Non-exhaustive pattern match in case";}();
3597+ var v__166=function(){
3598+ switch(Tuple2$k_v__164[0]){
3599+ case 'Tuple2':
3600+ return Tuple2$k_v__164[2];
3601+ }
3602+ throw "Non-exhaustive pattern match in case";}();
3603+ return fixUp_17(RBNode_2(t_160[1])(k__165)(v__166)(t_160[4])(deleteMin_30(t_160[5])));}();
3604+ }
3605+ throw "Non-exhaustive pattern match in case";}();}
3606+ function delGT_148(t_171){
3607+ return function(){
3608+ switch(t_171[0]){
3609+ case 'RBEmpty':
3610+ throw 'delGT called on a RBEmpty';
3611+ case 'RBNode':
3612+ return fixUp_17(RBNode_2(t_171[1])(t_171[2])(t_171[3])(t_171[4])(del_149(t_171[5])));
3613+ }
3614+ throw "Non-exhaustive pattern match in case";}();}
3615+ function del_149(t_177){
3616+ return function(){
3617+ switch(t_177[0]){
3618+ case 'RBEmpty':
3619+ return RBEmpty_3;
3620+ case 'RBNode':
3621+ return ((compare(k_142)(t_177[2])[0] === 'LT')?delLT_146(t_177):function(){
3622+ var u_179=(isRedLeft_22(t_177)?rotateRight_11(t_177):t_177);
3623+ return (eq_and_noRightNode_144(u_179)?u_179[4]:function(){
3624+ var t__180=moveRedRightIfNeeded_29(t_177);
3625+ return (eq_145(t__180)?delEQ_147(t__180):delGT_148(t__180));}());}());
3626+ }
3627+ throw "Non-exhaustive pattern match in case";}();}
3628+ return (member_9(k_142)(t_143)?ensureBlackRoot_18(del_149(t_143)):t_143);}();};}
3629+ function map_32(f_181){
3630+ return function(t_182){
3631+ return function(){
3632+ switch(t_182[0]){
3633+ case 'RBEmpty':
3634+ return RBEmpty_3;
3635+ case 'RBNode':
3636+ return RBNode_2(t_182[1])(t_182[2])(f_181(t_182[3]))(map_32(f_181)(t_182[4]))(map_32(f_181)(t_182[5]));
3637+ }
3638+ throw "Non-exhaustive pattern match in case";}();};}
3639+ function foldl_33(f_188){
3640+ return function(acc_189){
3641+ return function(t_190){
3642+ return function(){
3643+ switch(t_190[0]){
3644+ case 'RBEmpty':
3645+ return acc_189;
3646+ case 'RBNode':
3647+ return foldl_33(f_188)(f_188(t_190[2])(t_190[3])(foldl_33(f_188)(acc_189)(t_190[4])))(t_190[5]);
3648+ }
3649+ throw "Non-exhaustive pattern match in case";}();};};}
3650+ function foldr_34(f_195){
3651+ return function(acc_196){
3652+ return function(t_197){
3653+ return function(){
3654+ switch(t_197[0]){
3655+ case 'RBEmpty':
3656+ return acc_196;
3657+ case 'RBNode':
3658+ return foldr_34(f_195)(f_195(t_197[2])(t_197[3])(foldr_34(f_195)(acc_196)(t_197[5])))(t_197[4]);
3659+ }
3660+ throw "Non-exhaustive pattern match in case";}();};};}
3661+ function union_35(t1_202){
3662+ return function(t2_203){
3663+ return foldl_33(insert_19)(t2_203)(t1_202);};}
3664+ function intersect_36(t1_204){
3665+ return function(t2_205){
3666+ return foldl_33(function(k_206){
3667+ return function(v_207){
3668+ return function(t_208){
3669+ return (member_9(k_206)(t2_205)?insert_19(k_206)(v_207)(t_208):t_208);};};})(empty_4)(t1_204);};}
3670+ function diff_37(t1_209){
3671+ return function(t2_210){
3672+ return foldl_33(function(k_211){
3673+ return function(v_212){
3674+ return function(t_213){
3675+ return remove_31(k_211)(t_213);};};})(t1_209)(t2_210);};}
3676+ function keys_38(t_214){
3677+ return foldr_34(function(k_215){
3678+ return function(v_216){
3679+ return function(acc_217){
3680+ return ['Cons',k_215,acc_217];};};})(['Nil'])(t_214);}
3681+ function values_39(t_218){
3682+ return foldr_34(function(k_219){
3683+ return function(v_220){
3684+ return function(acc_221){
3685+ return ['Cons',v_220,acc_221];};};})(['Nil'])(t_218);}
3686+ function toList_40(t_222){
3687+ return foldr_34(function(k_223){
3688+ return function(v_224){
3689+ return function(acc_225){
3690+ return ['Cons',['Tuple2',k_223,v_224],acc_225];};};})(['Nil'])(t_222);}
3691+ function fromList_41(assocs_226){
3692+ return Elm.List.foldl(uncurry(insert_19))(empty_4)(assocs_226);}
3693+ var empty_4=RBEmpty_3;
3694+ return {$op : {},
3695+ empty:empty_4,
3696+ lookup:lookup_7,
3697+ findWithDefault:findWithDefault_8,
3698+ member:member_9,
3699+ insert:insert_19,
3700+ singleton:singleton_20,
3701+ remove:remove_31,
3702+ map:map_32,
3703+ foldl:foldl_33,
3704+ foldr:foldr_34,
3705+ union:union_35,
3706+ intersect:intersect_36,
3707+ diff:diff_37,
3708+ keys:keys_38,
3709+ values:values_39,
3710+ toList:toList_40,
3711+ fromList:fromList_41};}();
3712+
3713+Elm.Set=function(){
3714+ var empty_0=Elm.Dict.empty;
3715+ var remove_3=Elm.Dict.remove;
3716+ var member_4=Elm.Dict.member;
3717+ var union_5=Elm.Dict.union;
3718+ var intersect_6=Elm.Dict.intersect;
3719+ var diff_7=Elm.Dict.diff;
3720+ var toList_8=Elm.Dict.keys;
3721+ var fromList_9=Elm.List.foldl(function(k_15){
3722+ return function(t_16){
3723+ return Elm.Dict.insert(k_15)(["Tuple0"])(t_16);};})(empty_0);
3724+ function singleton_1(k_13){
3725+ return Elm.Dict.singleton(k_13)(["Tuple0"]);};
3726+ function insert_2(k_14){
3727+ return Elm.Dict.insert(k_14)(["Tuple0"]);};
3728+ function foldl_10(f_17){
3729+ return Elm.Dict.foldl(function(k_18){
3730+ return function(v_19){
3731+ return function(b_20){
3732+ return f_17(k_18)(b_20);};};});};
3733+ function foldr_11(f_21){
3734+ return Elm.Dict.foldr(function(k_22){
3735+ return function(v_23){
3736+ return function(b_24){
3737+ return f_21(k_22)(b_24);};};});};
3738+ function map_12(f_25){
3739+ return function(t_26){
3740+ return function(x){
3741+ return fromList_9(Elm.List.map(f_25)(x));}(toList_8(t_26));};};
3742+ return {empty:empty_0,singleton:singleton_1,insert:insert_2,remove:remove_3,member:member_4,union:union_5,intersect:intersect_6,diff:diff_7,toList:toList_8,fromList:fromList_9,foldl:foldl_10,foldr:foldr_11,map:map_12};}();
3743+
3744+(function() {
3745+try{
3746+
3747+var $op={};
3748+for(this['i'] in Elm){eval('var '+this['i']+'=Elm[this.i];');}
3749+if (Elm.Automaton) throw "Module name collision, 'Automaton' is already defined.";
3750+Elm.Automaton=function(){
3751+ try{
3752+ if (!(Elm.Prelude instanceof Object)) throw 'module not found';
3753+ } catch(e) {
3754+ throw ("Module 'Prelude' is missing. Compile with --make flag or load missing module in a separate JavaScript file.");
3755+ }
3756+ var hiddenVars={};
3757+ for (this['i'] in Elm.Prelude) {
3758+ if (hiddenVars[this['i']]) continue;
3759+ eval('var ' + this['i'] + ' = Elm.Prelude[this.i];');}
3760+ function Automaton_0(a1){
3761+ return ["Automaton",a1];}
3762+ var Listen_8=["Listen"];
3763+ var Ignore_9=["Ignore"];
3764+ function DragFrom_10(a1){
3765+ return ["DragFrom",a1];}
3766+ $op['>>>'] = function(a1_24){
3767+ return function(a2_25){
3768+ return function(){
3769+ var Automaton$m1_26=a1_24;
3770+ var m1_27=function(){
3771+ switch(Automaton$m1_26[0]){
3772+ case "Automaton":
3773+ return Automaton$m1_26[1];
3774+ }
3775+ throw "Non-exhaustive pattern match in case";}();
3776+ var Automaton$m2_28=a2_25;
3777+ var m2_29=function(){
3778+ switch(Automaton$m2_28[0]){
3779+ case "Automaton":
3780+ return Automaton$m2_28[1];
3781+ }
3782+ throw "Non-exhaustive pattern match in case";}();
3783+ return Automaton_0(function(a_32){
3784+ return function(){
3785+ var Tuple2$bm1__33=m1_27(a_32);
3786+ var b_34=function(){
3787+ switch(Tuple2$bm1__33[0]){
3788+ case "Tuple2":
3789+ return Tuple2$bm1__33[1];
3790+ }
3791+ throw "Non-exhaustive pattern match in case";}();
3792+ var m1__35=function(){
3793+ switch(Tuple2$bm1__33[0]){
3794+ case "Tuple2":
3795+ return Tuple2$bm1__33[2];
3796+ }
3797+ throw "Non-exhaustive pattern match in case";}();
3798+ return function(){
3799+ var Tuple2$cm2__40=m2_29(b_34);
3800+ var c_41=function(){
3801+ switch(Tuple2$cm2__40[0]){
3802+ case "Tuple2":
3803+ return Tuple2$cm2__40[1];
3804+ }
3805+ throw "Non-exhaustive pattern match in case";}();
3806+ var m2__42=function(){
3807+ switch(Tuple2$cm2__40[0]){
3808+ case "Tuple2":
3809+ return Tuple2$cm2__40[2];
3810+ }
3811+ throw "Non-exhaustive pattern match in case";}();
3812+ return ["Tuple2",c_41,$op['>>>'](m1__35)(m2__42)];}();}();});}();};};
3813+ $op['<<<'] = function(a2_47){
3814+ return function(a1_48){
3815+ return $op['>>>'](a1_48)(a2_47);};};
3816+ $op['^>>'] = function(f_49){
3817+ return function(a_50){
3818+ return $op['>>>'](pure_4(f_49))(a_50);};};
3819+ $op['>>^'] = function(a_51){
3820+ return function(f_52){
3821+ return $op['>>>'](a_51)(pure_4(f_52));};};
3822+ $op['^<<'] = function(f_53){
3823+ return function(a_54){
3824+ return $op['>>>'](a_54)(pure_4(f_53));};};
3825+ $op['<<^'] = function(a_55){
3826+ return function(f_56){
3827+ return $op['>>>'](pure_4(f_56))(a_55);};};
3828+ var count_7=init_5(0)(function(__84){
3829+ return function(c_85){
3830+ return (1+c_85);};});
3831+ function run_1(Automaton$m0_14){
3832+ return function(input_15){
3833+ return function(){
3834+ switch(Automaton$m0_14[0]){
3835+ case "Automaton":
3836+ return lift(fst)(foldp_(function(a_17){
3837+ return function(Tuple2$bAutomaton$m_18){
3838+ return function(){
3839+ switch(Tuple2$bAutomaton$m_18[0]){
3840+ case "Tuple2":
3841+ switch(Tuple2$bAutomaton$m_18[2][0]){
3842+ case "Automaton":
3843+ return Tuple2$bAutomaton$m_18[2][1](a_17);
3844+ }break;
3845+ }
3846+ throw "Non-exhaustive pattern match in case";}();};})(Automaton$m0_14[1])(input_15));
3847+ }
3848+ throw "Non-exhaustive pattern match in case";}();};}
3849+ function step_2(Automaton$m_21){
3850+ return function(a_22){
3851+ return function(){
3852+ switch(Automaton$m_21[0]){
3853+ case "Automaton":
3854+ return Automaton$m_21[1](a_22);
3855+ }
3856+ throw "Non-exhaustive pattern match in case";}();};}
3857+ function combine_3(autos_57){
3858+ return Automaton_0(function(a_58){
3859+ return function(){
3860+ var Tuple2$bsautos__59=unzip(map(function(Automaton$m_62){
3861+ return function(){
3862+ switch(Automaton$m_62[0]){
3863+ case "Automaton":
3864+ return Automaton$m_62[1](a_58);
3865+ }
3866+ throw "Non-exhaustive pattern match in case";}();})(autos_57));
3867+ var bs_60=function(){
3868+ switch(Tuple2$bsautos__59[0]){
3869+ case "Tuple2":
3870+ return Tuple2$bsautos__59[1];
3871+ }
3872+ throw "Non-exhaustive pattern match in case";}();
3873+ var autos__61=function(){
3874+ switch(Tuple2$bsautos__59[0]){
3875+ case "Tuple2":
3876+ return Tuple2$bsautos__59[2];
3877+ }
3878+ throw "Non-exhaustive pattern match in case";}();
3879+ return ["Tuple2",bs_60,combine_3(autos__61)];}();});}
3880+ function pure_4(f_68){
3881+ return Automaton_0(function(x_69){
3882+ return ["Tuple2",f_68(x_69),pure_4(f_68)];});}
3883+ function init_5(s_70){
3884+ return function(step_71){
3885+ return Automaton_0(function(a_72){
3886+ return function(){
3887+ var s__73=step_71(a_72)(s_70);
3888+ return ["Tuple2",s__73,init_5(s__73)(step_71)];}();});};}
3889+ function init__6(s_74){
3890+ return function(step_75){
3891+ return Automaton_0(function(a_76){
3892+ return function(){
3893+ var Tuple2$bs__77=step_75(a_76)(s_74);
3894+ var b_78=function(){
3895+ switch(Tuple2$bs__77[0]){
3896+ case "Tuple2":
3897+ return Tuple2$bs__77[1];
3898+ }
3899+ throw "Non-exhaustive pattern match in case";}();
3900+ var s__79=function(){
3901+ switch(Tuple2$bs__77[0]){
3902+ case "Tuple2":
3903+ return Tuple2$bs__77[2];
3904+ }
3905+ throw "Non-exhaustive pattern match in case";}();
3906+ return ["Tuple2",b_78,init__6(s__79)(step_75)];}();});};}
3907+ function vecSub_11(Tuple2$x1y1_86){
3908+ return function(Tuple2$x2y2_87){
3909+ return function(){
3910+ switch(Tuple2$x1y1_86[0]){
3911+ case "Tuple2":
3912+ return function(){
3913+ switch(Tuple2$x2y2_87[0]){
3914+ case "Tuple2":
3915+ return ["Tuple2",(Tuple2$x1y1_86[1]-Tuple2$x2y2_87[1]),(Tuple2$x1y1_86[2]-Tuple2$x2y2_87[2])];
3916+ }
3917+ throw "Non-exhaustive pattern match in case";}();
3918+ }
3919+ throw "Non-exhaustive pattern match in case";}();};}
3920+ function stepDrag_12(Tuple2$presspos_92){
3921+ return function(Tuple2$dsform_93){
3922+ return function(){
3923+ switch(Tuple2$presspos_92[0]){
3924+ case "Tuple2":
3925+ return function(){
3926+ switch(Tuple2$dsform_93[0]){
3927+ case "Tuple2":
3928+ return function(){
3929+ function wrap_98(ds__99){
3930+ return ["Tuple2",Tuple2$dsform_93[2],["Tuple2",ds__99,Tuple2$dsform_93[2]]];}
3931+ return function(){
3932+ switch(Tuple2$dsform_93[1][0]){
3933+ case "DragFrom":
3934+ return (Tuple2$presspos_92[1]?["Tuple2",uncurry(move)(vecSub_11(Tuple2$presspos_92[2])(Tuple2$dsform_93[1][1]))(Tuple2$dsform_93[2]),["Tuple2",DragFrom_10(Tuple2$dsform_93[1][1]),Tuple2$dsform_93[2]]]:function(){
3935+ var form__101=uncurry(move)(vecSub_11(Tuple2$presspos_92[2])(Tuple2$dsform_93[1][1]))(Tuple2$dsform_93[2]);
3936+ return ["Tuple2",form__101,["Tuple2",Listen_8,form__101]];}());
3937+ case "Ignore":
3938+ return wrap_98((Tuple2$presspos_92[1]?Ignore_9:Listen_8));
3939+ case "Listen":
3940+ return wrap_98((not(Tuple2$presspos_92[1])?Listen_8:(isWithin(Tuple2$presspos_92[2])(Tuple2$dsform_93[2])?DragFrom_10(Tuple2$presspos_92[2]):Ignore_9)));
3941+ }
3942+ throw "Non-exhaustive pattern match in case";}();}();
3943+ }
3944+ throw "Non-exhaustive pattern match in case";}();
3945+ }
3946+ throw "Non-exhaustive pattern match in case";}();};}
3947+ function draggable_13(form_102){
3948+ return init__6(["Tuple2",Listen_8,form_102])(stepDrag_12);}
3949+ return {$op : {'>>>' : $op['>>>'], '<<<' : $op['<<<'], '^>>' : $op['^>>'], '>>^' : $op['>>^'], '^<<' : $op['^<<'], '<<^' : $op['<<^']},
3950+ run:run_1,
3951+ step:step_2,
3952+ combine:combine_3,
3953+ pure:pure_4,
3954+ init:init_5,
3955+ init_:init__6,
3956+ count:count_7,
3957+ draggable:draggable_13};}();
3958+Elm.main=function(){
3959+ return Elm.Automaton.main;};
3960+} catch (e) {
3961+Elm.main=function() {
3962+var msg = ('<br/><h2>Your browser may not be supported. Are you using a modern browser?</h2>' + '<br/><span style="color:grey">Runtime Error in Automaton module:<br/>' + e + '</span>');
3963+document.body.innerHTML = Elm.Text.monospace(msg);throw e;};}}());