// Generated by dart2js, the Dart to JavaScript compiler.
// The code supports the following hooks:
// dartPrint(message)   - if this function is defined it is called
//                        instead of the Dart [print] method.
// dartMainRunner(main) - if this function is defined, the Dart [main]
//                        method will not be invoked directly.
//                        Instead, a closure that will invoke [main] is
//                        passed to [dartMainRunner].
function Isolate() {}
init();

var $$ = {};
var $ = Isolate.$isolateProperties;
$$.ListIterator = {"":"Object;i,list",
 get$hasNext: function() {
  return $.lt(this.i, this.list.length);
},
 next$0: function() {
  var value, t1;
  if (this.get$hasNext() !== true)
    throw $.$$throw($.StateError$("No more elements"));
  value = this.list[this.i];
  t1 = this.i;
  if (typeof t1 !== 'number')
    return this.next$0$bailout0(1, t1, value);
  this.i = t1 + 1;
  return value;
},
 next$0$bailout0: function(state0, t1, value) {
  this.i = $.add(t1, 1);
  return value;
}
};

$$.Closure = {"":"Object;",
 toString$0: function() {
  return "Closure";
}
};

$$.Null = {"":"Object;"
};

$$.ConstantMap = {"":"Object;length>,_jsObject,_liblib0$_keys>",
 containsKey$1: function(key) {
  if ($.eqB(key, "__proto__"))
    return false;
  return this._jsObject.hasOwnProperty(key);
},
 operator$index$1: function(key) {
  if (this.containsKey$1(key) !== true)
    return;
  return this._jsObject[key];
},
 forEach$1: function(f) {
  var t1 = this._liblib0$_keys;
  $.getInterceptor$JSArray(t1).forEach$1(t1, new $.ConstantMap_forEach_anon(this, f));
},
 get$isEmpty: function() {
  return $.eq(this.length, 0);
},
 toString$0: function() {
  return $.Maps_mapToString(this);
},
 _throwUnmodifiable$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot modify unmodifiable Map"));
},
 operator$indexSet$2: function(key, val) {
  return this._throwUnmodifiable$0();
},
 remove$1: function(key) {
  return this._throwUnmodifiable$0();
},
 clear$0: function() {
  return this._throwUnmodifiable$0();
},
 is$Map: function() { return true; }
};

$$.MetaInfo = {"":"Object;_tag>,_tags,_set>"
};

$$.JSSyntaxRegExp = {"":"Object;_liblib0$_pattern,_multiLine,_ignoreCase",
 firstMatch$1: function(str) {
  var m, matchStart, t1, matchEnd;
  m = $.regExpExec(this, $.checkString(str));
  if (m == null)
    return;
  matchStart = m.index;
  t1 = $.index(m, 0);
  t1 = $.getInterceptor$JSStringJSArray(t1).get$length(t1);
  if (typeof t1 !== 'number')
    throw $.iae(t1);
  matchEnd = matchStart + t1;
  return $._MatchImplementation$(this.get$pattern(), str, matchStart, matchEnd, m);
},
 hasMatch$1: function(str) {
  return $.regExpTest(this, $.checkString(str));
},
 allMatches$1: function(str) {
  $.checkString(str);
  return $._AllMatchesIterable$(this, str);
},
 get$pattern: function() {
  return this._liblib0$_pattern;
},
 get$multiLine: function() {
  return this._multiLine;
},
 get$ignoreCase: function() {
  return this._ignoreCase;
},
 is$JSSyntaxRegExp: true
};

$$._MatchImplementation = {"":"Object;pattern>,str,start,end,_groups",
 group$1: function(index) {
  return $.index(this._groups, index);
},
 operator$index$1: function(index) {
  return $.index(this._groups, index);
}
};

$$._AllMatchesIterable = {"":"Object;_re,_str",
 iterator$0: function() {
  return $._AllMatchesIterator$(this._re, this._str);
}
};

$$._AllMatchesIterator = {"":"Object;_re,_str,_liblib0$_next=,_done",
 next$0: function() {
  if (this.get$hasNext() !== true)
    throw $.$$throw($.StateError$("No more elements"));
  var next = this._liblib0$_next;
  this._liblib0$_next = null;
  return next;
},
 get$hasNext: function() {
  if (this._done)
    return false;
  else if (!(this._liblib0$_next == null))
    return true;
  this._liblib0$_next = this._re.firstMatch$1(this._str);
  if (this._liblib0$_next == null) {
    this._done = true;
    return false;
  } else
    return true;
}
};

$$.StringMatch = {"":"Object;start,str,pattern>",
 operator$index$1: function(g) {
  return this.group$1(g);
},
 group$1: function(group_) {
  if (!$.eqB(group_, 0))
    throw $.$$throw($.RangeError$value(group_));
  return this.pattern;
}
};

$$.NullThrownError = {"":"Object;",
 toString$0: function() {
  return "Throw of null.";
}
};

$$.ArgumentError = {"":"Object;message",
 toString$0: function() {
  var t1 = this.message;
  if (!(t1 == null))
    return "Illegal argument(s): " + $.S(t1);
  return "Illegal argument(s)";
}
};

$$.RangeError = {"":"ArgumentError;message",
 toString$0: function() {
  return "RangeError: " + $.S(this.message);
}
};

$$.NoSuchMethodError = {"":"Object;_receiver,_memberName,_arguments,_namedArguments,_existingArgumentNames",
 toString$0: function() {
  var t1, t2, t3, t4, t5, actualParameters, i, formalParameters;
  t1 = {};
  t1.sb_0 = $.StringBuffer_StringBuffer("");
  t1.i_1 = 0;
  t2 = this._arguments;
  if (typeof t2 !== 'string' && (typeof t2 !== 'object' || t2 === null || t2.constructor !== Array && !t2.is$JavaScriptIndexingBehavior()))
    return this.toString$0$bailout(1, t1, t2);
  for (; $.ltB(t1.i_1, t2.length); t1.i_1 = $.add(t1.i_1, 1)) {
    if ($.gtB(t1.i_1, 0)) {
      t3 = t1.sb_0;
      $.getInterceptor$JSArray(t3).add$1(t3, ", ");
    }
    t3 = t1.sb_0;
    t4 = $.getInterceptor$JSArray(t3);
    t5 = t1.i_1;
    if (t5 !== (t5 | 0))
      throw $.iae(t5);
    if (t5 < 0 || t5 >= t2.length)
      throw $.ioore(t5);
    t4.add$1(t3, $.Error_safeToString(t2[t5]));
  }
  t2 = this._namedArguments;
  if (!(t2 == null))
    $.getInterceptor$JSArray(t2).forEach$1(t2, new $.NoSuchMethodError_toString_anon(t1));
  t2 = this._existingArgumentNames;
  if (typeof t2 !== 'string' && (typeof t2 !== 'object' || t2 === null || t2.constructor !== Array && !t2.is$JavaScriptIndexingBehavior()))
    return this.toString$0$bailout(2, t1, t2);
  t3 = t1.sb_0;
  actualParameters = $.getInterceptor(t3).toString$0(t3);
  t1.sb_0 = $.StringBuffer_StringBuffer("");
  for (i = 0; i < t2.length; ++i) {
    if (i > 0) {
      t3 = t1.sb_0;
      $.getInterceptor$JSArray(t3).add$1(t3, ", ");
    }
    t3 = t1.sb_0;
    t4 = $.getInterceptor$JSArray(t3);
    if (i >= t2.length)
      throw $.ioore(i);
    t4.add$1(t3, t2[i]);
  }
  t1 = t1.sb_0;
  formalParameters = $.getInterceptor(t1).toString$0(t1);
  t1 = this._memberName;
  return "NoSuchMethodError: incorrect number of arguments passed to method named '" + $.S(t1) + "'\n" + "Receiver: " + $.S($.Error_safeToString(this._receiver)) + "\n" + "Tried calling: " + $.S(t1) + "(" + $.S(actualParameters) + ")\n" + "Found: " + $.S(t1) + "(" + $.S(formalParameters) + ")";
},
 toString$0$bailout: function(state0, env0, env1) {
  switch (state0) {
    case 1:
      t2 = env1;
      t1 = env0;
      break;
    case 2:
      t2 = env1;
      t1 = env0;
      break;
  }
  switch (state0) {
    case 0:
      t1 = {};
      t1.sb_0 = $.StringBuffer_StringBuffer("");
      t1.i_1 = 0;
      t2 = this._arguments;
    case 1:
      state0 = 0;
      if (!(t2 == null))
        for (; $.ltB(t1.i_1, $.getInterceptor$JSStringJSArray(t2).get$length(t2)); t1.i_1 = $.add(t1.i_1, 1)) {
          if ($.gtB(t1.i_1, 0)) {
            t3 = t1.sb_0;
            $.getInterceptor$JSArray(t3).add$1(t3, ", ");
          }
          t3 = t1.sb_0;
          $.getInterceptor$JSArray(t3).add$1(t3, $.Error_safeToString($.index(t2, t1.i_1)));
        }
      t2 = this._namedArguments;
      if (!(t2 == null))
        $.getInterceptor$JSArray(t2).forEach$1(t2, new $.NoSuchMethodError_toString_anon(t1));
      t2 = this._existingArgumentNames;
    case 2:
      var t1, t2, t3, actualParameters, i, formalParameters;
      state0 = 0;
      if (t2 == null)
        return "NoSuchMethodError : method not found: '" + $.S(this._memberName) + "'\n" + "Receiver: " + $.S($.Error_safeToString(this._receiver)) + "\n" + "Arguments: [" + $.S(t1.sb_0) + "]";
      else {
        t3 = t1.sb_0;
        actualParameters = $.getInterceptor(t3).toString$0(t3);
        t1.sb_0 = $.StringBuffer_StringBuffer("");
        for (i = 0; $.ltB(i, $.getInterceptor$JSStringJSArray(t2).get$length(t2)); ++i) {
          if (i > 0) {
            t3 = t1.sb_0;
            $.getInterceptor$JSArray(t3).add$1(t3, ", ");
          }
          t3 = t1.sb_0;
          $.getInterceptor$JSArray(t3).add$1(t3, $.index(t2, i));
        }
        t1 = t1.sb_0;
        formalParameters = $.getInterceptor(t1).toString$0(t1);
        t1 = this._memberName;
        return "NoSuchMethodError: incorrect number of arguments passed to method named '" + $.S(t1) + "'\n" + "Receiver: " + $.S($.Error_safeToString(this._receiver)) + "\n" + "Tried calling: " + $.S(t1) + "(" + $.S(actualParameters) + ")\n" + "Found: " + $.S(t1) + "(" + $.S(formalParameters) + ")";
      }
  }
}
};

$$.UnsupportedError = {"":"Object;message>",
 toString$0: function() {
  return "Unsupported operation: " + $.S(this.get$message());
}
};

$$.StateError = {"":"Object;message",
 toString$0: function() {
  return "Bad state: " + this.message;
}
};

$$.StackOverflowError = {"":"Object;",
 toString$0: function() {
  return "Stack Overflow";
}
};

$$.RuntimeError = {"":"Object;message",
 toString$0: function() {
  return "RuntimeError: " + this.message;
}
};

$$._ExceptionImplementation = {"":"Object;message",
 toString$0: function() {
  var t1 = this.message;
  if (t1 == null)
    return "Exception";
  return "Exception: " + $.S(t1);
}
};

$$.FormatException = {"":"Object;message",
 toString$0: function() {
  return "FormatException: " + $.S(this.message);
}
};

$$.IllegalJSRegExpException = {"":"Object;_pattern,_errmsg",
 toString$0: function() {
  return "IllegalJSRegExpException: '" + $.S(this._pattern) + "' '" + this._errmsg + "'";
}
};

$$._HashMapImpl = {"":"Object;_keys>,_values,_loadLimit,_numberOfEntries,_numberOfDeleted",
 _probeForAdding$1: function(key) {
  var t1, hash, numberOfProbes, insertionIndex, existingKey, numberOfProbes0;
  if (key == null)
    throw $.$$throw($.ArgumentError$(null));
  t1 = $.getInterceptor(key).get$hashCode(key);
  if (t1 !== (t1 | 0))
    return this._probeForAdding$1$bailout(1, key, t1);
  hash = (t1 & this._keys.length - 1) >>> 0;
  for (numberOfProbes = 1, insertionIndex = -1; true; numberOfProbes = numberOfProbes0) {
    t1 = this._keys;
    if (hash < 0 || hash >= t1.length)
      throw $.ioore(hash);
    existingKey = t1[hash];
    if (existingKey == null) {
      if (insertionIndex < 0)
        return hash;
      return insertionIndex;
    } else if ($.eqB(existingKey, key))
      return hash;
    else if (insertionIndex < 0 && existingKey === $.CONSTANT4)
      insertionIndex = hash;
    numberOfProbes0 = numberOfProbes + 1;
    hash = $._HashMapImpl__nextProbe(hash, numberOfProbes, this._keys.length);
    if (hash !== (hash | 0))
      return this._probeForAdding$1$bailout(2, key, insertionIndex, hash, numberOfProbes0);
  }
},
 _probeForAdding$1$bailout: function(state0, env0, env1, env2, env3) {
  switch (state0) {
    case 1:
      t1 = env1;
      key = env0;
      break;
    case 2:
      numberOfProbes0 = env3;
      hash = env2;
      insertionIndex = env1;
      key = env0;
      break;
  }
  switch (state0) {
    case 0:
      if (key == null)
        throw $.$$throw($.ArgumentError$(null));
      t1 = $.getInterceptor(key).get$hashCode(key);
    case 1:
      state0 = 0;
      hash = $.and(t1, this._keys.length - 1);
      numberOfProbes = 1;
      insertionIndex = -1;
    case 2:
      var t1, key, hash, numberOfProbes, insertionIndex, existingKey, numberOfProbes0;
      L0:
        while (true)
          switch (state0) {
            case 0:
              if (!true)
                break L0;
              t1 = this._keys;
              if (hash !== (hash | 0))
                throw $.iae(hash);
              if (hash < 0 || hash >= t1.length)
                throw $.ioore(hash);
              existingKey = t1[hash];
              if (existingKey == null) {
                if (insertionIndex < 0)
                  return hash;
                return insertionIndex;
              } else if ($.eqB(existingKey, key))
                return hash;
              else if (insertionIndex < 0 && existingKey === $.CONSTANT4)
                insertionIndex = hash;
              numberOfProbes0 = numberOfProbes + 1;
              hash = $._HashMapImpl__nextProbe(hash, numberOfProbes, this._keys.length);
            case 2:
              state0 = 0;
              numberOfProbes = numberOfProbes0;
          }
  }
},
 _probeForLookup$1: function(key) {
  var hash, numberOfProbes, t1, existingKey, numberOfProbes0;
  if (key == null)
    throw $.$$throw($.ArgumentError$(null));
  hash = $.and($.getInterceptor(key).get$hashCode(key), this._keys.length - 1);
  if (hash !== (hash | 0))
    return this._probeForLookup$1$bailout(1, key, hash);
  for (numberOfProbes = 1; true; numberOfProbes = numberOfProbes0) {
    t1 = this._keys;
    if (hash !== (hash | 0))
      throw $.iae(hash);
    if (hash < 0 || hash >= t1.length)
      throw $.ioore(hash);
    existingKey = t1[hash];
    if (existingKey == null)
      return -1;
    if ($.eqB(existingKey, key))
      return hash;
    numberOfProbes0 = numberOfProbes + 1;
    hash = $._HashMapImpl__nextProbe(hash, numberOfProbes, this._keys.length);
  }
},
 _probeForLookup$1$bailout: function(state0, key, hash) {
  var numberOfProbes, t1, existingKey, numberOfProbes0;
  for (numberOfProbes = 1; true; numberOfProbes = numberOfProbes0) {
    t1 = this._keys;
    if (hash !== (hash | 0))
      throw $.iae(hash);
    if (hash < 0 || hash >= t1.length)
      throw $.ioore(hash);
    existingKey = t1[hash];
    if (existingKey == null)
      return -1;
    if ($.eqB(existingKey, key))
      return hash;
    numberOfProbes0 = numberOfProbes + 1;
    hash = $._HashMapImpl__nextProbe(hash, numberOfProbes, this._keys.length);
  }
},
 _ensureCapacity$0: function() {
  var newNumberOfEntries, capacity, numberOfFreeOrDeleted, t1;
  newNumberOfEntries = $.add(this._numberOfEntries, 1);
  if ($.geB(newNumberOfEntries, this._loadLimit)) {
    this._grow$1(this._keys.length * 2);
    return;
  }
  capacity = this._keys.length;
  if (typeof newNumberOfEntries !== 'number')
    throw $.iae(newNumberOfEntries);
  numberOfFreeOrDeleted = capacity - newNumberOfEntries;
  t1 = this._numberOfDeleted;
  if (t1 > numberOfFreeOrDeleted - t1)
    this._grow$1(capacity);
},
 _grow$1: function(newCapacity) {
  var capacity, oldKeys, oldValues, i, key, value, newIndex, t1;
  capacity = this._keys.length;
  this._loadLimit = $.tdiv($.mul(newCapacity, 3), 4);
  oldKeys = this._keys;
  oldValues = this._values;
  this._keys = $.List_List(newCapacity);
  this._values = $.List_List(newCapacity);
  for (i = 0; i < capacity; ++i) {
    if (i >= oldKeys.length)
      throw $.ioore(i);
    key = oldKeys[i];
    if (key == null || key === $.CONSTANT4)
      continue;
    if (i >= oldValues.length)
      throw $.ioore(i);
    value = oldValues[i];
    newIndex = this._probeForAdding$1(key);
    t1 = this._keys;
    if (newIndex !== (newIndex | 0))
      throw $.iae(newIndex);
    if (newIndex < 0 || newIndex >= t1.length)
      throw $.ioore(newIndex);
    t1[newIndex] = key;
    t1 = this._values;
    if (newIndex >= t1.length)
      throw $.ioore(newIndex);
    t1[newIndex] = value;
  }
  this._numberOfDeleted = 0;
},
 clear$0: function() {
  var t1, length$, t2, t3, i;
  this._numberOfEntries = 0;
  this._numberOfDeleted = 0;
  t1 = this._keys;
  length$ = t1.length;
  for (t2 = this._values, t3 = t2.length, i = 0; i < length$; ++i) {
    t1[i] = null;
    if (i >= t3)
      throw $.ioore(i);
    t2[i] = null;
  }
},
 operator$indexSet$2: function(key, value) {
  var index, t1;
  this._ensureCapacity$0();
  index = this._probeForAdding$1(key);
  t1 = this._keys;
  if (index !== (index | 0))
    throw $.iae(index);
  if (index < 0 || index >= t1.length)
    throw $.ioore(index);
  t1 = t1[index];
  if (t1 == null || t1 === $.CONSTANT4)
    this._numberOfEntries = $.add(this._numberOfEntries, 1);
  t1 = this._keys;
  if (index >= t1.length)
    throw $.ioore(index);
  t1[index] = key;
  t1 = this._values;
  if (index >= t1.length)
    throw $.ioore(index);
  t1[index] = value;
},
 operator$index$1: function(key) {
  var index, t1;
  index = this._probeForLookup$1(key);
  if ($.ltB(index, 0))
    return;
  t1 = this._values;
  if (index !== (index | 0))
    throw $.iae(index);
  if (index < 0 || index >= t1.length)
    throw $.ioore(index);
  return t1[index];
},
 remove$1: function(key) {
  var index, t1, value;
  index = this._probeForLookup$1(key);
  if ($.geB(index, 0)) {
    this._numberOfEntries = $.sub(this._numberOfEntries, 1);
    t1 = this._values;
    if (index !== (index | 0))
      throw $.iae(index);
    if (index < 0 || index >= t1.length)
      throw $.ioore(index);
    value = t1[index];
    t1[index] = null;
    t1 = this._keys;
    if (index >= t1.length)
      throw $.ioore(index);
    t1[index] = $.CONSTANT4;
    this._numberOfDeleted = this._numberOfDeleted + 1;
    return value;
  }
  return;
},
 get$isEmpty: function() {
  return $.eq(this._numberOfEntries, 0);
},
 get$length: function() {
  return this._numberOfEntries;
},
 forEach$1: function(f) {
  var length$, i, t1, key;
  length$ = this._keys.length;
  for (i = 0; i < length$; ++i) {
    t1 = this._keys;
    if (i >= t1.length)
      throw $.ioore(i);
    key = t1[i];
    if (!(key == null) && !(key === $.CONSTANT4)) {
      t1 = this._values;
      if (i >= t1.length)
        throw $.ioore(i);
      f.call$2(key, t1[i]);
    }
  }
},
 containsKey$1: function(key) {
  return !$.eqB(this._probeForLookup$1(key), -1);
},
 toString$0: function() {
  return $.Maps_mapToString(this);
},
 _HashMapImpl$0: function() {
  this._numberOfEntries = 0;
  this._numberOfDeleted = 0;
  this._loadLimit = $._HashMapImpl__computeLoadLimit(8);
  this._keys = $.List_List(8);
  this._values = $.List_List(8);
},
 is$Map: function() { return true; }
};

$$._DeletedKeySentinel = {"":"Object;"
};

$$._KeyValuePair = {"":"Object;key>,value="
};

$$._LinkedHashMapImpl = {"":"Object;_list,_map",
 operator$indexSet$2: function(key, value) {
  if (this._map.containsKey$1(key) === true)
    $.index(this._map, key).get$element().set$value(value);
  else {
    this._list.addLast$1($._KeyValuePair$(key, value));
    $.indexSet(this._map, key, this._list.lastEntry$0());
  }
},
 operator$index$1: function(key) {
  var entry = $.index(this._map, key);
  if (entry == null)
    return;
  return entry.get$element().get$value();
},
 remove$1: function(key) {
  var entry = this._map.remove$1(key);
  if (entry == null)
    return;
  entry.remove$0();
  return entry.get$element().get$value();
},
 forEach$1: function(f) {
  this._list.forEach$1(new $._LinkedHashMapImpl_forEach_anon(f));
},
 containsKey$1: function(key) {
  return this._map.containsKey$1(key);
},
 get$length: function() {
  var t1 = this._map;
  return $.getInterceptor$JSStringJSArray(t1).get$length(t1);
},
 get$isEmpty: function() {
  return $.eq(this.get$length(), 0);
},
 clear$0: function() {
  var t1 = this._map;
  $.getInterceptor$JSArray(t1).clear$0(t1);
  this._list.clear$0();
},
 toString$0: function() {
  return $.Maps_mapToString(this);
},
 _LinkedHashMapImpl$0: function() {
  this._map = $.HashMap_HashMap();
  this._list = $.DoubleLinkedQueue$();
},
 is$Map: function() { return true; }
};

$$.Object = {"":";",
 operator$eq$1: function(other) {
  return this === other;
},
 get$hashCode: function() {
  return $.Primitives_objectHashCode(this);
},
 toString$0: function() {
  return $.Primitives_objectToString(this);
}
};

$$.DoubleLinkedQueueEntry = {"":"Object;_previous=,_next=,_element>",
 _link$2: function(p, n) {
  this._next = n;
  this._previous = p;
  p.set$_next(this);
  n.set$_previous(this);
},
 prepend$1: function(e) {
  $.DoubleLinkedQueueEntry$(e)._link$2(this._previous, this);
},
 remove$0: function() {
  var t1 = this._next;
  this._previous.set$_next(t1);
  t1 = this._previous;
  this._next.set$_previous(t1);
  this._next = null;
  this._previous = null;
  return this._element;
},
 _asNonSentinelEntry$0: function() {
  return this;
},
 previousEntry$0: function() {
  return this._previous._asNonSentinelEntry$0();
},
 get$element: function() {
  return this._element;
},
 DoubleLinkedQueueEntry$1: function(e) {
  this._element = e;
}
};

$$._DoubleLinkedQueueEntrySentinel = {"":"DoubleLinkedQueueEntry;_previous,_next,_element",
 remove$0: function() {
  throw $.$$throw($.StateError$("Empty queue"));
},
 _asNonSentinelEntry$0: function() {
  return;
},
 get$element: function() {
  throw $.$$throw($.StateError$("Empty queue"));
},
 _DoubleLinkedQueueEntrySentinel$0: function() {
  this._link$2(this, this);
}
};

$$.DoubleLinkedQueue = {"":"Object;_sentinel",
 addLast$1: function(value) {
  this._sentinel.prepend$1(value);
},
 add$1: function(value) {
  this._sentinel.prepend$1(value);
},
 addAll$1: function(collection) {
  var t1, t2;
  for (t1 = $.getInterceptor$JSArray(collection).iterator$0(collection); t1.get$hasNext() === true;) {
    t2 = t1.next$0();
    this._sentinel.prepend$1(t2);
  }
},
 removeLast$0: function() {
  return this._sentinel._previous.remove$0();
},
 get$last: function() {
  return this._sentinel._previous.get$element();
},
 lastEntry$0: function() {
  return this._sentinel.previousEntry$0();
},
 get$length: function() {
  var t1 = {};
  t1.counter_0 = 0;
  this.forEach$1(new $.DoubleLinkedQueue_length_anon(t1));
  return t1.counter_0;
},
 get$isEmpty: function() {
  var t1 = this._sentinel;
  return t1._next === t1;
},
 clear$0: function() {
  var t1 = this._sentinel;
  t1._next = t1;
  t1 = this._sentinel;
  t1._previous = t1;
},
 forEach$1: function(f) {
  var entry, nextEntry;
  entry = this._sentinel._next;
  for (; !(entry === this._sentinel); entry = nextEntry) {
    nextEntry = entry.get$_next();
    f.call$1(entry.get$_element());
  }
},
 filter$1: function(f) {
  var other, entry, t1, nextEntry;
  other = $.Queue_Queue();
  entry = this._sentinel._next;
  for (t1 = $.getInterceptor$JSArray(other); !(entry === this._sentinel); entry = nextEntry) {
    nextEntry = entry.get$_next();
    if (f.call$1(entry.get$_element()) === true)
      t1.addLast$1(other, entry.get$_element());
  }
  return other;
},
 iterator$0: function() {
  return $._DoubleLinkedQueueIterator$(this._sentinel);
},
 toString$0: function() {
  return $.Collections_collectionToString(this);
},
 DoubleLinkedQueue$0: function() {
  this._sentinel = $._DoubleLinkedQueueEntrySentinel$();
},
 is$Collection: function() { return true; }
};

$$._DoubleLinkedQueueIterator = {"":"Object;_sentinel,_currentEntry",
 get$hasNext: function() {
  var t1, t2;
  t1 = this._currentEntry.get$_next();
  t2 = this._sentinel;
  return !(t1 == null ? t2 == null : t1 === t2);
},
 next$0: function() {
  if (this.get$hasNext() !== true)
    throw $.$$throw($.StateError$("No more elements"));
  this._currentEntry = this._currentEntry.get$_next();
  return this._currentEntry.get$element();
},
 _DoubleLinkedQueueIterator$1: function(_sentinel) {
  this._currentEntry = this._sentinel;
}
};

$$._HashSetImpl = {"":"Object;_backingMap>",
 clear$0: function() {
  this._backingMap.clear$0();
},
 add$1: function(value) {
  this._backingMap.operator$indexSet$2(value, value);
},
 remove$1: function(value) {
  if (this._backingMap.containsKey$1(value) !== true)
    return false;
  this._backingMap.remove$1(value);
  return true;
},
 addAll$1: function(collection) {
  $.getInterceptor$JSArray(collection).forEach$1(collection, new $._HashSetImpl_addAll_anon(this));
},
 forEach$1: function(f) {
  this._backingMap.forEach$1(new $._HashSetImpl_forEach_anon(f));
},
 filter$1: function(f) {
  var result = $.Set_Set();
  this._backingMap.forEach$1(new $._HashSetImpl_filter_anon(result, f));
  return result;
},
 get$isEmpty: function() {
  var t1 = this._backingMap;
  return $.getInterceptor$JSStringJSArray(t1).get$isEmpty(t1);
},
 get$length: function() {
  var t1 = this._backingMap;
  return $.getInterceptor$JSStringJSArray(t1).get$length(t1);
},
 iterator$0: function() {
  return $._HashSetIterator$(this);
},
 toString$0: function() {
  return $.Collections_collectionToString(this);
},
 _HashSetImpl$0: function() {
  this._backingMap = $._HashMapImpl$();
},
 is$Collection: function() { return true; }
};

$$._HashSetIterator = {"":"Object;_entries,_nextValidIndex",
 get$hasNext: function() {
  var t1, t2, t3;
  t1 = this._nextValidIndex;
  t2 = this._entries;
  t3 = $.getInterceptor$JSStringJSArray(t2);
  if ($.geB(t1, t3.get$length(t2)))
    return false;
  if ($.index(t2, this._nextValidIndex) === $.CONSTANT4)
    this._advance$0();
  return $.lt(this._nextValidIndex, t3.get$length(t2));
},
 next$0: function() {
  var t1, t3, res;
  if (this.get$hasNext() !== true)
    throw $.$$throw($.StateError$("No more elements"));
  t1 = this._entries;
  if (typeof t1 !== 'string' && (typeof t1 !== 'object' || t1 === null || t1.constructor !== Array && !t1.is$JavaScriptIndexingBehavior()))
    return this.next$0$bailout1(1, t1);
  t3 = this._nextValidIndex;
  if (t3 < 0 || t3 >= t1.length)
    throw $.ioore(t3);
  res = t1[t3];
  this._advance$0();
  return res;
},
 next$0$bailout1: function(state0, t1) {
  var res = $.index(t1, this._nextValidIndex);
  this._advance$0();
  return res;
},
 _advance$0: function() {
  var t1, length$, t2, entry;
  t1 = this._entries;
  if (typeof t1 !== 'string' && (typeof t1 !== 'object' || t1 === null || t1.constructor !== Array && !t1.is$JavaScriptIndexingBehavior()))
    return this._advance$0$bailout(1, t1);
  length$ = t1.length;
  do {
    t2 = this._nextValidIndex + 1;
    this._nextValidIndex = t2;
    if (t2 >= length$)
      break;
    t2 = this._nextValidIndex;
    if (t2 < 0 || t2 >= t1.length)
      throw $.ioore(t2);
    entry = t1[t2];
  } while (entry == null || entry === $.CONSTANT4);
},
 _advance$0$bailout: function(state0, env0, env1) {
  switch (state0) {
    case 1:
      t1 = env0;
      break;
    case 2:
      length$ = env1;
      t1 = env0;
      break;
  }
  switch (state0) {
    case 0:
      t1 = this._entries;
    case 1:
      state0 = 0;
      length$ = $.getInterceptor$JSStringJSArray(t1).get$length(t1);
    case 2:
      var t1, length$, t2, entry;
      state0 = 0;
      do {
        t2 = this._nextValidIndex + 1;
        this._nextValidIndex = t2;
        if ($.geB(t2, length$))
          break;
        entry = $.index(t1, this._nextValidIndex);
      } while (entry == null || entry === $.CONSTANT4);
  }
},
 _HashSetIterator$1: function(set_) {
  this._advance$0();
}
};

$$._StringBufferImpl = {"":"Object;_buffer,_length",
 get$length: function() {
  return this._length;
},
 get$isEmpty: function() {
  return $.eq(this._length, 0);
},
 add$1: function(obj) {
  var str, t1, t3;
  str = $.getInterceptor(obj).toString$0(obj);
  if (str == null || $.getInterceptor$JSStringJSArray(str).get$isEmpty(str) === true)
    return this;
  t1 = this._buffer;
  $.getInterceptor$JSArray(t1).add$1(t1, str);
  t1 = this._length;
  if (typeof t1 !== 'number')
    return this.add$1$bailout(1, str, t1);
  t3 = $.getInterceptor$JSStringJSArray(str).get$length(str);
  if (typeof t3 !== 'number')
    return this.add$1$bailout(2, t3, t1);
  this._length = t1 + t3;
  return this;
},
 add$1$bailout: function(state0, env0, env1) {
  switch (state0) {
    case 1:
      t1 = env1;
      str = env0;
      break;
    case 2:
      t1 = env1;
      t3 = env0;
      break;
  }
  switch (state0) {
    case 0:
      str = $.getInterceptor(obj).toString$0(obj);
      if (str == null || $.getInterceptor$JSStringJSArray(str).get$isEmpty(str) === true)
        return this;
      t1 = this._buffer;
      $.getInterceptor$JSArray(t1).add$1(t1, str);
      t1 = this._length;
    case 1:
      state0 = 0;
      t3 = $.getInterceptor$JSStringJSArray(str).get$length(str);
    case 2:
      var str, t1, t3;
      state0 = 0;
      this._length = $.add(t1, t3);
      return this;
  }
},
 addAll$1: function(objects) {
  var t1;
  for (t1 = $.getInterceptor$JSArray(objects).iterator$0(objects); t1.get$hasNext() === true;)
    this.add$1(t1.next$0());
  return this;
},
 clear$0: function() {
  this._buffer = $.List_List(null);
  this._length = 0;
  return this;
},
 toString$0: function() {
  var t1, result;
  t1 = this._buffer;
  if ($.eqB($.getInterceptor$JSStringJSArray(t1).get$length(t1), 0))
    return "";
  t1 = this._buffer;
  if ($.eqB($.getInterceptor$JSStringJSArray(t1).get$length(t1), 1))
    return $.index(this._buffer, 0);
  result = $.stringJoinUnchecked($.Strings__toJsStringArray(this._buffer), "");
  t1 = this._buffer;
  $.getInterceptor$JSArray(t1).clear$0(t1);
  t1 = this._buffer;
  $.getInterceptor$JSArray(t1).add$1(t1, result);
  return result;
},
 _StringBufferImpl$1: function(content$) {
  this.clear$0();
  this.add$1(content$);
}
};

$$.ObjectInterceptor = {"":"Object;",
 toString$0: function(receiver) {
  return receiver.toString$0();
},
 substring$1: function(receiver, a0) {
  return receiver.substring$1(a0);
},
 charCodeAt$1: function(receiver, a0) {
  return receiver.charCodeAt$1(a0);
},
 iterator$0: function(receiver) {
  return receiver.iterator$0();
},
 add$1: function(receiver, a0) {
  return receiver.add$1(a0);
},
 replaceAll$2: function(receiver, a0, a1) {
  return receiver.replaceAll$2(a0, a1);
},
 ceil$0: function(receiver) {
  return receiver.ceil$0();
},
 set$length: function(receiver, value) {
  return receiver.set$length(value);
},
 contains$2: function(receiver, a0, a1) {
  return receiver.contains$2(a0, a1);
},
 removeAt$1: function(receiver, a0) {
  return receiver.removeAt$1(a0);
},
 get$last: function(receiver) {
  return receiver.get$last();
},
 endsWith$1: function(receiver, a0) {
  return receiver.endsWith$1(a0);
},
 indexOf$2: function(receiver, a0, a1) {
  return receiver.indexOf$2(a0, a1);
},
 trim$0: function(receiver) {
  return receiver.trim$0();
},
 get$length: function(receiver) {
  return receiver.get$length();
},
 forEach$1: function(receiver, a0) {
  return receiver.forEach$1(a0);
},
 getRange$2: function(receiver, a0, a1) {
  return receiver.getRange$2(a0, a1);
},
 get$isEmpty: function(receiver) {
  return receiver.get$isEmpty();
},
 addLast$1: function(receiver, a0) {
  return receiver.addLast$1(a0);
},
 substring$2: function(receiver, a0, a1) {
  return receiver.substring$2(a0, a1);
},
 get$isNaN: function(receiver) {
  return receiver.get$isNaN();
},
 truncate$0: function(receiver) {
  return receiver.truncate$0();
},
 get$hashCode: function(receiver) {
  return receiver.get$hashCode();
},
 addAll$1: function(receiver, a0) {
  return receiver.addAll$1(a0);
},
 clear$0: function(receiver) {
  return receiver.clear$0();
},
 filter$1: function(receiver, a0) {
  return receiver.filter$1(a0);
},
 toLowerCase$0: function(receiver) {
  return receiver.toLowerCase$0();
},
 toRadixString$1: function(receiver, a0) {
  return receiver.toRadixString$1(a0);
},
 floor$0: function(receiver) {
  return receiver.floor$0();
},
 split$1: function(receiver, a0) {
  return receiver.split$1(a0);
},
 removeLast$0: function(receiver) {
  return receiver.removeLast$0();
},
 allMatches$1: function(receiver, a0) {
  return receiver.allMatches$1(a0);
},
 indexOf$1: function(receiver, a0) {
  return receiver.indexOf$1(a0);
}
};

$$.JSFunction = {"":"Object;",
 toString$0: function(receiver) {
  return "Closure";
}
};

$$.JSBool = {"":"Object;",
 toString$0: function(receiver) {
  return String(receiver);
},
 get$hashCode: function(receiver) {
  return receiver ? 519018 : 218159;
},
 is$bool: true
};

$$.JSNull = {"":"Object;",
 toString$0: function(receiver) {
  return "null";
},
 get$hashCode: function(receiver) {
  return 0;
}
};

$$.JSArray = {"":"Object;",
 add$1: function(receiver, value) {
  $.checkGrowable(receiver, "add");
  receiver.push(value);
},
 removeAt$1: function(receiver, index) {
  if (!(typeof index === 'number' && Math.floor(index) === index))
    throw $.$$throw($.ArgumentError$(index));
  if (index < 0 || index >= receiver.length)
    throw $.$$throw($.RangeError$value(index));
  $.checkGrowable(receiver, "removeAt");
  return receiver.splice(index, 1)[0];
},
 removeLast$0: function(receiver) {
  $.checkGrowable(receiver, "removeLast");
  if (receiver.length === 0)
    throw $.$$throw($.RangeError$value(-1));
  return receiver.pop();
},
 filter$1: function(receiver, f) {
  return $.Collections_filter(receiver, [], f);
},
 addAll$1: function(receiver, collection) {
  var t1;
  for (t1 = $.getInterceptor$JSArray(collection).iterator$0(collection); t1.get$hasNext() === true;)
    $.CONSTANT1.add$1(receiver, t1.next$0());
},
 addLast$1: function(receiver, value) {
  $.checkGrowable(receiver, "addLast");
  receiver.push(value);
},
 clear$0: function(receiver) {
  this.set$length(receiver, 0);
},
 forEach$1: function(receiver, f) {
  return $.Collections_forEach(receiver, f);
},
 getRange$2: function(receiver, start, length$) {
  var t1, end;
  if (0 === length$)
    return [];
  $.checkNull(start);
  $.checkNull(length$);
  if (!(typeof start === 'number' && Math.floor(start) === start))
    throw $.$$throw($.ArgumentError$(start));
  if (!(typeof length$ === 'number' && Math.floor(length$) === length$))
    throw $.$$throw($.ArgumentError$(length$));
  t1 = length$ < 0;
  if (t1)
    throw $.$$throw($.ArgumentError$(length$));
  if (start < 0)
    throw $.$$throw($.RangeError$value(start));
  end = start + length$;
  if (end > receiver.length)
    throw $.$$throw($.RangeError$value(length$));
  if (t1)
    throw $.$$throw($.ArgumentError$(length$));
  return receiver.slice(start, end);
},
 get$last: function(receiver) {
  var t1, t2;
  t1 = receiver.length;
  t2 = t1 - 1;
  if (t2 < 0)
    throw $.ioore(t2);
  return receiver[t2];
},
 indexOf$2: function(receiver, element, start) {
  if (!(typeof start === 'number' && Math.floor(start) === start))
    throw $.$$throw($.ArgumentError$(start));
  return $.Arrays_indexOf(receiver, element, start, receiver.length);
},
 indexOf$1: function($receiver, element) {
  return this.indexOf$2($receiver, element, 0);
},
 get$isEmpty: function(receiver) {
  return receiver.length === 0;
},
 toString$0: function(receiver) {
  return $.Collections_collectionToString(receiver);
},
 iterator$0: function(receiver) {
  return $.ListIterator$(receiver);
},
 get$hashCode: function(receiver) {
  return $.Primitives_objectHashCode(receiver);
},
 get$length: function(receiver) {
  return receiver.length;
},
 set$length: function(receiver, newLength) {
  if (!(typeof newLength === 'number' && Math.floor(newLength) === newLength))
    throw $.$$throw($.ArgumentError$(newLength));
  if (newLength < 0)
    throw $.$$throw($.RangeError$value(newLength));
  $.checkGrowable(receiver, "set length");
  receiver.length = newLength;
},
 is$List: function() { return true; },
 is$Collection: function() { return true; }
};

$$.JSNumber = {"":"Object;",
 get$isNaN: function(receiver) {
  return isNaN(receiver);
},
 ceil$0: function(receiver) {
  return Math.ceil(receiver);
},
 floor$0: function(receiver) {
  return Math.floor(receiver);
},
 truncate$0: function(receiver) {
  return receiver < 0 ? this.ceil$0(receiver) : this.floor$0(receiver);
},
 toRadixString$1: function(receiver, radix) {
  $.checkNum(radix);
  if (radix < 2 || radix > 36)
    throw $.$$throw($.ArgumentError$(radix));
  return receiver.toString(radix);
},
 toString$0: function(receiver) {
  if (receiver === 0 && (1 / receiver) < 0)
    return "-0.0";
  else
    return String(receiver);
},
 get$hashCode: function(receiver) {
  return receiver & 536870911;
}
};

$$.JSInt = {"":"JSNumber;"
};

$$.JSDouble = {"":"JSNumber;"
};

$$.JSString = {"":"Object;",
 charCodeAt$1: function(receiver, index) {
  if (!(typeof index === 'number'))
    throw $.$$throw($.ArgumentError$(index));
  if (index < 0)
    throw $.$$throw($.RangeError$value(index));
  if (index >= receiver.length)
    throw $.$$throw($.RangeError$value(index));
  return receiver.charCodeAt(index);
},
 allMatches$1: function(receiver, str) {
  $.checkString(str);
  return $.allMatchesInStringUnchecked(receiver, str);
},
 endsWith$1: function(receiver, other) {
  var otherLength, t1;
  $.checkString(other);
  otherLength = other.length;
  t1 = receiver.length;
  if (otherLength > t1)
    return false;
  return other === this.substring$1(receiver, t1 - otherLength);
},
 replaceAll$2: function(receiver, from, to) {
  $.checkString(to);
  return $.stringReplaceAllUnchecked(receiver, from, to);
},
 split$1: function(receiver, pattern) {
  $.checkNull(pattern);
  return receiver.split(pattern);
},
 substring$2: function(receiver, startIndex, endIndex) {
  $.checkNum(startIndex);
  if (endIndex == null)
    endIndex = receiver.length;
  $.checkNum(endIndex);
  if ($.ltB(startIndex, 0))
    throw $.$$throw($.RangeError$value(startIndex));
  if ($.gtB(startIndex, endIndex))
    throw $.$$throw($.RangeError$value(startIndex));
  if ($.gtB(endIndex, receiver.length))
    throw $.$$throw($.RangeError$value(endIndex));
  return receiver.substring(startIndex, endIndex);
},
 substring$1: function($receiver, startIndex) {
  return this.substring$2($receiver, startIndex, null);
},
 toLowerCase$0: function(receiver) {
  return receiver.toLowerCase();
},
 trim$0: function(receiver) {
  return receiver.trim();
},
 indexOf$2: function(receiver, other, start) {
  $.checkNull(other);
  if (!(typeof start === 'number' && Math.floor(start) === start))
    throw $.$$throw($.ArgumentError$(start));
  if (!(typeof other === 'string'))
    throw $.$$throw($.ArgumentError$(other));
  if (start < 0)
    return -1;
  return receiver.indexOf(other, start);
},
 indexOf$1: function($receiver, other) {
  return this.indexOf$2($receiver, other, 0);
},
 contains$2: function(receiver, other, startIndex) {
  $.checkNull(other);
  return $.stringContainsUnchecked(receiver, other, startIndex);
},
 get$isEmpty: function(receiver) {
  return receiver.length === 0;
},
 toString$0: function(receiver) {
  return receiver;
},
 get$hashCode: function(receiver) {
  var hash, i, hash0, hash1;
  for (hash = 0, i = 0; i < receiver.length; ++i, hash = hash1) {
    hash0 = 536870911 & hash + receiver.charCodeAt(i);
    hash1 = 536870911 & hash0 + ((524287 & hash0) << 10 >>> 0);
    hash1 = hash1 ^ (hash1 >> 6);
  }
  hash0 = 536870911 & hash + ((67108863 & hash) << 3 >>> 0);
  hash0 = hash0 ^ (hash0 >> 11);
  return 536870911 & hash0 + ((16383 & hash0) << 15 >>> 0);
},
 get$length: function(receiver) {
  return receiver.length;
},
 is$String: true
};

$$.Todo = {"":"Object;id,title=,completed=",
 toJson$0: function() {
  return $.makeLiteralMap(["id", this.id, "title", this.title, "completed", this.completed]);
},
 Todo$fromJson$1: function(json) {
  this.id = $.index(json, "id");
  this.title = $.index(json, "title");
  this.completed = $.index(json, "completed");
}
};

$$.TodoWidget = {"":"Object;todoApp>,todo>,element>,toggleElement",
 createElement$0: function() {
  var t1, t2, contentElement, editElement, t3, t4, t5;
  t1 = this.todo;
  t2 = "\t\t\t<li " + (t1.completed === true ? "class=\"completed\"" : "") + ">\n\t\t\t<div class='view'>\n\t\t\t<input class='toggle' type='checkbox' ";
  this.element = $.Element_Element$html(t2 + (t1.completed === true ? "checked" : "") + ">\n\t\t\t<label class='todo-content'>" + $.S($.htmlEscape(t1.title)) + "</label>\n\t\t\t<button class='destroy'></button>\n\t\t\t</div>\n\t\t\t<input class='edit' value='" + $.S($.htmlEscape(t1.title)) + "'>\n\t\t\t</li>\n\t\t");
  contentElement = this.element.query$1(".todo-content");
  editElement = this.element.query$1(".edit");
  this.toggleElement = this.element.query$1(".toggle");
  t3 = this.toggleElement.get$on().get$click();
  $.getInterceptor$JSArray(t3).add$1(t3, new $.TodoWidget_createElement_anon(this));
  t3 = contentElement.get$on().get$doubleClick();
  $.getInterceptor$JSArray(t3).add$1(t3, new $.TodoWidget_createElement_anon0(editElement, this));
  t3 = new $.TodoWidget_createElement_removeTodo(this);
  t4 = this.element.query$1(".destroy").get$on().get$click();
  $.getInterceptor$JSArray(t4).add$1(t4, new $.TodoWidget_createElement_anon1(t3, this));
  t3 = new $.TodoWidget_createElement_doneEditing(contentElement, t3, editElement, this);
  t4 = editElement.get$on();
  t5 = t4.get$keyPress();
  $.getInterceptor$JSArray(t5).add$1(t5, new $.TodoWidget_createElement_anon2(t3));
  t4 = t4.get$blur();
  $.getInterceptor$JSArray(t4).add$1(t4, t3);
  return this.element;
},
 set$visible: function(visible) {
  var t1 = visible === true ? "block" : "none";
  this.element.get$style().set$display(t1);
},
 toggle$0: function() {
  var t1, t2, t3;
  t1 = this.todo;
  t1.completed = t1.completed !== true;
  t2 = t1.completed;
  this.toggleElement.set$checked(t2);
  t2 = t1.completed === true;
  t3 = this.element;
  if (t2) {
    t1 = t3.get$classes();
    $.getInterceptor$JSArray(t1).add$1(t1, "completed");
  } else
    t3.get$classes().remove$1("completed");
}
};

$$.TodoApp = {"":"Object;todoWidgets=,todoListElement,mainElement,checkAllCheckboxElement>,footerElement,countElement,clearCompletedElement,showAllElement,showActiveElement,showCompletedElement",
 initLocalStorage$0: function(exception) {
  var jsonList, todos, t1, todo;
  jsonList = $.index($.window().get$localStorage(), "todos-vanilladart");
  if (!(jsonList == null))
    try {
      todos = $.JSON_parse(jsonList);
      for (t1 = todos, t1 = $.getInterceptor$JSArray(t1).iterator$0(t1); t1.get$hasNext() === true;) {
        todo = t1.next$0();
        this.addTodo$1($.Todo$fromJson(todo));
      }
    } catch (exception) {
      $.unwrapException(exception);
      $.window().get$console().log$1("Could not load todos form local storage.");
    }

},
 initElementEventListeners$0: function() {
  var newTodoElement, t1;
  newTodoElement = $.query("#new-todo");
  t1 = newTodoElement.get$on().get$keyPress();
  $.getInterceptor$JSArray(t1).add$1(t1, new $.TodoApp_initElementEventListeners_anon(newTodoElement, this));
  t1 = this.checkAllCheckboxElement.get$on().get$click();
  $.getInterceptor$JSArray(t1).add$1(t1, new $.TodoApp_initElementEventListeners_anon0(this));
  t1 = this.clearCompletedElement.get$on().get$click();
  $.getInterceptor$JSArray(t1).add$1(t1, new $.TodoApp_initElementEventListeners_anon1(this));
},
 addTodo$1: function(todo) {
  var todoWidget, t1;
  todoWidget = $.TodoWidget$(this, todo);
  t1 = this.todoWidgets;
  $.getInterceptor$JSArray(t1).add$1(t1, todoWidget);
  t1 = this.todoListElement.get$nodes();
  $.getInterceptor$JSArray(t1).add$1(t1, todoWidget.createElement$0());
},
 updateFooterDisplay$0: function() {
  var t1, display;
  t1 = this.todoWidgets;
  display = $.eqB($.getInterceptor$JSStringJSArray(t1).get$length(t1), 0) ? "none" : "block";
  this.checkAllCheckboxElement.get$style().set$display(display);
  this.mainElement.get$style().set$display(display);
  this.footerElement.get$style().set$display(display);
  this.updateCounts$0();
},
 updateCounts$0: function() {
  var t1, complete, t2, left, t3;
  for (t1 = this.todoWidgets, t1 = $.getInterceptor$JSArray(t1).iterator$0(t1), complete = 0; t1.get$hasNext() === true;)
    if (t1.next$0().get$todo().get$completed() === true)
      ++complete;
  t1 = this.todoWidgets;
  t2 = complete === $.getInterceptor$JSStringJSArray(t1).get$length(t1);
  this.checkAllCheckboxElement.set$checked(t2);
  t2 = this.todoWidgets;
  left = $.sub($.getInterceptor$JSStringJSArray(t2).get$length(t2), complete);
  t3 = "<strong>" + $.S(left) + "</strong> item";
  t1 = t3 + (!$.eqB(left, 1) ? "s" : "") + " left";
  this.countElement.set$innerHtml(t1);
  t1 = complete === 0;
  t2 = this.clearCompletedElement;
  if (t1)
    t2.get$style().set$display("none");
  else {
    t2.get$style().set$display("block");
    t2.set$text("Clear completed (" + $.S(complete) + ")");
  }
  this.updateFilter$0();
},
 removeTodo$1: function(todoWidget) {
  var t1 = this.todoWidgets;
  $.getInterceptor$JSArray(t1).removeAt$1(t1, $.getInterceptor$JSStringJSArray(t1).indexOf$1(t1, todoWidget));
},
 updateFilter$0: function() {
  switch ($.window().get$location().get$hash()) {
    case "#/active":
      this.showActive$0();
      break;
    case "#/completed":
      this.showCompleted$0();
      break;
    default:
      this.showAll$0();
      return;
  }
},
 showAll$0: function() {
  this.setSelectedFilter$1(this.showAllElement);
  for (var t1 = this.todoWidgets, t1 = $.getInterceptor$JSArray(t1).iterator$0(t1); t1.get$hasNext() === true;)
    t1.next$0().set$visible(true);
},
 showActive$0: function() {
  var t1, t2;
  this.setSelectedFilter$1(this.showActiveElement);
  for (t1 = this.todoWidgets, t1 = $.getInterceptor$JSArray(t1).iterator$0(t1); t1.get$hasNext() === true;) {
    t2 = t1.next$0();
    t2.set$visible(t2.get$todo().get$completed() !== true);
  }
},
 showCompleted$0: function() {
  var t1, t2;
  this.setSelectedFilter$1(this.showCompletedElement);
  for (t1 = this.todoWidgets, t1 = $.getInterceptor$JSArray(t1).iterator$0(t1); t1.get$hasNext() === true;) {
    t2 = t1.next$0();
    t2.set$visible(t2.get$todo().get$completed());
  }
},
 setSelectedFilter$1: function(e) {
  var t1;
  this.showAllElement.get$classes().remove$1("selected");
  this.showActiveElement.get$classes().remove$1("selected");
  this.showCompletedElement.get$classes().remove$1("selected");
  t1 = e.get$classes();
  $.getInterceptor$JSArray(t1).add$1(t1, "selected");
},
 save$0: function() {
  var todos, t1;
  todos = $.List_List(null);
  for (t1 = this.todoWidgets, t1 = $.getInterceptor$JSArray(t1).iterator$0(t1); t1.get$hasNext() === true;)
    todos.push(t1.next$0().get$todo());
  $.indexSet($.window().get$localStorage(), "todos-vanilladart", $.JSON_stringify(todos));
},
 TodoApp$0: function() {
  this.initLocalStorage$0();
  this.initElementEventListeners$0();
  var t1 = $.window().get$on().get$hashChange();
  $.getInterceptor$JSArray(t1).add$1(t1, new $.anon(this));
  this.updateFooterDisplay$0();
}
};

$$.BodyElementEvents = {"":"ElementEvents;_ptr",
 get$blur: function() {
  return this.operator$index$1("blur");
},
 get$focus: function() {
  return this.operator$index$1("focus");
},
 focus$0: function() {
  return this.get$focus().call$0();
},
 get$hashChange: function() {
  return this.operator$index$1("hashchange");
}
};

$$.Console = {"":"Object;",
 get$_isConsoleDefined: function() {
  return typeof console != 'undefined';
},
 group$1: function(arg) {
  return this.get$_isConsoleDefined() === true ? console.group(arg) : null;
},
 log$1: function(arg) {
  return this.get$_isConsoleDefined() === true ? console.log(arg) : null;
}
};

$$.DocumentEvents = {"":"ElementEvents;_ptr"
};

$$._FrozenCssClassSet = {"":"CssClassSet;",
 writeClasses$1: function(s) {
  throw $.$$throw($.UnsupportedError$("frozen class set cannot be modified"));
},
 readClasses$0: function() {
  return $.Set_Set();
}
};

$$._ChildrenElementList = {"":"Object;_liblib$_element>,_childElements",
 _toList$0: function() {
  var t1, t3, output, len, i, t2;
  t1 = this._childElements;
  if (typeof t1 !== 'string' && (typeof t1 !== 'object' || t1 === null || t1.constructor !== Array && !t1.is$JavaScriptIndexingBehavior()))
    return this._toList$0$bailout(1, t1);
  t3 = t1.length;
  output = $.List_List(t3);
  len = t1.length;
  i = 0;
  for (; i < len; ++i) {
    t2 = t1[i];
    if (i >= t3)
      throw $.ioore(i);
    output[i] = t2;
  }
  return output;
},
 _toList$0$bailout: function(state0, env0, env1, env2) {
  switch (state0) {
    case 1:
      t1 = env0;
      break;
    case 2:
      output = env2;
      len = env1;
      t1 = env0;
      break;
  }
  switch (state0) {
    case 0:
      t1 = this._childElements;
    case 1:
      state0 = 0;
      t3 = $.getInterceptor$JSStringJSArray(t1);
      output = $.List_List(t3.get$length(t1));
      len = t3.get$length(t1);
    case 2:
      var t1, t3, output, len, i, t2;
      state0 = 0;
      i = 0;
      for (; $.ltB(i, len); ++i) {
        t2 = $.index(t1, i);
        if (i >= output.length)
          throw $.ioore(i);
        output[i] = t2;
      }
      return output;
  }
},
 forEach$1: function(f) {
  var t1;
  for (t1 = this._childElements, t1 = $.getInterceptor$JSArray(t1).iterator$0(t1); t1.get$hasNext() === true;)
    f.call$1(t1.next$0());
},
 filter$1: function(f) {
  var output, t1, t2;
  output = [];
  t1 = new $._ChildrenElementList_filter_anon(output, f);
  for (t2 = this._childElements, t2 = $.getInterceptor$JSArray(t2).iterator$0(t2); t2.get$hasNext() === true;)
    t1.call$1(t2.next$0());
  return $._FrozenElementList$_wrap(output);
},
 get$isEmpty: function() {
  return this._liblib$_element.firstElementChild == null;
},
 get$length: function() {
  var t1 = this._childElements;
  return $.getInterceptor$JSStringJSArray(t1).get$length(t1);
},
 operator$index$1: function(index) {
  return $.index(this._childElements, index);
},
 operator$indexSet$2: function(index, value) {
  this._liblib$_element.$$dom_replaceChild$2(value, $.index(this._childElements, index));
},
 set$length: function(newLength) {
  throw $.$$throw($.UnsupportedError$(""));
},
 add$1: function(value) {
  this._liblib$_element.$$dom_appendChild$1(value);
  return value;
},
 addLast$1: function(value) {
  this._liblib$_element.$$dom_appendChild$1(value);
  return value;
},
 iterator$0: function() {
  var t1 = this._toList$0();
  return $.getInterceptor$JSArray(t1).iterator$0(t1);
},
 addAll$1: function(collection) {
  var t1, t2;
  for (t1 = $.getInterceptor$JSArray(collection).iterator$0(collection), t2 = this._liblib$_element; t1.get$hasNext() === true;)
    t2.$$dom_appendChild$1(t1.next$0());
},
 getRange$2: function(start, rangeLength) {
  return $._FrozenElementList$_wrap($.Lists_getRange(this, start, rangeLength, []));
},
 indexOf$2: function(element, start) {
  return $.Lists_indexOf(this, element, start, $.getInterceptor$JSStringJSArray(this).get$length(this));
},
 indexOf$1: function(element) {
  return this.indexOf$2(element, 0);
},
 clear$0: function() {
  this._liblib$_element.textContent = "";
},
 removeAt$1: function(index) {
  var result = this.operator$index$1(index);
  if (!(result == null))
    this._liblib$_element.$$dom_removeChild$1(result);
  return result;
},
 removeLast$0: function() {
  var result = $.getInterceptor$JSArray(this).get$last(this);
  if (!(result == null))
    this._liblib$_element.$$dom_removeChild$1(result);
  return result;
},
 get$last: function() {
  return this._liblib$_element.lastElementChild;
},
 is$List: function() { return true; },
 is$Collection: function() { return true; }
};

$$._FrozenElementList = {"":"Object;_nodeList",
 forEach$1: function(f) {
  var t1;
  for (t1 = this.iterator$0(); t1.get$hasNext() === true;)
    f.call$1(t1.next$0());
},
 filter$1: function(f) {
  var out, t1, t2;
  out = [];
  for (t1 = this.iterator$0(); t1.get$hasNext() === true;) {
    t2 = t1.next$0();
    if (f.call$1(t2) === true)
      out.push(t2);
  }
  return out;
},
 get$isEmpty: function() {
  var t1 = this._nodeList;
  return $.getInterceptor$JSStringJSArray(t1).get$isEmpty(t1);
},
 get$length: function() {
  var t1 = this._nodeList;
  return $.getInterceptor$JSStringJSArray(t1).get$length(t1);
},
 operator$index$1: function(index) {
  return $.index(this._nodeList, index);
},
 operator$indexSet$2: function(index, value) {
  throw $.$$throw($.UnsupportedError$(""));
},
 set$length: function(newLength) {
  var t1 = this._nodeList;
  $.getInterceptor$JSArray(t1).set$length(t1, newLength);
},
 add$1: function(value) {
  throw $.$$throw($.UnsupportedError$(""));
},
 addLast$1: function(value) {
  throw $.$$throw($.UnsupportedError$(""));
},
 iterator$0: function() {
  return $._FrozenElementListIterator$(this);
},
 addAll$1: function(collection) {
  throw $.$$throw($.UnsupportedError$(""));
},
 getRange$2: function(start, rangeLength) {
  var t1 = this._nodeList;
  return $._FrozenElementList$_wrap($.getInterceptor$JSArray(t1).getRange$2(t1, start, rangeLength));
},
 indexOf$2: function(element, start) {
  var t1 = this._nodeList;
  return $.getInterceptor$JSStringJSArray(t1).indexOf$2(t1, element, start);
},
 indexOf$1: function(element) {
  return this.indexOf$2(element, 0);
},
 clear$0: function() {
  throw $.$$throw($.UnsupportedError$(""));
},
 removeAt$1: function(index) {
  throw $.$$throw($.UnsupportedError$(""));
},
 removeLast$0: function() {
  throw $.$$throw($.UnsupportedError$(""));
},
 get$last: function() {
  var t1 = this._nodeList;
  return $.getInterceptor$JSArray(t1).get$last(t1);
},
 is$List: function() { return true; },
 is$Collection: function() { return true; }
};

$$._FrozenElementListIterator = {"":"Object;_liblib$_list,_index",
 next$0: function() {
  var t1, t2;
  if (this.get$hasNext() !== true)
    throw $.$$throw($.StateError$("No more elements"));
  t1 = this._liblib$_list;
  t2 = this._index;
  if (typeof t2 !== 'number')
    return this.next$0$bailout2(1, t2, t1);
  this._index = t2 + 1;
  return t1.operator$index$1(t2);
},
 next$0$bailout2: function(state0, t2, t1) {
  this._index = $.add(t2, 1);
  return t1.operator$index$1(t2);
},
 get$hasNext: function() {
  var t1, t2;
  t1 = this._index;
  t2 = this._liblib$_list;
  return $.lt(t1, $.getInterceptor$JSStringJSArray(t2).get$length(t2));
}
};

$$._ElementCssClassSet = {"":"CssClassSet;_liblib$_element>",
 readClasses$0: function() {
  var s, classname, t1, t2, t3, trimmed;
  s = $.Set_Set();
  classname = this._liblib$_element.className;
  for (t1 = $.getInterceptor$JSString(classname).split$1(classname, " "), t1 = $.getInterceptor$JSArray(t1).iterator$0(t1), t2 = $.getInterceptor$JSArray(s); t1.get$hasNext() === true;) {
    t3 = t1.next$0();
    trimmed = $.getInterceptor$JSString(t3).trim$0(t3);
    if ($.getInterceptor$JSStringJSArray(trimmed).get$isEmpty(trimmed) !== true)
      t2.add$1(s, trimmed);
  }
  return s;
},
 writeClasses$1: function(s) {
  var t1 = $.Strings_join($.List_List$from(s), " ");
  this._liblib$_element.className = t1;
}
};

$$.ElementEvents = {"":"Events;_ptr",
 get$blur: function() {
  return this.operator$index$1("blur");
},
 get$click: function() {
  return this.operator$index$1("click");
},
 get$doubleClick: function() {
  return this.operator$index$1("dblclick");
},
 get$focus: function() {
  return this.operator$index$1("focus");
},
 focus$0: function() {
  return this.get$focus().call$0();
},
 get$keyPress: function() {
  return this.operator$index$1("keypress");
}
};

$$.Events = {"":"Object;_ptr",
 operator$index$1: function(type) {
  return $.EventListenerList$(this._ptr, type);
}
};

$$.EventListenerList = {"":"Object;_ptr,_type",
 add$2: function(listener, useCapture) {
  this._ptr.$$dom_addEventListener$3(this._type, listener, useCapture);
  return this;
},
 add$1: function(listener) {
  return this.add$2(listener, false);
},
 remove$2: function(listener, useCapture) {
  this._ptr.$$dom_removeEventListener$3(this._type, listener, useCapture);
  return this;
},
 remove$1: function(listener) {
  return this.remove$2(listener, false);
}
};

$$.FrameSetElementEvents = {"":"ElementEvents;_ptr",
 get$blur: function() {
  return this.operator$index$1("blur");
},
 get$focus: function() {
  return this.operator$index$1("focus");
},
 focus$0: function() {
  return this.get$focus().call$0();
},
 get$hashChange: function() {
  return this.operator$index$1("hashchange");
}
};

$$.InputElementEvents = {"":"ElementEvents;_ptr"
};

$$.LocalWindowEvents = {"":"Events;_ptr",
 get$blur: function() {
  return this.operator$index$1("blur");
},
 get$click: function() {
  return this.operator$index$1("click");
},
 get$doubleClick: function() {
  return this.operator$index$1("dblclick");
},
 get$focus: function() {
  return this.operator$index$1("focus");
},
 focus$0: function() {
  return this.get$focus().call$0();
},
 get$hashChange: function() {
  return this.operator$index$1("hashchange");
},
 get$keyPress: function() {
  return this.operator$index$1("keypress");
}
};

$$.MediaElementEvents = {"":"ElementEvents;_ptr"
};

$$._ChildNodeListLazy = {"":"Object;_this",
 get$last: function() {
  return this._this.lastChild;
},
 add$1: function(value) {
  this._this.$$dom_appendChild$1(value);
},
 addLast$1: function(value) {
  this._this.$$dom_appendChild$1(value);
},
 addAll$1: function(collection) {
  var t1, t2;
  for (t1 = $.getInterceptor$JSArray(collection).iterator$0(collection), t2 = this._this; t1.get$hasNext() === true;)
    t2.$$dom_appendChild$1(t1.next$0());
},
 removeLast$0: function() {
  var result = this.get$last();
  if (!(result == null))
    this._this.$$dom_removeChild$1(result);
  return result;
},
 removeAt$1: function(index) {
  var result = this.operator$index$1(index);
  if (!(result == null))
    this._this.$$dom_removeChild$1(result);
  return result;
},
 clear$0: function() {
  this._this.textContent = "";
},
 operator$indexSet$2: function(index, value) {
  this._this.$$dom_replaceChild$2(value, this.operator$index$1(index));
},
 iterator$0: function() {
  var t1 = this._this.childNodes;
  return $.getInterceptor$JSArray(t1).iterator$0(t1);
},
 forEach$1: function(f) {
  return $.Collections_forEach(this, f);
},
 filter$1: function(f) {
  return $.Collections_filter(this, [], f);
},
 get$isEmpty: function() {
  return $.eq($.getInterceptor$JSStringJSArray(this).get$length(this), 0);
},
 indexOf$2: function(element, start) {
  return $.Lists_indexOf(this, element, start, $.getInterceptor$JSStringJSArray(this).get$length(this));
},
 indexOf$1: function(element) {
  return this.indexOf$2(element, 0);
},
 getRange$2: function(start, rangeLength) {
  return $.Lists_getRange(this, start, rangeLength, []);
},
 get$length: function() {
  var t1 = this._this.childNodes;
  return $.getInterceptor$JSStringJSArray(t1).get$length(t1);
},
 set$length: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot set length on immutable List."));
},
 operator$index$1: function(index) {
  return $.index(this._this.childNodes, index);
},
 is$List: function() { return true; },
 is$Collection: function() { return true; }
};

$$._AttributeMap = {"":"Object;_liblib$_element>",
 clear$0: function() {
  for (var t1 = this.get$keys(), t1 = $.getInterceptor$JSArray(t1).iterator$0(t1); t1.get$hasNext() === true;)
    this.remove$1(t1.next$0());
},
 forEach$1: function(f) {
  var t1, t2;
  for (t1 = this.get$keys(), t1 = $.getInterceptor$JSArray(t1).iterator$0(t1); t1.get$hasNext() === true;) {
    t2 = t1.next$0();
    f.call$2(t2, this.operator$index$1(t2));
  }
},
 get$keys: function() {
  var attributes, keys, len, i;
  attributes = this._liblib$_element.attributes;
  if (typeof attributes !== 'string' && (typeof attributes !== 'object' || attributes === null || attributes.constructor !== Array && !attributes.is$JavaScriptIndexingBehavior()))
    return this.get$keys$bailout(1, attributes);
  keys = $.List_List(null);
  len = attributes.length;
  i = 0;
  for (; i < len; ++i) {
    if (i >= attributes.length)
      throw $.ioore(i);
    if (this._matches$1(attributes[i]) === true) {
      if (i >= attributes.length)
        throw $.ioore(i);
      keys.push(attributes[i].get$$$dom_localName());
    }
  }
  return keys;
},
 get$keys$bailout: function(state0, env0, env1, env2) {
  switch (state0) {
    case 1:
      attributes = env0;
      break;
    case 2:
      keys = env2;
      len = env1;
      attributes = env0;
      break;
  }
  switch (state0) {
    case 0:
      attributes = this._liblib$_element.attributes;
    case 1:
      state0 = 0;
      keys = $.List_List(null);
      len = $.getInterceptor$JSStringJSArray(attributes).get$length(attributes);
    case 2:
      var attributes, keys, len, i;
      state0 = 0;
      i = 0;
      for (; $.ltB(i, len); ++i)
        if (this._matches$1($.index(attributes, i)) === true)
          keys.push($.index(attributes, i).get$$$dom_localName());
      return keys;
  }
},
 get$isEmpty: function() {
  return $.eq(this.get$length(), 0);
},
 is$Map: function() { return true; }
};

$$._ElementAttributeMap = {"":"_AttributeMap;_liblib$_element",
 containsKey$1: function(key) {
  return this._liblib$_element.$$dom_hasAttribute$1(key);
},
 operator$index$1: function(key) {
  return this._liblib$_element.$$dom_getAttribute$1(key);
},
 operator$indexSet$2: function(key, value) {
  this._liblib$_element.$$dom_setAttribute$2(key, $.S(value));
},
 remove$1: function(key) {
  var t1, value;
  t1 = this._liblib$_element;
  value = t1.$$dom_getAttribute$1(key);
  t1.$$dom_removeAttribute$1(key);
  return value;
},
 get$length: function() {
  var t1 = this.get$keys();
  return $.getInterceptor$JSStringJSArray(t1).get$length(t1);
},
 _matches$1: function(node) {
  return node.get$$$dom_namespaceUri() == null;
}
};

$$.CssClassSet = {"":"Object;",
 toString$0: function() {
  return $.Strings_join($.List_List$from(this.readClasses$0()), " ");
},
 iterator$0: function() {
  var t1 = this.readClasses$0();
  return $.getInterceptor$JSArray(t1).iterator$0(t1);
},
 forEach$1: function(f) {
  var t1 = this.readClasses$0();
  $.getInterceptor$JSArray(t1).forEach$1(t1, f);
},
 filter$1: function(f) {
  var t1 = this.readClasses$0();
  return $.getInterceptor$JSArray(t1).filter$1(t1, f);
},
 get$isEmpty: function() {
  var t1 = this.readClasses$0();
  return $.getInterceptor$JSStringJSArray(t1).get$isEmpty(t1);
},
 get$length: function() {
  var t1 = this.readClasses$0();
  return $.getInterceptor$JSStringJSArray(t1).get$length(t1);
},
 add$1: function(value) {
  this._modify$1(new $.CssClassSet_add_anon(value));
},
 remove$1: function(value) {
  var s, result;
  s = this.readClasses$0();
  result = s.remove$1(value);
  this.writeClasses$1(s);
  return result;
},
 addAll$1: function(collection) {
  this._modify$1(new $.CssClassSet_addAll_anon(collection));
},
 clear$0: function() {
  this._modify$1(new $.CssClassSet_clear_anon());
},
 _modify$1: function(f) {
  var s = this.readClasses$0();
  f.call$1(s);
  this.writeClasses$1(s);
},
 is$Collection: function() { return true; }
};

$$._LocationWrapper = {"":"Object;_ptr",
 get$hash: function() {
  return $._LocationWrapper__get(this._ptr, "hash");
},
 toString$0: function() {
  return this._ptr.toString();
},
 is$Location: function() { return true; }
};

$$.FixedSizeListIterator = {"":"_VariableSizeListIterator;_liblib$_length,_array,_pos",
 get$hasNext: function() {
  return $.gt(this._liblib$_length, this._pos);
}
};

$$._VariableSizeListIterator = {"":"Object;",
 get$hasNext: function() {
  var t1 = this._array;
  return $.gt($.getInterceptor$JSStringJSArray(t1).get$length(t1), this._pos);
},
 next$0: function() {
  var t1, t3;
  if (this.get$hasNext() !== true)
    throw $.$$throw($.StateError$("No more elements"));
  t1 = this._array;
  if (typeof t1 !== 'string' && (typeof t1 !== 'object' || t1 === null || t1.constructor !== Array && !t1.is$JavaScriptIndexingBehavior()))
    return this.next$0$bailout(1, t1);
  t3 = this._pos;
  if (typeof t3 !== 'number')
    return this.next$0$bailout(2, t3, t1);
  this._pos = t3 + 1;
  if (t3 !== (t3 | 0))
    throw $.iae(t3);
  if (t3 < 0 || t3 >= t1.length)
    throw $.ioore(t3);
  return t1[t3];
},
 next$0$bailout: function(state0, env0, env1) {
  switch (state0) {
    case 1:
      t1 = env0;
      break;
    case 2:
      t1 = env1;
      t3 = env0;
      break;
  }
  switch (state0) {
    case 0:
      if (this.get$hasNext() !== true)
        throw $.$$throw($.StateError$("No more elements"));
      t1 = this._array;
    case 1:
      state0 = 0;
      t3 = this._pos;
    case 2:
      var t1, t3;
      state0 = 0;
      this._pos = $.add(t3, 1);
      return $.index(t1, t3);
  }
}
};

$$.FilteredElementList = {"":"Object;_node,_childNodes",
 get$_filtered: function() {
  var t1 = this._childNodes;
  return $.List_List$from($.getInterceptor$JSArray(t1).filter$1(t1, new $.FilteredElementList__filtered_anon()));
},
 forEach$1: function(f) {
  var t1 = this.get$_filtered();
  $.getInterceptor$JSArray(t1).forEach$1(t1, f);
},
 operator$indexSet$2: function(index, value) {
  this.operator$index$1(index).replaceWith$1(value);
},
 set$length: function(newLength) {
  var len = $.getInterceptor$JSStringJSArray(this).get$length(this);
  if ($.geB(newLength, len))
    return;
  else if ($.ltB(newLength, 0))
    throw $.$$throw($.ArgumentError$("Invalid list length"));
  this.removeRange$2(newLength, $.sub(len, newLength));
},
 add$1: function(value) {
  var t1 = this._childNodes;
  $.getInterceptor$JSArray(t1).add$1(t1, value);
},
 get$add: function() {
  return new $.BoundClosure0(this, 'add$1');
},
 addAll$1: function(collection) {
  $.getInterceptor$JSArray(collection).forEach$1(collection, this.get$add());
},
 addLast$1: function(value) {
  var t1 = this._childNodes;
  $.getInterceptor$JSArray(t1).add$1(t1, value);
},
 removeRange$2: function(start, rangeLength) {
  var t1 = this.get$_filtered();
  t1 = $.getInterceptor$JSArray(t1).getRange$2(t1, start, rangeLength);
  $.getInterceptor$JSArray(t1).forEach$1(t1, new $.FilteredElementList_removeRange_anon());
},
 clear$0: function() {
  var t1 = this._childNodes;
  $.getInterceptor$JSArray(t1).clear$0(t1);
},
 removeLast$0: function() {
  var result = $.getInterceptor$JSArray(this).get$last(this);
  if (!(result == null))
    result.remove$0();
  return result;
},
 removeAt$1: function(index) {
  var result = this.operator$index$1(index);
  result.remove$0();
  return result;
},
 filter$1: function(f) {
  var t1 = this.get$_filtered();
  return $.getInterceptor$JSArray(t1).filter$1(t1, f);
},
 get$isEmpty: function() {
  var t1 = this.get$_filtered();
  return $.getInterceptor$JSStringJSArray(t1).get$isEmpty(t1);
},
 get$length: function() {
  var t1 = this.get$_filtered();
  return $.getInterceptor$JSStringJSArray(t1).get$length(t1);
},
 operator$index$1: function(index) {
  return $.index(this.get$_filtered(), index);
},
 iterator$0: function() {
  var t1 = this.get$_filtered();
  return $.getInterceptor$JSArray(t1).iterator$0(t1);
},
 getRange$2: function(start, rangeLength) {
  var t1 = this.get$_filtered();
  return $.getInterceptor$JSArray(t1).getRange$2(t1, start, rangeLength);
},
 indexOf$2: function(element, start) {
  var t1 = this.get$_filtered();
  return $.getInterceptor$JSStringJSArray(t1).indexOf$2(t1, element, start);
},
 indexOf$1: function(element) {
  return this.indexOf$2(element, 0);
},
 get$last: function() {
  var t1 = this.get$_filtered();
  return $.getInterceptor$JSArray(t1).get$last(t1);
},
 is$List: function() { return true; },
 is$Collection: function() { return true; }
};

$$._Random = {"":"Object;",
 nextInt$1: function(max) {
  if (max < 0)
    throw $.$$throw($.ArgumentError$("negative max: " + $.S(max)));
  if (max > 4294967295)
    max = 4294967295;
  return (Math.random() * max) >>> 0;
}
};

$$.JsonUnsupportedObjectError = {"":"Object;unsupportedObject,cause",
 toString$0: function() {
  if (!(this.cause == null))
    return "Calling toJson method on object failed.";
  else
    return "Object toJson method returns non-serializable value.";
}
};

$$._JsonParser = {"":"Object;json,length>,position",
 parseToplevel$0: function() {
  var result = this.parseValue$0();
  if (!(this.token$0() == null))
    this.error$1("Junk at the end of JSON input");
  return result;
},
 parseValue$0: function() {
  var token = this.token$0();
  if (token == null)
    this.error$1("Nothing to parse");
  switch (token) {
    case 34:
      return this.parseString$0();
    case 45:
      return this.parseNumber$0();
    case 110:
      return this.expectKeyword$2("null", null);
    case 102:
      return this.expectKeyword$2("false", false);
    case 116:
      return this.expectKeyword$2("true", true);
    case 123:
      return this.parseObject$0();
    case 91:
      return this.parseList$0();
    default:
      this.error$1("Unexpected token");
  }
},
 expectKeyword$2: function(word, value) {
  var i;
  for (i = 0; i < word.length; ++i) {
    if (!$.eqB(this.char$0(), $.CONSTANT.charCodeAt$1(word, i)))
      this.error$1("Expected keyword '" + word + "'");
    this.position = $.add(this.position, 1);
  }
  return value;
},
 parseObject$0: function() {
  var object, key, t1;
  object = $.makeLiteralMap([]);
  if (typeof object !== 'object' || object === null || (object.constructor !== Array || !!object.immutable$list) && !object.is$JavaScriptIndexingBehavior())
    return this.parseObject$0$bailout(1, object);
  this.position = $.add(this.position, 1);
  if (!$.eqB(this.token$0(), 125)) {
    for (; true;) {
      key = this.parseString$0();
      if (!$.eqB(this.token$0(), 58))
        this.error$1("Expected ':' when parsing object");
      this.position = $.add(this.position, 1);
      t1 = this.parseValue$0();
      if (key !== (key | 0))
        throw $.iae(key);
      if (key < 0 || key >= object.length)
        throw $.ioore(key);
      object[key] = t1;
      if (!$.eqB(this.token$0(), 44))
        break;
      this.position = $.add(this.position, 1);
    }
    if (!$.eqB(this.token$0(), 125))
      this.error$1("Expected '}' at end of object");
  }
  this.position = $.add(this.position, 1);
  return object;
},
 parseObject$0$bailout: function(state0, object) {
  var key;
  this.position = $.add(this.position, 1);
  if (!$.eqB(this.token$0(), 125)) {
    for (; true;) {
      key = this.parseString$0();
      if (!$.eqB(this.token$0(), 58))
        this.error$1("Expected ':' when parsing object");
      this.position = $.add(this.position, 1);
      $.indexSet(object, key, this.parseValue$0());
      if (!$.eqB(this.token$0(), 44))
        break;
      this.position = $.add(this.position, 1);
    }
    if (!$.eqB(this.token$0(), 125))
      this.error$1("Expected '}' at end of object");
  }
  this.position = $.add(this.position, 1);
  return object;
},
 parseList$0: function() {
  var list = [];
  this.position = $.add(this.position, 1);
  if (!$.eqB(this.token$0(), 93)) {
    for (; true;) {
      list.push(this.parseValue$0());
      if (!$.eqB(this.token$0(), 44))
        break;
      this.position = $.add(this.position, 1);
    }
    if (!$.eqB(this.token$0(), 93))
      this.error$1("Expected ']' at end of list");
  }
  this.position = $.add(this.position, 1);
  return list;
},
 parseString$0: function(exception) {
  var charCodes, t1, t2, t3, c, codeString;
  if (!$.eqB(this.token$0(), 34))
    this.error$1("Expected string literal");
  this.position = $.add(this.position, 1);
  charCodes = $.List_List(null);
  for (t1 = this.length, t2 = this.json, t3 = $.getInterceptor$JSString(t2); true;) {
    c = this.char$0();
    if ($.eqB(c, 34)) {
      this.position = $.add(this.position, 1);
      break;
    }
    if ($.eqB(c, 92)) {
      this.position = $.add(this.position, 1);
      if ($.eqB(this.position, t1))
        this.error$1("\\ at the end of input");
      switch (this.char$0()) {
        case 34:
          c = 34;
          break;
        case 92:
          c = 92;
          break;
        case 47:
          c = 47;
          break;
        case 98:
          c = 8;
          break;
        case 110:
          c = 10;
          break;
        case 114:
          c = 13;
          break;
        case 102:
          c = 12;
          break;
        case 116:
          c = 9;
          break;
        case 117:
          if ($.gtB($.add(this.position, 5), t1))
            this.error$1("Invalid unicode esacape sequence");
          codeString = t3.substring$2(t2, $.add(this.position, 1), $.add(this.position, 5));
          try {
            c = $.int_parse("0x" + $.S(codeString));
          } catch (exception) {
            $.unwrapException(exception);
            this.error$1("Invalid unicode esacape sequence");
          }

          this.position = $.add(this.position, 4);
          break;
        default:
          this.error$1("Invalid esacape sequence in string literal");
      }
    }
    charCodes.push(c);
    this.position = $.add(this.position, 1);
  }
  return $.String_String$fromCharCodes(charCodes);
},
 parseNumber$0: function() {
  var startPos, char$, isInt, t1, number;
  if (!$.eqB(this.token$0(), 45))
    this.error$1("Expected number literal");
  startPos = this.position;
  char$ = this.char$0();
  if (char$ === 45)
    char$ = this.nextChar$0();
  if (char$ === 48)
    char$ = this.nextChar$0();
  else if ($.geB(char$, 48) && $.leB(char$, 57)) {
    char$ = this.nextChar$0();
    if (typeof char$ !== 'number')
      return this.parseNumber$0$bailout(1, startPos, char$);
    while (true) {
      if (!($.geB(char$, 48) && $.leB(char$, 57)))
        break;
      char$ = this.nextChar$0();
    }
  } else
    this.error$1("Expected digit when parsing number");
  if (char$ === 46) {
    char$ = this.nextChar$0();
    if ($.geB(char$, 48) && $.leB(char$, 57)) {
      char$ = this.nextChar$0();
      if (typeof char$ !== 'number')
        return this.parseNumber$0$bailout(2, startPos, char$);
      while (true) {
        if (!($.geB(char$, 48) && $.leB(char$, 57)))
          break;
        char$ = this.nextChar$0();
      }
      isInt = false;
    } else {
      this.error$1("Expected digit following comma");
      isInt = true;
    }
  } else
    isInt = true;
  if (char$ === 101 || char$ === 69) {
    char$ = this.nextChar$0();
    if (char$ === 45 || char$ === 43)
      char$ = this.nextChar$0();
    if ($.geB(char$, 48) && $.leB(char$, 57)) {
      char$ = this.nextChar$0();
      if (typeof char$ !== 'number')
        return this.parseNumber$0$bailout(3, char$, startPos);
      while (true) {
        if (!($.geB(char$, 48) && $.leB(char$, 57)))
          break;
        char$ = this.nextChar$0();
      }
      isInt = false;
    } else
      this.error$1("Expected digit following 'e' or 'E'");
  }
  t1 = this.json;
  number = $.getInterceptor$JSString(t1).substring$2(t1, startPos, this.position);
  if (isInt)
    return $.int_parse(number);
  else
    return $.double_parse(number);
},
 parseNumber$0$bailout: function(state0, env0, env1) {
  switch (state0) {
    case 1:
      char$ = env1;
      startPos = env0;
      break;
    case 2:
      char$ = env1;
      startPos = env0;
      break;
    case 3:
      startPos = env1;
      char$ = env0;
      break;
  }
  switch (state0) {
    case 0:
      if (!$.eqB(this.token$0(), 45))
        this.error$1("Expected number literal");
      startPos = this.position;
      char$ = this.char$0();
      if (char$ === 45)
        char$ = this.nextChar$0();
    case 1:
      if (state0 === 0 && char$ === 48)
        char$ = this.nextChar$0();
      else
        switch (state0) {
          case 0:
          case 1:
            if (state0 === 1 || state0 === 0 && $.geB(char$, 48) && $.leB(char$, 57))
              switch (state0) {
                case 0:
                  char$ = this.nextChar$0();
                case 1:
                  state0 = 0;
                  while (true) {
                    if (!($.geB(char$, 48) && $.leB(char$, 57)))
                      break;
                    char$ = this.nextChar$0();
                  }
              }
            else
              this.error$1("Expected digit when parsing number");
        }
    case 2:
      if (state0 === 2 || state0 === 0 && char$ === 46)
        switch (state0) {
          case 0:
            char$ = this.nextChar$0();
          case 2:
            if (state0 === 2 || state0 === 0 && $.geB(char$, 48) && $.leB(char$, 57))
              switch (state0) {
                case 0:
                  char$ = this.nextChar$0();
                case 2:
                  state0 = 0;
                  while (true) {
                    if (!($.geB(char$, 48) && $.leB(char$, 57)))
                      break;
                    char$ = this.nextChar$0();
                  }
                  isInt = false;
              }
            else {
              this.error$1("Expected digit following comma");
              isInt = true;
            }
        }
      else
        isInt = true;
    case 3:
      var startPos, char$, isInt, t1, number;
      if (state0 === 3 || state0 === 0 && (char$ === 101 || char$ === 69))
        switch (state0) {
          case 0:
            char$ = this.nextChar$0();
            if (char$ === 45 || char$ === 43)
              char$ = this.nextChar$0();
          case 3:
            if (state0 === 3 || state0 === 0 && $.geB(char$, 48) && $.leB(char$, 57))
              switch (state0) {
                case 0:
                  char$ = this.nextChar$0();
                case 3:
                  state0 = 0;
                  while (true) {
                    if (!($.geB(char$, 48) && $.leB(char$, 57)))
                      break;
                    char$ = this.nextChar$0();
                  }
                  isInt = false;
              }
            else
              this.error$1("Expected digit following 'e' or 'E'");
        }
      t1 = this.json;
      number = $.getInterceptor$JSString(t1).substring$2(t1, startPos, this.position);
      if (isInt)
        return $.int_parse(number);
      else
        return $.double_parse(number);
  }
},
 char$0: function() {
  var t1, t3;
  t1 = this.position;
  if (typeof t1 !== 'number')
    return this.char$0$bailout(1, t1);
  t3 = this.length;
  if (typeof t3 !== 'number')
    return this.char$0$bailout(2, t1, t3);
  if (t1 >= t3)
    this.error$1("Unexpected end of JSON stream");
  t1 = this.json;
  return $.getInterceptor$JSString(t1).charCodeAt$1(t1, this.position);
},
 char$0$bailout: function(state0, env0, env1) {
  switch (state0) {
    case 1:
      t1 = env0;
      break;
    case 2:
      t3 = env1;
      t1 = env0;
      break;
  }
  switch (state0) {
    case 0:
      t1 = this.position;
    case 1:
      state0 = 0;
      t3 = this.length;
    case 2:
      var t1, t3;
      state0 = 0;
      if ($.geB(t1, t3))
        this.error$1("Unexpected end of JSON stream");
      t1 = this.json;
      return $.getInterceptor$JSString(t1).charCodeAt$1(t1, this.position);
  }
},
 nextChar$0: function() {
  var t1, t3, t2;
  t1 = this.position;
  if (typeof t1 !== 'number')
    return this.nextChar$0$bailout(1, t1);
  this.position = t1 + 1;
  t1 = this.position;
  if (typeof t1 !== 'number')
    return this.nextChar$0$bailout(2, t1);
  t3 = this.length;
  if (typeof t3 !== 'number')
    return this.nextChar$0$bailout(3, t1, t3);
  if (t1 >= t3)
    return 0;
  t2 = this.json;
  return $.getInterceptor$JSString(t2).charCodeAt$1(t2, t1);
},
 nextChar$0$bailout: function(state0, env0, env1) {
  switch (state0) {
    case 1:
      t1 = env0;
      break;
    case 2:
      t1 = env0;
      break;
    case 3:
      t3 = env1;
      t1 = env0;
      break;
  }
  switch (state0) {
    case 0:
      t1 = this.position;
    case 1:
      state0 = 0;
      this.position = $.add(t1, 1);
      t1 = this.position;
    case 2:
      state0 = 0;
      t3 = this.length;
    case 3:
      var t1, t3;
      state0 = 0;
      if ($.geB(t1, t3))
        return 0;
      t1 = this.json;
      return $.getInterceptor$JSString(t1).charCodeAt$1(t1, this.position);
  }
},
 token$0: function() {
  var t1, t2, t3, t4, char$, token;
  t1 = this.json;
  t2 = $.getInterceptor$JSString(t1);
  t3 = this.length;
  if (typeof t3 !== 'number')
    return this.token$0$bailout(1, t2, t3, t1);
  for (; true;) {
    t4 = this.position;
    if (typeof t4 !== 'number')
      return this.token$0$bailout(2, t4, t2, t3, t1);
    if (t4 >= t3)
      return;
    char$ = t2.charCodeAt$1(t1, t4);
    t4 = $._JsonParser_tokens;
    if (typeof t4 !== 'string' && (typeof t4 !== 'object' || t4 === null || t4.constructor !== Array && !t4.is$JavaScriptIndexingBehavior()))
      return this.token$0$bailout(3, t2, t3, char$, t1, t4);
    if (char$ !== (char$ | 0))
      throw $.iae(char$);
    if (char$ < 0 || char$ >= t4.length)
      throw $.ioore(char$);
    token = t4[char$];
    if (token === 32) {
      t4 = this.position;
      if (typeof t4 !== 'number')
        return this.token$0$bailout(4, t2, t3, t1, t4);
      this.position = t4 + 1;
      continue;
    }
    if (token == null)
      return 0;
    return token;
  }
},
 token$0$bailout: function(state0, env0, env1, env2, env3, env4) {
  switch (state0) {
    case 1:
      t1 = env2;
      t3 = env1;
      t2 = env0;
      break;
    case 2:
      t1 = env3;
      t3 = env2;
      t2 = env1;
      t4 = env0;
      break;
    case 3:
      t4 = env4;
      t1 = env3;
      char$ = env2;
      t3 = env1;
      t2 = env0;
      break;
    case 4:
      t4 = env3;
      t1 = env2;
      t3 = env1;
      t2 = env0;
      break;
  }
  switch (state0) {
    case 0:
      t1 = this.json;
      t2 = $.getInterceptor$JSString(t1);
      t3 = this.length;
    case 1:
      state0 = 0;
    default:
      var t1, t2, t3, t4, char$, token;
      L0:
        while (true)
          switch (state0) {
            case 0:
              if (!true)
                break L0;
            default:
              c$0: {
                switch (state0) {
                  case 0:
                    t4 = this.position;
                  case 2:
                    state0 = 0;
                    if ($.geB(t4, t3))
                      return;
                    char$ = t2.charCodeAt$1(t1, this.position);
                    t4 = $._JsonParser_tokens;
                  case 3:
                    state0 = 0;
                    token = $.index(t4, char$);
                  case 4:
                    if (state0 === 4 || state0 === 0 && token === 32)
                      switch (state0) {
                        case 0:
                          t4 = this.position;
                        case 4:
                          state0 = 0;
                          this.position = $.add(t4, 1);
                          break c$0;
                      }
                    if (token == null)
                      return 0;
                    return token;
                }
              }
          }
  }
},
 error$1: function(message) {
  throw $.$$throw(message);
},
 _JsonParser$1: function(json) {
  if (!($._JsonParser_tokens == null))
    return;
  $._JsonParser_tokens = $.List_List(126);
  $.indexSet($._JsonParser_tokens, 9, 32);
  $.indexSet($._JsonParser_tokens, 10, 32);
  $.indexSet($._JsonParser_tokens, 13, 32);
  $.indexSet($._JsonParser_tokens, 32, 32);
  $.indexSet($._JsonParser_tokens, 48, 45);
  $.indexSet($._JsonParser_tokens, 49, 45);
  $.indexSet($._JsonParser_tokens, 50, 45);
  $.indexSet($._JsonParser_tokens, 51, 45);
  $.indexSet($._JsonParser_tokens, 52, 45);
  $.indexSet($._JsonParser_tokens, 53, 45);
  $.indexSet($._JsonParser_tokens, 54, 45);
  $.indexSet($._JsonParser_tokens, 55, 45);
  $.indexSet($._JsonParser_tokens, 56, 45);
  $.indexSet($._JsonParser_tokens, 57, 45);
  $.indexSet($._JsonParser_tokens, 45, 45);
  $.indexSet($._JsonParser_tokens, 123, 123);
  $.indexSet($._JsonParser_tokens, 125, 125);
  $.indexSet($._JsonParser_tokens, 91, 91);
  $.indexSet($._JsonParser_tokens, 93, 93);
  $.indexSet($._JsonParser_tokens, 34, 34);
  $.indexSet($._JsonParser_tokens, 58, 58);
  $.indexSet($._JsonParser_tokens, 44, 44);
  $.indexSet($._JsonParser_tokens, 110, 110);
  $.indexSet($._JsonParser_tokens, 116, 116);
  $.indexSet($._JsonParser_tokens, 102, 102);
}
};

$$._JsonStringifier = {"":"Object;sb>,seen",
 checkCycle$1: function(object) {
  var t1, t2, i, t3;
  for (t1 = this.seen, t2 = t1.length, i = 0; i < t2; ++i) {
    t3 = t1[i];
    if (t3 == null ? object == null : t3 === object)
      throw $.$$throw("Cyclic structure");
  }
  t1.push(object);
},
 stringifyValue$1: function(object, exception) {
  var customJson, t1, e;
  if (this.stringifyJsonValue$1(object) !== true) {
    this.checkCycle$1(object);
    try {
      customJson = object.toJson$0();
      if (this.stringifyJsonValue$1(customJson) !== true)
        throw $.$$throw($.JsonUnsupportedObjectError$(object));
      t1 = this.seen;
      if (0 >= t1.length)
        throw $.ioore(0);
      t1.pop();
    } catch (exception) {
      t1 = $.unwrapException(exception);
      e = t1;
      throw $.$$throw($.JsonUnsupportedObjectError$withCause(object, e));
    }

  }
},
 stringifyJsonValue$1: function(object) {
  var t1, t2, t3, i;
  t1 = {};
  if (typeof object === 'number') {
    t1 = this.sb;
    $.getInterceptor$JSArray(t1).add$1(t1, $.CONSTANT2.toString$0(object));
    return true;
  } else if (object === true) {
    t1 = this.sb;
    $.getInterceptor$JSArray(t1).add$1(t1, "true");
    return true;
  } else if (object === false) {
    t1 = this.sb;
    $.getInterceptor$JSArray(t1).add$1(t1, "false");
    return true;
  } else if (object == null) {
    t1 = this.sb;
    $.getInterceptor$JSArray(t1).add$1(t1, "null");
    return true;
  } else if (typeof object === 'string') {
    t1 = this.sb;
    t2 = $.getInterceptor$JSArray(t1);
    t2.add$1(t1, "\"");
    $._JsonStringifier_escape(t1, object);
    t2.add$1(t1, "\"");
    return true;
  } else if (typeof object === 'object' && object !== null && (object.constructor === Array || object.is$List())) {
    if (typeof object !== 'object' || object === null || object.constructor !== Array && !object.is$JavaScriptIndexingBehavior())
      return this.stringifyJsonValue$1$bailout(1, object);
    this.checkCycle$1(object);
    t2 = this.sb;
    t3 = $.getInterceptor$JSArray(t2);
    t3.add$1(t2, "[");
    if (object.length > 0) {
      this.stringifyValue$1(object[0]);
      for (i = 1; i < object.length; ++i) {
        t3.add$1(t2, ",");
        if (i >= object.length)
          throw $.ioore(i);
        this.stringifyValue$1(object[i]);
      }
    }
    t3.add$1(t2, "]");
    t1 = this.seen;
    if (0 >= t1.length)
      throw $.ioore(0);
    t1.pop();
    return true;
  } else if (typeof object === 'object' && object !== null && object.is$Map()) {
    this.checkCycle$1(object);
    t2 = this.sb;
    t3 = $.getInterceptor$JSArray(t2);
    t3.add$1(t2, "{");
    t1.first_0 = true;
    object.forEach$1(new $._JsonStringifier_stringifyJsonValue_anon(t1, this));
    t3.add$1(t2, "}");
    t2 = this.seen;
    if (0 >= t2.length)
      throw $.ioore(0);
    t2.pop();
    return true;
  } else
    return false;
},
 stringifyJsonValue$1$bailout: function(state0, env0) {
  switch (state0) {
    case 1:
      object = env0;
      break;
  }
  switch (state0) {
    case 0:
      t1 = {};
    case 1:
      var t1, t2, object, t3, i;
      if (state0 === 0 && typeof object === 'number') {
        t1 = this.sb;
        $.getInterceptor$JSArray(t1).add$1(t1, $.CONSTANT2.toString$0(object));
        return true;
      } else
        switch (state0) {
          case 0:
          case 1:
            if (state0 === 0 && object === true) {
              t1 = this.sb;
              $.getInterceptor$JSArray(t1).add$1(t1, "true");
              return true;
            } else
              switch (state0) {
                case 0:
                case 1:
                  if (state0 === 0 && object === false) {
                    t1 = this.sb;
                    $.getInterceptor$JSArray(t1).add$1(t1, "false");
                    return true;
                  } else
                    switch (state0) {
                      case 0:
                      case 1:
                        if (state0 === 0 && object == null) {
                          t1 = this.sb;
                          $.getInterceptor$JSArray(t1).add$1(t1, "null");
                          return true;
                        } else
                          switch (state0) {
                            case 0:
                            case 1:
                              if (state0 === 0 && typeof object === 'string') {
                                t1 = this.sb;
                                t2 = $.getInterceptor$JSArray(t1);
                                t2.add$1(t1, "\"");
                                $._JsonStringifier_escape(t1, object);
                                t2.add$1(t1, "\"");
                                return true;
                              } else
                                switch (state0) {
                                  case 0:
                                  case 1:
                                    if (state0 === 1 || state0 === 0 && typeof object === 'object' && object !== null && (object.constructor === Array || object.is$List()))
                                      switch (state0) {
                                        case 0:
                                        case 1:
                                          state0 = 0;
                                          this.checkCycle$1(object);
                                          t2 = this.sb;
                                          t3 = $.getInterceptor$JSArray(t2);
                                          t3.add$1(t2, "[");
                                          t1 = $.getInterceptor$JSStringJSArray(object);
                                          if ($.gtB(t1.get$length(object), 0)) {
                                            this.stringifyValue$1($.index(object, 0));
                                            for (i = 1; $.ltB(i, t1.get$length(object)); ++i) {
                                              t3.add$1(t2, ",");
                                              this.stringifyValue$1($.index(object, i));
                                            }
                                          }
                                          t3.add$1(t2, "]");
                                          t1 = this.seen;
                                          if (0 >= t1.length)
                                            throw $.ioore(0);
                                          t1.pop();
                                          return true;
                                      }
                                    else if (typeof object === 'object' && object !== null && object.is$Map()) {
                                      this.checkCycle$1(object);
                                      t2 = this.sb;
                                      t3 = $.getInterceptor$JSArray(t2);
                                      t3.add$1(t2, "{");
                                      t1.first_0 = true;
                                      object.forEach$1(new $._JsonStringifier_stringifyJsonValue_anon(t1, this));
                                      t3.add$1(t2, "}");
                                      t2 = this.seen;
                                      if (0 >= t2.length)
                                        throw $.ioore(0);
                                      t2.pop();
                                      return true;
                                    } else
                                      return false;
                                }
                          }
                    }
              }
        }
  }
}
};

$$._AttributeClassSet = {"":"CssClassSet;_liblib1$_element>",
 readClasses$0: function() {
  var classname, s, t1, t2, t3, trimmed;
  classname = $.index(this._liblib1$_element.get$attributes(), "class");
  s = $.Set_Set();
  if (classname == null)
    return s;
  for (t1 = $.getInterceptor$JSString(classname).split$1(classname, " "), t1 = $.getInterceptor$JSArray(t1).iterator$0(t1), t2 = $.getInterceptor$JSArray(s); t1.get$hasNext() === true;) {
    t3 = t1.next$0();
    trimmed = $.getInterceptor$JSString(t3).trim$0(t3);
    if ($.getInterceptor$JSStringJSArray(trimmed).get$isEmpty(trimmed) !== true)
      t2.add$1(s, trimmed);
  }
  return s;
},
 writeClasses$1: function(s) {
  var list = $.List_List$from(s);
  $.indexSet(this._liblib1$_element.get$attributes(), "class", $.Strings_join(list, " "));
}
};

$$.anon = {"":"Closure;this_0",
 call$1: function(e) {
  return this.this_0.updateFilter$0();
}
};

$$.Maps__emitMap_anon = {"":"Closure;box_0,visiting_1,result_2",
 call$2: function(k, v) {
  var t1, t2;
  t1 = this.box_0;
  if (t1.first_0 !== true) {
    t2 = this.result_2;
    $.getInterceptor$JSArray(t2).add$1(t2, ", ");
  }
  t1.first_0 = false;
  t1 = this.result_2;
  t2 = this.visiting_1;
  $.Collections__emitObject(k, t1, t2);
  $.getInterceptor$JSArray(t1).add$1(t1, ": ");
  $.Collections__emitObject(v, t1, t2);
}
};

$$._LinkedHashMapImpl_forEach_anon = {"":"Closure;f_0",
 call$1: function(entry) {
  this.f_0.call$2(entry.get$key(), entry.get$value());
}
};

$$.DoubleLinkedQueue_length_anon = {"":"Closure;box_0",
 call$1: function(element) {
  var t1 = this.box_0;
  t1.counter_0 = $.add(t1.counter_0, 1);
}
};

$$.NoSuchMethodError_toString_anon = {"":"Closure;box_0",
 call$2: function(key, value) {
  var t1, t2;
  t1 = this.box_0;
  if ($.gtB(t1.i_1, 0)) {
    t2 = t1.sb_0;
    $.getInterceptor$JSArray(t2).add$1(t2, ", ");
  }
  t2 = t1.sb_0;
  $.getInterceptor$JSArray(t2).add$1(t2, key);
  t2 = t1.sb_0;
  $.getInterceptor$JSArray(t2).add$1(t2, ": ");
  t2 = t1.sb_0;
  $.getInterceptor$JSArray(t2).add$1(t2, $.Error_safeToString(value));
  t1.i_1 = $.add(t1.i_1, 1);
}
};

$$.CssClassSet_clear_anon = {"":"Closure;",
 call$1: function(s) {
  return $.getInterceptor$JSArray(s).clear$0(s);
}
};

$$._HashSetImpl_forEach_anon = {"":"Closure;f_0",
 call$2: function(key, value) {
  this.f_0.call$1(key);
}
};

$$.CssClassSet_add_anon = {"":"Closure;value_0",
 call$1: function(s) {
  return $.getInterceptor$JSArray(s).add$1(s, this.value_0);
}
};

$$.CssClassSet_addAll_anon = {"":"Closure;collection_0",
 call$1: function(s) {
  return $.getInterceptor$JSArray(s).addAll$1(s, this.collection_0);
}
};

$$._HashSetImpl_addAll_anon = {"":"Closure;this_0",
 call$1: function(value) {
  $.indexSet(this.this_0.get$_backingMap(), value, value);
}
};

$$.FilteredElementList__filtered_anon = {"":"Closure;",
 call$1: function(n) {
  return typeof n === 'object' && n !== null && n.is$Element();
}
};

$$._HashSetImpl_filter_anon = {"":"Closure;result_0,f_1",
 call$2: function(key, value) {
  var t1;
  if (this.f_1.call$1(key) === true) {
    t1 = this.result_0;
    $.getInterceptor$JSArray(t1).add$1(t1, key);
  }
}
};

$$._ChildrenElementList_filter_anon = {"":"Closure;output_0,f_1",
 call$1: function(element) {
  var t1;
  if (this.f_1.call$1(element) === true) {
    t1 = this.output_0;
    $.getInterceptor$JSArray(t1).add$1(t1, element);
  }
}
};

$$.FilteredElementList_removeRange_anon = {"":"Closure;",
 call$1: function(el) {
  return el.remove$0();
}
};

$$.invokeClosure_anon = {"":"Closure;closure_0",
 call$0: function() {
  return this.closure_0.call$0();
}
};

$$.invokeClosure_anon0 = {"":"Closure;arg1_1,closure_2",
 call$0: function() {
  return this.closure_2.call$1(this.arg1_1);
}
};

$$.invokeClosure_anon1 = {"":"Closure;arg1_3,closure_4,arg2_5",
 call$0: function() {
  return this.closure_4.call$2(this.arg1_3, this.arg2_5);
}
};

$$.TodoApp_initElementEventListeners_anon = {"":"Closure;newTodoElement_0,this_1",
 call$1: function(e) {
  var t1, t2, title, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17;
  if ($.eqB(e.get$keyCode(), 13)) {
    t1 = this.newTodoElement_0;
    t2 = t1.get$value();
    title = $.getInterceptor$JSString(t2).trim$0(t2);
    if (!$.eqB(title, "")) {
      t2 = this.this_1;
      t3 = $.get$UUID_random().nextInt$1(65536);
      t4 = $.S($.getInterceptor$JSNumber(t3).toRadixString$1(t3, 16));
      t5 = $.get$UUID_random().nextInt$1(65536);
      t6 = t4 + $.S($.getInterceptor$JSNumber(t5).toRadixString$1(t5, 16)) + "-";
      t7 = $.get$UUID_random().nextInt$1(65536);
      t8 = t6 + $.S($.getInterceptor$JSNumber(t7).toRadixString$1(t7, 16)) + "-";
      t9 = $.get$UUID_random().nextInt$1(65536);
      t10 = t8 + $.S($.getInterceptor$JSNumber(t9).toRadixString$1(t9, 16)) + "-";
      t11 = $.get$UUID_random().nextInt$1(65536);
      t12 = t10 + $.S($.getInterceptor$JSNumber(t11).toRadixString$1(t11, 16)) + "-";
      t13 = $.get$UUID_random().nextInt$1(65536);
      t14 = t12 + $.S($.getInterceptor$JSNumber(t13).toRadixString$1(t13, 16));
      t15 = $.get$UUID_random().nextInt$1(65536);
      t16 = t14 + $.S($.getInterceptor$JSNumber(t15).toRadixString$1(t15, 16));
      t17 = $.get$UUID_random().nextInt$1(65536);
      t2.addTodo$1($.Todo$(t16 + $.S($.getInterceptor$JSNumber(t17).toRadixString$1(t17, 16)), title, false));
      t1.set$value("");
      t2.updateFooterDisplay$0();
      t2.save$0();
    }
  }
}
};

$$.TodoApp_initElementEventListeners_anon0 = {"":"Closure;this_2",
 call$1: function(e) {
  var t1, t2, t3;
  for (t1 = this.this_2, t2 = t1.get$todoWidgets(), t2 = $.getInterceptor$JSArray(t2).iterator$0(t2); t2.get$hasNext() === true;) {
    t3 = t2.next$0();
    if (!$.eqB(t3.get$todo().get$completed(), t1.get$checkAllCheckboxElement().get$checked()))
      t3.toggle$0();
  }
  t1.updateCounts$0();
  t1.save$0();
}
};

$$.TodoApp_initElementEventListeners_anon1 = {"":"Closure;this_3",
 call$1: function(e) {
  var newList, t1, t2, t3;
  newList = $.List_List(null);
  for (t1 = this.this_3, t2 = t1.get$todoWidgets(), t2 = $.getInterceptor$JSArray(t2).iterator$0(t2); t2.get$hasNext() === true;) {
    t3 = t2.next$0();
    if (t3.get$todo().get$completed() === true)
      t3.get$element().remove$0();
    else
      newList.push(t3);
  }
  t1.set$todoWidgets(newList);
  t1.updateFooterDisplay$0();
  t1.save$0();
}
};

$$._JsonStringifier_stringifyJsonValue_anon = {"":"Closure;box_0,this_1",
 call$2: function(key, value) {
  var t1, t2, t3;
  t1 = this.box_0;
  t2 = t1.first_0 !== true;
  t3 = this.this_1;
  if (t2) {
    t2 = t3.get$sb();
    $.getInterceptor$JSArray(t2).add$1(t2, ",\"");
  } else {
    t2 = t3.get$sb();
    $.getInterceptor$JSArray(t2).add$1(t2, "\"");
  }
  t2 = this.this_1;
  $._JsonStringifier_escape(t2.get$sb(), key);
  t3 = t2.get$sb();
  $.getInterceptor$JSArray(t3).add$1(t3, "\":");
  t2.stringifyValue$1(value);
  t1.first_0 = false;
}
};

$$.TodoWidget_createElement_anon = {"":"Closure;this_0",
 call$1: function(e) {
  var t1 = this.this_0;
  t1.toggle$0();
  t1.get$todoApp().updateCounts$0();
  t1.get$todoApp().save$0();
}
};

$$.TodoWidget_createElement_anon0 = {"":"Closure;editElement_1,this_2",
 call$1: function(e) {
  var t1, t2, t3;
  t1 = this.this_2;
  t2 = t1.get$element().get$classes();
  $.getInterceptor$JSArray(t2).add$1(t2, "editing");
  t2 = t1.get$todo().get$title();
  t2 = $.getInterceptor$JSStringJSArray(t2).get$length(t2);
  t3 = this.editElement_1;
  t3.set$selectionStart(t2);
  t3.focus$0();
}
};

$$.TodoWidget_createElement_removeTodo = {"":"Closure;this_3",
 call$0: function() {
  var t1 = this.this_3;
  t1.get$element().remove$0();
  t1.get$todoApp().removeTodo$1(t1);
  t1.get$todoApp().updateFooterDisplay$0();
}
};

$$.TodoWidget_createElement_anon1 = {"":"Closure;removeTodo_4,this_5",
 call$1: function(e) {
  this.removeTodo_4.call$0();
  this.this_5.get$todoApp().save$0();
}
};

$$.TodoWidget_createElement_doneEditing = {"":"Closure;contentElement_6,removeTodo_7,editElement_8,this_9",
 call$1: function(event$) {
  var t1, t2;
  t1 = this.editElement_8.get$value();
  t1 = $.getInterceptor$JSString(t1).trim$0(t1);
  t2 = this.this_9;
  t2.get$todo().set$title(t1);
  if (!$.eqB(t2.get$todo().get$title(), "")) {
    t1 = t2.get$todo().get$title();
    this.contentElement_6.set$text(t1);
    t2.get$element().get$classes().remove$1("editing");
  } else
    this.removeTodo_7.call$0();
  t2.get$todoApp().save$0();
}
};

$$.TodoWidget_createElement_anon2 = {"":"Closure;doneEditing_10",
 call$1: function(e) {
  if ($.eqB(e.get$keyCode(), 13))
    this.doneEditing_10.call$1(e);
}
};

$$.ConstantMap_forEach_anon = {"":"Closure;this_0,f_1",
 call$1: function(key) {
  return this.f_1.call$2(key, $.index(this.this_0, key));
}
};

$$.Closure = {"":"Object;",
 toString$0: function() {
  return "Closure";
}
};

$$.BoundClosure = {"":"Closure;self,target", call$0: function() {
  return this.self[this.target]();
}
};
$$.BoundClosure0 = {"":"Closure;self,target", call$1: function(p0) {
  return this.self[this.target](p0);
}
};
$.add = function(a, b) {
  return typeof a === 'number' && typeof b === 'number' ? a + b : $.add$slow(a, b);
};

$.sub = function(a, b) {
  return typeof a === 'number' && typeof b === 'number' ? a - b : $.sub$slow(a, b);
};

$.mul = function(a, b) {
  return typeof a === 'number' && typeof b === 'number' ? a * b : $.mul$slow(a, b);
};

$.gt = function(a, b) {
  return typeof a === 'number' && typeof b === 'number' ? a > b : $.gt$slow(a, b);
};

$.lt = function(a, b) {
  return typeof a === 'number' && typeof b === 'number' ? a < b : $.lt$slow(a, b);
};

$.gtB = function(a, b) {
  return typeof a === 'number' && typeof b === 'number' ? a > b : $.gt$slow(a, b) === true;
};

$.geB = function(a, b) {
  return typeof a === 'number' && typeof b === 'number' ? a >= b : $.ge$slow(a, b) === true;
};

$.ltB = function(a, b) {
  return typeof a === 'number' && typeof b === 'number' ? a < b : $.lt$slow(a, b) === true;
};

$.index = function(a, index) {
  var key;
  if (typeof a == "string" || a.constructor === Array) {
    key = index >>> 0;
    if (key === index && key < a.length)
      return a[key];
  }
  return $.index$slow(a, index);
};

$.indexSet = function(a, index, value) {
  var key;
  if (a.constructor === Array && !a.immutable$list) {
    key = index >>> 0;
    if (key === index && key < a.length) {
      a[key] = value;
      return;
    }
  }
  $.indexSet$slow(a, index, value);
};

$.checkNumbers = function(a, b) {
  if (typeof a === 'number')
    if (typeof b === 'number')
      return true;
    else
      throw $.$$throw($.ArgumentError$(b));
  return false;
};

$.isJsArray = function(value) {
  return !(value == null) && value.constructor === Array;
};

$.add$slow = function(a, b) {
  if ($.checkNumbers(a, b))
    return a + b;
  return a.operator$add$1(b);
};

$.eq = function(a, b) {
  if (a == null)
    return b == null;
  if (b == null)
    return false;
  if (typeof a === "object")
    if (!!a.operator$eq$1)
      return a.operator$eq$1(b);
  return a === b;
};

$.eqB = function(a, b) {
  if (a == null)
    return b == null;
  if (b == null)
    return false;
  if (typeof a === "object")
    if (!!a.operator$eq$1)
      return a.operator$eq$1(b) === true;
  return a === b;
};

$.ge$slow = function(a, b) {
  if ($.checkNumbers(a, b))
    return a >= b;
  return a.operator$ge$1(b);
};

$.sub$slow = function(a, b) {
  if ($.checkNumbers(a, b))
    return a - b;
  return a.operator$sub$1(b);
};

$.lt$slow = function(a, b) {
  if ($.checkNumbers(a, b))
    return a < b;
  return a.operator$lt$1(b);
};

$.gt$slow = function(a, b) {
  if ($.checkNumbers(a, b))
    return a > b;
  return a.operator$gt$1(b);
};

$.and = function(a, b) {
  if ($.checkNumbers(a, b))
    return (a & b) >>> 0;
  return a.operator$and$1(b);
};

$.mul$slow = function(a, b) {
  if ($.checkNumbers(a, b))
    return a * b;
  return a.operator$mul$1(b);
};

$.index$slow = function(a, index) {
  var t1;
  if (!(typeof a === 'string'))
    t1 = !(a == null) && a.constructor === Array;
  else
    t1 = true;
  if (t1) {
    if (!(typeof index === 'number' && Math.floor(index) === index)) {
      if (!(typeof index === 'number'))
        throw $.$$throw($.ArgumentError$(index));
      if (!($.CONSTANT2.truncate$0(index) === index))
        throw $.$$throw($.ArgumentError$(index));
    }
    if ($.ltB(index, 0) || $.geB(index, $.getInterceptor$JSStringJSArray(a).get$length(a)))
      throw $.$$throw($.RangeError$value(index));
    return a[index];
  }
  return a.operator$index$1(index);
};

$.indexSet$slow = function(a, index, value) {
  if (!(a == null) && a.constructor === Array) {
    if (!(typeof index === 'number' && Math.floor(index) === index))
      throw $.$$throw($.ArgumentError$(index));
    if (index < 0 || $.geB(index, $.getInterceptor$JSStringJSArray(a).get$length(a)))
      throw $.$$throw($.RangeError$value(index));
    $.checkMutable(a, "indexed set");
    a[index] = value;
    return;
  }
  a.operator$indexSet$2(index, value);
};

$.checkMutable = function(list, reason) {
  if (!!(list.immutable$list))
    throw $.$$throw($.UnsupportedError$(reason));
};

$.S = function(value) {
  var res = $.getInterceptor(value).toString$0(value);
  if (!(typeof res === 'string'))
    throw $.$$throw($.ArgumentError$(value));
  return res;
};

$.checkGrowable = function(list, reason) {
  if (!!(list.fixed$length))
    throw $.$$throw($.UnsupportedError$(reason));
};

$.iae = function(argument) {
  throw $.$$throw($.ArgumentError$(argument));
};

$.ioore = function(index) {
  throw $.$$throw($.RangeError$value(index));
};

$.checkNull = function(object) {
  if (object == null)
    throw $.$$throw($.ArgumentError$(null));
  return object;
};

$.checkNum = function(value) {
  if (!(typeof value === 'number'))
    throw $.$$throw($.ArgumentError$(value));
  return value;
};

$.checkString = function(value) {
  if (!(typeof value === 'string'))
    throw $.$$throw($.ArgumentError$(value));
  return value;
};

$.$$throw = function(ex) {
  var jsError;
  if (ex == null)
    ex = $.CONSTANT0;
  jsError = new Error();
  jsError.name = ex;
  jsError.description = ex;
  jsError.dartException = ex;
  jsError.toString = $.toStringWrapper.call$0;
  throw jsError;
};

$.toStringWrapper = function() {
  var t1 = this.dartException;
  return $.getInterceptor(t1).toString$0(t1);
};

$.tdiv = function(a, b) {
  if ($.checkNumbers(a, b))
    return $.CONSTANT2.truncate$0(a / b);
  return a.operator$tdiv$1(b);
};

$.shr = function(a, b) {
  if ($.checkNumbers(a, b)) {
    if (b < 0)
      throw $.$$throw($.ArgumentError$(b));
    if (a > 0) {
      if (b > 31)
        return 0;
      return a >>> b;
    }
    if (b > 31)
      b = 31;
    return (a >> b) >>> 0;
  }
  return a.operator$shr$1(b);
};

$.unwrapException = function(ex) {
  var message, type, name$, ieErrorCode, ieFacilityNumber, t1;
  if ("dartException" in ex)
    return ex.dartException;
  message = ex.message;
  if (ex instanceof TypeError) {
    type = ex.type;
    name$ = ex.arguments ? ex.arguments[0] : "";
    if (message.indexOf("JSNull") !== -1 || $.eqB(type, "property_not_function") || $.eqB(type, "called_non_callable") || $.eqB(type, "non_object_property_call") || $.eqB(type, "non_object_property_load"))
      return $.NoSuchMethodError$(null, name$, [], $.makeLiteralMap([]), null);
    else if ($.eqB(type, "undefined_method"))
      return $.NoSuchMethodError$("", name$, [], $.makeLiteralMap([]), null);
    ieErrorCode = ex.number & 0xffff;
    ieFacilityNumber = ex.number>>16 & 0x1FFF;
    if (typeof message === 'string')
      if ($.CONSTANT.endsWith$1(message, "is null") === true || $.CONSTANT.endsWith$1(message, "is undefined") === true || $.CONSTANT.endsWith$1(message, "is null or undefined") === true)
        return $.NoSuchMethodError$(null, "<unknown>", [], $.makeLiteralMap([]), null);
      else {
        if (message.indexOf(" is not a function") === -1)
          t1 = ieErrorCode === 438 && ieFacilityNumber === 10;
        else
          t1 = true;
        if (t1)
          return $.NoSuchMethodError$("", "<unknown>", [], $.makeLiteralMap([]), null);
      }
    return $.Exception_Exception(typeof message === 'string' ? message : "");
  }
  if (ex instanceof RangeError) {
    if (typeof message === 'string' && message.indexOf("call stack") !== -1)
      return $.StackOverflowError$();
    return $.ArgumentError$(null);
  }
  if (typeof InternalError == 'function' && ex instanceof InternalError)
    if (typeof message === 'string' && message === "too much recursion")
      return $.StackOverflowError$();
  return ex;
};

$.makeLiteralMap = function(keyValuePairs) {
  var iterator, result;
  iterator = $.CONSTANT1.iterator$0(keyValuePairs);
  result = $.LinkedHashMap_LinkedHashMap();
  for (; iterator.get$hasNext() === true;)
    $.indexSet(result, iterator.next$0(), iterator.next$0());
  return result;
};

$.invokeClosure = function(closure, isolate, numberOfArguments, arg1, arg2) {
  if ($.eqB(numberOfArguments, 0))
    return new $.invokeClosure_anon(closure).call$0();
  else if ($.eqB(numberOfArguments, 1))
    return new $.invokeClosure_anon0(arg1, closure).call$0();
  else if ($.eqB(numberOfArguments, 2))
    return new $.invokeClosure_anon1(arg1, closure, arg2).call$0();
  else
    throw $.$$throw($.Exception_Exception("Unsupported number of arguments for wrapped closure"));
};

$.convertDartClosureToJS = function(closure, arity) {
  var function$;
  if (closure == null)
    return;
  function$ = closure.$identity;
  if (!!function$)
    return function$;
  function$ = function() {
    return $.invokeClosure.call$5(closure, $, arity, arguments[0], arguments[1]);
  };
  closure.$identity = function$;
  return function$;
};

$.Element_Element$tag = function(tag) {
  return document.createElement(tag);
};

$.le$slow = function(a, b) {
  if ($.checkNumbers(a, b))
    return a <= b;
  return a.operator$le$1(b);
};

$.leB = function(a, b) {
  return typeof a === 'number' && typeof b === 'number' ? a <= b : $.le$slow(a, b) === true;
};

$.JSON_stringify = function(object) {
  return $._JsonStringifier_stringify(object);
};

$.JSON_parse = function(json) {
  return $._JsonParser$(json).parseToplevel$0();
};

$._JsonStringifier$ = function(sb) {
  return new $._JsonStringifier(sb, []);
};

$._JsonStringifier_stringify = function(object) {
  var output = $.StringBuffer_StringBuffer("");
  $._JsonStringifier$(output).stringifyValue$1(object);
  return $.getInterceptor(output).toString$0(output);
};

$.Element_Element$html = function(html) {
  return $._ElementFactoryProvider_createElement_html(html);
};

$._JsonStringifier_escape = function(sb, s) {
  var t1, length$, charCodes, i, needsEscape, charCode, t2;
  t1 = $.getInterceptor$JSStringJSArray(s);
  length$ = t1.get$length(s);
  charCodes = $.List_List(null);
  for (i = 0, needsEscape = false; $.ltB(i, length$); ++i) {
    charCode = t1.charCodeAt$1(s, i);
    if ($.ltB(charCode, 32)) {
      charCodes.push(92);
      switch (charCode) {
        case 8:
          charCodes.push(98);
          break;
        case 9:
          charCodes.push(116);
          break;
        case 10:
          charCodes.push(110);
          break;
        case 12:
          charCodes.push(102);
          break;
        case 13:
          charCodes.push(114);
          break;
        default:
          charCodes.push(117);
          t2 = $.and($.shr(charCode, 12), 15);
          if ($.ltB(t2, 10)) {
            if (typeof t2 !== 'number')
              throw $.iae(t2);
            t2 = 48 + t2;
          } else {
            if (typeof t2 !== 'number')
              throw $.iae(t2);
            t2 = 87 + t2;
          }
          charCodes.push(t2);
          t2 = $.and($.shr(charCode, 8), 15);
          if ($.ltB(t2, 10)) {
            if (typeof t2 !== 'number')
              throw $.iae(t2);
            t2 = 48 + t2;
          } else {
            if (typeof t2 !== 'number')
              throw $.iae(t2);
            t2 = 87 + t2;
          }
          charCodes.push(t2);
          t2 = $.and($.shr(charCode, 4), 15);
          if ($.ltB(t2, 10)) {
            if (typeof t2 !== 'number')
              throw $.iae(t2);
            t2 = 48 + t2;
          } else {
            if (typeof t2 !== 'number')
              throw $.iae(t2);
            t2 = 87 + t2;
          }
          charCodes.push(t2);
          t2 = $.and(charCode, 15);
          if ($.ltB(t2, 10)) {
            if (typeof t2 !== 'number')
              throw $.iae(t2);
            t2 = 48 + t2;
          } else {
            if (typeof t2 !== 'number')
              throw $.iae(t2);
            t2 = 87 + t2;
          }
          charCodes.push(t2);
          break;
      }
      needsEscape = true;
    } else if ($.eqB(charCode, 34) || $.eqB(charCode, 92)) {
      charCodes.push(92);
      charCodes.push(charCode);
      needsEscape = true;
    } else
      charCodes.push(charCode);
  }
  t1 = $.getInterceptor$JSArray(sb);
  t1.add$1(sb, needsEscape ? $.String_String$fromCharCodes(charCodes) : s);
};

$.throwCyclicInit = function(staticName) {
  throw $.$$throw($.RuntimeError$("Cyclic initialization for static " + $.S(staticName)));
};

$.MediaElementEvents$ = function(_ptr) {
  return new $.MediaElementEvents(_ptr);
};

$.typeNameInChrome = function(obj) {
  return $.typeNameInWebKitCommon(obj.constructor.name);
};

$.typeNameInSafari = function(obj) {
  return $.typeNameInWebKitCommon($.constructorNameFallback(obj));
};

$.typeNameInWebKitCommon = function(tag) {
  var name$ = tag;
  if (name$ === "Window")
    return "DOMWindow";
  if (name$ === "CanvasPixelArray")
    return "Uint8ClampedArray";
  if (name$ === "WebKitMutationObserver")
    return "MutationObserver";
  if (name$ === "AudioChannelMerger")
    return "ChannelMergerNode";
  if (name$ === "AudioChannelSplitter")
    return "ChannelSplitterNode";
  if (name$ === "AudioGainNode")
    return "GainNode";
  if (name$ === "AudioPannerNode")
    return "PannerNode";
  if (name$ === "JavaScriptAudioNode")
    return "ScriptProcessorNode";
  if (name$ === "Oscillator")
    return "OscillatorNode";
  if (name$ === "RealtimeAnalyserNode")
    return "AnalyserNode";
  return name$;
};

$.typeNameInOpera = function(obj) {
  var name$ = $.constructorNameFallback(obj);
  if (name$ === "Window")
    return "DOMWindow";
  return name$;
};

$.typeNameInFirefox = function(obj) {
  var name$ = $.constructorNameFallback(obj);
  if (name$ === "Window")
    return "DOMWindow";
  if (name$ === "CSS2Properties")
    return "CSSStyleDeclaration";
  if (name$ === "DataTransfer")
    return "Clipboard";
  if (name$ === "DragEvent")
    return "MouseEvent";
  if (name$ === "GeoGeolocation")
    return "Geolocation";
  if (name$ === "MouseScrollEvent")
    return "WheelEvent";
  if (name$ === "OfflineResourceList")
    return "DOMApplicationCache";
  if (name$ === "WorkerMessageEvent")
    return "MessageEvent";
  if (name$ === "XMLDocument")
    return "Document";
  return name$;
};

$.constructorNameFallback = function(object) {
  var constructor$, name$, t1, string;
  if (object == null)
    return "Null";
  constructor$ = object.constructor;
  if (typeof(constructor$) === "function") {
    name$ = constructor$.name;
    if (typeof name$ === 'string')
      t1 = !(name$ === "") && !(name$ === "Object") && !(name$ === "Function.prototype");
    else
      t1 = false;
    if (t1)
      return name$;
  }
  string = Object.prototype.toString.call(object);
  return string.substring(8, string.length - 1);
};

$.JsonUnsupportedObjectError$ = function(unsupportedObject) {
  return new $.JsonUnsupportedObjectError(unsupportedObject, null);
};

$.JsonUnsupportedObjectError$withCause = function(unsupportedObject, cause) {
  return new $.JsonUnsupportedObjectError(unsupportedObject, cause);
};

$.callHasOwnProperty = function(function$, object, property) {
  return function$.call(object, property);
};

$.typeNameInIE = function(obj) {
  var name$ = $.constructorNameFallback(obj);
  if (name$ === "Window")
    return "DOMWindow";
  if (name$ === "Document") {
    if (!!obj.xmlVersion)
      return "Document";
    return "HTMLDocument";
  }
  if (name$ === "ApplicationCache")
    return "DOMApplicationCache";
  if (name$ === "CanvasPixelArray")
    return "Uint8ClampedArray";
  if (name$ === "DataTransfer")
    return "Clipboard";
  if (name$ === "DragEvent")
    return "MouseEvent";
  if (name$ === "HTMLDDElement")
    return "HTMLElement";
  if (name$ === "HTMLDTElement")
    return "HTMLElement";
  if (name$ === "HTMLTableDataCellElement")
    return "HTMLTableCellElement";
  if (name$ === "HTMLTableHeaderCellElement")
    return "HTMLTableCellElement";
  if (name$ === "HTMLPhraseElement")
    return "HTMLElement";
  if (name$ === "MSStyleCSSProperties")
    return "CSSStyleDeclaration";
  if (name$ === "MouseWheelEvent")
    return "WheelEvent";
  if (name$ === "Position")
    return "Geoposition";
  return name$;
};

$.getFunctionForTypeNameOf = function() {
  if (!(typeof(navigator) === "object"))
    return $.typeNameInChrome;
  var userAgent = navigator.userAgent;
  if (userAgent.indexOf("Chrome") !== -1 || userAgent.indexOf("DumpRenderTree") !== -1)
    return $.typeNameInChrome;
  else if (userAgent.indexOf("Firefox") !== -1)
    return $.typeNameInFirefox;
  else if (userAgent.indexOf("MSIE") !== -1)
    return $.typeNameInIE;
  else if (userAgent.indexOf("Opera") !== -1)
    return $.typeNameInOpera;
  else if (userAgent.indexOf("AppleWebKit") !== -1)
    return $.typeNameInSafari;
  else
    return $.constructorNameFallback;
};

$.getTypeNameOf = function(obj) {
  if ($._getTypeNameOf == null)
    $._getTypeNameOf = $.getFunctionForTypeNameOf();
  return $._getTypeNameOf.call$1(obj);
};

$.hashCodeForNativeObject = function(object) {
  return $.Primitives_objectHashCode(object);
};

$.defineProperty = function(obj, property, value) {
  Object.defineProperty(obj, property, {value: value, enumerable: false, writable: true, configurable: true});
};

$.toStringForNativeObject = function(obj) {
  return "Instance of " + $.getTypeNameOf(obj);
};

$.dynamicBind = function(obj, name$, methods, arguments$) {
  var tag, hasOwnPropertyFunction, method, secondTag, proto;
  tag = $.getTypeNameOf(obj);
  hasOwnPropertyFunction = Object.prototype.hasOwnProperty;
  method = $.dynamicBindLookup(hasOwnPropertyFunction, tag, methods);
  if (method == null) {
    secondTag = $.alternateTag(obj, tag);
    if (!(secondTag == null))
      method = $.dynamicBindLookup(hasOwnPropertyFunction, secondTag, methods);
  }
  if (method == null)
    method = $.lookupDynamicClass(hasOwnPropertyFunction, methods, $.getTypeNameOf($.CONSTANT7));
  proto = Object.getPrototypeOf(obj);
  if (method == null)
    method = function () {if (Object.getPrototypeOf(this) === proto) {throw new TypeError(name$ + " is not a function");} else {return Object.prototype[name$].apply(this, arguments);}};
  if (!$.callHasOwnProperty(hasOwnPropertyFunction, proto, name$))
    $.defineProperty(proto, name$, method);
  return method.apply(obj, arguments$);
};

$.dynamicFunction = function(name$) {
  var f, methods, dartMethod, bind;
  f = Object.prototype[name$];
  if (!(f == null) && !!f.methods)
    return f.methods;
  methods = {};
  dartMethod = Object.getPrototypeOf($.CONSTANT7)[name$];
  if (!(dartMethod == null))
    methods["Object"] = dartMethod;
  bind = function() {return $.dynamicBind.call$4(this, name$, methods, Array.prototype.slice.call(arguments));};
  bind.methods = methods;
  $.defineProperty(Object.prototype, name$, bind);
  return methods;
};

$.dynamicBindLookup = function(hasOwnPropertyFunction, tag, methods) {
  var method, i, entry;
  method = $.lookupDynamicClass(hasOwnPropertyFunction, methods, tag);
  if (method == null && !($._dynamicMetadata0() == null))
    for (i = 0; i < $._dynamicMetadata0().length; ++i) {
      entry = $._dynamicMetadata0()[i];
      if ($.callHasOwnProperty(hasOwnPropertyFunction, entry.get$_set(), tag)) {
        method = $.lookupDynamicClass(hasOwnPropertyFunction, methods, entry.get$_tag());
        if (!(method == null))
          break;
      }
    }
  return method;
};

$.lookupDynamicClass = function(hasOwnPropertyFunction, methods, className) {
  return $.callHasOwnProperty(hasOwnPropertyFunction, methods, className) ? methods[className] : null;
};

$._dynamicMetadata0 = function() {
  if (typeof($dynamicMetadata) === "undefined") {
    var t1 = [];
    $._dynamicMetadata(t1);
  }
  return $dynamicMetadata;
};

$._dynamicMetadata = function(table) {
  $dynamicMetadata = table;
};

$.dynamicSetMetadata = function(inputTable) {
  var t1 = $.buildDynamicMetadata(inputTable);
  $._dynamicMetadata(t1);
};

$.regExpTest = function(regExp, str) {
  return $.regExpGetNative(regExp).test(str);
};

$.regExpGetNative = function(regExp) {
  var r = regExp._re;
  return r == null ? regExp._re = $.regExpMakeNative(regExp, false) : r;
};

$.regExpExec = function(regExp, str) {
  var result = $.regExpGetNative(regExp).exec(str);
  if (result == null)
    return;
  return result;
};

$.regExpMakeNative = function(regExp, global, exception) {
  var pattern, multiLine, ignoreCase, sb, t1, t2, e;
  pattern = regExp.get$pattern();
  multiLine = regExp.get$multiLine();
  ignoreCase = regExp.get$ignoreCase();
  $.checkString(pattern);
  sb = $.StringBuffer_StringBuffer("");
  if (multiLine === true) {
    t1 = sb;
    $.getInterceptor$JSArray(t1).add$1(t1, "m");
  }
  if (ignoreCase === true) {
    t1 = sb;
    $.getInterceptor$JSArray(t1).add$1(t1, "i");
  }
  if (global === true) {
    t1 = sb;
    $.getInterceptor$JSArray(t1).add$1(t1, "g");
  }
  try {
    t1 = pattern;
    t2 = sb;
    t1 = new RegExp(t1, $.getInterceptor(t2).toString$0(t2));
    return t1;
  } catch (exception) {
    t1 = $.unwrapException(exception);
    e = t1;
    throw $.$$throw($.IllegalJSRegExpException$(pattern, String(e)));
  }

};

$.alternateTag = function(object, tag) {
  if (!!/^HTML[A-Z].*Element$/.test(tag)) {
    if (Object.prototype.toString.call(object) === "[object Object]")
      return;
    return "HTMLElement";
  }
  return;
};

$.allMatchesInStringUnchecked = function(needle, haystack) {
  var result, t1, length$, patternLength, startIndex, position, endIndex;
  result = $.List_List(null);
  t1 = $.getInterceptor$JSStringJSArray(haystack);
  length$ = t1.get$length(haystack);
  patternLength = needle.length;
  for (startIndex = 0; true;) {
    position = t1.indexOf$2(haystack, needle, startIndex);
    if ($.eqB(position, -1))
      break;
    result.push($.StringMatch$(position, haystack, needle));
    endIndex = $.add(position, patternLength);
    if ($.eqB(endIndex, length$))
      break;
    else
      startIndex = $.eqB(position, endIndex) ? $.add(startIndex, 1) : endIndex;
  }
  return result;
};

$.stringContainsUnchecked = function(receiver, other, startIndex) {
  var substr, t1;
  if (typeof other === 'string')
    return !$.eqB($.CONSTANT.indexOf$2(receiver, other, startIndex), -1);
  else if (typeof other === 'object' && other !== null && !!other.is$JSSyntaxRegExp)
    return other.hasMatch$1($.CONSTANT.substring$1(receiver, startIndex));
  else {
    substr = $.CONSTANT.substring$1(receiver, startIndex);
    t1 = $.getInterceptor$JSString(other).allMatches$1(other, substr);
    return $.getInterceptor$JSArray(t1).iterator$0(t1).get$hasNext();
  }
};

$.stringReplaceJS = function(receiver, replacer, to) {
  return receiver.replace(replacer, to.replace('$', '$$$$'));
};

$.stringReplaceAllUnchecked = function(receiver, from, to) {
  var result, length$, t1, i;
  if (from === "")
    if (receiver === "")
      return to;
    else {
      result = $.StringBuffer_StringBuffer("");
      length$ = receiver.length;
      t1 = $.getInterceptor$JSArray(result);
      t1.add$1(result, to);
      for (i = 0; i < length$; ++i) {
        if (i >= receiver.length)
          throw $.ioore(i);
        t1.add$1(result, receiver[i]);
        t1.add$1(result, to);
      }
      return t1.toString$0(result);
    }
  else
    return $.stringReplaceJS(receiver, $.regExpMakeNative($.JSSyntaxRegExp$(from.replace($.regExpMakeNative($.get$quoteRegExp(), true), "\\$&"), false, false), true), to);
};

$.stringJoinUnchecked = function(array, separator) {
  return array.join(separator);
};

$.buildDynamicMetadata = function(inputTable) {
  var result, i, tag, tags, set, tagNames, j;
  result = [];
  for (i = 0; i < inputTable.length; ++i) {
    tag = inputTable[i][0];
    tags = inputTable[i][1];
    set = {};
    tagNames = tags.split("|");
    for (j = 0; j < tagNames.length; ++j)
      set[tagNames[j]] = true;
    result.push($.MetaInfo$(tag, tags, set));
  }
  return result;
};

$.BodyElementEvents$ = function(_ptr) {
  return new $.BodyElementEvents(_ptr);
};

$._JsonParser$ = function(json) {
  var t1 = new $._JsonParser(json, $.getInterceptor$JSStringJSArray(json).get$length(json), 0);
  t1._JsonParser$1(json);
  return t1;
};

$.TodoApp$ = function() {
  var t1 = new $.TodoApp($.List_List(null), $.query("#todo-list"), $.query("#main"), $.query("#toggle-all"), $.query("#footer"), $.query("#todo-count"), $.query("#clear-completed"), $.query("#filters a[href=\"#/\"]"), $.query("#filters a[href=\"#/active\"]"), $.query("#filters a[href=\"#/completed\"]"));
  t1.TodoApp$0();
  return t1;
};

$.EventListenerList$ = function(_ptr, _type) {
  return new $.EventListenerList(_ptr, _type);
};

$.Todo$ = function(id, title, completed) {
  return new $.Todo(id, title, completed);
};

$.Todo$fromJson = function(json) {
  var t1 = new $.Todo(null, null, null);
  t1.Todo$fromJson$1(json);
  return t1;
};

$.TodoWidget$ = function(todoApp, todo) {
  return new $.TodoWidget(todoApp, todo, null, null);
};

$.double_parse = function(source) {
  return $.Primitives_parseDouble(source);
};

$.LocalWindow__isDartLocation = function(thing, exception) {
  var t1;
  try {
    t1 = thing;
    t1 = typeof t1 === 'object' && t1 !== null && t1.is$Location();
    return t1;
  } catch (exception) {
    $.unwrapException(exception);
    return false;
  }

};

$.Random_Random = function(seed) {
  return $.CONSTANT6;
};

$.main = function() {
  $.TodoApp$();
};

$.htmlEscape = function(text) {
  var t1 = $.getInterceptor$JSString(text).replaceAll$2(text, "&", "&amp;");
  t1 = $.getInterceptor$JSString(t1).replaceAll$2(t1, "<", "&lt;");
  t1 = $.getInterceptor$JSString(t1).replaceAll$2(t1, ">", "&gt;");
  t1 = $.getInterceptor$JSString(t1).replaceAll$2(t1, "\"", "&quot;");
  return $.getInterceptor$JSString(t1).replaceAll$2(t1, "'", "&apos;");
};

$.window = function() {
  return window;
};

$.document = function() {
  return document;
};

$.query = function(selector) {
  return $.document().query$1(selector);
};

$._browserPrefix = function() {
  if ($._cachedBrowserPrefix == null)
    if ($._Device_isFirefox() === true)
      $._cachedBrowserPrefix = "-moz-";
    else if ($._Device_isIE() === true)
      $._cachedBrowserPrefix = "-ms-";
    else if ($._Device_isOpera() === true)
      $._cachedBrowserPrefix = "-o-";
    else
      $._cachedBrowserPrefix = "-webkit-";
  return $._cachedBrowserPrefix;
};

$.FormatException$ = function(message) {
  return new $.FormatException(message);
};

$.DocumentEvents$ = function(_ptr) {
  return new $.DocumentEvents(_ptr);
};

$.ElementEvents$ = function(_ptr) {
  return new $.ElementEvents(_ptr);
};

$.NoSuchMethodError$ = function(_receiver, _memberName, _arguments, _namedArguments, existingArgumentNames) {
  return new $.NoSuchMethodError(_receiver, _memberName, _arguments, _namedArguments, existingArgumentNames);
};

$.Events$ = function(_ptr) {
  return new $.Events(_ptr);
};

$.RuntimeError$ = function(message) {
  return new $.RuntimeError(message);
};

$.StackOverflowError$ = function() {
  return new $.StackOverflowError();
};

$._ExceptionImplementation$ = function(message) {
  return new $._ExceptionImplementation(message);
};

$.FixedSizeListIterator$ = function(array) {
  return new $.FixedSizeListIterator($.getInterceptor$JSStringJSArray(array).get$length(array), array, 0);
};

$._ChildNodeListLazy$ = function(_this) {
  return new $._ChildNodeListLazy(_this);
};

$.Primitives_objectHashCode = function(object) {
  var hash = object.$identityHash;
  if (hash == null) {
    hash = $.add($.Primitives_hashCodeSeed, 1);
    $.Primitives_hashCodeSeed = hash;
    object.$identityHash = hash;
  }
  return hash;
};

$.Primitives_parseDouble = function(string) {
  var result;
  $.checkString(string);
  if (!/^\s*(?:NaN|[+-]?(?:Infinity|(?:\.\d+|\d+(?:\.\d+)?)(?:[eE][+-]?\d+)?))\s*$/.test(string))
    throw $.$$throw($.FormatException$(string));
  result = parseFloat(string);
  if ($.CONSTANT2.get$isNaN(result) === true && !$.eqB(string, "NaN"))
    throw $.$$throw($.FormatException$(string));
  return result;
};

$.Primitives_objectTypeName = function(object) {
  var name$, decompiled, t1;
  name$ = $.constructorNameFallback(object);
  if ($.eqB(name$, "Object")) {
    decompiled = String(object.constructor).match(/^\s*function\s*(\S*)\s*\(/)[1];
    if (typeof decompiled === 'string')
      name$ = decompiled;
  }
  t1 = $.getInterceptor$JSString(name$);
  return t1.charCodeAt$1(name$, 0) === 36 ? t1.substring$1(name$, 1) : name$;
};

$.Primitives_objectToString = function(object) {
  return "Instance of '" + $.S($.Primitives_objectTypeName(object)) + "'";
};

$.Primitives_newList = function(length$) {
  var result;
  if (length$ == null)
    return new Array();
  if (!(typeof length$ === 'number' && Math.floor(length$) === length$) || length$ < 0)
    throw $.$$throw($.ArgumentError$(length$));
  result = new Array(length$);
  result.fixed$length = true;
  return result;
};

$.Primitives__fromCharCodeApply = function(array) {
  var end, t1, i, result, subarray, t2;
  end = array.length;
  for (t1 = end <= 500, i = 0, result = ""; i < end; i += 500) {
    if (t1)
      subarray = array;
    else {
      t2 = i + 500;
      t2 = t2 < end ? t2 : end;
      subarray = array.slice(i, t2);
    }
    result = result + String.fromCharCode.apply(null, subarray);
  }
  return result;
};

$.Primitives_stringFromCodePoints = function(codePoints) {
  var a, t1, t2;
  a = [];
  for (t1 = $.CONSTANT1.iterator$0(codePoints); t1.get$hasNext() === true;) {
    t2 = t1.next$0();
    if (!(typeof t2 === 'number' && Math.floor(t2) === t2))
      throw $.$$throw($.ArgumentError$(t2));
    if (t2 <= 65535)
      a.push(t2);
    else if (t2 <= 1114111) {
      a.push(55296 + ($.shr(t2 - 65536, 10) & 1023));
      a.push(56320 + (t2 & 1023));
    } else
      throw $.$$throw($.ArgumentError$(t2));
  }
  return $.Primitives__fromCharCodeApply(a);
};

$.Primitives_parseInt = function(string) {
  var match, base, result;
  $.checkString(string);
  match = /^\s*[+-]?(?:0(x)[a-f0-9]+|\d+)\s*$/i.exec(string);
  if (match == null)
    throw $.$$throw($.FormatException$(string));
  base = !($.index(match, 1) == null) ? 16 : 10;
  result = parseInt(string, base);
  if ($.CONSTANT2.get$isNaN(result) === true)
    throw $.$$throw($.FormatException$(string));
  return result;
};

$.Primitives_stringFromCharCodes = function(charCodes) {
  var t1, t2;
  for (t1 = $.CONSTANT1.iterator$0(charCodes); t1.get$hasNext() === true;) {
    t2 = t1.next$0();
    if (!(typeof t2 === 'number' && Math.floor(t2) === t2))
      throw $.$$throw($.ArgumentError$(t2));
    if (t2 < 0)
      throw $.$$throw($.ArgumentError$(t2));
    if (t2 > 65535)
      return $.Primitives_stringFromCodePoints(charCodes);
  }
  return $.Primitives__fromCharCodeApply(charCodes);
};

$.Error_safeToString = function(object) {
  var t1;
  if (typeof object === 'number' && Math.floor(object) === object || typeof object === 'number' || typeof object === 'boolean' || null == object)
    return $.getInterceptor(object).toString$0(object);
  if (typeof object === 'string') {
    t1 = $.CONSTANT.replaceAll$2(object, "\\", "\\\\");
    t1 = $.getInterceptor$JSString(t1).replaceAll$2(t1, "\n", "\\n");
    t1 = $.getInterceptor$JSString(t1).replaceAll$2(t1, "\r", "\\r");
    return "\"" + $.S($.getInterceptor$JSString(t1).replaceAll$2(t1, "\"", "\\\"")) + "\"";
  }
  return $.Primitives_objectToString(object);
};

$.LinkedHashMap_LinkedHashMap = function() {
  return $._LinkedHashMapImpl$();
};

$.RangeError$value = function(value) {
  return new $.RangeError("value " + $.S(value));
};

$.ArgumentError$ = function(message) {
  return new $.ArgumentError(message);
};

$._LinkedHashMapImpl$ = function() {
  var t1 = new $._LinkedHashMapImpl(null, null);
  t1._LinkedHashMapImpl$0();
  return t1;
};

$.Maps_mapToString = function(m) {
  var result = $.StringBuffer_StringBuffer("");
  $.Maps__emitMap(m, result, $.List_List(null));
  return $.getInterceptor(result).toString$0(result);
};

$.Maps__emitMap = function(m, result, visiting) {
  var t1, t2, t3;
  t1 = {};
  t2 = $.getInterceptor$JSArray(visiting);
  t2.add$1(visiting, m);
  t3 = $.getInterceptor$JSArray(result);
  t3.add$1(result, "{");
  t1.first_0 = true;
  $.getInterceptor$JSArray(m).forEach$1(m, new $.Maps__emitMap_anon(t1, visiting, result));
  t3.add$1(result, "}");
  t2.removeLast$0(visiting);
};

$.StringBuffer_StringBuffer = function(content$) {
  return $._StringBufferImpl$(content$);
};

$._ChildrenElementList$_wrap = function(element) {
  return new $._ChildrenElementList(element, element.get$$$dom_children());
};

$.DoubleLinkedQueue$ = function() {
  var t1 = new $.DoubleLinkedQueue(null);
  t1.DoubleLinkedQueue$0();
  return t1;
};

$.Queue_Queue = function() {
  return $.DoubleLinkedQueue$();
};

$._KeyValuePair$ = function(key, value) {
  return new $._KeyValuePair(key, value);
};

$.DoubleLinkedQueueEntry$ = function(e) {
  var t1 = new $.DoubleLinkedQueueEntry(null, null, null);
  t1.DoubleLinkedQueueEntry$1(e);
  return t1;
};

$.ListIterator$ = function(list) {
  return new $.ListIterator(0, list);
};

$._DoubleLinkedQueueIterator$ = function(_sentinel) {
  var t1 = new $._DoubleLinkedQueueIterator(_sentinel, null);
  t1._DoubleLinkedQueueIterator$1(_sentinel);
  return t1;
};

$._DoubleLinkedQueueEntrySentinel$ = function() {
  var t1 = new $._DoubleLinkedQueueEntrySentinel(null, null, null);
  t1.DoubleLinkedQueueEntry$1(null);
  t1._DoubleLinkedQueueEntrySentinel$0();
  return t1;
};

$._FrozenElementList$_wrap = function(_nodeList) {
  return new $._FrozenElementList(_nodeList);
};

$.Collections_forEach = function(iterable, f) {
  var t1;
  for (t1 = $.getInterceptor$JSArray(iterable).iterator$0(iterable); t1.get$hasNext() === true;)
    f.call$1(t1.next$0());
};

$.Collections_filter = function(source, destination, f) {
  var t1, t2;
  for (t1 = $.getInterceptor$JSArray(source).iterator$0(source); t1.get$hasNext() === true;) {
    t2 = t1.next$0();
    if (f.call$1(t2) === true)
      destination.push(t2);
  }
  return destination;
};

$.Collections_collectionToString = function(c) {
  var result = $.StringBuffer_StringBuffer("");
  $.Collections__emitCollection(c, result, $.List_List(null));
  return $.getInterceptor(result).toString$0(result);
};

$.Collections__emitCollection = function(c, result, visiting) {
  var t1, isList, t2, t3, first, t4;
  t1 = $.getInterceptor$JSArray(visiting);
  t1.add$1(visiting, c);
  isList = typeof c === 'object' && c !== null && (c.constructor === Array || c.is$List());
  t2 = $.getInterceptor$JSArray(result);
  t2.add$1(result, isList ? "[" : "{");
  for (t3 = $.getInterceptor$JSArray(c).iterator$0(c), first = true; t3.get$hasNext() === true; first = false) {
    t4 = t3.next$0();
    if (!first)
      t2.add$1(result, ", ");
    $.Collections__emitObject(t4, result, visiting);
  }
  t2.add$1(result, isList ? "]" : "}");
  t1.removeLast$0(visiting);
};

$.Collections__emitObject = function(o, result, visiting) {
  var t1;
  if (typeof o === 'object' && o !== null && (o.constructor === Array || o.is$Collection()))
    if ($.Collections__containsRef(visiting, o)) {
      t1 = $.getInterceptor$JSArray(result);
      t1.add$1(result, typeof o === 'object' && o !== null && (o.constructor === Array || o.is$List()) ? "[...]" : "{...}");
    } else
      $.Collections__emitCollection(o, result, visiting);
  else if (typeof o === 'object' && o !== null && o.is$Map())
    if ($.Collections__containsRef(visiting, o))
      $.getInterceptor$JSArray(result).add$1(result, "{...}");
    else
      $.Maps__emitMap(o, result, visiting);
  else
    $.getInterceptor$JSArray(result).add$1(result, o);
};

$.Collections__containsRef = function(c, ref) {
  var t1, t2;
  for (t1 = $.getInterceptor$JSArray(c).iterator$0(c); t1.get$hasNext() === true;) {
    t2 = t1.next$0();
    if (t2 == null ? ref == null : t2 === ref)
      return true;
  }
  return false;
};

$.UnsupportedError$ = function(message) {
  return new $.UnsupportedError(message);
};

$._FrozenElementListIterator$ = function(_list) {
  return new $._FrozenElementListIterator(_list, 0);
};

$.StateError$ = function(message) {
  return new $.StateError(message);
};

$._StringBufferImpl$ = function(content$) {
  var t1 = new $._StringBufferImpl(null, null);
  t1._StringBufferImpl$1(content$);
  return t1;
};

$._ElementFactoryProvider_createElement_html = function(html) {
  var match, t1, tag, parentTag, temp, element, t2;
  match = $.get$_START_TAG_REGEXP().firstMatch$1(html);
  if (!(match == null)) {
    t1 = match.group$1(1);
    tag = $.getInterceptor$JSString(t1).toLowerCase$0(t1);
    parentTag = $.CONSTANT5.containsKey$1(tag) === true ? $.CONSTANT5.operator$index$1(tag) : "div";
  } else {
    parentTag = "div";
    tag = null;
  }
  temp = $.Element_Element$tag(parentTag);
  temp.set$innerHtml(html);
  t1 = temp.get$children();
  if ($.eqB($.getInterceptor$JSStringJSArray(t1).get$length(t1), 1))
    element = $.index(temp.get$children(), 0);
  else {
    if ($.eqB(parentTag, "html")) {
      t1 = temp.get$children();
      t2 = $.eqB($.getInterceptor$JSStringJSArray(t1).get$length(t1), 2);
      t1 = t2;
    } else
      t1 = false;
    if (t1) {
      t1 = temp.get$children();
      element = $.index(t1, $.eqB(tag, "head") ? 0 : 1);
    } else {
      t1 = temp.get$children();
      throw $.$$throw($.ArgumentError$("HTML had " + $.S($.getInterceptor$JSStringJSArray(t1).get$length(t1)) + " " + "top level elements but 1 expected"));
    }
  }
  element.remove$0();
  return element;
};

$.Strings_join = function(strings, separator) {
  $.checkNull(strings);
  return $.stringJoinUnchecked($.Strings__toJsStringArray(strings), separator);
};

$.Strings__toJsStringArray = function(strings) {
  var length$, i, string, array;
  if (typeof strings !== 'string' && (typeof strings !== 'object' || strings === null || strings.constructor !== Array && !strings.is$JavaScriptIndexingBehavior()))
    return $.Strings__toJsStringArray$bailout(1, strings);
  $.checkNull(strings);
  length$ = strings.length;
  if ($.isJsArray(strings)) {
    for (i = 0; i < length$; ++i) {
      if (i >= strings.length)
        throw $.ioore(i);
      string = strings[i];
      if (!(typeof string === 'string'))
        throw $.$$throw($.ArgumentError$(string));
    }
    array = strings;
  } else {
    array = $.List_List(length$);
    for (i = 0; i < length$; ++i) {
      if (i >= strings.length)
        throw $.ioore(i);
      string = strings[i];
      if (!(typeof string === 'string'))
        throw $.$$throw($.ArgumentError$(string));
      array[i] = string;
    }
  }
  return array;
};

$._ElementAttributeMap$ = function(element) {
  return new $._ElementAttributeMap(element);
};

$.MetaInfo$ = function(_tag, _tags, _set) {
  return new $.MetaInfo(_tag, _tags, _set);
};

$.JSSyntaxRegExp$ = function(pattern, ignoreCase, multiLine) {
  return new $.JSSyntaxRegExp(pattern, multiLine, ignoreCase);
};

$.JSSyntaxRegExp__globalVersionOf = function(other) {
  var t1, t2, re;
  t1 = other.get$pattern();
  t2 = other.get$multiLine();
  re = $.JSSyntaxRegExp$(t1, other.get$ignoreCase(), t2);
  re._re = $.regExpMakeNative(re, true);
  return re;
};

$.RegExp_RegExp = function(pattern, ignoreCase, multiLine) {
  return $.JSSyntaxRegExp$(pattern, ignoreCase, multiLine);
};

$._HashSetImpl$ = function() {
  var t1 = new $._HashSetImpl(null);
  t1._HashSetImpl$0();
  return t1;
};

$.IllegalJSRegExpException$ = function(_pattern, _errmsg) {
  return new $.IllegalJSRegExpException(_pattern, _errmsg);
};

$.Exception_Exception = function(message) {
  return $._ExceptionImplementation$(message);
};

$.String_String$fromCharCodes = function(charCodes) {
  if (!$.isJsArray(charCodes))
    charCodes = $.List_List$from(charCodes);
  return $.Primitives_stringFromCharCodes(charCodes);
};

$._HashMapImpl$ = function() {
  var t1 = new $._HashMapImpl(null, null, null, null, null);
  t1._HashMapImpl$0();
  return t1;
};

$._HashMapImpl__computeLoadLimit = function(capacity) {
  return $.tdiv(capacity * 3, 4);
};

$._HashMapImpl__nextProbe = function(currentProbe, numberOfProbes, length$) {
  return $.and($.add(currentProbe, numberOfProbes), $.sub(length$, 1));
};

$._AttributeClassSet$ = function(_element) {
  return new $._AttributeClassSet(_element);
};

$.List_List = function(length$) {
  return $.Primitives_newList(length$);
};

$.HashMap_HashMap = function() {
  return $._HashMapImpl$();
};

$._HashSetIterator$ = function(set_) {
  var t1 = new $._HashSetIterator(set_._backingMap._keys, -1);
  t1._HashSetIterator$1(set_);
  return t1;
};

$.Set_Set = function() {
  return $._HashSetImpl$();
};

$.List_List$from = function(other) {
  var list, t1;
  list = $.List_List(null);
  for (t1 = $.getInterceptor$JSArray(other).iterator$0(other); t1.get$hasNext() === true;)
    list.push(t1.next$0());
  return list;
};

$.FilteredElementList$ = function(node) {
  return new $.FilteredElementList(node, node.get$nodes());
};

$._Device_userAgent = function() {
  return $.window().get$navigator().get$userAgent();
};

$._Device_isOpera = function() {
  var t1 = $._Device_userAgent();
  return $.getInterceptor$JSString(t1).contains$2(t1, "Opera", 0);
};

$.int_parse = function(source) {
  return $.Primitives_parseInt(source);
};

$._Device_isIE = function() {
  var t1, t2;
  if ($._Device_isOpera() !== true) {
    t1 = $._Device_userAgent();
    t2 = $.getInterceptor$JSString(t1).contains$2(t1, "MSIE", 0) === true;
    t1 = t2;
  } else
    t1 = false;
  return t1;
};

$._Device_isFirefox = function() {
  var t1 = $._Device_userAgent();
  return $.getInterceptor$JSString(t1).contains$2(t1, "Firefox", 0);
};

$.FrameSetElementEvents$ = function(_ptr) {
  return new $.FrameSetElementEvents(_ptr);
};

$._ElementCssClassSet$ = function(_element) {
  return new $._ElementCssClassSet(_element);
};

$.StringMatch$ = function(start, str, pattern) {
  return new $.StringMatch(start, str, pattern);
};

$._FrozenCssClassSet$ = function() {
  return new $._FrozenCssClassSet();
};

$._AllMatchesIterable$ = function(_re, _str) {
  return new $._AllMatchesIterable(_re, _str);
};

$._AllMatchesIterator$ = function(re, _str) {
  return new $._AllMatchesIterator($.JSSyntaxRegExp__globalVersionOf(re), _str, null, false);
};

$._MatchImplementation$ = function(pattern, str, start, end, _groups) {
  return new $._MatchImplementation(pattern, str, start, end, _groups);
};

$.Arrays_indexOf = function(a, element, startIndex, endIndex) {
  var i;
  if (startIndex >= a.length)
    return -1;
  if (startIndex < 0)
    startIndex = 0;
  for (i = startIndex; i < endIndex; ++i) {
    if (i < 0 || i >= a.length)
      throw $.ioore(i);
    if ($.eqB(a[i], element))
      return i;
  }
  return -1;
};

$.Lists_indexOf = function(a, element, startIndex, endIndex) {
  var i;
  if (typeof a !== 'string' && (typeof a !== 'object' || a === null || a.constructor !== Array && !a.is$JavaScriptIndexingBehavior()))
    return $.Lists_indexOf$bailout(1, a, element, startIndex, endIndex);
  if (typeof startIndex !== 'number')
    return $.Lists_indexOf$bailout(1, a, element, startIndex, endIndex);
  if (typeof endIndex !== 'number')
    return $.Lists_indexOf$bailout(1, a, element, startIndex, endIndex);
  if (startIndex >= a.length)
    return -1;
  if (startIndex < 0)
    startIndex = 0;
  for (i = startIndex; i < endIndex; ++i) {
    if (i !== (i | 0))
      throw $.iae(i);
    if (i < 0 || i >= a.length)
      throw $.ioore(i);
    if ($.eqB(a[i], element))
      return i;
  }
  return -1;
};

$.Lists_getRange = function(a, start, length$, accumulator) {
  var end, i;
  if (typeof a !== 'string' && (typeof a !== 'object' || a === null || a.constructor !== Array && !a.is$JavaScriptIndexingBehavior()))
    return $.Lists_getRange$bailout(1, a, start, length$, accumulator);
  if (typeof start !== 'number')
    return $.Lists_getRange$bailout(1, a, start, length$, accumulator);
  if ($.ltB(length$, 0))
    throw $.$$throw($.ArgumentError$("length"));
  if (start < 0)
    throw $.$$throw($.RangeError$value(start));
  if (typeof length$ !== 'number')
    throw $.iae(length$);
  end = start + length$;
  if (end > a.length)
    throw $.$$throw($.RangeError$value(end));
  for (i = start; i < end; ++i) {
    if (i !== (i | 0))
      throw $.iae(i);
    if (i < 0 || i >= a.length)
      throw $.ioore(i);
    accumulator.push(a[i]);
  }
  return accumulator;
};

$._LocationWrapper$ = function(_ptr) {
  return new $._LocationWrapper(_ptr);
};

$.InputElementEvents$ = function(_ptr) {
  return new $.InputElementEvents(_ptr);
};

$._LocationWrapper__get = function(p, m) {
  return p[m];
};

$.Console$ = function() {
  return new $.Console();
};

$.LocalWindowEvents$ = function(_ptr) {
  return new $.LocalWindowEvents(_ptr);
};

$.Strings__toJsStringArray$bailout = function(state0, env0, env1, env2) {
  switch (state0) {
    case 1:
      strings = env0;
      break;
    case 2:
      length$ = env1;
      strings = env0;
      break;
    case 3:
      length$ = env2;
      array = env1;
      strings = env0;
      break;
  }
  switch (state0) {
    case 0:
    case 1:
      state0 = 0;
      $.checkNull(strings);
      length$ = $.getInterceptor$JSStringJSArray(strings).get$length(strings);
    case 2:
      state0 = 0;
    case 3:
      var strings, length$, i, string, array;
      if (state0 === 0 && $.isJsArray(strings)) {
        for (i = 0; $.ltB(i, length$); ++i) {
          string = $.index(strings, i);
          if (!(typeof string === 'string'))
            throw $.$$throw($.ArgumentError$(string));
        }
        array = strings;
      } else
        switch (state0) {
          case 0:
            array = $.List_List(length$);
          case 3:
            state0 = 0;
            for (i = 0; $.ltB(i, length$); ++i) {
              string = $.index(strings, i);
              if (!(typeof string === 'string'))
                throw $.$$throw($.ArgumentError$(string));
              $.indexSet(array, i, string);
            }
        }
      return array;
  }
};

$.Lists_indexOf$bailout = function(state0, a, element, startIndex, endIndex) {
  var i;
  if ($.geB(startIndex, $.getInterceptor$JSStringJSArray(a).get$length(a)))
    return -1;
  if ($.ltB(startIndex, 0))
    startIndex = 0;
  for (i = startIndex; $.ltB(i, endIndex); i = $.add(i, 1))
    if ($.eqB($.index(a, i), element))
      return i;
  return -1;
};

$.Lists_getRange$bailout = function(state0, a, start, length$, accumulator) {
  var end, i;
  if ($.ltB(length$, 0))
    throw $.$$throw($.ArgumentError$("length"));
  if ($.ltB(start, 0))
    throw $.$$throw($.RangeError$value(start));
  end = $.add(start, length$);
  if ($.gtB(end, $.getInterceptor$JSStringJSArray(a).get$length(a)))
    throw $.$$throw($.RangeError$value(end));
  for (i = start; $.ltB(i, end); i = $.add(i, 1))
    accumulator.push($.index(a, i));
  return accumulator;
};

$.invokeClosure.call$5 = $.invokeClosure;
$.invokeClosure.$name = "invokeClosure";
$.typeNameInChrome.call$1 = $.typeNameInChrome;
$.typeNameInChrome.$name = "typeNameInChrome";
$.typeNameInSafari.call$1 = $.typeNameInSafari;
$.typeNameInSafari.$name = "typeNameInSafari";
$.typeNameInOpera.call$1 = $.typeNameInOpera;
$.typeNameInOpera.$name = "typeNameInOpera";
$.toStringWrapper.call$0 = $.toStringWrapper;
$.toStringWrapper.$name = "toStringWrapper";
$.typeNameInIE.call$1 = $.typeNameInIE;
$.typeNameInIE.$name = "typeNameInIE";
$.constructorNameFallback.call$1 = $.constructorNameFallback;
$.constructorNameFallback.$name = "constructorNameFallback";
$.typeNameInFirefox.call$1 = $.typeNameInFirefox;
$.typeNameInFirefox.$name = "typeNameInFirefox";
$.dynamicBind.call$4 = $.dynamicBind;
$.dynamicBind.$name = "dynamicBind";
Isolate.$finishClasses($$);
$$ = {};
$.CONSTANT3 = new Isolate.$isolateProperties.JSInt();
$.CONSTANT6 = new Isolate.$isolateProperties._Random();
$.CONSTANT = new Isolate.$isolateProperties.JSString();
$.CONSTANT0 = new Isolate.$isolateProperties.NullThrownError();
$.CONSTANT7 = new Isolate.$isolateProperties.Object();
Isolate.makeConstantList = function(list) {
  list.immutable$list = true;
  list.fixed$length = true;
  return list;
};
$.CONSTANT8 = Isolate.makeConstantList(["body", "head", "caption", "td", "colgroup", "col", "tr", "tbody", "tfoot", "thead", "track"]);
$.CONSTANT4 = new Isolate.$isolateProperties._DeletedKeySentinel();
$.CONSTANT5 = new Isolate.$isolateProperties.ConstantMap(11, {body: "html", head: "html", caption: "table", td: "tr", colgroup: "table", col: "colgroup", tr: "tbody", tbody: "table", tfoot: "table", thead: "table", track: "audio"}, Isolate.$isolateProperties.CONSTANT8);
$.CONSTANT1 = new Isolate.$isolateProperties.JSArray();
$.CONSTANT2 = new Isolate.$isolateProperties.JSNumber();
$._HashMapImpl__DELETED_KEY = Isolate.$isolateProperties.CONSTANT4;
$._HashMapImpl__INITIAL_CAPACITY = 8;
$._JsonParser_NUMBER_LITERAL = 45;
$._JsonParser_NULL_LITERAL = 110;
$._JsonParser_FALSE_LITERAL = 102;
$._JsonParser_LAST_ASCII = 125;
$._JsonParser_TRUE_LITERAL = 116;
$._JsonParser_NULL_STRING = "null";
$._JsonParser_FALSE_STRING = "false";
$._JsonParser_tokens = null;
$._JsonParser_STRING_LITERAL = 34;
$._JsonParser_TRUE_STRING = "true";
$._JsonParser_WHITESPACE = 32;
$._JsonParser_RBRACE = 125;
$._getTypeNameOf = null;
$._JsonParser_BACKSPACE = 8;
$._JsonParser_TAB = 9;
$._JsonParser_NEW_LINE = 10;
$._JsonParser_FORM_FEED = 12;
$._JsonParser_CARRIAGE_RETURN = 13;
$._JsonParser_QUOTE = 34;
$._JsonParser_PLUS = 43;
$.KeyCode_ENTER = 13;
$._JsonParser_MINUS = 45;
$.Primitives_hashCodeSeed = 0;
$._JsonParser_DOT = 46;
$._JsonParser_SLASH = 47;
$._JsonParser_CHAR_0 = 48;
$._JsonParser_SPACE = 32;
$._JsonParser_COMMA = 44;
$._JsonParser_CHAR_1 = 49;
$.Primitives_DOLLAR_CHAR_VALUE = 36;
$._JsonParser_CHAR_2 = 50;
$._JsonParser_CHAR_3 = 51;
$._JsonParser_CHAR_4 = 52;
$._JsonParser_CHAR_5 = 53;
$._JsonParser_CHAR_6 = 54;
$._JsonParser_CHAR_7 = 55;
$._JsonParser_CHAR_8 = 56;
$._JsonParser_CHAR_9 = 57;
$._JsonParser_COLON = 58;
$._JsonParser_CHAR_CAPITAL_E = 69;
$._JsonParser_LBRACKET = 91;
$._JsonParser_BACKSLASH = 92;
$._JsonParser_RBRACKET = 93;
$._JsonParser_CHAR_B = 98;
$._JsonParser_CHAR_E = 101;
$._JsonParser_CHAR_F = 102;
$._JsonParser_CHAR_N = 110;
$._JsonParser_CHAR_R = 114;
$._JsonParser_CHAR_T = 116;
$._JsonParser_CHAR_U = 117;
$._JsonParser_LBRACE = 123;
$._cachedBrowserPrefix = null;
$.getInterceptor$JSStringJSArray = function(receiver) {
  if (typeof receiver == 'string') return $.JSString.prototype;
  if (receiver != null && receiver.constructor == Array) return $.JSArray.prototype;
  return $.ObjectInterceptor.prototype;
};
$.getInterceptor$JSString = function(receiver) {
  if (typeof receiver == 'string') return $.JSString.prototype;
  return $.ObjectInterceptor.prototype;
};
$.getInterceptor$JSNumber = function(receiver) {
  if (typeof receiver == 'number') return $.JSNumber.prototype;
  return $.ObjectInterceptor.prototype;
};
$.getInterceptor = function(receiver) {
  if (typeof receiver == 'string') return $.JSString.prototype;
  if (receiver != null && receiver.constructor == Array) return $.JSArray.prototype;
  if (typeof receiver == 'number' && Math.floor(receiver) == receiver) return $.JSInt.prototype;
  if (typeof receiver == 'number') return $.JSDouble.prototype;
  if (receiver == null) return $.JSNull.prototype;
  if (typeof receiver == 'function') return $.JSFunction.prototype;
  if (typeof receiver == 'boolean') return $.JSBool.prototype;
  return $.ObjectInterceptor.prototype;
};
$.getInterceptor$JSArray = function(receiver) {
  if (receiver != null && receiver.constructor == Array) return $.JSArray.prototype;
  return $.ObjectInterceptor.prototype;
};
Isolate.$lazy($, 'safeConsole', 'Console_safeConsole', 'get$Console_safeConsole', function() {
  return $.Console$();
});
Isolate.$lazy($, 'quoteRegExp', 'quoteRegExp', 'get$quoteRegExp', function() {
  return $.JSSyntaxRegExp$("[-[\\]{}()*+?.,\\\\^$|#\\s]", false, false);
});
Isolate.$lazy($, 'random', 'UUID_random', 'get$UUID_random', function() {
  return $.Random_Random(null);
});
Isolate.$lazy($, '_START_TAG_REGEXP', '_START_TAG_REGEXP', 'get$_START_TAG_REGEXP', function() {
  return $.RegExp_RegExp("<(\\w+)", false, false);
});
var $ = null;
Isolate.$finishClasses($$);
$$ = {};
Isolate = Isolate.$finishIsolateConstructor(Isolate);
var $ = new Isolate();
$.$defineNativeClass = function(cls, desc) {
  var fields = desc[''];
  var fields_array = fields ? fields.split(',') : [];
  for (var i = 0; i < fields_array.length; i++) {
    $.$generateAccessor(fields_array[i], desc);
  }
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  for (var method in desc) {
    if (method) {        if (hasOwnProperty.call(desc, method)) {
        $.dynamicFunction(method)[cls] = desc[method];
      }
    }
  }
};

(function(table) {
  for (var key in table) {
    $.defineProperty(Object.prototype, key, table[key]);
  }
})({
 toString$0: function() { return $.toStringForNativeObject(this); },
 get$hashCode: function() { return $.hashCodeForNativeObject(this); },
 is$Collection: function() { return false; },
 is$JavaScriptIndexingBehavior: function() { return false; },
 is$Map: function() { return false; },
 is$Location: function() { return false; },
 is$List: function() { return false; },
 is$Element: function() { return false; }
});

$.$defineNativeClass('HTMLAnchorElement', {"":"hash>",
 toString$0: function() {
  return this.toString();
}
});

$.$defineNativeClass('HTMLAreaElement', {"":"hash>"
});

$.$defineNativeClass('Attr', {"":"value="
});

$.$defineNativeClass('HTMLBRElement', {
 clear$0: function() {
  return this.clear.call$0();
}
});

$.$defineNativeClass('HTMLBodyElement', {
 get$on: function() {
  return $.BodyElementEvents$(this);
}
});

$.$defineNativeClass('HTMLButtonElement', {"":"value="
});

$.$defineNativeClass('CharacterData', {"":"length>",
 remove$0: function() {
  return this.remove();
}
});

$.$defineNativeClass('CSSStyleDeclaration', {"":"length>",
 _getPropertyValue$1: function(propertyName) {
  return this.getPropertyValue(propertyName);
},
 getPropertyValue$1: function(propertyName) {
  var propValue = this._getPropertyValue$1(propertyName);
  return !(propValue == null) ? propValue : "";
},
 setProperty$3: function(propertyName, value, priority) {
  this.setProperty(propertyName, value, priority);
  if (!!this.setAttribute)
    this.setAttribute(propertyName, value);
},
 get$clear: function() {
  return this.getPropertyValue$1("clear");
},
 clear$0: function() {
  return this.get$clear().call$0();
},
 set$display: function(value) {
  this.setProperty$3("display", value, "");
},
 get$filter: function() {
  return this.getPropertyValue$1($.S($._browserPrefix()) + "filter");
},
 filter$1: function(arg0) {
  return this.get$filter().call$1(arg0);
}
});

$.$defineNativeClass('Document', {"":"$$dom_title:title}",
 get$on: function() {
  return $.DocumentEvents$(this);
},
 $$dom_getElementById$1: function(elementId) {
  return this.getElementById(elementId);
},
 $$dom_querySelector$1: function(selectors) {
  return this.querySelector(selectors);
},
 query$1: function(selectors) {
  if ($.RegExp_RegExp("^#[_a-zA-Z]\\w*$", false, false).hasMatch$1(selectors) === true)
    return this.$$dom_getElementById$1($.CONSTANT.substring$1(selectors, 1));
  return this.$$dom_querySelector$1(selectors);
}
});

$.$defineNativeClass('DocumentFragment', {
 get$children: function() {
  if (this._children == null)
    this._children = $.FilteredElementList$(this);
  return this._children;
},
 query$1: function(selectors) {
  return this.$$dom_querySelector$1(selectors);
},
 set$innerHtml: function(value) {
  if (Object.getPrototypeOf(this).hasOwnProperty('set$innerHtml')) {
    var t1, e, nodes;
    t1 = this.get$nodes();
    $.getInterceptor$JSArray(t1).clear$0(t1);
    e = $.Element_Element$tag("div");
    e.set$innerHtml(value);
    nodes = $.List_List$from(e.get$nodes());
    t1 = this.get$nodes();
    $.getInterceptor$JSArray(t1).addAll$1(t1, nodes);
  } else {
    return Object.prototype.set$innerHtml.call(this, value);
  }
},
 get$title: function() {
  return "";
},
 get$classes: function() {
  return $._FrozenCssClassSet$();
},
 get$style: function() {
  return $.Element_Element$tag("div").get$style();
},
 blur$0: function() {
},
 get$blur: function() {
  return new $.BoundClosure(this, 'blur$0');
},
 focus$0: function() {
},
 click$0: function() {
},
 get$click: function() {
  return new $.BoundClosure(this, 'click$0');
},
 set$title: function(value) {
  throw $.$$throw($.UnsupportedError$("Title can't be set for document fragments."));
},
 get$on: function() {
  return $.ElementEvents$(this);
},
 $$dom_querySelector$1: function(selectors) {
  return this.querySelector(selectors);
}
});

$.$defineNativeClass('DocumentType', {
 remove$0: function() {
  return this.remove();
}
});

$.$defineNativeClass('DOMException', {
 toString$0: function() {
  return this.toString();
}
});

$.$defineNativeClass('Element', {"":"$$dom_children:children~,innerHtml:innerHTML|,title=,$$dom_className:className},$$dom_firstElementChild:firstElementChild~,$$dom_lastElementChild:lastElementChild~,style>",
 get$attributes: function() {
  return $._ElementAttributeMap$(this);
},
 get$children: function() {
  if (Object.getPrototypeOf(this).hasOwnProperty('get$children')) {
    return $._ChildrenElementList$_wrap(this);
  } else {
    return Object.prototype.get$children.call(this);
  }
},
 set$children: function(value) {
  if (Object.getPrototypeOf(this).hasOwnProperty('set$children')) {
    var copy, children, t1;
    copy = $.List_List$from(value);
    children = this.get$children();
    t1 = $.getInterceptor$JSArray(children);
    t1.clear$0(children);
    t1.addAll$1(children, copy);
  } else {
    return Object.prototype.set$children.call(this, value);
  }
},
 query$1: function(selectors) {
  return this.$$dom_querySelector$1(selectors);
},
 get$classes: function() {
  if (Object.getPrototypeOf(this).hasOwnProperty('get$classes')) {
    return $._ElementCssClassSet$(this);
  } else {
    return Object.prototype.get$classes.call(this);
  }
},
 get$on: function() {
  if (Object.getPrototypeOf(this).hasOwnProperty('get$on')) {
    return $.ElementEvents$(this);
  } else {
    return Object.prototype.get$on.call(this);
  }
},
 click$0: function() {
  if (Object.getPrototypeOf(this).hasOwnProperty('click$0')) {
    return this.click();
  } else {
    return Object.prototype.click$0.call(this);
  }
},
 get$click: function() {
  return new $.BoundClosure(this, 'click$0');
},
 blur$0: function() {
  return this.blur();
},
 get$blur: function() {
  return new $.BoundClosure(this, 'blur$0');
},
 focus$0: function() {
  return this.focus();
},
 $$dom_getAttribute$1: function(name) {
  return this.getAttribute(name);
},
 $$dom_hasAttribute$1: function(name) {
  return this.hasAttribute(name);
},
 $$dom_querySelector$1: function(selectors) {
  return this.querySelector(selectors);
},
 $$dom_removeAttribute$1: function(name) {
  return this.removeAttribute(name);
},
 $$dom_setAttribute$2: function(name, value) {
  return this.setAttribute(name,value);
},
 is$Element: function() { return true; }
});

$.$defineNativeClass('EventException', {
 toString$0: function() {
  return this.toString();
}
});

$.$defineNativeClass('EventTarget', {
 get$on: function() {
  if (Object.getPrototypeOf(this).hasOwnProperty('get$on')) {
    return $.Events$(this);
  } else {
    return Object.prototype.get$on.call(this);
  }
},
 $$dom_addEventListener$3: function(type, listener, useCapture) {
  if (Object.getPrototypeOf(this).hasOwnProperty('$$dom_addEventListener$3')) {
    return this.addEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
  } else {
    return Object.prototype.$$dom_addEventListener$3.call(this, type, listener, useCapture);
  }
},
 $$dom_removeEventListener$3: function(type, listener, useCapture) {
  if (Object.getPrototypeOf(this).hasOwnProperty('$$dom_removeEventListener$3')) {
    return this.removeEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
  } else {
    return Object.prototype.$$dom_removeEventListener$3.call(this, type, listener, useCapture);
  }
}
});

$.$defineNativeClass('FileException', {
 toString$0: function() {
  return this.toString();
}
});

$.$defineNativeClass('HTMLFormElement', {"":"length>"
});

$.$defineNativeClass('HTMLFrameElement', {"":"location>"
});

$.$defineNativeClass('HTMLFrameSetElement', {
 get$on: function() {
  return $.FrameSetElementEvents$(this);
}
});

$.$defineNativeClass('HTMLCollection', {
 get$length: function() {
  if (Object.getPrototypeOf(this).hasOwnProperty('get$length')) {
    return this.length;
  } else {
    return Object.prototype.get$length.call(this);
  }
},
 operator$index$1: function(index) {
  return this[index];
},
 operator$indexSet$2: function(index, value) {
  throw $.$$throw($.UnsupportedError$("Cannot assign element of immutable List."));
},
 iterator$0: function() {
  return $.FixedSizeListIterator$(this);
},
 add$1: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 addLast$1: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 addAll$1: function(collection) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 forEach$1: function(f) {
  return $.Collections_forEach(this, f);
},
 filter$1: function(f) {
  return $.Collections_filter(this, [], f);
},
 get$isEmpty: function() {
  return $.eq($.getInterceptor$JSStringJSArray(this).get$length(this), 0);
},
 set$length: function(value) {
  if (Object.getPrototypeOf(this).hasOwnProperty('set$length')) {
    throw $.$$throw($.UnsupportedError$("Cannot resize immutable List."));
  } else {
    return Object.prototype.set$length.call(this, value);
  }
},
 clear$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot clear immutable List."));
},
 indexOf$2: function(element, start) {
  return $.Lists_indexOf(this, element, start, $.getInterceptor$JSStringJSArray(this).get$length(this));
},
 indexOf$1: function(element) {
  return this.indexOf$2(element, 0);
},
 get$last: function() {
  return this.operator$index$1($.sub(this.get$length(), 1));
},
 removeAt$1: function(pos) {
  throw $.$$throw($.UnsupportedError$("Cannot removeAt on immutable List."));
},
 removeLast$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot removeLast on immutable List."));
},
 getRange$2: function(start, rangeLength) {
  return $.Lists_getRange(this, start, rangeLength, []);
},
 is$List: function() { return true; },
 is$Collection: function() { return true; },
 is$JavaScriptIndexingBehavior: function() { return true; }
});

