Skip to content

Instantly share code, notes, and snippets.

Created June 14, 2017 03:05
Show Gist options
  • Save anonymous/68d36f1b6026893bc08b22b053e2f42e to your computer and use it in GitHub Desktop.
Save anonymous/68d36f1b6026893bc08b22b053e2f42e to your computer and use it in GitHub Desktop.
demo of http request using elm_magic
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"ExecuteTime": {
"start_time": "2017-06-14T03:00:18.475877Z",
"end_time": "2017-06-14T03:00:18.482149Z"
},
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "%load_ext elm_magic",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2017-06-14T03:02:06.163018Z",
"end_time": "2017-06-14T03:02:06.181518Z"
},
"trusted": true
},
"cell_type": "code",
"source": "%config ElmMagic.elmdir=\"/tmp/myelm/\"\n%config ElmMagic",
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"text": "ElmMagic options\n--------------\nElmMagic.debug=<Bool>\n Current: False\n Display debuging output\nElmMagic.elmdir=<Unicode>\n Current: '/tmp/myelm/'\n Directory where elm-make will run. (This is where elm-stuff and elm-\n package.json will be). Uses a temporary directory if not set by user\nElmMagic.keep_sources=<Bool>\n Current: False\n Do not immediately delete the html/js generated by compilation\nElmMagic.render=<Bool>\n Current: False\n Use elm-static-html to render the cell's contents before displaying\n",
"name": "stdout"
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2017-06-14T03:02:39.340472Z",
"end_time": "2017-06-14T03:02:45.430903Z"
},
"trusted": true
},
"cell_type": "code",
"source": "%%elm -i elm-lang/http elm-lang/html\nimport Html exposing (..)\nimport Html.Attributes exposing (..)\nimport Html.Events exposing (..)\nimport Http\nimport Json.Decode as Decode\n\nmain =\n Html.program\n { init = init \"cats\"\n , view = view\n , update = update\n , subscriptions = subscriptions\n }\n\n-- MODEL\n\ntype alias Model =\n { topic : String\n , gifUrl : String\n }\n\ninit : String -> (Model, Cmd Msg)\ninit topic =\n ( Model topic \"waiting.gif\"\n , getRandomGif topic\n )\n\n-- UPDATE\n\ntype Msg\n = MorePlease\n | NewGif (Result Http.Error String)\n\nupdate : Msg -> Model -> (Model, Cmd Msg)\nupdate msg model =\n case msg of\n MorePlease ->\n (model, getRandomGif model.topic)\n\n NewGif (Ok newUrl) ->\n (Model model.topic newUrl, Cmd.none)\n\n NewGif (Err _) ->\n (model, Cmd.none)\n\n-- VIEW\n\nview : Model -> Html Msg\nview model =\n div []\n [ h2 [] [text model.topic]\n , button [ onClick MorePlease ] [ text \"More Please!\" ]\n , br [] []\n , img [src model.gifUrl] []\n ]\n\n-- SUBSCRIPTIONS\n\nsubscriptions : Model -> Sub Msg\nsubscriptions model =\n Sub.none\n\n-- HTTP\n\ngetRandomGif : String -> Cmd Msg\ngetRandomGif topic =\n let\n url =\n \"https://api.giphy.com/v1/gifs/random?api_key=dc6zaTOxFJmzC&tag=\" ++ topic\n in\n Http.send NewGif (Http.get url decodeGifUrl)\n\ndecodeGifUrl : Decode.Decoder String\ndecodeGifUrl =\n Decode.at [\"data\", \"image_url\"] Decode.string",
"execution_count": 11,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "\n <div id=\"elm-div-5\"></div>\n <script>\n var defineElm = function(cb) {\n if (this.Elm) {\n this.oldElm = this.Elm;\n }\n var define = null;\n \n(function() {\n'use strict';\n\nfunction F2(fun)\n{\n function wrapper(a) { return function(b) { return fun(a,b); }; }\n wrapper.arity = 2;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F3(fun)\n{\n function wrapper(a) {\n return function(b) { return function(c) { return fun(a, b, c); }; };\n }\n wrapper.arity = 3;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F4(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return fun(a, b, c, d); }; }; };\n }\n wrapper.arity = 4;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F5(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };\n }\n wrapper.arity = 5;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F6(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return function(f) {\n return fun(a, b, c, d, e, f); }; }; }; }; };\n }\n wrapper.arity = 6;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F7(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return function(f) {\n return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };\n }\n wrapper.arity = 7;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F8(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return function(f) {\n return function(g) { return function(h) {\n return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };\n }\n wrapper.arity = 8;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F9(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return function(f) {\n return function(g) { return function(h) { return function(i) {\n return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };\n }\n wrapper.arity = 9;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction A2(fun, a, b)\n{\n return fun.arity === 2\n ? fun.func(a, b)\n : fun(a)(b);\n}\nfunction A3(fun, a, b, c)\n{\n return fun.arity === 3\n ? fun.func(a, b, c)\n : fun(a)(b)(c);\n}\nfunction A4(fun, a, b, c, d)\n{\n return fun.arity === 4\n ? fun.func(a, b, c, d)\n : fun(a)(b)(c)(d);\n}\nfunction A5(fun, a, b, c, d, e)\n{\n return fun.arity === 5\n ? fun.func(a, b, c, d, e)\n : fun(a)(b)(c)(d)(e);\n}\nfunction A6(fun, a, b, c, d, e, f)\n{\n return fun.arity === 6\n ? fun.func(a, b, c, d, e, f)\n : fun(a)(b)(c)(d)(e)(f);\n}\nfunction A7(fun, a, b, c, d, e, f, g)\n{\n return fun.arity === 7\n ? fun.func(a, b, c, d, e, f, g)\n : fun(a)(b)(c)(d)(e)(f)(g);\n}\nfunction A8(fun, a, b, c, d, e, f, g, h)\n{\n return fun.arity === 8\n ? fun.func(a, b, c, d, e, f, g, h)\n : fun(a)(b)(c)(d)(e)(f)(g)(h);\n}\nfunction A9(fun, a, b, c, d, e, f, g, h, i)\n{\n return fun.arity === 9\n ? fun.func(a, b, c, d, e, f, g, h, i)\n : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);\n}\n\n//import Native.List //\n\nvar _elm_lang$core$Native_Array = function() {\n\n// A RRB-Tree has two distinct data types.\n// Leaf -> \"height\" is always 0\n// \"table\" is an array of elements\n// Node -> \"height\" is always greater than 0\n// \"table\" is an array of child nodes\n// \"lengths\" is an array of accumulated lengths of the child nodes\n\n// M is the maximal table size. 32 seems fast. E is the allowed increase\n// of search steps when concatting to find an index. Lower values will\n// decrease balancing, but will increase search steps.\nvar M = 32;\nvar E = 2;\n\n// An empty array.\nvar empty = {\n\tctor: '_Array',\n\theight: 0,\n\ttable: []\n};\n\n\nfunction get(i, array)\n{\n\tif (i < 0 || i >= length(array))\n\t{\n\t\tthrow new Error(\n\t\t\t'Index ' + i + ' is out of range. Check the length of ' +\n\t\t\t'your array first or use getMaybe or getWithDefault.');\n\t}\n\treturn unsafeGet(i, array);\n}\n\n\nfunction unsafeGet(i, array)\n{\n\tfor (var x = array.height; x > 0; x--)\n\t{\n\t\tvar slot = i >> (x * 5);\n\t\twhile (array.lengths[slot] <= i)\n\t\t{\n\t\t\tslot++;\n\t\t}\n\t\tif (slot > 0)\n\t\t{\n\t\t\ti -= array.lengths[slot - 1];\n\t\t}\n\t\tarray = array.table[slot];\n\t}\n\treturn array.table[i];\n}\n\n\n// Sets the value at the index i. Only the nodes leading to i will get\n// copied and updated.\nfunction set(i, item, array)\n{\n\tif (i < 0 || length(array) <= i)\n\t{\n\t\treturn array;\n\t}\n\treturn unsafeSet(i, item, array);\n}\n\n\nfunction unsafeSet(i, item, array)\n{\n\tarray = nodeCopy(array);\n\n\tif (array.height === 0)\n\t{\n\t\tarray.table[i] = item;\n\t}\n\telse\n\t{\n\t\tvar slot = getSlot(i, array);\n\t\tif (slot > 0)\n\t\t{\n\t\t\ti -= array.lengths[slot - 1];\n\t\t}\n\t\tarray.table[slot] = unsafeSet(i, item, array.table[slot]);\n\t}\n\treturn array;\n}\n\n\nfunction initialize(len, f)\n{\n\tif (len <= 0)\n\t{\n\t\treturn empty;\n\t}\n\tvar h = Math.floor( Math.log(len) / Math.log(M) );\n\treturn initialize_(f, h, 0, len);\n}\n\nfunction initialize_(f, h, from, to)\n{\n\tif (h === 0)\n\t{\n\t\tvar table = new Array((to - from) % (M + 1));\n\t\tfor (var i = 0; i < table.length; i++)\n\t\t{\n\t\t table[i] = f(from + i);\n\t\t}\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: 0,\n\t\t\ttable: table\n\t\t};\n\t}\n\n\tvar step = Math.pow(M, h);\n\tvar table = new Array(Math.ceil((to - from) / step));\n\tvar lengths = new Array(table.length);\n\tfor (var i = 0; i < table.length; i++)\n\t{\n\t\ttable[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));\n\t\tlengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);\n\t}\n\treturn {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: table,\n\t\tlengths: lengths\n\t};\n}\n\nfunction fromList(list)\n{\n\tif (list.ctor === '[]')\n\t{\n\t\treturn empty;\n\t}\n\n\t// Allocate M sized blocks (table) and write list elements to it.\n\tvar table = new Array(M);\n\tvar nodes = [];\n\tvar i = 0;\n\n\twhile (list.ctor !== '[]')\n\t{\n\t\ttable[i] = list._0;\n\t\tlist = list._1;\n\t\ti++;\n\n\t\t// table is full, so we can push a leaf containing it into the\n\t\t// next node.\n\t\tif (i === M)\n\t\t{\n\t\t\tvar leaf = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: table\n\t\t\t};\n\t\t\tfromListPush(leaf, nodes);\n\t\t\ttable = new Array(M);\n\t\t\ti = 0;\n\t\t}\n\t}\n\n\t// Maybe there is something left on the table.\n\tif (i > 0)\n\t{\n\t\tvar leaf = {\n\t\t\tctor: '_Array',\n\t\t\theight: 0,\n\t\t\ttable: table.splice(0, i)\n\t\t};\n\t\tfromListPush(leaf, nodes);\n\t}\n\n\t// Go through all of the nodes and eventually push them into higher nodes.\n\tfor (var h = 0; h < nodes.length - 1; h++)\n\t{\n\t\tif (nodes[h].table.length > 0)\n\t\t{\n\t\t\tfromListPush(nodes[h], nodes);\n\t\t}\n\t}\n\n\tvar head = nodes[nodes.length - 1];\n\tif (head.height > 0 && head.table.length === 1)\n\t{\n\t\treturn head.table[0];\n\t}\n\telse\n\t{\n\t\treturn head;\n\t}\n}\n\n// Push a node into a higher node as a child.\nfunction fromListPush(toPush, nodes)\n{\n\tvar h = toPush.height;\n\n\t// Maybe the node on this height does not exist.\n\tif (nodes.length === h)\n\t{\n\t\tvar node = {\n\t\t\tctor: '_Array',\n\t\t\theight: h + 1,\n\t\t\ttable: [],\n\t\t\tlengths: []\n\t\t};\n\t\tnodes.push(node);\n\t}\n\n\tnodes[h].table.push(toPush);\n\tvar len = length(toPush);\n\tif (nodes[h].lengths.length > 0)\n\t{\n\t\tlen += nodes[h].lengths[nodes[h].lengths.length - 1];\n\t}\n\tnodes[h].lengths.push(len);\n\n\tif (nodes[h].table.length === M)\n\t{\n\t\tfromListPush(nodes[h], nodes);\n\t\tnodes[h] = {\n\t\t\tctor: '_Array',\n\t\t\theight: h + 1,\n\t\t\ttable: [],\n\t\t\tlengths: []\n\t\t};\n\t}\n}\n\n// Pushes an item via push_ to the bottom right of a tree.\nfunction push(item, a)\n{\n\tvar pushed = push_(item, a);\n\tif (pushed !== null)\n\t{\n\t\treturn pushed;\n\t}\n\n\tvar newTree = create(item, a.height);\n\treturn siblise(a, newTree);\n}\n\n// Recursively tries to push an item to the bottom-right most\n// tree possible. If there is no space left for the item,\n// null will be returned.\nfunction push_(item, a)\n{\n\t// Handle resursion stop at leaf level.\n\tif (a.height === 0)\n\t{\n\t\tif (a.table.length < M)\n\t\t{\n\t\t\tvar newA = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: a.table.slice()\n\t\t\t};\n\t\t\tnewA.table.push(item);\n\t\t\treturn newA;\n\t\t}\n\t\telse\n\t\t{\n\t\t return null;\n\t\t}\n\t}\n\n\t// Recursively push\n\tvar pushed = push_(item, botRight(a));\n\n\t// There was space in the bottom right tree, so the slot will\n\t// be updated.\n\tif (pushed !== null)\n\t{\n\t\tvar newA = nodeCopy(a);\n\t\tnewA.table[newA.table.length - 1] = pushed;\n\t\tnewA.lengths[newA.lengths.length - 1]++;\n\t\treturn newA;\n\t}\n\n\t// When there was no space left, check if there is space left\n\t// for a new slot with a tree which contains only the item\n\t// at the bottom.\n\tif (a.table.length < M)\n\t{\n\t\tvar newSlot = create(item, a.height - 1);\n\t\tvar newA = nodeCopy(a);\n\t\tnewA.table.push(newSlot);\n\t\tnewA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));\n\t\treturn newA;\n\t}\n\telse\n\t{\n\t\treturn null;\n\t}\n}\n\n// Converts an array into a list of elements.\nfunction toList(a)\n{\n\treturn toList_(_elm_lang$core$Native_List.Nil, a);\n}\n\nfunction toList_(list, a)\n{\n\tfor (var i = a.table.length - 1; i >= 0; i--)\n\t{\n\t\tlist =\n\t\t\ta.height === 0\n\t\t\t\t? _elm_lang$core$Native_List.Cons(a.table[i], list)\n\t\t\t\t: toList_(list, a.table[i]);\n\t}\n\treturn list;\n}\n\n// Maps a function over the elements of an array.\nfunction map(f, a)\n{\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: new Array(a.table.length)\n\t};\n\tif (a.height > 0)\n\t{\n\t\tnewA.lengths = a.lengths;\n\t}\n\tfor (var i = 0; i < a.table.length; i++)\n\t{\n\t\tnewA.table[i] =\n\t\t\ta.height === 0\n\t\t\t\t? f(a.table[i])\n\t\t\t\t: map(f, a.table[i]);\n\t}\n\treturn newA;\n}\n\n// Maps a function over the elements with their index as first argument.\nfunction indexedMap(f, a)\n{\n\treturn indexedMap_(f, a, 0);\n}\n\nfunction indexedMap_(f, a, from)\n{\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: new Array(a.table.length)\n\t};\n\tif (a.height > 0)\n\t{\n\t\tnewA.lengths = a.lengths;\n\t}\n\tfor (var i = 0; i < a.table.length; i++)\n\t{\n\t\tnewA.table[i] =\n\t\t\ta.height === 0\n\t\t\t\t? A2(f, from + i, a.table[i])\n\t\t\t\t: indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]);\n\t}\n\treturn newA;\n}\n\nfunction foldl(f, b, a)\n{\n\tif (a.height === 0)\n\t{\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tb = A2(f, a.table[i], b);\n\t\t}\n\t}\n\telse\n\t{\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tb = foldl(f, b, a.table[i]);\n\t\t}\n\t}\n\treturn b;\n}\n\nfunction foldr(f, b, a)\n{\n\tif (a.height === 0)\n\t{\n\t\tfor (var i = a.table.length; i--; )\n\t\t{\n\t\t\tb = A2(f, a.table[i], b);\n\t\t}\n\t}\n\telse\n\t{\n\t\tfor (var i = a.table.length; i--; )\n\t\t{\n\t\t\tb = foldr(f, b, a.table[i]);\n\t\t}\n\t}\n\treturn b;\n}\n\n// TODO: currently, it slices the right, then the left. This can be\n// optimized.\nfunction slice(from, to, a)\n{\n\tif (from < 0)\n\t{\n\t\tfrom += length(a);\n\t}\n\tif (to < 0)\n\t{\n\t\tto += length(a);\n\t}\n\treturn sliceLeft(from, sliceRight(to, a));\n}\n\nfunction sliceRight(to, a)\n{\n\tif (to === length(a))\n\t{\n\t\treturn a;\n\t}\n\n\t// Handle leaf level.\n\tif (a.height === 0)\n\t{\n\t\tvar newA = { ctor:'_Array', height:0 };\n\t\tnewA.table = a.table.slice(0, to);\n\t\treturn newA;\n\t}\n\n\t// Slice the right recursively.\n\tvar right = getSlot(to, a);\n\tvar sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);\n\n\t// Maybe the a node is not even needed, as sliced contains the whole slice.\n\tif (right === 0)\n\t{\n\t\treturn sliced;\n\t}\n\n\t// Create new node.\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: a.table.slice(0, right),\n\t\tlengths: a.lengths.slice(0, right)\n\t};\n\tif (sliced.table.length > 0)\n\t{\n\t\tnewA.table[right] = sliced;\n\t\tnewA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);\n\t}\n\treturn newA;\n}\n\nfunction sliceLeft(from, a)\n{\n\tif (from === 0)\n\t{\n\t\treturn a;\n\t}\n\n\t// Handle leaf level.\n\tif (a.height === 0)\n\t{\n\t\tvar newA = { ctor:'_Array', height:0 };\n\t\tnewA.table = a.table.slice(from, a.table.length + 1);\n\t\treturn newA;\n\t}\n\n\t// Slice the left recursively.\n\tvar left = getSlot(from, a);\n\tvar sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);\n\n\t// Maybe the a node is not even needed, as sliced contains the whole slice.\n\tif (left === a.table.length - 1)\n\t{\n\t\treturn sliced;\n\t}\n\n\t// Create new node.\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: a.table.slice(left, a.table.length + 1),\n\t\tlengths: new Array(a.table.length - left)\n\t};\n\tnewA.table[0] = sliced;\n\tvar len = 0;\n\tfor (var i = 0; i < newA.table.length; i++)\n\t{\n\t\tlen += length(newA.table[i]);\n\t\tnewA.lengths[i] = len;\n\t}\n\n\treturn newA;\n}\n\n// Appends two trees.\nfunction append(a,b)\n{\n\tif (a.table.length === 0)\n\t{\n\t\treturn b;\n\t}\n\tif (b.table.length === 0)\n\t{\n\t\treturn a;\n\t}\n\n\tvar c = append_(a, b);\n\n\t// Check if both nodes can be crunshed together.\n\tif (c[0].table.length + c[1].table.length <= M)\n\t{\n\t\tif (c[0].table.length === 0)\n\t\t{\n\t\t\treturn c[1];\n\t\t}\n\t\tif (c[1].table.length === 0)\n\t\t{\n\t\t\treturn c[0];\n\t\t}\n\n\t\t// Adjust .table and .lengths\n\t\tc[0].table = c[0].table.concat(c[1].table);\n\t\tif (c[0].height > 0)\n\t\t{\n\t\t\tvar len = length(c[0]);\n\t\t\tfor (var i = 0; i < c[1].lengths.length; i++)\n\t\t\t{\n\t\t\t\tc[1].lengths[i] += len;\n\t\t\t}\n\t\t\tc[0].lengths = c[0].lengths.concat(c[1].lengths);\n\t\t}\n\n\t\treturn c[0];\n\t}\n\n\tif (c[0].height > 0)\n\t{\n\t\tvar toRemove = calcToRemove(a, b);\n\t\tif (toRemove > E)\n\t\t{\n\t\t\tc = shuffle(c[0], c[1], toRemove);\n\t\t}\n\t}\n\n\treturn siblise(c[0], c[1]);\n}\n\n// Returns an array of two nodes; right and left. One node _may_ be empty.\nfunction append_(a, b)\n{\n\tif (a.height === 0 && b.height === 0)\n\t{\n\t\treturn [a, b];\n\t}\n\n\tif (a.height !== 1 || b.height !== 1)\n\t{\n\t\tif (a.height === b.height)\n\t\t{\n\t\t\ta = nodeCopy(a);\n\t\t\tb = nodeCopy(b);\n\t\t\tvar appended = append_(botRight(a), botLeft(b));\n\n\t\t\tinsertRight(a, appended[1]);\n\t\t\tinsertLeft(b, appended[0]);\n\t\t}\n\t\telse if (a.height > b.height)\n\t\t{\n\t\t\ta = nodeCopy(a);\n\t\t\tvar appended = append_(botRight(a), b);\n\n\t\t\tinsertRight(a, appended[0]);\n\t\t\tb = parentise(appended[1], appended[1].height + 1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tb = nodeCopy(b);\n\t\t\tvar appended = append_(a, botLeft(b));\n\n\t\t\tvar left = appended[0].table.length === 0 ? 0 : 1;\n\t\t\tvar right = left === 0 ? 1 : 0;\n\t\t\tinsertLeft(b, appended[left]);\n\t\t\ta = parentise(appended[right], appended[right].height + 1);\n\t\t}\n\t}\n\n\t// Check if balancing is needed and return based on that.\n\tif (a.table.length === 0 || b.table.length === 0)\n\t{\n\t\treturn [a, b];\n\t}\n\n\tvar toRemove = calcToRemove(a, b);\n\tif (toRemove <= E)\n\t{\n\t\treturn [a, b];\n\t}\n\treturn shuffle(a, b, toRemove);\n}\n\n// Helperfunctions for append_. Replaces a child node at the side of the parent.\nfunction insertRight(parent, node)\n{\n\tvar index = parent.table.length - 1;\n\tparent.table[index] = node;\n\tparent.lengths[index] = length(node);\n\tparent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0;\n}\n\nfunction insertLeft(parent, node)\n{\n\tif (node.table.length > 0)\n\t{\n\t\tparent.table[0] = node;\n\t\tparent.lengths[0] = length(node);\n\n\t\tvar len = length(parent.table[0]);\n\t\tfor (var i = 1; i < parent.lengths.length; i++)\n\t\t{\n\t\t\tlen += length(parent.table[i]);\n\t\t\tparent.lengths[i] = len;\n\t\t}\n\t}\n\telse\n\t{\n\t\tparent.table.shift();\n\t\tfor (var i = 1; i < parent.lengths.length; i++)\n\t\t{\n\t\t\tparent.lengths[i] = parent.lengths[i] - parent.lengths[0];\n\t\t}\n\t\tparent.lengths.shift();\n\t}\n}\n\n// Returns the extra search steps for E. Refer to the paper.\nfunction calcToRemove(a, b)\n{\n\tvar subLengths = 0;\n\tfor (var i = 0; i < a.table.length; i++)\n\t{\n\t\tsubLengths += a.table[i].table.length;\n\t}\n\tfor (var i = 0; i < b.table.length; i++)\n\t{\n\t\tsubLengths += b.table[i].table.length;\n\t}\n\n\tvar toRemove = a.table.length + b.table.length;\n\treturn toRemove - (Math.floor((subLengths - 1) / M) + 1);\n}\n\n// get2, set2 and saveSlot are helpers for accessing elements over two arrays.\nfunction get2(a, b, index)\n{\n\treturn index < a.length\n\t\t? a[index]\n\t\t: b[index - a.length];\n}\n\nfunction set2(a, b, index, value)\n{\n\tif (index < a.length)\n\t{\n\t\ta[index] = value;\n\t}\n\telse\n\t{\n\t\tb[index - a.length] = value;\n\t}\n}\n\nfunction saveSlot(a, b, index, slot)\n{\n\tset2(a.table, b.table, index, slot);\n\n\tvar l = (index === 0 || index === a.lengths.length)\n\t\t? 0\n\t\t: get2(a.lengths, a.lengths, index - 1);\n\n\tset2(a.lengths, b.lengths, index, l + length(slot));\n}\n\n// Creates a node or leaf with a given length at their arrays for perfomance.\n// Is only used by shuffle.\nfunction createNode(h, length)\n{\n\tif (length < 0)\n\t{\n\t\tlength = 0;\n\t}\n\tvar a = {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: new Array(length)\n\t};\n\tif (h > 0)\n\t{\n\t\ta.lengths = new Array(length);\n\t}\n\treturn a;\n}\n\n// Returns an array of two balanced nodes.\nfunction shuffle(a, b, toRemove)\n{\n\tvar newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));\n\tvar newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));\n\n\t// Skip the slots with size M. More precise: copy the slot references\n\t// to the new node\n\tvar read = 0;\n\twhile (get2(a.table, b.table, read).table.length % M === 0)\n\t{\n\t\tset2(newA.table, newB.table, read, get2(a.table, b.table, read));\n\t\tset2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));\n\t\tread++;\n\t}\n\n\t// Pulling items from left to right, caching in a slot before writing\n\t// it into the new nodes.\n\tvar write = read;\n\tvar slot = new createNode(a.height - 1, 0);\n\tvar from = 0;\n\n\t// If the current slot is still containing data, then there will be at\n\t// least one more write, so we do not break this loop yet.\n\twhile (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove)\n\t{\n\t\t// Find out the max possible items for copying.\n\t\tvar source = get2(a.table, b.table, read);\n\t\tvar to = Math.min(M - slot.table.length, source.table.length);\n\n\t\t// Copy and adjust size table.\n\t\tslot.table = slot.table.concat(source.table.slice(from, to));\n\t\tif (slot.height > 0)\n\t\t{\n\t\t\tvar len = slot.lengths.length;\n\t\t\tfor (var i = len; i < len + to - from; i++)\n\t\t\t{\n\t\t\t\tslot.lengths[i] = length(slot.table[i]);\n\t\t\t\tslot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);\n\t\t\t}\n\t\t}\n\n\t\tfrom += to;\n\n\t\t// Only proceed to next slots[i] if the current one was\n\t\t// fully copied.\n\t\tif (source.table.length <= to)\n\t\t{\n\t\t\tread++; from = 0;\n\t\t}\n\n\t\t// Only create a new slot if the current one is filled up.\n\t\tif (slot.table.length === M)\n\t\t{\n\t\t\tsaveSlot(newA, newB, write, slot);\n\t\t\tslot = createNode(a.height - 1, 0);\n\t\t\twrite++;\n\t\t}\n\t}\n\n\t// Cleanup after the loop. Copy the last slot into the new nodes.\n\tif (slot.table.length > 0)\n\t{\n\t\tsaveSlot(newA, newB, write, slot);\n\t\twrite++;\n\t}\n\n\t// Shift the untouched slots to the left\n\twhile (read < a.table.length + b.table.length )\n\t{\n\t\tsaveSlot(newA, newB, write, get2(a.table, b.table, read));\n\t\tread++;\n\t\twrite++;\n\t}\n\n\treturn [newA, newB];\n}\n\n// Navigation functions\nfunction botRight(a)\n{\n\treturn a.table[a.table.length - 1];\n}\nfunction botLeft(a)\n{\n\treturn a.table[0];\n}\n\n// Copies a node for updating. Note that you should not use this if\n// only updating only one of \"table\" or \"lengths\" for performance reasons.\nfunction nodeCopy(a)\n{\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: a.table.slice()\n\t};\n\tif (a.height > 0)\n\t{\n\t\tnewA.lengths = a.lengths.slice();\n\t}\n\treturn newA;\n}\n\n// Returns how many items are in the tree.\nfunction length(array)\n{\n\tif (array.height === 0)\n\t{\n\t\treturn array.table.length;\n\t}\n\telse\n\t{\n\t\treturn array.lengths[array.lengths.length - 1];\n\t}\n}\n\n// Calculates in which slot of \"table\" the item probably is, then\n// find the exact slot via forward searching in \"lengths\". Returns the index.\nfunction getSlot(i, a)\n{\n\tvar slot = i >> (5 * a.height);\n\twhile (a.lengths[slot] <= i)\n\t{\n\t\tslot++;\n\t}\n\treturn slot;\n}\n\n// Recursively creates a tree with a given height containing\n// only the given item.\nfunction create(item, h)\n{\n\tif (h === 0)\n\t{\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: 0,\n\t\t\ttable: [item]\n\t\t};\n\t}\n\treturn {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: [create(item, h - 1)],\n\t\tlengths: [1]\n\t};\n}\n\n// Recursively creates a tree that contains the given tree.\nfunction parentise(tree, h)\n{\n\tif (h === tree.height)\n\t{\n\t\treturn tree;\n\t}\n\n\treturn {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: [parentise(tree, h - 1)],\n\t\tlengths: [length(tree)]\n\t};\n}\n\n// Emphasizes blood brotherhood beneath two trees.\nfunction siblise(a, b)\n{\n\treturn {\n\t\tctor: '_Array',\n\t\theight: a.height + 1,\n\t\ttable: [a, b],\n\t\tlengths: [length(a), length(a) + length(b)]\n\t};\n}\n\nfunction toJSArray(a)\n{\n\tvar jsArray = new Array(length(a));\n\ttoJSArray_(jsArray, 0, a);\n\treturn jsArray;\n}\n\nfunction toJSArray_(jsArray, i, a)\n{\n\tfor (var t = 0; t < a.table.length; t++)\n\t{\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tjsArray[i + t] = a.table[t];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar inc = t === 0 ? 0 : a.lengths[t - 1];\n\t\t\ttoJSArray_(jsArray, i + inc, a.table[t]);\n\t\t}\n\t}\n}\n\nfunction fromJSArray(jsArray)\n{\n\tif (jsArray.length === 0)\n\t{\n\t\treturn empty;\n\t}\n\tvar h = Math.floor(Math.log(jsArray.length) / Math.log(M));\n\treturn fromJSArray_(jsArray, h, 0, jsArray.length);\n}\n\nfunction fromJSArray_(jsArray, h, from, to)\n{\n\tif (h === 0)\n\t{\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: 0,\n\t\t\ttable: jsArray.slice(from, to)\n\t\t};\n\t}\n\n\tvar step = Math.pow(M, h);\n\tvar table = new Array(Math.ceil((to - from) / step));\n\tvar lengths = new Array(table.length);\n\tfor (var i = 0; i < table.length; i++)\n\t{\n\t\ttable[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));\n\t\tlengths[i] = length(table[i]) + (i > 0 ? lengths[i - 1] : 0);\n\t}\n\treturn {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: table,\n\t\tlengths: lengths\n\t};\n}\n\nreturn {\n\tempty: empty,\n\tfromList: fromList,\n\ttoList: toList,\n\tinitialize: F2(initialize),\n\tappend: F2(append),\n\tpush: F2(push),\n\tslice: F3(slice),\n\tget: F2(get),\n\tset: F3(set),\n\tmap: F2(map),\n\tindexedMap: F2(indexedMap),\n\tfoldl: F3(foldl),\n\tfoldr: F3(foldr),\n\tlength: length,\n\n\ttoJSArray: toJSArray,\n\tfromJSArray: fromJSArray\n};\n\n}();\n//import Native.Utils //\n\nvar _elm_lang$core$Native_Basics = function() {\n\nfunction div(a, b)\n{\n\treturn (a / b) | 0;\n}\nfunction rem(a, b)\n{\n\treturn a % b;\n}\nfunction mod(a, b)\n{\n\tif (b === 0)\n\t{\n\t\tthrow new Error('Cannot perform mod 0. Division by zero error.');\n\t}\n\tvar r = a % b;\n\tvar m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r + b) : -mod(-a, -b));\n\n\treturn m === b ? 0 : m;\n}\nfunction logBase(base, n)\n{\n\treturn Math.log(n) / Math.log(base);\n}\nfunction negate(n)\n{\n\treturn -n;\n}\nfunction abs(n)\n{\n\treturn n < 0 ? -n : n;\n}\n\nfunction min(a, b)\n{\n\treturn _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b;\n}\nfunction max(a, b)\n{\n\treturn _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b;\n}\nfunction clamp(lo, hi, n)\n{\n\treturn _elm_lang$core$Native_Utils.cmp(n, lo) < 0\n\t\t? lo\n\t\t: _elm_lang$core$Native_Utils.cmp(n, hi) > 0\n\t\t\t? hi\n\t\t\t: n;\n}\n\nvar ord = ['LT', 'EQ', 'GT'];\n\nfunction compare(x, y)\n{\n\treturn { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] };\n}\n\nfunction xor(a, b)\n{\n\treturn a !== b;\n}\nfunction not(b)\n{\n\treturn !b;\n}\nfunction isInfinite(n)\n{\n\treturn n === Infinity || n === -Infinity;\n}\n\nfunction truncate(n)\n{\n\treturn n | 0;\n}\n\nfunction degrees(d)\n{\n\treturn d * Math.PI / 180;\n}\nfunction turns(t)\n{\n\treturn 2 * Math.PI * t;\n}\nfunction fromPolar(point)\n{\n\tvar r = point._0;\n\tvar t = point._1;\n\treturn _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t));\n}\nfunction toPolar(point)\n{\n\tvar x = point._0;\n\tvar y = point._1;\n\treturn _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x));\n}\n\nreturn {\n\tdiv: F2(div),\n\trem: F2(rem),\n\tmod: F2(mod),\n\n\tpi: Math.PI,\n\te: Math.E,\n\tcos: Math.cos,\n\tsin: Math.sin,\n\ttan: Math.tan,\n\tacos: Math.acos,\n\tasin: Math.asin,\n\tatan: Math.atan,\n\tatan2: F2(Math.atan2),\n\n\tdegrees: degrees,\n\tturns: turns,\n\tfromPolar: fromPolar,\n\ttoPolar: toPolar,\n\n\tsqrt: Math.sqrt,\n\tlogBase: F2(logBase),\n\tnegate: negate,\n\tabs: abs,\n\tmin: F2(min),\n\tmax: F2(max),\n\tclamp: F3(clamp),\n\tcompare: F2(compare),\n\n\txor: F2(xor),\n\tnot: not,\n\n\ttruncate: truncate,\n\tceiling: Math.ceil,\n\tfloor: Math.floor,\n\tround: Math.round,\n\ttoFloat: function(x) { return x; },\n\tisNaN: isNaN,\n\tisInfinite: isInfinite\n};\n\n}();\n//import //\n\nvar _elm_lang$core$Native_Utils = function() {\n\n// COMPARISONS\n\nfunction eq(x, y)\n{\n\tvar stack = [];\n\tvar isEqual = eqHelp(x, y, 0, stack);\n\tvar pair;\n\twhile (isEqual && (pair = stack.pop()))\n\t{\n\t\tisEqual = eqHelp(pair.x, pair.y, 0, stack);\n\t}\n\treturn isEqual;\n}\n\n\nfunction eqHelp(x, y, depth, stack)\n{\n\tif (depth > 100)\n\t{\n\t\tstack.push({ x: x, y: y });\n\t\treturn true;\n\t}\n\n\tif (x === y)\n\t{\n\t\treturn true;\n\t}\n\n\tif (typeof x !== 'object')\n\t{\n\t\tif (typeof x === 'function')\n\t\t{\n\t\t\tthrow new Error(\n\t\t\t\t'Trying to use `(==)` on functions. There is no way to know if functions are \"the same\" in the Elm sense.'\n\t\t\t\t+ ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#=='\n\t\t\t\t+ ' which describes why it is this way and what the better version will look like.'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\n\tif (x === null || y === null)\n\t{\n\t\treturn false\n\t}\n\n\tif (x instanceof Date)\n\t{\n\t\treturn x.getTime() === y.getTime();\n\t}\n\n\tif (!('ctor' in x))\n\t{\n\t\tfor (var key in x)\n\t\t{\n\t\t\tif (!eqHelp(x[key], y[key], depth + 1, stack))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t// convert Dicts and Sets to lists\n\tif (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin')\n\t{\n\t\tx = _elm_lang$core$Dict$toList(x);\n\t\ty = _elm_lang$core$Dict$toList(y);\n\t}\n\tif (x.ctor === 'Set_elm_builtin')\n\t{\n\t\tx = _elm_lang$core$Set$toList(x);\n\t\ty = _elm_lang$core$Set$toList(y);\n\t}\n\n\t// check if lists are equal without recursion\n\tif (x.ctor === '::')\n\t{\n\t\tvar a = x;\n\t\tvar b = y;\n\t\twhile (a.ctor === '::' && b.ctor === '::')\n\t\t{\n\t\t\tif (!eqHelp(a._0, b._0, depth + 1, stack))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ta = a._1;\n\t\t\tb = b._1;\n\t\t}\n\t\treturn a.ctor === b.ctor;\n\t}\n\n\t// check if Arrays are equal\n\tif (x.ctor === '_Array')\n\t{\n\t\tvar xs = _elm_lang$core$Native_Array.toJSArray(x);\n\t\tvar ys = _elm_lang$core$Native_Array.toJSArray(y);\n\t\tif (xs.length !== ys.length)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tfor (var i = 0; i < xs.length; i++)\n\t\t{\n\t\t\tif (!eqHelp(xs[i], ys[i], depth + 1, stack))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (!eqHelp(x.ctor, y.ctor, depth + 1, stack))\n\t{\n\t\treturn false;\n\t}\n\n\tfor (var key in x)\n\t{\n\t\tif (!eqHelp(x[key], y[key], depth + 1, stack))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on\n// the particular integer values assigned to LT, EQ, and GT.\n\nvar LT = -1, EQ = 0, GT = 1;\n\nfunction cmp(x, y)\n{\n\tif (typeof x !== 'object')\n\t{\n\t\treturn x === y ? EQ : x < y ? LT : GT;\n\t}\n\n\tif (x instanceof String)\n\t{\n\t\tvar a = x.valueOf();\n\t\tvar b = y.valueOf();\n\t\treturn a === b ? EQ : a < b ? LT : GT;\n\t}\n\n\tif (x.ctor === '::' || x.ctor === '[]')\n\t{\n\t\twhile (x.ctor === '::' && y.ctor === '::')\n\t\t{\n\t\t\tvar ord = cmp(x._0, y._0);\n\t\t\tif (ord !== EQ)\n\t\t\t{\n\t\t\t\treturn ord;\n\t\t\t}\n\t\t\tx = x._1;\n\t\t\ty = y._1;\n\t\t}\n\t\treturn x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT;\n\t}\n\n\tif (x.ctor.slice(0, 6) === '_Tuple')\n\t{\n\t\tvar ord;\n\t\tvar n = x.ctor.slice(6) - 0;\n\t\tvar err = 'cannot compare tuples with more than 6 elements.';\n\t\tif (n === 0) return EQ;\n\t\tif (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;\n\t\tif (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;\n\t\tif (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;\n\t\tif (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;\n\t\tif (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;\n\t\tif (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;\n\t\tif (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }\n\t\treturn EQ;\n\t}\n\n\tthrow new Error(\n\t\t'Comparison error: comparison is only defined on ints, '\n\t\t+ 'floats, times, chars, strings, lists of comparable values, '\n\t\t+ 'and tuples of comparable values.'\n\t);\n}\n\n\n// COMMON VALUES\n\nvar Tuple0 = {\n\tctor: '_Tuple0'\n};\n\nfunction Tuple2(x, y)\n{\n\treturn {\n\t\tctor: '_Tuple2',\n\t\t_0: x,\n\t\t_1: y\n\t};\n}\n\nfunction chr(c)\n{\n\treturn new String(c);\n}\n\n\n// GUID\n\nvar count = 0;\nfunction guid(_)\n{\n\treturn count++;\n}\n\n\n// RECORDS\n\nfunction update(oldRecord, updatedFields)\n{\n\tvar newRecord = {};\n\n\tfor (var key in oldRecord)\n\t{\n\t\tnewRecord[key] = oldRecord[key];\n\t}\n\n\tfor (var key in updatedFields)\n\t{\n\t\tnewRecord[key] = updatedFields[key];\n\t}\n\n\treturn newRecord;\n}\n\n\n//// LIST STUFF ////\n\nvar Nil = { ctor: '[]' };\n\nfunction Cons(hd, tl)\n{\n\treturn {\n\t\tctor: '::',\n\t\t_0: hd,\n\t\t_1: tl\n\t};\n}\n\nfunction append(xs, ys)\n{\n\t// append Strings\n\tif (typeof xs === 'string')\n\t{\n\t\treturn xs + ys;\n\t}\n\n\t// append Lists\n\tif (xs.ctor === '[]')\n\t{\n\t\treturn ys;\n\t}\n\tvar root = Cons(xs._0, Nil);\n\tvar curr = root;\n\txs = xs._1;\n\twhile (xs.ctor !== '[]')\n\t{\n\t\tcurr._1 = Cons(xs._0, Nil);\n\t\txs = xs._1;\n\t\tcurr = curr._1;\n\t}\n\tcurr._1 = ys;\n\treturn root;\n}\n\n\n// CRASHES\n\nfunction crash(moduleName, region)\n{\n\treturn function(message) {\n\t\tthrow new Error(\n\t\t\t'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\\n'\n\t\t\t+ 'The message provided by the code author is:\\n\\n '\n\t\t\t+ message\n\t\t);\n\t};\n}\n\nfunction crashCase(moduleName, region, value)\n{\n\treturn function(message) {\n\t\tthrow new Error(\n\t\t\t'Ran into a `Debug.crash` in module `' + moduleName + '`\\n\\n'\n\t\t\t+ 'This was caused by the `case` expression ' + regionToString(region) + '.\\n'\n\t\t\t+ 'One of the branches ended with a crash and the following value got through:\\n\\n ' + toString(value) + '\\n\\n'\n\t\t\t+ 'The message provided by the code author is:\\n\\n '\n\t\t\t+ message\n\t\t);\n\t};\n}\n\nfunction regionToString(region)\n{\n\tif (region.start.line == region.end.line)\n\t{\n\t\treturn 'on line ' + region.start.line;\n\t}\n\treturn 'between lines ' + region.start.line + ' and ' + region.end.line;\n}\n\n\n// TO STRING\n\nfunction toString(v)\n{\n\tvar type = typeof v;\n\tif (type === 'function')\n\t{\n\t\treturn '<function>';\n\t}\n\n\tif (type === 'boolean')\n\t{\n\t\treturn v ? 'True' : 'False';\n\t}\n\n\tif (type === 'number')\n\t{\n\t\treturn v + '';\n\t}\n\n\tif (v instanceof String)\n\t{\n\t\treturn '\\'' + addSlashes(v, true) + '\\'';\n\t}\n\n\tif (type === 'string')\n\t{\n\t\treturn '\"' + addSlashes(v, false) + '\"';\n\t}\n\n\tif (v === null)\n\t{\n\t\treturn 'null';\n\t}\n\n\tif (type === 'object' && 'ctor' in v)\n\t{\n\t\tvar ctorStarter = v.ctor.substring(0, 5);\n\n\t\tif (ctorStarter === '_Tupl')\n\t\t{\n\t\t\tvar output = [];\n\t\t\tfor (var k in v)\n\t\t\t{\n\t\t\t\tif (k === 'ctor') continue;\n\t\t\t\toutput.push(toString(v[k]));\n\t\t\t}\n\t\t\treturn '(' + output.join(',') + ')';\n\t\t}\n\n\t\tif (ctorStarter === '_Task')\n\t\t{\n\t\t\treturn '<task>'\n\t\t}\n\n\t\tif (v.ctor === '_Array')\n\t\t{\n\t\t\tvar list = _elm_lang$core$Array$toList(v);\n\t\t\treturn 'Array.fromList ' + toString(list);\n\t\t}\n\n\t\tif (v.ctor === '<decoder>')\n\t\t{\n\t\t\treturn '<decoder>';\n\t\t}\n\n\t\tif (v.ctor === '_Process')\n\t\t{\n\t\t\treturn '<process:' + v.id + '>';\n\t\t}\n\n\t\tif (v.ctor === '::')\n\t\t{\n\t\t\tvar output = '[' + toString(v._0);\n\t\t\tv = v._1;\n\t\t\twhile (v.ctor === '::')\n\t\t\t{\n\t\t\t\toutput += ',' + toString(v._0);\n\t\t\t\tv = v._1;\n\t\t\t}\n\t\t\treturn output + ']';\n\t\t}\n\n\t\tif (v.ctor === '[]')\n\t\t{\n\t\t\treturn '[]';\n\t\t}\n\n\t\tif (v.ctor === 'Set_elm_builtin')\n\t\t{\n\t\t\treturn 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v));\n\t\t}\n\n\t\tif (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin')\n\t\t{\n\t\t\treturn 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v));\n\t\t}\n\n\t\tvar output = '';\n\t\tfor (var i in v)\n\t\t{\n\t\t\tif (i === 'ctor') continue;\n\t\t\tvar str = toString(v[i]);\n\t\t\tvar c0 = str[0];\n\t\t\tvar parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '\"' || str.indexOf(' ') < 0;\n\t\t\toutput += ' ' + (parenless ? str : '(' + str + ')');\n\t\t}\n\t\treturn v.ctor + output;\n\t}\n\n\tif (type === 'object')\n\t{\n\t\tif (v instanceof Date)\n\t\t{\n\t\t\treturn '<' + v.toString() + '>';\n\t\t}\n\n\t\tif (v.elm_web_socket)\n\t\t{\n\t\t\treturn '<websocket>';\n\t\t}\n\n\t\tvar output = [];\n\t\tfor (var k in v)\n\t\t{\n\t\t\toutput.push(k + ' = ' + toString(v[k]));\n\t\t}\n\t\tif (output.length === 0)\n\t\t{\n\t\t\treturn '{}';\n\t\t}\n\t\treturn '{ ' + output.join(', ') + ' }';\n\t}\n\n\treturn '<internal structure>';\n}\n\nfunction addSlashes(str, isChar)\n{\n\tvar s = str.replace(/\\\\/g, '\\\\\\\\')\n\t\t\t .replace(/\\n/g, '\\\\n')\n\t\t\t .replace(/\\t/g, '\\\\t')\n\t\t\t .replace(/\\r/g, '\\\\r')\n\t\t\t .replace(/\\v/g, '\\\\v')\n\t\t\t .replace(/\\0/g, '\\\\0');\n\tif (isChar)\n\t{\n\t\treturn s.replace(/\\'/g, '\\\\\\'');\n\t}\n\telse\n\t{\n\t\treturn s.replace(/\\\"/g, '\\\\\"');\n\t}\n}\n\n\nreturn {\n\teq: eq,\n\tcmp: cmp,\n\tTuple0: Tuple0,\n\tTuple2: Tuple2,\n\tchr: chr,\n\tupdate: update,\n\tguid: guid,\n\n\tappend: F2(append),\n\n\tcrash: crash,\n\tcrashCase: crashCase,\n\n\ttoString: toString\n};\n\n}();\nvar _elm_lang$core$Basics$never = function (_p0) {\n\tnever:\n\twhile (true) {\n\t\tvar _p1 = _p0;\n\t\tvar _v1 = _p1._0;\n\t\t_p0 = _v1;\n\t\tcontinue never;\n\t}\n};\nvar _elm_lang$core$Basics$uncurry = F2(\n\tfunction (f, _p2) {\n\t\tvar _p3 = _p2;\n\t\treturn A2(f, _p3._0, _p3._1);\n\t});\nvar _elm_lang$core$Basics$curry = F3(\n\tfunction (f, a, b) {\n\t\treturn f(\n\t\t\t{ctor: '_Tuple2', _0: a, _1: b});\n\t});\nvar _elm_lang$core$Basics$flip = F3(\n\tfunction (f, b, a) {\n\t\treturn A2(f, a, b);\n\t});\nvar _elm_lang$core$Basics$always = F2(\n\tfunction (a, _p4) {\n\t\treturn a;\n\t});\nvar _elm_lang$core$Basics$identity = function (x) {\n\treturn x;\n};\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['<|'] = F2(\n\tfunction (f, x) {\n\t\treturn f(x);\n\t});\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['|>'] = F2(\n\tfunction (x, f) {\n\t\treturn f(x);\n\t});\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['>>'] = F3(\n\tfunction (f, g, x) {\n\t\treturn g(\n\t\t\tf(x));\n\t});\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['<<'] = F3(\n\tfunction (g, f, x) {\n\t\treturn g(\n\t\t\tf(x));\n\t});\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append;\nvar _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString;\nvar _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite;\nvar _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN;\nvar _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat;\nvar _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling;\nvar _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor;\nvar _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate;\nvar _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round;\nvar _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not;\nvar _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and;\nvar _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max;\nvar _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min;\nvar _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq;\nvar _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e;\nvar _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi;\nvar _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp;\nvar _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase;\nvar _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs;\nvar _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate;\nvar _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt;\nvar _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2;\nvar _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan;\nvar _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin;\nvar _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos;\nvar _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan;\nvar _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin;\nvar _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod;\nvar _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add;\nvar _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar;\nvar _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar;\nvar _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns;\nvar _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees;\nvar _elm_lang$core$Basics$radians = function (t) {\n\treturn t;\n};\nvar _elm_lang$core$Basics$GT = {ctor: 'GT'};\nvar _elm_lang$core$Basics$EQ = {ctor: 'EQ'};\nvar _elm_lang$core$Basics$LT = {ctor: 'LT'};\nvar _elm_lang$core$Basics$JustOneMore = function (a) {\n\treturn {ctor: 'JustOneMore', _0: a};\n};\n\nvar _elm_lang$core$Maybe$withDefault = F2(\n\tfunction ($default, maybe) {\n\t\tvar _p0 = maybe;\n\t\tif (_p0.ctor === 'Just') {\n\t\t\treturn _p0._0;\n\t\t} else {\n\t\t\treturn $default;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'};\nvar _elm_lang$core$Maybe$andThen = F2(\n\tfunction (callback, maybeValue) {\n\t\tvar _p1 = maybeValue;\n\t\tif (_p1.ctor === 'Just') {\n\t\t\treturn callback(_p1._0);\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$Just = function (a) {\n\treturn {ctor: 'Just', _0: a};\n};\nvar _elm_lang$core$Maybe$map = F2(\n\tfunction (f, maybe) {\n\t\tvar _p2 = maybe;\n\t\tif (_p2.ctor === 'Just') {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tf(_p2._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$map2 = F3(\n\tfunction (func, ma, mb) {\n\t\tvar _p3 = {ctor: '_Tuple2', _0: ma, _1: mb};\n\t\tif (((_p3.ctor === '_Tuple2') && (_p3._0.ctor === 'Just')) && (_p3._1.ctor === 'Just')) {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tA2(func, _p3._0._0, _p3._1._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$map3 = F4(\n\tfunction (func, ma, mb, mc) {\n\t\tvar _p4 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc};\n\t\tif ((((_p4.ctor === '_Tuple3') && (_p4._0.ctor === 'Just')) && (_p4._1.ctor === 'Just')) && (_p4._2.ctor === 'Just')) {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tA3(func, _p4._0._0, _p4._1._0, _p4._2._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$map4 = F5(\n\tfunction (func, ma, mb, mc, md) {\n\t\tvar _p5 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md};\n\t\tif (((((_p5.ctor === '_Tuple4') && (_p5._0.ctor === 'Just')) && (_p5._1.ctor === 'Just')) && (_p5._2.ctor === 'Just')) && (_p5._3.ctor === 'Just')) {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tA4(func, _p5._0._0, _p5._1._0, _p5._2._0, _p5._3._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$map5 = F6(\n\tfunction (func, ma, mb, mc, md, me) {\n\t\tvar _p6 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me};\n\t\tif ((((((_p6.ctor === '_Tuple5') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) && (_p6._2.ctor === 'Just')) && (_p6._3.ctor === 'Just')) && (_p6._4.ctor === 'Just')) {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tA5(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0, _p6._4._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\n\n//import Native.Utils //\n\nvar _elm_lang$core$Native_List = function() {\n\nvar Nil = { ctor: '[]' };\n\nfunction Cons(hd, tl)\n{\n\treturn { ctor: '::', _0: hd, _1: tl };\n}\n\nfunction fromArray(arr)\n{\n\tvar out = Nil;\n\tfor (var i = arr.length; i--; )\n\t{\n\t\tout = Cons(arr[i], out);\n\t}\n\treturn out;\n}\n\nfunction toArray(xs)\n{\n\tvar out = [];\n\twhile (xs.ctor !== '[]')\n\t{\n\t\tout.push(xs._0);\n\t\txs = xs._1;\n\t}\n\treturn out;\n}\n\nfunction foldr(f, b, xs)\n{\n\tvar arr = toArray(xs);\n\tvar acc = b;\n\tfor (var i = arr.length; i--; )\n\t{\n\t\tacc = A2(f, arr[i], acc);\n\t}\n\treturn acc;\n}\n\nfunction map2(f, xs, ys)\n{\n\tvar arr = [];\n\twhile (xs.ctor !== '[]' && ys.ctor !== '[]')\n\t{\n\t\tarr.push(A2(f, xs._0, ys._0));\n\t\txs = xs._1;\n\t\tys = ys._1;\n\t}\n\treturn fromArray(arr);\n}\n\nfunction map3(f, xs, ys, zs)\n{\n\tvar arr = [];\n\twhile (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]')\n\t{\n\t\tarr.push(A3(f, xs._0, ys._0, zs._0));\n\t\txs = xs._1;\n\t\tys = ys._1;\n\t\tzs = zs._1;\n\t}\n\treturn fromArray(arr);\n}\n\nfunction map4(f, ws, xs, ys, zs)\n{\n\tvar arr = [];\n\twhile ( ws.ctor !== '[]'\n\t\t && xs.ctor !== '[]'\n\t\t && ys.ctor !== '[]'\n\t\t && zs.ctor !== '[]')\n\t{\n\t\tarr.push(A4(f, ws._0, xs._0, ys._0, zs._0));\n\t\tws = ws._1;\n\t\txs = xs._1;\n\t\tys = ys._1;\n\t\tzs = zs._1;\n\t}\n\treturn fromArray(arr);\n}\n\nfunction map5(f, vs, ws, xs, ys, zs)\n{\n\tvar arr = [];\n\twhile ( vs.ctor !== '[]'\n\t\t && ws.ctor !== '[]'\n\t\t && xs.ctor !== '[]'\n\t\t && ys.ctor !== '[]'\n\t\t && zs.ctor !== '[]')\n\t{\n\t\tarr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0));\n\t\tvs = vs._1;\n\t\tws = ws._1;\n\t\txs = xs._1;\n\t\tys = ys._1;\n\t\tzs = zs._1;\n\t}\n\treturn fromArray(arr);\n}\n\nfunction sortBy(f, xs)\n{\n\treturn fromArray(toArray(xs).sort(function(a, b) {\n\t\treturn _elm_lang$core$Native_Utils.cmp(f(a), f(b));\n\t}));\n}\n\nfunction sortWith(f, xs)\n{\n\treturn fromArray(toArray(xs).sort(function(a, b) {\n\t\tvar ord = f(a)(b).ctor;\n\t\treturn ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;\n\t}));\n}\n\nreturn {\n\tNil: Nil,\n\tCons: Cons,\n\tcons: F2(Cons),\n\ttoArray: toArray,\n\tfromArray: fromArray,\n\n\tfoldr: F3(foldr),\n\n\tmap2: F3(map2),\n\tmap3: F4(map3),\n\tmap4: F5(map4),\n\tmap5: F6(map5),\n\tsortBy: F2(sortBy),\n\tsortWith: F2(sortWith)\n};\n\n}();\nvar _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith;\nvar _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy;\nvar _elm_lang$core$List$sort = function (xs) {\n\treturn A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs);\n};\nvar _elm_lang$core$List$singleton = function (value) {\n\treturn {\n\t\tctor: '::',\n\t\t_0: value,\n\t\t_1: {ctor: '[]'}\n\t};\n};\nvar _elm_lang$core$List$drop = F2(\n\tfunction (n, list) {\n\t\tdrop:\n\t\twhile (true) {\n\t\t\tif (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {\n\t\t\t\treturn list;\n\t\t\t} else {\n\t\t\t\tvar _p0 = list;\n\t\t\t\tif (_p0.ctor === '[]') {\n\t\t\t\t\treturn list;\n\t\t\t\t} else {\n\t\t\t\t\tvar _v1 = n - 1,\n\t\t\t\t\t\t_v2 = _p0._1;\n\t\t\t\t\tn = _v1;\n\t\t\t\t\tlist = _v2;\n\t\t\t\t\tcontinue drop;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5;\nvar _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4;\nvar _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3;\nvar _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2;\nvar _elm_lang$core$List$any = F2(\n\tfunction (isOkay, list) {\n\t\tany:\n\t\twhile (true) {\n\t\t\tvar _p1 = list;\n\t\t\tif (_p1.ctor === '[]') {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tif (isOkay(_p1._0)) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\tvar _v4 = isOkay,\n\t\t\t\t\t\t_v5 = _p1._1;\n\t\t\t\t\tisOkay = _v4;\n\t\t\t\t\tlist = _v5;\n\t\t\t\t\tcontinue any;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$all = F2(\n\tfunction (isOkay, list) {\n\t\treturn !A2(\n\t\t\t_elm_lang$core$List$any,\n\t\t\tfunction (_p2) {\n\t\t\t\treturn !isOkay(_p2);\n\t\t\t},\n\t\t\tlist);\n\t});\nvar _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr;\nvar _elm_lang$core$List$foldl = F3(\n\tfunction (func, acc, list) {\n\t\tfoldl:\n\t\twhile (true) {\n\t\t\tvar _p3 = list;\n\t\t\tif (_p3.ctor === '[]') {\n\t\t\t\treturn acc;\n\t\t\t} else {\n\t\t\t\tvar _v7 = func,\n\t\t\t\t\t_v8 = A2(func, _p3._0, acc),\n\t\t\t\t\t_v9 = _p3._1;\n\t\t\t\tfunc = _v7;\n\t\t\t\tacc = _v8;\n\t\t\t\tlist = _v9;\n\t\t\t\tcontinue foldl;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$length = function (xs) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (_p4, i) {\n\t\t\t\treturn i + 1;\n\t\t\t}),\n\t\t0,\n\t\txs);\n};\nvar _elm_lang$core$List$sum = function (numbers) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (x, y) {\n\t\t\t\treturn x + y;\n\t\t\t}),\n\t\t0,\n\t\tnumbers);\n};\nvar _elm_lang$core$List$product = function (numbers) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (x, y) {\n\t\t\t\treturn x * y;\n\t\t\t}),\n\t\t1,\n\t\tnumbers);\n};\nvar _elm_lang$core$List$maximum = function (list) {\n\tvar _p5 = list;\n\tif (_p5.ctor === '::') {\n\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\tA3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1));\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$List$minimum = function (list) {\n\tvar _p6 = list;\n\tif (_p6.ctor === '::') {\n\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\tA3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1));\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$List$member = F2(\n\tfunction (x, xs) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$List$any,\n\t\t\tfunction (a) {\n\t\t\t\treturn _elm_lang$core$Native_Utils.eq(a, x);\n\t\t\t},\n\t\t\txs);\n\t});\nvar _elm_lang$core$List$isEmpty = function (xs) {\n\tvar _p7 = xs;\n\tif (_p7.ctor === '[]') {\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\nvar _elm_lang$core$List$tail = function (list) {\n\tvar _p8 = list;\n\tif (_p8.ctor === '::') {\n\t\treturn _elm_lang$core$Maybe$Just(_p8._1);\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$List$head = function (list) {\n\tvar _p9 = list;\n\tif (_p9.ctor === '::') {\n\t\treturn _elm_lang$core$Maybe$Just(_p9._0);\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$List_ops = _elm_lang$core$List_ops || {};\n_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons;\nvar _elm_lang$core$List$map = F2(\n\tfunction (f, xs) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldr,\n\t\t\tF2(\n\t\t\t\tfunction (x, acc) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: f(x),\n\t\t\t\t\t\t_1: acc\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t{ctor: '[]'},\n\t\t\txs);\n\t});\nvar _elm_lang$core$List$filter = F2(\n\tfunction (pred, xs) {\n\t\tvar conditionalCons = F2(\n\t\t\tfunction (front, back) {\n\t\t\t\treturn pred(front) ? {ctor: '::', _0: front, _1: back} : back;\n\t\t\t});\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldr,\n\t\t\tconditionalCons,\n\t\t\t{ctor: '[]'},\n\t\t\txs);\n\t});\nvar _elm_lang$core$List$maybeCons = F3(\n\tfunction (f, mx, xs) {\n\t\tvar _p10 = f(mx);\n\t\tif (_p10.ctor === 'Just') {\n\t\t\treturn {ctor: '::', _0: _p10._0, _1: xs};\n\t\t} else {\n\t\t\treturn xs;\n\t\t}\n\t});\nvar _elm_lang$core$List$filterMap = F2(\n\tfunction (f, xs) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldr,\n\t\t\t_elm_lang$core$List$maybeCons(f),\n\t\t\t{ctor: '[]'},\n\t\t\txs);\n\t});\nvar _elm_lang$core$List$reverse = function (list) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (x, y) {\n\t\t\t\treturn {ctor: '::', _0: x, _1: y};\n\t\t\t}),\n\t\t{ctor: '[]'},\n\t\tlist);\n};\nvar _elm_lang$core$List$scanl = F3(\n\tfunction (f, b, xs) {\n\t\tvar scan1 = F2(\n\t\t\tfunction (x, accAcc) {\n\t\t\t\tvar _p11 = accAcc;\n\t\t\t\tif (_p11.ctor === '::') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: A2(f, x, _p11._0),\n\t\t\t\t\t\t_1: accAcc\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\treturn {ctor: '[]'};\n\t\t\t\t}\n\t\t\t});\n\t\treturn _elm_lang$core$List$reverse(\n\t\t\tA3(\n\t\t\t\t_elm_lang$core$List$foldl,\n\t\t\t\tscan1,\n\t\t\t\t{\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: b,\n\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t},\n\t\t\t\txs));\n\t});\nvar _elm_lang$core$List$append = F2(\n\tfunction (xs, ys) {\n\t\tvar _p12 = ys;\n\t\tif (_p12.ctor === '[]') {\n\t\t\treturn xs;\n\t\t} else {\n\t\t\treturn A3(\n\t\t\t\t_elm_lang$core$List$foldr,\n\t\t\t\tF2(\n\t\t\t\t\tfunction (x, y) {\n\t\t\t\t\t\treturn {ctor: '::', _0: x, _1: y};\n\t\t\t\t\t}),\n\t\t\t\tys,\n\t\t\t\txs);\n\t\t}\n\t});\nvar _elm_lang$core$List$concat = function (lists) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldr,\n\t\t_elm_lang$core$List$append,\n\t\t{ctor: '[]'},\n\t\tlists);\n};\nvar _elm_lang$core$List$concatMap = F2(\n\tfunction (f, list) {\n\t\treturn _elm_lang$core$List$concat(\n\t\t\tA2(_elm_lang$core$List$map, f, list));\n\t});\nvar _elm_lang$core$List$partition = F2(\n\tfunction (pred, list) {\n\t\tvar step = F2(\n\t\t\tfunction (x, _p13) {\n\t\t\t\tvar _p14 = _p13;\n\t\t\t\tvar _p16 = _p14._0;\n\t\t\t\tvar _p15 = _p14._1;\n\t\t\t\treturn pred(x) ? {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: {ctor: '::', _0: x, _1: _p16},\n\t\t\t\t\t_1: _p15\n\t\t\t\t} : {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: _p16,\n\t\t\t\t\t_1: {ctor: '::', _0: x, _1: _p15}\n\t\t\t\t};\n\t\t\t});\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldr,\n\t\t\tstep,\n\t\t\t{\n\t\t\t\tctor: '_Tuple2',\n\t\t\t\t_0: {ctor: '[]'},\n\t\t\t\t_1: {ctor: '[]'}\n\t\t\t},\n\t\t\tlist);\n\t});\nvar _elm_lang$core$List$unzip = function (pairs) {\n\tvar step = F2(\n\t\tfunction (_p18, _p17) {\n\t\t\tvar _p19 = _p18;\n\t\t\tvar _p20 = _p17;\n\t\t\treturn {\n\t\t\t\tctor: '_Tuple2',\n\t\t\t\t_0: {ctor: '::', _0: _p19._0, _1: _p20._0},\n\t\t\t\t_1: {ctor: '::', _0: _p19._1, _1: _p20._1}\n\t\t\t};\n\t\t});\n\treturn A3(\n\t\t_elm_lang$core$List$foldr,\n\t\tstep,\n\t\t{\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: {ctor: '[]'},\n\t\t\t_1: {ctor: '[]'}\n\t\t},\n\t\tpairs);\n};\nvar _elm_lang$core$List$intersperse = F2(\n\tfunction (sep, xs) {\n\t\tvar _p21 = xs;\n\t\tif (_p21.ctor === '[]') {\n\t\t\treturn {ctor: '[]'};\n\t\t} else {\n\t\t\tvar step = F2(\n\t\t\t\tfunction (x, rest) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: sep,\n\t\t\t\t\t\t_1: {ctor: '::', _0: x, _1: rest}\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\tvar spersed = A3(\n\t\t\t\t_elm_lang$core$List$foldr,\n\t\t\t\tstep,\n\t\t\t\t{ctor: '[]'},\n\t\t\t\t_p21._1);\n\t\t\treturn {ctor: '::', _0: _p21._0, _1: spersed};\n\t\t}\n\t});\nvar _elm_lang$core$List$takeReverse = F3(\n\tfunction (n, list, taken) {\n\t\ttakeReverse:\n\t\twhile (true) {\n\t\t\tif (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {\n\t\t\t\treturn taken;\n\t\t\t} else {\n\t\t\t\tvar _p22 = list;\n\t\t\t\tif (_p22.ctor === '[]') {\n\t\t\t\t\treturn taken;\n\t\t\t\t} else {\n\t\t\t\t\tvar _v23 = n - 1,\n\t\t\t\t\t\t_v24 = _p22._1,\n\t\t\t\t\t\t_v25 = {ctor: '::', _0: _p22._0, _1: taken};\n\t\t\t\t\tn = _v23;\n\t\t\t\t\tlist = _v24;\n\t\t\t\t\ttaken = _v25;\n\t\t\t\t\tcontinue takeReverse;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$takeTailRec = F2(\n\tfunction (n, list) {\n\t\treturn _elm_lang$core$List$reverse(\n\t\t\tA3(\n\t\t\t\t_elm_lang$core$List$takeReverse,\n\t\t\t\tn,\n\t\t\t\tlist,\n\t\t\t\t{ctor: '[]'}));\n\t});\nvar _elm_lang$core$List$takeFast = F3(\n\tfunction (ctr, n, list) {\n\t\tif (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {\n\t\t\treturn {ctor: '[]'};\n\t\t} else {\n\t\t\tvar _p23 = {ctor: '_Tuple2', _0: n, _1: list};\n\t\t\t_v26_5:\n\t\t\tdo {\n\t\t\t\t_v26_1:\n\t\t\t\tdo {\n\t\t\t\t\tif (_p23.ctor === '_Tuple2') {\n\t\t\t\t\t\tif (_p23._1.ctor === '[]') {\n\t\t\t\t\t\t\treturn list;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (_p23._1._1.ctor === '::') {\n\t\t\t\t\t\t\t\tswitch (_p23._0) {\n\t\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\t\tbreak _v26_1;\n\t\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._0,\n\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._1._0,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\t\tif (_p23._1._1._1.ctor === '::') {\n\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._0,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._1._0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._1._1._0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tbreak _v26_5;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tif ((_p23._1._1._1.ctor === '::') && (_p23._1._1._1._1.ctor === '::')) {\n\t\t\t\t\t\t\t\t\t\t\tvar _p28 = _p23._1._1._1._0;\n\t\t\t\t\t\t\t\t\t\t\tvar _p27 = _p23._1._1._0;\n\t\t\t\t\t\t\t\t\t\t\tvar _p26 = _p23._1._0;\n\t\t\t\t\t\t\t\t\t\t\tvar _p25 = _p23._1._1._1._1._0;\n\t\t\t\t\t\t\t\t\t\t\tvar _p24 = _p23._1._1._1._1._1;\n\t\t\t\t\t\t\t\t\t\t\treturn (_elm_lang$core$Native_Utils.cmp(ctr, 1000) > 0) ? {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: _p26,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p27,\n\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p28,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p25,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: A2(_elm_lang$core$List$takeTailRec, n - 4, _p24)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} : {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: _p26,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p27,\n\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p28,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p25,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: A3(_elm_lang$core$List$takeFast, ctr + 1, n - 4, _p24)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tbreak _v26_5;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (_p23._0 === 1) {\n\t\t\t\t\t\t\t\t\tbreak _v26_1;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbreak _v26_5;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak _v26_5;\n\t\t\t\t\t}\n\t\t\t\t} while(false);\n\t\t\t\treturn {\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: _p23._1._0,\n\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t};\n\t\t\t} while(false);\n\t\t\treturn list;\n\t\t}\n\t});\nvar _elm_lang$core$List$take = F2(\n\tfunction (n, list) {\n\t\treturn A3(_elm_lang$core$List$takeFast, 0, n, list);\n\t});\nvar _elm_lang$core$List$repeatHelp = F3(\n\tfunction (result, n, value) {\n\t\trepeatHelp:\n\t\twhile (true) {\n\t\t\tif (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tvar _v27 = {ctor: '::', _0: value, _1: result},\n\t\t\t\t\t_v28 = n - 1,\n\t\t\t\t\t_v29 = value;\n\t\t\t\tresult = _v27;\n\t\t\t\tn = _v28;\n\t\t\t\tvalue = _v29;\n\t\t\t\tcontinue repeatHelp;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$repeat = F2(\n\tfunction (n, value) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$repeatHelp,\n\t\t\t{ctor: '[]'},\n\t\t\tn,\n\t\t\tvalue);\n\t});\nvar _elm_lang$core$List$rangeHelp = F3(\n\tfunction (lo, hi, list) {\n\t\trangeHelp:\n\t\twhile (true) {\n\t\t\tif (_elm_lang$core$Native_Utils.cmp(lo, hi) < 1) {\n\t\t\t\tvar _v30 = lo,\n\t\t\t\t\t_v31 = hi - 1,\n\t\t\t\t\t_v32 = {ctor: '::', _0: hi, _1: list};\n\t\t\t\tlo = _v30;\n\t\t\t\thi = _v31;\n\t\t\t\tlist = _v32;\n\t\t\t\tcontinue rangeHelp;\n\t\t\t} else {\n\t\t\t\treturn list;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$range = F2(\n\tfunction (lo, hi) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$rangeHelp,\n\t\t\tlo,\n\t\t\thi,\n\t\t\t{ctor: '[]'});\n\t});\nvar _elm_lang$core$List$indexedMap = F2(\n\tfunction (f, xs) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$map2,\n\t\t\tf,\n\t\t\tA2(\n\t\t\t\t_elm_lang$core$List$range,\n\t\t\t\t0,\n\t\t\t\t_elm_lang$core$List$length(xs) - 1),\n\t\t\txs);\n\t});\n\nvar _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append;\nvar _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length;\nvar _elm_lang$core$Array$isEmpty = function (array) {\n\treturn _elm_lang$core$Native_Utils.eq(\n\t\t_elm_lang$core$Array$length(array),\n\t\t0);\n};\nvar _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice;\nvar _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set;\nvar _elm_lang$core$Array$get = F2(\n\tfunction (i, array) {\n\t\treturn ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp(\n\t\t\ti,\n\t\t\t_elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just(\n\t\t\tA2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing;\n\t});\nvar _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push;\nvar _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty;\nvar _elm_lang$core$Array$filter = F2(\n\tfunction (isOkay, arr) {\n\t\tvar update = F2(\n\t\t\tfunction (x, xs) {\n\t\t\t\treturn isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs;\n\t\t\t});\n\t\treturn A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr);\n\t});\nvar _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr;\nvar _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl;\nvar _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap;\nvar _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map;\nvar _elm_lang$core$Array$toIndexedList = function (array) {\n\treturn A3(\n\t\t_elm_lang$core$List$map2,\n\t\tF2(\n\t\t\tfunction (v0, v1) {\n\t\t\t\treturn {ctor: '_Tuple2', _0: v0, _1: v1};\n\t\t\t}),\n\t\tA2(\n\t\t\t_elm_lang$core$List$range,\n\t\t\t0,\n\t\t\t_elm_lang$core$Native_Array.length(array) - 1),\n\t\t_elm_lang$core$Native_Array.toList(array));\n};\nvar _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList;\nvar _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList;\nvar _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize;\nvar _elm_lang$core$Array$repeat = F2(\n\tfunction (n, e) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Array$initialize,\n\t\t\tn,\n\t\t\t_elm_lang$core$Basics$always(e));\n\t});\nvar _elm_lang$core$Array$Array = {ctor: 'Array'};\n\n//import Native.Utils //\n\nvar _elm_lang$core$Native_Char = function() {\n\nreturn {\n\tfromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); },\n\ttoCode: function(c) { return c.charCodeAt(0); },\n\ttoUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); },\n\ttoLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); },\n\ttoLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); },\n\ttoLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); }\n};\n\n}();\nvar _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode;\nvar _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode;\nvar _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower;\nvar _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper;\nvar _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower;\nvar _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper;\nvar _elm_lang$core$Char$isBetween = F3(\n\tfunction (low, high, $char) {\n\t\tvar code = _elm_lang$core$Char$toCode($char);\n\t\treturn (_elm_lang$core$Native_Utils.cmp(\n\t\t\tcode,\n\t\t\t_elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp(\n\t\t\tcode,\n\t\t\t_elm_lang$core$Char$toCode(high)) < 1);\n\t});\nvar _elm_lang$core$Char$isUpper = A2(\n\t_elm_lang$core$Char$isBetween,\n\t_elm_lang$core$Native_Utils.chr('A'),\n\t_elm_lang$core$Native_Utils.chr('Z'));\nvar _elm_lang$core$Char$isLower = A2(\n\t_elm_lang$core$Char$isBetween,\n\t_elm_lang$core$Native_Utils.chr('a'),\n\t_elm_lang$core$Native_Utils.chr('z'));\nvar _elm_lang$core$Char$isDigit = A2(\n\t_elm_lang$core$Char$isBetween,\n\t_elm_lang$core$Native_Utils.chr('0'),\n\t_elm_lang$core$Native_Utils.chr('9'));\nvar _elm_lang$core$Char$isOctDigit = A2(\n\t_elm_lang$core$Char$isBetween,\n\t_elm_lang$core$Native_Utils.chr('0'),\n\t_elm_lang$core$Native_Utils.chr('7'));\nvar _elm_lang$core$Char$isHexDigit = function ($char) {\n\treturn _elm_lang$core$Char$isDigit($char) || (A3(\n\t\t_elm_lang$core$Char$isBetween,\n\t\t_elm_lang$core$Native_Utils.chr('a'),\n\t\t_elm_lang$core$Native_Utils.chr('f'),\n\t\t$char) || A3(\n\t\t_elm_lang$core$Char$isBetween,\n\t\t_elm_lang$core$Native_Utils.chr('A'),\n\t\t_elm_lang$core$Native_Utils.chr('F'),\n\t\t$char));\n};\n\n//import Native.Utils //\n\nvar _elm_lang$core$Native_Scheduler = function() {\n\nvar MAX_STEPS = 10000;\n\n\n// TASKS\n\nfunction succeed(value)\n{\n\treturn {\n\t\tctor: '_Task_succeed',\n\t\tvalue: value\n\t};\n}\n\nfunction fail(error)\n{\n\treturn {\n\t\tctor: '_Task_fail',\n\t\tvalue: error\n\t};\n}\n\nfunction nativeBinding(callback)\n{\n\treturn {\n\t\tctor: '_Task_nativeBinding',\n\t\tcallback: callback,\n\t\tcancel: null\n\t};\n}\n\nfunction andThen(callback, task)\n{\n\treturn {\n\t\tctor: '_Task_andThen',\n\t\tcallback: callback,\n\t\ttask: task\n\t};\n}\n\nfunction onError(callback, task)\n{\n\treturn {\n\t\tctor: '_Task_onError',\n\t\tcallback: callback,\n\t\ttask: task\n\t};\n}\n\nfunction receive(callback)\n{\n\treturn {\n\t\tctor: '_Task_receive',\n\t\tcallback: callback\n\t};\n}\n\n\n// PROCESSES\n\nfunction rawSpawn(task)\n{\n\tvar process = {\n\t\tctor: '_Process',\n\t\tid: _elm_lang$core$Native_Utils.guid(),\n\t\troot: task,\n\t\tstack: null,\n\t\tmailbox: []\n\t};\n\n\tenqueue(process);\n\n\treturn process;\n}\n\nfunction spawn(task)\n{\n\treturn nativeBinding(function(callback) {\n\t\tvar process = rawSpawn(task);\n\t\tcallback(succeed(process));\n\t});\n}\n\nfunction rawSend(process, msg)\n{\n\tprocess.mailbox.push(msg);\n\tenqueue(process);\n}\n\nfunction send(process, msg)\n{\n\treturn nativeBinding(function(callback) {\n\t\trawSend(process, msg);\n\t\tcallback(succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t});\n}\n\nfunction kill(process)\n{\n\treturn nativeBinding(function(callback) {\n\t\tvar root = process.root;\n\t\tif (root.ctor === '_Task_nativeBinding' && root.cancel)\n\t\t{\n\t\t\troot.cancel();\n\t\t}\n\n\t\tprocess.root = null;\n\n\t\tcallback(succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t});\n}\n\nfunction sleep(time)\n{\n\treturn nativeBinding(function(callback) {\n\t\tvar id = setTimeout(function() {\n\t\t\tcallback(succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t\t}, time);\n\n\t\treturn function() { clearTimeout(id); };\n\t});\n}\n\n\n// STEP PROCESSES\n\nfunction step(numSteps, process)\n{\n\twhile (numSteps < MAX_STEPS)\n\t{\n\t\tvar ctor = process.root.ctor;\n\n\t\tif (ctor === '_Task_succeed')\n\t\t{\n\t\t\twhile (process.stack && process.stack.ctor === '_Task_onError')\n\t\t\t{\n\t\t\t\tprocess.stack = process.stack.rest;\n\t\t\t}\n\t\t\tif (process.stack === null)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprocess.root = process.stack.callback(process.root.value);\n\t\t\tprocess.stack = process.stack.rest;\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ctor === '_Task_fail')\n\t\t{\n\t\t\twhile (process.stack && process.stack.ctor === '_Task_andThen')\n\t\t\t{\n\t\t\t\tprocess.stack = process.stack.rest;\n\t\t\t}\n\t\t\tif (process.stack === null)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprocess.root = process.stack.callback(process.root.value);\n\t\t\tprocess.stack = process.stack.rest;\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ctor === '_Task_andThen')\n\t\t{\n\t\t\tprocess.stack = {\n\t\t\t\tctor: '_Task_andThen',\n\t\t\t\tcallback: process.root.callback,\n\t\t\t\trest: process.stack\n\t\t\t};\n\t\t\tprocess.root = process.root.task;\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ctor === '_Task_onError')\n\t\t{\n\t\t\tprocess.stack = {\n\t\t\t\tctor: '_Task_onError',\n\t\t\t\tcallback: process.root.callback,\n\t\t\t\trest: process.stack\n\t\t\t};\n\t\t\tprocess.root = process.root.task;\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ctor === '_Task_nativeBinding')\n\t\t{\n\t\t\tprocess.root.cancel = process.root.callback(function(newRoot) {\n\t\t\t\tprocess.root = newRoot;\n\t\t\t\tenqueue(process);\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tif (ctor === '_Task_receive')\n\t\t{\n\t\t\tvar mailbox = process.mailbox;\n\t\t\tif (mailbox.length === 0)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tprocess.root = process.root.callback(mailbox.shift());\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(ctor);\n\t}\n\n\tif (numSteps < MAX_STEPS)\n\t{\n\t\treturn numSteps + 1;\n\t}\n\tenqueue(process);\n\n\treturn numSteps;\n}\n\n\n// WORK QUEUE\n\nvar working = false;\nvar workQueue = [];\n\nfunction enqueue(process)\n{\n\tworkQueue.push(process);\n\n\tif (!working)\n\t{\n\t\tsetTimeout(work, 0);\n\t\tworking = true;\n\t}\n}\n\nfunction work()\n{\n\tvar numSteps = 0;\n\tvar process;\n\twhile (numSteps < MAX_STEPS && (process = workQueue.shift()))\n\t{\n\t\tif (process.root)\n\t\t{\n\t\t\tnumSteps = step(numSteps, process);\n\t\t}\n\t}\n\tif (!process)\n\t{\n\t\tworking = false;\n\t\treturn;\n\t}\n\tsetTimeout(work, 0);\n}\n\n\nreturn {\n\tsucceed: succeed,\n\tfail: fail,\n\tnativeBinding: nativeBinding,\n\tandThen: F2(andThen),\n\tonError: F2(onError),\n\treceive: receive,\n\n\tspawn: spawn,\n\tkill: kill,\n\tsleep: sleep,\n\tsend: F2(send),\n\n\trawSpawn: rawSpawn,\n\trawSend: rawSend\n};\n\n}();\n//import //\n\nvar _elm_lang$core$Native_Platform = function() {\n\n\n// PROGRAMS\n\nfunction program(impl)\n{\n\treturn function(flagDecoder)\n\t{\n\t\treturn function(object, moduleName)\n\t\t{\n\t\t\tobject['worker'] = function worker(flags)\n\t\t\t{\n\t\t\t\tif (typeof flags !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'The `' + moduleName + '` module does not need flags.\\n'\n\t\t\t\t\t\t+ 'Call ' + moduleName + '.worker() with no arguments and you should be all set!'\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn initialize(\n\t\t\t\t\timpl.init,\n\t\t\t\t\timpl.update,\n\t\t\t\t\timpl.subscriptions,\n\t\t\t\t\trenderer\n\t\t\t\t);\n\t\t\t};\n\t\t};\n\t};\n}\n\nfunction programWithFlags(impl)\n{\n\treturn function(flagDecoder)\n\t{\n\t\treturn function(object, moduleName)\n\t\t{\n\t\t\tobject['worker'] = function worker(flags)\n\t\t\t{\n\t\t\t\tif (typeof flagDecoder === 'undefined')\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Are you trying to sneak a Never value into Elm? Trickster!\\n'\n\t\t\t\t\t\t+ 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\\n'\n\t\t\t\t\t\t+ 'Use `program` instead if you do not want flags.'\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tvar result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags);\n\t\t\t\tif (result.ctor === 'Err')\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\tmoduleName + '.worker(...) was called with an unexpected argument.\\n'\n\t\t\t\t\t\t+ 'I tried to convert it to an Elm value, but ran into this problem:\\n\\n'\n\t\t\t\t\t\t+ result._0\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn initialize(\n\t\t\t\t\timpl.init(result._0),\n\t\t\t\t\timpl.update,\n\t\t\t\t\timpl.subscriptions,\n\t\t\t\t\trenderer\n\t\t\t\t);\n\t\t\t};\n\t\t};\n\t};\n}\n\nfunction renderer(enqueue, _)\n{\n\treturn function(_) {};\n}\n\n\n// HTML TO PROGRAM\n\nfunction htmlToProgram(vnode)\n{\n\tvar emptyBag = batch(_elm_lang$core$Native_List.Nil);\n\tvar noChange = _elm_lang$core$Native_Utils.Tuple2(\n\t\t_elm_lang$core$Native_Utils.Tuple0,\n\t\temptyBag\n\t);\n\n\treturn _elm_lang$virtual_dom$VirtualDom$program({\n\t\tinit: noChange,\n\t\tview: function(model) { return main; },\n\t\tupdate: F2(function(msg, model) { return noChange; }),\n\t\tsubscriptions: function (model) { return emptyBag; }\n\t});\n}\n\n\n// INITIALIZE A PROGRAM\n\nfunction initialize(init, update, subscriptions, renderer)\n{\n\t// ambient state\n\tvar managers = {};\n\tvar updateView;\n\n\t// init and update state in main process\n\tvar initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {\n\t\tvar model = init._0;\n\t\tupdateView = renderer(enqueue, model);\n\t\tvar cmds = init._1;\n\t\tvar subs = subscriptions(model);\n\t\tdispatchEffects(managers, cmds, subs);\n\t\tcallback(_elm_lang$core$Native_Scheduler.succeed(model));\n\t});\n\n\tfunction onMessage(msg, model)\n\t{\n\t\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {\n\t\t\tvar results = A2(update, msg, model);\n\t\t\tmodel = results._0;\n\t\t\tupdateView(model);\n\t\t\tvar cmds = results._1;\n\t\t\tvar subs = subscriptions(model);\n\t\t\tdispatchEffects(managers, cmds, subs);\n\t\t\tcallback(_elm_lang$core$Native_Scheduler.succeed(model));\n\t\t});\n\t}\n\n\tvar mainProcess = spawnLoop(initApp, onMessage);\n\n\tfunction enqueue(msg)\n\t{\n\t\t_elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg);\n\t}\n\n\tvar ports = setupEffects(managers, enqueue);\n\n\treturn ports ? { ports: ports } : {};\n}\n\n\n// EFFECT MANAGERS\n\nvar effectManagers = {};\n\nfunction setupEffects(managers, callback)\n{\n\tvar ports;\n\n\t// setup all necessary effect managers\n\tfor (var key in effectManagers)\n\t{\n\t\tvar manager = effectManagers[key];\n\n\t\tif (manager.isForeign)\n\t\t{\n\t\t\tports = ports || {};\n\t\t\tports[key] = manager.tag === 'cmd'\n\t\t\t\t? setupOutgoingPort(key)\n\t\t\t\t: setupIncomingPort(key, callback);\n\t\t}\n\n\t\tmanagers[key] = makeManager(manager, callback);\n\t}\n\n\treturn ports;\n}\n\nfunction makeManager(info, callback)\n{\n\tvar router = {\n\t\tmain: callback,\n\t\tself: undefined\n\t};\n\n\tvar tag = info.tag;\n\tvar onEffects = info.onEffects;\n\tvar onSelfMsg = info.onSelfMsg;\n\n\tfunction onMessage(msg, state)\n\t{\n\t\tif (msg.ctor === 'self')\n\t\t{\n\t\t\treturn A3(onSelfMsg, router, msg._0, state);\n\t\t}\n\n\t\tvar fx = msg._0;\n\t\tswitch (tag)\n\t\t{\n\t\t\tcase 'cmd':\n\t\t\t\treturn A3(onEffects, router, fx.cmds, state);\n\n\t\t\tcase 'sub':\n\t\t\t\treturn A3(onEffects, router, fx.subs, state);\n\n\t\t\tcase 'fx':\n\t\t\t\treturn A4(onEffects, router, fx.cmds, fx.subs, state);\n\t\t}\n\t}\n\n\tvar process = spawnLoop(info.init, onMessage);\n\trouter.self = process;\n\treturn process;\n}\n\nfunction sendToApp(router, msg)\n{\n\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n\t{\n\t\trouter.main(msg);\n\t\tcallback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t});\n}\n\nfunction sendToSelf(router, msg)\n{\n\treturn A2(_elm_lang$core$Native_Scheduler.send, router.self, {\n\t\tctor: 'self',\n\t\t_0: msg\n\t});\n}\n\n\n// HELPER for STATEFUL LOOPS\n\nfunction spawnLoop(init, onMessage)\n{\n\tvar andThen = _elm_lang$core$Native_Scheduler.andThen;\n\n\tfunction loop(state)\n\t{\n\t\tvar handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) {\n\t\t\treturn onMessage(msg, state);\n\t\t});\n\t\treturn A2(andThen, loop, handleMsg);\n\t}\n\n\tvar task = A2(andThen, loop, init);\n\n\treturn _elm_lang$core$Native_Scheduler.rawSpawn(task);\n}\n\n\n// BAGS\n\nfunction leaf(home)\n{\n\treturn function(value)\n\t{\n\t\treturn {\n\t\t\ttype: 'leaf',\n\t\t\thome: home,\n\t\t\tvalue: value\n\t\t};\n\t};\n}\n\nfunction batch(list)\n{\n\treturn {\n\t\ttype: 'node',\n\t\tbranches: list\n\t};\n}\n\nfunction map(tagger, bag)\n{\n\treturn {\n\t\ttype: 'map',\n\t\ttagger: tagger,\n\t\ttree: bag\n\t}\n}\n\n\n// PIPE BAGS INTO EFFECT MANAGERS\n\nfunction dispatchEffects(managers, cmdBag, subBag)\n{\n\tvar effectsDict = {};\n\tgatherEffects(true, cmdBag, effectsDict, null);\n\tgatherEffects(false, subBag, effectsDict, null);\n\n\tfor (var home in managers)\n\t{\n\t\tvar fx = home in effectsDict\n\t\t\t? effectsDict[home]\n\t\t\t: {\n\t\t\t\tcmds: _elm_lang$core$Native_List.Nil,\n\t\t\t\tsubs: _elm_lang$core$Native_List.Nil\n\t\t\t};\n\n\t\t_elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx });\n\t}\n}\n\nfunction gatherEffects(isCmd, bag, effectsDict, taggers)\n{\n\tswitch (bag.type)\n\t{\n\t\tcase 'leaf':\n\t\t\tvar home = bag.home;\n\t\t\tvar effect = toEffect(isCmd, home, taggers, bag.value);\n\t\t\teffectsDict[home] = insert(isCmd, effect, effectsDict[home]);\n\t\t\treturn;\n\n\t\tcase 'node':\n\t\t\tvar list = bag.branches;\n\t\t\twhile (list.ctor !== '[]')\n\t\t\t{\n\t\t\t\tgatherEffects(isCmd, list._0, effectsDict, taggers);\n\t\t\t\tlist = list._1;\n\t\t\t}\n\t\t\treturn;\n\n\t\tcase 'map':\n\t\t\tgatherEffects(isCmd, bag.tree, effectsDict, {\n\t\t\t\ttagger: bag.tagger,\n\t\t\t\trest: taggers\n\t\t\t});\n\t\t\treturn;\n\t}\n}\n\nfunction toEffect(isCmd, home, taggers, value)\n{\n\tfunction applyTaggers(x)\n\t{\n\t\tvar temp = taggers;\n\t\twhile (temp)\n\t\t{\n\t\t\tx = temp.tagger(x);\n\t\t\ttemp = temp.rest;\n\t\t}\n\t\treturn x;\n\t}\n\n\tvar map = isCmd\n\t\t? effectManagers[home].cmdMap\n\t\t: effectManagers[home].subMap;\n\n\treturn A2(map, applyTaggers, value)\n}\n\nfunction insert(isCmd, newEffect, effects)\n{\n\teffects = effects || {\n\t\tcmds: _elm_lang$core$Native_List.Nil,\n\t\tsubs: _elm_lang$core$Native_List.Nil\n\t};\n\tif (isCmd)\n\t{\n\t\teffects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds);\n\t\treturn effects;\n\t}\n\teffects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs);\n\treturn effects;\n}\n\n\n// PORTS\n\nfunction checkPortName(name)\n{\n\tif (name in effectManagers)\n\t{\n\t\tthrow new Error('There can only be one port named `' + name + '`, but your program has multiple.');\n\t}\n}\n\n\n// OUTGOING PORTS\n\nfunction outgoingPort(name, converter)\n{\n\tcheckPortName(name);\n\teffectManagers[name] = {\n\t\ttag: 'cmd',\n\t\tcmdMap: outgoingPortMap,\n\t\tconverter: converter,\n\t\tisForeign: true\n\t};\n\treturn leaf(name);\n}\n\nvar outgoingPortMap = F2(function cmdMap(tagger, value) {\n\treturn value;\n});\n\nfunction setupOutgoingPort(name)\n{\n\tvar subs = [];\n\tvar converter = effectManagers[name].converter;\n\n\t// CREATE MANAGER\n\n\tvar init = _elm_lang$core$Native_Scheduler.succeed(null);\n\n\tfunction onEffects(router, cmdList, state)\n\t{\n\t\twhile (cmdList.ctor !== '[]')\n\t\t{\n\t\t\t// grab a separate reference to subs in case unsubscribe is called\n\t\t\tvar currentSubs = subs;\n\t\t\tvar value = converter(cmdList._0);\n\t\t\tfor (var i = 0; i < currentSubs.length; i++)\n\t\t\t{\n\t\t\t\tcurrentSubs[i](value);\n\t\t\t}\n\t\t\tcmdList = cmdList._1;\n\t\t}\n\t\treturn init;\n\t}\n\n\teffectManagers[name].init = init;\n\teffectManagers[name].onEffects = F3(onEffects);\n\n\t// PUBLIC API\n\n\tfunction subscribe(callback)\n\t{\n\t\tsubs.push(callback);\n\t}\n\n\tfunction unsubscribe(callback)\n\t{\n\t\t// copy subs into a new array in case unsubscribe is called within a\n\t\t// subscribed callback\n\t\tsubs = subs.slice();\n\t\tvar index = subs.indexOf(callback);\n\t\tif (index >= 0)\n\t\t{\n\t\t\tsubs.splice(index, 1);\n\t\t}\n\t}\n\n\treturn {\n\t\tsubscribe: subscribe,\n\t\tunsubscribe: unsubscribe\n\t};\n}\n\n\n// INCOMING PORTS\n\nfunction incomingPort(name, converter)\n{\n\tcheckPortName(name);\n\teffectManagers[name] = {\n\t\ttag: 'sub',\n\t\tsubMap: incomingPortMap,\n\t\tconverter: converter,\n\t\tisForeign: true\n\t};\n\treturn leaf(name);\n}\n\nvar incomingPortMap = F2(function subMap(tagger, finalTagger)\n{\n\treturn function(value)\n\t{\n\t\treturn tagger(finalTagger(value));\n\t};\n});\n\nfunction setupIncomingPort(name, callback)\n{\n\tvar sentBeforeInit = [];\n\tvar subs = _elm_lang$core$Native_List.Nil;\n\tvar converter = effectManagers[name].converter;\n\tvar currentOnEffects = preInitOnEffects;\n\tvar currentSend = preInitSend;\n\n\t// CREATE MANAGER\n\n\tvar init = _elm_lang$core$Native_Scheduler.succeed(null);\n\n\tfunction preInitOnEffects(router, subList, state)\n\t{\n\t\tvar postInitResult = postInitOnEffects(router, subList, state);\n\n\t\tfor(var i = 0; i < sentBeforeInit.length; i++)\n\t\t{\n\t\t\tpostInitSend(sentBeforeInit[i]);\n\t\t}\n\n\t\tsentBeforeInit = null; // to release objects held in queue\n\t\tcurrentSend = postInitSend;\n\t\tcurrentOnEffects = postInitOnEffects;\n\t\treturn postInitResult;\n\t}\n\n\tfunction postInitOnEffects(router, subList, state)\n\t{\n\t\tsubs = subList;\n\t\treturn init;\n\t}\n\n\tfunction onEffects(router, subList, state)\n\t{\n\t\treturn currentOnEffects(router, subList, state);\n\t}\n\n\teffectManagers[name].init = init;\n\teffectManagers[name].onEffects = F3(onEffects);\n\n\t// PUBLIC API\n\n\tfunction preInitSend(value)\n\t{\n\t\tsentBeforeInit.push(value);\n\t}\n\n\tfunction postInitSend(value)\n\t{\n\t\tvar temp = subs;\n\t\twhile (temp.ctor !== '[]')\n\t\t{\n\t\t\tcallback(temp._0(value));\n\t\t\ttemp = temp._1;\n\t\t}\n\t}\n\n\tfunction send(incomingValue)\n\t{\n\t\tvar result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue);\n\t\tif (result.ctor === 'Err')\n\t\t{\n\t\t\tthrow new Error('Trying to send an unexpected type of value through port `' + name + '`:\\n' + result._0);\n\t\t}\n\n\t\tcurrentSend(result._0);\n\t}\n\n\treturn { send: send };\n}\n\nreturn {\n\t// routers\n\tsendToApp: F2(sendToApp),\n\tsendToSelf: F2(sendToSelf),\n\n\t// global setup\n\teffectManagers: effectManagers,\n\toutgoingPort: outgoingPort,\n\tincomingPort: incomingPort,\n\n\thtmlToProgram: htmlToProgram,\n\tprogram: program,\n\tprogramWithFlags: programWithFlags,\n\tinitialize: initialize,\n\n\t// effect bags\n\tleaf: leaf,\n\tbatch: batch,\n\tmap: F2(map)\n};\n\n}();\n\nvar _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch;\nvar _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch(\n\t{ctor: '[]'});\nvar _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {};\n_elm_lang$core$Platform_Cmd_ops['!'] = F2(\n\tfunction (model, commands) {\n\t\treturn {\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: model,\n\t\t\t_1: _elm_lang$core$Platform_Cmd$batch(commands)\n\t\t};\n\t});\nvar _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map;\nvar _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'};\n\nvar _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch;\nvar _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch(\n\t{ctor: '[]'});\nvar _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map;\nvar _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'};\n\nvar _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed;\nvar _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf;\nvar _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp;\nvar _elm_lang$core$Platform$programWithFlags = _elm_lang$core$Native_Platform.programWithFlags;\nvar _elm_lang$core$Platform$program = _elm_lang$core$Native_Platform.program;\nvar _elm_lang$core$Platform$Program = {ctor: 'Program'};\nvar _elm_lang$core$Platform$Task = {ctor: 'Task'};\nvar _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'};\nvar _elm_lang$core$Platform$Router = {ctor: 'Router'};\n\nvar _elm_lang$core$Result$toMaybe = function (result) {\n\tvar _p0 = result;\n\tif (_p0.ctor === 'Ok') {\n\t\treturn _elm_lang$core$Maybe$Just(_p0._0);\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$Result$withDefault = F2(\n\tfunction (def, result) {\n\t\tvar _p1 = result;\n\t\tif (_p1.ctor === 'Ok') {\n\t\t\treturn _p1._0;\n\t\t} else {\n\t\t\treturn def;\n\t\t}\n\t});\nvar _elm_lang$core$Result$Err = function (a) {\n\treturn {ctor: 'Err', _0: a};\n};\nvar _elm_lang$core$Result$andThen = F2(\n\tfunction (callback, result) {\n\t\tvar _p2 = result;\n\t\tif (_p2.ctor === 'Ok') {\n\t\t\treturn callback(_p2._0);\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p2._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$Ok = function (a) {\n\treturn {ctor: 'Ok', _0: a};\n};\nvar _elm_lang$core$Result$map = F2(\n\tfunction (func, ra) {\n\t\tvar _p3 = ra;\n\t\tif (_p3.ctor === 'Ok') {\n\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\tfunc(_p3._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p3._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$map2 = F3(\n\tfunction (func, ra, rb) {\n\t\tvar _p4 = {ctor: '_Tuple2', _0: ra, _1: rb};\n\t\tif (_p4._0.ctor === 'Ok') {\n\t\t\tif (_p4._1.ctor === 'Ok') {\n\t\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\t\tA2(func, _p4._0._0, _p4._1._0));\n\t\t\t} else {\n\t\t\t\treturn _elm_lang$core$Result$Err(_p4._1._0);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p4._0._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$map3 = F4(\n\tfunction (func, ra, rb, rc) {\n\t\tvar _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc};\n\t\tif (_p5._0.ctor === 'Ok') {\n\t\t\tif (_p5._1.ctor === 'Ok') {\n\t\t\t\tif (_p5._2.ctor === 'Ok') {\n\t\t\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\t\t\tA3(func, _p5._0._0, _p5._1._0, _p5._2._0));\n\t\t\t\t} else {\n\t\t\t\t\treturn _elm_lang$core$Result$Err(_p5._2._0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn _elm_lang$core$Result$Err(_p5._1._0);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p5._0._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$map4 = F5(\n\tfunction (func, ra, rb, rc, rd) {\n\t\tvar _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd};\n\t\tif (_p6._0.ctor === 'Ok') {\n\t\t\tif (_p6._1.ctor === 'Ok') {\n\t\t\t\tif (_p6._2.ctor === 'Ok') {\n\t\t\t\t\tif (_p6._3.ctor === 'Ok') {\n\t\t\t\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\t\t\t\tA4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn _elm_lang$core$Result$Err(_p6._3._0);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn _elm_lang$core$Result$Err(_p6._2._0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn _elm_lang$core$Result$Err(_p6._1._0);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p6._0._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$map5 = F6(\n\tfunction (func, ra, rb, rc, rd, re) {\n\t\tvar _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re};\n\t\tif (_p7._0.ctor === 'Ok') {\n\t\t\tif (_p7._1.ctor === 'Ok') {\n\t\t\t\tif (_p7._2.ctor === 'Ok') {\n\t\t\t\t\tif (_p7._3.ctor === 'Ok') {\n\t\t\t\t\t\tif (_p7._4.ctor === 'Ok') {\n\t\t\t\t\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\t\t\t\t\tA5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn _elm_lang$core$Result$Err(_p7._4._0);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn _elm_lang$core$Result$Err(_p7._3._0);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn _elm_lang$core$Result$Err(_p7._2._0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn _elm_lang$core$Result$Err(_p7._1._0);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p7._0._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$mapError = F2(\n\tfunction (f, result) {\n\t\tvar _p8 = result;\n\t\tif (_p8.ctor === 'Ok') {\n\t\t\treturn _elm_lang$core$Result$Ok(_p8._0);\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(\n\t\t\t\tf(_p8._0));\n\t\t}\n\t});\nvar _elm_lang$core$Result$fromMaybe = F2(\n\tfunction (err, maybe) {\n\t\tvar _p9 = maybe;\n\t\tif (_p9.ctor === 'Just') {\n\t\t\treturn _elm_lang$core$Result$Ok(_p9._0);\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(err);\n\t\t}\n\t});\n\nvar _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError;\nvar _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen;\nvar _elm_lang$core$Task$spawnCmd = F2(\n\tfunction (router, _p0) {\n\t\tvar _p1 = _p0;\n\t\treturn _elm_lang$core$Native_Scheduler.spawn(\n\t\t\tA2(\n\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t_elm_lang$core$Platform$sendToApp(router),\n\t\t\t\t_p1._0));\n\t});\nvar _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail;\nvar _elm_lang$core$Task$mapError = F2(\n\tfunction (convert, task) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$onError,\n\t\t\tfunction (_p2) {\n\t\t\t\treturn _elm_lang$core$Task$fail(\n\t\t\t\t\tconvert(_p2));\n\t\t\t},\n\t\t\ttask);\n\t});\nvar _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed;\nvar _elm_lang$core$Task$map = F2(\n\tfunction (func, taskA) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\tfunc(a));\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$map2 = F3(\n\tfunction (func, taskA, taskB) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn A2(\n\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\tfunction (b) {\n\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\tA2(func, a, b));\n\t\t\t\t\t},\n\t\t\t\t\ttaskB);\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$map3 = F4(\n\tfunction (func, taskA, taskB, taskC) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn A2(\n\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\tfunction (b) {\n\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\tfunction (c) {\n\t\t\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\t\t\tA3(func, a, b, c));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttaskC);\n\t\t\t\t\t},\n\t\t\t\t\ttaskB);\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$map4 = F5(\n\tfunction (func, taskA, taskB, taskC, taskD) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn A2(\n\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\tfunction (b) {\n\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\tfunction (c) {\n\t\t\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\t\t\tfunction (d) {\n\t\t\t\t\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\t\t\t\t\tA4(func, a, b, c, d));\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttaskD);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttaskC);\n\t\t\t\t\t},\n\t\t\t\t\ttaskB);\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$map5 = F6(\n\tfunction (func, taskA, taskB, taskC, taskD, taskE) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn A2(\n\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\tfunction (b) {\n\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\tfunction (c) {\n\t\t\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\t\t\tfunction (d) {\n\t\t\t\t\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\t\t\t\t\tfunction (e) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\t\t\t\t\t\t\tA5(func, a, b, c, d, e));\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttaskE);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttaskD);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttaskC);\n\t\t\t\t\t},\n\t\t\t\t\ttaskB);\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$sequence = function (tasks) {\n\tvar _p3 = tasks;\n\tif (_p3.ctor === '[]') {\n\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t{ctor: '[]'});\n\t} else {\n\t\treturn A3(\n\t\t\t_elm_lang$core$Task$map2,\n\t\t\tF2(\n\t\t\t\tfunction (x, y) {\n\t\t\t\t\treturn {ctor: '::', _0: x, _1: y};\n\t\t\t\t}),\n\t\t\t_p3._0,\n\t\t\t_elm_lang$core$Task$sequence(_p3._1));\n\t}\n};\nvar _elm_lang$core$Task$onEffects = F3(\n\tfunction (router, commands, state) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$map,\n\t\t\tfunction (_p4) {\n\t\t\t\treturn {ctor: '_Tuple0'};\n\t\t\t},\n\t\t\t_elm_lang$core$Task$sequence(\n\t\t\t\tA2(\n\t\t\t\t\t_elm_lang$core$List$map,\n\t\t\t\t\t_elm_lang$core$Task$spawnCmd(router),\n\t\t\t\t\tcommands)));\n\t});\nvar _elm_lang$core$Task$init = _elm_lang$core$Task$succeed(\n\t{ctor: '_Tuple0'});\nvar _elm_lang$core$Task$onSelfMsg = F3(\n\tfunction (_p7, _p6, _p5) {\n\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t{ctor: '_Tuple0'});\n\t});\nvar _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task');\nvar _elm_lang$core$Task$Perform = function (a) {\n\treturn {ctor: 'Perform', _0: a};\n};\nvar _elm_lang$core$Task$perform = F2(\n\tfunction (toMessage, task) {\n\t\treturn _elm_lang$core$Task$command(\n\t\t\t_elm_lang$core$Task$Perform(\n\t\t\t\tA2(_elm_lang$core$Task$map, toMessage, task)));\n\t});\nvar _elm_lang$core$Task$attempt = F2(\n\tfunction (resultToMessage, task) {\n\t\treturn _elm_lang$core$Task$command(\n\t\t\t_elm_lang$core$Task$Perform(\n\t\t\t\tA2(\n\t\t\t\t\t_elm_lang$core$Task$onError,\n\t\t\t\t\tfunction (_p8) {\n\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\tresultToMessage(\n\t\t\t\t\t\t\t\t_elm_lang$core$Result$Err(_p8)));\n\t\t\t\t\t},\n\t\t\t\t\tA2(\n\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\tfunction (_p9) {\n\t\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\t\tresultToMessage(\n\t\t\t\t\t\t\t\t\t_elm_lang$core$Result$Ok(_p9)));\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttask))));\n\t});\nvar _elm_lang$core$Task$cmdMap = F2(\n\tfunction (tagger, _p10) {\n\t\tvar _p11 = _p10;\n\t\treturn _elm_lang$core$Task$Perform(\n\t\t\tA2(_elm_lang$core$Task$map, tagger, _p11._0));\n\t});\n_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap};\n\n//import Native.Utils //\n\nvar _elm_lang$core$Native_Debug = function() {\n\nfunction log(tag, value)\n{\n\tvar msg = tag + ': ' + _elm_lang$core$Native_Utils.toString(value);\n\tvar process = process || {};\n\tif (process.stdout)\n\t{\n\t\tprocess.stdout.write(msg);\n\t}\n\telse\n\t{\n\t\tconsole.log(msg);\n\t}\n\treturn value;\n}\n\nfunction crash(message)\n{\n\tthrow new Error(message);\n}\n\nreturn {\n\tcrash: crash,\n\tlog: F2(log)\n};\n\n}();\n//import Maybe, Native.List, Native.Utils, Result //\n\nvar _elm_lang$core$Native_String = function() {\n\nfunction isEmpty(str)\n{\n\treturn str.length === 0;\n}\nfunction cons(chr, str)\n{\n\treturn chr + str;\n}\nfunction uncons(str)\n{\n\tvar hd = str[0];\n\tif (hd)\n\t{\n\t\treturn _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1)));\n\t}\n\treturn _elm_lang$core$Maybe$Nothing;\n}\nfunction append(a, b)\n{\n\treturn a + b;\n}\nfunction concat(strs)\n{\n\treturn _elm_lang$core$Native_List.toArray(strs).join('');\n}\nfunction length(str)\n{\n\treturn str.length;\n}\nfunction map(f, str)\n{\n\tvar out = str.split('');\n\tfor (var i = out.length; i--; )\n\t{\n\t\tout[i] = f(_elm_lang$core$Native_Utils.chr(out[i]));\n\t}\n\treturn out.join('');\n}\nfunction filter(pred, str)\n{\n\treturn str.split('').map(_elm_lang$core$Native_Utils.chr).filter(pred).join('');\n}\nfunction reverse(str)\n{\n\treturn str.split('').reverse().join('');\n}\nfunction foldl(f, b, str)\n{\n\tvar len = str.length;\n\tfor (var i = 0; i < len; ++i)\n\t{\n\t\tb = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b);\n\t}\n\treturn b;\n}\nfunction foldr(f, b, str)\n{\n\tfor (var i = str.length; i--; )\n\t{\n\t\tb = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b);\n\t}\n\treturn b;\n}\nfunction split(sep, str)\n{\n\treturn _elm_lang$core$Native_List.fromArray(str.split(sep));\n}\nfunction join(sep, strs)\n{\n\treturn _elm_lang$core$Native_List.toArray(strs).join(sep);\n}\nfunction repeat(n, str)\n{\n\tvar result = '';\n\twhile (n > 0)\n\t{\n\t\tif (n & 1)\n\t\t{\n\t\t\tresult += str;\n\t\t}\n\t\tn >>= 1, str += str;\n\t}\n\treturn result;\n}\nfunction slice(start, end, str)\n{\n\treturn str.slice(start, end);\n}\nfunction left(n, str)\n{\n\treturn n < 1 ? '' : str.slice(0, n);\n}\nfunction right(n, str)\n{\n\treturn n < 1 ? '' : str.slice(-n);\n}\nfunction dropLeft(n, str)\n{\n\treturn n < 1 ? str : str.slice(n);\n}\nfunction dropRight(n, str)\n{\n\treturn n < 1 ? str : str.slice(0, -n);\n}\nfunction pad(n, chr, str)\n{\n\tvar half = (n - str.length) / 2;\n\treturn repeat(Math.ceil(half), chr) + str + repeat(half | 0, chr);\n}\nfunction padRight(n, chr, str)\n{\n\treturn str + repeat(n - str.length, chr);\n}\nfunction padLeft(n, chr, str)\n{\n\treturn repeat(n - str.length, chr) + str;\n}\n\nfunction trim(str)\n{\n\treturn str.trim();\n}\nfunction trimLeft(str)\n{\n\treturn str.replace(/^\\s+/, '');\n}\nfunction trimRight(str)\n{\n\treturn str.replace(/\\s+$/, '');\n}\n\nfunction words(str)\n{\n\treturn _elm_lang$core$Native_List.fromArray(str.trim().split(/\\s+/g));\n}\nfunction lines(str)\n{\n\treturn _elm_lang$core$Native_List.fromArray(str.split(/\\r\\n|\\r|\\n/g));\n}\n\nfunction toUpper(str)\n{\n\treturn str.toUpperCase();\n}\nfunction toLower(str)\n{\n\treturn str.toLowerCase();\n}\n\nfunction any(pred, str)\n{\n\tfor (var i = str.length; i--; )\n\t{\n\t\tif (pred(_elm_lang$core$Native_Utils.chr(str[i])))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\nfunction all(pred, str)\n{\n\tfor (var i = str.length; i--; )\n\t{\n\t\tif (!pred(_elm_lang$core$Native_Utils.chr(str[i])))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction contains(sub, str)\n{\n\treturn str.indexOf(sub) > -1;\n}\nfunction startsWith(sub, str)\n{\n\treturn str.indexOf(sub) === 0;\n}\nfunction endsWith(sub, str)\n{\n\treturn str.length >= sub.length &&\n\t\tstr.lastIndexOf(sub) === str.length - sub.length;\n}\nfunction indexes(sub, str)\n{\n\tvar subLen = sub.length;\n\n\tif (subLen < 1)\n\t{\n\t\treturn _elm_lang$core$Native_List.Nil;\n\t}\n\n\tvar i = 0;\n\tvar is = [];\n\n\twhile ((i = str.indexOf(sub, i)) > -1)\n\t{\n\t\tis.push(i);\n\t\ti = i + subLen;\n\t}\n\n\treturn _elm_lang$core$Native_List.fromArray(is);\n}\n\n\nfunction toInt(s)\n{\n\tvar len = s.length;\n\n\t// if empty\n\tif (len === 0)\n\t{\n\t\treturn intErr(s);\n\t}\n\n\t// if hex\n\tvar c = s[0];\n\tif (c === '0' && s[1] === 'x')\n\t{\n\t\tfor (var i = 2; i < len; ++i)\n\t\t{\n\t\t\tvar c = s[i];\n\t\t\tif (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f'))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn intErr(s);\n\t\t}\n\t\treturn _elm_lang$core$Result$Ok(parseInt(s, 16));\n\t}\n\n\t// is decimal\n\tif (c > '9' || (c < '0' && c !== '-' && c !== '+'))\n\t{\n\t\treturn intErr(s);\n\t}\n\tfor (var i = 1; i < len; ++i)\n\t{\n\t\tvar c = s[i];\n\t\tif (c < '0' || '9' < c)\n\t\t{\n\t\t\treturn intErr(s);\n\t\t}\n\t}\n\n\treturn _elm_lang$core$Result$Ok(parseInt(s, 10));\n}\n\nfunction intErr(s)\n{\n\treturn _elm_lang$core$Result$Err(\"could not convert string '\" + s + \"' to an Int\");\n}\n\n\nfunction toFloat(s)\n{\n\t// check if it is a hex, octal, or binary number\n\tif (s.length === 0 || /[\\sxbo]/.test(s))\n\t{\n\t\treturn floatErr(s);\n\t}\n\tvar n = +s;\n\t// faster isNaN check\n\treturn n === n ? _elm_lang$core$Result$Ok(n) : floatErr(s);\n}\n\nfunction floatErr(s)\n{\n\treturn _elm_lang$core$Result$Err(\"could not convert string '\" + s + \"' to a Float\");\n}\n\n\nfunction toList(str)\n{\n\treturn _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr));\n}\nfunction fromList(chars)\n{\n\treturn _elm_lang$core$Native_List.toArray(chars).join('');\n}\n\nreturn {\n\tisEmpty: isEmpty,\n\tcons: F2(cons),\n\tuncons: uncons,\n\tappend: F2(append),\n\tconcat: concat,\n\tlength: length,\n\tmap: F2(map),\n\tfilter: F2(filter),\n\treverse: reverse,\n\tfoldl: F3(foldl),\n\tfoldr: F3(foldr),\n\n\tsplit: F2(split),\n\tjoin: F2(join),\n\trepeat: F2(repeat),\n\n\tslice: F3(slice),\n\tleft: F2(left),\n\tright: F2(right),\n\tdropLeft: F2(dropLeft),\n\tdropRight: F2(dropRight),\n\n\tpad: F3(pad),\n\tpadLeft: F3(padLeft),\n\tpadRight: F3(padRight),\n\n\ttrim: trim,\n\ttrimLeft: trimLeft,\n\ttrimRight: trimRight,\n\n\twords: words,\n\tlines: lines,\n\n\ttoUpper: toUpper,\n\ttoLower: toLower,\n\n\tany: F2(any),\n\tall: F2(all),\n\n\tcontains: F2(contains),\n\tstartsWith: F2(startsWith),\n\tendsWith: F2(endsWith),\n\tindexes: F2(indexes),\n\n\ttoInt: toInt,\n\ttoFloat: toFloat,\n\ttoList: toList,\n\tfromList: fromList\n};\n\n}();\n\nvar _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList;\nvar _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList;\nvar _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat;\nvar _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt;\nvar _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes;\nvar _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes;\nvar _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith;\nvar _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith;\nvar _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains;\nvar _elm_lang$core$String$all = _elm_lang$core$Native_String.all;\nvar _elm_lang$core$String$any = _elm_lang$core$Native_String.any;\nvar _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower;\nvar _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper;\nvar _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines;\nvar _elm_lang$core$String$words = _elm_lang$core$Native_String.words;\nvar _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight;\nvar _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft;\nvar _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim;\nvar _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight;\nvar _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft;\nvar _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad;\nvar _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight;\nvar _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft;\nvar _elm_lang$core$String$right = _elm_lang$core$Native_String.right;\nvar _elm_lang$core$String$left = _elm_lang$core$Native_String.left;\nvar _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice;\nvar _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat;\nvar _elm_lang$core$String$join = _elm_lang$core$Native_String.join;\nvar _elm_lang$core$String$split = _elm_lang$core$Native_String.split;\nvar _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr;\nvar _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl;\nvar _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse;\nvar _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter;\nvar _elm_lang$core$String$map = _elm_lang$core$Native_String.map;\nvar _elm_lang$core$String$length = _elm_lang$core$Native_String.length;\nvar _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat;\nvar _elm_lang$core$String$append = _elm_lang$core$Native_String.append;\nvar _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons;\nvar _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons;\nvar _elm_lang$core$String$fromChar = function ($char) {\n\treturn A2(_elm_lang$core$String$cons, $char, '');\n};\nvar _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty;\n\nvar _elm_lang$core$Dict$foldr = F3(\n\tfunction (f, acc, t) {\n\t\tfoldr:\n\t\twhile (true) {\n\t\t\tvar _p0 = t;\n\t\t\tif (_p0.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn acc;\n\t\t\t} else {\n\t\t\t\tvar _v1 = f,\n\t\t\t\t\t_v2 = A3(\n\t\t\t\t\tf,\n\t\t\t\t\t_p0._1,\n\t\t\t\t\t_p0._2,\n\t\t\t\t\tA3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)),\n\t\t\t\t\t_v3 = _p0._3;\n\t\t\t\tf = _v1;\n\t\t\t\tacc = _v2;\n\t\t\t\tt = _v3;\n\t\t\t\tcontinue foldr;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$keys = function (dict) {\n\treturn A3(\n\t\t_elm_lang$core$Dict$foldr,\n\t\tF3(\n\t\t\tfunction (key, value, keyList) {\n\t\t\t\treturn {ctor: '::', _0: key, _1: keyList};\n\t\t\t}),\n\t\t{ctor: '[]'},\n\t\tdict);\n};\nvar _elm_lang$core$Dict$values = function (dict) {\n\treturn A3(\n\t\t_elm_lang$core$Dict$foldr,\n\t\tF3(\n\t\t\tfunction (key, value, valueList) {\n\t\t\t\treturn {ctor: '::', _0: value, _1: valueList};\n\t\t\t}),\n\t\t{ctor: '[]'},\n\t\tdict);\n};\nvar _elm_lang$core$Dict$toList = function (dict) {\n\treturn A3(\n\t\t_elm_lang$core$Dict$foldr,\n\t\tF3(\n\t\t\tfunction (key, value, list) {\n\t\t\t\treturn {\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: {ctor: '_Tuple2', _0: key, _1: value},\n\t\t\t\t\t_1: list\n\t\t\t\t};\n\t\t\t}),\n\t\t{ctor: '[]'},\n\t\tdict);\n};\nvar _elm_lang$core$Dict$foldl = F3(\n\tfunction (f, acc, dict) {\n\t\tfoldl:\n\t\twhile (true) {\n\t\t\tvar _p1 = dict;\n\t\t\tif (_p1.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn acc;\n\t\t\t} else {\n\t\t\t\tvar _v5 = f,\n\t\t\t\t\t_v6 = A3(\n\t\t\t\t\tf,\n\t\t\t\t\t_p1._1,\n\t\t\t\t\t_p1._2,\n\t\t\t\t\tA3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)),\n\t\t\t\t\t_v7 = _p1._4;\n\t\t\t\tf = _v5;\n\t\t\t\tacc = _v6;\n\t\t\t\tdict = _v7;\n\t\t\t\tcontinue foldl;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$merge = F6(\n\tfunction (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) {\n\t\tvar stepState = F3(\n\t\t\tfunction (rKey, rValue, _p2) {\n\t\t\t\tstepState:\n\t\t\t\twhile (true) {\n\t\t\t\t\tvar _p3 = _p2;\n\t\t\t\t\tvar _p9 = _p3._1;\n\t\t\t\t\tvar _p8 = _p3._0;\n\t\t\t\t\tvar _p4 = _p8;\n\t\t\t\t\tif (_p4.ctor === '[]') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t_0: _p8,\n\t\t\t\t\t\t\t_1: A3(rightStep, rKey, rValue, _p9)\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _p7 = _p4._1;\n\t\t\t\t\t\tvar _p6 = _p4._0._1;\n\t\t\t\t\t\tvar _p5 = _p4._0._0;\n\t\t\t\t\t\tif (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) {\n\t\t\t\t\t\t\tvar _v10 = rKey,\n\t\t\t\t\t\t\t\t_v11 = rValue,\n\t\t\t\t\t\t\t\t_v12 = {\n\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t_0: _p7,\n\t\t\t\t\t\t\t\t_1: A3(leftStep, _p5, _p6, _p9)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\trKey = _v10;\n\t\t\t\t\t\t\trValue = _v11;\n\t\t\t\t\t\t\t_p2 = _v12;\n\t\t\t\t\t\t\tcontinue stepState;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _p8,\n\t\t\t\t\t\t\t\t\t_1: A3(rightStep, rKey, rValue, _p9)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _p7,\n\t\t\t\t\t\t\t\t\t_1: A4(bothStep, _p5, _p6, rValue, _p9)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\tvar _p10 = A3(\n\t\t\t_elm_lang$core$Dict$foldl,\n\t\t\tstepState,\n\t\t\t{\n\t\t\t\tctor: '_Tuple2',\n\t\t\t\t_0: _elm_lang$core$Dict$toList(leftDict),\n\t\t\t\t_1: initialResult\n\t\t\t},\n\t\t\trightDict);\n\t\tvar leftovers = _p10._0;\n\t\tvar intermediateResult = _p10._1;\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldl,\n\t\t\tF2(\n\t\t\t\tfunction (_p11, result) {\n\t\t\t\t\tvar _p12 = _p11;\n\t\t\t\t\treturn A3(leftStep, _p12._0, _p12._1, result);\n\t\t\t\t}),\n\t\t\tintermediateResult,\n\t\t\tleftovers);\n\t});\nvar _elm_lang$core$Dict$reportRemBug = F4(\n\tfunction (msg, c, lgot, rgot) {\n\t\treturn _elm_lang$core$Native_Debug.crash(\n\t\t\t_elm_lang$core$String$concat(\n\t\t\t\t{\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: 'Internal red-black tree invariant violated, expected ',\n\t\t\t\t\t_1: {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: msg,\n\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t_0: ' and got ',\n\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t_0: _elm_lang$core$Basics$toString(c),\n\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t_0: '/',\n\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t_0: lgot,\n\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t_0: '/',\n\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: rgot,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_0: '\\nPlease report this bug to <https://github.com/elm-lang/core/issues>',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t});\nvar _elm_lang$core$Dict$isBBlack = function (dict) {\n\tvar _p13 = dict;\n\t_v14_2:\n\tdo {\n\t\tif (_p13.ctor === 'RBNode_elm_builtin') {\n\t\t\tif (_p13._0.ctor === 'BBlack') {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tbreak _v14_2;\n\t\t\t}\n\t\t} else {\n\t\t\tif (_p13._0.ctor === 'LBBlack') {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tbreak _v14_2;\n\t\t\t}\n\t\t}\n\t} while(false);\n\treturn false;\n};\nvar _elm_lang$core$Dict$sizeHelp = F2(\n\tfunction (n, dict) {\n\t\tsizeHelp:\n\t\twhile (true) {\n\t\t\tvar _p14 = dict;\n\t\t\tif (_p14.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn n;\n\t\t\t} else {\n\t\t\t\tvar _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4),\n\t\t\t\t\t_v17 = _p14._3;\n\t\t\t\tn = _v16;\n\t\t\t\tdict = _v17;\n\t\t\t\tcontinue sizeHelp;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$size = function (dict) {\n\treturn A2(_elm_lang$core$Dict$sizeHelp, 0, dict);\n};\nvar _elm_lang$core$Dict$get = F2(\n\tfunction (targetKey, dict) {\n\t\tget:\n\t\twhile (true) {\n\t\t\tvar _p15 = dict;\n\t\t\tif (_p15.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t\t} else {\n\t\t\t\tvar _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1);\n\t\t\t\tswitch (_p16.ctor) {\n\t\t\t\t\tcase 'LT':\n\t\t\t\t\t\tvar _v20 = targetKey,\n\t\t\t\t\t\t\t_v21 = _p15._3;\n\t\t\t\t\t\ttargetKey = _v20;\n\t\t\t\t\t\tdict = _v21;\n\t\t\t\t\t\tcontinue get;\n\t\t\t\t\tcase 'EQ':\n\t\t\t\t\t\treturn _elm_lang$core$Maybe$Just(_p15._2);\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvar _v22 = targetKey,\n\t\t\t\t\t\t\t_v23 = _p15._4;\n\t\t\t\t\t\ttargetKey = _v22;\n\t\t\t\t\t\tdict = _v23;\n\t\t\t\t\t\tcontinue get;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$member = F2(\n\tfunction (key, dict) {\n\t\tvar _p17 = A2(_elm_lang$core$Dict$get, key, dict);\n\t\tif (_p17.ctor === 'Just') {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t});\nvar _elm_lang$core$Dict$maxWithDefault = F3(\n\tfunction (k, v, r) {\n\t\tmaxWithDefault:\n\t\twhile (true) {\n\t\t\tvar _p18 = r;\n\t\t\tif (_p18.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn {ctor: '_Tuple2', _0: k, _1: v};\n\t\t\t} else {\n\t\t\t\tvar _v26 = _p18._1,\n\t\t\t\t\t_v27 = _p18._2,\n\t\t\t\t\t_v28 = _p18._4;\n\t\t\t\tk = _v26;\n\t\t\t\tv = _v27;\n\t\t\t\tr = _v28;\n\t\t\t\tcontinue maxWithDefault;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'};\nvar _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'};\nvar _elm_lang$core$Dict$Black = {ctor: 'Black'};\nvar _elm_lang$core$Dict$blackish = function (t) {\n\tvar _p19 = t;\n\tif (_p19.ctor === 'RBNode_elm_builtin') {\n\t\tvar _p20 = _p19._0;\n\t\treturn _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack);\n\t} else {\n\t\treturn true;\n\t}\n};\nvar _elm_lang$core$Dict$Red = {ctor: 'Red'};\nvar _elm_lang$core$Dict$moreBlack = function (color) {\n\tvar _p21 = color;\n\tswitch (_p21.ctor) {\n\t\tcase 'Black':\n\t\t\treturn _elm_lang$core$Dict$BBlack;\n\t\tcase 'Red':\n\t\t\treturn _elm_lang$core$Dict$Black;\n\t\tcase 'NBlack':\n\t\t\treturn _elm_lang$core$Dict$Red;\n\t\tdefault:\n\t\t\treturn _elm_lang$core$Native_Debug.crash('Can\\'t make a double black node more black!');\n\t}\n};\nvar _elm_lang$core$Dict$lessBlack = function (color) {\n\tvar _p22 = color;\n\tswitch (_p22.ctor) {\n\t\tcase 'BBlack':\n\t\t\treturn _elm_lang$core$Dict$Black;\n\t\tcase 'Black':\n\t\t\treturn _elm_lang$core$Dict$Red;\n\t\tcase 'Red':\n\t\t\treturn _elm_lang$core$Dict$NBlack;\n\t\tdefault:\n\t\t\treturn _elm_lang$core$Native_Debug.crash('Can\\'t make a negative black node less black!');\n\t}\n};\nvar _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'};\nvar _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'};\nvar _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) {\n\treturn {ctor: 'RBEmpty_elm_builtin', _0: a};\n};\nvar _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\nvar _elm_lang$core$Dict$isEmpty = function (dict) {\n\treturn _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty);\n};\nvar _elm_lang$core$Dict$RBNode_elm_builtin = F5(\n\tfunction (a, b, c, d, e) {\n\t\treturn {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e};\n\t});\nvar _elm_lang$core$Dict$ensureBlackRoot = function (dict) {\n\tvar _p23 = dict;\n\tif ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) {\n\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4);\n\t} else {\n\t\treturn dict;\n\t}\n};\nvar _elm_lang$core$Dict$lessBlackTree = function (dict) {\n\tvar _p24 = dict;\n\tif (_p24.ctor === 'RBNode_elm_builtin') {\n\t\treturn A5(\n\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t_elm_lang$core$Dict$lessBlack(_p24._0),\n\t\t\t_p24._1,\n\t\t\t_p24._2,\n\t\t\t_p24._3,\n\t\t\t_p24._4);\n\t} else {\n\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\n\t}\n};\nvar _elm_lang$core$Dict$balancedTree = function (col) {\n\treturn function (xk) {\n\t\treturn function (xv) {\n\t\t\treturn function (yk) {\n\t\t\t\treturn function (yv) {\n\t\t\t\t\treturn function (zk) {\n\t\t\t\t\t\treturn function (zv) {\n\t\t\t\t\t\t\treturn function (a) {\n\t\t\t\t\t\t\t\treturn function (b) {\n\t\t\t\t\t\t\t\t\treturn function (c) {\n\t\t\t\t\t\t\t\t\t\treturn function (d) {\n\t\t\t\t\t\t\t\t\t\t\treturn A5(\n\t\t\t\t\t\t\t\t\t\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t\t\t\t\t\t\t\t\t\t_elm_lang$core$Dict$lessBlack(col),\n\t\t\t\t\t\t\t\t\t\t\t\tyk,\n\t\t\t\t\t\t\t\t\t\t\t\tyv,\n\t\t\t\t\t\t\t\t\t\t\t\tA5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b),\n\t\t\t\t\t\t\t\t\t\t\t\tA5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d));\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n};\nvar _elm_lang$core$Dict$blacken = function (t) {\n\tvar _p25 = t;\n\tif (_p25.ctor === 'RBEmpty_elm_builtin') {\n\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\n\t} else {\n\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4);\n\t}\n};\nvar _elm_lang$core$Dict$redden = function (t) {\n\tvar _p26 = t;\n\tif (_p26.ctor === 'RBEmpty_elm_builtin') {\n\t\treturn _elm_lang$core$Native_Debug.crash('can\\'t make a Leaf red');\n\t} else {\n\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4);\n\t}\n};\nvar _elm_lang$core$Dict$balanceHelp = function (tree) {\n\tvar _p27 = tree;\n\t_v36_6:\n\tdo {\n\t\t_v36_5:\n\t\tdo {\n\t\t\t_v36_4:\n\t\t\tdo {\n\t\t\t\t_v36_3:\n\t\t\t\tdo {\n\t\t\t\t\t_v36_2:\n\t\t\t\t\tdo {\n\t\t\t\t\t\t_v36_1:\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t_v36_0:\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tif (_p27.ctor === 'RBNode_elm_builtin') {\n\t\t\t\t\t\t\t\t\tif (_p27._3.ctor === 'RBNode_elm_builtin') {\n\t\t\t\t\t\t\t\t\t\tif (_p27._4.ctor === 'RBNode_elm_builtin') {\n\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._3._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._4._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._4._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (_p27._0.ctor === 'BBlack') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._4._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._3._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (_p27._4.ctor === 'RBNode_elm_builtin') {\n\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._4._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} while(false);\n\t\t\t\t\t\t\treturn _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4);\n\t\t\t\t\t\t} while(false);\n\t\t\t\t\t\treturn _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4);\n\t\t\t\t\t} while(false);\n\t\t\t\t\treturn _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4);\n\t\t\t\t} while(false);\n\t\t\t\treturn _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4);\n\t\t\t} while(false);\n\t\t\treturn A5(\n\t\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t\t_elm_lang$core$Dict$Black,\n\t\t\t\t_p27._4._3._1,\n\t\t\t\t_p27._4._3._2,\n\t\t\t\tA5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3),\n\t\t\t\tA5(\n\t\t\t\t\t_elm_lang$core$Dict$balance,\n\t\t\t\t\t_elm_lang$core$Dict$Black,\n\t\t\t\t\t_p27._4._1,\n\t\t\t\t\t_p27._4._2,\n\t\t\t\t\t_p27._4._3._4,\n\t\t\t\t\t_elm_lang$core$Dict$redden(_p27._4._4)));\n\t\t} while(false);\n\t\treturn A5(\n\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t_elm_lang$core$Dict$Black,\n\t\t\t_p27._3._4._1,\n\t\t\t_p27._3._4._2,\n\t\t\tA5(\n\t\t\t\t_elm_lang$core$Dict$balance,\n\t\t\t\t_elm_lang$core$Dict$Black,\n\t\t\t\t_p27._3._1,\n\t\t\t\t_p27._3._2,\n\t\t\t\t_elm_lang$core$Dict$redden(_p27._3._3),\n\t\t\t\t_p27._3._4._3),\n\t\t\tA5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4));\n\t} while(false);\n\treturn tree;\n};\nvar _elm_lang$core$Dict$balance = F5(\n\tfunction (c, k, v, l, r) {\n\t\tvar tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r);\n\t\treturn _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree;\n\t});\nvar _elm_lang$core$Dict$bubble = F5(\n\tfunction (c, k, v, l, r) {\n\t\treturn (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5(\n\t\t\t_elm_lang$core$Dict$balance,\n\t\t\t_elm_lang$core$Dict$moreBlack(c),\n\t\t\tk,\n\t\t\tv,\n\t\t\t_elm_lang$core$Dict$lessBlackTree(l),\n\t\t\t_elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r);\n\t});\nvar _elm_lang$core$Dict$removeMax = F5(\n\tfunction (c, k, v, l, r) {\n\t\tvar _p28 = r;\n\t\tif (_p28.ctor === 'RBEmpty_elm_builtin') {\n\t\t\treturn A3(_elm_lang$core$Dict$rem, c, l, r);\n\t\t} else {\n\t\t\treturn A5(\n\t\t\t\t_elm_lang$core$Dict$bubble,\n\t\t\t\tc,\n\t\t\t\tk,\n\t\t\t\tv,\n\t\t\t\tl,\n\t\t\t\tA5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4));\n\t\t}\n\t});\nvar _elm_lang$core$Dict$rem = F3(\n\tfunction (color, left, right) {\n\t\tvar _p29 = {ctor: '_Tuple2', _0: left, _1: right};\n\t\tif (_p29._0.ctor === 'RBEmpty_elm_builtin') {\n\t\t\tif (_p29._1.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\tvar _p30 = color;\n\t\t\t\tswitch (_p30.ctor) {\n\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\n\t\t\t\t\tcase 'Black':\n\t\t\t\t\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack);\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar _p33 = _p29._1._0;\n\t\t\t\tvar _p32 = _p29._0._0;\n\t\t\t\tvar _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33};\n\t\t\t\tif ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) {\n\t\t\t\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4);\n\t\t\t\t} else {\n\t\t\t\t\treturn A4(\n\t\t\t\t\t\t_elm_lang$core$Dict$reportRemBug,\n\t\t\t\t\t\t'Black/LBlack/Red',\n\t\t\t\t\t\tcolor,\n\t\t\t\t\t\t_elm_lang$core$Basics$toString(_p32),\n\t\t\t\t\t\t_elm_lang$core$Basics$toString(_p33));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (_p29._1.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\tvar _p36 = _p29._1._0;\n\t\t\t\tvar _p35 = _p29._0._0;\n\t\t\t\tvar _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36};\n\t\t\t\tif ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) {\n\t\t\t\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4);\n\t\t\t\t} else {\n\t\t\t\t\treturn A4(\n\t\t\t\t\t\t_elm_lang$core$Dict$reportRemBug,\n\t\t\t\t\t\t'Black/Red/LBlack',\n\t\t\t\t\t\tcolor,\n\t\t\t\t\t\t_elm_lang$core$Basics$toString(_p35),\n\t\t\t\t\t\t_elm_lang$core$Basics$toString(_p36));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar _p40 = _p29._0._2;\n\t\t\t\tvar _p39 = _p29._0._4;\n\t\t\t\tvar _p38 = _p29._0._1;\n\t\t\t\tvar newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39);\n\t\t\t\tvar _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39);\n\t\t\t\tvar k = _p37._0;\n\t\t\t\tvar v = _p37._1;\n\t\t\t\treturn A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right);\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$map = F2(\n\tfunction (f, dict) {\n\t\tvar _p41 = dict;\n\t\tif (_p41.ctor === 'RBEmpty_elm_builtin') {\n\t\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\n\t\t} else {\n\t\t\tvar _p42 = _p41._1;\n\t\t\treturn A5(\n\t\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t\t_p41._0,\n\t\t\t\t_p42,\n\t\t\t\tA2(f, _p42, _p41._2),\n\t\t\t\tA2(_elm_lang$core$Dict$map, f, _p41._3),\n\t\t\t\tA2(_elm_lang$core$Dict$map, f, _p41._4));\n\t\t}\n\t});\nvar _elm_lang$core$Dict$Same = {ctor: 'Same'};\nvar _elm_lang$core$Dict$Remove = {ctor: 'Remove'};\nvar _elm_lang$core$Dict$Insert = {ctor: 'Insert'};\nvar _elm_lang$core$Dict$update = F3(\n\tfunction (k, alter, dict) {\n\t\tvar up = function (dict) {\n\t\t\tvar _p43 = dict;\n\t\t\tif (_p43.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\tvar _p44 = alter(_elm_lang$core$Maybe$Nothing);\n\t\t\t\tif (_p44.ctor === 'Nothing') {\n\t\t\t\t\treturn {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty};\n\t\t\t\t} else {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t_0: _elm_lang$core$Dict$Insert,\n\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar _p55 = _p43._2;\n\t\t\t\tvar _p54 = _p43._4;\n\t\t\t\tvar _p53 = _p43._3;\n\t\t\t\tvar _p52 = _p43._1;\n\t\t\t\tvar _p51 = _p43._0;\n\t\t\t\tvar _p45 = A2(_elm_lang$core$Basics$compare, k, _p52);\n\t\t\t\tswitch (_p45.ctor) {\n\t\t\t\t\tcase 'EQ':\n\t\t\t\t\t\tvar _p46 = alter(\n\t\t\t\t\t\t\t_elm_lang$core$Maybe$Just(_p55));\n\t\t\t\t\t\tif (_p46.ctor === 'Nothing') {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Remove,\n\t\t\t\t\t\t\t\t_1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Same,\n\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\tcase 'LT':\n\t\t\t\t\t\tvar _p47 = up(_p53);\n\t\t\t\t\t\tvar flag = _p47._0;\n\t\t\t\t\t\tvar newLeft = _p47._1;\n\t\t\t\t\t\tvar _p48 = flag;\n\t\t\t\t\t\tswitch (_p48.ctor) {\n\t\t\t\t\t\t\tcase 'Same':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Same,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcase 'Insert':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Insert,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Remove,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvar _p49 = up(_p54);\n\t\t\t\t\t\tvar flag = _p49._0;\n\t\t\t\t\t\tvar newRight = _p49._1;\n\t\t\t\t\t\tvar _p50 = flag;\n\t\t\t\t\t\tswitch (_p50.ctor) {\n\t\t\t\t\t\t\tcase 'Same':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Same,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcase 'Insert':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Insert,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Remove,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvar _p56 = up(dict);\n\t\tvar flag = _p56._0;\n\t\tvar updatedDict = _p56._1;\n\t\tvar _p57 = flag;\n\t\tswitch (_p57.ctor) {\n\t\t\tcase 'Same':\n\t\t\t\treturn updatedDict;\n\t\t\tcase 'Insert':\n\t\t\t\treturn _elm_lang$core$Dict$ensureBlackRoot(updatedDict);\n\t\t\tdefault:\n\t\t\t\treturn _elm_lang$core$Dict$blacken(updatedDict);\n\t\t}\n\t});\nvar _elm_lang$core$Dict$insert = F3(\n\tfunction (key, value, dict) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$Dict$update,\n\t\t\tkey,\n\t\t\t_elm_lang$core$Basics$always(\n\t\t\t\t_elm_lang$core$Maybe$Just(value)),\n\t\t\tdict);\n\t});\nvar _elm_lang$core$Dict$singleton = F2(\n\tfunction (key, value) {\n\t\treturn A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty);\n\t});\nvar _elm_lang$core$Dict$union = F2(\n\tfunction (t1, t2) {\n\t\treturn A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1);\n\t});\nvar _elm_lang$core$Dict$filter = F2(\n\tfunction (predicate, dictionary) {\n\t\tvar add = F3(\n\t\t\tfunction (key, value, dict) {\n\t\t\t\treturn A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict;\n\t\t\t});\n\t\treturn A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary);\n\t});\nvar _elm_lang$core$Dict$intersect = F2(\n\tfunction (t1, t2) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Dict$filter,\n\t\t\tF2(\n\t\t\t\tfunction (k, _p58) {\n\t\t\t\t\treturn A2(_elm_lang$core$Dict$member, k, t2);\n\t\t\t\t}),\n\t\t\tt1);\n\t});\nvar _elm_lang$core$Dict$partition = F2(\n\tfunction (predicate, dict) {\n\t\tvar add = F3(\n\t\t\tfunction (key, value, _p59) {\n\t\t\t\tvar _p60 = _p59;\n\t\t\t\tvar _p62 = _p60._1;\n\t\t\t\tvar _p61 = _p60._0;\n\t\t\t\treturn A2(predicate, key, value) ? {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: A3(_elm_lang$core$Dict$insert, key, value, _p61),\n\t\t\t\t\t_1: _p62\n\t\t\t\t} : {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: _p61,\n\t\t\t\t\t_1: A3(_elm_lang$core$Dict$insert, key, value, _p62)\n\t\t\t\t};\n\t\t\t});\n\t\treturn A3(\n\t\t\t_elm_lang$core$Dict$foldl,\n\t\t\tadd,\n\t\t\t{ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty},\n\t\t\tdict);\n\t});\nvar _elm_lang$core$Dict$fromList = function (assocs) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (_p63, dict) {\n\t\t\t\tvar _p64 = _p63;\n\t\t\t\treturn A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict);\n\t\t\t}),\n\t\t_elm_lang$core$Dict$empty,\n\t\tassocs);\n};\nvar _elm_lang$core$Dict$remove = F2(\n\tfunction (key, dict) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$Dict$update,\n\t\t\tkey,\n\t\t\t_elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing),\n\t\t\tdict);\n\t});\nvar _elm_lang$core$Dict$diff = F2(\n\tfunction (t1, t2) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$Dict$foldl,\n\t\t\tF3(\n\t\t\t\tfunction (k, v, t) {\n\t\t\t\t\treturn A2(_elm_lang$core$Dict$remove, k, t);\n\t\t\t\t}),\n\t\t\tt1,\n\t\t\tt2);\n\t});\n\n//import Native.Scheduler //\n\nvar _elm_lang$core$Native_Time = function() {\n\nvar now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n{\n\tcallback(_elm_lang$core$Native_Scheduler.succeed(Date.now()));\n});\n\nfunction setInterval_(interval, task)\n{\n\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n\t{\n\t\tvar id = setInterval(function() {\n\t\t\t_elm_lang$core$Native_Scheduler.rawSpawn(task);\n\t\t}, interval);\n\n\t\treturn function() { clearInterval(id); };\n\t});\n}\n\nreturn {\n\tnow: now,\n\tsetInterval_: F2(setInterval_)\n};\n\n}();\nvar _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_;\nvar _elm_lang$core$Time$spawnHelp = F3(\n\tfunction (router, intervals, processes) {\n\t\tvar _p0 = intervals;\n\t\tif (_p0.ctor === '[]') {\n\t\t\treturn _elm_lang$core$Task$succeed(processes);\n\t\t} else {\n\t\t\tvar _p1 = _p0._0;\n\t\t\tvar spawnRest = function (id) {\n\t\t\t\treturn A3(\n\t\t\t\t\t_elm_lang$core$Time$spawnHelp,\n\t\t\t\t\trouter,\n\t\t\t\t\t_p0._1,\n\t\t\t\t\tA3(_elm_lang$core$Dict$insert, _p1, id, processes));\n\t\t\t};\n\t\t\tvar spawnTimer = _elm_lang$core$Native_Scheduler.spawn(\n\t\t\t\tA2(\n\t\t\t\t\t_elm_lang$core$Time$setInterval,\n\t\t\t\t\t_p1,\n\t\t\t\t\tA2(_elm_lang$core$Platform$sendToSelf, router, _p1)));\n\t\t\treturn A2(_elm_lang$core$Task$andThen, spawnRest, spawnTimer);\n\t\t}\n\t});\nvar _elm_lang$core$Time$addMySub = F2(\n\tfunction (_p2, state) {\n\t\tvar _p3 = _p2;\n\t\tvar _p6 = _p3._1;\n\t\tvar _p5 = _p3._0;\n\t\tvar _p4 = A2(_elm_lang$core$Dict$get, _p5, state);\n\t\tif (_p4.ctor === 'Nothing') {\n\t\t\treturn A3(\n\t\t\t\t_elm_lang$core$Dict$insert,\n\t\t\t\t_p5,\n\t\t\t\t{\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: _p6,\n\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t},\n\t\t\t\tstate);\n\t\t} else {\n\t\t\treturn A3(\n\t\t\t\t_elm_lang$core$Dict$insert,\n\t\t\t\t_p5,\n\t\t\t\t{ctor: '::', _0: _p6, _1: _p4._0},\n\t\t\t\tstate);\n\t\t}\n\t});\nvar _elm_lang$core$Time$inMilliseconds = function (t) {\n\treturn t;\n};\nvar _elm_lang$core$Time$millisecond = 1;\nvar _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond;\nvar _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second;\nvar _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute;\nvar _elm_lang$core$Time$inHours = function (t) {\n\treturn t / _elm_lang$core$Time$hour;\n};\nvar _elm_lang$core$Time$inMinutes = function (t) {\n\treturn t / _elm_lang$core$Time$minute;\n};\nvar _elm_lang$core$Time$inSeconds = function (t) {\n\treturn t / _elm_lang$core$Time$second;\n};\nvar _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now;\nvar _elm_lang$core$Time$onSelfMsg = F3(\n\tfunction (router, interval, state) {\n\t\tvar _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers);\n\t\tif (_p7.ctor === 'Nothing') {\n\t\t\treturn _elm_lang$core$Task$succeed(state);\n\t\t} else {\n\t\t\tvar tellTaggers = function (time) {\n\t\t\t\treturn _elm_lang$core$Task$sequence(\n\t\t\t\t\tA2(\n\t\t\t\t\t\t_elm_lang$core$List$map,\n\t\t\t\t\t\tfunction (tagger) {\n\t\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t\t_elm_lang$core$Platform$sendToApp,\n\t\t\t\t\t\t\t\trouter,\n\t\t\t\t\t\t\t\ttagger(time));\n\t\t\t\t\t\t},\n\t\t\t\t\t\t_p7._0));\n\t\t\t};\n\t\t\treturn A2(\n\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\tfunction (_p8) {\n\t\t\t\t\treturn _elm_lang$core$Task$succeed(state);\n\t\t\t\t},\n\t\t\t\tA2(_elm_lang$core$Task$andThen, tellTaggers, _elm_lang$core$Time$now));\n\t\t}\n\t});\nvar _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time');\nvar _elm_lang$core$Time$State = F2(\n\tfunction (a, b) {\n\t\treturn {taggers: a, processes: b};\n\t});\nvar _elm_lang$core$Time$init = _elm_lang$core$Task$succeed(\n\tA2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty));\nvar _elm_lang$core$Time$onEffects = F3(\n\tfunction (router, subs, _p9) {\n\t\tvar _p10 = _p9;\n\t\tvar rightStep = F3(\n\t\t\tfunction (_p12, id, _p11) {\n\t\t\t\tvar _p13 = _p11;\n\t\t\t\treturn {\n\t\t\t\t\tctor: '_Tuple3',\n\t\t\t\t\t_0: _p13._0,\n\t\t\t\t\t_1: _p13._1,\n\t\t\t\t\t_2: A2(\n\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\tfunction (_p14) {\n\t\t\t\t\t\t\treturn _p13._2;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t_elm_lang$core$Native_Scheduler.kill(id))\n\t\t\t\t};\n\t\t\t});\n\t\tvar bothStep = F4(\n\t\t\tfunction (interval, taggers, id, _p15) {\n\t\t\t\tvar _p16 = _p15;\n\t\t\t\treturn {\n\t\t\t\t\tctor: '_Tuple3',\n\t\t\t\t\t_0: _p16._0,\n\t\t\t\t\t_1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1),\n\t\t\t\t\t_2: _p16._2\n\t\t\t\t};\n\t\t\t});\n\t\tvar leftStep = F3(\n\t\t\tfunction (interval, taggers, _p17) {\n\t\t\t\tvar _p18 = _p17;\n\t\t\t\treturn {\n\t\t\t\t\tctor: '_Tuple3',\n\t\t\t\t\t_0: {ctor: '::', _0: interval, _1: _p18._0},\n\t\t\t\t\t_1: _p18._1,\n\t\t\t\t\t_2: _p18._2\n\t\t\t\t};\n\t\t\t});\n\t\tvar newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs);\n\t\tvar _p19 = A6(\n\t\t\t_elm_lang$core$Dict$merge,\n\t\t\tleftStep,\n\t\t\tbothStep,\n\t\t\trightStep,\n\t\t\tnewTaggers,\n\t\t\t_p10.processes,\n\t\t\t{\n\t\t\t\tctor: '_Tuple3',\n\t\t\t\t_0: {ctor: '[]'},\n\t\t\t\t_1: _elm_lang$core$Dict$empty,\n\t\t\t\t_2: _elm_lang$core$Task$succeed(\n\t\t\t\t\t{ctor: '_Tuple0'})\n\t\t\t});\n\t\tvar spawnList = _p19._0;\n\t\tvar existingDict = _p19._1;\n\t\tvar killTask = _p19._2;\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (newProcesses) {\n\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\tA2(_elm_lang$core$Time$State, newTaggers, newProcesses));\n\t\t\t},\n\t\t\tA2(\n\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\tfunction (_p20) {\n\t\t\t\t\treturn A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict);\n\t\t\t\t},\n\t\t\t\tkillTask));\n\t});\nvar _elm_lang$core$Time$Every = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'Every', _0: a, _1: b};\n\t});\nvar _elm_lang$core$Time$every = F2(\n\tfunction (interval, tagger) {\n\t\treturn _elm_lang$core$Time$subscription(\n\t\t\tA2(_elm_lang$core$Time$Every, interval, tagger));\n\t});\nvar _elm_lang$core$Time$subMap = F2(\n\tfunction (f, _p21) {\n\t\tvar _p22 = _p21;\n\t\treturn A2(\n\t\t\t_elm_lang$core$Time$Every,\n\t\t\t_p22._0,\n\t\t\tfunction (_p23) {\n\t\t\t\treturn f(\n\t\t\t\t\t_p22._1(_p23));\n\t\t\t});\n\t});\n_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap};\n\nvar _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash;\nvar _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log;\n\n//import Maybe, Native.Array, Native.List, Native.Utils, Result //\n\nvar _elm_lang$core$Native_Json = function() {\n\n\n// CORE DECODERS\n\nfunction succeed(msg)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'succeed',\n\t\tmsg: msg\n\t};\n}\n\nfunction fail(msg)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'fail',\n\t\tmsg: msg\n\t};\n}\n\nfunction decodePrimitive(tag)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: tag\n\t};\n}\n\nfunction decodeContainer(tag, decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: tag,\n\t\tdecoder: decoder\n\t};\n}\n\nfunction decodeNull(value)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'null',\n\t\tvalue: value\n\t};\n}\n\nfunction decodeField(field, decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'field',\n\t\tfield: field,\n\t\tdecoder: decoder\n\t};\n}\n\nfunction decodeIndex(index, decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'index',\n\t\tindex: index,\n\t\tdecoder: decoder\n\t};\n}\n\nfunction decodeKeyValuePairs(decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'key-value',\n\t\tdecoder: decoder\n\t};\n}\n\nfunction mapMany(f, decoders)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'map-many',\n\t\tfunc: f,\n\t\tdecoders: decoders\n\t};\n}\n\nfunction andThen(callback, decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'andThen',\n\t\tdecoder: decoder,\n\t\tcallback: callback\n\t};\n}\n\nfunction oneOf(decoders)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'oneOf',\n\t\tdecoders: decoders\n\t};\n}\n\n\n// DECODING OBJECTS\n\nfunction map1(f, d1)\n{\n\treturn mapMany(f, [d1]);\n}\n\nfunction map2(f, d1, d2)\n{\n\treturn mapMany(f, [d1, d2]);\n}\n\nfunction map3(f, d1, d2, d3)\n{\n\treturn mapMany(f, [d1, d2, d3]);\n}\n\nfunction map4(f, d1, d2, d3, d4)\n{\n\treturn mapMany(f, [d1, d2, d3, d4]);\n}\n\nfunction map5(f, d1, d2, d3, d4, d5)\n{\n\treturn mapMany(f, [d1, d2, d3, d4, d5]);\n}\n\nfunction map6(f, d1, d2, d3, d4, d5, d6)\n{\n\treturn mapMany(f, [d1, d2, d3, d4, d5, d6]);\n}\n\nfunction map7(f, d1, d2, d3, d4, d5, d6, d7)\n{\n\treturn mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);\n}\n\nfunction map8(f, d1, d2, d3, d4, d5, d6, d7, d8)\n{\n\treturn mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);\n}\n\n\n// DECODE HELPERS\n\nfunction ok(value)\n{\n\treturn { tag: 'ok', value: value };\n}\n\nfunction badPrimitive(type, value)\n{\n\treturn { tag: 'primitive', type: type, value: value };\n}\n\nfunction badIndex(index, nestedProblems)\n{\n\treturn { tag: 'index', index: index, rest: nestedProblems };\n}\n\nfunction badField(field, nestedProblems)\n{\n\treturn { tag: 'field', field: field, rest: nestedProblems };\n}\n\nfunction badIndex(index, nestedProblems)\n{\n\treturn { tag: 'index', index: index, rest: nestedProblems };\n}\n\nfunction badOneOf(problems)\n{\n\treturn { tag: 'oneOf', problems: problems };\n}\n\nfunction bad(msg)\n{\n\treturn { tag: 'fail', msg: msg };\n}\n\nfunction badToString(problem)\n{\n\tvar context = '_';\n\twhile (problem)\n\t{\n\t\tswitch (problem.tag)\n\t\t{\n\t\t\tcase 'primitive':\n\t\t\t\treturn 'Expecting ' + problem.type\n\t\t\t\t\t+ (context === '_' ? '' : ' at ' + context)\n\t\t\t\t\t+ ' but instead got: ' + jsToString(problem.value);\n\n\t\t\tcase 'index':\n\t\t\t\tcontext += '[' + problem.index + ']';\n\t\t\t\tproblem = problem.rest;\n\t\t\t\tbreak;\n\n\t\t\tcase 'field':\n\t\t\t\tcontext += '.' + problem.field;\n\t\t\t\tproblem = problem.rest;\n\t\t\t\tbreak;\n\n\t\t\tcase 'oneOf':\n\t\t\t\tvar problems = problem.problems;\n\t\t\t\tfor (var i = 0; i < problems.length; i++)\n\t\t\t\t{\n\t\t\t\t\tproblems[i] = badToString(problems[i]);\n\t\t\t\t}\n\t\t\t\treturn 'I ran into the following problems'\n\t\t\t\t\t+ (context === '_' ? '' : ' at ' + context)\n\t\t\t\t\t+ ':\\n\\n' + problems.join('\\n');\n\n\t\t\tcase 'fail':\n\t\t\t\treturn 'I ran into a `fail` decoder'\n\t\t\t\t\t+ (context === '_' ? '' : ' at ' + context)\n\t\t\t\t\t+ ': ' + problem.msg;\n\t\t}\n\t}\n}\n\nfunction jsToString(value)\n{\n\treturn value === undefined\n\t\t? 'undefined'\n\t\t: JSON.stringify(value);\n}\n\n\n// DECODE\n\nfunction runOnString(decoder, string)\n{\n\tvar json;\n\ttry\n\t{\n\t\tjson = JSON.parse(string);\n\t}\n\tcatch (e)\n\t{\n\t\treturn _elm_lang$core$Result$Err('Given an invalid JSON: ' + e.message);\n\t}\n\treturn run(decoder, json);\n}\n\nfunction run(decoder, value)\n{\n\tvar result = runHelp(decoder, value);\n\treturn (result.tag === 'ok')\n\t\t? _elm_lang$core$Result$Ok(result.value)\n\t\t: _elm_lang$core$Result$Err(badToString(result));\n}\n\nfunction runHelp(decoder, value)\n{\n\tswitch (decoder.tag)\n\t{\n\t\tcase 'bool':\n\t\t\treturn (typeof value === 'boolean')\n\t\t\t\t? ok(value)\n\t\t\t\t: badPrimitive('a Bool', value);\n\n\t\tcase 'int':\n\t\t\tif (typeof value !== 'number') {\n\t\t\t\treturn badPrimitive('an Int', value);\n\t\t\t}\n\n\t\t\tif (-2147483647 < value && value < 2147483647 && (value | 0) === value) {\n\t\t\t\treturn ok(value);\n\t\t\t}\n\n\t\t\tif (isFinite(value) && !(value % 1)) {\n\t\t\t\treturn ok(value);\n\t\t\t}\n\n\t\t\treturn badPrimitive('an Int', value);\n\n\t\tcase 'float':\n\t\t\treturn (typeof value === 'number')\n\t\t\t\t? ok(value)\n\t\t\t\t: badPrimitive('a Float', value);\n\n\t\tcase 'string':\n\t\t\treturn (typeof value === 'string')\n\t\t\t\t? ok(value)\n\t\t\t\t: (value instanceof String)\n\t\t\t\t\t? ok(value + '')\n\t\t\t\t\t: badPrimitive('a String', value);\n\n\t\tcase 'null':\n\t\t\treturn (value === null)\n\t\t\t\t? ok(decoder.value)\n\t\t\t\t: badPrimitive('null', value);\n\n\t\tcase 'value':\n\t\t\treturn ok(value);\n\n\t\tcase 'list':\n\t\t\tif (!(value instanceof Array))\n\t\t\t{\n\t\t\t\treturn badPrimitive('a List', value);\n\t\t\t}\n\n\t\t\tvar list = _elm_lang$core$Native_List.Nil;\n\t\t\tfor (var i = value.length; i--; )\n\t\t\t{\n\t\t\t\tvar result = runHelp(decoder.decoder, value[i]);\n\t\t\t\tif (result.tag !== 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn badIndex(i, result)\n\t\t\t\t}\n\t\t\t\tlist = _elm_lang$core$Native_List.Cons(result.value, list);\n\t\t\t}\n\t\t\treturn ok(list);\n\n\t\tcase 'array':\n\t\t\tif (!(value instanceof Array))\n\t\t\t{\n\t\t\t\treturn badPrimitive('an Array', value);\n\t\t\t}\n\n\t\t\tvar len = value.length;\n\t\t\tvar array = new Array(len);\n\t\t\tfor (var i = len; i--; )\n\t\t\t{\n\t\t\t\tvar result = runHelp(decoder.decoder, value[i]);\n\t\t\t\tif (result.tag !== 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn badIndex(i, result);\n\t\t\t\t}\n\t\t\t\tarray[i] = result.value;\n\t\t\t}\n\t\t\treturn ok(_elm_lang$core$Native_Array.fromJSArray(array));\n\n\t\tcase 'maybe':\n\t\t\tvar result = runHelp(decoder.decoder, value);\n\t\t\treturn (result.tag === 'ok')\n\t\t\t\t? ok(_elm_lang$core$Maybe$Just(result.value))\n\t\t\t\t: ok(_elm_lang$core$Maybe$Nothing);\n\n\t\tcase 'field':\n\t\t\tvar field = decoder.field;\n\t\t\tif (typeof value !== 'object' || value === null || !(field in value))\n\t\t\t{\n\t\t\t\treturn badPrimitive('an object with a field named `' + field + '`', value);\n\t\t\t}\n\n\t\t\tvar result = runHelp(decoder.decoder, value[field]);\n\t\t\treturn (result.tag === 'ok') ? result : badField(field, result);\n\n\t\tcase 'index':\n\t\t\tvar index = decoder.index;\n\t\t\tif (!(value instanceof Array))\n\t\t\t{\n\t\t\t\treturn badPrimitive('an array', value);\n\t\t\t}\n\t\t\tif (index >= value.length)\n\t\t\t{\n\t\t\t\treturn badPrimitive('a longer array. Need index ' + index + ' but there are only ' + value.length + ' entries', value);\n\t\t\t}\n\n\t\t\tvar result = runHelp(decoder.decoder, value[index]);\n\t\t\treturn (result.tag === 'ok') ? result : badIndex(index, result);\n\n\t\tcase 'key-value':\n\t\t\tif (typeof value !== 'object' || value === null || value instanceof Array)\n\t\t\t{\n\t\t\t\treturn badPrimitive('an object', value);\n\t\t\t}\n\n\t\t\tvar keyValuePairs = _elm_lang$core$Native_List.Nil;\n\t\t\tfor (var key in value)\n\t\t\t{\n\t\t\t\tvar result = runHelp(decoder.decoder, value[key]);\n\t\t\t\tif (result.tag !== 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn badField(key, result);\n\t\t\t\t}\n\t\t\t\tvar pair = _elm_lang$core$Native_Utils.Tuple2(key, result.value);\n\t\t\t\tkeyValuePairs = _elm_lang$core$Native_List.Cons(pair, keyValuePairs);\n\t\t\t}\n\t\t\treturn ok(keyValuePairs);\n\n\t\tcase 'map-many':\n\t\t\tvar answer = decoder.func;\n\t\t\tvar decoders = decoder.decoders;\n\t\t\tfor (var i = 0; i < decoders.length; i++)\n\t\t\t{\n\t\t\t\tvar result = runHelp(decoders[i], value);\n\t\t\t\tif (result.tag !== 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tanswer = answer(result.value);\n\t\t\t}\n\t\t\treturn ok(answer);\n\n\t\tcase 'andThen':\n\t\t\tvar result = runHelp(decoder.decoder, value);\n\t\t\treturn (result.tag !== 'ok')\n\t\t\t\t? result\n\t\t\t\t: runHelp(decoder.callback(result.value), value);\n\n\t\tcase 'oneOf':\n\t\t\tvar errors = [];\n\t\t\tvar temp = decoder.decoders;\n\t\t\twhile (temp.ctor !== '[]')\n\t\t\t{\n\t\t\t\tvar result = runHelp(temp._0, value);\n\n\t\t\t\tif (result.tag === 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\terrors.push(result);\n\n\t\t\t\ttemp = temp._1;\n\t\t\t}\n\t\t\treturn badOneOf(errors);\n\n\t\tcase 'fail':\n\t\t\treturn bad(decoder.msg);\n\n\t\tcase 'succeed':\n\t\t\treturn ok(decoder.msg);\n\t}\n}\n\n\n// EQUALITY\n\nfunction equality(a, b)\n{\n\tif (a === b)\n\t{\n\t\treturn true;\n\t}\n\n\tif (a.tag !== b.tag)\n\t{\n\t\treturn false;\n\t}\n\n\tswitch (a.tag)\n\t{\n\t\tcase 'succeed':\n\t\tcase 'fail':\n\t\t\treturn a.msg === b.msg;\n\n\t\tcase 'bool':\n\t\tcase 'int':\n\t\tcase 'float':\n\t\tcase 'string':\n\t\tcase 'value':\n\t\t\treturn true;\n\n\t\tcase 'null':\n\t\t\treturn a.value === b.value;\n\n\t\tcase 'list':\n\t\tcase 'array':\n\t\tcase 'maybe':\n\t\tcase 'key-value':\n\t\t\treturn equality(a.decoder, b.decoder);\n\n\t\tcase 'field':\n\t\t\treturn a.field === b.field && equality(a.decoder, b.decoder);\n\n\t\tcase 'index':\n\t\t\treturn a.index === b.index && equality(a.decoder, b.decoder);\n\n\t\tcase 'map-many':\n\t\t\tif (a.func !== b.func)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn listEquality(a.decoders, b.decoders);\n\n\t\tcase 'andThen':\n\t\t\treturn a.callback === b.callback && equality(a.decoder, b.decoder);\n\n\t\tcase 'oneOf':\n\t\t\treturn listEquality(a.decoders, b.decoders);\n\t}\n}\n\nfunction listEquality(aDecoders, bDecoders)\n{\n\tvar len = aDecoders.length;\n\tif (len !== bDecoders.length)\n\t{\n\t\treturn false;\n\t}\n\tfor (var i = 0; i < len; i++)\n\t{\n\t\tif (!equality(aDecoders[i], bDecoders[i]))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n\n// ENCODE\n\nfunction encode(indentLevel, value)\n{\n\treturn JSON.stringify(value, null, indentLevel);\n}\n\nfunction identity(value)\n{\n\treturn value;\n}\n\nfunction encodeObject(keyValuePairs)\n{\n\tvar obj = {};\n\twhile (keyValuePairs.ctor !== '[]')\n\t{\n\t\tvar pair = keyValuePairs._0;\n\t\tobj[pair._0] = pair._1;\n\t\tkeyValuePairs = keyValuePairs._1;\n\t}\n\treturn obj;\n}\n\nreturn {\n\tencode: F2(encode),\n\trunOnString: F2(runOnString),\n\trun: F2(run),\n\n\tdecodeNull: decodeNull,\n\tdecodePrimitive: decodePrimitive,\n\tdecodeContainer: F2(decodeContainer),\n\n\tdecodeField: F2(decodeField),\n\tdecodeIndex: F2(decodeIndex),\n\n\tmap1: F2(map1),\n\tmap2: F3(map2),\n\tmap3: F4(map3),\n\tmap4: F5(map4),\n\tmap5: F6(map5),\n\tmap6: F7(map6),\n\tmap7: F8(map7),\n\tmap8: F9(map8),\n\tdecodeKeyValuePairs: decodeKeyValuePairs,\n\n\tandThen: F2(andThen),\n\tfail: fail,\n\tsucceed: succeed,\n\toneOf: oneOf,\n\n\tidentity: identity,\n\tencodeNull: null,\n\tencodeArray: _elm_lang$core$Native_Array.toJSArray,\n\tencodeList: _elm_lang$core$Native_List.toArray,\n\tencodeObject: encodeObject,\n\n\tequality: equality\n};\n\n}();\n\nvar _elm_lang$core$Json_Encode$list = _elm_lang$core$Native_Json.encodeList;\nvar _elm_lang$core$Json_Encode$array = _elm_lang$core$Native_Json.encodeArray;\nvar _elm_lang$core$Json_Encode$object = _elm_lang$core$Native_Json.encodeObject;\nvar _elm_lang$core$Json_Encode$null = _elm_lang$core$Native_Json.encodeNull;\nvar _elm_lang$core$Json_Encode$bool = _elm_lang$core$Native_Json.identity;\nvar _elm_lang$core$Json_Encode$float = _elm_lang$core$Native_Json.identity;\nvar _elm_lang$core$Json_Encode$int = _elm_lang$core$Native_Json.identity;\nvar _elm_lang$core$Json_Encode$string = _elm_lang$core$Native_Json.identity;\nvar _elm_lang$core$Json_Encode$encode = _elm_lang$core$Native_Json.encode;\nvar _elm_lang$core$Json_Encode$Value = {ctor: 'Value'};\n\nvar _elm_lang$core$Json_Decode$null = _elm_lang$core$Native_Json.decodeNull;\nvar _elm_lang$core$Json_Decode$value = _elm_lang$core$Native_Json.decodePrimitive('value');\nvar _elm_lang$core$Json_Decode$andThen = _elm_lang$core$Native_Json.andThen;\nvar _elm_lang$core$Json_Decode$fail = _elm_lang$core$Native_Json.fail;\nvar _elm_lang$core$Json_Decode$succeed = _elm_lang$core$Native_Json.succeed;\nvar _elm_lang$core$Json_Decode$lazy = function (thunk) {\n\treturn A2(\n\t\t_elm_lang$core$Json_Decode$andThen,\n\t\tthunk,\n\t\t_elm_lang$core$Json_Decode$succeed(\n\t\t\t{ctor: '_Tuple0'}));\n};\nvar _elm_lang$core$Json_Decode$decodeValue = _elm_lang$core$Native_Json.run;\nvar _elm_lang$core$Json_Decode$decodeString = _elm_lang$core$Native_Json.runOnString;\nvar _elm_lang$core$Json_Decode$map8 = _elm_lang$core$Native_Json.map8;\nvar _elm_lang$core$Json_Decode$map7 = _elm_lang$core$Native_Json.map7;\nvar _elm_lang$core$Json_Decode$map6 = _elm_lang$core$Native_Json.map6;\nvar _elm_lang$core$Json_Decode$map5 = _elm_lang$core$Native_Json.map5;\nvar _elm_lang$core$Json_Decode$map4 = _elm_lang$core$Native_Json.map4;\nvar _elm_lang$core$Json_Decode$map3 = _elm_lang$core$Native_Json.map3;\nvar _elm_lang$core$Json_Decode$map2 = _elm_lang$core$Native_Json.map2;\nvar _elm_lang$core$Json_Decode$map = _elm_lang$core$Native_Json.map1;\nvar _elm_lang$core$Json_Decode$oneOf = _elm_lang$core$Native_Json.oneOf;\nvar _elm_lang$core$Json_Decode$maybe = function (decoder) {\n\treturn A2(_elm_lang$core$Native_Json.decodeContainer, 'maybe', decoder);\n};\nvar _elm_lang$core$Json_Decode$index = _elm_lang$core$Native_Json.decodeIndex;\nvar _elm_lang$core$Json_Decode$field = _elm_lang$core$Native_Json.decodeField;\nvar _elm_lang$core$Json_Decode$at = F2(\n\tfunction (fields, decoder) {\n\t\treturn A3(_elm_lang$core$List$foldr, _elm_lang$core$Json_Decode$field, decoder, fields);\n\t});\nvar _elm_lang$core$Json_Decode$keyValuePairs = _elm_lang$core$Native_Json.decodeKeyValuePairs;\nvar _elm_lang$core$Json_Decode$dict = function (decoder) {\n\treturn A2(\n\t\t_elm_lang$core$Json_Decode$map,\n\t\t_elm_lang$core$Dict$fromList,\n\t\t_elm_lang$core$Json_Decode$keyValuePairs(decoder));\n};\nvar _elm_lang$core$Json_Decode$array = function (decoder) {\n\treturn A2(_elm_lang$core$Native_Json.decodeContainer, 'array', decoder);\n};\nvar _elm_lang$core$Json_Decode$list = function (decoder) {\n\treturn A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder);\n};\nvar _elm_lang$core$Json_Decode$nullable = function (decoder) {\n\treturn _elm_lang$core$Json_Decode$oneOf(\n\t\t{\n\t\t\tctor: '::',\n\t\t\t_0: _elm_lang$core$Json_Decode$null(_elm_lang$core$Maybe$Nothing),\n\t\t\t_1: {\n\t\t\t\tctor: '::',\n\t\t\t\t_0: A2(_elm_lang$core$Json_Decode$map, _elm_lang$core$Maybe$Just, decoder),\n\t\t\t\t_1: {ctor: '[]'}\n\t\t\t}\n\t\t});\n};\nvar _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float');\nvar _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int');\nvar _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool');\nvar _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string');\nvar _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'};\n\nvar _elm_lang$core$Tuple$mapSecond = F2(\n\tfunction (func, _p0) {\n\t\tvar _p1 = _p0;\n\t\treturn {\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: _p1._0,\n\t\t\t_1: func(_p1._1)\n\t\t};\n\t});\nvar _elm_lang$core$Tuple$mapFirst = F2(\n\tfunction (func, _p2) {\n\t\tvar _p3 = _p2;\n\t\treturn {\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: func(_p3._0),\n\t\t\t_1: _p3._1\n\t\t};\n\t});\nvar _elm_lang$core$Tuple$second = function (_p4) {\n\tvar _p5 = _p4;\n\treturn _p5._1;\n};\nvar _elm_lang$core$Tuple$first = function (_p6) {\n\tvar _p7 = _p6;\n\treturn _p7._0;\n};\n\nvar _elm_lang$virtual_dom$VirtualDom_Debug$wrap;\nvar _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags;\n\nvar _elm_lang$virtual_dom$Native_VirtualDom = function() {\n\nvar STYLE_KEY = 'STYLE';\nvar EVENT_KEY = 'EVENT';\nvar ATTR_KEY = 'ATTR';\nvar ATTR_NS_KEY = 'ATTR_NS';\n\nvar localDoc = typeof document !== 'undefined' ? document : {};\n\n\n//////////// VIRTUAL DOM NODES ////////////\n\n\nfunction text(string)\n{\n\treturn {\n\t\ttype: 'text',\n\t\ttext: string\n\t};\n}\n\n\nfunction node(tag)\n{\n\treturn F2(function(factList, kidList) {\n\t\treturn nodeHelp(tag, factList, kidList);\n\t});\n}\n\n\nfunction nodeHelp(tag, factList, kidList)\n{\n\tvar organized = organizeFacts(factList);\n\tvar namespace = organized.namespace;\n\tvar facts = organized.facts;\n\n\tvar children = [];\n\tvar descendantsCount = 0;\n\twhile (kidList.ctor !== '[]')\n\t{\n\t\tvar kid = kidList._0;\n\t\tdescendantsCount += (kid.descendantsCount || 0);\n\t\tchildren.push(kid);\n\t\tkidList = kidList._1;\n\t}\n\tdescendantsCount += children.length;\n\n\treturn {\n\t\ttype: 'node',\n\t\ttag: tag,\n\t\tfacts: facts,\n\t\tchildren: children,\n\t\tnamespace: namespace,\n\t\tdescendantsCount: descendantsCount\n\t};\n}\n\n\nfunction keyedNode(tag, factList, kidList)\n{\n\tvar organized = organizeFacts(factList);\n\tvar namespace = organized.namespace;\n\tvar facts = organized.facts;\n\n\tvar children = [];\n\tvar descendantsCount = 0;\n\twhile (kidList.ctor !== '[]')\n\t{\n\t\tvar kid = kidList._0;\n\t\tdescendantsCount += (kid._1.descendantsCount || 0);\n\t\tchildren.push(kid);\n\t\tkidList = kidList._1;\n\t}\n\tdescendantsCount += children.length;\n\n\treturn {\n\t\ttype: 'keyed-node',\n\t\ttag: tag,\n\t\tfacts: facts,\n\t\tchildren: children,\n\t\tnamespace: namespace,\n\t\tdescendantsCount: descendantsCount\n\t};\n}\n\n\nfunction custom(factList, model, impl)\n{\n\tvar facts = organizeFacts(factList).facts;\n\n\treturn {\n\t\ttype: 'custom',\n\t\tfacts: facts,\n\t\tmodel: model,\n\t\timpl: impl\n\t};\n}\n\n\nfunction map(tagger, node)\n{\n\treturn {\n\t\ttype: 'tagger',\n\t\ttagger: tagger,\n\t\tnode: node,\n\t\tdescendantsCount: 1 + (node.descendantsCount || 0)\n\t};\n}\n\n\nfunction thunk(func, args, thunk)\n{\n\treturn {\n\t\ttype: 'thunk',\n\t\tfunc: func,\n\t\targs: args,\n\t\tthunk: thunk,\n\t\tnode: undefined\n\t};\n}\n\nfunction lazy(fn, a)\n{\n\treturn thunk(fn, [a], function() {\n\t\treturn fn(a);\n\t});\n}\n\nfunction lazy2(fn, a, b)\n{\n\treturn thunk(fn, [a,b], function() {\n\t\treturn A2(fn, a, b);\n\t});\n}\n\nfunction lazy3(fn, a, b, c)\n{\n\treturn thunk(fn, [a,b,c], function() {\n\t\treturn A3(fn, a, b, c);\n\t});\n}\n\n\n\n// FACTS\n\n\nfunction organizeFacts(factList)\n{\n\tvar namespace, facts = {};\n\n\twhile (factList.ctor !== '[]')\n\t{\n\t\tvar entry = factList._0;\n\t\tvar key = entry.key;\n\n\t\tif (key === ATTR_KEY || key === ATTR_NS_KEY || key === EVENT_KEY)\n\t\t{\n\t\t\tvar subFacts = facts[key] || {};\n\t\t\tsubFacts[entry.realKey] = entry.value;\n\t\t\tfacts[key] = subFacts;\n\t\t}\n\t\telse if (key === STYLE_KEY)\n\t\t{\n\t\t\tvar styles = facts[key] || {};\n\t\t\tvar styleList = entry.value;\n\t\t\twhile (styleList.ctor !== '[]')\n\t\t\t{\n\t\t\t\tvar style = styleList._0;\n\t\t\t\tstyles[style._0] = style._1;\n\t\t\t\tstyleList = styleList._1;\n\t\t\t}\n\t\t\tfacts[key] = styles;\n\t\t}\n\t\telse if (key === 'namespace')\n\t\t{\n\t\t\tnamespace = entry.value;\n\t\t}\n\t\telse if (key === 'className')\n\t\t{\n\t\t\tvar classes = facts[key];\n\t\t\tfacts[key] = typeof classes === 'undefined'\n\t\t\t\t? entry.value\n\t\t\t\t: classes + ' ' + entry.value;\n\t\t}\n \t\telse\n\t\t{\n\t\t\tfacts[key] = entry.value;\n\t\t}\n\t\tfactList = factList._1;\n\t}\n\n\treturn {\n\t\tfacts: facts,\n\t\tnamespace: namespace\n\t};\n}\n\n\n\n//////////// PROPERTIES AND ATTRIBUTES ////////////\n\n\nfunction style(value)\n{\n\treturn {\n\t\tkey: STYLE_KEY,\n\t\tvalue: value\n\t};\n}\n\n\nfunction property(key, value)\n{\n\treturn {\n\t\tkey: key,\n\t\tvalue: value\n\t};\n}\n\n\nfunction attribute(key, value)\n{\n\treturn {\n\t\tkey: ATTR_KEY,\n\t\trealKey: key,\n\t\tvalue: value\n\t};\n}\n\n\nfunction attributeNS(namespace, key, value)\n{\n\treturn {\n\t\tkey: ATTR_NS_KEY,\n\t\trealKey: key,\n\t\tvalue: {\n\t\t\tvalue: value,\n\t\t\tnamespace: namespace\n\t\t}\n\t};\n}\n\n\nfunction on(name, options, decoder)\n{\n\treturn {\n\t\tkey: EVENT_KEY,\n\t\trealKey: name,\n\t\tvalue: {\n\t\t\toptions: options,\n\t\t\tdecoder: decoder\n\t\t}\n\t};\n}\n\n\nfunction equalEvents(a, b)\n{\n\tif (a.options !== b.options)\n\t{\n\t\tif (a.options.stopPropagation !== b.options.stopPropagation || a.options.preventDefault !== b.options.preventDefault)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn _elm_lang$core$Native_Json.equality(a.decoder, b.decoder);\n}\n\n\nfunction mapProperty(func, property)\n{\n\tif (property.key !== EVENT_KEY)\n\t{\n\t\treturn property;\n\t}\n\treturn on(\n\t\tproperty.realKey,\n\t\tproperty.value.options,\n\t\tA2(_elm_lang$core$Json_Decode$map, func, property.value.decoder)\n\t);\n}\n\n\n//////////// RENDER ////////////\n\n\nfunction render(vNode, eventNode)\n{\n\tswitch (vNode.type)\n\t{\n\t\tcase 'thunk':\n\t\t\tif (!vNode.node)\n\t\t\t{\n\t\t\t\tvNode.node = vNode.thunk();\n\t\t\t}\n\t\t\treturn render(vNode.node, eventNode);\n\n\t\tcase 'tagger':\n\t\t\tvar subNode = vNode.node;\n\t\t\tvar tagger = vNode.tagger;\n\n\t\t\twhile (subNode.type === 'tagger')\n\t\t\t{\n\t\t\t\ttypeof tagger !== 'object'\n\t\t\t\t\t? tagger = [tagger, subNode.tagger]\n\t\t\t\t\t: tagger.push(subNode.tagger);\n\n\t\t\t\tsubNode = subNode.node;\n\t\t\t}\n\n\t\t\tvar subEventRoot = { tagger: tagger, parent: eventNode };\n\t\t\tvar domNode = render(subNode, subEventRoot);\n\t\t\tdomNode.elm_event_node_ref = subEventRoot;\n\t\t\treturn domNode;\n\n\t\tcase 'text':\n\t\t\treturn localDoc.createTextNode(vNode.text);\n\n\t\tcase 'node':\n\t\t\tvar domNode = vNode.namespace\n\t\t\t\t? localDoc.createElementNS(vNode.namespace, vNode.tag)\n\t\t\t\t: localDoc.createElement(vNode.tag);\n\n\t\t\tapplyFacts(domNode, eventNode, vNode.facts);\n\n\t\t\tvar children = vNode.children;\n\n\t\t\tfor (var i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tdomNode.appendChild(render(children[i], eventNode));\n\t\t\t}\n\n\t\t\treturn domNode;\n\n\t\tcase 'keyed-node':\n\t\t\tvar domNode = vNode.namespace\n\t\t\t\t? localDoc.createElementNS(vNode.namespace, vNode.tag)\n\t\t\t\t: localDoc.createElement(vNode.tag);\n\n\t\t\tapplyFacts(domNode, eventNode, vNode.facts);\n\n\t\t\tvar children = vNode.children;\n\n\t\t\tfor (var i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tdomNode.appendChild(render(children[i]._1, eventNode));\n\t\t\t}\n\n\t\t\treturn domNode;\n\n\t\tcase 'custom':\n\t\t\tvar domNode = vNode.impl.render(vNode.model);\n\t\t\tapplyFacts(domNode, eventNode, vNode.facts);\n\t\t\treturn domNode;\n\t}\n}\n\n\n\n//////////// APPLY FACTS ////////////\n\n\nfunction applyFacts(domNode, eventNode, facts)\n{\n\tfor (var key in facts)\n\t{\n\t\tvar value = facts[key];\n\n\t\tswitch (key)\n\t\t{\n\t\t\tcase STYLE_KEY:\n\t\t\t\tapplyStyles(domNode, value);\n\t\t\t\tbreak;\n\n\t\t\tcase EVENT_KEY:\n\t\t\t\tapplyEvents(domNode, eventNode, value);\n\t\t\t\tbreak;\n\n\t\t\tcase ATTR_KEY:\n\t\t\t\tapplyAttrs(domNode, value);\n\t\t\t\tbreak;\n\n\t\t\tcase ATTR_NS_KEY:\n\t\t\t\tapplyAttrsNS(domNode, value);\n\t\t\t\tbreak;\n\n\t\t\tcase 'value':\n\t\t\t\tif (domNode[key] !== value)\n\t\t\t\t{\n\t\t\t\t\tdomNode[key] = value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tdomNode[key] = value;\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction applyStyles(domNode, styles)\n{\n\tvar domNodeStyle = domNode.style;\n\n\tfor (var key in styles)\n\t{\n\t\tdomNodeStyle[key] = styles[key];\n\t}\n}\n\nfunction applyEvents(domNode, eventNode, events)\n{\n\tvar allHandlers = domNode.elm_handlers || {};\n\n\tfor (var key in events)\n\t{\n\t\tvar handler = allHandlers[key];\n\t\tvar value = events[key];\n\n\t\tif (typeof value === 'undefined')\n\t\t{\n\t\t\tdomNode.removeEventListener(key, handler);\n\t\t\tallHandlers[key] = undefined;\n\t\t}\n\t\telse if (typeof handler === 'undefined')\n\t\t{\n\t\t\tvar handler = makeEventHandler(eventNode, value);\n\t\t\tdomNode.addEventListener(key, handler);\n\t\t\tallHandlers[key] = handler;\n\t\t}\n\t\telse\n\t\t{\n\t\t\thandler.info = value;\n\t\t}\n\t}\n\n\tdomNode.elm_handlers = allHandlers;\n}\n\nfunction makeEventHandler(eventNode, info)\n{\n\tfunction eventHandler(event)\n\t{\n\t\tvar info = eventHandler.info;\n\n\t\tvar value = A2(_elm_lang$core$Native_Json.run, info.decoder, event);\n\n\t\tif (value.ctor === 'Ok')\n\t\t{\n\t\t\tvar options = info.options;\n\t\t\tif (options.stopPropagation)\n\t\t\t{\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\tif (options.preventDefault)\n\t\t\t{\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tvar message = value._0;\n\n\t\t\tvar currentEventNode = eventNode;\n\t\t\twhile (currentEventNode)\n\t\t\t{\n\t\t\t\tvar tagger = currentEventNode.tagger;\n\t\t\t\tif (typeof tagger === 'function')\n\t\t\t\t{\n\t\t\t\t\tmessage = tagger(message);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfor (var i = tagger.length; i--; )\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage = tagger[i](message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurrentEventNode = currentEventNode.parent;\n\t\t\t}\n\t\t}\n\t};\n\n\teventHandler.info = info;\n\n\treturn eventHandler;\n}\n\nfunction applyAttrs(domNode, attrs)\n{\n\tfor (var key in attrs)\n\t{\n\t\tvar value = attrs[key];\n\t\tif (typeof value === 'undefined')\n\t\t{\n\t\t\tdomNode.removeAttribute(key);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdomNode.setAttribute(key, value);\n\t\t}\n\t}\n}\n\nfunction applyAttrsNS(domNode, nsAttrs)\n{\n\tfor (var key in nsAttrs)\n\t{\n\t\tvar pair = nsAttrs[key];\n\t\tvar namespace = pair.namespace;\n\t\tvar value = pair.value;\n\n\t\tif (typeof value === 'undefined')\n\t\t{\n\t\t\tdomNode.removeAttributeNS(namespace, key);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdomNode.setAttributeNS(namespace, key, value);\n\t\t}\n\t}\n}\n\n\n\n//////////// DIFF ////////////\n\n\nfunction diff(a, b)\n{\n\tvar patches = [];\n\tdiffHelp(a, b, patches, 0);\n\treturn patches;\n}\n\n\nfunction makePatch(type, index, data)\n{\n\treturn {\n\t\tindex: index,\n\t\ttype: type,\n\t\tdata: data,\n\t\tdomNode: undefined,\n\t\teventNode: undefined\n\t};\n}\n\n\nfunction diffHelp(a, b, patches, index)\n{\n\tif (a === b)\n\t{\n\t\treturn;\n\t}\n\n\tvar aType = a.type;\n\tvar bType = b.type;\n\n\t// Bail if you run into different types of nodes. Implies that the\n\t// structure has changed significantly and it's not worth a diff.\n\tif (aType !== bType)\n\t{\n\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\treturn;\n\t}\n\n\t// Now we know that both nodes are the same type.\n\tswitch (bType)\n\t{\n\t\tcase 'thunk':\n\t\t\tvar aArgs = a.args;\n\t\t\tvar bArgs = b.args;\n\t\t\tvar i = aArgs.length;\n\t\t\tvar same = a.func === b.func && i === bArgs.length;\n\t\t\twhile (same && i--)\n\t\t\t{\n\t\t\t\tsame = aArgs[i] === bArgs[i];\n\t\t\t}\n\t\t\tif (same)\n\t\t\t{\n\t\t\t\tb.node = a.node;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tb.node = b.thunk();\n\t\t\tvar subPatches = [];\n\t\t\tdiffHelp(a.node, b.node, subPatches, 0);\n\t\t\tif (subPatches.length > 0)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-thunk', index, subPatches));\n\t\t\t}\n\t\t\treturn;\n\n\t\tcase 'tagger':\n\t\t\t// gather nested taggers\n\t\t\tvar aTaggers = a.tagger;\n\t\t\tvar bTaggers = b.tagger;\n\t\t\tvar nesting = false;\n\n\t\t\tvar aSubNode = a.node;\n\t\t\twhile (aSubNode.type === 'tagger')\n\t\t\t{\n\t\t\t\tnesting = true;\n\n\t\t\t\ttypeof aTaggers !== 'object'\n\t\t\t\t\t? aTaggers = [aTaggers, aSubNode.tagger]\n\t\t\t\t\t: aTaggers.push(aSubNode.tagger);\n\n\t\t\t\taSubNode = aSubNode.node;\n\t\t\t}\n\n\t\t\tvar bSubNode = b.node;\n\t\t\twhile (bSubNode.type === 'tagger')\n\t\t\t{\n\t\t\t\tnesting = true;\n\n\t\t\t\ttypeof bTaggers !== 'object'\n\t\t\t\t\t? bTaggers = [bTaggers, bSubNode.tagger]\n\t\t\t\t\t: bTaggers.push(bSubNode.tagger);\n\n\t\t\t\tbSubNode = bSubNode.node;\n\t\t\t}\n\n\t\t\t// Just bail if different numbers of taggers. This implies the\n\t\t\t// structure of the virtual DOM has changed.\n\t\t\tif (nesting && aTaggers.length !== bTaggers.length)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// check if taggers are \"the same\"\n\t\t\tif (nesting ? !pairwiseRefEqual(aTaggers, bTaggers) : aTaggers !== bTaggers)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-tagger', index, bTaggers));\n\t\t\t}\n\n\t\t\t// diff everything below the taggers\n\t\t\tdiffHelp(aSubNode, bSubNode, patches, index + 1);\n\t\t\treturn;\n\n\t\tcase 'text':\n\t\t\tif (a.text !== b.text)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-text', index, b.text));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn;\n\n\t\tcase 'node':\n\t\t\t// Bail if obvious indicators have changed. Implies more serious\n\t\t\t// structural changes such that it's not worth it to diff.\n\t\t\tif (a.tag !== b.tag || a.namespace !== b.namespace)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar factsDiff = diffFacts(a.facts, b.facts);\n\n\t\t\tif (typeof factsDiff !== 'undefined')\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-facts', index, factsDiff));\n\t\t\t}\n\n\t\t\tdiffChildren(a, b, patches, index);\n\t\t\treturn;\n\n\t\tcase 'keyed-node':\n\t\t\t// Bail if obvious indicators have changed. Implies more serious\n\t\t\t// structural changes such that it's not worth it to diff.\n\t\t\tif (a.tag !== b.tag || a.namespace !== b.namespace)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar factsDiff = diffFacts(a.facts, b.facts);\n\n\t\t\tif (typeof factsDiff !== 'undefined')\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-facts', index, factsDiff));\n\t\t\t}\n\n\t\t\tdiffKeyedChildren(a, b, patches, index);\n\t\t\treturn;\n\n\t\tcase 'custom':\n\t\t\tif (a.impl !== b.impl)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar factsDiff = diffFacts(a.facts, b.facts);\n\t\t\tif (typeof factsDiff !== 'undefined')\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-facts', index, factsDiff));\n\t\t\t}\n\n\t\t\tvar patch = b.impl.diff(a,b);\n\t\t\tif (patch)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-custom', index, patch));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn;\n\t}\n}\n\n\n// assumes the incoming arrays are the same length\nfunction pairwiseRefEqual(as, bs)\n{\n\tfor (var i = 0; i < as.length; i++)\n\t{\n\t\tif (as[i] !== bs[i])\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n\n// TODO Instead of creating a new diff object, it's possible to just test if\n// there *is* a diff. During the actual patch, do the diff again and make the\n// modifications directly. This way, there's no new allocations. Worth it?\nfunction diffFacts(a, b, category)\n{\n\tvar diff;\n\n\t// look for changes and removals\n\tfor (var aKey in a)\n\t{\n\t\tif (aKey === STYLE_KEY || aKey === EVENT_KEY || aKey === ATTR_KEY || aKey === ATTR_NS_KEY)\n\t\t{\n\t\t\tvar subDiff = diffFacts(a[aKey], b[aKey] || {}, aKey);\n\t\t\tif (subDiff)\n\t\t\t{\n\t\t\t\tdiff = diff || {};\n\t\t\t\tdiff[aKey] = subDiff;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\t// remove if not in the new facts\n\t\tif (!(aKey in b))\n\t\t{\n\t\t\tdiff = diff || {};\n\t\t\tdiff[aKey] =\n\t\t\t\t(typeof category === 'undefined')\n\t\t\t\t\t? (typeof a[aKey] === 'string' ? '' : null)\n\t\t\t\t\t:\n\t\t\t\t(category === STYLE_KEY)\n\t\t\t\t\t? ''\n\t\t\t\t\t:\n\t\t\t\t(category === EVENT_KEY || category === ATTR_KEY)\n\t\t\t\t\t? undefined\n\t\t\t\t\t:\n\t\t\t\t{ namespace: a[aKey].namespace, value: undefined };\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar aValue = a[aKey];\n\t\tvar bValue = b[aKey];\n\n\t\t// reference equal, so don't worry about it\n\t\tif (aValue === bValue && aKey !== 'value'\n\t\t\t|| category === EVENT_KEY && equalEvents(aValue, bValue))\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tdiff = diff || {};\n\t\tdiff[aKey] = bValue;\n\t}\n\n\t// add new stuff\n\tfor (var bKey in b)\n\t{\n\t\tif (!(bKey in a))\n\t\t{\n\t\t\tdiff = diff || {};\n\t\t\tdiff[bKey] = b[bKey];\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n\nfunction diffChildren(aParent, bParent, patches, rootIndex)\n{\n\tvar aChildren = aParent.children;\n\tvar bChildren = bParent.children;\n\n\tvar aLen = aChildren.length;\n\tvar bLen = bChildren.length;\n\n\t// FIGURE OUT IF THERE ARE INSERTS OR REMOVALS\n\n\tif (aLen > bLen)\n\t{\n\t\tpatches.push(makePatch('p-remove-last', rootIndex, aLen - bLen));\n\t}\n\telse if (aLen < bLen)\n\t{\n\t\tpatches.push(makePatch('p-append', rootIndex, bChildren.slice(aLen)));\n\t}\n\n\t// PAIRWISE DIFF EVERYTHING ELSE\n\n\tvar index = rootIndex;\n\tvar minLen = aLen < bLen ? aLen : bLen;\n\tfor (var i = 0; i < minLen; i++)\n\t{\n\t\tindex++;\n\t\tvar aChild = aChildren[i];\n\t\tdiffHelp(aChild, bChildren[i], patches, index);\n\t\tindex += aChild.descendantsCount || 0;\n\t}\n}\n\n\n\n//////////// KEYED DIFF ////////////\n\n\nfunction diffKeyedChildren(aParent, bParent, patches, rootIndex)\n{\n\tvar localPatches = [];\n\n\tvar changes = {}; // Dict String Entry\n\tvar inserts = []; // Array { index : Int, entry : Entry }\n\t// type Entry = { tag : String, vnode : VNode, index : Int, data : _ }\n\n\tvar aChildren = aParent.children;\n\tvar bChildren = bParent.children;\n\tvar aLen = aChildren.length;\n\tvar bLen = bChildren.length;\n\tvar aIndex = 0;\n\tvar bIndex = 0;\n\n\tvar index = rootIndex;\n\n\twhile (aIndex < aLen && bIndex < bLen)\n\t{\n\t\tvar a = aChildren[aIndex];\n\t\tvar b = bChildren[bIndex];\n\n\t\tvar aKey = a._0;\n\t\tvar bKey = b._0;\n\t\tvar aNode = a._1;\n\t\tvar bNode = b._1;\n\n\t\t// check if keys match\n\n\t\tif (aKey === bKey)\n\t\t{\n\t\t\tindex++;\n\t\t\tdiffHelp(aNode, bNode, localPatches, index);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\taIndex++;\n\t\t\tbIndex++;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// look ahead 1 to detect insertions and removals.\n\n\t\tvar aLookAhead = aIndex + 1 < aLen;\n\t\tvar bLookAhead = bIndex + 1 < bLen;\n\n\t\tif (aLookAhead)\n\t\t{\n\t\t\tvar aNext = aChildren[aIndex + 1];\n\t\t\tvar aNextKey = aNext._0;\n\t\t\tvar aNextNode = aNext._1;\n\t\t\tvar oldMatch = bKey === aNextKey;\n\t\t}\n\n\t\tif (bLookAhead)\n\t\t{\n\t\t\tvar bNext = bChildren[bIndex + 1];\n\t\t\tvar bNextKey = bNext._0;\n\t\t\tvar bNextNode = bNext._1;\n\t\t\tvar newMatch = aKey === bNextKey;\n\t\t}\n\n\n\t\t// swap a and b\n\t\tif (aLookAhead && bLookAhead && newMatch && oldMatch)\n\t\t{\n\t\t\tindex++;\n\t\t\tdiffHelp(aNode, bNextNode, localPatches, index);\n\t\t\tinsertNode(changes, localPatches, aKey, bNode, bIndex, inserts);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\tindex++;\n\t\t\tremoveNode(changes, localPatches, aKey, aNextNode, index);\n\t\t\tindex += aNextNode.descendantsCount || 0;\n\n\t\t\taIndex += 2;\n\t\t\tbIndex += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// insert b\n\t\tif (bLookAhead && newMatch)\n\t\t{\n\t\t\tindex++;\n\t\t\tinsertNode(changes, localPatches, bKey, bNode, bIndex, inserts);\n\t\t\tdiffHelp(aNode, bNextNode, localPatches, index);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\taIndex += 1;\n\t\t\tbIndex += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// remove a\n\t\tif (aLookAhead && oldMatch)\n\t\t{\n\t\t\tindex++;\n\t\t\tremoveNode(changes, localPatches, aKey, aNode, index);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\tindex++;\n\t\t\tdiffHelp(aNextNode, bNode, localPatches, index);\n\t\t\tindex += aNextNode.descendantsCount || 0;\n\n\t\t\taIndex += 2;\n\t\t\tbIndex += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// remove a, insert b\n\t\tif (aLookAhead && bLookAhead && aNextKey === bNextKey)\n\t\t{\n\t\t\tindex++;\n\t\t\tremoveNode(changes, localPatches, aKey, aNode, index);\n\t\t\tinsertNode(changes, localPatches, bKey, bNode, bIndex, inserts);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\tindex++;\n\t\t\tdiffHelp(aNextNode, bNextNode, localPatches, index);\n\t\t\tindex += aNextNode.descendantsCount || 0;\n\n\t\t\taIndex += 2;\n\t\t\tbIndex += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\tbreak;\n\t}\n\n\t// eat up any remaining nodes with removeNode and insertNode\n\n\twhile (aIndex < aLen)\n\t{\n\t\tindex++;\n\t\tvar a = aChildren[aIndex];\n\t\tvar aNode = a._1;\n\t\tremoveNode(changes, localPatches, a._0, aNode, index);\n\t\tindex += aNode.descendantsCount || 0;\n\t\taIndex++;\n\t}\n\n\tvar endInserts;\n\twhile (bIndex < bLen)\n\t{\n\t\tendInserts = endInserts || [];\n\t\tvar b = bChildren[bIndex];\n\t\tinsertNode(changes, localPatches, b._0, b._1, undefined, endInserts);\n\t\tbIndex++;\n\t}\n\n\tif (localPatches.length > 0 || inserts.length > 0 || typeof endInserts !== 'undefined')\n\t{\n\t\tpatches.push(makePatch('p-reorder', rootIndex, {\n\t\t\tpatches: localPatches,\n\t\t\tinserts: inserts,\n\t\t\tendInserts: endInserts\n\t\t}));\n\t}\n}\n\n\n\n//////////// CHANGES FROM KEYED DIFF ////////////\n\n\nvar POSTFIX = '_elmW6BL';\n\n\nfunction insertNode(changes, localPatches, key, vnode, bIndex, inserts)\n{\n\tvar entry = changes[key];\n\n\t// never seen this key before\n\tif (typeof entry === 'undefined')\n\t{\n\t\tentry = {\n\t\t\ttag: 'insert',\n\t\t\tvnode: vnode,\n\t\t\tindex: bIndex,\n\t\t\tdata: undefined\n\t\t};\n\n\t\tinserts.push({ index: bIndex, entry: entry });\n\t\tchanges[key] = entry;\n\n\t\treturn;\n\t}\n\n\t// this key was removed earlier, a match!\n\tif (entry.tag === 'remove')\n\t{\n\t\tinserts.push({ index: bIndex, entry: entry });\n\n\t\tentry.tag = 'move';\n\t\tvar subPatches = [];\n\t\tdiffHelp(entry.vnode, vnode, subPatches, entry.index);\n\t\tentry.index = bIndex;\n\t\tentry.data.data = {\n\t\t\tpatches: subPatches,\n\t\t\tentry: entry\n\t\t};\n\n\t\treturn;\n\t}\n\n\t// this key has already been inserted or moved, a duplicate!\n\tinsertNode(changes, localPatches, key + POSTFIX, vnode, bIndex, inserts);\n}\n\n\nfunction removeNode(changes, localPatches, key, vnode, index)\n{\n\tvar entry = changes[key];\n\n\t// never seen this key before\n\tif (typeof entry === 'undefined')\n\t{\n\t\tvar patch = makePatch('p-remove', index, undefined);\n\t\tlocalPatches.push(patch);\n\n\t\tchanges[key] = {\n\t\t\ttag: 'remove',\n\t\t\tvnode: vnode,\n\t\t\tindex: index,\n\t\t\tdata: patch\n\t\t};\n\n\t\treturn;\n\t}\n\n\t// this key was inserted earlier, a match!\n\tif (entry.tag === 'insert')\n\t{\n\t\tentry.tag = 'move';\n\t\tvar subPatches = [];\n\t\tdiffHelp(vnode, entry.vnode, subPatches, index);\n\n\t\tvar patch = makePatch('p-remove', index, {\n\t\t\tpatches: subPatches,\n\t\t\tentry: entry\n\t\t});\n\t\tlocalPatches.push(patch);\n\n\t\treturn;\n\t}\n\n\t// this key has already been removed or moved, a duplicate!\n\tremoveNode(changes, localPatches, key + POSTFIX, vnode, index);\n}\n\n\n\n//////////// ADD DOM NODES ////////////\n//\n// Each DOM node has an \"index\" assigned in order of traversal. It is important\n// to minimize our crawl over the actual DOM, so these indexes (along with the\n// descendantsCount of virtual nodes) let us skip touching entire subtrees of\n// the DOM if we know there are no patches there.\n\n\nfunction addDomNodes(domNode, vNode, patches, eventNode)\n{\n\taddDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.descendantsCount, eventNode);\n}\n\n\n// assumes `patches` is non-empty and indexes increase monotonically.\nfunction addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)\n{\n\tvar patch = patches[i];\n\tvar index = patch.index;\n\n\twhile (index === low)\n\t{\n\t\tvar patchType = patch.type;\n\n\t\tif (patchType === 'p-thunk')\n\t\t{\n\t\t\taddDomNodes(domNode, vNode.node, patch.data, eventNode);\n\t\t}\n\t\telse if (patchType === 'p-reorder')\n\t\t{\n\t\t\tpatch.domNode = domNode;\n\t\t\tpatch.eventNode = eventNode;\n\n\t\t\tvar subPatches = patch.data.patches;\n\t\t\tif (subPatches.length > 0)\n\t\t\t{\n\t\t\t\taddDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);\n\t\t\t}\n\t\t}\n\t\telse if (patchType === 'p-remove')\n\t\t{\n\t\t\tpatch.domNode = domNode;\n\t\t\tpatch.eventNode = eventNode;\n\n\t\t\tvar data = patch.data;\n\t\t\tif (typeof data !== 'undefined')\n\t\t\t{\n\t\t\t\tdata.entry.data = domNode;\n\t\t\t\tvar subPatches = data.patches;\n\t\t\t\tif (subPatches.length > 0)\n\t\t\t\t{\n\t\t\t\t\taddDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tpatch.domNode = domNode;\n\t\t\tpatch.eventNode = eventNode;\n\t\t}\n\n\t\ti++;\n\n\t\tif (!(patch = patches[i]) || (index = patch.index) > high)\n\t\t{\n\t\t\treturn i;\n\t\t}\n\t}\n\n\tswitch (vNode.type)\n\t{\n\t\tcase 'tagger':\n\t\t\tvar subNode = vNode.node;\n\n\t\t\twhile (subNode.type === \"tagger\")\n\t\t\t{\n\t\t\t\tsubNode = subNode.node;\n\t\t\t}\n\n\t\t\treturn addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref);\n\n\t\tcase 'node':\n\t\t\tvar vChildren = vNode.children;\n\t\t\tvar childNodes = domNode.childNodes;\n\t\t\tfor (var j = 0; j < vChildren.length; j++)\n\t\t\t{\n\t\t\t\tlow++;\n\t\t\t\tvar vChild = vChildren[j];\n\t\t\t\tvar nextLow = low + (vChild.descendantsCount || 0);\n\t\t\t\tif (low <= index && index <= nextLow)\n\t\t\t\t{\n\t\t\t\t\ti = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode);\n\t\t\t\t\tif (!(patch = patches[i]) || (index = patch.index) > high)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlow = nextLow;\n\t\t\t}\n\t\t\treturn i;\n\n\t\tcase 'keyed-node':\n\t\t\tvar vChildren = vNode.children;\n\t\t\tvar childNodes = domNode.childNodes;\n\t\t\tfor (var j = 0; j < vChildren.length; j++)\n\t\t\t{\n\t\t\t\tlow++;\n\t\t\t\tvar vChild = vChildren[j]._1;\n\t\t\t\tvar nextLow = low + (vChild.descendantsCount || 0);\n\t\t\t\tif (low <= index && index <= nextLow)\n\t\t\t\t{\n\t\t\t\t\ti = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode);\n\t\t\t\t\tif (!(patch = patches[i]) || (index = patch.index) > high)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlow = nextLow;\n\t\t\t}\n\t\t\treturn i;\n\n\t\tcase 'text':\n\t\tcase 'thunk':\n\t\t\tthrow new Error('should never traverse `text` or `thunk` nodes like this');\n\t}\n}\n\n\n\n//////////// APPLY PATCHES ////////////\n\n\nfunction applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)\n{\n\tif (patches.length === 0)\n\t{\n\t\treturn rootDomNode;\n\t}\n\n\taddDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);\n\treturn applyPatchesHelp(rootDomNode, patches);\n}\n\nfunction applyPatchesHelp(rootDomNode, patches)\n{\n\tfor (var i = 0; i < patches.length; i++)\n\t{\n\t\tvar patch = patches[i];\n\t\tvar localDomNode = patch.domNode\n\t\tvar newNode = applyPatch(localDomNode, patch);\n\t\tif (localDomNode === rootDomNode)\n\t\t{\n\t\t\trootDomNode = newNode;\n\t\t}\n\t}\n\treturn rootDomNode;\n}\n\nfunction applyPatch(domNode, patch)\n{\n\tswitch (patch.type)\n\t{\n\t\tcase 'p-redraw':\n\t\t\treturn applyPatchRedraw(domNode, patch.data, patch.eventNode);\n\n\t\tcase 'p-facts':\n\t\t\tapplyFacts(domNode, patch.eventNode, patch.data);\n\t\t\treturn domNode;\n\n\t\tcase 'p-text':\n\t\t\tdomNode.replaceData(0, domNode.length, patch.data);\n\t\t\treturn domNode;\n\n\t\tcase 'p-thunk':\n\t\t\treturn applyPatchesHelp(domNode, patch.data);\n\n\t\tcase 'p-tagger':\n\t\t\tif (typeof domNode.elm_event_node_ref !== 'undefined')\n\t\t\t{\n\t\t\t\tdomNode.elm_event_node_ref.tagger = patch.data;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdomNode.elm_event_node_ref = { tagger: patch.data, parent: patch.eventNode };\n\t\t\t}\n\t\t\treturn domNode;\n\n\t\tcase 'p-remove-last':\n\t\t\tvar i = patch.data;\n\t\t\twhile (i--)\n\t\t\t{\n\t\t\t\tdomNode.removeChild(domNode.lastChild);\n\t\t\t}\n\t\t\treturn domNode;\n\n\t\tcase 'p-append':\n\t\t\tvar newNodes = patch.data;\n\t\t\tfor (var i = 0; i < newNodes.length; i++)\n\t\t\t{\n\t\t\t\tdomNode.appendChild(render(newNodes[i], patch.eventNode));\n\t\t\t}\n\t\t\treturn domNode;\n\n\t\tcase 'p-remove':\n\t\t\tvar data = patch.data;\n\t\t\tif (typeof data === 'undefined')\n\t\t\t{\n\t\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t\t\treturn domNode;\n\t\t\t}\n\t\t\tvar entry = data.entry;\n\t\t\tif (typeof entry.index !== 'undefined')\n\t\t\t{\n\t\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t\t}\n\t\t\tentry.data = applyPatchesHelp(domNode, data.patches);\n\t\t\treturn domNode;\n\n\t\tcase 'p-reorder':\n\t\t\treturn applyPatchReorder(domNode, patch);\n\n\t\tcase 'p-custom':\n\t\t\tvar impl = patch.data;\n\t\t\treturn impl.applyPatch(domNode, impl.data);\n\n\t\tdefault:\n\t\t\tthrow new Error('Ran into an unknown patch!');\n\t}\n}\n\n\nfunction applyPatchRedraw(domNode, vNode, eventNode)\n{\n\tvar parentNode = domNode.parentNode;\n\tvar newNode = render(vNode, eventNode);\n\n\tif (typeof newNode.elm_event_node_ref === 'undefined')\n\t{\n\t\tnewNode.elm_event_node_ref = domNode.elm_event_node_ref;\n\t}\n\n\tif (parentNode && newNode !== domNode)\n\t{\n\t\tparentNode.replaceChild(newNode, domNode);\n\t}\n\treturn newNode;\n}\n\n\nfunction applyPatchReorder(domNode, patch)\n{\n\tvar data = patch.data;\n\n\t// remove end inserts\n\tvar frag = applyPatchReorderEndInsertsHelp(data.endInserts, patch);\n\n\t// removals\n\tdomNode = applyPatchesHelp(domNode, data.patches);\n\n\t// inserts\n\tvar inserts = data.inserts;\n\tfor (var i = 0; i < inserts.length; i++)\n\t{\n\t\tvar insert = inserts[i];\n\t\tvar entry = insert.entry;\n\t\tvar node = entry.tag === 'move'\n\t\t\t? entry.data\n\t\t\t: render(entry.vnode, patch.eventNode);\n\t\tdomNode.insertBefore(node, domNode.childNodes[insert.index]);\n\t}\n\n\t// add end inserts\n\tif (typeof frag !== 'undefined')\n\t{\n\t\tdomNode.appendChild(frag);\n\t}\n\n\treturn domNode;\n}\n\n\nfunction applyPatchReorderEndInsertsHelp(endInserts, patch)\n{\n\tif (typeof endInserts === 'undefined')\n\t{\n\t\treturn;\n\t}\n\n\tvar frag = localDoc.createDocumentFragment();\n\tfor (var i = 0; i < endInserts.length; i++)\n\t{\n\t\tvar insert = endInserts[i];\n\t\tvar entry = insert.entry;\n\t\tfrag.appendChild(entry.tag === 'move'\n\t\t\t? entry.data\n\t\t\t: render(entry.vnode, patch.eventNode)\n\t\t);\n\t}\n\treturn frag;\n}\n\n\n// PROGRAMS\n\nvar program = makeProgram(checkNoFlags);\nvar programWithFlags = makeProgram(checkYesFlags);\n\nfunction makeProgram(flagChecker)\n{\n\treturn F2(function(debugWrap, impl)\n\t{\n\t\treturn function(flagDecoder)\n\t\t{\n\t\t\treturn function(object, moduleName, debugMetadata)\n\t\t\t{\n\t\t\t\tvar checker = flagChecker(flagDecoder, moduleName);\n\t\t\t\tif (typeof debugMetadata === 'undefined')\n\t\t\t\t{\n\t\t\t\t\tnormalSetup(impl, object, moduleName, checker);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tdebugSetup(A2(debugWrap, debugMetadata, impl), object, moduleName, checker);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t});\n}\n\nfunction staticProgram(vNode)\n{\n\tvar nothing = _elm_lang$core$Native_Utils.Tuple2(\n\t\t_elm_lang$core$Native_Utils.Tuple0,\n\t\t_elm_lang$core$Platform_Cmd$none\n\t);\n\treturn A2(program, _elm_lang$virtual_dom$VirtualDom_Debug$wrap, {\n\t\tinit: nothing,\n\t\tview: function() { return vNode; },\n\t\tupdate: F2(function() { return nothing; }),\n\t\tsubscriptions: function() { return _elm_lang$core$Platform_Sub$none; }\n\t})();\n}\n\n\n// FLAG CHECKERS\n\nfunction checkNoFlags(flagDecoder, moduleName)\n{\n\treturn function(init, flags, domNode)\n\t{\n\t\tif (typeof flags === 'undefined')\n\t\t{\n\t\t\treturn init;\n\t\t}\n\n\t\tvar errorMessage =\n\t\t\t'The `' + moduleName + '` module does not need flags.\\n'\n\t\t\t+ 'Initialize it with no arguments and you should be all set!';\n\n\t\tcrash(errorMessage, domNode);\n\t};\n}\n\nfunction checkYesFlags(flagDecoder, moduleName)\n{\n\treturn function(init, flags, domNode)\n\t{\n\t\tif (typeof flagDecoder === 'undefined')\n\t\t{\n\t\t\tvar errorMessage =\n\t\t\t\t'Are you trying to sneak a Never value into Elm? Trickster!\\n'\n\t\t\t\t+ 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\\n'\n\t\t\t\t+ 'Use `program` instead if you do not want flags.'\n\n\t\t\tcrash(errorMessage, domNode);\n\t\t}\n\n\t\tvar result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags);\n\t\tif (result.ctor === 'Ok')\n\t\t{\n\t\t\treturn init(result._0);\n\t\t}\n\n\t\tvar errorMessage =\n\t\t\t'Trying to initialize the `' + moduleName + '` module with an unexpected flag.\\n'\n\t\t\t+ 'I tried to convert it to an Elm value, but ran into this problem:\\n\\n'\n\t\t\t+ result._0;\n\n\t\tcrash(errorMessage, domNode);\n\t};\n}\n\nfunction crash(errorMessage, domNode)\n{\n\tif (domNode)\n\t{\n\t\tdomNode.innerHTML =\n\t\t\t'<div style=\"padding-left:1em;\">'\n\t\t\t+ '<h2 style=\"font-weight:normal;\"><b>Oops!</b> Something went wrong when starting your Elm program.</h2>'\n\t\t\t+ '<pre style=\"padding-left:1em;\">' + errorMessage + '</pre>'\n\t\t\t+ '</div>';\n\t}\n\n\tthrow new Error(errorMessage);\n}\n\n\n// NORMAL SETUP\n\nfunction normalSetup(impl, object, moduleName, flagChecker)\n{\n\tobject['embed'] = function embed(node, flags)\n\t{\n\t\twhile (node.lastChild)\n\t\t{\n\t\t\tnode.removeChild(node.lastChild);\n\t\t}\n\n\t\treturn _elm_lang$core$Native_Platform.initialize(\n\t\t\tflagChecker(impl.init, flags, node),\n\t\t\timpl.update,\n\t\t\timpl.subscriptions,\n\t\t\tnormalRenderer(node, impl.view)\n\t\t);\n\t};\n\n\tobject['fullscreen'] = function fullscreen(flags)\n\t{\n\t\treturn _elm_lang$core$Native_Platform.initialize(\n\t\t\tflagChecker(impl.init, flags, document.body),\n\t\t\timpl.update,\n\t\t\timpl.subscriptions,\n\t\t\tnormalRenderer(document.body, impl.view)\n\t\t);\n\t};\n}\n\nfunction normalRenderer(parentNode, view)\n{\n\treturn function(tagger, initialModel)\n\t{\n\t\tvar eventNode = { tagger: tagger, parent: undefined };\n\t\tvar initialVirtualNode = view(initialModel);\n\t\tvar domNode = render(initialVirtualNode, eventNode);\n\t\tparentNode.appendChild(domNode);\n\t\treturn makeStepper(domNode, view, initialVirtualNode, eventNode);\n\t};\n}\n\n\n// STEPPER\n\nvar rAF =\n\ttypeof requestAnimationFrame !== 'undefined'\n\t\t? requestAnimationFrame\n\t\t: function(callback) { setTimeout(callback, 1000 / 60); };\n\nfunction makeStepper(domNode, view, initialVirtualNode, eventNode)\n{\n\tvar state = 'NO_REQUEST';\n\tvar currNode = initialVirtualNode;\n\tvar nextModel;\n\n\tfunction updateIfNeeded()\n\t{\n\t\tswitch (state)\n\t\t{\n\t\t\tcase 'NO_REQUEST':\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Unexpected draw callback.\\n' +\n\t\t\t\t\t'Please report this to <https://github.com/elm-lang/virtual-dom/issues>.'\n\t\t\t\t);\n\n\t\t\tcase 'PENDING_REQUEST':\n\t\t\t\trAF(updateIfNeeded);\n\t\t\t\tstate = 'EXTRA_REQUEST';\n\n\t\t\t\tvar nextNode = view(nextModel);\n\t\t\t\tvar patches = diff(currNode, nextNode);\n\t\t\t\tdomNode = applyPatches(domNode, currNode, patches, eventNode);\n\t\t\t\tcurrNode = nextNode;\n\n\t\t\t\treturn;\n\n\t\t\tcase 'EXTRA_REQUEST':\n\t\t\t\tstate = 'NO_REQUEST';\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\treturn function stepper(model)\n\t{\n\t\tif (state === 'NO_REQUEST')\n\t\t{\n\t\t\trAF(updateIfNeeded);\n\t\t}\n\t\tstate = 'PENDING_REQUEST';\n\t\tnextModel = model;\n\t};\n}\n\n\n// DEBUG SETUP\n\nfunction debugSetup(impl, object, moduleName, flagChecker)\n{\n\tobject['fullscreen'] = function fullscreen(flags)\n\t{\n\t\tvar popoutRef = { doc: undefined };\n\t\treturn _elm_lang$core$Native_Platform.initialize(\n\t\t\tflagChecker(impl.init, flags, document.body),\n\t\t\timpl.update(scrollTask(popoutRef)),\n\t\t\timpl.subscriptions,\n\t\t\tdebugRenderer(moduleName, document.body, popoutRef, impl.view, impl.viewIn, impl.viewOut)\n\t\t);\n\t};\n\n\tobject['embed'] = function fullscreen(node, flags)\n\t{\n\t\tvar popoutRef = { doc: undefined };\n\t\treturn _elm_lang$core$Native_Platform.initialize(\n\t\t\tflagChecker(impl.init, flags, node),\n\t\t\timpl.update(scrollTask(popoutRef)),\n\t\t\timpl.subscriptions,\n\t\t\tdebugRenderer(moduleName, node, popoutRef, impl.view, impl.viewIn, impl.viewOut)\n\t\t);\n\t};\n}\n\nfunction scrollTask(popoutRef)\n{\n\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n\t{\n\t\tvar doc = popoutRef.doc;\n\t\tif (doc)\n\t\t{\n\t\t\tvar msgs = doc.getElementsByClassName('debugger-sidebar-messages')[0];\n\t\t\tif (msgs)\n\t\t\t{\n\t\t\t\tmsgs.scrollTop = msgs.scrollHeight;\n\t\t\t}\n\t\t}\n\t\tcallback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t});\n}\n\n\nfunction debugRenderer(moduleName, parentNode, popoutRef, view, viewIn, viewOut)\n{\n\treturn function(tagger, initialModel)\n\t{\n\t\tvar appEventNode = { tagger: tagger, parent: undefined };\n\t\tvar eventNode = { tagger: tagger, parent: undefined };\n\n\t\t// make normal stepper\n\t\tvar appVirtualNode = view(initialModel);\n\t\tvar appNode = render(appVirtualNode, appEventNode);\n\t\tparentNode.appendChild(appNode);\n\t\tvar appStepper = makeStepper(appNode, view, appVirtualNode, appEventNode);\n\n\t\t// make overlay stepper\n\t\tvar overVirtualNode = viewIn(initialModel)._1;\n\t\tvar overNode = render(overVirtualNode, eventNode);\n\t\tparentNode.appendChild(overNode);\n\t\tvar wrappedViewIn = wrapViewIn(appEventNode, overNode, viewIn);\n\t\tvar overStepper = makeStepper(overNode, wrappedViewIn, overVirtualNode, eventNode);\n\n\t\t// make debugger stepper\n\t\tvar debugStepper = makeDebugStepper(initialModel, viewOut, eventNode, parentNode, moduleName, popoutRef);\n\n\t\treturn function stepper(model)\n\t\t{\n\t\t\tappStepper(model);\n\t\t\toverStepper(model);\n\t\t\tdebugStepper(model);\n\t\t}\n\t};\n}\n\nfunction makeDebugStepper(initialModel, view, eventNode, parentNode, moduleName, popoutRef)\n{\n\tvar curr;\n\tvar domNode;\n\n\treturn function stepper(model)\n\t{\n\t\tif (!model.isDebuggerOpen)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (!popoutRef.doc)\n\t\t{\n\t\t\tcurr = view(model);\n\t\t\tdomNode = openDebugWindow(moduleName, popoutRef, curr, eventNode);\n\t\t\treturn;\n\t\t}\n\n\t\t// switch to document of popout\n\t\tlocalDoc = popoutRef.doc;\n\n\t\tvar next = view(model);\n\t\tvar patches = diff(curr, next);\n\t\tdomNode = applyPatches(domNode, curr, patches, eventNode);\n\t\tcurr = next;\n\n\t\t// switch back to normal document\n\t\tlocalDoc = document;\n\t};\n}\n\nfunction openDebugWindow(moduleName, popoutRef, virtualNode, eventNode)\n{\n\tvar w = 900;\n\tvar h = 360;\n\tvar x = screen.width - w;\n\tvar y = screen.height - h;\n\tvar debugWindow = window.open('', '', 'width=' + w + ',height=' + h + ',left=' + x + ',top=' + y);\n\n\t// switch to window document\n\tlocalDoc = debugWindow.document;\n\n\tpopoutRef.doc = localDoc;\n\tlocalDoc.title = 'Debugger - ' + moduleName;\n\tlocalDoc.body.style.margin = '0';\n\tlocalDoc.body.style.padding = '0';\n\tvar domNode = render(virtualNode, eventNode);\n\tlocalDoc.body.appendChild(domNode);\n\n\tlocalDoc.addEventListener('keydown', function(event) {\n\t\tif (event.metaKey && event.which === 82)\n\t\t{\n\t\t\twindow.location.reload();\n\t\t}\n\t\tif (event.which === 38)\n\t\t{\n\t\t\teventNode.tagger({ ctor: 'Up' });\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tif (event.which === 40)\n\t\t{\n\t\t\teventNode.tagger({ ctor: 'Down' });\n\t\t\tevent.preventDefault();\n\t\t}\n\t});\n\n\tfunction close()\n\t{\n\t\tpopoutRef.doc = undefined;\n\t\tdebugWindow.close();\n\t}\n\twindow.addEventListener('unload', close);\n\tdebugWindow.addEventListener('unload', function() {\n\t\tpopoutRef.doc = undefined;\n\t\twindow.removeEventListener('unload', close);\n\t\teventNode.tagger({ ctor: 'Close' });\n\t});\n\n\t// switch back to the normal document\n\tlocalDoc = document;\n\n\treturn domNode;\n}\n\n\n// BLOCK EVENTS\n\nfunction wrapViewIn(appEventNode, overlayNode, viewIn)\n{\n\tvar ignorer = makeIgnorer(overlayNode);\n\tvar blocking = 'Normal';\n\tvar overflow;\n\n\tvar normalTagger = appEventNode.tagger;\n\tvar blockTagger = function() {};\n\n\treturn function(model)\n\t{\n\t\tvar tuple = viewIn(model);\n\t\tvar newBlocking = tuple._0.ctor;\n\t\tappEventNode.tagger = newBlocking === 'Normal' ? normalTagger : blockTagger;\n\t\tif (blocking !== newBlocking)\n\t\t{\n\t\t\ttraverse('removeEventListener', ignorer, blocking);\n\t\t\ttraverse('addEventListener', ignorer, newBlocking);\n\n\t\t\tif (blocking === 'Normal')\n\t\t\t{\n\t\t\t\toverflow = document.body.style.overflow;\n\t\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\t}\n\n\t\t\tif (newBlocking === 'Normal')\n\t\t\t{\n\t\t\t\tdocument.body.style.overflow = overflow;\n\t\t\t}\n\n\t\t\tblocking = newBlocking;\n\t\t}\n\t\treturn tuple._1;\n\t}\n}\n\nfunction traverse(verbEventListener, ignorer, blocking)\n{\n\tswitch(blocking)\n\t{\n\t\tcase 'Normal':\n\t\t\treturn;\n\n\t\tcase 'Pause':\n\t\t\treturn traverseHelp(verbEventListener, ignorer, mostEvents);\n\n\t\tcase 'Message':\n\t\t\treturn traverseHelp(verbEventListener, ignorer, allEvents);\n\t}\n}\n\nfunction traverseHelp(verbEventListener, handler, eventNames)\n{\n\tfor (var i = 0; i < eventNames.length; i++)\n\t{\n\t\tdocument.body[verbEventListener](eventNames[i], handler, true);\n\t}\n}\n\nfunction makeIgnorer(overlayNode)\n{\n\treturn function(event)\n\t{\n\t\tif (event.type === 'keydown' && event.metaKey && event.which === 82)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar isScroll = event.type === 'scroll' || event.type === 'wheel';\n\n\t\tvar node = event.target;\n\t\twhile (node !== null)\n\t\t{\n\t\t\tif (node.className === 'elm-overlay-message-details' && isScroll)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (node === overlayNode && !isScroll)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnode = node.parentNode;\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n}\n\nvar mostEvents = [\n\t'click', 'dblclick', 'mousemove',\n\t'mouseup', 'mousedown', 'mouseenter', 'mouseleave',\n\t'touchstart', 'touchend', 'touchcancel', 'touchmove',\n\t'pointerdown', 'pointerup', 'pointerover', 'pointerout',\n\t'pointerenter', 'pointerleave', 'pointermove', 'pointercancel',\n\t'dragstart', 'drag', 'dragend', 'dragenter', 'dragover', 'dragleave', 'drop',\n\t'keyup', 'keydown', 'keypress',\n\t'input', 'change',\n\t'focus', 'blur'\n];\n\nvar allEvents = mostEvents.concat('wheel', 'scroll');\n\n\nreturn {\n\tnode: node,\n\ttext: text,\n\tcustom: custom,\n\tmap: F2(map),\n\n\ton: F3(on),\n\tstyle: style,\n\tproperty: F2(property),\n\tattribute: F2(attribute),\n\tattributeNS: F3(attributeNS),\n\tmapProperty: F2(mapProperty),\n\n\tlazy: F2(lazy),\n\tlazy2: F3(lazy2),\n\tlazy3: F4(lazy3),\n\tkeyedNode: F3(keyedNode),\n\n\tprogram: program,\n\tprogramWithFlags: programWithFlags,\n\tstaticProgram: staticProgram\n};\n\n}();\n\nvar _elm_lang$virtual_dom$VirtualDom$programWithFlags = function (impl) {\n\treturn A2(_elm_lang$virtual_dom$Native_VirtualDom.programWithFlags, _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags, impl);\n};\nvar _elm_lang$virtual_dom$VirtualDom$program = function (impl) {\n\treturn A2(_elm_lang$virtual_dom$Native_VirtualDom.program, _elm_lang$virtual_dom$VirtualDom_Debug$wrap, impl);\n};\nvar _elm_lang$virtual_dom$VirtualDom$keyedNode = _elm_lang$virtual_dom$Native_VirtualDom.keyedNode;\nvar _elm_lang$virtual_dom$VirtualDom$lazy3 = _elm_lang$virtual_dom$Native_VirtualDom.lazy3;\nvar _elm_lang$virtual_dom$VirtualDom$lazy2 = _elm_lang$virtual_dom$Native_VirtualDom.lazy2;\nvar _elm_lang$virtual_dom$VirtualDom$lazy = _elm_lang$virtual_dom$Native_VirtualDom.lazy;\nvar _elm_lang$virtual_dom$VirtualDom$defaultOptions = {stopPropagation: false, preventDefault: false};\nvar _elm_lang$virtual_dom$VirtualDom$onWithOptions = _elm_lang$virtual_dom$Native_VirtualDom.on;\nvar _elm_lang$virtual_dom$VirtualDom$on = F2(\n\tfunction (eventName, decoder) {\n\t\treturn A3(_elm_lang$virtual_dom$VirtualDom$onWithOptions, eventName, _elm_lang$virtual_dom$VirtualDom$defaultOptions, decoder);\n\t});\nvar _elm_lang$virtual_dom$VirtualDom$style = _elm_lang$virtual_dom$Native_VirtualDom.style;\nvar _elm_lang$virtual_dom$VirtualDom$mapProperty = _elm_lang$virtual_dom$Native_VirtualDom.mapProperty;\nvar _elm_lang$virtual_dom$VirtualDom$attributeNS = _elm_lang$virtual_dom$Native_VirtualDom.attributeNS;\nvar _elm_lang$virtual_dom$VirtualDom$attribute = _elm_lang$virtual_dom$Native_VirtualDom.attribute;\nvar _elm_lang$virtual_dom$VirtualDom$property = _elm_lang$virtual_dom$Native_VirtualDom.property;\nvar _elm_lang$virtual_dom$VirtualDom$map = _elm_lang$virtual_dom$Native_VirtualDom.map;\nvar _elm_lang$virtual_dom$VirtualDom$text = _elm_lang$virtual_dom$Native_VirtualDom.text;\nvar _elm_lang$virtual_dom$VirtualDom$node = _elm_lang$virtual_dom$Native_VirtualDom.node;\nvar _elm_lang$virtual_dom$VirtualDom$Options = F2(\n\tfunction (a, b) {\n\t\treturn {stopPropagation: a, preventDefault: b};\n\t});\nvar _elm_lang$virtual_dom$VirtualDom$Node = {ctor: 'Node'};\nvar _elm_lang$virtual_dom$VirtualDom$Property = {ctor: 'Property'};\n\nvar _elm_lang$html$Html$programWithFlags = _elm_lang$virtual_dom$VirtualDom$programWithFlags;\nvar _elm_lang$html$Html$program = _elm_lang$virtual_dom$VirtualDom$program;\nvar _elm_lang$html$Html$beginnerProgram = function (_p0) {\n\tvar _p1 = _p0;\n\treturn _elm_lang$html$Html$program(\n\t\t{\n\t\t\tinit: A2(\n\t\t\t\t_elm_lang$core$Platform_Cmd_ops['!'],\n\t\t\t\t_p1.model,\n\t\t\t\t{ctor: '[]'}),\n\t\t\tupdate: F2(\n\t\t\t\tfunction (msg, model) {\n\t\t\t\t\treturn A2(\n\t\t\t\t\t\t_elm_lang$core$Platform_Cmd_ops['!'],\n\t\t\t\t\t\tA2(_p1.update, msg, model),\n\t\t\t\t\t\t{ctor: '[]'});\n\t\t\t\t}),\n\t\t\tview: _p1.view,\n\t\t\tsubscriptions: function (_p2) {\n\t\t\t\treturn _elm_lang$core$Platform_Sub$none;\n\t\t\t}\n\t\t});\n};\nvar _elm_lang$html$Html$map = _elm_lang$virtual_dom$VirtualDom$map;\nvar _elm_lang$html$Html$text = _elm_lang$virtual_dom$VirtualDom$text;\nvar _elm_lang$html$Html$node = _elm_lang$virtual_dom$VirtualDom$node;\nvar _elm_lang$html$Html$body = _elm_lang$html$Html$node('body');\nvar _elm_lang$html$Html$section = _elm_lang$html$Html$node('section');\nvar _elm_lang$html$Html$nav = _elm_lang$html$Html$node('nav');\nvar _elm_lang$html$Html$article = _elm_lang$html$Html$node('article');\nvar _elm_lang$html$Html$aside = _elm_lang$html$Html$node('aside');\nvar _elm_lang$html$Html$h1 = _elm_lang$html$Html$node('h1');\nvar _elm_lang$html$Html$h2 = _elm_lang$html$Html$node('h2');\nvar _elm_lang$html$Html$h3 = _elm_lang$html$Html$node('h3');\nvar _elm_lang$html$Html$h4 = _elm_lang$html$Html$node('h4');\nvar _elm_lang$html$Html$h5 = _elm_lang$html$Html$node('h5');\nvar _elm_lang$html$Html$h6 = _elm_lang$html$Html$node('h6');\nvar _elm_lang$html$Html$header = _elm_lang$html$Html$node('header');\nvar _elm_lang$html$Html$footer = _elm_lang$html$Html$node('footer');\nvar _elm_lang$html$Html$address = _elm_lang$html$Html$node('address');\nvar _elm_lang$html$Html$main_ = _elm_lang$html$Html$node('main');\nvar _elm_lang$html$Html$p = _elm_lang$html$Html$node('p');\nvar _elm_lang$html$Html$hr = _elm_lang$html$Html$node('hr');\nvar _elm_lang$html$Html$pre = _elm_lang$html$Html$node('pre');\nvar _elm_lang$html$Html$blockquote = _elm_lang$html$Html$node('blockquote');\nvar _elm_lang$html$Html$ol = _elm_lang$html$Html$node('ol');\nvar _elm_lang$html$Html$ul = _elm_lang$html$Html$node('ul');\nvar _elm_lang$html$Html$li = _elm_lang$html$Html$node('li');\nvar _elm_lang$html$Html$dl = _elm_lang$html$Html$node('dl');\nvar _elm_lang$html$Html$dt = _elm_lang$html$Html$node('dt');\nvar _elm_lang$html$Html$dd = _elm_lang$html$Html$node('dd');\nvar _elm_lang$html$Html$figure = _elm_lang$html$Html$node('figure');\nvar _elm_lang$html$Html$figcaption = _elm_lang$html$Html$node('figcaption');\nvar _elm_lang$html$Html$div = _elm_lang$html$Html$node('div');\nvar _elm_lang$html$Html$a = _elm_lang$html$Html$node('a');\nvar _elm_lang$html$Html$em = _elm_lang$html$Html$node('em');\nvar _elm_lang$html$Html$strong = _elm_lang$html$Html$node('strong');\nvar _elm_lang$html$Html$small = _elm_lang$html$Html$node('small');\nvar _elm_lang$html$Html$s = _elm_lang$html$Html$node('s');\nvar _elm_lang$html$Html$cite = _elm_lang$html$Html$node('cite');\nvar _elm_lang$html$Html$q = _elm_lang$html$Html$node('q');\nvar _elm_lang$html$Html$dfn = _elm_lang$html$Html$node('dfn');\nvar _elm_lang$html$Html$abbr = _elm_lang$html$Html$node('abbr');\nvar _elm_lang$html$Html$time = _elm_lang$html$Html$node('time');\nvar _elm_lang$html$Html$code = _elm_lang$html$Html$node('code');\nvar _elm_lang$html$Html$var = _elm_lang$html$Html$node('var');\nvar _elm_lang$html$Html$samp = _elm_lang$html$Html$node('samp');\nvar _elm_lang$html$Html$kbd = _elm_lang$html$Html$node('kbd');\nvar _elm_lang$html$Html$sub = _elm_lang$html$Html$node('sub');\nvar _elm_lang$html$Html$sup = _elm_lang$html$Html$node('sup');\nvar _elm_lang$html$Html$i = _elm_lang$html$Html$node('i');\nvar _elm_lang$html$Html$b = _elm_lang$html$Html$node('b');\nvar _elm_lang$html$Html$u = _elm_lang$html$Html$node('u');\nvar _elm_lang$html$Html$mark = _elm_lang$html$Html$node('mark');\nvar _elm_lang$html$Html$ruby = _elm_lang$html$Html$node('ruby');\nvar _elm_lang$html$Html$rt = _elm_lang$html$Html$node('rt');\nvar _elm_lang$html$Html$rp = _elm_lang$html$Html$node('rp');\nvar _elm_lang$html$Html$bdi = _elm_lang$html$Html$node('bdi');\nvar _elm_lang$html$Html$bdo = _elm_lang$html$Html$node('bdo');\nvar _elm_lang$html$Html$span = _elm_lang$html$Html$node('span');\nvar _elm_lang$html$Html$br = _elm_lang$html$Html$node('br');\nvar _elm_lang$html$Html$wbr = _elm_lang$html$Html$node('wbr');\nvar _elm_lang$html$Html$ins = _elm_lang$html$Html$node('ins');\nvar _elm_lang$html$Html$del = _elm_lang$html$Html$node('del');\nvar _elm_lang$html$Html$img = _elm_lang$html$Html$node('img');\nvar _elm_lang$html$Html$iframe = _elm_lang$html$Html$node('iframe');\nvar _elm_lang$html$Html$embed = _elm_lang$html$Html$node('embed');\nvar _elm_lang$html$Html$object = _elm_lang$html$Html$node('object');\nvar _elm_lang$html$Html$param = _elm_lang$html$Html$node('param');\nvar _elm_lang$html$Html$video = _elm_lang$html$Html$node('video');\nvar _elm_lang$html$Html$audio = _elm_lang$html$Html$node('audio');\nvar _elm_lang$html$Html$source = _elm_lang$html$Html$node('source');\nvar _elm_lang$html$Html$track = _elm_lang$html$Html$node('track');\nvar _elm_lang$html$Html$canvas = _elm_lang$html$Html$node('canvas');\nvar _elm_lang$html$Html$math = _elm_lang$html$Html$node('math');\nvar _elm_lang$html$Html$table = _elm_lang$html$Html$node('table');\nvar _elm_lang$html$Html$caption = _elm_lang$html$Html$node('caption');\nvar _elm_lang$html$Html$colgroup = _elm_lang$html$Html$node('colgroup');\nvar _elm_lang$html$Html$col = _elm_lang$html$Html$node('col');\nvar _elm_lang$html$Html$tbody = _elm_lang$html$Html$node('tbody');\nvar _elm_lang$html$Html$thead = _elm_lang$html$Html$node('thead');\nvar _elm_lang$html$Html$tfoot = _elm_lang$html$Html$node('tfoot');\nvar _elm_lang$html$Html$tr = _elm_lang$html$Html$node('tr');\nvar _elm_lang$html$Html$td = _elm_lang$html$Html$node('td');\nvar _elm_lang$html$Html$th = _elm_lang$html$Html$node('th');\nvar _elm_lang$html$Html$form = _elm_lang$html$Html$node('form');\nvar _elm_lang$html$Html$fieldset = _elm_lang$html$Html$node('fieldset');\nvar _elm_lang$html$Html$legend = _elm_lang$html$Html$node('legend');\nvar _elm_lang$html$Html$label = _elm_lang$html$Html$node('label');\nvar _elm_lang$html$Html$input = _elm_lang$html$Html$node('input');\nvar _elm_lang$html$Html$button = _elm_lang$html$Html$node('button');\nvar _elm_lang$html$Html$select = _elm_lang$html$Html$node('select');\nvar _elm_lang$html$Html$datalist = _elm_lang$html$Html$node('datalist');\nvar _elm_lang$html$Html$optgroup = _elm_lang$html$Html$node('optgroup');\nvar _elm_lang$html$Html$option = _elm_lang$html$Html$node('option');\nvar _elm_lang$html$Html$textarea = _elm_lang$html$Html$node('textarea');\nvar _elm_lang$html$Html$keygen = _elm_lang$html$Html$node('keygen');\nvar _elm_lang$html$Html$output = _elm_lang$html$Html$node('output');\nvar _elm_lang$html$Html$progress = _elm_lang$html$Html$node('progress');\nvar _elm_lang$html$Html$meter = _elm_lang$html$Html$node('meter');\nvar _elm_lang$html$Html$details = _elm_lang$html$Html$node('details');\nvar _elm_lang$html$Html$summary = _elm_lang$html$Html$node('summary');\nvar _elm_lang$html$Html$menuitem = _elm_lang$html$Html$node('menuitem');\nvar _elm_lang$html$Html$menu = _elm_lang$html$Html$node('menu');\n\nvar _elm_lang$html$Html_Attributes$map = _elm_lang$virtual_dom$VirtualDom$mapProperty;\nvar _elm_lang$html$Html_Attributes$attribute = _elm_lang$virtual_dom$VirtualDom$attribute;\nvar _elm_lang$html$Html_Attributes$contextmenu = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'contextmenu', value);\n};\nvar _elm_lang$html$Html_Attributes$draggable = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'draggable', value);\n};\nvar _elm_lang$html$Html_Attributes$itemprop = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'itemprop', value);\n};\nvar _elm_lang$html$Html_Attributes$tabindex = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'tabIndex',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$charset = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'charset', value);\n};\nvar _elm_lang$html$Html_Attributes$height = function (value) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'height',\n\t\t_elm_lang$core$Basics$toString(value));\n};\nvar _elm_lang$html$Html_Attributes$width = function (value) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'width',\n\t\t_elm_lang$core$Basics$toString(value));\n};\nvar _elm_lang$html$Html_Attributes$formaction = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'formAction', value);\n};\nvar _elm_lang$html$Html_Attributes$list = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'list', value);\n};\nvar _elm_lang$html$Html_Attributes$minlength = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'minLength',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$maxlength = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'maxlength',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$size = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'size',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$form = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'form', value);\n};\nvar _elm_lang$html$Html_Attributes$cols = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'cols',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$rows = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'rows',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$challenge = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'challenge', value);\n};\nvar _elm_lang$html$Html_Attributes$media = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'media', value);\n};\nvar _elm_lang$html$Html_Attributes$rel = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'rel', value);\n};\nvar _elm_lang$html$Html_Attributes$datetime = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'datetime', value);\n};\nvar _elm_lang$html$Html_Attributes$pubdate = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'pubdate', value);\n};\nvar _elm_lang$html$Html_Attributes$colspan = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'colspan',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$rowspan = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'rowspan',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$manifest = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'manifest', value);\n};\nvar _elm_lang$html$Html_Attributes$property = _elm_lang$virtual_dom$VirtualDom$property;\nvar _elm_lang$html$Html_Attributes$stringProperty = F2(\n\tfunction (name, string) {\n\t\treturn A2(\n\t\t\t_elm_lang$html$Html_Attributes$property,\n\t\t\tname,\n\t\t\t_elm_lang$core$Json_Encode$string(string));\n\t});\nvar _elm_lang$html$Html_Attributes$class = function (name) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'className', name);\n};\nvar _elm_lang$html$Html_Attributes$id = function (name) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'id', name);\n};\nvar _elm_lang$html$Html_Attributes$title = function (name) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'title', name);\n};\nvar _elm_lang$html$Html_Attributes$accesskey = function ($char) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$stringProperty,\n\t\t'accessKey',\n\t\t_elm_lang$core$String$fromChar($char));\n};\nvar _elm_lang$html$Html_Attributes$dir = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'dir', value);\n};\nvar _elm_lang$html$Html_Attributes$dropzone = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'dropzone', value);\n};\nvar _elm_lang$html$Html_Attributes$lang = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'lang', value);\n};\nvar _elm_lang$html$Html_Attributes$content = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'content', value);\n};\nvar _elm_lang$html$Html_Attributes$httpEquiv = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'httpEquiv', value);\n};\nvar _elm_lang$html$Html_Attributes$language = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'language', value);\n};\nvar _elm_lang$html$Html_Attributes$src = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'src', value);\n};\nvar _elm_lang$html$Html_Attributes$alt = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'alt', value);\n};\nvar _elm_lang$html$Html_Attributes$preload = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'preload', value);\n};\nvar _elm_lang$html$Html_Attributes$poster = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'poster', value);\n};\nvar _elm_lang$html$Html_Attributes$kind = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'kind', value);\n};\nvar _elm_lang$html$Html_Attributes$srclang = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'srclang', value);\n};\nvar _elm_lang$html$Html_Attributes$sandbox = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'sandbox', value);\n};\nvar _elm_lang$html$Html_Attributes$srcdoc = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'srcdoc', value);\n};\nvar _elm_lang$html$Html_Attributes$type_ = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'type', value);\n};\nvar _elm_lang$html$Html_Attributes$value = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'value', value);\n};\nvar _elm_lang$html$Html_Attributes$defaultValue = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'defaultValue', value);\n};\nvar _elm_lang$html$Html_Attributes$placeholder = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'placeholder', value);\n};\nvar _elm_lang$html$Html_Attributes$accept = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'accept', value);\n};\nvar _elm_lang$html$Html_Attributes$acceptCharset = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'acceptCharset', value);\n};\nvar _elm_lang$html$Html_Attributes$action = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'action', value);\n};\nvar _elm_lang$html$Html_Attributes$autocomplete = function (bool) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$stringProperty,\n\t\t'autocomplete',\n\t\tbool ? 'on' : 'off');\n};\nvar _elm_lang$html$Html_Attributes$enctype = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'enctype', value);\n};\nvar _elm_lang$html$Html_Attributes$method = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'method', value);\n};\nvar _elm_lang$html$Html_Attributes$name = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'name', value);\n};\nvar _elm_lang$html$Html_Attributes$pattern = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'pattern', value);\n};\nvar _elm_lang$html$Html_Attributes$for = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'htmlFor', value);\n};\nvar _elm_lang$html$Html_Attributes$max = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'max', value);\n};\nvar _elm_lang$html$Html_Attributes$min = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'min', value);\n};\nvar _elm_lang$html$Html_Attributes$step = function (n) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'step', n);\n};\nvar _elm_lang$html$Html_Attributes$wrap = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'wrap', value);\n};\nvar _elm_lang$html$Html_Attributes$usemap = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'useMap', value);\n};\nvar _elm_lang$html$Html_Attributes$shape = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'shape', value);\n};\nvar _elm_lang$html$Html_Attributes$coords = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'coords', value);\n};\nvar _elm_lang$html$Html_Attributes$keytype = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'keytype', value);\n};\nvar _elm_lang$html$Html_Attributes$align = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'align', value);\n};\nvar _elm_lang$html$Html_Attributes$cite = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'cite', value);\n};\nvar _elm_lang$html$Html_Attributes$href = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'href', value);\n};\nvar _elm_lang$html$Html_Attributes$target = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'target', value);\n};\nvar _elm_lang$html$Html_Attributes$downloadAs = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'download', value);\n};\nvar _elm_lang$html$Html_Attributes$hreflang = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'hreflang', value);\n};\nvar _elm_lang$html$Html_Attributes$ping = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'ping', value);\n};\nvar _elm_lang$html$Html_Attributes$start = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$stringProperty,\n\t\t'start',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$headers = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'headers', value);\n};\nvar _elm_lang$html$Html_Attributes$scope = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'scope', value);\n};\nvar _elm_lang$html$Html_Attributes$boolProperty = F2(\n\tfunction (name, bool) {\n\t\treturn A2(\n\t\t\t_elm_lang$html$Html_Attributes$property,\n\t\t\tname,\n\t\t\t_elm_lang$core$Json_Encode$bool(bool));\n\t});\nvar _elm_lang$html$Html_Attributes$hidden = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'hidden', bool);\n};\nvar _elm_lang$html$Html_Attributes$contenteditable = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'contentEditable', bool);\n};\nvar _elm_lang$html$Html_Attributes$spellcheck = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'spellcheck', bool);\n};\nvar _elm_lang$html$Html_Attributes$async = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'async', bool);\n};\nvar _elm_lang$html$Html_Attributes$defer = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'defer', bool);\n};\nvar _elm_lang$html$Html_Attributes$scoped = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'scoped', bool);\n};\nvar _elm_lang$html$Html_Attributes$autoplay = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'autoplay', bool);\n};\nvar _elm_lang$html$Html_Attributes$controls = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'controls', bool);\n};\nvar _elm_lang$html$Html_Attributes$loop = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'loop', bool);\n};\nvar _elm_lang$html$Html_Attributes$default = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'default', bool);\n};\nvar _elm_lang$html$Html_Attributes$seamless = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'seamless', bool);\n};\nvar _elm_lang$html$Html_Attributes$checked = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'checked', bool);\n};\nvar _elm_lang$html$Html_Attributes$selected = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'selected', bool);\n};\nvar _elm_lang$html$Html_Attributes$autofocus = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'autofocus', bool);\n};\nvar _elm_lang$html$Html_Attributes$disabled = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'disabled', bool);\n};\nvar _elm_lang$html$Html_Attributes$multiple = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'multiple', bool);\n};\nvar _elm_lang$html$Html_Attributes$novalidate = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'noValidate', bool);\n};\nvar _elm_lang$html$Html_Attributes$readonly = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'readOnly', bool);\n};\nvar _elm_lang$html$Html_Attributes$required = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'required', bool);\n};\nvar _elm_lang$html$Html_Attributes$ismap = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'isMap', value);\n};\nvar _elm_lang$html$Html_Attributes$download = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'download', bool);\n};\nvar _elm_lang$html$Html_Attributes$reversed = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'reversed', bool);\n};\nvar _elm_lang$html$Html_Attributes$classList = function (list) {\n\treturn _elm_lang$html$Html_Attributes$class(\n\t\tA2(\n\t\t\t_elm_lang$core$String$join,\n\t\t\t' ',\n\t\t\tA2(\n\t\t\t\t_elm_lang$core$List$map,\n\t\t\t\t_elm_lang$core$Tuple$first,\n\t\t\t\tA2(_elm_lang$core$List$filter, _elm_lang$core$Tuple$second, list))));\n};\nvar _elm_lang$html$Html_Attributes$style = _elm_lang$virtual_dom$VirtualDom$style;\n\nvar _elm_lang$html$Html_Events$keyCode = A2(_elm_lang$core$Json_Decode$field, 'keyCode', _elm_lang$core$Json_Decode$int);\nvar _elm_lang$html$Html_Events$targetChecked = A2(\n\t_elm_lang$core$Json_Decode$at,\n\t{\n\t\tctor: '::',\n\t\t_0: 'target',\n\t\t_1: {\n\t\t\tctor: '::',\n\t\t\t_0: 'checked',\n\t\t\t_1: {ctor: '[]'}\n\t\t}\n\t},\n\t_elm_lang$core$Json_Decode$bool);\nvar _elm_lang$html$Html_Events$targetValue = A2(\n\t_elm_lang$core$Json_Decode$at,\n\t{\n\t\tctor: '::',\n\t\t_0: 'target',\n\t\t_1: {\n\t\t\tctor: '::',\n\t\t\t_0: 'value',\n\t\t\t_1: {ctor: '[]'}\n\t\t}\n\t},\n\t_elm_lang$core$Json_Decode$string);\nvar _elm_lang$html$Html_Events$defaultOptions = _elm_lang$virtual_dom$VirtualDom$defaultOptions;\nvar _elm_lang$html$Html_Events$onWithOptions = _elm_lang$virtual_dom$VirtualDom$onWithOptions;\nvar _elm_lang$html$Html_Events$on = _elm_lang$virtual_dom$VirtualDom$on;\nvar _elm_lang$html$Html_Events$onFocus = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'focus',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onBlur = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'blur',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onSubmitOptions = _elm_lang$core$Native_Utils.update(\n\t_elm_lang$html$Html_Events$defaultOptions,\n\t{preventDefault: true});\nvar _elm_lang$html$Html_Events$onSubmit = function (msg) {\n\treturn A3(\n\t\t_elm_lang$html$Html_Events$onWithOptions,\n\t\t'submit',\n\t\t_elm_lang$html$Html_Events$onSubmitOptions,\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onCheck = function (tagger) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'change',\n\t\tA2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetChecked));\n};\nvar _elm_lang$html$Html_Events$onInput = function (tagger) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'input',\n\t\tA2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetValue));\n};\nvar _elm_lang$html$Html_Events$onMouseOut = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseout',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseOver = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseover',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseLeave = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseleave',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseEnter = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseenter',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseUp = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseup',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseDown = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mousedown',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onDoubleClick = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'dblclick',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onClick = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'click',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$Options = F2(\n\tfunction (a, b) {\n\t\treturn {stopPropagation: a, preventDefault: b};\n\t});\n\nvar _elm_lang$http$Native_Http = function() {\n\n\n// ENCODING AND DECODING\n\nfunction encodeUri(string)\n{\n\treturn encodeURIComponent(string);\n}\n\nfunction decodeUri(string)\n{\n\ttry\n\t{\n\t\treturn _elm_lang$core$Maybe$Just(decodeURIComponent(string));\n\t}\n\tcatch(e)\n\t{\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n}\n\n\n// SEND REQUEST\n\nfunction toTask(request, maybeProgress)\n{\n\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n\t{\n\t\tvar xhr = new XMLHttpRequest();\n\n\t\tconfigureProgress(xhr, maybeProgress);\n\n\t\txhr.addEventListener('error', function() {\n\t\t\tcallback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'NetworkError' }));\n\t\t});\n\t\txhr.addEventListener('timeout', function() {\n\t\t\tcallback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'Timeout' }));\n\t\t});\n\t\txhr.addEventListener('load', function() {\n\t\t\tcallback(handleResponse(xhr, request.expect.responseToResult));\n\t\t});\n\n\t\ttry\n\t\t{\n\t\t\txhr.open(request.method, request.url, true);\n\t\t}\n\t\tcatch (e)\n\t\t{\n\t\t\treturn callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'BadUrl', _0: request.url }));\n\t\t}\n\n\t\tconfigureRequest(xhr, request);\n\t\tsend(xhr, request.body);\n\n\t\treturn function() { xhr.abort(); };\n\t});\n}\n\nfunction configureProgress(xhr, maybeProgress)\n{\n\tif (maybeProgress.ctor === 'Nothing')\n\t{\n\t\treturn;\n\t}\n\n\txhr.addEventListener('progress', function(event) {\n\t\tif (!event.lengthComputable)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\t_elm_lang$core$Native_Scheduler.rawSpawn(maybeProgress._0({\n\t\t\tbytes: event.loaded,\n\t\t\tbytesExpected: event.total\n\t\t}));\n\t});\n}\n\nfunction configureRequest(xhr, request)\n{\n\tfunction setHeader(pair)\n\t{\n\t\txhr.setRequestHeader(pair._0, pair._1);\n\t}\n\n\tA2(_elm_lang$core$List$map, setHeader, request.headers);\n\txhr.responseType = request.expect.responseType;\n\txhr.withCredentials = request.withCredentials;\n\n\tif (request.timeout.ctor === 'Just')\n\t{\n\t\txhr.timeout = request.timeout._0;\n\t}\n}\n\nfunction send(xhr, body)\n{\n\tswitch (body.ctor)\n\t{\n\t\tcase 'EmptyBody':\n\t\t\txhr.send();\n\t\t\treturn;\n\n\t\tcase 'StringBody':\n\t\t\txhr.setRequestHeader('Content-Type', body._0);\n\t\t\txhr.send(body._1);\n\t\t\treturn;\n\n\t\tcase 'FormDataBody':\n\t\t\txhr.send(body._0);\n\t\t\treturn;\n\t}\n}\n\n\n// RESPONSES\n\nfunction handleResponse(xhr, responseToResult)\n{\n\tvar response = toResponse(xhr);\n\n\tif (xhr.status < 200 || 300 <= xhr.status)\n\t{\n\t\tresponse.body = xhr.responseText;\n\t\treturn _elm_lang$core$Native_Scheduler.fail({\n\t\t\tctor: 'BadStatus',\n\t\t\t_0: response\n\t\t});\n\t}\n\n\tvar result = responseToResult(response);\n\n\tif (result.ctor === 'Ok')\n\t{\n\t\treturn _elm_lang$core$Native_Scheduler.succeed(result._0);\n\t}\n\telse\n\t{\n\t\tresponse.body = xhr.responseText;\n\t\treturn _elm_lang$core$Native_Scheduler.fail({\n\t\t\tctor: 'BadPayload',\n\t\t\t_0: result._0,\n\t\t\t_1: response\n\t\t});\n\t}\n}\n\nfunction toResponse(xhr)\n{\n\treturn {\n\t\tstatus: { code: xhr.status, message: xhr.statusText },\n\t\theaders: parseHeaders(xhr.getAllResponseHeaders()),\n\t\turl: xhr.responseURL,\n\t\tbody: xhr.response\n\t};\n}\n\nfunction parseHeaders(rawHeaders)\n{\n\tvar headers = _elm_lang$core$Dict$empty;\n\n\tif (!rawHeaders)\n\t{\n\t\treturn headers;\n\t}\n\n\tvar headerPairs = rawHeaders.split('\\u000d\\u000a');\n\tfor (var i = headerPairs.length; i--; )\n\t{\n\t\tvar headerPair = headerPairs[i];\n\t\tvar index = headerPair.indexOf('\\u003a\\u0020');\n\t\tif (index > 0)\n\t\t{\n\t\t\tvar key = headerPair.substring(0, index);\n\t\t\tvar value = headerPair.substring(index + 2);\n\n\t\t\theaders = A3(_elm_lang$core$Dict$update, key, function(oldValue) {\n\t\t\t\tif (oldValue.ctor === 'Just')\n\t\t\t\t{\n\t\t\t\t\treturn _elm_lang$core$Maybe$Just(value + ', ' + oldValue._0);\n\t\t\t\t}\n\t\t\t\treturn _elm_lang$core$Maybe$Just(value);\n\t\t\t}, headers);\n\t\t}\n\t}\n\n\treturn headers;\n}\n\n\n// EXPECTORS\n\nfunction expectStringResponse(responseToResult)\n{\n\treturn {\n\t\tresponseType: 'text',\n\t\tresponseToResult: responseToResult\n\t};\n}\n\nfunction mapExpect(func, expect)\n{\n\treturn {\n\t\tresponseType: expect.responseType,\n\t\tresponseToResult: function(response) {\n\t\t\tvar convertedResponse = expect.responseToResult(response);\n\t\t\treturn A2(_elm_lang$core$Result$map, func, convertedResponse);\n\t\t}\n\t};\n}\n\n\n// BODY\n\nfunction multipart(parts)\n{\n\tvar formData = new FormData();\n\n\twhile (parts.ctor !== '[]')\n\t{\n\t\tvar part = parts._0;\n\t\tformData.append(part._0, part._1);\n\t\tparts = parts._1;\n\t}\n\n\treturn { ctor: 'FormDataBody', _0: formData };\n}\n\nreturn {\n\ttoTask: F2(toTask),\n\texpectStringResponse: expectStringResponse,\n\tmapExpect: F2(mapExpect),\n\tmultipart: multipart,\n\tencodeUri: encodeUri,\n\tdecodeUri: decodeUri\n};\n\n}();\n\nvar _elm_lang$http$Http_Internal$map = F2(\n\tfunction (func, request) {\n\t\treturn _elm_lang$core$Native_Utils.update(\n\t\t\trequest,\n\t\t\t{\n\t\t\t\texpect: A2(_elm_lang$http$Native_Http.mapExpect, func, request.expect)\n\t\t\t});\n\t});\nvar _elm_lang$http$Http_Internal$RawRequest = F7(\n\tfunction (a, b, c, d, e, f, g) {\n\t\treturn {method: a, headers: b, url: c, body: d, expect: e, timeout: f, withCredentials: g};\n\t});\nvar _elm_lang$http$Http_Internal$Request = function (a) {\n\treturn {ctor: 'Request', _0: a};\n};\nvar _elm_lang$http$Http_Internal$Expect = {ctor: 'Expect'};\nvar _elm_lang$http$Http_Internal$FormDataBody = {ctor: 'FormDataBody'};\nvar _elm_lang$http$Http_Internal$StringBody = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'StringBody', _0: a, _1: b};\n\t});\nvar _elm_lang$http$Http_Internal$EmptyBody = {ctor: 'EmptyBody'};\nvar _elm_lang$http$Http_Internal$Header = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'Header', _0: a, _1: b};\n\t});\n\nvar _elm_lang$http$Http$decodeUri = _elm_lang$http$Native_Http.decodeUri;\nvar _elm_lang$http$Http$encodeUri = _elm_lang$http$Native_Http.encodeUri;\nvar _elm_lang$http$Http$expectStringResponse = _elm_lang$http$Native_Http.expectStringResponse;\nvar _elm_lang$http$Http$expectJson = function (decoder) {\n\treturn _elm_lang$http$Http$expectStringResponse(\n\t\tfunction (response) {\n\t\t\treturn A2(_elm_lang$core$Json_Decode$decodeString, decoder, response.body);\n\t\t});\n};\nvar _elm_lang$http$Http$expectString = _elm_lang$http$Http$expectStringResponse(\n\tfunction (response) {\n\t\treturn _elm_lang$core$Result$Ok(response.body);\n\t});\nvar _elm_lang$http$Http$multipartBody = _elm_lang$http$Native_Http.multipart;\nvar _elm_lang$http$Http$stringBody = _elm_lang$http$Http_Internal$StringBody;\nvar _elm_lang$http$Http$jsonBody = function (value) {\n\treturn A2(\n\t\t_elm_lang$http$Http_Internal$StringBody,\n\t\t'application/json',\n\t\tA2(_elm_lang$core$Json_Encode$encode, 0, value));\n};\nvar _elm_lang$http$Http$emptyBody = _elm_lang$http$Http_Internal$EmptyBody;\nvar _elm_lang$http$Http$header = _elm_lang$http$Http_Internal$Header;\nvar _elm_lang$http$Http$request = _elm_lang$http$Http_Internal$Request;\nvar _elm_lang$http$Http$post = F3(\n\tfunction (url, body, decoder) {\n\t\treturn _elm_lang$http$Http$request(\n\t\t\t{\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {ctor: '[]'},\n\t\t\t\turl: url,\n\t\t\t\tbody: body,\n\t\t\t\texpect: _elm_lang$http$Http$expectJson(decoder),\n\t\t\t\ttimeout: _elm_lang$core$Maybe$Nothing,\n\t\t\t\twithCredentials: false\n\t\t\t});\n\t});\nvar _elm_lang$http$Http$get = F2(\n\tfunction (url, decoder) {\n\t\treturn _elm_lang$http$Http$request(\n\t\t\t{\n\t\t\t\tmethod: 'GET',\n\t\t\t\theaders: {ctor: '[]'},\n\t\t\t\turl: url,\n\t\t\t\tbody: _elm_lang$http$Http$emptyBody,\n\t\t\t\texpect: _elm_lang$http$Http$expectJson(decoder),\n\t\t\t\ttimeout: _elm_lang$core$Maybe$Nothing,\n\t\t\t\twithCredentials: false\n\t\t\t});\n\t});\nvar _elm_lang$http$Http$getString = function (url) {\n\treturn _elm_lang$http$Http$request(\n\t\t{\n\t\t\tmethod: 'GET',\n\t\t\theaders: {ctor: '[]'},\n\t\t\turl: url,\n\t\t\tbody: _elm_lang$http$Http$emptyBody,\n\t\t\texpect: _elm_lang$http$Http$expectString,\n\t\t\ttimeout: _elm_lang$core$Maybe$Nothing,\n\t\t\twithCredentials: false\n\t\t});\n};\nvar _elm_lang$http$Http$toTask = function (_p0) {\n\tvar _p1 = _p0;\n\treturn A2(_elm_lang$http$Native_Http.toTask, _p1._0, _elm_lang$core$Maybe$Nothing);\n};\nvar _elm_lang$http$Http$send = F2(\n\tfunction (resultToMessage, request) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$attempt,\n\t\t\tresultToMessage,\n\t\t\t_elm_lang$http$Http$toTask(request));\n\t});\nvar _elm_lang$http$Http$Response = F4(\n\tfunction (a, b, c, d) {\n\t\treturn {url: a, status: b, headers: c, body: d};\n\t});\nvar _elm_lang$http$Http$BadPayload = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'BadPayload', _0: a, _1: b};\n\t});\nvar _elm_lang$http$Http$BadStatus = function (a) {\n\treturn {ctor: 'BadStatus', _0: a};\n};\nvar _elm_lang$http$Http$NetworkError = {ctor: 'NetworkError'};\nvar _elm_lang$http$Http$Timeout = {ctor: 'Timeout'};\nvar _elm_lang$http$Http$BadUrl = function (a) {\n\treturn {ctor: 'BadUrl', _0: a};\n};\nvar _elm_lang$http$Http$StringPart = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'StringPart', _0: a, _1: b};\n\t});\nvar _elm_lang$http$Http$stringPart = _elm_lang$http$Http$StringPart;\n\nvar _user$project$Main$decodeGifUrl = A2(\n\t_elm_lang$core$Json_Decode$at,\n\t{\n\t\tctor: '::',\n\t\t_0: 'data',\n\t\t_1: {\n\t\t\tctor: '::',\n\t\t\t_0: 'image_url',\n\t\t\t_1: {ctor: '[]'}\n\t\t}\n\t},\n\t_elm_lang$core$Json_Decode$string);\nvar _user$project$Main$subscriptions = function (model) {\n\treturn _elm_lang$core$Platform_Sub$none;\n};\nvar _user$project$Main$Model = F2(\n\tfunction (a, b) {\n\t\treturn {topic: a, gifUrl: b};\n\t});\nvar _user$project$Main$NewGif = function (a) {\n\treturn {ctor: 'NewGif', _0: a};\n};\nvar _user$project$Main$getRandomGif = function (topic) {\n\tvar url = A2(_elm_lang$core$Basics_ops['++'], 'https://api.giphy.com/v1/gifs/random?api_key=dc6zaTOxFJmzC&tag=', topic);\n\treturn A2(\n\t\t_elm_lang$http$Http$send,\n\t\t_user$project$Main$NewGif,\n\t\tA2(_elm_lang$http$Http$get, url, _user$project$Main$decodeGifUrl));\n};\nvar _user$project$Main$init = function (topic) {\n\treturn {\n\t\tctor: '_Tuple2',\n\t\t_0: A2(_user$project$Main$Model, topic, 'waiting.gif'),\n\t\t_1: _user$project$Main$getRandomGif(topic)\n\t};\n};\nvar _user$project$Main$update = F2(\n\tfunction (msg, model) {\n\t\tvar _p0 = msg;\n\t\tif (_p0.ctor === 'MorePlease') {\n\t\t\treturn {\n\t\t\t\tctor: '_Tuple2',\n\t\t\t\t_0: model,\n\t\t\t\t_1: _user$project$Main$getRandomGif(model.topic)\n\t\t\t};\n\t\t} else {\n\t\t\tif (_p0._0.ctor === 'Ok') {\n\t\t\t\treturn {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: A2(_user$project$Main$Model, model.topic, _p0._0._0),\n\t\t\t\t\t_1: _elm_lang$core$Platform_Cmd$none\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};\n\t\t\t}\n\t\t}\n\t});\nvar _user$project$Main$MorePlease = {ctor: 'MorePlease'};\nvar _user$project$Main$view = function (model) {\n\treturn A2(\n\t\t_elm_lang$html$Html$div,\n\t\t{ctor: '[]'},\n\t\t{\n\t\t\tctor: '::',\n\t\t\t_0: A2(\n\t\t\t\t_elm_lang$html$Html$h2,\n\t\t\t\t{ctor: '[]'},\n\t\t\t\t{\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: _elm_lang$html$Html$text(model.topic),\n\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t}),\n\t\t\t_1: {\n\t\t\t\tctor: '::',\n\t\t\t\t_0: A2(\n\t\t\t\t\t_elm_lang$html$Html$button,\n\t\t\t\t\t{\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: _elm_lang$html$Html_Events$onClick(_user$project$Main$MorePlease),\n\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: _elm_lang$html$Html$text('More Please!'),\n\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t}),\n\t\t\t\t_1: {\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: A2(\n\t\t\t\t\t\t_elm_lang$html$Html$br,\n\t\t\t\t\t\t{ctor: '[]'},\n\t\t\t\t\t\t{ctor: '[]'}),\n\t\t\t\t\t_1: {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: A2(\n\t\t\t\t\t\t\t_elm_lang$html$Html$img,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t_0: _elm_lang$html$Html_Attributes$src(model.gifUrl),\n\t\t\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ctor: '[]'}),\n\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n};\nvar _user$project$Main$main = _elm_lang$html$Html$program(\n\t{\n\t\tinit: _user$project$Main$init('cats'),\n\t\tview: _user$project$Main$view,\n\t\tupdate: _user$project$Main$update,\n\t\tsubscriptions: _user$project$Main$subscriptions\n\t})();\n\nvar Elm = {};\nElm['Main'] = Elm['Main'] || {};\nif (typeof _user$project$Main$main !== 'undefined') {\n _user$project$Main$main(Elm['Main'], 'Main', undefined);\n}\n\nif (typeof define === \"function\" && define['amd'])\n{\n define([], function() { return Elm; });\n return;\n}\n\nif (typeof module === \"object\")\n{\n module['exports'] = Elm;\n return;\n}\n\nvar globalElm = this['Elm'];\nif (typeof globalElm === \"undefined\")\n{\n this['Elm'] = Elm;\n return;\n}\n\nfor (var publicModule in Elm)\n{\n if (publicModule in globalElm)\n {\n throw new Error('There are two Elm modules called `' + publicModule + '` on this page! Rename one of them.');\n }\n globalElm[publicModule] = Elm[publicModule];\n}\n\n}).call(this);\n\n\n cb();\n }\n ;\n var obj = new Object();\n defineElm.bind(obj)(function(){\n var mountNode = document.getElementById('elm-div-5');\n obj.Elm. Main.embed(mountNode);\n });\n </script>\n ",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {}
}
]
},
{
"metadata": {
"collapsed": true,
"trusted": false
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"toc": {
"threshold": 4,
"number_sections": true,
"toc_cell": false,
"toc_window_display": false,
"toc_section_display": "block",
"sideBar": true,
"navigate_menu": true,
"moveMenuLeft": true,
"widenNotebook": false,
"colors": {
"hover_highlight": "#DAA520",
"selected_highlight": "#FFD700",
"running_highlight": "#FF0000",
"wrapper_background": "#FFFFFF",
"sidebar_border": "#EEEEEE",
"navigate_text": "#333333",
"navigate_num": "#000000"
},
"nav_menu": {
"width": "0px",
"height": "0px"
}
},
"kernelspec": {
"name": "snapkernel",
"display_name": "Snap",
"language": ""
},
"language_info": {
"name": "pyspark",
"mimetype": "text/x-python",
"pygments_lexer": "python2",
"codemirror_mode": {
"name": "python",
"version": 2
}
},
"gist": {
"id": "",
"data": {
"description": "demo of http request using elm_magic ",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment