text: /*! ScrollMagic v2.0.5 | (c) 2015 Jan Paepke (@janpaepke) | license & info: http://scrollmagic.io */
  
  ! function (e, t) {
      "function" == typeof define && define.amd ? define(t) : "object" == typeof exports ? module.exports = t() : e.ScrollMagic = t()
  }(this, function () {
      "use strict";
      var e = function () {};
      e.version = "2.0.5", window.addEventListener("mousewheel", function () {});
      var t = "data-scrollmagic-pin-spacer";
      e.Controller = function (r) {
          var o, s, a = "ScrollMagic.Controller",
              l = "FORWARD",
              c = "REVERSE",
              u = "PAUSED",
              f = n.defaults,
              d = this,
              h = i.extend({}, f, r),
              g = [],
              p = !1,
              v = 0,
              m = u,
              w = !0,
              y = 0,
              S = !0,
              b = function () {
                  for (var e in h) f.hasOwnProperty(e) || delete h[e];
                  if (h.container = i.get.elements(h.container)[0], !h.container) throw a + " init failed.";
                  w = h.container === window || h.container === document.body || !document.body.contains(h.container), w && (h.container = window), y = z(), h.container.addEventListener("resize", T), h.container.addEventListener("scroll", T), h.refreshInterval = parseInt(h.refreshInterval) || f.refreshInterval, E()
              },
              E = function () {
                  h.refreshInterval > 0 && (s = window.setTimeout(A, h.refreshInterval))
              },
              x = function () {
                  return h.vertical ? i.get.scrollTop(h.container) : i.get.scrollLeft(h.container)
              },
              z = function () {
                  return h.vertical ? i.get.height(h.container) : i.get.width(h.container)
              },
              C = this._setScrollPos = function (e) {
                  h.vertical ? w ? window.scrollTo(i.get.scrollLeft(), e) : h.container.scrollTop = e : w ? window.scrollTo(e, i.get.scrollTop()) : h.container.scrollLeft = e
              },
              F = function () {
                  if (S && p) {
                      var e = i.type.Array(p) ? p : g.slice(0);
                      p = !1;
                      var t = v;
                      v = d.scrollPos();
                      var n = v - t;
                      0 !== n && (m = n > 0 ? l : c), m === c && e.reverse(), e.forEach(function (e) {
                          e.update(!0)
                      })
                  }
              },
              L = function () {
                  o = i.rAF(F)
              },
              T = function (e) {
                  "resize" == e.type && (y = z(), m = u), p !== !0 && (p = !0, L())
              },
              A = function () {
                  if (!w && y != z()) {
                      var e;
                      try {
                          e = new Event("resize", {
                              bubbles: !1,
                              cancelable: !1
                          })
                      } catch (t) {
                          e = document.createEvent("Event"), e.initEvent("resize", !1, !1)
                      }
                      h.container.dispatchEvent(e)
                  }
                  g.forEach(function (e) {
                      e.refresh()
                  }), E()
              };
          this._options = h;
          var O = function (e) {
              if (e.length <= 1) return e;
              var t = e.slice(0);
              return t.sort(function (e, t) {
                  return e.scrollOffset() > t.scrollOffset() ? 1 : -1
              }), t
          };
          return this.addScene = function (t) {
              if (i.type.Array(t)) t.forEach(function (e) {
                  d.addScene(e)
              });
              else if (t instanceof e.Scene)
                  if (t.controller() !== d) t.addTo(d);
                  else if (g.indexOf(t) < 0) {
                  g.push(t), g = O(g), t.on("shift.controller_sort", function () {
                      g = O(g)
                  });
                  for (var n in h.globalSceneOptions) t[n] && t[n].call(t, h.globalSceneOptions[n])
              }
              return d
          }, this.removeScene = function (e) {
              if (i.type.Array(e)) e.forEach(function (e) {
                  d.removeScene(e)
              });
              else {
                  var t = g.indexOf(e);
                  t > -1 && (e.off("shift.controller_sort"), g.splice(t, 1), e.remove())
              }
              return d
          }, this.updateScene = function (t, n) {
              return i.type.Array(t) ? t.forEach(function (e) {
                  d.updateScene(e, n)
              }) : n ? t.update(!0) : p !== !0 && t instanceof e.Scene && (p = p || [], -1 == p.indexOf(t) && p.push(t), p = O(p), L()), d
          }, this.update = function (e) {
              return T({
                  type: "resize"
              }), e && F(), d
          }, this.scrollTo = function (n, r) {
              if (i.type.Number(n)) C.call(h.container, n, r);
              else if (n instanceof e.Scene) n.controller() === d && d.scrollTo(n.scrollOffset(), r);
              else if (i.type.Function(n)) C = n;
              else {
                  var o = i.get.elements(n)[0];
                  if (o) {
                      for (; o.parentNode.hasAttribute(t);) o = o.parentNode;
                      var s = h.vertical ? "top" : "left",
                          a = i.get.offset(h.container),
                          l = i.get.offset(o);
                      w || (a[s] -= d.scrollPos()), d.scrollTo(l[s] - a[s], r)
                  }
              }
              return d
          }, this.scrollPos = function (e) {
              return arguments.length ? (i.type.Function(e) && (x = e), d) : x.call(d)
          }, this.info = function (e) {
              var t = {
                  size: y,
                  vertical: h.vertical,
                  scrollPos: v,
                  scrollDirection: m,
                  container: h.container,
                  isDocument: w
              };
              return arguments.length ? void 0 !== t[e] ? t[e] : void 0 : t
          }, this.loglevel = function () {
              return d
          }, this.enabled = function (e) {
              return arguments.length ? (S != e && (S = !!e, d.updateScene(g, !0)), d) : S
          }, this.destroy = function (e) {
              window.clearTimeout(s);
              for (var t = g.length; t--;) g[t].destroy(e);
              return h.container.removeEventListener("resize", T), h.container.removeEventListener("scroll", T), i.cAF(o), null
          }, b(), d
      };
      var n = {
          defaults: {
              container: window,
              vertical: !0,
              globalSceneOptions: {},
              loglevel: 2,
              refreshInterval: 100
          }
      };
      e.Controller.addOption = function (e, t) {
          n.defaults[e] = t
      }, e.Controller.extend = function (t) {
          var n = this;
          e.Controller = function () {
              return n.apply(this, arguments), this.$super = i.extend({}, this), t.apply(this, arguments) || this
          }, i.extend(e.Controller, n), e.Controller.prototype = n.prototype, e.Controller.prototype.constructor = e.Controller
      }, e.Scene = function (n) {
          var o, s, a = "BEFORE",
              l = "DURING",
              c = "AFTER",
              u = r.defaults,
              f = this,
              d = i.extend({}, u, n),
              h = a,
              g = 0,
              p = {
                  start: 0,
                  end: 0
              },
              v = 0,
              m = !0,
              w = function () {
                  for (var e in d) u.hasOwnProperty(e) || delete d[e];
                  for (var t in u) L(t);
                  C()
              },
              y = {};
          this.on = function (e, t) {
              return i.type.Function(t) && (e = e.trim().split(" "), e.forEach(function (e) {
                  var n = e.split("."),
                      r = n[0],
                      i = n[1];
                  "*" != r && (y[r] || (y[r] = []), y[r].push({
                      namespace: i || "",
                      callback: t
                  }))
              })), f
          }, this.off = function (e, t) {
              return e ? (e = e.trim().split(" "), e.forEach(function (e) {
                  var n = e.split("."),
                      r = n[0],
                      i = n[1] || "",
                      o = "*" === r ? Object.keys(y) : [r];
                  o.forEach(function (e) {
                      for (var n = y[e] || [], r = n.length; r--;) {
                          var o = n[r];
                          !o || i !== o.namespace && "*" !== i || t && t != o.callback || n.splice(r, 1)
                      }
                      n.length || delete y[e]
                  })
              }), f) : f
          }, this.trigger = function (t, n) {
              if (t) {
                  var r = t.trim().split("."),
                      i = r[0],
                      o = r[1],
                      s = y[i];
                  s && s.forEach(function (t) {
                      o && o !== t.namespace || t.callback.call(f, new e.Event(i, t.namespace, f, n))
                  })
              }
              return f
          }, f.on("change.internal", function (e) {
              "loglevel" !== e.what && "tweenChanges" !== e.what && ("triggerElement" === e.what ? E() : "reverse" === e.what && f.update())
          }).on("shift.internal", function () {
              S(), f.update()
          }), this.addTo = function (t) {
              return t instanceof e.Controller && s != t && (s && s.removeScene(f), s = t, C(), b(!0), E(!0), S(), s.info("container").addEventListener("resize", x), t.addScene(f), f.trigger("add", {
                  controller: s
              }), f.update()), f
          }, this.enabled = function (e) {
              return arguments.length ? (m != e && (m = !!e, f.update(!0)), f) : m
          }, this.remove = function () {
              if (s) {
                  s.info("container").removeEventListener("resize", x);
                  var e = s;
                  s = void 0, e.removeScene(f), f.trigger("remove")
              }
              return f
          }, this.destroy = function (e) {
              return f.trigger("destroy", {
                  reset: e
              }), f.remove(), f.off("*.*"), null
          }, this.update = function (e) {
              if (s)
                  if (e)
                      if (s.enabled() && m) {
                          var t, n = s.info("scrollPos");
                          t = d.duration > 0 ? (n - p.start) / (p.end - p.start) : n >= p.start ? 1 : 0, f.trigger("update", {
                              startPos: p.start,
                              endPos: p.end,
                              scrollPos: n
                          }), f.progress(t)
                      } else T && h === l && O(!0);
              else s.updateScene(f, !1);
              return f
          }, this.refresh = function () {
              return b(), E(), f
          }, this.progress = function (e) {
              if (arguments.length) {
                  var t = !1,
                      n = h,
                      r = s ? s.info("scrollDirection") : "PAUSED",
                      i = d.reverse || e >= g;
                  if (0 === d.duration ? (t = g != e, g = 1 > e && i ? 0 : 1, h = 0 === g ? a : l) : 0 > e && h !== a && i ? (g = 0, h = a, t = !0) : e >= 0 && 1 > e && i ? (g = e, h = l, t = !0) : e >= 1 && h !== c ? (g = 1, h = c, t = !0) : h !== l || i || O(), t) {
                      var o = {
                              progress: g,
                              state: h,
                              scrollDirection: r
                          },
                          u = h != n,
                          p = function (e) {
                              f.trigger(e, o)
                          };
                      u && n !== l && (p("enter"), p(n === a ? "start" : "end")), p("progress"), u && h !== l && (p(h === a ? "start" : "end"), p("leave"))
                  }
                  return f
              }
              return g
          };
          var S = function () {
                  p = {
                      start: v + d.offset
                  }, s && d.triggerElement && (p.start -= s.info("size") * d.triggerHook), p.end = p.start + d.duration
              },
              b = function (e) {
                  if (o) {
                      var t = "duration";
                      F(t, o.call(f)) && !e && (f.trigger("change", {
                          what: t,
                          newval: d[t]
                      }), f.trigger("shift", {
                          reason: t
                      }))
                  }
              },
              E = function (e) {
                  var n = 0,
                      r = d.triggerElement;
                  if (s && r) {
                      for (var o = s.info(), a = i.get.offset(o.container), l = o.vertical ? "top" : "left"; r.parentNode.hasAttribute(t);) r = r.parentNode;
                      var c = i.get.offset(r);
                      o.isDocument || (a[l] -= s.scrollPos()), n = c[l] - a[l]
                  }
                  var u = n != v;
                  v = n, u && !e && f.trigger("shift", {
                      reason: "triggerElementPosition"
                  })
              },
              x = function () {
                  d.triggerHook > 0 && f.trigger("shift", {
                      reason: "containerResize"
                  })
              },
              z = i.extend(r.validate, {
                  duration: function (e) {
                      if (i.type.String(e) && e.match(/^(\.|\d)*\d+%$/)) {
                          var t = parseFloat(e) / 100;
                          e = function () {
                              return s ? s.info("size") * t : 0
                          }
                      }
                      if (i.type.Function(e)) {
                          o = e;
                          try {
                              e = parseFloat(o())
                          } catch (t) {
                              e = -1
                          }
                      }
                      if (e = parseFloat(e), !i.type.Number(e) || 0 > e) throw o ? (o = void 0, 0) : 0;
                      return e
                  }
              }),
              C = function (e) {
                  e = arguments.length ? [e] : Object.keys(z), e.forEach(function (e) {
                      var t;
                      if (z[e]) try {
                          t = z[e](d[e])
                      } catch (n) {
                          t = u[e]
                      } finally {
                          d[e] = t
                      }
                  })
              },
              F = function (e, t) {
                  var n = !1,
                      r = d[e];
                  return d[e] != t && (d[e] = t, C(e), n = r != d[e]), n
              },
              L = function (e) {
                  f[e] || (f[e] = function (t) {
                      return arguments.length ? ("duration" === e && (o = void 0), F(e, t) && (f.trigger("change", {
                          what: e,
                          newval: d[e]
                      }), r.shifts.indexOf(e) > -1 && f.trigger("shift", {
                          reason: e
                      })), f) : d[e]
                  })
              };
          this.controller = function () {
              return s
          }, this.state = function () {
              return h
          }, this.scrollOffset = function () {
              return p.start
          }, this.triggerPosition = function () {
              var e = d.offset;
              return s && (e += d.triggerElement ? v : s.info("size") * f.triggerHook()), e
          };
          var T, A;
          f.on("shift.internal", function (e) {
              var t = "duration" === e.reason;
              (h === c && t || h === l && 0 === d.duration) && O(), t && _()
          }).on("progress.internal", function () {
              O()
          }).on("add.internal", function () {
              _()
          }).on("destroy.internal", function (e) {
              f.removePin(e.reset)
          });
          var O = function (e) {
                  if (T && s) {
                      var t = s.info(),
                          n = A.spacer.firstChild;
                      if (e || h !== l) {
                          var r = {
                                  position: A.inFlow ? "relative" : "absolute",
                                  top: 0,
                                  left: 0
                              },
                              o = i.css(n, "position") != r.position;
                          A.pushFollowers ? d.duration > 0 && (h === c && 0 === parseFloat(i.css(A.spacer, "padding-top")) ? o = !0 : h === a && 0 === parseFloat(i.css(A.spacer, "padding-bottom")) && (o = !0)) : r[t.vertical ? "top" : "left"] = d.duration * g, i.css(n, r), o && _()
                      } else {
                          "fixed" != i.css(n, "position") && (i.css(n, {
                              position: "fixed"
                          }), _());
                          var u = i.get.offset(A.spacer, !0),
                              f = d.reverse || 0 === d.duration ? t.scrollPos - p.start : Math.round(g * d.duration * 10) / 10;
                          u[t.vertical ? "top" : "left"] += f, i.css(A.spacer.firstChild, {
                              top: u.top,
                              left: u.left
                          })
                      }
                  }
              },
              _ = function () {
                  if (T && s && A.inFlow) {
                      var e = h === l,
                          t = s.info("vertical"),
                          n = A.spacer.firstChild,
                          r = i.isMarginCollapseType(i.css(A.spacer, "display")),
                          o = {};
                      A.relSize.width || A.relSize.autoFullWidth ? e ? i.css(T, {
                          width: i.get.width(A.spacer)
                      }) : i.css(T, {
                          width: "100%"
                      }) : (o["min-width"] = i.get.width(t ? T : n, !0, !0), o.width = e ? o["min-width"] : "auto"), A.relSize.height ? e ? i.css(T, {
                          height: i.get.height(A.spacer) - (A.pushFollowers ? d.duration : 0)
                      }) : i.css(T, {
                          height: "100%"
                      }) : (o["min-height"] = i.get.height(t ? n : T, !0, !r), o.height = e ? o["min-height"] : "auto"), A.pushFollowers && (o["padding" + (t ? "Top" : "Left")] = d.duration * g, o["padding" + (t ? "Bottom" : "Right")] = d.duration * (1 - g)), i.css(A.spacer, o)
                  }
              },
              N = function () {
                  s && T && h === l && !s.info("isDocument") && O()
              },
              P = function () {
                  s && T && h === l && ((A.relSize.width || A.relSize.autoFullWidth) && i.get.width(window) != i.get.width(A.spacer.parentNode) || A.relSize.height && i.get.height(window) != i.get.height(A.spacer.parentNode)) && _()
              },
              D = function (e) {
                  s && T && h === l && !s.info("isDocument") && (e.preventDefault(), s._setScrollPos(s.info("scrollPos") - ((e.wheelDelta || e[s.info("vertical") ? "wheelDeltaY" : "wheelDeltaX"]) / 3 || 30 * -e.detail)))
              };
          this.setPin = function (e, n) {
              var r = {
                  pushFollowers: !0,
                  spacerClass: "scrollmagic-pin-spacer"
              };
              if (n = i.extend({}, r, n), e = i.get.elements(e)[0], !e) return f;
              if ("fixed" === i.css(e, "position")) return f;
              if (T) {
                  if (T === e) return f;
                  f.removePin()
              }
              T = e;
              var o = T.parentNode.style.display,
                  s = ["top", "left", "bottom", "right", "margin", "marginLeft", "marginRight", "marginTop", "marginBottom"];
              T.parentNode.style.display = "none";
              var a = "absolute" != i.css(T, "position"),
                  l = i.css(T, s.concat(["display"])),
                  c = i.css(T, ["width", "height"]);
              T.parentNode.style.display = o, !a && n.pushFollowers && (n.pushFollowers = !1);
              var u = T.parentNode.insertBefore(document.createElement("div"), T),
                  d = i.extend(l, {
                      position: a ? "relative" : "absolute",
                      boxSizing: "content-box",
                      mozBoxSizing: "content-box",
                      webkitBoxSizing: "content-box"
                  });
              if (a || i.extend(d, i.css(T, ["width", "height"])), i.css(u, d), u.setAttribute(t, ""), i.addClass(u, n.spacerClass), A = {
                      spacer: u,
                      relSize: {
                          width: "%" === c.width.slice(-1),
                          height: "%" === c.height.slice(-1),
                          autoFullWidth: "auto" === c.width && a && i.isMarginCollapseType(l.display)
                      },
                      pushFollowers: n.pushFollowers,
                      inFlow: a
                  }, !T.___origStyle) {
                  T.___origStyle = {};
                  var h = T.style,
                      g = s.concat(["width", "height", "position", "boxSizing", "mozBoxSizing", "webkitBoxSizing"]);
                  g.forEach(function (e) {
                      T.___origStyle[e] = h[e] || ""
                  })
              }
              return A.relSize.width && i.css(u, {
                  width: c.width
              }), A.relSize.height && i.css(u, {
                  height: c.height
              }), u.appendChild(T), i.css(T, {
                  position: a ? "relative" : "absolute",
                  margin: "auto",
                  top: "auto",
                  left: "auto",
                  bottom: "auto",
                  right: "auto"
              }), (A.relSize.width || A.relSize.autoFullWidth) && i.css(T, {
                  boxSizing: "border-box",
                  mozBoxSizing: "border-box",
                  webkitBoxSizing: "border-box"
              }), window.addEventListener("scroll", N), window.addEventListener("resize", N), window.addEventListener("resize", P), T.addEventListener("mousewheel", D), T.addEventListener("DOMMouseScroll", D), O(), f
          }, this.removePin = function (e) {
              if (T) {
                  if (h === l && O(!0), e || !s) {
                      var n = A.spacer.firstChild;
                      if (n.hasAttribute(t)) {
                          var r = A.spacer.style,
                              o = ["margin", "marginLeft", "marginRight", "marginTop", "marginBottom"];
                          margins = {}, o.forEach(function (e) {
                              margins[e] = r[e] || ""
                          }), i.css(n, margins)
                      }
                      A.spacer.parentNode.insertBefore(n, A.spacer), A.spacer.parentNode.removeChild(A.spacer), T.parentNode.hasAttribute(t) || (i.css(T, T.___origStyle), delete T.___origStyle)
                  }
                  window.removeEventListener("scroll", N), window.removeEventListener("resize", N), window.removeEventListener("resize", P), T.removeEventListener("mousewheel", D), T.removeEventListener("DOMMouseScroll", D), T = void 0
              }
              return f
          };
          var R, k = [];
          return f.on("destroy.internal", function (e) {
              f.removeClassToggle(e.reset)
          }), this.setClassToggle = function (e, t) {
              var n = i.get.elements(e);
              return 0 !== n.length && i.type.String(t) ? (k.length > 0 && f.removeClassToggle(), R = t, k = n, f.on("enter.internal_class leave.internal_class", function (e) {
                  var t = "enter" === e.type ? i.addClass : i.removeClass;
                  k.forEach(function (e) {
                      t(e, R)
                  })
              }), f) : f
          }, this.removeClassToggle = function (e) {
              return e && k.forEach(function (e) {
                  i.removeClass(e, R)
              }), f.off("start.internal_class end.internal_class"), R = void 0, k = [], f
          }, w(), f
      };
      var r = {
          defaults: {
              duration: 0,
              offset: 0,
              triggerElement: void 0,
              triggerHook: .5,
              reverse: !0,
              loglevel: 2
          },
          validate: {
              offset: function (e) {
                  if (e = parseFloat(e), !i.type.Number(e)) throw 0;
                  return e
              },
              triggerElement: function (e) {
                  if (e = e || void 0) {
                      var t = i.get.elements(e)[0];
                      if (!t) throw 0;
                      e = t
                  }
                  return e
              },
              triggerHook: function (e) {
                  var t = {
                      onCenter: .5,
                      onEnter: 1,
                      onLeave: 0
                  };
                  if (i.type.Number(e)) e = Math.max(0, Math.min(parseFloat(e), 1));
                  else {
                      if (!(e in t)) throw 0;
                      e = t[e]
                  }
                  return e
              },
              reverse: function (e) {
                  return !!e
              }
          },
          shifts: ["duration", "offset", "triggerHook"]
      };
      e.Scene.addOption = function (e, t, n, i) {
          e in r.defaults || (r.defaults[e] = t, r.validate[e] = n, i && r.shifts.push(e))
      }, e.Scene.extend = function (t) {
          var n = this;
          e.Scene = function () {
              return n.apply(this, arguments), this.$super = i.extend({}, this), t.apply(this, arguments) || this
          }, i.extend(e.Scene, n), e.Scene.prototype = n.prototype, e.Scene.prototype.constructor = e.Scene
      }, e.Event = function (e, t, n, r) {
          r = r || {};
          for (var i in r) this[i] = r[i];
          return this.type = e, this.target = this.currentTarget = n, this.namespace = t || "", this.timeStamp = this.timestamp = Date.now(), this
      };
      var i = e._util = function (e) {
          var t, n = {},
              r = function (e) {
                  return parseFloat(e) || 0
              },
              i = function (t) {
                  return t.currentStyle ? t.currentStyle : e.getComputedStyle(t)
              },
              o = function (t, n, o, s) {
                  if (n = n === document ? e : n, n === e) s = !1;
                  else if (!f.DomElement(n)) return 0;
                  t = t.charAt(0).toUpperCase() + t.substr(1).toLowerCase();
                  var a = (o ? n["offset" + t] || n["outer" + t] : n["client" + t] || n["inner" + t]) || 0;
                  if (o && s) {
                      var l = i(n);
                      a += "Height" === t ? r(l.marginTop) + r(l.marginBottom) : r(l.marginLeft) + r(l.marginRight)
                  }
                  return a
              },
              s = function (e) {
                  return e.replace(/^[^a-z]+([a-z])/g, "$1").replace(/-([a-z])/g, function (e) {
                      return e[1].toUpperCase()
                  })
              };
          n.extend = function (e) {
              for (e = e || {}, t = 1; t < arguments.length; t++)
                  if (arguments[t])
                      for (var n in arguments[t]) arguments[t].hasOwnProperty(n) && (e[n] = arguments[t][n]);
              return e
          }, n.isMarginCollapseType = function (e) {
              return ["block", "flex", "list-item", "table", "-webkit-box"].indexOf(e) > -1
          };
          var a = 0,
              l = ["ms", "moz", "webkit", "o"],
              c = e.requestAnimationFrame,
              u = e.cancelAnimationFrame;
          for (t = 0; !c && t < l.length; ++t) c = e[l[t] + "RequestAnimationFrame"], u = e[l[t] + "CancelAnimationFrame"] || e[l[t] + "CancelRequestAnimationFrame"];
          c || (c = function (t) {
              var n = (new Date).getTime(),
                  r = Math.max(0, 16 - (n - a)),
                  i = e.setTimeout(function () {
                      t(n + r)
                  }, r);
              return a = n + r, i
          }), u || (u = function (t) {
              e.clearTimeout(t)
          }), n.rAF = c.bind(e), n.cAF = u.bind(e);
          var f = n.type = function (e) {
              return Object.prototype.toString.call(e).replace(/^\[object (.+)\]$/, "$1").toLowerCase()
          };
          f.String = function (e) {
              return "string" === f(e)
          }, f.Function = function (e) {
              return "function" === f(e)
          }, f.Array = function (e) {
              return Array.isArray(e)
          }, f.Number = function (e) {
              return !f.Array(e) && e - parseFloat(e) + 1 >= 0
          }, f.DomElement = function (e) {
              return "object" == typeof HTMLElement ? e instanceof HTMLElement : e && "object" == typeof e && null !== e && 1 === e.nodeType && "string" == typeof e.nodeName
          };
          var d = n.get = {};
          return d.elements = function (t) {
              var n = [];
              if (f.String(t)) try {
                  t = document.querySelectorAll(t)
              } catch (e) {
                  return n
              }
              if ("nodelist" === f(t) || f.Array(t))
                  for (var r = 0, i = n.length = t.length; i > r; r++) {
                      var o = t[r];
                      n[r] = f.DomElement(o) ? o : d.elements(o)
                  } else(f.DomElement(t) || t === document || t === e) && (n = [t]);
              return n
          }, d.scrollTop = function (t) {
              return t && "number" == typeof t.scrollTop ? t.scrollTop : e.pageYOffset || 0
          }, d.scrollLeft = function (t) {
              return t && "number" == typeof t.scrollLeft ? t.scrollLeft : e.pageXOffset || 0
          }, d.width = function (e, t, n) {
              return o("width", e, t, n)
          }, d.height = function (e, t, n) {
              return o("height", e, t, n)
          }, d.offset = function (e, t) {
              var n = {
                  top: 0,
                  left: 0
              };
              if (e && e.getBoundingClientRect) {
                  var r = e.getBoundingClientRect();
                  n.top = r.top, n.left = r.left, t || (n.top += d.scrollTop(), n.left += d.scrollLeft())
              }
              return n
          }, n.addClass = function (e, t) {
              t && (e.classList ? e.classList.add(t) : e.className += " " + t)
          }, n.removeClass = function (e, t) {
              t && (e.classList ? e.classList.remove(t) : e.className = e.className.replace(RegExp("(^|\\b)" + t.split(" ").join("|") + "(\\b|$)", "gi"), " "))
          }, n.css = function (e, t) {
              if (f.String(t)) return i(e)[s(t)];
              if (f.Array(t)) {
                  var n = {},
                      r = i(e);
                  return t.forEach(function (e) {
                      n[e] = r[s(e)]
                  }), n
              }
              for (var o in t) {
                  var a = t[o];
                  a == parseFloat(a) && (a += "px"), e.style[s(o)] = a
              }
          }, n
      }(window || {});
      return e
  });