$.$defineNativeClass('HTMLDocument', {
 get$title: function() {
  return $.document().get$$$dom_title();
},
 set$title: function(value) {
  $.document().set$$$dom_title(value);
}
});

$.$defineNativeClass('HTMLOptionsCollection', {
 get$length: function() {
  return this.length;
},
 set$length: function(value) {
  this.length = value;
},
 remove$1: function(index) {
  return this.remove(index);
}
});

$.$defineNativeClass('XMLHttpRequestException', {
 toString$0: function() {
  return this.toString();
}
});

$.$defineNativeClass('HTMLInputElement', {"":"checked=,pattern>,selectionStart<,value=",
 get$on: function() {
  return $.InputElementEvents$(this);
},
 is$Element: function() { return true; }
});

$.$defineNativeClass('KeyboardEvent', {
 get$keyCode: function() {
  return this.keyCode;
}
});

$.$defineNativeClass('HTMLLIElement', {"":"value="
});

$.$defineNativeClass('Location', {"":"hash>",
 toString$0: function() {
  return this.toString();
},
 is$Location: function() { return true; }
});

$.$defineNativeClass('DOMWindow', {"":"localStorage>,navigator>",
 get$location: function() {
  var result = this.get$_location();
  if ($.LocalWindow__isDartLocation(result) === true)
    return result;
  if (null == this._location_wrapper)
    this._location_wrapper = $._LocationWrapper$(result);
  return this._location_wrapper;
},
 get$_location: function() {
  return this.location;
},
 get$console: function() {
  return $.get$Console_safeConsole();
},
 get$on: function() {
  return $.LocalWindowEvents$(this);
},
 $$dom_addEventListener$3: function(type, listener, useCapture) {
  return this.addEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
},
 $$dom_removeEventListener$3: function(type, listener, useCapture) {
  return this.removeEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
}
});

$.$defineNativeClass('HTMLMediaElement', {
 get$on: function() {
  return $.MediaElementEvents$(this);
}
});

$.$defineNativeClass('HTMLMeterElement', {"":"value="
});

$.$defineNativeClass('NamedNodeMap', {
 get$length: function() {
  return this.length;
},
 operator$index$1: function(index) {
  return this[index];
},
 operator$indexSet$2: function(index, value) {
  throw $.$$throw($.UnsupportedError$("Cannot assign element of immutable List."));
},
 iterator$0: function() {
  return $.FixedSizeListIterator$(this);
},
 add$1: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 addLast$1: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 addAll$1: function(collection) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 forEach$1: function(f) {
  return $.Collections_forEach(this, f);
},
 filter$1: function(f) {
  return $.Collections_filter(this, [], f);
},
 get$isEmpty: function() {
  return $.eq($.getInterceptor$JSStringJSArray(this).get$length(this), 0);
},
 set$length: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot resize immutable List."));
},
 clear$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot clear immutable List."));
},
 indexOf$2: function(element, start) {
  return $.Lists_indexOf(this, element, start, $.getInterceptor$JSStringJSArray(this).get$length(this));
},
 indexOf$1: function(element) {
  return this.indexOf$2(element, 0);
},
 get$last: function() {
  return this.operator$index$1($.sub(this.get$length(), 1));
},
 removeAt$1: function(pos) {
  throw $.$$throw($.UnsupportedError$("Cannot removeAt on immutable List."));
},
 removeLast$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot removeLast on immutable List."));
},
 getRange$2: function(start, rangeLength) {
  return $.Lists_getRange(this, start, rangeLength, []);
},
 is$List: function() { return true; },
 is$Collection: function() { return true; },
 is$JavaScriptIndexingBehavior: function() { return true; }
});

$.$defineNativeClass('Navigator', {"":"userAgent>"
});

$.$defineNativeClass('Node', {"":"$$dom_attributes:attributes~,$$dom_childNodes:childNodes~,$$dom_localName:localName~,$$dom_namespaceUri:namespaceURI~,text:textContent|",
 get$nodes: function() {
  return $._ChildNodeListLazy$(this);
},
 remove$0: function() {
  if (Object.getPrototypeOf(this).hasOwnProperty('remove$0')) {
    var t1 = this.parentNode;
    if (!(t1 == null))
      t1.$$dom_removeChild$1(this);
  } else {
    return Object.prototype.remove$0.call(this);
  }
},
 replaceWith$1: function(otherNode, exception) {
  var parent$;
  try {
    parent$ = this.parentNode;
    parent$.$$dom_replaceChild$2(otherNode, this);
  } catch (exception) {
    $.unwrapException(exception);
  }

  return this;
},
 $$dom_addEventListener$3: function(type, listener, useCapture) {
  return this.addEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
},
 $$dom_appendChild$1: function(newChild) {
  return this.appendChild(newChild);
},
 $$dom_removeChild$1: function(oldChild) {
  return this.removeChild(oldChild);
},
 $$dom_removeEventListener$3: function(type, listener, useCapture) {
  return this.removeEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
},
 $$dom_replaceChild$2: function(newChild, oldChild) {
  return this.replaceChild(newChild,oldChild);
}
});

$.$defineNativeClass('NodeList', {
 get$length: function() {
  return this.length;
},
 operator$index$1: function(index) {
  return this[index];
},
 operator$indexSet$2: function(index, value) {
  throw $.$$throw($.UnsupportedError$("Cannot assign element of immutable List."));
},
 iterator$0: function() {
  return $.FixedSizeListIterator$(this);
},
 add$1: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 addLast$1: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 addAll$1: function(collection) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 forEach$1: function(f) {
  return $.Collections_forEach(this, f);
},
 filter$1: function(f) {
  return $.Collections_filter(this, [], f);
},
 get$isEmpty: function() {
  return $.eq($.getInterceptor$JSStringJSArray(this).get$length(this), 0);
},
 set$length: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot resize immutable List."));
},
 clear$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot clear immutable List."));
},
 indexOf$2: function(element, start) {
  return $.Lists_indexOf(this, element, start, $.getInterceptor$JSStringJSArray(this).get$length(this));
},
 indexOf$1: function(element) {
  return this.indexOf$2(element, 0);
},
 get$last: function() {
  return this.operator$index$1($.sub(this.get$length(), 1));
},
 removeAt$1: function(pos) {
  throw $.$$throw($.UnsupportedError$("Cannot removeAt on immutable List."));
},
 removeLast$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot removeLast on immutable List."));
},
 getRange$2: function(start, rangeLength) {
  return $.Lists_getRange(this, start, rangeLength, []);
},
 is$List: function() { return true; },
 is$Collection: function() { return true; },
 is$JavaScriptIndexingBehavior: function() { return true; }
});

$.$defineNativeClass('HTMLOptionElement', {"":"value="
});

$.$defineNativeClass('HTMLOutputElement', {"":"value="
});

$.$defineNativeClass('HTMLParamElement', {"":"value="
});

$.$defineNativeClass('HTMLProgressElement', {"":"value="
});

$.$defineNativeClass('RadioNodeList', {"":"value="
});

$.$defineNativeClass('RangeException', {
 toString$0: function() {
  return this.toString();
}
});

$.$defineNativeClass('HTMLSelectElement', {"":"length=,value="
});

$.$defineNativeClass('ShadowRoot', {"":"innerHtml:innerHTML|"
});

$.$defineNativeClass('Storage', {
 containsKey$1: function(key) {
  return !(this.$$dom_getItem$1(key) == null);
},
 operator$index$1: function(key) {
  return this.$$dom_getItem$1(key);
},
 operator$indexSet$2: function(key, value) {
  this.$$dom_setItem$2(key, value);
},
 remove$1: function(key) {
  var value = this.operator$index$1(key);
  this.$$dom_removeItem$1(key);
  return value;
},
 clear$0: function() {
  return this.$$dom_clear$0();
},
 forEach$1: function(f) {
  var i, key;
  for (i = 0; true; ++i) {
    key = this.$$dom_key$1(i);
    if (key == null)
      return;
    f.call$2(key, this.operator$index$1(key));
  }
},
 get$length: function() {
  return this.length;
},
 get$isEmpty: function() {
  return this.$$dom_key$1(0) == null;
},
 $$dom_clear$0: function() {
  return this.clear();
},
 $$dom_getItem$1: function(key) {
  return this.getItem(key);
},
 $$dom_key$1: function(index) {
  return this.key(index);
},
 $$dom_removeItem$1: function(key) {
  return this.removeItem(key);
},
 $$dom_setItem$2: function(key, data) {
  return this.setItem(key,data);
},
 is$Map: function() { return true; }
});

$.$defineNativeClass('StorageEvent', {"":"key>"
});

$.$defineNativeClass('HTMLTextAreaElement', {"":"selectionStart<,value="
});

$.$defineNativeClass('Uint8Array', {
 get$length: function() {
  return this.length;
},
 operator$index$1: function(index) {
  return this[index];
},
 operator$indexSet$2: function(index, value) {
  this[index] = value;
},
 iterator$0: function() {
  return $.FixedSizeListIterator$(this);
},
 add$1: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 addLast$1: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 addAll$1: function(collection) {
  throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
},
 forEach$1: function(f) {
  return $.Collections_forEach(this, f);
},
 filter$1: function(f) {
  return $.Collections_filter(this, [], f);
},
 get$isEmpty: function() {
  return $.eq($.getInterceptor$JSStringJSArray(this).get$length(this), 0);
},
 set$length: function(value) {
  throw $.$$throw($.UnsupportedError$("Cannot resize immutable List."));
},
 clear$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot clear immutable List."));
},
 indexOf$2: function(element, start) {
  return $.Lists_indexOf(this, element, start, $.getInterceptor$JSStringJSArray(this).get$length(this));
},
 indexOf$1: function(element) {
  return this.indexOf$2(element, 0);
},
 get$last: function() {
  return this.operator$index$1($.sub(this.get$length(), 1));
},
 removeAt$1: function(pos) {
  throw $.$$throw($.UnsupportedError$("Cannot removeAt on immutable List."));
},
 removeLast$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot removeLast on immutable List."));
},
 getRange$2: function(start, rangeLength) {
  return $.Lists_getRange(this, start, rangeLength, []);
},
 is$List: function() { return true; },
 is$Collection: function() { return true; },
 is$JavaScriptIndexingBehavior: function() { return true; }
});

$.$defineNativeClass('XPathException', {
 toString$0: function() {
  return this.toString();
}
});

$.$defineNativeClass('IDBDatabaseException', {
 toString$0: function() {
  return this.toString();
}
});

$.$defineNativeClass('SVGStyleElement', {
 get$title: function() {
  return this.title;
},
 set$title: function(value) {
  this.title = value;
}
});

$.$defineNativeClass('SVGElement', {
 get$classes: function() {
  if (this._cssClassSet == null)
    this._cssClassSet = $._AttributeClassSet$(this);
  return this._cssClassSet;
},
 get$children: function() {
  return $.FilteredElementList$(this);
},
 set$children: function(value) {
  var children, t1;
  children = this.get$children();
  t1 = $.getInterceptor$JSArray(children);
  t1.clear$0(children);
  t1.addAll$1(children, value);
},
 set$innerHtml: function(svg) {
  var container = $.Element_Element$tag("div");
  container.set$innerHtml("<svg version=\"1.1\">" + $.S(svg) + "</svg>");
  this.set$children($.index(container.get$children(), 0).get$children());
},
 get$$$dom_children: function() {
  throw $.$$throw($.UnsupportedError$("Cannot get dom_children on SVG."));
},
 click$0: function() {
  throw $.$$throw($.UnsupportedError$("Cannot invoke click SVG."));
},
 get$click: function() {
  return new $.BoundClosure(this, 'click$0');
}
});

$.$defineNativeClass('SVGException', {
 toString$0: function() {
  return this.toString();
}
});

// 51 dynamic classes.
// 195 classes
// 17 !leaf
(function() {
  var v0_MediaElement = 'HTMLMediaElement|HTMLAudioElement|HTMLVideoElement', v1_SvgElement = 'SVGElement|SVGAElement|SVGAltGlyphDefElement|SVGTextContentElement|SVGTextPositioningElement|SVGAltGlyphElement|SVGTextElement|SVGTRefElement|SVGTSpanElement|SVGTextPathElement|SVGAltGlyphItemElement|SVGAnimationElement|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateTransformElement|SVGAnimateMotionElement|SVGSetElement|SVGCircleElement|SVGClipPathElement|SVGComponentTransferFunctionElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEFuncAElement|SVGCursorElement|SVGDefsElement|SVGDescElement|SVGEllipseElement|SVGFEBlendElement|SVGFEColorMatrixElement|SVGFECompositeElement|SVGFEConvolveMatrixElement|SVGFEDisplacementMapElement|SVGFEComponentTransferElement|SVGFEFloodElement|SVGFEGaussianBlurElement|SVGFEImageElement|SVGFEMergeElement|SVGFEMorphologyElement|SVGFEDiffuseLightingElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGFETileElement|SVGFETurbulenceElement|SVGFilterElement|SVGFEMergeNodeElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGForeignObjectElement|SVGGElement|SVGGlyphRefElement|SVGImageElement|SVGHKernElement|SVGFEDistantLightElement|SVGLineElement|SVGGradientElement|SVGLinearGradientElement|SVGRadialGradientElement|SVGMaskElement|SVGMetadataElement|SVGMPathElement|SVGMarkerElement|SVGPathElement|SVGGlyphElement|SVGMissingGlyphElement|SVGFESpecularLightingElement|SVGFEDropShadowElement|SVGPatternElement|SVGPolygonElement|SVGPolylineElement|SVGFEOffsetElement|SVGRectElement|SVGScriptElement|SVGStopElement|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGSVGElement|SVGTitleElement|SVGUseElement|SVGViewElement|SVGVKernElement', v2_Element = [v0_MediaElement, v1_SvgElement, 'Element|HTMLElement|HTMLAnchorElement|HTMLAppletElement|HTMLAreaElement|HTMLBRElement|HTMLBaseElement|HTMLBaseFontElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDataListElement|HTMLDetailsElement|HTMLDirectoryElement|HTMLDivElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormElement|HTMLFrameElement|HTMLFrameSetElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement|HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLinkElement|HTMLLegendElement|HTMLMapElement|HTMLMarqueeElement|HTMLMenuElement|HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement|HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableElement|HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTitleElement|HTMLTrackElement|HTMLUListElement|HTMLUnknownElement'].join('|'), v3_CharacterData = 'CharacterData|Text|CDATASection|Comment', v4_Document = 'Document|HTMLDocument|SVGDocument', v5_DocumentFragment = 'DocumentFragment|ShadowRoot', v6_Node = [v2_Element, v3_CharacterData, v4_Document, v5_DocumentFragment, 'Node|Attr|DocumentType|EntityReference|Notation|ProcessingInstruction'].join('|');
  $.dynamicSetMetadata([['HTMLCollection', 'HTMLCollection|HTMLOptionsCollection'], ['CharacterData', v3_CharacterData], ['SVGElement', v1_SvgElement], ['Document', v4_Document], ['HTMLMediaElement', v0_MediaElement], ['DocumentFragment', v5_DocumentFragment], ['Element', v2_Element], ['Uint8Array', 'Uint8Array|Uint8ClampedArray'], ['Node', v6_Node], ['EventTarget', [v6_Node, 'EventTarget|DOMWindow'].join('|')], ['NodeList', 'NodeList|RadioNodeList']]);
})();


//
// BEGIN invoke [main].
//
if (typeof document !== 'undefined' && document.readyState !== 'complete') {
  document.addEventListener('readystatechange', function () {
    if (document.readyState == 'complete') {
      if (typeof dartMainRunner === 'function') {
        dartMainRunner(function() { $.main(); });
      } else {
        $.main();
      }
    }
  }, false);
} else {
  if (typeof dartMainRunner === 'function') {
    dartMainRunner(function() { $.main(); });
  } else {
    $.main();
  }
}
//
// END invoke [main].
//

function init() {
Isolate.$isolateProperties = {};
function generateAccessor(field, prototype) {
  var len = field.length;
  var lastCharCode = field.charCodeAt(len - 1);
  var needsAccessor = (lastCharCode & 63) >= 60;
  if (needsAccessor) {
    var needsGetter = (lastCharCode & 3) > 0;
    var needsSetter = (lastCharCode & 2) == 0;
    var renaming = (lastCharCode & 64) != 0;
    var accessorName = field = field.substring(0, len - 1);
    if (renaming) {
      var divider = field.indexOf(":");
      accessorName = field.substring(0, divider);
      field = field.substring(divider + 1);
    }
    if (needsGetter) {
      var getterString = "return this." + field + ";";
      prototype["get$" + accessorName] = new Function(getterString);
    }
    if (needsSetter) {
      var setterString = "this." + field + " = v;";
      prototype["set$" + accessorName] = new Function("v", setterString);
    }
  }
  return field;
};
Isolate.$isolateProperties.$generateAccessor = generateAccessor;
Isolate.$defineClass = function(cls, fields, prototype) {
  var constructor;
  if (typeof fields == 'function') {
    constructor = fields;
  } else {
    var str = "function " + cls + "(";
    var body = "";
    for (var i = 0; i < fields.length; i++) {
      if (i != 0) str += ", ";
      var field = fields[i];
      field = generateAccessor(field, prototype);
      str += field;
      body += "this." + field + " = " + field + ";\n";
    }
    str += ") {" + body + "}\n";
    str += "return " + cls + ";";
    constructor = new Function(str)();
  }
  constructor.prototype = prototype;
  constructor.builtin$cls = cls;
  return constructor;
};
var supportsProto = false;
var tmp = Isolate.$defineClass('c', ['f?'], {}).prototype;
if (tmp.__proto__) {
  tmp.__proto__ = {};
  if (typeof tmp.get$f !== 'undefined') supportsProto = true;
}
Isolate.$pendingClasses = {};
Isolate.$finishClasses = function(collectedClasses) {
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  for (var cls in collectedClasses) {
    if (hasOwnProperty.call(collectedClasses, cls)) {
      var desc = collectedClasses[cls];
      var fields = desc[''], supr;
      if (typeof fields == 'string') {
        var s = fields.split(';'); supr = s[0];
        fields = s[1] == '' ? [] : s[1].split(',');
      } else {
        supr = desc['super'];
      }
      Isolate.$isolateProperties[cls] = Isolate.$defineClass(cls, fields, desc);
      if (supr) Isolate.$pendingClasses[cls] = supr;
    }
  }
  var pendingClasses = Isolate.$pendingClasses;
  Isolate.$pendingClasses = {};
  var finishedClasses = {};
  function finishClass(cls) {
    var hasOwnProperty = Object.prototype.hasOwnProperty;
    if (hasOwnProperty.call(finishedClasses, cls)) return;
    finishedClasses[cls] = true;
    var superclass = pendingClasses[cls];
    if (!superclass) return;
    finishClass(superclass);
    var constructor = Isolate.$isolateProperties[cls];
    var superConstructor = Isolate.$isolateProperties[superclass];
    var prototype = constructor.prototype;
    if (supportsProto) {
      prototype.__proto__ = superConstructor.prototype;
      prototype.constructor = constructor;
    } else {
      function tmp() {};
      tmp.prototype = superConstructor.prototype;
      var newPrototype = new tmp();
      constructor.prototype = newPrototype;
      newPrototype.constructor = constructor;
      for (var member in prototype) {
        if (!member) continue;          if (hasOwnProperty.call(prototype, member)) {
          newPrototype[member] = prototype[member];
        }
      }
    }
  }
  for (var cls in pendingClasses) finishClass(cls);
};
Isolate.$lazy = function(prototype, staticName, fieldName, getterName, lazyValue) {
  var getter = new Function("{ return $." + fieldName + ";}");
  var sentinelUndefined = {};
  var sentinelInProgress = {};
  prototype[fieldName] = sentinelUndefined;
  prototype[getterName] = function() {
    var result = $[fieldName];
    try {
      if (result === sentinelUndefined) {
        $[fieldName] = sentinelInProgress;
        try {
          result = $[fieldName] = lazyValue();
        } catch (e) {
          if ($[fieldName] === sentinelInProgress) {
            $[fieldName] = null;
          }
          throw e;
        }
      } else if (result === sentinelInProgress) {
        $.throwCyclicInit(staticName);
      }
      return result;
    } finally {
      $[getterName] = getter;
    }
  };
};
Isolate.$finishIsolateConstructor = function(oldIsolate) {
  var isolateProperties = oldIsolate.$isolateProperties;
  var isolatePrototype = oldIsolate.prototype;
  var str = "{\n";
  str += "var properties = Isolate.$isolateProperties;\n";
  for (var staticName in isolateProperties) {
    if (Object.prototype.hasOwnProperty.call(isolateProperties, staticName)) {
      str += "this." + staticName + "= properties." + staticName + ";\n";
    }
  }
  str += "}\n";
  var newIsolate = new Function(str);
  newIsolate.prototype = isolatePrototype;
  isolatePrototype.constructor = newIsolate;
  newIsolate.$isolateProperties = isolateProperties;
  return newIsolate;
};
}

//@ sourceMappingURL=app.dart.js.map