abkfenris/inferno-react

View on GitHub
docs/app.6404a24e0a2d0fafb9d5.js

Summary

Maintainability
A
0 mins
Test Coverage
webpackJsonp([0],[
/* 0 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(1);
    module.exports = __webpack_require__(666);


/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactDom = __webpack_require__(158);
    
    var _reactDom2 = _interopRequireDefault(_reactDom);
    
    var _Root = __webpack_require__(159);
    
    var _Root2 = _interopRequireDefault(_Root);
    
    var _configureStore = __webpack_require__(663);
    
    var _configureStore2 = _interopRequireDefault(_configureStore);
    
    var _geojson = __webpack_require__(513);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    // Set initial state of store
    var initialState = window.__INITIAL_STATE__;
    var store = (0, _configureStore2.default)(initialState);
    
    // Now that we have the Redux store, we can create our routes. We provide
    // the store to the route definitions so that routes have access to it for
    // hooks such as `onEnter`.
    
    // Now that redux has been configured, we can render the
    // React application to the DOM!
    _reactDom2.default.render(_react2.default.createElement(_Root2.default, { store: store }), document.getElementById('root'));
    
    // Load initial geojson
    store.dispatch((0, _geojson.loadGeojson)());

/***/ },
/* 2 */,
/* 3 */,
/* 4 */,
/* 5 */,
/* 6 */,
/* 7 */,
/* 8 */,
/* 9 */,
/* 10 */,
/* 11 */,
/* 12 */,
/* 13 */,
/* 14 */,
/* 15 */,
/* 16 */,
/* 17 */,
/* 18 */,
/* 19 */,
/* 20 */,
/* 21 */,
/* 22 */,
/* 23 */,
/* 24 */,
/* 25 */,
/* 26 */,
/* 27 */,
/* 28 */,
/* 29 */,
/* 30 */,
/* 31 */,
/* 32 */,
/* 33 */,
/* 34 */,
/* 35 */,
/* 36 */,
/* 37 */,
/* 38 */,
/* 39 */,
/* 40 */,
/* 41 */,
/* 42 */,
/* 43 */,
/* 44 */,
/* 45 */,
/* 46 */,
/* 47 */,
/* 48 */,
/* 49 */,
/* 50 */,
/* 51 */,
/* 52 */,
/* 53 */,
/* 54 */,
/* 55 */,
/* 56 */,
/* 57 */,
/* 58 */,
/* 59 */,
/* 60 */,
/* 61 */,
/* 62 */,
/* 63 */,
/* 64 */,
/* 65 */,
/* 66 */,
/* 67 */,
/* 68 */,
/* 69 */,
/* 70 */,
/* 71 */,
/* 72 */,
/* 73 */,
/* 74 */,
/* 75 */,
/* 76 */,
/* 77 */,
/* 78 */,
/* 79 */,
/* 80 */,
/* 81 */,
/* 82 */,
/* 83 */,
/* 84 */,
/* 85 */,
/* 86 */,
/* 87 */,
/* 88 */,
/* 89 */,
/* 90 */,
/* 91 */,
/* 92 */,
/* 93 */,
/* 94 */,
/* 95 */,
/* 96 */,
/* 97 */,
/* 98 */,
/* 99 */,
/* 100 */,
/* 101 */,
/* 102 */,
/* 103 */,
/* 104 */,
/* 105 */,
/* 106 */,
/* 107 */,
/* 108 */,
/* 109 */,
/* 110 */,
/* 111 */,
/* 112 */,
/* 113 */,
/* 114 */,
/* 115 */,
/* 116 */,
/* 117 */,
/* 118 */,
/* 119 */,
/* 120 */,
/* 121 */,
/* 122 */,
/* 123 */,
/* 124 */,
/* 125 */,
/* 126 */,
/* 127 */,
/* 128 */,
/* 129 */,
/* 130 */,
/* 131 */,
/* 132 */,
/* 133 */,
/* 134 */,
/* 135 */,
/* 136 */,
/* 137 */,
/* 138 */,
/* 139 */,
/* 140 */,
/* 141 */,
/* 142 */,
/* 143 */,
/* 144 */,
/* 145 */,
/* 146 */,
/* 147 */,
/* 148 */,
/* 149 */,
/* 150 */,
/* 151 */,
/* 152 */,
/* 153 */,
/* 154 */,
/* 155 */,
/* 156 */,
/* 157 */,
/* 158 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    module.exports = __webpack_require__(4);


/***/ },
/* 159 */
/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(module) {'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _getPrototypeOf = __webpack_require__(161);
    
    var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
    
    var _classCallCheck2 = __webpack_require__(187);
    
    var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
    
    var _createClass2 = __webpack_require__(188);
    
    var _createClass3 = _interopRequireDefault(_createClass2);
    
    var _possibleConstructorReturn2 = __webpack_require__(192);
    
    var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
    
    var _inherits2 = __webpack_require__(239);
    
    var _inherits3 = _interopRequireDefault(_inherits2);
    
    var _redboxReact2 = __webpack_require__(247);
    
    var _redboxReact3 = _interopRequireDefault(_redboxReact2);
    
    var _reactTransformCatchErrors3 = __webpack_require__(253);
    
    var _reactTransformCatchErrors4 = _interopRequireDefault(_reactTransformCatchErrors3);
    
    var _react2 = __webpack_require__(2);
    
    var _react3 = _interopRequireDefault(_react2);
    
    var _reactTransformHmr3 = __webpack_require__(254);
    
    var _reactTransformHmr4 = _interopRequireDefault(_reactTransformHmr3);
    
    var _class, _temp;
    
    var _reactRedux = __webpack_require__(408);
    
    var _HomeView = __webpack_require__(429);
    
    var _HomeView2 = _interopRequireDefault(_HomeView);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var _components = {
      Root: {
        displayName: 'Root'
      }
    };
    
    var _reactTransformHmr2 = (0, _reactTransformHmr4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/containers/Root.js',
      components: _components,
      locals: [module],
      imports: [_react3.default]
    });
    
    var _reactTransformCatchErrors2 = (0, _reactTransformCatchErrors4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/containers/Root.js',
      components: _components,
      locals: [],
      imports: [_react3.default, _redboxReact3.default]
    });
    
    function _wrapComponent(id) {
      return function (Component) {
        return _reactTransformHmr2(_reactTransformCatchErrors2(Component, id), id);
      };
    }
    
    var Root = _wrapComponent('Root')((_temp = _class = function (_React$Component) {
      (0, _inherits3.default)(Root, _React$Component);
    
      function Root() {
        (0, _classCallCheck3.default)(this, Root);
        return (0, _possibleConstructorReturn3.default)(this, (Root.__proto__ || (0, _getPrototypeOf2.default)(Root)).apply(this, arguments));
      }
    
      (0, _createClass3.default)(Root, [{
        key: 'render',
        value: function render() {
          return _react3.default.createElement(
            _reactRedux.Provider,
            { store: this.props.store },
            _react3.default.createElement(
              'div',
              { style: { height: '100%' } },
              _react3.default.createElement(_HomeView2.default, null),
              this.devTools
            )
          );
        }
      }, {
        key: 'devTools',
        get: function get() {
          if (true) {
            if (false) {
              if (!window.devToolsExtension) {
                require('../redux/utils/createDevToolsWindow').default(this.props.store);
              } else {
                window.devToolsExtension.open();
              }
            } else if (!window.devToolsExtension) {
              var DevTools = __webpack_require__(522).default;
              return _react3.default.createElement(DevTools, null);
            }
          }
        }
      }]);
      return Root;
    }(_react3.default.Component), _class.propTypes = {
      store: _react2.PropTypes.object.isRequired
    }, _temp));
    
    exports.default = Root;
    /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(160)(module)))

/***/ },
/* 160 */,
/* 161 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(162), __esModule: true };

/***/ },
/* 162 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(163);
    module.exports = __webpack_require__(174).Object.getPrototypeOf;

/***/ },
/* 163 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.2.9 Object.getPrototypeOf(O)
    var toObject        = __webpack_require__(164)
      , $getPrototypeOf = __webpack_require__(166);
    
    __webpack_require__(172)('getPrototypeOf', function(){
      return function getPrototypeOf(it){
        return $getPrototypeOf(toObject(it));
      };
    });

/***/ },
/* 164 */
/***/ function(module, exports, __webpack_require__) {

    // 7.1.13 ToObject(argument)
    var defined = __webpack_require__(165);
    module.exports = function(it){
      return Object(defined(it));
    };

/***/ },
/* 165 */
/***/ function(module, exports) {

    // 7.2.1 RequireObjectCoercible(argument)
    module.exports = function(it){
      if(it == undefined)throw TypeError("Can't call method on  " + it);
      return it;
    };

/***/ },
/* 166 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
    var has         = __webpack_require__(167)
      , toObject    = __webpack_require__(164)
      , IE_PROTO    = __webpack_require__(168)('IE_PROTO')
      , ObjectProto = Object.prototype;
    
    module.exports = Object.getPrototypeOf || function(O){
      O = toObject(O);
      if(has(O, IE_PROTO))return O[IE_PROTO];
      if(typeof O.constructor == 'function' && O instanceof O.constructor){
        return O.constructor.prototype;
      } return O instanceof Object ? ObjectProto : null;
    };

/***/ },
/* 167 */
/***/ function(module, exports) {

    var hasOwnProperty = {}.hasOwnProperty;
    module.exports = function(it, key){
      return hasOwnProperty.call(it, key);
    };

/***/ },
/* 168 */
/***/ function(module, exports, __webpack_require__) {

    var shared = __webpack_require__(169)('keys')
      , uid    = __webpack_require__(171);
    module.exports = function(key){
      return shared[key] || (shared[key] = uid(key));
    };

/***/ },
/* 169 */
/***/ function(module, exports, __webpack_require__) {

    var global = __webpack_require__(170)
      , SHARED = '__core-js_shared__'
      , store  = global[SHARED] || (global[SHARED] = {});
    module.exports = function(key){
      return store[key] || (store[key] = {});
    };

/***/ },
/* 170 */
/***/ function(module, exports) {

    // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
    var global = module.exports = typeof window != 'undefined' && window.Math == Math
      ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
    if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef

/***/ },
/* 171 */
/***/ function(module, exports) {

    var id = 0
      , px = Math.random();
    module.exports = function(key){
      return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
    };

/***/ },
/* 172 */
/***/ function(module, exports, __webpack_require__) {

    // most Object methods by ES6 should accept primitives
    var $export = __webpack_require__(173)
      , core    = __webpack_require__(174)
      , fails   = __webpack_require__(183);
    module.exports = function(KEY, exec){
      var fn  = (core.Object || {})[KEY] || Object[KEY]
        , exp = {};
      exp[KEY] = exec(fn);
      $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
    };

/***/ },
/* 173 */
/***/ function(module, exports, __webpack_require__) {

    var global    = __webpack_require__(170)
      , core      = __webpack_require__(174)
      , ctx       = __webpack_require__(175)
      , hide      = __webpack_require__(177)
      , PROTOTYPE = 'prototype';
    
    var $export = function(type, name, source){
      var IS_FORCED = type & $export.F
        , IS_GLOBAL = type & $export.G
        , IS_STATIC = type & $export.S
        , IS_PROTO  = type & $export.P
        , IS_BIND   = type & $export.B
        , IS_WRAP   = type & $export.W
        , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
        , expProto  = exports[PROTOTYPE]
        , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
        , key, own, out;
      if(IS_GLOBAL)source = name;
      for(key in source){
        // contains in native
        own = !IS_FORCED && target && target[key] !== undefined;
        if(own && key in exports)continue;
        // export native or passed
        out = own ? target[key] : source[key];
        // prevent global pollution for namespaces
        exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
        // bind timers to global for call from export context
        : IS_BIND && own ? ctx(out, global)
        // wrap global constructors for prevent change them in library
        : IS_WRAP && target[key] == out ? (function(C){
          var F = function(a, b, c){
            if(this instanceof C){
              switch(arguments.length){
                case 0: return new C;
                case 1: return new C(a);
                case 2: return new C(a, b);
              } return new C(a, b, c);
            } return C.apply(this, arguments);
          };
          F[PROTOTYPE] = C[PROTOTYPE];
          return F;
        // make static versions for prototype methods
        })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
        // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
        if(IS_PROTO){
          (exports.virtual || (exports.virtual = {}))[key] = out;
          // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
          if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
        }
      }
    };
    // type bitmap
    $export.F = 1;   // forced
    $export.G = 2;   // global
    $export.S = 4;   // static
    $export.P = 8;   // proto
    $export.B = 16;  // bind
    $export.W = 32;  // wrap
    $export.U = 64;  // safe
    $export.R = 128; // real proto method for `library` 
    module.exports = $export;

/***/ },
/* 174 */
/***/ function(module, exports) {

    var core = module.exports = {version: '2.4.0'};
    if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef

/***/ },
/* 175 */
/***/ function(module, exports, __webpack_require__) {

    // optional / simple context binding
    var aFunction = __webpack_require__(176);
    module.exports = function(fn, that, length){
      aFunction(fn);
      if(that === undefined)return fn;
      switch(length){
        case 1: return function(a){
          return fn.call(that, a);
        };
        case 2: return function(a, b){
          return fn.call(that, a, b);
        };
        case 3: return function(a, b, c){
          return fn.call(that, a, b, c);
        };
      }
      return function(/* ...args */){
        return fn.apply(that, arguments);
      };
    };

/***/ },
/* 176 */
/***/ function(module, exports) {

    module.exports = function(it){
      if(typeof it != 'function')throw TypeError(it + ' is not a function!');
      return it;
    };

/***/ },
/* 177 */
/***/ function(module, exports, __webpack_require__) {

    var dP         = __webpack_require__(178)
      , createDesc = __webpack_require__(186);
    module.exports = __webpack_require__(182) ? function(object, key, value){
      return dP.f(object, key, createDesc(1, value));
    } : function(object, key, value){
      object[key] = value;
      return object;
    };

/***/ },
/* 178 */
/***/ function(module, exports, __webpack_require__) {

    var anObject       = __webpack_require__(179)
      , IE8_DOM_DEFINE = __webpack_require__(181)
      , toPrimitive    = __webpack_require__(185)
      , dP             = Object.defineProperty;
    
    exports.f = __webpack_require__(182) ? Object.defineProperty : function defineProperty(O, P, Attributes){
      anObject(O);
      P = toPrimitive(P, true);
      anObject(Attributes);
      if(IE8_DOM_DEFINE)try {
        return dP(O, P, Attributes);
      } catch(e){ /* empty */ }
      if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
      if('value' in Attributes)O[P] = Attributes.value;
      return O;
    };

/***/ },
/* 179 */
/***/ function(module, exports, __webpack_require__) {

    var isObject = __webpack_require__(180);
    module.exports = function(it){
      if(!isObject(it))throw TypeError(it + ' is not an object!');
      return it;
    };

/***/ },
/* 180 */
/***/ function(module, exports) {

    module.exports = function(it){
      return typeof it === 'object' ? it !== null : typeof it === 'function';
    };

/***/ },
/* 181 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = !__webpack_require__(182) && !__webpack_require__(183)(function(){
      return Object.defineProperty(__webpack_require__(184)('div'), 'a', {get: function(){ return 7; }}).a != 7;
    });

/***/ },
/* 182 */
/***/ function(module, exports, __webpack_require__) {

    // Thank's IE8 for his funny defineProperty
    module.exports = !__webpack_require__(183)(function(){
      return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
    });

/***/ },
/* 183 */
/***/ function(module, exports) {

    module.exports = function(exec){
      try {
        return !!exec();
      } catch(e){
        return true;
      }
    };

/***/ },
/* 184 */
/***/ function(module, exports, __webpack_require__) {

    var isObject = __webpack_require__(180)
      , document = __webpack_require__(170).document
      // in old IE typeof document.createElement is 'object'
      , is = isObject(document) && isObject(document.createElement);
    module.exports = function(it){
      return is ? document.createElement(it) : {};
    };

/***/ },
/* 185 */
/***/ function(module, exports, __webpack_require__) {

    // 7.1.1 ToPrimitive(input [, PreferredType])
    var isObject = __webpack_require__(180);
    // instead of the ES6 spec version, we didn't implement @@toPrimitive case
    // and the second argument - flag - preferred type is a string
    module.exports = function(it, S){
      if(!isObject(it))return it;
      var fn, val;
      if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
      if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
      if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
      throw TypeError("Can't convert object to primitive value");
    };

/***/ },
/* 186 */
/***/ function(module, exports) {

    module.exports = function(bitmap, value){
      return {
        enumerable  : !(bitmap & 1),
        configurable: !(bitmap & 2),
        writable    : !(bitmap & 4),
        value       : value
      };
    };

/***/ },
/* 187 */
/***/ function(module, exports) {

    "use strict";
    
    exports.__esModule = true;
    
    exports.default = function (instance, Constructor) {
      if (!(instance instanceof Constructor)) {
        throw new TypeError("Cannot call a class as a function");
      }
    };

/***/ },
/* 188 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    exports.__esModule = true;
    
    var _defineProperty = __webpack_require__(189);
    
    var _defineProperty2 = _interopRequireDefault(_defineProperty);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = function () {
      function defineProperties(target, props) {
        for (var i = 0; i < props.length; i++) {
          var descriptor = props[i];
          descriptor.enumerable = descriptor.enumerable || false;
          descriptor.configurable = true;
          if ("value" in descriptor) descriptor.writable = true;
          (0, _defineProperty2.default)(target, descriptor.key, descriptor);
        }
      }
    
      return function (Constructor, protoProps, staticProps) {
        if (protoProps) defineProperties(Constructor.prototype, protoProps);
        if (staticProps) defineProperties(Constructor, staticProps);
        return Constructor;
      };
    }();

/***/ },
/* 189 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(190), __esModule: true };

/***/ },
/* 190 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(191);
    var $Object = __webpack_require__(174).Object;
    module.exports = function defineProperty(it, key, desc){
      return $Object.defineProperty(it, key, desc);
    };

/***/ },
/* 191 */
/***/ function(module, exports, __webpack_require__) {

    var $export = __webpack_require__(173);
    // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
    $export($export.S + $export.F * !__webpack_require__(182), 'Object', {defineProperty: __webpack_require__(178).f});

/***/ },
/* 192 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    exports.__esModule = true;
    
    var _typeof2 = __webpack_require__(193);
    
    var _typeof3 = _interopRequireDefault(_typeof2);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = function (self, call) {
      if (!self) {
        throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
      }
    
      return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self;
    };

/***/ },
/* 193 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    exports.__esModule = true;
    
    var _iterator = __webpack_require__(194);
    
    var _iterator2 = _interopRequireDefault(_iterator);
    
    var _symbol = __webpack_require__(223);
    
    var _symbol2 = _interopRequireDefault(_symbol);
    
    var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
      return typeof obj === "undefined" ? "undefined" : _typeof(obj);
    } : function (obj) {
      return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
    };

/***/ },
/* 194 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(195), __esModule: true };

/***/ },
/* 195 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(196);
    __webpack_require__(218);
    module.exports = __webpack_require__(222).f('iterator');

/***/ },
/* 196 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    var $at  = __webpack_require__(197)(true);
    
    // 21.1.3.27 String.prototype[@@iterator]()
    __webpack_require__(199)(String, 'String', function(iterated){
      this._t = String(iterated); // target
      this._i = 0;                // next index
    // 21.1.5.2.1 %StringIteratorPrototype%.next()
    }, function(){
      var O     = this._t
        , index = this._i
        , point;
      if(index >= O.length)return {value: undefined, done: true};
      point = $at(O, index);
      this._i += point.length;
      return {value: point, done: false};
    });

/***/ },
/* 197 */
/***/ function(module, exports, __webpack_require__) {

    var toInteger = __webpack_require__(198)
      , defined   = __webpack_require__(165);
    // true  -> String#at
    // false -> String#codePointAt
    module.exports = function(TO_STRING){
      return function(that, pos){
        var s = String(defined(that))
          , i = toInteger(pos)
          , l = s.length
          , a, b;
        if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
        a = s.charCodeAt(i);
        return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
          ? TO_STRING ? s.charAt(i) : a
          : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
      };
    };

/***/ },
/* 198 */
/***/ function(module, exports) {

    // 7.1.4 ToInteger
    var ceil  = Math.ceil
      , floor = Math.floor;
    module.exports = function(it){
      return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
    };

/***/ },
/* 199 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    var LIBRARY        = __webpack_require__(200)
      , $export        = __webpack_require__(173)
      , redefine       = __webpack_require__(201)
      , hide           = __webpack_require__(177)
      , has            = __webpack_require__(167)
      , Iterators      = __webpack_require__(202)
      , $iterCreate    = __webpack_require__(203)
      , setToStringTag = __webpack_require__(216)
      , getPrototypeOf = __webpack_require__(166)
      , ITERATOR       = __webpack_require__(217)('iterator')
      , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
      , FF_ITERATOR    = '@@iterator'
      , KEYS           = 'keys'
      , VALUES         = 'values';
    
    var returnThis = function(){ return this; };
    
    module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
      $iterCreate(Constructor, NAME, next);
      var getMethod = function(kind){
        if(!BUGGY && kind in proto)return proto[kind];
        switch(kind){
          case KEYS: return function keys(){ return new Constructor(this, kind); };
          case VALUES: return function values(){ return new Constructor(this, kind); };
        } return function entries(){ return new Constructor(this, kind); };
      };
      var TAG        = NAME + ' Iterator'
        , DEF_VALUES = DEFAULT == VALUES
        , VALUES_BUG = false
        , proto      = Base.prototype
        , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
        , $default   = $native || getMethod(DEFAULT)
        , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined
        , $anyNative = NAME == 'Array' ? proto.entries || $native : $native
        , methods, key, IteratorPrototype;
      // Fix native
      if($anyNative){
        IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
        if(IteratorPrototype !== Object.prototype){
          // Set @@toStringTag to native iterators
          setToStringTag(IteratorPrototype, TAG, true);
          // fix for some old engines
          if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
        }
      }
      // fix Array#{values, @@iterator}.name in V8 / FF
      if(DEF_VALUES && $native && $native.name !== VALUES){
        VALUES_BUG = true;
        $default = function values(){ return $native.call(this); };
      }
      // Define iterator
      if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
        hide(proto, ITERATOR, $default);
      }
      // Plug for library
      Iterators[NAME] = $default;
      Iterators[TAG]  = returnThis;
      if(DEFAULT){
        methods = {
          values:  DEF_VALUES ? $default : getMethod(VALUES),
          keys:    IS_SET     ? $default : getMethod(KEYS),
          entries: $entries
        };
        if(FORCED)for(key in methods){
          if(!(key in proto))redefine(proto, key, methods[key]);
        } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
      }
      return methods;
    };

/***/ },
/* 200 */
/***/ function(module, exports) {

    module.exports = true;

/***/ },
/* 201 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = __webpack_require__(177);

/***/ },
/* 202 */
/***/ function(module, exports) {

    module.exports = {};

/***/ },
/* 203 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    var create         = __webpack_require__(204)
      , descriptor     = __webpack_require__(186)
      , setToStringTag = __webpack_require__(216)
      , IteratorPrototype = {};
    
    // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
    __webpack_require__(177)(IteratorPrototype, __webpack_require__(217)('iterator'), function(){ return this; });
    
    module.exports = function(Constructor, NAME, next){
      Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
      setToStringTag(Constructor, NAME + ' Iterator');
    };

/***/ },
/* 204 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
    var anObject    = __webpack_require__(179)
      , dPs         = __webpack_require__(205)
      , enumBugKeys = __webpack_require__(214)
      , IE_PROTO    = __webpack_require__(168)('IE_PROTO')
      , Empty       = function(){ /* empty */ }
      , PROTOTYPE   = 'prototype';
    
    // Create object with fake `null` prototype: use iframe Object with cleared prototype
    var createDict = function(){
      // Thrash, waste and sodomy: IE GC bug
      var iframe = __webpack_require__(184)('iframe')
        , i      = enumBugKeys.length
        , lt     = '<'
        , gt     = '>'
        , iframeDocument;
      iframe.style.display = 'none';
      __webpack_require__(215).appendChild(iframe);
      iframe.src = 'javascript:'; // eslint-disable-line no-script-url
      // createDict = iframe.contentWindow.Object;
      // html.removeChild(iframe);
      iframeDocument = iframe.contentWindow.document;
      iframeDocument.open();
      iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
      iframeDocument.close();
      createDict = iframeDocument.F;
      while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];
      return createDict();
    };
    
    module.exports = Object.create || function create(O, Properties){
      var result;
      if(O !== null){
        Empty[PROTOTYPE] = anObject(O);
        result = new Empty;
        Empty[PROTOTYPE] = null;
        // add "__proto__" for Object.getPrototypeOf polyfill
        result[IE_PROTO] = O;
      } else result = createDict();
      return Properties === undefined ? result : dPs(result, Properties);
    };


/***/ },
/* 205 */
/***/ function(module, exports, __webpack_require__) {

    var dP       = __webpack_require__(178)
      , anObject = __webpack_require__(179)
      , getKeys  = __webpack_require__(206);
    
    module.exports = __webpack_require__(182) ? Object.defineProperties : function defineProperties(O, Properties){
      anObject(O);
      var keys   = getKeys(Properties)
        , length = keys.length
        , i = 0
        , P;
      while(length > i)dP.f(O, P = keys[i++], Properties[P]);
      return O;
    };

/***/ },
/* 206 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.2.14 / 15.2.3.14 Object.keys(O)
    var $keys       = __webpack_require__(207)
      , enumBugKeys = __webpack_require__(214);
    
    module.exports = Object.keys || function keys(O){
      return $keys(O, enumBugKeys);
    };

/***/ },
/* 207 */
/***/ function(module, exports, __webpack_require__) {

    var has          = __webpack_require__(167)
      , toIObject    = __webpack_require__(208)
      , arrayIndexOf = __webpack_require__(211)(false)
      , IE_PROTO     = __webpack_require__(168)('IE_PROTO');
    
    module.exports = function(object, names){
      var O      = toIObject(object)
        , i      = 0
        , result = []
        , key;
      for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
      // Don't enum bug & hidden keys
      while(names.length > i)if(has(O, key = names[i++])){
        ~arrayIndexOf(result, key) || result.push(key);
      }
      return result;
    };

/***/ },
/* 208 */
/***/ function(module, exports, __webpack_require__) {

    // to indexed object, toObject with fallback for non-array-like ES3 strings
    var IObject = __webpack_require__(209)
      , defined = __webpack_require__(165);
    module.exports = function(it){
      return IObject(defined(it));
    };

/***/ },
/* 209 */
/***/ function(module, exports, __webpack_require__) {

    // fallback for non-array-like ES3 and non-enumerable old V8 strings
    var cof = __webpack_require__(210);
    module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
      return cof(it) == 'String' ? it.split('') : Object(it);
    };

/***/ },
/* 210 */
/***/ function(module, exports) {

    var toString = {}.toString;
    
    module.exports = function(it){
      return toString.call(it).slice(8, -1);
    };

/***/ },
/* 211 */
/***/ function(module, exports, __webpack_require__) {

    // false -> Array#indexOf
    // true  -> Array#includes
    var toIObject = __webpack_require__(208)
      , toLength  = __webpack_require__(212)
      , toIndex   = __webpack_require__(213);
    module.exports = function(IS_INCLUDES){
      return function($this, el, fromIndex){
        var O      = toIObject($this)
          , length = toLength(O.length)
          , index  = toIndex(fromIndex, length)
          , value;
        // Array#includes uses SameValueZero equality algorithm
        if(IS_INCLUDES && el != el)while(length > index){
          value = O[index++];
          if(value != value)return true;
        // Array#toIndex ignores holes, Array#includes - not
        } else for(;length > index; index++)if(IS_INCLUDES || index in O){
          if(O[index] === el)return IS_INCLUDES || index || 0;
        } return !IS_INCLUDES && -1;
      };
    };

/***/ },
/* 212 */
/***/ function(module, exports, __webpack_require__) {

    // 7.1.15 ToLength
    var toInteger = __webpack_require__(198)
      , min       = Math.min;
    module.exports = function(it){
      return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
    };

/***/ },
/* 213 */
/***/ function(module, exports, __webpack_require__) {

    var toInteger = __webpack_require__(198)
      , max       = Math.max
      , min       = Math.min;
    module.exports = function(index, length){
      index = toInteger(index);
      return index < 0 ? max(index + length, 0) : min(index, length);
    };

/***/ },
/* 214 */
/***/ function(module, exports) {

    // IE 8- don't enum bug keys
    module.exports = (
      'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
    ).split(',');

/***/ },
/* 215 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = __webpack_require__(170).document && document.documentElement;

/***/ },
/* 216 */
/***/ function(module, exports, __webpack_require__) {

    var def = __webpack_require__(178).f
      , has = __webpack_require__(167)
      , TAG = __webpack_require__(217)('toStringTag');
    
    module.exports = function(it, tag, stat){
      if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
    };

/***/ },
/* 217 */
/***/ function(module, exports, __webpack_require__) {

    var store      = __webpack_require__(169)('wks')
      , uid        = __webpack_require__(171)
      , Symbol     = __webpack_require__(170).Symbol
      , USE_SYMBOL = typeof Symbol == 'function';
    
    var $exports = module.exports = function(name){
      return store[name] || (store[name] =
        USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
    };
    
    $exports.store = store;

/***/ },
/* 218 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(219);
    var global        = __webpack_require__(170)
      , hide          = __webpack_require__(177)
      , Iterators     = __webpack_require__(202)
      , TO_STRING_TAG = __webpack_require__(217)('toStringTag');
    
    for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
      var NAME       = collections[i]
        , Collection = global[NAME]
        , proto      = Collection && Collection.prototype;
      if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);
      Iterators[NAME] = Iterators.Array;
    }

/***/ },
/* 219 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    var addToUnscopables = __webpack_require__(220)
      , step             = __webpack_require__(221)
      , Iterators        = __webpack_require__(202)
      , toIObject        = __webpack_require__(208);
    
    // 22.1.3.4 Array.prototype.entries()
    // 22.1.3.13 Array.prototype.keys()
    // 22.1.3.29 Array.prototype.values()
    // 22.1.3.30 Array.prototype[@@iterator]()
    module.exports = __webpack_require__(199)(Array, 'Array', function(iterated, kind){
      this._t = toIObject(iterated); // target
      this._i = 0;                   // next index
      this._k = kind;                // kind
    // 22.1.5.2.1 %ArrayIteratorPrototype%.next()
    }, function(){
      var O     = this._t
        , kind  = this._k
        , index = this._i++;
      if(!O || index >= O.length){
        this._t = undefined;
        return step(1);
      }
      if(kind == 'keys'  )return step(0, index);
      if(kind == 'values')return step(0, O[index]);
      return step(0, [index, O[index]]);
    }, 'values');
    
    // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
    Iterators.Arguments = Iterators.Array;
    
    addToUnscopables('keys');
    addToUnscopables('values');
    addToUnscopables('entries');

/***/ },
/* 220 */
/***/ function(module, exports) {

    module.exports = function(){ /* empty */ };

/***/ },
/* 221 */
/***/ function(module, exports) {

    module.exports = function(done, value){
      return {value: value, done: !!done};
    };

/***/ },
/* 222 */
/***/ function(module, exports, __webpack_require__) {

    exports.f = __webpack_require__(217);

/***/ },
/* 223 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(224), __esModule: true };

/***/ },
/* 224 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(225);
    __webpack_require__(236);
    __webpack_require__(237);
    __webpack_require__(238);
    module.exports = __webpack_require__(174).Symbol;

/***/ },
/* 225 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    // ECMAScript 6 symbols shim
    var global         = __webpack_require__(170)
      , has            = __webpack_require__(167)
      , DESCRIPTORS    = __webpack_require__(182)
      , $export        = __webpack_require__(173)
      , redefine       = __webpack_require__(201)
      , META           = __webpack_require__(226).KEY
      , $fails         = __webpack_require__(183)
      , shared         = __webpack_require__(169)
      , setToStringTag = __webpack_require__(216)
      , uid            = __webpack_require__(171)
      , wks            = __webpack_require__(217)
      , wksExt         = __webpack_require__(222)
      , wksDefine      = __webpack_require__(227)
      , keyOf          = __webpack_require__(228)
      , enumKeys       = __webpack_require__(229)
      , isArray        = __webpack_require__(232)
      , anObject       = __webpack_require__(179)
      , toIObject      = __webpack_require__(208)
      , toPrimitive    = __webpack_require__(185)
      , createDesc     = __webpack_require__(186)
      , _create        = __webpack_require__(204)
      , gOPNExt        = __webpack_require__(233)
      , $GOPD          = __webpack_require__(235)
      , $DP            = __webpack_require__(178)
      , $keys          = __webpack_require__(206)
      , gOPD           = $GOPD.f
      , dP             = $DP.f
      , gOPN           = gOPNExt.f
      , $Symbol        = global.Symbol
      , $JSON          = global.JSON
      , _stringify     = $JSON && $JSON.stringify
      , PROTOTYPE      = 'prototype'
      , HIDDEN         = wks('_hidden')
      , TO_PRIMITIVE   = wks('toPrimitive')
      , isEnum         = {}.propertyIsEnumerable
      , SymbolRegistry = shared('symbol-registry')
      , AllSymbols     = shared('symbols')
      , OPSymbols      = shared('op-symbols')
      , ObjectProto    = Object[PROTOTYPE]
      , USE_NATIVE     = typeof $Symbol == 'function'
      , QObject        = global.QObject;
    // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
    var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
    
    // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
    var setSymbolDesc = DESCRIPTORS && $fails(function(){
      return _create(dP({}, 'a', {
        get: function(){ return dP(this, 'a', {value: 7}).a; }
      })).a != 7;
    }) ? function(it, key, D){
      var protoDesc = gOPD(ObjectProto, key);
      if(protoDesc)delete ObjectProto[key];
      dP(it, key, D);
      if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);
    } : dP;
    
    var wrap = function(tag){
      var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
      sym._k = tag;
      return sym;
    };
    
    var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){
      return typeof it == 'symbol';
    } : function(it){
      return it instanceof $Symbol;
    };
    
    var $defineProperty = function defineProperty(it, key, D){
      if(it === ObjectProto)$defineProperty(OPSymbols, key, D);
      anObject(it);
      key = toPrimitive(key, true);
      anObject(D);
      if(has(AllSymbols, key)){
        if(!D.enumerable){
          if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));
          it[HIDDEN][key] = true;
        } else {
          if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
          D = _create(D, {enumerable: createDesc(0, false)});
        } return setSymbolDesc(it, key, D);
      } return dP(it, key, D);
    };
    var $defineProperties = function defineProperties(it, P){
      anObject(it);
      var keys = enumKeys(P = toIObject(P))
        , i    = 0
        , l = keys.length
        , key;
      while(l > i)$defineProperty(it, key = keys[i++], P[key]);
      return it;
    };
    var $create = function create(it, P){
      return P === undefined ? _create(it) : $defineProperties(_create(it), P);
    };
    var $propertyIsEnumerable = function propertyIsEnumerable(key){
      var E = isEnum.call(this, key = toPrimitive(key, true));
      if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;
      return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
    };
    var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
      it  = toIObject(it);
      key = toPrimitive(key, true);
      if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;
      var D = gOPD(it, key);
      if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
      return D;
    };
    var $getOwnPropertyNames = function getOwnPropertyNames(it){
      var names  = gOPN(toIObject(it))
        , result = []
        , i      = 0
        , key;
      while(names.length > i){
        if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);
      } return result;
    };
    var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
      var IS_OP  = it === ObjectProto
        , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))
        , result = []
        , i      = 0
        , key;
      while(names.length > i){
        if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);
      } return result;
    };
    
    // 19.4.1.1 Symbol([description])
    if(!USE_NATIVE){
      $Symbol = function Symbol(){
        if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');
        var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
        var $set = function(value){
          if(this === ObjectProto)$set.call(OPSymbols, value);
          if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
          setSymbolDesc(this, tag, createDesc(1, value));
        };
        if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});
        return wrap(tag);
      };
      redefine($Symbol[PROTOTYPE], 'toString', function toString(){
        return this._k;
      });
    
      $GOPD.f = $getOwnPropertyDescriptor;
      $DP.f   = $defineProperty;
      __webpack_require__(234).f = gOPNExt.f = $getOwnPropertyNames;
      __webpack_require__(231).f  = $propertyIsEnumerable;
      __webpack_require__(230).f = $getOwnPropertySymbols;
    
      if(DESCRIPTORS && !__webpack_require__(200)){
        redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
      }
    
      wksExt.f = function(name){
        return wrap(wks(name));
      }
    }
    
    $export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});
    
    for(var symbols = (
      // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
      'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
    ).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);
    
    for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);
    
    $export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
      // 19.4.2.1 Symbol.for(key)
      'for': function(key){
        return has(SymbolRegistry, key += '')
          ? SymbolRegistry[key]
          : SymbolRegistry[key] = $Symbol(key);
      },
      // 19.4.2.5 Symbol.keyFor(sym)
      keyFor: function keyFor(key){
        if(isSymbol(key))return keyOf(SymbolRegistry, key);
        throw TypeError(key + ' is not a symbol!');
      },
      useSetter: function(){ setter = true; },
      useSimple: function(){ setter = false; }
    });
    
    $export($export.S + $export.F * !USE_NATIVE, 'Object', {
      // 19.1.2.2 Object.create(O [, Properties])
      create: $create,
      // 19.1.2.4 Object.defineProperty(O, P, Attributes)
      defineProperty: $defineProperty,
      // 19.1.2.3 Object.defineProperties(O, Properties)
      defineProperties: $defineProperties,
      // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
      getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
      // 19.1.2.7 Object.getOwnPropertyNames(O)
      getOwnPropertyNames: $getOwnPropertyNames,
      // 19.1.2.8 Object.getOwnPropertySymbols(O)
      getOwnPropertySymbols: $getOwnPropertySymbols
    });
    
    // 24.3.2 JSON.stringify(value [, replacer [, space]])
    $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){
      var S = $Symbol();
      // MS Edge converts symbol values to JSON as {}
      // WebKit converts symbol values to JSON as null
      // V8 throws on boxed symbols
      return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
    })), 'JSON', {
      stringify: function stringify(it){
        if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
        var args = [it]
          , i    = 1
          , replacer, $replacer;
        while(arguments.length > i)args.push(arguments[i++]);
        replacer = args[1];
        if(typeof replacer == 'function')$replacer = replacer;
        if($replacer || !isArray(replacer))replacer = function(key, value){
          if($replacer)value = $replacer.call(this, key, value);
          if(!isSymbol(value))return value;
        };
        args[1] = replacer;
        return _stringify.apply($JSON, args);
      }
    });
    
    // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
    $Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(177)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
    // 19.4.3.5 Symbol.prototype[@@toStringTag]
    setToStringTag($Symbol, 'Symbol');
    // 20.2.1.9 Math[@@toStringTag]
    setToStringTag(Math, 'Math', true);
    // 24.3.3 JSON[@@toStringTag]
    setToStringTag(global.JSON, 'JSON', true);

/***/ },
/* 226 */
/***/ function(module, exports, __webpack_require__) {

    var META     = __webpack_require__(171)('meta')
      , isObject = __webpack_require__(180)
      , has      = __webpack_require__(167)
      , setDesc  = __webpack_require__(178).f
      , id       = 0;
    var isExtensible = Object.isExtensible || function(){
      return true;
    };
    var FREEZE = !__webpack_require__(183)(function(){
      return isExtensible(Object.preventExtensions({}));
    });
    var setMeta = function(it){
      setDesc(it, META, {value: {
        i: 'O' + ++id, // object ID
        w: {}          // weak collections IDs
      }});
    };
    var fastKey = function(it, create){
      // return primitive with prefix
      if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
      if(!has(it, META)){
        // can't set metadata to uncaught frozen object
        if(!isExtensible(it))return 'F';
        // not necessary to add metadata
        if(!create)return 'E';
        // add missing metadata
        setMeta(it);
      // return object ID
      } return it[META].i;
    };
    var getWeak = function(it, create){
      if(!has(it, META)){
        // can't set metadata to uncaught frozen object
        if(!isExtensible(it))return true;
        // not necessary to add metadata
        if(!create)return false;
        // add missing metadata
        setMeta(it);
      // return hash weak collections IDs
      } return it[META].w;
    };
    // add metadata on freeze-family methods calling
    var onFreeze = function(it){
      if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);
      return it;
    };
    var meta = module.exports = {
      KEY:      META,
      NEED:     false,
      fastKey:  fastKey,
      getWeak:  getWeak,
      onFreeze: onFreeze
    };

/***/ },
/* 227 */
/***/ function(module, exports, __webpack_require__) {

    var global         = __webpack_require__(170)
      , core           = __webpack_require__(174)
      , LIBRARY        = __webpack_require__(200)
      , wksExt         = __webpack_require__(222)
      , defineProperty = __webpack_require__(178).f;
    module.exports = function(name){
      var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
      if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});
    };

/***/ },
/* 228 */
/***/ function(module, exports, __webpack_require__) {

    var getKeys   = __webpack_require__(206)
      , toIObject = __webpack_require__(208);
    module.exports = function(object, el){
      var O      = toIObject(object)
        , keys   = getKeys(O)
        , length = keys.length
        , index  = 0
        , key;
      while(length > index)if(O[key = keys[index++]] === el)return key;
    };

/***/ },
/* 229 */
/***/ function(module, exports, __webpack_require__) {

    // all enumerable object keys, includes symbols
    var getKeys = __webpack_require__(206)
      , gOPS    = __webpack_require__(230)
      , pIE     = __webpack_require__(231);
    module.exports = function(it){
      var result     = getKeys(it)
        , getSymbols = gOPS.f;
      if(getSymbols){
        var symbols = getSymbols(it)
          , isEnum  = pIE.f
          , i       = 0
          , key;
        while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);
      } return result;
    };

/***/ },
/* 230 */
/***/ function(module, exports) {

    exports.f = Object.getOwnPropertySymbols;

/***/ },
/* 231 */
/***/ function(module, exports) {

    exports.f = {}.propertyIsEnumerable;

/***/ },
/* 232 */
/***/ function(module, exports, __webpack_require__) {

    // 7.2.2 IsArray(argument)
    var cof = __webpack_require__(210);
    module.exports = Array.isArray || function isArray(arg){
      return cof(arg) == 'Array';
    };

/***/ },
/* 233 */
/***/ function(module, exports, __webpack_require__) {

    // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
    var toIObject = __webpack_require__(208)
      , gOPN      = __webpack_require__(234).f
      , toString  = {}.toString;
    
    var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
      ? Object.getOwnPropertyNames(window) : [];
    
    var getWindowNames = function(it){
      try {
        return gOPN(it);
      } catch(e){
        return windowNames.slice();
      }
    };
    
    module.exports.f = function getOwnPropertyNames(it){
      return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
    };


/***/ },
/* 234 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
    var $keys      = __webpack_require__(207)
      , hiddenKeys = __webpack_require__(214).concat('length', 'prototype');
    
    exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){
      return $keys(O, hiddenKeys);
    };

/***/ },
/* 235 */
/***/ function(module, exports, __webpack_require__) {

    var pIE            = __webpack_require__(231)
      , createDesc     = __webpack_require__(186)
      , toIObject      = __webpack_require__(208)
      , toPrimitive    = __webpack_require__(185)
      , has            = __webpack_require__(167)
      , IE8_DOM_DEFINE = __webpack_require__(181)
      , gOPD           = Object.getOwnPropertyDescriptor;
    
    exports.f = __webpack_require__(182) ? gOPD : function getOwnPropertyDescriptor(O, P){
      O = toIObject(O);
      P = toPrimitive(P, true);
      if(IE8_DOM_DEFINE)try {
        return gOPD(O, P);
      } catch(e){ /* empty */ }
      if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);
    };

/***/ },
/* 236 */
/***/ function(module, exports) {



/***/ },
/* 237 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(227)('asyncIterator');

/***/ },
/* 238 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(227)('observable');

/***/ },
/* 239 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    exports.__esModule = true;
    
    var _setPrototypeOf = __webpack_require__(240);
    
    var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);
    
    var _create = __webpack_require__(244);
    
    var _create2 = _interopRequireDefault(_create);
    
    var _typeof2 = __webpack_require__(193);
    
    var _typeof3 = _interopRequireDefault(_typeof2);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = function (subClass, superClass) {
      if (typeof superClass !== "function" && superClass !== null) {
        throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass)));
      }
    
      subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {
        constructor: {
          value: subClass,
          enumerable: false,
          writable: true,
          configurable: true
        }
      });
      if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;
    };

/***/ },
/* 240 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(241), __esModule: true };

/***/ },
/* 241 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(242);
    module.exports = __webpack_require__(174).Object.setPrototypeOf;

/***/ },
/* 242 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.3.19 Object.setPrototypeOf(O, proto)
    var $export = __webpack_require__(173);
    $export($export.S, 'Object', {setPrototypeOf: __webpack_require__(243).set});

/***/ },
/* 243 */
/***/ function(module, exports, __webpack_require__) {

    // Works with __proto__ only. Old v8 can't work with null proto objects.
    /* eslint-disable no-proto */
    var isObject = __webpack_require__(180)
      , anObject = __webpack_require__(179);
    var check = function(O, proto){
      anObject(O);
      if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!");
    };
    module.exports = {
      set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
        function(test, buggy, set){
          try {
            set = __webpack_require__(175)(Function.call, __webpack_require__(235).f(Object.prototype, '__proto__').set, 2);
            set(test, []);
            buggy = !(test instanceof Array);
          } catch(e){ buggy = true; }
          return function setPrototypeOf(O, proto){
            check(O, proto);
            if(buggy)O.__proto__ = proto;
            else set(O, proto);
            return O;
          };
        }({}, false) : undefined),
      check: check
    };

/***/ },
/* 244 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(245), __esModule: true };

/***/ },
/* 245 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(246);
    var $Object = __webpack_require__(174).Object;
    module.exports = function create(P, D){
      return $Object.create(P, D);
    };

/***/ },
/* 246 */
/***/ function(module, exports, __webpack_require__) {

    var $export = __webpack_require__(173)
    // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
    $export($export.S, 'Object', {create: __webpack_require__(204)});

/***/ },
/* 247 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.__RewireAPI__ = exports.__ResetDependency__ = exports.__set__ = exports.__Rewire__ = exports.__GetDependency__ = exports.__get__ = exports.RedBoxError = undefined;
    
    var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactDom = __webpack_require__(158);
    
    var _reactDom2 = _interopRequireDefault(_reactDom);
    
    var _style = __webpack_require__(248);
    
    var _style2 = _interopRequireDefault(_style);
    
    var _errorStackParser = __webpack_require__(249);
    
    var _errorStackParser2 = _interopRequireDefault(_errorStackParser);
    
    var _objectAssign = __webpack_require__(251);
    
    var _objectAssign2 = _interopRequireDefault(_objectAssign);
    
    var _lib = __webpack_require__(252);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var RedBoxError = exports.RedBoxError = function (_get__2) {
      _inherits(RedBoxError, _get__2);
    
      function RedBoxError() {
        _classCallCheck(this, RedBoxError);
    
        return _possibleConstructorReturn(this, (RedBoxError.__proto__ || Object.getPrototypeOf(RedBoxError)).apply(this, arguments));
      }
    
      _createClass(RedBoxError, [{
        key: 'renderFrames',
        value: function renderFrames(frames) {
          var _props = this.props,
              filename = _props.filename,
              editorScheme = _props.editorScheme,
              useLines = _props.useLines,
              useColumns = _props.useColumns;
    
          var _get__3 = _get__('assign')({}, _get__('style'), this.props.style),
              frame = _get__3.frame,
              file = _get__3.file,
              linkToFile = _get__3.linkToFile;
    
          return frames.map(function (f, index) {
            var text = void 0;
            var url = void 0;
    
            if (index === 0 && filename && !_get__('isFilenameAbsolute')(f.fileName)) {
              url = _get__('makeUrl')(filename, editorScheme);
              text = _get__('makeLinkText')(filename);
            } else {
              var lines = useLines ? f.lineNumber : null;
              var columns = useColumns ? f.columnNumber : null;
              url = _get__('makeUrl')(f.fileName, editorScheme, lines, columns);
              text = _get__('makeLinkText')(f.fileName, lines, columns);
            }
    
            return _get__('React').createElement(
              'div',
              { style: frame, key: index },
              _get__('React').createElement(
                'div',
                null,
                f.functionName
              ),
              _get__('React').createElement(
                'div',
                { style: file },
                _get__('React').createElement(
                  'a',
                  { href: url, style: linkToFile },
                  text
                )
              )
            );
          });
        }
      }, {
        key: 'render',
        value: function render() {
          var _props2 = this.props,
              error = _props2.error,
              className = _props2.className;
    
          var _get__4 = _get__('assign')({}, _get__('style'), this.props.style),
              redbox = _get__4.redbox,
              message = _get__4.message,
              stack = _get__4.stack,
              frame = _get__4.frame;
    
          var frames = void 0;
          var parseError = void 0;
          try {
            frames = _get__('ErrorStackParser').parse(error);
          } catch (e) {
            parseError = new Error('Failed to parse stack trace. Stack trace information unavailable.');
          }
    
          if (parseError) {
            frames = _get__('React').createElement(
              'div',
              { style: frame, key: 0 },
              _get__('React').createElement(
                'div',
                null,
                parseError.message
              )
            );
          } else {
            frames = this.renderFrames(frames);
          }
    
          return _get__('React').createElement(
            'div',
            { style: redbox, className: className },
            _get__('React').createElement(
              'div',
              { style: message },
              error.name,
              ': ',
              error.message
            ),
            _get__('React').createElement(
              'div',
              { style: stack },
              frames
            )
          );
        }
      }]);
    
      return RedBoxError;
    }(_get__('Component'));
    
    // "Portal" component for actual RedBoxError component to
    // render to (directly under body). Prevents bugs as in #27.
    
    
    RedBoxError.propTypes = {
      error: _get__('PropTypes').instanceOf(Error).isRequired,
      filename: _get__('PropTypes').string,
      editorScheme: _get__('PropTypes').string,
      useLines: _get__('PropTypes').bool,
      useColumns: _get__('PropTypes').bool,
      style: _get__('PropTypes').object,
      className: _get__('PropTypes').string
    };
    RedBoxError.displayName = 'RedBoxError';
    RedBoxError.defaultProps = {
      useLines: true,
      useColumns: true
    };
    
    var RedBox = function (_get__5) {
      _inherits(RedBox, _get__5);
    
      function RedBox() {
        _classCallCheck(this, RedBox);
    
        return _possibleConstructorReturn(this, (RedBox.__proto__ || Object.getPrototypeOf(RedBox)).apply(this, arguments));
      }
    
      _createClass(RedBox, [{
        key: 'componentDidMount',
        value: function componentDidMount() {
          this.el = document.createElement('div');
          document.body.appendChild(this.el);
          this.renderRedBoxError();
        }
      }, {
        key: 'componentDidUpdate',
        value: function componentDidUpdate() {
          this.renderRedBoxError();
        }
      }, {
        key: 'componentWillUnmount',
        value: function componentWillUnmount() {
          _get__('ReactDOM').unmountComponentAtNode(this.el);
          document.body.removeChild(this.el);
          this.el = null;
        }
      }, {
        key: 'renderRedBoxError',
        value: function renderRedBoxError() {
          _get__('ReactDOM').render(_get__('React').createElement(_get__('RedBoxError'), this.props), this.el);
        }
      }, {
        key: 'render',
        value: function render() {
          return null;
        }
      }]);
    
      return RedBox;
    }(_get__('Component'));
    
    RedBox.propTypes = {
      error: _get__('PropTypes').instanceOf(Error).isRequired
    };
    RedBox.displayName = 'RedBox';
    exports.default = RedBox;
    
    var _RewiredData__ = Object.create(null);
    
    var INTENTIONAL_UNDEFINED = '__INTENTIONAL_UNDEFINED__';
    var _RewireAPI__ = {};
    
    (function () {
      function addPropertyToAPIObject(name, value) {
        Object.defineProperty(_RewireAPI__, name, {
          value: value,
          enumerable: false,
          configurable: true
        });
      }
    
      addPropertyToAPIObject('__get__', _get__);
      addPropertyToAPIObject('__GetDependency__', _get__);
      addPropertyToAPIObject('__Rewire__', _set__);
      addPropertyToAPIObject('__set__', _set__);
      addPropertyToAPIObject('__reset__', _reset__);
      addPropertyToAPIObject('__ResetDependency__', _reset__);
      addPropertyToAPIObject('__with__', _with__);
    })();
    
    function _get__(variableName) {
      if (_RewiredData__ === undefined || _RewiredData__[variableName] === undefined) {
        return _get_original__(variableName);
      } else {
        var value = _RewiredData__[variableName];
    
        if (value === INTENTIONAL_UNDEFINED) {
          return undefined;
        } else {
          return value;
        }
      }
    }
    
    function _get_original__(variableName) {
      switch (variableName) {
        case 'PropTypes':
          return _react.PropTypes;
    
        case 'assign':
          return _objectAssign2.default;
    
        case 'style':
          return _style2.default;
    
        case 'isFilenameAbsolute':
          return _lib.isFilenameAbsolute;
    
        case 'makeUrl':
          return _lib.makeUrl;
    
        case 'makeLinkText':
          return _lib.makeLinkText;
    
        case 'ErrorStackParser':
          return _errorStackParser2.default;
    
        case 'Component':
          return _react.Component;
    
        case 'ReactDOM':
          return _reactDom2.default;
    
        case 'React':
          return _react2.default;
    
        case 'RedBoxError':
          return RedBoxError;
      }
    
      return undefined;
    }
    
    function _assign__(variableName, value) {
      if (_RewiredData__ === undefined || _RewiredData__[variableName] === undefined) {
        return _set_original__(variableName, value);
      } else {
        return _RewiredData__[variableName] = value;
      }
    }
    
    function _set_original__(variableName, _value) {
      switch (variableName) {}
    
      return undefined;
    }
    
    function _update_operation__(operation, variableName, prefix) {
      var oldValue = _get__(variableName);
    
      var newValue = operation === '++' ? oldValue + 1 : oldValue - 1;
    
      _assign__(variableName, newValue);
    
      return prefix ? newValue : oldValue;
    }
    
    function _set__(variableName, value) {
      if ((typeof variableName === 'undefined' ? 'undefined' : _typeof(variableName)) === 'object') {
        Object.keys(variableName).forEach(function (name) {
          _RewiredData__[name] = variableName[name];
        });
      } else {
        if (value === undefined) {
          _RewiredData__[variableName] = INTENTIONAL_UNDEFINED;
        } else {
          _RewiredData__[variableName] = value;
        }
    
        return function () {
          _reset__(variableName);
        };
      }
    }
    
    function _reset__(variableName) {
      delete _RewiredData__[variableName];
    }
    
    function _with__(object) {
      var rewiredVariableNames = Object.keys(object);
      var previousValues = {};
    
      function reset() {
        rewiredVariableNames.forEach(function (variableName) {
          _RewiredData__[variableName] = previousValues[variableName];
        });
      }
    
      return function (callback) {
        rewiredVariableNames.forEach(function (variableName) {
          previousValues[variableName] = _RewiredData__[variableName];
          _RewiredData__[variableName] = object[variableName];
        });
        var result = callback();
    
        if (!!result && typeof result.then == 'function') {
          result.then(reset).catch(reset);
        } else {
          reset();
        }
    
        return result;
      };
    }
    
    var _typeOfOriginalExport = typeof RedBox === 'undefined' ? 'undefined' : _typeof(RedBox);
    
    function addNonEnumerableProperty(name, value) {
      Object.defineProperty(RedBox, name, {
        value: value,
        enumerable: false,
        configurable: true
      });
    }
    
    if ((_typeOfOriginalExport === 'object' || _typeOfOriginalExport === 'function') && Object.isExtensible(RedBox)) {
      addNonEnumerableProperty('__get__', _get__);
      addNonEnumerableProperty('__GetDependency__', _get__);
      addNonEnumerableProperty('__Rewire__', _set__);
      addNonEnumerableProperty('__set__', _set__);
      addNonEnumerableProperty('__reset__', _reset__);
      addNonEnumerableProperty('__ResetDependency__', _reset__);
      addNonEnumerableProperty('__with__', _with__);
      addNonEnumerableProperty('__RewireAPI__', _RewireAPI__);
    }
    
    exports.__get__ = _get__;
    exports.__GetDependency__ = _get__;
    exports.__Rewire__ = _set__;
    exports.__set__ = _set__;
    exports.__ResetDependency__ = _reset__;
    exports.__RewireAPI__ = _RewireAPI__;

/***/ },
/* 248 */
/***/ function(module, exports) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    var _DefaultExportValue = {
      redbox: {
        boxSizing: 'border-box',
        fontFamily: 'sans-serif',
        position: 'fixed',
        padding: 10,
        top: '0px',
        left: '0px',
        bottom: '0px',
        right: '0px',
        width: '100%',
        background: 'rgb(204, 0, 0)',
        color: 'white',
        zIndex: 2147483647,
        textAlign: 'left',
        fontSize: '16px',
        lineHeight: 1.2,
        overflow: 'auto'
      },
      message: {
        fontWeight: 'bold'
      },
      stack: {
        fontFamily: 'monospace',
        marginTop: '2em'
      },
      frame: {
        marginTop: '1em'
      },
      file: {
        fontSize: '0.8em',
        color: 'rgba(255, 255, 255, 0.7)'
      },
      linkToFile: {
        textDecoration: 'none',
        color: 'rgba(255, 255, 255, 0.7)'
      }
    };
    exports.default = _DefaultExportValue;

/***/ },
/* 249 */
/***/ function(module, exports, __webpack_require__) {

    var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(root, factory) {
        'use strict';
        // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.
    
        /* istanbul ignore next */
        if (true) {
            !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(250)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
        } else if (typeof exports === 'object') {
            module.exports = factory(require('stackframe'));
        } else {
            root.ErrorStackParser = factory(root.StackFrame);
        }
    }(this, function ErrorStackParser(StackFrame) {
        'use strict';
    
        var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/;
        var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+\:\d+|\(native\))/m;
        var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code\])?$/;
    
        function _map(array, fn, thisArg) {
            if (typeof Array.prototype.map === 'function') {
                return array.map(fn, thisArg);
            } else {
                var output = new Array(array.length);
                for (var i = 0; i < array.length; i++) {
                    output[i] = fn.call(thisArg, array[i]);
                }
                return output;
            }
        }
    
        function _filter(array, fn, thisArg) {
            if (typeof Array.prototype.filter === 'function') {
                return array.filter(fn, thisArg);
            } else {
                var output = [];
                for (var i = 0; i < array.length; i++) {
                    if (fn.call(thisArg, array[i])) {
                        output.push(array[i]);
                    }
                }
                return output;
            }
        }
    
        function _indexOf(array, target) {
            if (typeof Array.prototype.indexOf === 'function') {
                return array.indexOf(target);
            } else {
                for (var i = 0; i < array.length; i++) {
                    if (array[i] === target) {
                        return i;
                    }
                }
                return -1;
            }
        }
    
        return {
            /**
             * Given an Error object, extract the most information from it.
             *
             * @param {Error} error object
             * @return {Array} of StackFrames
             */
            parse: function ErrorStackParser$$parse(error) {
                if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {
                    return this.parseOpera(error);
                } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {
                    return this.parseV8OrIE(error);
                } else if (error.stack) {
                    return this.parseFFOrSafari(error);
                } else {
                    throw new Error('Cannot parse given Error object');
                }
            },
    
            // Separate line and column numbers from a string of the form: (URI:Line:Column)
            extractLocation: function ErrorStackParser$$extractLocation(urlLike) {
                // Fail-fast but return locations like "(native)"
                if (urlLike.indexOf(':') === -1) {
                    return [urlLike];
                }
    
                var regExp = /(.+?)(?:\:(\d+))?(?:\:(\d+))?$/;
                var parts = regExp.exec(urlLike.replace(/[\(\)]/g, ''));
                return [parts[1], parts[2] || undefined, parts[3] || undefined];
            },
    
            parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {
                var filtered = _filter(error.stack.split('\n'), function(line) {
                    return !!line.match(CHROME_IE_STACK_REGEXP);
                }, this);
    
                return _map(filtered, function(line) {
                    if (line.indexOf('(eval ') > -1) {
                        // Throw away eval information until we implement stacktrace.js/stackframe#8
                        line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, '');
                    }
                    var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1);
                    var locationParts = this.extractLocation(tokens.pop());
                    var functionName = tokens.join(' ') || undefined;
                    var fileName = _indexOf(['eval', '<anonymous>'], locationParts[0]) > -1 ? undefined : locationParts[0];
    
                    return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);
                }, this);
            },
    
            parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {
                var filtered = _filter(error.stack.split('\n'), function(line) {
                    return !line.match(SAFARI_NATIVE_CODE_REGEXP);
                }, this);
    
                return _map(filtered, function(line) {
                    // Throw away eval information until we implement stacktrace.js/stackframe#8
                    if (line.indexOf(' > eval') > -1) {
                        line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1');
                    }
    
                    if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {
                        // Safari eval frames only have function names and nothing else
                        return new StackFrame(line);
                    } else {
                        var tokens = line.split('@');
                        var locationParts = this.extractLocation(tokens.pop());
                        var functionName = tokens.join('@') || undefined;
                        return new StackFrame(functionName,
                            undefined,
                            locationParts[0],
                            locationParts[1],
                            locationParts[2],
                            line);
                    }
                }, this);
            },
    
            parseOpera: function ErrorStackParser$$parseOpera(e) {
                if (!e.stacktrace || (e.message.indexOf('\n') > -1 &&
                    e.message.split('\n').length > e.stacktrace.split('\n').length)) {
                    return this.parseOpera9(e);
                } else if (!e.stack) {
                    return this.parseOpera10(e);
                } else {
                    return this.parseOpera11(e);
                }
            },
    
            parseOpera9: function ErrorStackParser$$parseOpera9(e) {
                var lineRE = /Line (\d+).*script (?:in )?(\S+)/i;
                var lines = e.message.split('\n');
                var result = [];
    
                for (var i = 2, len = lines.length; i < len; i += 2) {
                    var match = lineRE.exec(lines[i]);
                    if (match) {
                        result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));
                    }
                }
    
                return result;
            },
    
            parseOpera10: function ErrorStackParser$$parseOpera10(e) {
                var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i;
                var lines = e.stacktrace.split('\n');
                var result = [];
    
                for (var i = 0, len = lines.length; i < len; i += 2) {
                    var match = lineRE.exec(lines[i]);
                    if (match) {
                        result.push(
                            new StackFrame(
                                match[3] || undefined,
                                undefined,
                                match[2],
                                match[1],
                                undefined,
                                lines[i]
                            )
                        );
                    }
                }
    
                return result;
            },
    
            // Opera 10.65+ Error.stack very similar to FF/Safari
            parseOpera11: function ErrorStackParser$$parseOpera11(error) {
                var filtered = _filter(error.stack.split('\n'), function(line) {
                    return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);
                }, this);
    
                return _map(filtered, function(line) {
                    var tokens = line.split('@');
                    var locationParts = this.extractLocation(tokens.pop());
                    var functionCall = (tokens.shift() || '');
                    var functionName = functionCall
                            .replace(/<anonymous function(: (\w+))?>/, '$2')
                            .replace(/\([^\)]*\)/g, '') || undefined;
                    var argsRaw;
                    if (functionCall.match(/\(([^\)]*)\)/)) {
                        argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1');
                    }
                    var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?
                        undefined : argsRaw.split(',');
                    return new StackFrame(
                        functionName,
                        args,
                        locationParts[0],
                        locationParts[1],
                        locationParts[2],
                        line);
                }, this);
            }
        };
    }));
    


/***/ },
/* 250 */
/***/ function(module, exports, __webpack_require__) {

    var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {
        'use strict';
        // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.
    
        /* istanbul ignore next */
        if (true) {
            !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
        } else if (typeof exports === 'object') {
            module.exports = factory();
        } else {
            root.StackFrame = factory();
        }
    }(this, function () {
        'use strict';
        function _isNumber(n) {
            return !isNaN(parseFloat(n)) && isFinite(n);
        }
    
        function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {
            if (functionName !== undefined) {
                this.setFunctionName(functionName);
            }
            if (args !== undefined) {
                this.setArgs(args);
            }
            if (fileName !== undefined) {
                this.setFileName(fileName);
            }
            if (lineNumber !== undefined) {
                this.setLineNumber(lineNumber);
            }
            if (columnNumber !== undefined) {
                this.setColumnNumber(columnNumber);
            }
            if (source !== undefined) {
                this.setSource(source);
            }
        }
    
        StackFrame.prototype = {
            getFunctionName: function () {
                return this.functionName;
            },
            setFunctionName: function (v) {
                this.functionName = String(v);
            },
    
            getArgs: function () {
                return this.args;
            },
            setArgs: function (v) {
                if (Object.prototype.toString.call(v) !== '[object Array]') {
                    throw new TypeError('Args must be an Array');
                }
                this.args = v;
            },
    
            // NOTE: Property name may be misleading as it includes the path,
            // but it somewhat mirrors V8's JavaScriptStackTraceApi
            // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's
            // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14
            getFileName: function () {
                return this.fileName;
            },
            setFileName: function (v) {
                this.fileName = String(v);
            },
    
            getLineNumber: function () {
                return this.lineNumber;
            },
            setLineNumber: function (v) {
                if (!_isNumber(v)) {
                    throw new TypeError('Line Number must be a Number');
                }
                this.lineNumber = Number(v);
            },
    
            getColumnNumber: function () {
                return this.columnNumber;
            },
            setColumnNumber: function (v) {
                if (!_isNumber(v)) {
                    throw new TypeError('Column Number must be a Number');
                }
                this.columnNumber = Number(v);
            },
    
            getSource: function () {
                return this.source;
            },
            setSource: function (v) {
                this.source = String(v);
            },
    
            toString: function() {
                var functionName = this.getFunctionName() || '{anonymous}';
                var args = '(' + (this.getArgs() || []).join(',') + ')';
                var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';
                var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';
                var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';
                return functionName + args + fileName + lineNumber + columnNumber;
            }
        };
    
        return StackFrame;
    }));


/***/ },
/* 251 */
/***/ function(module, exports) {

    /*
    object-assign
    (c) Sindre Sorhus
    @license MIT
    */
    
    'use strict';
    /* eslint-disable no-unused-vars */
    var getOwnPropertySymbols = Object.getOwnPropertySymbols;
    var hasOwnProperty = Object.prototype.hasOwnProperty;
    var propIsEnumerable = Object.prototype.propertyIsEnumerable;
    
    function toObject(val) {
        if (val === null || val === undefined) {
            throw new TypeError('Object.assign cannot be called with null or undefined');
        }
    
        return Object(val);
    }
    
    function shouldUseNative() {
        try {
            if (!Object.assign) {
                return false;
            }
    
            // Detect buggy property enumeration order in older V8 versions.
    
            // https://bugs.chromium.org/p/v8/issues/detail?id=4118
            var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
            test1[5] = 'de';
            if (Object.getOwnPropertyNames(test1)[0] === '5') {
                return false;
            }
    
            // https://bugs.chromium.org/p/v8/issues/detail?id=3056
            var test2 = {};
            for (var i = 0; i < 10; i++) {
                test2['_' + String.fromCharCode(i)] = i;
            }
            var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
                return test2[n];
            });
            if (order2.join('') !== '0123456789') {
                return false;
            }
    
            // https://bugs.chromium.org/p/v8/issues/detail?id=3056
            var test3 = {};
            'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
                test3[letter] = letter;
            });
            if (Object.keys(Object.assign({}, test3)).join('') !==
                    'abcdefghijklmnopqrst') {
                return false;
            }
    
            return true;
        } catch (err) {
            // We don't expect any of the above to throw, but better to be safe.
            return false;
        }
    }
    
    module.exports = shouldUseNative() ? Object.assign : function (target, source) {
        var from;
        var to = toObject(target);
        var symbols;
    
        for (var s = 1; s < arguments.length; s++) {
            from = Object(arguments[s]);
    
            for (var key in from) {
                if (hasOwnProperty.call(from, key)) {
                    to[key] = from[key];
                }
            }
    
            if (getOwnPropertySymbols) {
                symbols = getOwnPropertySymbols(from);
                for (var i = 0; i < symbols.length; i++) {
                    if (propIsEnumerable.call(from, symbols[i])) {
                        to[symbols[i]] = from[symbols[i]];
                    }
                }
            }
        }
    
        return to;
    };


/***/ },
/* 252 */
/***/ function(module, exports) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
    
    var filenameWithoutLoaders = exports.filenameWithoutLoaders = function filenameWithoutLoaders() {
      var filename = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
    
      var index = filename.lastIndexOf('!');
    
      return index < 0 ? filename : filename.substr(index + 1);
    };
    
    var filenameHasLoaders = exports.filenameHasLoaders = function filenameHasLoaders(filename) {
      var actualFilename = _get__('filenameWithoutLoaders')(filename);
    
      return actualFilename !== filename;
    };
    
    var filenameHasSchema = exports.filenameHasSchema = function filenameHasSchema(filename) {
      return (/^[\w]+\:/.test(filename)
      );
    };
    
    var isFilenameAbsolute = exports.isFilenameAbsolute = function isFilenameAbsolute(filename) {
      var actualFilename = _get__('filenameWithoutLoaders')(filename);
    
      if (actualFilename.indexOf('/') === 0) {
        return true;
      }
    
      return false;
    };
    
    var makeUrl = exports.makeUrl = function makeUrl(filename, scheme, line, column) {
      var actualFilename = _get__('filenameWithoutLoaders')(filename);
    
      if (_get__('filenameHasSchema')(filename)) {
        return actualFilename;
      }
    
      var url = 'file://' + actualFilename;
    
      if (scheme) {
        url = scheme + '://open?url=' + url;
    
        if (line && actualFilename === filename) {
          url = url + '&line=' + line;
    
          if (column) {
            url = url + '&column=' + column;
          }
        }
      }
    
      return url;
    };
    
    var makeLinkText = exports.makeLinkText = function makeLinkText(filename, line, column) {
      var text = _get__('filenameWithoutLoaders')(filename);
    
      if (line && text === filename) {
        text = text + ':' + line;
    
        if (column) {
          text = text + ':' + column;
        }
      }
    
      return text;
    };
    
    var _RewiredData__ = Object.create(null);
    
    var INTENTIONAL_UNDEFINED = '__INTENTIONAL_UNDEFINED__';
    var _RewireAPI__ = {};
    
    (function () {
      function addPropertyToAPIObject(name, value) {
        Object.defineProperty(_RewireAPI__, name, {
          value: value,
          enumerable: false,
          configurable: true
        });
      }
    
      addPropertyToAPIObject('__get__', _get__);
      addPropertyToAPIObject('__GetDependency__', _get__);
      addPropertyToAPIObject('__Rewire__', _set__);
      addPropertyToAPIObject('__set__', _set__);
      addPropertyToAPIObject('__reset__', _reset__);
      addPropertyToAPIObject('__ResetDependency__', _reset__);
      addPropertyToAPIObject('__with__', _with__);
    })();
    
    function _get__(variableName) {
      if (_RewiredData__ === undefined || _RewiredData__[variableName] === undefined) {
        return _get_original__(variableName);
      } else {
        var value = _RewiredData__[variableName];
    
        if (value === INTENTIONAL_UNDEFINED) {
          return undefined;
        } else {
          return value;
        }
      }
    }
    
    function _get_original__(variableName) {
      switch (variableName) {
        case 'filenameWithoutLoaders':
          return filenameWithoutLoaders;
    
        case 'filenameHasSchema':
          return filenameHasSchema;
      }
    
      return undefined;
    }
    
    function _assign__(variableName, value) {
      if (_RewiredData__ === undefined || _RewiredData__[variableName] === undefined) {
        return _set_original__(variableName, value);
      } else {
        return _RewiredData__[variableName] = value;
      }
    }
    
    function _set_original__(variableName, _value) {
      switch (variableName) {}
    
      return undefined;
    }
    
    function _update_operation__(operation, variableName, prefix) {
      var oldValue = _get__(variableName);
    
      var newValue = operation === '++' ? oldValue + 1 : oldValue - 1;
    
      _assign__(variableName, newValue);
    
      return prefix ? newValue : oldValue;
    }
    
    function _set__(variableName, value) {
      if ((typeof variableName === 'undefined' ? 'undefined' : _typeof(variableName)) === 'object') {
        Object.keys(variableName).forEach(function (name) {
          _RewiredData__[name] = variableName[name];
        });
      } else {
        if (value === undefined) {
          _RewiredData__[variableName] = INTENTIONAL_UNDEFINED;
        } else {
          _RewiredData__[variableName] = value;
        }
    
        return function () {
          _reset__(variableName);
        };
      }
    }
    
    function _reset__(variableName) {
      delete _RewiredData__[variableName];
    }
    
    function _with__(object) {
      var rewiredVariableNames = Object.keys(object);
      var previousValues = {};
    
      function reset() {
        rewiredVariableNames.forEach(function (variableName) {
          _RewiredData__[variableName] = previousValues[variableName];
        });
      }
    
      return function (callback) {
        rewiredVariableNames.forEach(function (variableName) {
          previousValues[variableName] = _RewiredData__[variableName];
          _RewiredData__[variableName] = object[variableName];
        });
        var result = callback();
    
        if (!!result && typeof result.then == 'function') {
          result.then(reset).catch(reset);
        } else {
          reset();
        }
    
        return result;
      };
    }
    
    exports.__get__ = _get__;
    exports.__GetDependency__ = _get__;
    exports.__Rewire__ = _set__;
    exports.__set__ = _set__;
    exports.__ResetDependency__ = _reset__;
    exports.__RewireAPI__ = _RewireAPI__;
    exports.default = _RewireAPI__;

/***/ },
/* 253 */
/***/ function(module, exports) {

    'use strict';
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = catchErrors;
    function catchErrors(_ref) {
      var filename = _ref.filename;
      var components = _ref.components;
      var imports = _ref.imports;
    
      var _imports = _slicedToArray(imports, 3);
    
      var React = _imports[0];
      var ErrorReporter = _imports[1];
      var reporterOptions = _imports[2];
    
      if (!React || !React.Component) {
        throw new Error('imports[0] for react-transform-catch-errors does not look like React.');
      }
      if (typeof ErrorReporter !== 'function') {
        throw new Error('imports[1] for react-transform-catch-errors does not look like a React component.');
      }
    
      return function wrapToCatchErrors(ReactClass, componentId) {
        var originalRender = ReactClass.prototype.render;
    
        ReactClass.prototype.render = function tryRender() {
          try {
            return originalRender.apply(this, arguments);
          } catch (err) {
            setTimeout(function () {
              if (typeof console.reportErrorsAsExceptions !== 'undefined') {
                var prevReportErrorAsExceptions = console.reportErrorsAsExceptions;
                // We're in React Native. Don't throw.
                // Stop react-native from triggering its own error handler
                console.reportErrorsAsExceptions = false;
                // Log an error
                console.error(err);
                // Reactivate it so other errors are still handled
                console.reportErrorsAsExceptions = prevReportErrorAsExceptions;
              } else {
                throw err;
              }
            });
    
            return React.createElement(ErrorReporter, _extends({
              error: err,
              filename: filename
            }, reporterOptions));
          }
        };
    
        return ReactClass;
      };
    }

/***/ },
/* 254 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, '__esModule', {
      value: true
    });
    
    var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
    
    exports['default'] = proxyReactComponents;
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    var _reactProxy = __webpack_require__(255);
    
    var _globalWindow = __webpack_require__(407);
    
    var _globalWindow2 = _interopRequireDefault(_globalWindow);
    
    var componentProxies = undefined;
    if (_globalWindow2['default'].__reactComponentProxies) {
      componentProxies = _globalWindow2['default'].__reactComponentProxies;
    } else {
      componentProxies = {};
      Object.defineProperty(_globalWindow2['default'], '__reactComponentProxies', {
        configurable: true,
        enumerable: false,
        writable: false,
        value: componentProxies
      });
    }
    
    function proxyReactComponents(_ref) {
      var filename = _ref.filename;
      var components = _ref.components;
      var imports = _ref.imports;
      var locals = _ref.locals;
    
      var _imports = _slicedToArray(imports, 1);
    
      var React = _imports[0];
    
      var _locals = _slicedToArray(locals, 1);
    
      var hot = _locals[0].hot;
    
      if (!React.Component) {
        throw new Error('imports[0] for react-transform-hmr does not look like React.');
      }
    
      if (!hot || typeof hot.accept !== 'function') {
        throw new Error('locals[0] does not appear to be a `module` object with Hot Module ' + 'replacement API enabled. You should disable react-transform-hmr in ' + 'production by using `env` section in Babel configuration. See the ' + 'example in README: https://github.com/gaearon/react-transform-hmr');
      }
    
      if (Object.keys(components).some(function (key) {
        return !components[key].isInFunction;
      })) {
        hot.accept(function (err) {
          if (err) {
            console.warn('[React Transform HMR] There was an error updating ' + filename + ':');
            console.error(err);
          }
        });
      }
    
      var forceUpdate = (0, _reactProxy.getForceUpdate)(React);
    
      return function wrapWithProxy(ReactClass, uniqueId) {
        var _components$uniqueId = components[uniqueId];
        var _components$uniqueId$isInFunction = _components$uniqueId.isInFunction;
        var isInFunction = _components$uniqueId$isInFunction === undefined ? false : _components$uniqueId$isInFunction;
        var _components$uniqueId$displayName = _components$uniqueId.displayName;
        var displayName = _components$uniqueId$displayName === undefined ? uniqueId : _components$uniqueId$displayName;
    
        if (isInFunction) {
          return ReactClass;
        }
    
        var globalUniqueId = filename + '$' + uniqueId;
        if (componentProxies[globalUniqueId]) {
          (function () {
            console.info('[React Transform HMR] Patching ' + displayName);
            var instances = componentProxies[globalUniqueId].update(ReactClass);
            setTimeout(function () {
              return instances.forEach(forceUpdate);
            });
          })();
        } else {
          componentProxies[globalUniqueId] = (0, _reactProxy.createProxy)(ReactClass);
        }
    
        return componentProxies[globalUniqueId].get();
      };
    }
    
    module.exports = exports['default'];

/***/ },
/* 255 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.getForceUpdate = exports.createProxy = undefined;
    
    var _supportsProtoAssignment = __webpack_require__(256);
    
    var _supportsProtoAssignment2 = _interopRequireDefault(_supportsProtoAssignment);
    
    var _createClassProxy = __webpack_require__(257);
    
    var _createClassProxy2 = _interopRequireDefault(_createClassProxy);
    
    var _reactDeepForceUpdate = __webpack_require__(406);
    
    var _reactDeepForceUpdate2 = _interopRequireDefault(_reactDeepForceUpdate);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    if (!(0, _supportsProtoAssignment2.default)()) {
      console.warn('This JavaScript environment does not support __proto__. ' + 'This means that react-proxy is unable to proxy React components. ' + 'Features that rely on react-proxy, such as react-transform-hmr, ' + 'will not function as expected.');
    }
    
    exports.createProxy = _createClassProxy2.default;
    exports.getForceUpdate = _reactDeepForceUpdate2.default;

/***/ },
/* 256 */
/***/ function(module, exports) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = supportsProtoAssignment;
    var x = {};
    var y = { supports: true };
    try {
      x.__proto__ = y;
    } catch (err) {}
    
    function supportsProtoAssignment() {
      return x.supports || false;
    };

/***/ },
/* 257 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
    
    exports.default = proxyClass;
    exports.default = createClassProxy;
    
    var _find = __webpack_require__(258);
    
    var _find2 = _interopRequireDefault(_find);
    
    var _createPrototypeProxy = __webpack_require__(379);
    
    var _createPrototypeProxy2 = _interopRequireDefault(_createPrototypeProxy);
    
    var _bindAutoBindMethods = __webpack_require__(404);
    
    var _bindAutoBindMethods2 = _interopRequireDefault(_bindAutoBindMethods);
    
    var _deleteUnknownAutoBindMethods = __webpack_require__(405);
    
    var _deleteUnknownAutoBindMethods2 = _interopRequireDefault(_deleteUnknownAutoBindMethods);
    
    var _supportsProtoAssignment = __webpack_require__(256);
    
    var _supportsProtoAssignment2 = _interopRequireDefault(_supportsProtoAssignment);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
    
    var RESERVED_STATICS = ['length', 'name', 'arguments', 'caller', 'prototype', 'toString'];
    
    function isEqualDescriptor(a, b) {
      if (!a && !b) {
        return true;
      }
      if (!a || !b) {
        return false;
      }
      for (var key in a) {
        if (a[key] !== b[key]) {
          return false;
        }
      }
      return true;
    }
    
    // This was originally a WeakMap but we had issues with React Native:
    // https://github.com/gaearon/react-proxy/issues/50#issuecomment-192928066
    var allProxies = [];
    function findProxy(Component) {
      var pair = (0, _find2.default)(allProxies, function (_ref) {
        var _ref2 = _slicedToArray(_ref, 1);
    
        var key = _ref2[0];
        return key === Component;
      });
      return pair ? pair[1] : null;
    }
    function addProxy(Component, proxy) {
      allProxies.push([Component, proxy]);
    }
    
    function proxyClass(InitialComponent) {
      // Prevent double wrapping.
      // Given a proxy class, return the existing proxy managing it.
      var existingProxy = findProxy(InitialComponent);
      if (existingProxy) {
        return existingProxy;
      }
    
      var prototypeProxy = (0, _createPrototypeProxy2.default)();
      var CurrentComponent = undefined;
      var ProxyComponent = undefined;
    
      var staticDescriptors = {};
      function wasStaticModifiedByUser(key) {
        // Compare the descriptor with the one we previously set ourselves.
        var currentDescriptor = Object.getOwnPropertyDescriptor(ProxyComponent, key);
        return !isEqualDescriptor(staticDescriptors[key], currentDescriptor);
      }
    
      function instantiate(factory, context, params) {
        var component = factory();
    
        try {
          return component.apply(context, params);
        } catch (err) {
          (function () {
            // Native ES6 class instantiation
            var instance = new (Function.prototype.bind.apply(component, [null].concat(_toConsumableArray(params))))();
    
            Object.keys(instance).forEach(function (key) {
              if (RESERVED_STATICS.indexOf(key) > -1) {
                return;
              }
              context[key] = instance[key];
            });
          })();
        }
      }
    
      try {
        // Create a proxy constructor with matching name
        ProxyComponent = new Function('factory', 'instantiate', 'return function ' + (InitialComponent.name || 'ProxyComponent') + '() {\n         return instantiate(factory, this, arguments);\n      }')(function () {
          return CurrentComponent;
        }, instantiate);
      } catch (err) {
        // Some environments may forbid dynamic evaluation
        ProxyComponent = function ProxyComponent() {
          return instantiate(function () {
            return CurrentComponent;
          }, this, arguments);
        };
      }
    
      // Point proxy constructor to the proxy prototype
      ProxyComponent.prototype = prototypeProxy.get();
    
      // Proxy toString() to the current constructor
      ProxyComponent.toString = function toString() {
        return CurrentComponent.toString();
      };
    
      function update(NextComponent) {
        if (typeof NextComponent !== 'function') {
          throw new Error('Expected a constructor.');
        }
    
        // Prevent proxy cycles
        var existingProxy = findProxy(NextComponent);
        if (existingProxy) {
          return update(existingProxy.__getCurrent());
        }
    
        // Save the next constructor so we call it
        CurrentComponent = NextComponent;
    
        // Update the prototype proxy with new methods
        var mountedInstances = prototypeProxy.update(NextComponent.prototype);
    
        // Set up the constructor property so accessing the statics work
        ProxyComponent.prototype.constructor = ProxyComponent;
    
        // Set up the same prototype for inherited statics
        ProxyComponent.__proto__ = NextComponent.__proto__;
    
        // Copy static methods and properties
        Object.getOwnPropertyNames(NextComponent).forEach(function (key) {
          if (RESERVED_STATICS.indexOf(key) > -1) {
            return;
          }
    
          var staticDescriptor = _extends({}, Object.getOwnPropertyDescriptor(NextComponent, key), {
            configurable: true
          });
    
          // Copy static unless user has redefined it at runtime
          if (!wasStaticModifiedByUser(key)) {
            Object.defineProperty(ProxyComponent, key, staticDescriptor);
            staticDescriptors[key] = staticDescriptor;
          }
        });
    
        // Remove old static methods and properties
        Object.getOwnPropertyNames(ProxyComponent).forEach(function (key) {
          if (RESERVED_STATICS.indexOf(key) > -1) {
            return;
          }
    
          // Skip statics that exist on the next class
          if (NextComponent.hasOwnProperty(key)) {
            return;
          }
    
          // Skip non-configurable statics
          var descriptor = Object.getOwnPropertyDescriptor(ProxyComponent, key);
          if (descriptor && !descriptor.configurable) {
            return;
          }
    
          // Delete static unless user has redefined it at runtime
          if (!wasStaticModifiedByUser(key)) {
            delete ProxyComponent[key];
            delete staticDescriptors[key];
          }
        });
    
        // Try to infer displayName
        ProxyComponent.displayName = NextComponent.displayName || NextComponent.name;
    
        // We might have added new methods that need to be auto-bound
        mountedInstances.forEach(_bindAutoBindMethods2.default);
        mountedInstances.forEach(_deleteUnknownAutoBindMethods2.default);
    
        // Let the user take care of redrawing
        return mountedInstances;
      };
    
      function get() {
        return ProxyComponent;
      }
    
      function getCurrent() {
        return CurrentComponent;
      }
    
      update(InitialComponent);
    
      var proxy = { get: get, update: update };
      addProxy(ProxyComponent, proxy);
    
      Object.defineProperty(proxy, '__getCurrent', {
        configurable: false,
        writable: false,
        enumerable: false,
        value: getCurrent
      });
    
      return proxy;
    }
    
    function createFallback(Component) {
      var CurrentComponent = Component;
    
      return {
        get: function get() {
          return CurrentComponent;
        },
        update: function update(NextComponent) {
          CurrentComponent = NextComponent;
        }
      };
    }
    
    function createClassProxy(Component) {
      return Component.__proto__ && (0, _supportsProtoAssignment2.default)() ? proxyClass(Component) : createFallback(Component);
    }

/***/ },
/* 258 */
/***/ function(module, exports, __webpack_require__) {

    var createFind = __webpack_require__(259),
        findIndex = __webpack_require__(374);
    
    /**
     * Iterates over elements of `collection`, returning the first element
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': true },
     *   { 'user': 'fred',    'age': 40, 'active': false },
     *   { 'user': 'pebbles', 'age': 1,  'active': true }
     * ];
     *
     * _.find(users, function(o) { return o.age < 40; });
     * // => object for 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.find(users, { 'age': 1, 'active': true });
     * // => object for 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.find(users, ['active', false]);
     * // => object for 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.find(users, 'active');
     * // => object for 'barney'
     */
    var find = createFind(findIndex);
    
    module.exports = find;


/***/ },
/* 259 */
/***/ function(module, exports, __webpack_require__) {

    var baseIteratee = __webpack_require__(260),
        isArrayLike = __webpack_require__(345),
        keys = __webpack_require__(327);
    
    /**
     * Creates a `_.find` or `_.findLast` function.
     *
     * @private
     * @param {Function} findIndexFunc The function to find the collection index.
     * @returns {Function} Returns the new find function.
     */
    function createFind(findIndexFunc) {
      return function(collection, predicate, fromIndex) {
        var iterable = Object(collection);
        if (!isArrayLike(collection)) {
          var iteratee = baseIteratee(predicate, 3);
          collection = keys(collection);
          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
        }
        var index = findIndexFunc(collection, predicate, fromIndex);
        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
      };
    }
    
    module.exports = createFind;


/***/ },
/* 260 */
/***/ function(module, exports, __webpack_require__) {

    var baseMatches = __webpack_require__(261),
        baseMatchesProperty = __webpack_require__(354),
        identity = __webpack_require__(370),
        isArray = __webpack_require__(323),
        property = __webpack_require__(371);
    
    /**
     * The base implementation of `_.iteratee`.
     *
     * @private
     * @param {*} [value=_.identity] The value to convert to an iteratee.
     * @returns {Function} Returns the iteratee.
     */
    function baseIteratee(value) {
      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
      if (typeof value == 'function') {
        return value;
      }
      if (value == null) {
        return identity;
      }
      if (typeof value == 'object') {
        return isArray(value)
          ? baseMatchesProperty(value[0], value[1])
          : baseMatches(value);
      }
      return property(value);
    }
    
    module.exports = baseIteratee;


/***/ },
/* 261 */
/***/ function(module, exports, __webpack_require__) {

    var baseIsMatch = __webpack_require__(262),
        getMatchData = __webpack_require__(351),
        matchesStrictComparable = __webpack_require__(353);
    
    /**
     * The base implementation of `_.matches` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatches(source) {
      var matchData = getMatchData(source);
      if (matchData.length == 1 && matchData[0][2]) {
        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
      }
      return function(object) {
        return object === source || baseIsMatch(object, source, matchData);
      };
    }
    
    module.exports = baseMatches;


/***/ },
/* 262 */
/***/ function(module, exports, __webpack_require__) {

    var Stack = __webpack_require__(263),
        baseIsEqual = __webpack_require__(307);
    
    /** Used to compose bitmasks for value comparisons. */
    var COMPARE_PARTIAL_FLAG = 1,
        COMPARE_UNORDERED_FLAG = 2;
    
    /**
     * The base implementation of `_.isMatch` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Array} matchData The property names, values, and compare flags to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     */
    function baseIsMatch(object, source, matchData, customizer) {
      var index = matchData.length,
          length = index,
          noCustomizer = !customizer;
    
      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (index--) {
        var data = matchData[index];
        if ((noCustomizer && data[2])
              ? data[1] !== object[data[0]]
              : !(data[0] in object)
            ) {
          return false;
        }
      }
      while (++index < length) {
        data = matchData[index];
        var key = data[0],
            objValue = object[key],
            srcValue = data[1];
    
        if (noCustomizer && data[2]) {
          if (objValue === undefined && !(key in object)) {
            return false;
          }
        } else {
          var stack = new Stack;
          if (customizer) {
            var result = customizer(objValue, srcValue, key, object, source, stack);
          }
          if (!(result === undefined
                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
                : result
              )) {
            return false;
          }
        }
      }
      return true;
    }
    
    module.exports = baseIsMatch;


/***/ },
/* 263 */
/***/ function(module, exports, __webpack_require__) {

    var ListCache = __webpack_require__(264),
        stackClear = __webpack_require__(272),
        stackDelete = __webpack_require__(273),
        stackGet = __webpack_require__(274),
        stackHas = __webpack_require__(275),
        stackSet = __webpack_require__(276);
    
    /**
     * Creates a stack cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Stack(entries) {
      var data = this.__data__ = new ListCache(entries);
      this.size = data.size;
    }
    
    // Add methods to `Stack`.
    Stack.prototype.clear = stackClear;
    Stack.prototype['delete'] = stackDelete;
    Stack.prototype.get = stackGet;
    Stack.prototype.has = stackHas;
    Stack.prototype.set = stackSet;
    
    module.exports = Stack;


/***/ },
/* 264 */
/***/ function(module, exports, __webpack_require__) {

    var listCacheClear = __webpack_require__(265),
        listCacheDelete = __webpack_require__(266),
        listCacheGet = __webpack_require__(269),
        listCacheHas = __webpack_require__(270),
        listCacheSet = __webpack_require__(271);
    
    /**
     * Creates an list cache object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function ListCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;
    
      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }
    
    // Add methods to `ListCache`.
    ListCache.prototype.clear = listCacheClear;
    ListCache.prototype['delete'] = listCacheDelete;
    ListCache.prototype.get = listCacheGet;
    ListCache.prototype.has = listCacheHas;
    ListCache.prototype.set = listCacheSet;
    
    module.exports = ListCache;


/***/ },
/* 265 */
/***/ function(module, exports) {

    /**
     * Removes all key-value entries from the list cache.
     *
     * @private
     * @name clear
     * @memberOf ListCache
     */
    function listCacheClear() {
      this.__data__ = [];
      this.size = 0;
    }
    
    module.exports = listCacheClear;


/***/ },
/* 266 */
/***/ function(module, exports, __webpack_require__) {

    var assocIndexOf = __webpack_require__(267);
    
    /** Used for built-in method references. */
    var arrayProto = Array.prototype;
    
    /** Built-in value references. */
    var splice = arrayProto.splice;
    
    /**
     * Removes `key` and its value from the list cache.
     *
     * @private
     * @name delete
     * @memberOf ListCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function listCacheDelete(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);
    
      if (index < 0) {
        return false;
      }
      var lastIndex = data.length - 1;
      if (index == lastIndex) {
        data.pop();
      } else {
        splice.call(data, index, 1);
      }
      --this.size;
      return true;
    }
    
    module.exports = listCacheDelete;


/***/ },
/* 267 */
/***/ function(module, exports, __webpack_require__) {

    var eq = __webpack_require__(268);
    
    /**
     * Gets the index at which the `key` is found in `array` of key-value pairs.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} key The key to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function assocIndexOf(array, key) {
      var length = array.length;
      while (length--) {
        if (eq(array[length][0], key)) {
          return length;
        }
      }
      return -1;
    }
    
    module.exports = assocIndexOf;


/***/ },
/* 268 */
/***/ function(module, exports) {

    /**
     * Performs a
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * comparison between two values to determine if they are equivalent.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.eq(object, object);
     * // => true
     *
     * _.eq(object, other);
     * // => false
     *
     * _.eq('a', 'a');
     * // => true
     *
     * _.eq('a', Object('a'));
     * // => false
     *
     * _.eq(NaN, NaN);
     * // => true
     */
    function eq(value, other) {
      return value === other || (value !== value && other !== other);
    }
    
    module.exports = eq;


/***/ },
/* 269 */
/***/ function(module, exports, __webpack_require__) {

    var assocIndexOf = __webpack_require__(267);
    
    /**
     * Gets the list cache value for `key`.
     *
     * @private
     * @name get
     * @memberOf ListCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function listCacheGet(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);
    
      return index < 0 ? undefined : data[index][1];
    }
    
    module.exports = listCacheGet;


/***/ },
/* 270 */
/***/ function(module, exports, __webpack_require__) {

    var assocIndexOf = __webpack_require__(267);
    
    /**
     * Checks if a list cache value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf ListCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function listCacheHas(key) {
      return assocIndexOf(this.__data__, key) > -1;
    }
    
    module.exports = listCacheHas;


/***/ },
/* 271 */
/***/ function(module, exports, __webpack_require__) {

    var assocIndexOf = __webpack_require__(267);
    
    /**
     * Sets the list cache `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf ListCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the list cache instance.
     */
    function listCacheSet(key, value) {
      var data = this.__data__,
          index = assocIndexOf(data, key);
    
      if (index < 0) {
        ++this.size;
        data.push([key, value]);
      } else {
        data[index][1] = value;
      }
      return this;
    }
    
    module.exports = listCacheSet;


/***/ },
/* 272 */
/***/ function(module, exports, __webpack_require__) {

    var ListCache = __webpack_require__(264);
    
    /**
     * Removes all key-value entries from the stack.
     *
     * @private
     * @name clear
     * @memberOf Stack
     */
    function stackClear() {
      this.__data__ = new ListCache;
      this.size = 0;
    }
    
    module.exports = stackClear;


/***/ },
/* 273 */
/***/ function(module, exports) {

    /**
     * Removes `key` and its value from the stack.
     *
     * @private
     * @name delete
     * @memberOf Stack
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function stackDelete(key) {
      var data = this.__data__,
          result = data['delete'](key);
    
      this.size = data.size;
      return result;
    }
    
    module.exports = stackDelete;


/***/ },
/* 274 */
/***/ function(module, exports) {

    /**
     * Gets the stack value for `key`.
     *
     * @private
     * @name get
     * @memberOf Stack
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function stackGet(key) {
      return this.__data__.get(key);
    }
    
    module.exports = stackGet;


/***/ },
/* 275 */
/***/ function(module, exports) {

    /**
     * Checks if a stack value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Stack
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function stackHas(key) {
      return this.__data__.has(key);
    }
    
    module.exports = stackHas;


/***/ },
/* 276 */
/***/ function(module, exports, __webpack_require__) {

    var ListCache = __webpack_require__(264),
        Map = __webpack_require__(277),
        MapCache = __webpack_require__(292);
    
    /** Used as the size to enable large array optimizations. */
    var LARGE_ARRAY_SIZE = 200;
    
    /**
     * Sets the stack `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Stack
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the stack cache instance.
     */
    function stackSet(key, value) {
      var data = this.__data__;
      if (data instanceof ListCache) {
        var pairs = data.__data__;
        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
          pairs.push([key, value]);
          this.size = ++data.size;
          return this;
        }
        data = this.__data__ = new MapCache(pairs);
      }
      data.set(key, value);
      this.size = data.size;
      return this;
    }
    
    module.exports = stackSet;


/***/ },
/* 277 */
/***/ function(module, exports, __webpack_require__) {

    var getNative = __webpack_require__(278),
        root = __webpack_require__(283);
    
    /* Built-in method references that are verified to be native. */
    var Map = getNative(root, 'Map');
    
    module.exports = Map;


/***/ },
/* 278 */
/***/ function(module, exports, __webpack_require__) {

    var baseIsNative = __webpack_require__(279),
        getValue = __webpack_require__(291);
    
    /**
     * Gets the native function at `key` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the method to get.
     * @returns {*} Returns the function if it's native, else `undefined`.
     */
    function getNative(object, key) {
      var value = getValue(object, key);
      return baseIsNative(value) ? value : undefined;
    }
    
    module.exports = getNative;


/***/ },
/* 279 */
/***/ function(module, exports, __webpack_require__) {

    var isFunction = __webpack_require__(280),
        isMasked = __webpack_require__(288),
        isObject = __webpack_require__(287),
        toSource = __webpack_require__(290);
    
    /**
     * Used to match `RegExp`
     * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
     */
    var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
    
    /** Used to detect host constructors (Safari). */
    var reIsHostCtor = /^\[object .+?Constructor\]$/;
    
    /** Used for built-in method references. */
    var funcProto = Function.prototype,
        objectProto = Object.prototype;
    
    /** Used to resolve the decompiled source of functions. */
    var funcToString = funcProto.toString;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /** Used to detect if a method is native. */
    var reIsNative = RegExp('^' +
      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
    );
    
    /**
     * The base implementation of `_.isNative` without bad shim checks.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     */
    function baseIsNative(value) {
      if (!isObject(value) || isMasked(value)) {
        return false;
      }
      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
      return pattern.test(toSource(value));
    }
    
    module.exports = baseIsNative;


/***/ },
/* 280 */
/***/ function(module, exports, __webpack_require__) {

    var baseGetTag = __webpack_require__(281),
        isObject = __webpack_require__(287);
    
    /** `Object#toString` result references. */
    var asyncTag = '[object AsyncFunction]',
        funcTag = '[object Function]',
        genTag = '[object GeneratorFunction]',
        proxyTag = '[object Proxy]';
    
    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      if (!isObject(value)) {
        return false;
      }
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in Safari 9 which returns 'object' for typed arrays and other constructors.
      var tag = baseGetTag(value);
      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
    }
    
    module.exports = isFunction;


/***/ },
/* 281 */,
/* 282 */,
/* 283 */,
/* 284 */,
/* 285 */,
/* 286 */,
/* 287 */
/***/ function(module, exports) {

    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return value != null && (type == 'object' || type == 'function');
    }
    
    module.exports = isObject;


/***/ },
/* 288 */
/***/ function(module, exports, __webpack_require__) {

    var coreJsData = __webpack_require__(289);
    
    /** Used to detect methods masquerading as native. */
    var maskSrcKey = (function() {
      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
      return uid ? ('Symbol(src)_1.' + uid) : '';
    }());
    
    /**
     * Checks if `func` has its source masked.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
     */
    function isMasked(func) {
      return !!maskSrcKey && (maskSrcKey in func);
    }
    
    module.exports = isMasked;


/***/ },
/* 289 */
/***/ function(module, exports, __webpack_require__) {

    var root = __webpack_require__(283);
    
    /** Used to detect overreaching core-js shims. */
    var coreJsData = root['__core-js_shared__'];
    
    module.exports = coreJsData;


/***/ },
/* 290 */
/***/ function(module, exports) {

    /** Used for built-in method references. */
    var funcProto = Function.prototype;
    
    /** Used to resolve the decompiled source of functions. */
    var funcToString = funcProto.toString;
    
    /**
     * Converts `func` to its source code.
     *
     * @private
     * @param {Function} func The function to convert.
     * @returns {string} Returns the source code.
     */
    function toSource(func) {
      if (func != null) {
        try {
          return funcToString.call(func);
        } catch (e) {}
        try {
          return (func + '');
        } catch (e) {}
      }
      return '';
    }
    
    module.exports = toSource;


/***/ },
/* 291 */
/***/ function(module, exports) {

    /**
     * Gets the value at `key` of `object`.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {string} key The key of the property to get.
     * @returns {*} Returns the property value.
     */
    function getValue(object, key) {
      return object == null ? undefined : object[key];
    }
    
    module.exports = getValue;


/***/ },
/* 292 */
/***/ function(module, exports, __webpack_require__) {

    var mapCacheClear = __webpack_require__(293),
        mapCacheDelete = __webpack_require__(301),
        mapCacheGet = __webpack_require__(304),
        mapCacheHas = __webpack_require__(305),
        mapCacheSet = __webpack_require__(306);
    
    /**
     * Creates a map cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function MapCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;
    
      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }
    
    // Add methods to `MapCache`.
    MapCache.prototype.clear = mapCacheClear;
    MapCache.prototype['delete'] = mapCacheDelete;
    MapCache.prototype.get = mapCacheGet;
    MapCache.prototype.has = mapCacheHas;
    MapCache.prototype.set = mapCacheSet;
    
    module.exports = MapCache;


/***/ },
/* 293 */
/***/ function(module, exports, __webpack_require__) {

    var Hash = __webpack_require__(294),
        ListCache = __webpack_require__(264),
        Map = __webpack_require__(277);
    
    /**
     * Removes all key-value entries from the map.
     *
     * @private
     * @name clear
     * @memberOf MapCache
     */
    function mapCacheClear() {
      this.size = 0;
      this.__data__ = {
        'hash': new Hash,
        'map': new (Map || ListCache),
        'string': new Hash
      };
    }
    
    module.exports = mapCacheClear;


/***/ },
/* 294 */
/***/ function(module, exports, __webpack_require__) {

    var hashClear = __webpack_require__(295),
        hashDelete = __webpack_require__(297),
        hashGet = __webpack_require__(298),
        hashHas = __webpack_require__(299),
        hashSet = __webpack_require__(300);
    
    /**
     * Creates a hash object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Hash(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;
    
      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }
    
    // Add methods to `Hash`.
    Hash.prototype.clear = hashClear;
    Hash.prototype['delete'] = hashDelete;
    Hash.prototype.get = hashGet;
    Hash.prototype.has = hashHas;
    Hash.prototype.set = hashSet;
    
    module.exports = Hash;


/***/ },
/* 295 */
/***/ function(module, exports, __webpack_require__) {

    var nativeCreate = __webpack_require__(296);
    
    /**
     * Removes all key-value entries from the hash.
     *
     * @private
     * @name clear
     * @memberOf Hash
     */
    function hashClear() {
      this.__data__ = nativeCreate ? nativeCreate(null) : {};
      this.size = 0;
    }
    
    module.exports = hashClear;


/***/ },
/* 296 */
/***/ function(module, exports, __webpack_require__) {

    var getNative = __webpack_require__(278);
    
    /* Built-in method references that are verified to be native. */
    var nativeCreate = getNative(Object, 'create');
    
    module.exports = nativeCreate;


/***/ },
/* 297 */
/***/ function(module, exports) {

    /**
     * Removes `key` and its value from the hash.
     *
     * @private
     * @name delete
     * @memberOf Hash
     * @param {Object} hash The hash to modify.
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function hashDelete(key) {
      var result = this.has(key) && delete this.__data__[key];
      this.size -= result ? 1 : 0;
      return result;
    }
    
    module.exports = hashDelete;


/***/ },
/* 298 */
/***/ function(module, exports, __webpack_require__) {

    var nativeCreate = __webpack_require__(296);
    
    /** Used to stand-in for `undefined` hash values. */
    var HASH_UNDEFINED = '__lodash_hash_undefined__';
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * Gets the hash value for `key`.
     *
     * @private
     * @name get
     * @memberOf Hash
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function hashGet(key) {
      var data = this.__data__;
      if (nativeCreate) {
        var result = data[key];
        return result === HASH_UNDEFINED ? undefined : result;
      }
      return hasOwnProperty.call(data, key) ? data[key] : undefined;
    }
    
    module.exports = hashGet;


/***/ },
/* 299 */
/***/ function(module, exports, __webpack_require__) {

    var nativeCreate = __webpack_require__(296);
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * Checks if a hash value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Hash
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function hashHas(key) {
      var data = this.__data__;
      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
    }
    
    module.exports = hashHas;


/***/ },
/* 300 */
/***/ function(module, exports, __webpack_require__) {

    var nativeCreate = __webpack_require__(296);
    
    /** Used to stand-in for `undefined` hash values. */
    var HASH_UNDEFINED = '__lodash_hash_undefined__';
    
    /**
     * Sets the hash `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Hash
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the hash instance.
     */
    function hashSet(key, value) {
      var data = this.__data__;
      this.size += this.has(key) ? 0 : 1;
      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
      return this;
    }
    
    module.exports = hashSet;


/***/ },
/* 301 */
/***/ function(module, exports, __webpack_require__) {

    var getMapData = __webpack_require__(302);
    
    /**
     * Removes `key` and its value from the map.
     *
     * @private
     * @name delete
     * @memberOf MapCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function mapCacheDelete(key) {
      var result = getMapData(this, key)['delete'](key);
      this.size -= result ? 1 : 0;
      return result;
    }
    
    module.exports = mapCacheDelete;


/***/ },
/* 302 */
/***/ function(module, exports, __webpack_require__) {

    var isKeyable = __webpack_require__(303);
    
    /**
     * Gets the data for `map`.
     *
     * @private
     * @param {Object} map The map to query.
     * @param {string} key The reference key.
     * @returns {*} Returns the map data.
     */
    function getMapData(map, key) {
      var data = map.__data__;
      return isKeyable(key)
        ? data[typeof key == 'string' ? 'string' : 'hash']
        : data.map;
    }
    
    module.exports = getMapData;


/***/ },
/* 303 */
/***/ function(module, exports) {

    /**
     * Checks if `value` is suitable for use as unique object key.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
     */
    function isKeyable(value) {
      var type = typeof value;
      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
        ? (value !== '__proto__')
        : (value === null);
    }
    
    module.exports = isKeyable;


/***/ },
/* 304 */
/***/ function(module, exports, __webpack_require__) {

    var getMapData = __webpack_require__(302);
    
    /**
     * Gets the map value for `key`.
     *
     * @private
     * @name get
     * @memberOf MapCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function mapCacheGet(key) {
      return getMapData(this, key).get(key);
    }
    
    module.exports = mapCacheGet;


/***/ },
/* 305 */
/***/ function(module, exports, __webpack_require__) {

    var getMapData = __webpack_require__(302);
    
    /**
     * Checks if a map value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf MapCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function mapCacheHas(key) {
      return getMapData(this, key).has(key);
    }
    
    module.exports = mapCacheHas;


/***/ },
/* 306 */
/***/ function(module, exports, __webpack_require__) {

    var getMapData = __webpack_require__(302);
    
    /**
     * Sets the map `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf MapCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the map cache instance.
     */
    function mapCacheSet(key, value) {
      var data = getMapData(this, key),
          size = data.size;
    
      data.set(key, value);
      this.size += data.size == size ? 0 : 1;
      return this;
    }
    
    module.exports = mapCacheSet;


/***/ },
/* 307 */
/***/ function(module, exports, __webpack_require__) {

    var baseIsEqualDeep = __webpack_require__(308),
        isObjectLike = __webpack_require__(332);
    
    /**
     * The base implementation of `_.isEqual` which supports partial comparisons
     * and tracks traversed objects.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Unordered comparison
     *  2 - Partial comparison
     * @param {Function} [customizer] The function to customize comparisons.
     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     */
    function baseIsEqual(value, other, bitmask, customizer, stack) {
      if (value === other) {
        return true;
      }
      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
        return value !== value && other !== other;
      }
      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
    }
    
    module.exports = baseIsEqual;


/***/ },
/* 308 */
/***/ function(module, exports, __webpack_require__) {

    var Stack = __webpack_require__(263),
        equalArrays = __webpack_require__(309),
        equalByTag = __webpack_require__(315),
        equalObjects = __webpack_require__(319),
        getTag = __webpack_require__(346),
        isArray = __webpack_require__(323),
        isBuffer = __webpack_require__(333),
        isTypedArray = __webpack_require__(336);
    
    /** Used to compose bitmasks for value comparisons. */
    var COMPARE_PARTIAL_FLAG = 1;
    
    /** `Object#toString` result references. */
    var argsTag = '[object Arguments]',
        arrayTag = '[object Array]',
        objectTag = '[object Object]';
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * A specialized version of `baseIsEqual` for arrays and objects which performs
     * deep comparisons and tracks traversed objects enabling objects with circular
     * references to be compared.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
      var objIsArr = isArray(object),
          othIsArr = isArray(other),
          objTag = objIsArr ? arrayTag : getTag(object),
          othTag = othIsArr ? arrayTag : getTag(other);
    
      objTag = objTag == argsTag ? objectTag : objTag;
      othTag = othTag == argsTag ? objectTag : othTag;
    
      var objIsObj = objTag == objectTag,
          othIsObj = othTag == objectTag,
          isSameTag = objTag == othTag;
    
      if (isSameTag && isBuffer(object)) {
        if (!isBuffer(other)) {
          return false;
        }
        objIsArr = true;
        objIsObj = false;
      }
      if (isSameTag && !objIsObj) {
        stack || (stack = new Stack);
        return (objIsArr || isTypedArray(object))
          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
      }
      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
    
        if (objIsWrapped || othIsWrapped) {
          var objUnwrapped = objIsWrapped ? object.value() : object,
              othUnwrapped = othIsWrapped ? other.value() : other;
    
          stack || (stack = new Stack);
          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
        }
      }
      if (!isSameTag) {
        return false;
      }
      stack || (stack = new Stack);
      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
    }
    
    module.exports = baseIsEqualDeep;


/***/ },
/* 309 */
/***/ function(module, exports, __webpack_require__) {

    var SetCache = __webpack_require__(310),
        arraySome = __webpack_require__(313),
        cacheHas = __webpack_require__(314);
    
    /** Used to compose bitmasks for value comparisons. */
    var COMPARE_PARTIAL_FLAG = 1,
        COMPARE_UNORDERED_FLAG = 2;
    
    /**
     * A specialized version of `baseIsEqualDeep` for arrays with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Array} array The array to compare.
     * @param {Array} other The other array to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `array` and `other` objects.
     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
     */
    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          arrLength = array.length,
          othLength = other.length;
    
      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
        return false;
      }
      // Assume cyclic values are equal.
      var stacked = stack.get(array);
      if (stacked && stack.get(other)) {
        return stacked == other;
      }
      var index = -1,
          result = true,
          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
    
      stack.set(array, other);
      stack.set(other, array);
    
      // Ignore non-index properties.
      while (++index < arrLength) {
        var arrValue = array[index],
            othValue = other[index];
    
        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, arrValue, index, other, array, stack)
            : customizer(arrValue, othValue, index, array, other, stack);
        }
        if (compared !== undefined) {
          if (compared) {
            continue;
          }
          result = false;
          break;
        }
        // Recursively compare arrays (susceptible to call stack limits).
        if (seen) {
          if (!arraySome(other, function(othValue, othIndex) {
                if (!cacheHas(seen, othIndex) &&
                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
                  return seen.push(othIndex);
                }
              })) {
            result = false;
            break;
          }
        } else if (!(
              arrValue === othValue ||
                equalFunc(arrValue, othValue, bitmask, customizer, stack)
            )) {
          result = false;
          break;
        }
      }
      stack['delete'](array);
      stack['delete'](other);
      return result;
    }
    
    module.exports = equalArrays;


/***/ },
/* 310 */
/***/ function(module, exports, __webpack_require__) {

    var MapCache = __webpack_require__(292),
        setCacheAdd = __webpack_require__(311),
        setCacheHas = __webpack_require__(312);
    
    /**
     *
     * Creates an array cache object to store unique values.
     *
     * @private
     * @constructor
     * @param {Array} [values] The values to cache.
     */
    function SetCache(values) {
      var index = -1,
          length = values == null ? 0 : values.length;
    
      this.__data__ = new MapCache;
      while (++index < length) {
        this.add(values[index]);
      }
    }
    
    // Add methods to `SetCache`.
    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
    SetCache.prototype.has = setCacheHas;
    
    module.exports = SetCache;


/***/ },
/* 311 */
/***/ function(module, exports) {

    /** Used to stand-in for `undefined` hash values. */
    var HASH_UNDEFINED = '__lodash_hash_undefined__';
    
    /**
     * Adds `value` to the array cache.
     *
     * @private
     * @name add
     * @memberOf SetCache
     * @alias push
     * @param {*} value The value to cache.
     * @returns {Object} Returns the cache instance.
     */
    function setCacheAdd(value) {
      this.__data__.set(value, HASH_UNDEFINED);
      return this;
    }
    
    module.exports = setCacheAdd;


/***/ },
/* 312 */
/***/ function(module, exports) {

    /**
     * Checks if `value` is in the array cache.
     *
     * @private
     * @name has
     * @memberOf SetCache
     * @param {*} value The value to search for.
     * @returns {number} Returns `true` if `value` is found, else `false`.
     */
    function setCacheHas(value) {
      return this.__data__.has(value);
    }
    
    module.exports = setCacheHas;


/***/ },
/* 313 */
/***/ function(module, exports) {

    /**
     * A specialized version of `_.some` for arrays without support for iteratee
     * shorthands.
     *
     * @private
     * @param {Array} [array] The array to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     */
    function arraySome(array, predicate) {
      var index = -1,
          length = array == null ? 0 : array.length;
    
      while (++index < length) {
        if (predicate(array[index], index, array)) {
          return true;
        }
      }
      return false;
    }
    
    module.exports = arraySome;


/***/ },
/* 314 */
/***/ function(module, exports) {

    /**
     * Checks if a `cache` value for `key` exists.
     *
     * @private
     * @param {Object} cache The cache to query.
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function cacheHas(cache, key) {
      return cache.has(key);
    }
    
    module.exports = cacheHas;


/***/ },
/* 315 */
/***/ function(module, exports, __webpack_require__) {

    var Symbol = __webpack_require__(282),
        Uint8Array = __webpack_require__(316),
        eq = __webpack_require__(268),
        equalArrays = __webpack_require__(309),
        mapToArray = __webpack_require__(317),
        setToArray = __webpack_require__(318);
    
    /** Used to compose bitmasks for value comparisons. */
    var COMPARE_PARTIAL_FLAG = 1,
        COMPARE_UNORDERED_FLAG = 2;
    
    /** `Object#toString` result references. */
    var boolTag = '[object Boolean]',
        dateTag = '[object Date]',
        errorTag = '[object Error]',
        mapTag = '[object Map]',
        numberTag = '[object Number]',
        regexpTag = '[object RegExp]',
        setTag = '[object Set]',
        stringTag = '[object String]',
        symbolTag = '[object Symbol]';
    
    var arrayBufferTag = '[object ArrayBuffer]',
        dataViewTag = '[object DataView]';
    
    /** Used to convert symbols to primitives and strings. */
    var symbolProto = Symbol ? Symbol.prototype : undefined,
        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
    
    /**
     * A specialized version of `baseIsEqualDeep` for comparing objects of
     * the same `toStringTag`.
     *
     * **Note:** This function only supports comparing values with tags of
     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {string} tag The `toStringTag` of the objects to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
      switch (tag) {
        case dataViewTag:
          if ((object.byteLength != other.byteLength) ||
              (object.byteOffset != other.byteOffset)) {
            return false;
          }
          object = object.buffer;
          other = other.buffer;
    
        case arrayBufferTag:
          if ((object.byteLength != other.byteLength) ||
              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
            return false;
          }
          return true;
    
        case boolTag:
        case dateTag:
        case numberTag:
          // Coerce booleans to `1` or `0` and dates to milliseconds.
          // Invalid dates are coerced to `NaN`.
          return eq(+object, +other);
    
        case errorTag:
          return object.name == other.name && object.message == other.message;
    
        case regexpTag:
        case stringTag:
          // Coerce regexes to strings and treat strings, primitives and objects,
          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
          // for more details.
          return object == (other + '');
    
        case mapTag:
          var convert = mapToArray;
    
        case setTag:
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
          convert || (convert = setToArray);
    
          if (object.size != other.size && !isPartial) {
            return false;
          }
          // Assume cyclic values are equal.
          var stacked = stack.get(object);
          if (stacked) {
            return stacked == other;
          }
          bitmask |= COMPARE_UNORDERED_FLAG;
    
          // Recursively compare objects (susceptible to call stack limits).
          stack.set(object, other);
          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
          stack['delete'](object);
          return result;
    
        case symbolTag:
          if (symbolValueOf) {
            return symbolValueOf.call(object) == symbolValueOf.call(other);
          }
      }
      return false;
    }
    
    module.exports = equalByTag;


/***/ },
/* 316 */
/***/ function(module, exports, __webpack_require__) {

    var root = __webpack_require__(283);
    
    /** Built-in value references. */
    var Uint8Array = root.Uint8Array;
    
    module.exports = Uint8Array;


/***/ },
/* 317 */
/***/ function(module, exports) {

    /**
     * Converts `map` to its key-value pairs.
     *
     * @private
     * @param {Object} map The map to convert.
     * @returns {Array} Returns the key-value pairs.
     */
    function mapToArray(map) {
      var index = -1,
          result = Array(map.size);
    
      map.forEach(function(value, key) {
        result[++index] = [key, value];
      });
      return result;
    }
    
    module.exports = mapToArray;


/***/ },
/* 318 */
/***/ function(module, exports) {

    /**
     * Converts `set` to an array of its values.
     *
     * @private
     * @param {Object} set The set to convert.
     * @returns {Array} Returns the values.
     */
    function setToArray(set) {
      var index = -1,
          result = Array(set.size);
    
      set.forEach(function(value) {
        result[++index] = value;
      });
      return result;
    }
    
    module.exports = setToArray;


/***/ },
/* 319 */
/***/ function(module, exports, __webpack_require__) {

    var getAllKeys = __webpack_require__(320);
    
    /** Used to compose bitmasks for value comparisons. */
    var COMPARE_PARTIAL_FLAG = 1;
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * A specialized version of `baseIsEqualDeep` for objects with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          objProps = getAllKeys(object),
          objLength = objProps.length,
          othProps = getAllKeys(other),
          othLength = othProps.length;
    
      if (objLength != othLength && !isPartial) {
        return false;
      }
      var index = objLength;
      while (index--) {
        var key = objProps[index];
        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
          return false;
        }
      }
      // Assume cyclic values are equal.
      var stacked = stack.get(object);
      if (stacked && stack.get(other)) {
        return stacked == other;
      }
      var result = true;
      stack.set(object, other);
      stack.set(other, object);
    
      var skipCtor = isPartial;
      while (++index < objLength) {
        key = objProps[index];
        var objValue = object[key],
            othValue = other[key];
    
        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, objValue, key, other, object, stack)
            : customizer(objValue, othValue, key, object, other, stack);
        }
        // Recursively compare objects (susceptible to call stack limits).
        if (!(compared === undefined
              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
              : compared
            )) {
          result = false;
          break;
        }
        skipCtor || (skipCtor = key == 'constructor');
      }
      if (result && !skipCtor) {
        var objCtor = object.constructor,
            othCtor = other.constructor;
    
        // Non `Object` object instances with different constructors are not equal.
        if (objCtor != othCtor &&
            ('constructor' in object && 'constructor' in other) &&
            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
          result = false;
        }
      }
      stack['delete'](object);
      stack['delete'](other);
      return result;
    }
    
    module.exports = equalObjects;


/***/ },
/* 320 */
/***/ function(module, exports, __webpack_require__) {

    var baseGetAllKeys = __webpack_require__(321),
        getSymbols = __webpack_require__(324),
        keys = __webpack_require__(327);
    
    /**
     * Creates an array of own enumerable property names and symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeys(object) {
      return baseGetAllKeys(object, keys, getSymbols);
    }
    
    module.exports = getAllKeys;


/***/ },
/* 321 */
/***/ function(module, exports, __webpack_require__) {

    var arrayPush = __webpack_require__(322),
        isArray = __webpack_require__(323);
    
    /**
     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @param {Function} symbolsFunc The function to get the symbols of `object`.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
      var result = keysFunc(object);
      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
    }
    
    module.exports = baseGetAllKeys;


/***/ },
/* 322 */
/***/ function(module, exports) {

    /**
     * Appends the elements of `values` to `array`.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {Array} values The values to append.
     * @returns {Array} Returns `array`.
     */
    function arrayPush(array, values) {
      var index = -1,
          length = values.length,
          offset = array.length;
    
      while (++index < length) {
        array[offset + index] = values[index];
      }
      return array;
    }
    
    module.exports = arrayPush;


/***/ },
/* 323 */
/***/ function(module, exports) {

    /**
     * Checks if `value` is classified as an `Array` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
     * @example
     *
     * _.isArray([1, 2, 3]);
     * // => true
     *
     * _.isArray(document.body.children);
     * // => false
     *
     * _.isArray('abc');
     * // => false
     *
     * _.isArray(_.noop);
     * // => false
     */
    var isArray = Array.isArray;
    
    module.exports = isArray;


/***/ },
/* 324 */
/***/ function(module, exports, __webpack_require__) {

    var arrayFilter = __webpack_require__(325),
        stubArray = __webpack_require__(326);
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Built-in value references. */
    var propertyIsEnumerable = objectProto.propertyIsEnumerable;
    
    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeGetSymbols = Object.getOwnPropertySymbols;
    
    /**
     * Creates an array of the own enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
      if (object == null) {
        return [];
      }
      object = Object(object);
      return arrayFilter(nativeGetSymbols(object), function(symbol) {
        return propertyIsEnumerable.call(object, symbol);
      });
    };
    
    module.exports = getSymbols;


/***/ },
/* 325 */
/***/ function(module, exports) {

    /**
     * A specialized version of `_.filter` for arrays without support for
     * iteratee shorthands.
     *
     * @private
     * @param {Array} [array] The array to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     */
    function arrayFilter(array, predicate) {
      var index = -1,
          length = array == null ? 0 : array.length,
          resIndex = 0,
          result = [];
    
      while (++index < length) {
        var value = array[index];
        if (predicate(value, index, array)) {
          result[resIndex++] = value;
        }
      }
      return result;
    }
    
    module.exports = arrayFilter;


/***/ },
/* 326 */
/***/ function(module, exports) {

    /**
     * This method returns a new empty array.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Array} Returns the new empty array.
     * @example
     *
     * var arrays = _.times(2, _.stubArray);
     *
     * console.log(arrays);
     * // => [[], []]
     *
     * console.log(arrays[0] === arrays[1]);
     * // => false
     */
    function stubArray() {
      return [];
    }
    
    module.exports = stubArray;


/***/ },
/* 327 */
/***/ function(module, exports, __webpack_require__) {

    var arrayLikeKeys = __webpack_require__(328),
        baseKeys = __webpack_require__(341),
        isArrayLike = __webpack_require__(345);
    
    /**
     * Creates an array of the own enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects. See the
     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * for more details.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keys(new Foo);
     * // => ['a', 'b'] (iteration order is not guaranteed)
     *
     * _.keys('hi');
     * // => ['0', '1']
     */
    function keys(object) {
      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
    }
    
    module.exports = keys;


/***/ },
/* 328 */
/***/ function(module, exports, __webpack_require__) {

    var baseTimes = __webpack_require__(329),
        isArguments = __webpack_require__(330),
        isArray = __webpack_require__(323),
        isBuffer = __webpack_require__(333),
        isIndex = __webpack_require__(335),
        isTypedArray = __webpack_require__(336);
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * Creates an array of the enumerable property names of the array-like `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @param {boolean} inherited Specify returning inherited property names.
     * @returns {Array} Returns the array of property names.
     */
    function arrayLikeKeys(value, inherited) {
      var isArr = isArray(value),
          isArg = !isArr && isArguments(value),
          isBuff = !isArr && !isArg && isBuffer(value),
          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
          skipIndexes = isArr || isArg || isBuff || isType,
          result = skipIndexes ? baseTimes(value.length, String) : [],
          length = result.length;
    
      for (var key in value) {
        if ((inherited || hasOwnProperty.call(value, key)) &&
            !(skipIndexes && (
               // Safari 9 has enumerable `arguments.length` in strict mode.
               key == 'length' ||
               // Node.js 0.10 has enumerable non-index properties on buffers.
               (isBuff && (key == 'offset' || key == 'parent')) ||
               // PhantomJS 2 has enumerable non-index properties on typed arrays.
               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
               // Skip index properties.
               isIndex(key, length)
            ))) {
          result.push(key);
        }
      }
      return result;
    }
    
    module.exports = arrayLikeKeys;


/***/ },
/* 329 */
/***/ function(module, exports) {

    /**
     * The base implementation of `_.times` without support for iteratee shorthands
     * or max array length checks.
     *
     * @private
     * @param {number} n The number of times to invoke `iteratee`.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array} Returns the array of results.
     */
    function baseTimes(n, iteratee) {
      var index = -1,
          result = Array(n);
    
      while (++index < n) {
        result[index] = iteratee(index);
      }
      return result;
    }
    
    module.exports = baseTimes;


/***/ },
/* 330 */
/***/ function(module, exports, __webpack_require__) {

    var baseIsArguments = __webpack_require__(331),
        isObjectLike = __webpack_require__(332);
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /** Built-in value references. */
    var propertyIsEnumerable = objectProto.propertyIsEnumerable;
    
    /**
     * Checks if `value` is likely an `arguments` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     *  else `false`.
     * @example
     *
     * _.isArguments(function() { return arguments; }());
     * // => true
     *
     * _.isArguments([1, 2, 3]);
     * // => false
     */
    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
        !propertyIsEnumerable.call(value, 'callee');
    };
    
    module.exports = isArguments;


/***/ },
/* 331 */
/***/ function(module, exports, __webpack_require__) {

    var baseGetTag = __webpack_require__(281),
        isObjectLike = __webpack_require__(332);
    
    /** `Object#toString` result references. */
    var argsTag = '[object Arguments]';
    
    /**
     * The base implementation of `_.isArguments`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     */
    function baseIsArguments(value) {
      return isObjectLike(value) && baseGetTag(value) == argsTag;
    }
    
    module.exports = baseIsArguments;


/***/ },
/* 332 */,
/* 333 */
/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(283),
        stubFalse = __webpack_require__(334);
    
    /** Detect free variable `exports`. */
    var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
    
    /** Detect free variable `module`. */
    var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
    
    /** Detect the popular CommonJS extension `module.exports`. */
    var moduleExports = freeModule && freeModule.exports === freeExports;
    
    /** Built-in value references. */
    var Buffer = moduleExports ? root.Buffer : undefined;
    
    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
    
    /**
     * Checks if `value` is a buffer.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
     * @example
     *
     * _.isBuffer(new Buffer(2));
     * // => true
     *
     * _.isBuffer(new Uint8Array(2));
     * // => false
     */
    var isBuffer = nativeIsBuffer || stubFalse;
    
    module.exports = isBuffer;
    
    /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(160)(module)))

/***/ },
/* 334 */
/***/ function(module, exports) {

    /**
     * This method returns `false`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `false`.
     * @example
     *
     * _.times(2, _.stubFalse);
     * // => [false, false]
     */
    function stubFalse() {
      return false;
    }
    
    module.exports = stubFalse;


/***/ },
/* 335 */
/***/ function(module, exports) {

    /** Used as references for various `Number` constants. */
    var MAX_SAFE_INTEGER = 9007199254740991;
    
    /** Used to detect unsigned integer values. */
    var reIsUint = /^(?:0|[1-9]\d*)$/;
    
    /**
     * Checks if `value` is a valid array-like index.
     *
     * @private
     * @param {*} value The value to check.
     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
     */
    function isIndex(value, length) {
      length = length == null ? MAX_SAFE_INTEGER : length;
      return !!length &&
        (typeof value == 'number' || reIsUint.test(value)) &&
        (value > -1 && value % 1 == 0 && value < length);
    }
    
    module.exports = isIndex;


/***/ },
/* 336 */
/***/ function(module, exports, __webpack_require__) {

    var baseIsTypedArray = __webpack_require__(337),
        baseUnary = __webpack_require__(339),
        nodeUtil = __webpack_require__(340);
    
    /* Node.js helper references. */
    var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
    
    /**
     * Checks if `value` is classified as a typed array.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     * @example
     *
     * _.isTypedArray(new Uint8Array);
     * // => true
     *
     * _.isTypedArray([]);
     * // => false
     */
    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
    
    module.exports = isTypedArray;


/***/ },
/* 337 */
/***/ function(module, exports, __webpack_require__) {

    var baseGetTag = __webpack_require__(281),
        isLength = __webpack_require__(338),
        isObjectLike = __webpack_require__(332);
    
    /** `Object#toString` result references. */
    var argsTag = '[object Arguments]',
        arrayTag = '[object Array]',
        boolTag = '[object Boolean]',
        dateTag = '[object Date]',
        errorTag = '[object Error]',
        funcTag = '[object Function]',
        mapTag = '[object Map]',
        numberTag = '[object Number]',
        objectTag = '[object Object]',
        regexpTag = '[object RegExp]',
        setTag = '[object Set]',
        stringTag = '[object String]',
        weakMapTag = '[object WeakMap]';
    
    var arrayBufferTag = '[object ArrayBuffer]',
        dataViewTag = '[object DataView]',
        float32Tag = '[object Float32Array]',
        float64Tag = '[object Float64Array]',
        int8Tag = '[object Int8Array]',
        int16Tag = '[object Int16Array]',
        int32Tag = '[object Int32Array]',
        uint8Tag = '[object Uint8Array]',
        uint8ClampedTag = '[object Uint8ClampedArray]',
        uint16Tag = '[object Uint16Array]',
        uint32Tag = '[object Uint32Array]';
    
    /** Used to identify `toStringTag` values of typed arrays. */
    var typedArrayTags = {};
    typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
    typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
    typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
    typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
    typedArrayTags[uint32Tag] = true;
    typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
    typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
    typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
    typedArrayTags[errorTag] = typedArrayTags[funcTag] =
    typedArrayTags[mapTag] = typedArrayTags[numberTag] =
    typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
    typedArrayTags[setTag] = typedArrayTags[stringTag] =
    typedArrayTags[weakMapTag] = false;
    
    /**
     * The base implementation of `_.isTypedArray` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     */
    function baseIsTypedArray(value) {
      return isObjectLike(value) &&
        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
    }
    
    module.exports = baseIsTypedArray;


/***/ },
/* 338 */
/***/ function(module, exports) {

    /** Used as references for various `Number` constants. */
    var MAX_SAFE_INTEGER = 9007199254740991;
    
    /**
     * Checks if `value` is a valid array-like length.
     *
     * **Note:** This method is loosely based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
     * @example
     *
     * _.isLength(3);
     * // => true
     *
     * _.isLength(Number.MIN_VALUE);
     * // => false
     *
     * _.isLength(Infinity);
     * // => false
     *
     * _.isLength('3');
     * // => false
     */
    function isLength(value) {
      return typeof value == 'number' &&
        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
    }
    
    module.exports = isLength;


/***/ },
/* 339 */
/***/ function(module, exports) {

    /**
     * The base implementation of `_.unary` without support for storing metadata.
     *
     * @private
     * @param {Function} func The function to cap arguments for.
     * @returns {Function} Returns the new capped function.
     */
    function baseUnary(func) {
      return function(value) {
        return func(value);
      };
    }
    
    module.exports = baseUnary;


/***/ },
/* 340 */
/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(284);
    
    /** Detect free variable `exports`. */
    var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
    
    /** Detect free variable `module`. */
    var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
    
    /** Detect the popular CommonJS extension `module.exports`. */
    var moduleExports = freeModule && freeModule.exports === freeExports;
    
    /** Detect free variable `process` from Node.js. */
    var freeProcess = moduleExports && freeGlobal.process;
    
    /** Used to access faster Node.js helpers. */
    var nodeUtil = (function() {
      try {
        return freeProcess && freeProcess.binding && freeProcess.binding('util');
      } catch (e) {}
    }());
    
    module.exports = nodeUtil;
    
    /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(160)(module)))

/***/ },
/* 341 */
/***/ function(module, exports, __webpack_require__) {

    var isPrototype = __webpack_require__(342),
        nativeKeys = __webpack_require__(343);
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeys(object) {
      if (!isPrototype(object)) {
        return nativeKeys(object);
      }
      var result = [];
      for (var key in Object(object)) {
        if (hasOwnProperty.call(object, key) && key != 'constructor') {
          result.push(key);
        }
      }
      return result;
    }
    
    module.exports = baseKeys;


/***/ },
/* 342 */
/***/ function(module, exports) {

    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /**
     * Checks if `value` is likely a prototype object.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
     */
    function isPrototype(value) {
      var Ctor = value && value.constructor,
          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
    
      return value === proto;
    }
    
    module.exports = isPrototype;


/***/ },
/* 343 */
/***/ function(module, exports, __webpack_require__) {

    var overArg = __webpack_require__(344);
    
    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeKeys = overArg(Object.keys, Object);
    
    module.exports = nativeKeys;


/***/ },
/* 344 */,
/* 345 */
/***/ function(module, exports, __webpack_require__) {

    var isFunction = __webpack_require__(280),
        isLength = __webpack_require__(338);
    
    /**
     * Checks if `value` is array-like. A value is considered array-like if it's
     * not a function and has a `value.length` that's an integer greater than or
     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
     * @example
     *
     * _.isArrayLike([1, 2, 3]);
     * // => true
     *
     * _.isArrayLike(document.body.children);
     * // => true
     *
     * _.isArrayLike('abc');
     * // => true
     *
     * _.isArrayLike(_.noop);
     * // => false
     */
    function isArrayLike(value) {
      return value != null && isLength(value.length) && !isFunction(value);
    }
    
    module.exports = isArrayLike;


/***/ },
/* 346 */
/***/ function(module, exports, __webpack_require__) {

    var DataView = __webpack_require__(347),
        Map = __webpack_require__(277),
        Promise = __webpack_require__(348),
        Set = __webpack_require__(349),
        WeakMap = __webpack_require__(350),
        baseGetTag = __webpack_require__(281),
        toSource = __webpack_require__(290);
    
    /** `Object#toString` result references. */
    var mapTag = '[object Map]',
        objectTag = '[object Object]',
        promiseTag = '[object Promise]',
        setTag = '[object Set]',
        weakMapTag = '[object WeakMap]';
    
    var dataViewTag = '[object DataView]';
    
    /** Used to detect maps, sets, and weakmaps. */
    var dataViewCtorString = toSource(DataView),
        mapCtorString = toSource(Map),
        promiseCtorString = toSource(Promise),
        setCtorString = toSource(Set),
        weakMapCtorString = toSource(WeakMap);
    
    /**
     * Gets the `toStringTag` of `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    var getTag = baseGetTag;
    
    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
        (Map && getTag(new Map) != mapTag) ||
        (Promise && getTag(Promise.resolve()) != promiseTag) ||
        (Set && getTag(new Set) != setTag) ||
        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
      getTag = function(value) {
        var result = baseGetTag(value),
            Ctor = result == objectTag ? value.constructor : undefined,
            ctorString = Ctor ? toSource(Ctor) : '';
    
        if (ctorString) {
          switch (ctorString) {
            case dataViewCtorString: return dataViewTag;
            case mapCtorString: return mapTag;
            case promiseCtorString: return promiseTag;
            case setCtorString: return setTag;
            case weakMapCtorString: return weakMapTag;
          }
        }
        return result;
      };
    }
    
    module.exports = getTag;


/***/ },
/* 347 */
/***/ function(module, exports, __webpack_require__) {

    var getNative = __webpack_require__(278),
        root = __webpack_require__(283);
    
    /* Built-in method references that are verified to be native. */
    var DataView = getNative(root, 'DataView');
    
    module.exports = DataView;


/***/ },
/* 348 */
/***/ function(module, exports, __webpack_require__) {

    var getNative = __webpack_require__(278),
        root = __webpack_require__(283);
    
    /* Built-in method references that are verified to be native. */
    var Promise = getNative(root, 'Promise');
    
    module.exports = Promise;


/***/ },
/* 349 */
/***/ function(module, exports, __webpack_require__) {

    var getNative = __webpack_require__(278),
        root = __webpack_require__(283);
    
    /* Built-in method references that are verified to be native. */
    var Set = getNative(root, 'Set');
    
    module.exports = Set;


/***/ },
/* 350 */
/***/ function(module, exports, __webpack_require__) {

    var getNative = __webpack_require__(278),
        root = __webpack_require__(283);
    
    /* Built-in method references that are verified to be native. */
    var WeakMap = getNative(root, 'WeakMap');
    
    module.exports = WeakMap;


/***/ },
/* 351 */
/***/ function(module, exports, __webpack_require__) {

    var isStrictComparable = __webpack_require__(352),
        keys = __webpack_require__(327);
    
    /**
     * Gets the property names, values, and compare flags of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the match data of `object`.
     */
    function getMatchData(object) {
      var result = keys(object),
          length = result.length;
    
      while (length--) {
        var key = result[length],
            value = object[key];
    
        result[length] = [key, value, isStrictComparable(value)];
      }
      return result;
    }
    
    module.exports = getMatchData;


/***/ },
/* 352 */
/***/ function(module, exports, __webpack_require__) {

    var isObject = __webpack_require__(287);
    
    /**
     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` if suitable for strict
     *  equality comparisons, else `false`.
     */
    function isStrictComparable(value) {
      return value === value && !isObject(value);
    }
    
    module.exports = isStrictComparable;


/***/ },
/* 353 */
/***/ function(module, exports) {

    /**
     * A specialized version of `matchesProperty` for source values suitable
     * for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {string} key The key of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function matchesStrictComparable(key, srcValue) {
      return function(object) {
        if (object == null) {
          return false;
        }
        return object[key] === srcValue &&
          (srcValue !== undefined || (key in Object(object)));
      };
    }
    
    module.exports = matchesStrictComparable;


/***/ },
/* 354 */
/***/ function(module, exports, __webpack_require__) {

    var baseIsEqual = __webpack_require__(307),
        get = __webpack_require__(355),
        hasIn = __webpack_require__(367),
        isKey = __webpack_require__(358),
        isStrictComparable = __webpack_require__(352),
        matchesStrictComparable = __webpack_require__(353),
        toKey = __webpack_require__(366);
    
    /** Used to compose bitmasks for value comparisons. */
    var COMPARE_PARTIAL_FLAG = 1,
        COMPARE_UNORDERED_FLAG = 2;
    
    /**
     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
     *
     * @private
     * @param {string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatchesProperty(path, srcValue) {
      if (isKey(path) && isStrictComparable(srcValue)) {
        return matchesStrictComparable(toKey(path), srcValue);
      }
      return function(object) {
        var objValue = get(object, path);
        return (objValue === undefined && objValue === srcValue)
          ? hasIn(object, path)
          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
      };
    }
    
    module.exports = baseMatchesProperty;


/***/ },
/* 355 */
/***/ function(module, exports, __webpack_require__) {

    var baseGet = __webpack_require__(356);
    
    /**
     * Gets the value at `path` of `object`. If the resolved value is
     * `undefined`, the `defaultValue` is returned in its place.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.get(object, 'a[0].b.c');
     * // => 3
     *
     * _.get(object, ['a', '0', 'b', 'c']);
     * // => 3
     *
     * _.get(object, 'a.b.c', 'default');
     * // => 'default'
     */
    function get(object, path, defaultValue) {
      var result = object == null ? undefined : baseGet(object, path);
      return result === undefined ? defaultValue : result;
    }
    
    module.exports = get;


/***/ },
/* 356 */
/***/ function(module, exports, __webpack_require__) {

    var castPath = __webpack_require__(357),
        toKey = __webpack_require__(366);
    
    /**
     * The base implementation of `_.get` without support for default values.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @returns {*} Returns the resolved value.
     */
    function baseGet(object, path) {
      path = castPath(path, object);
    
      var index = 0,
          length = path.length;
    
      while (object != null && index < length) {
        object = object[toKey(path[index++])];
      }
      return (index && index == length) ? object : undefined;
    }
    
    module.exports = baseGet;


/***/ },
/* 357 */
/***/ function(module, exports, __webpack_require__) {

    var isArray = __webpack_require__(323),
        isKey = __webpack_require__(358),
        stringToPath = __webpack_require__(360),
        toString = __webpack_require__(363);
    
    /**
     * Casts `value` to a path array if it's not one.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {Object} [object] The object to query keys on.
     * @returns {Array} Returns the cast property path array.
     */
    function castPath(value, object) {
      if (isArray(value)) {
        return value;
      }
      return isKey(value, object) ? [value] : stringToPath(toString(value));
    }
    
    module.exports = castPath;


/***/ },
/* 358 */
/***/ function(module, exports, __webpack_require__) {

    var isArray = __webpack_require__(323),
        isSymbol = __webpack_require__(359);
    
    /** Used to match property names within property paths. */
    var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
        reIsPlainProp = /^\w*$/;
    
    /**
     * Checks if `value` is a property name and not a property path.
     *
     * @private
     * @param {*} value The value to check.
     * @param {Object} [object] The object to query keys on.
     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
     */
    function isKey(value, object) {
      if (isArray(value)) {
        return false;
      }
      var type = typeof value;
      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
          value == null || isSymbol(value)) {
        return true;
      }
      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
        (object != null && value in Object(object));
    }
    
    module.exports = isKey;


/***/ },
/* 359 */
/***/ function(module, exports, __webpack_require__) {

    var baseGetTag = __webpack_require__(281),
        isObjectLike = __webpack_require__(332);
    
    /** `Object#toString` result references. */
    var symbolTag = '[object Symbol]';
    
    /**
     * Checks if `value` is classified as a `Symbol` primitive or object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     * @example
     *
     * _.isSymbol(Symbol.iterator);
     * // => true
     *
     * _.isSymbol('abc');
     * // => false
     */
    function isSymbol(value) {
      return typeof value == 'symbol' ||
        (isObjectLike(value) && baseGetTag(value) == symbolTag);
    }
    
    module.exports = isSymbol;


/***/ },
/* 360 */
/***/ function(module, exports, __webpack_require__) {

    var memoizeCapped = __webpack_require__(361);
    
    /** Used to match property names within property paths. */
    var reLeadingDot = /^\./,
        rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
    
    /** Used to match backslashes in property paths. */
    var reEscapeChar = /\\(\\)?/g;
    
    /**
     * Converts `string` to a property path array.
     *
     * @private
     * @param {string} string The string to convert.
     * @returns {Array} Returns the property path array.
     */
    var stringToPath = memoizeCapped(function(string) {
      var result = [];
      if (reLeadingDot.test(string)) {
        result.push('');
      }
      string.replace(rePropName, function(match, number, quote, string) {
        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
      });
      return result;
    });
    
    module.exports = stringToPath;


/***/ },
/* 361 */
/***/ function(module, exports, __webpack_require__) {

    var memoize = __webpack_require__(362);
    
    /** Used as the maximum memoize cache size. */
    var MAX_MEMOIZE_SIZE = 500;
    
    /**
     * A specialized version of `_.memoize` which clears the memoized function's
     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
     *
     * @private
     * @param {Function} func The function to have its output memoized.
     * @returns {Function} Returns the new memoized function.
     */
    function memoizeCapped(func) {
      var result = memoize(func, function(key) {
        if (cache.size === MAX_MEMOIZE_SIZE) {
          cache.clear();
        }
        return key;
      });
    
      var cache = result.cache;
      return result;
    }
    
    module.exports = memoizeCapped;


/***/ },
/* 362 */
/***/ function(module, exports, __webpack_require__) {

    var MapCache = __webpack_require__(292);
    
    /** Error message constants. */
    var FUNC_ERROR_TEXT = 'Expected a function';
    
    /**
     * Creates a function that memoizes the result of `func`. If `resolver` is
     * provided, it determines the cache key for storing the result based on the
     * arguments provided to the memoized function. By default, the first argument
     * provided to the memoized function is used as the map cache key. The `func`
     * is invoked with the `this` binding of the memoized function.
     *
     * **Note:** The cache is exposed as the `cache` property on the memoized
     * function. Its creation may be customized by replacing the `_.memoize.Cache`
     * constructor with one whose instances implement the
     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to have its output memoized.
     * @param {Function} [resolver] The function to resolve the cache key.
     * @returns {Function} Returns the new memoized function.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     * var other = { 'c': 3, 'd': 4 };
     *
     * var values = _.memoize(_.values);
     * values(object);
     * // => [1, 2]
     *
     * values(other);
     * // => [3, 4]
     *
     * object.a = 2;
     * values(object);
     * // => [1, 2]
     *
     * // Modify the result cache.
     * values.cache.set(object, ['a', 'b']);
     * values(object);
     * // => ['a', 'b']
     *
     * // Replace `_.memoize.Cache`.
     * _.memoize.Cache = WeakMap;
     */
    function memoize(func, resolver) {
      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var memoized = function() {
        var args = arguments,
            key = resolver ? resolver.apply(this, args) : args[0],
            cache = memoized.cache;
    
        if (cache.has(key)) {
          return cache.get(key);
        }
        var result = func.apply(this, args);
        memoized.cache = cache.set(key, result) || cache;
        return result;
      };
      memoized.cache = new (memoize.Cache || MapCache);
      return memoized;
    }
    
    // Expose `MapCache`.
    memoize.Cache = MapCache;
    
    module.exports = memoize;


/***/ },
/* 363 */
/***/ function(module, exports, __webpack_require__) {

    var baseToString = __webpack_require__(364);
    
    /**
     * Converts `value` to a string. An empty string is returned for `null`
     * and `undefined` values. The sign of `-0` is preserved.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.toString(null);
     * // => ''
     *
     * _.toString(-0);
     * // => '-0'
     *
     * _.toString([1, 2, 3]);
     * // => '1,2,3'
     */
    function toString(value) {
      return value == null ? '' : baseToString(value);
    }
    
    module.exports = toString;


/***/ },
/* 364 */
/***/ function(module, exports, __webpack_require__) {

    var Symbol = __webpack_require__(282),
        arrayMap = __webpack_require__(365),
        isArray = __webpack_require__(323),
        isSymbol = __webpack_require__(359);
    
    /** Used as references for various `Number` constants. */
    var INFINITY = 1 / 0;
    
    /** Used to convert symbols to primitives and strings. */
    var symbolProto = Symbol ? Symbol.prototype : undefined,
        symbolToString = symbolProto ? symbolProto.toString : undefined;
    
    /**
     * The base implementation of `_.toString` which doesn't convert nullish
     * values to empty strings.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {string} Returns the string.
     */
    function baseToString(value) {
      // Exit early for strings to avoid a performance hit in some environments.
      if (typeof value == 'string') {
        return value;
      }
      if (isArray(value)) {
        // Recursively convert values (susceptible to call stack limits).
        return arrayMap(value, baseToString) + '';
      }
      if (isSymbol(value)) {
        return symbolToString ? symbolToString.call(value) : '';
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }
    
    module.exports = baseToString;


/***/ },
/* 365 */
/***/ function(module, exports) {

    /**
     * A specialized version of `_.map` for arrays without support for iteratee
     * shorthands.
     *
     * @private
     * @param {Array} [array] The array to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     */
    function arrayMap(array, iteratee) {
      var index = -1,
          length = array == null ? 0 : array.length,
          result = Array(length);
    
      while (++index < length) {
        result[index] = iteratee(array[index], index, array);
      }
      return result;
    }
    
    module.exports = arrayMap;


/***/ },
/* 366 */
/***/ function(module, exports, __webpack_require__) {

    var isSymbol = __webpack_require__(359);
    
    /** Used as references for various `Number` constants. */
    var INFINITY = 1 / 0;
    
    /**
     * Converts `value` to a string key if it's not a string or symbol.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {string|symbol} Returns the key.
     */
    function toKey(value) {
      if (typeof value == 'string' || isSymbol(value)) {
        return value;
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }
    
    module.exports = toKey;


/***/ },
/* 367 */
/***/ function(module, exports, __webpack_require__) {

    var baseHasIn = __webpack_require__(368),
        hasPath = __webpack_require__(369);
    
    /**
     * Checks if `path` is a direct or inherited property of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.hasIn(object, 'a');
     * // => true
     *
     * _.hasIn(object, 'a.b');
     * // => true
     *
     * _.hasIn(object, ['a', 'b']);
     * // => true
     *
     * _.hasIn(object, 'b');
     * // => false
     */
    function hasIn(object, path) {
      return object != null && hasPath(object, path, baseHasIn);
    }
    
    module.exports = hasIn;


/***/ },
/* 368 */
/***/ function(module, exports) {

    /**
     * The base implementation of `_.hasIn` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHasIn(object, key) {
      return object != null && key in Object(object);
    }
    
    module.exports = baseHasIn;


/***/ },
/* 369 */
/***/ function(module, exports, __webpack_require__) {

    var castPath = __webpack_require__(357),
        isArguments = __webpack_require__(330),
        isArray = __webpack_require__(323),
        isIndex = __webpack_require__(335),
        isLength = __webpack_require__(338),
        toKey = __webpack_require__(366);
    
    /**
     * Checks if `path` exists on `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @param {Function} hasFunc The function to check properties.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     */
    function hasPath(object, path, hasFunc) {
      path = castPath(path, object);
    
      var index = -1,
          length = path.length,
          result = false;
    
      while (++index < length) {
        var key = toKey(path[index]);
        if (!(result = object != null && hasFunc(object, key))) {
          break;
        }
        object = object[key];
      }
      if (result || ++index != length) {
        return result;
      }
      length = object == null ? 0 : object.length;
      return !!length && isLength(length) && isIndex(key, length) &&
        (isArray(object) || isArguments(object));
    }
    
    module.exports = hasPath;


/***/ },
/* 370 */
/***/ function(module, exports) {

    /**
     * This method returns the first argument it receives.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {*} value Any value.
     * @returns {*} Returns `value`.
     * @example
     *
     * var object = { 'a': 1 };
     *
     * console.log(_.identity(object) === object);
     * // => true
     */
    function identity(value) {
      return value;
    }
    
    module.exports = identity;


/***/ },
/* 371 */
/***/ function(module, exports, __webpack_require__) {

    var baseProperty = __webpack_require__(372),
        basePropertyDeep = __webpack_require__(373),
        isKey = __webpack_require__(358),
        toKey = __webpack_require__(366);
    
    /**
     * Creates a function that returns the value at `path` of a given object.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': 2 } },
     *   { 'a': { 'b': 1 } }
     * ];
     *
     * _.map(objects, _.property('a.b'));
     * // => [2, 1]
     *
     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
     * // => [1, 2]
     */
    function property(path) {
      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
    }
    
    module.exports = property;


/***/ },
/* 372 */
/***/ function(module, exports) {

    /**
     * The base implementation of `_.property` without support for deep paths.
     *
     * @private
     * @param {string} key The key of the property to get.
     * @returns {Function} Returns the new accessor function.
     */
    function baseProperty(key) {
      return function(object) {
        return object == null ? undefined : object[key];
      };
    }
    
    module.exports = baseProperty;


/***/ },
/* 373 */
/***/ function(module, exports, __webpack_require__) {

    var baseGet = __webpack_require__(356);
    
    /**
     * A specialized version of `baseProperty` which supports deep paths.
     *
     * @private
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     */
    function basePropertyDeep(path) {
      return function(object) {
        return baseGet(object, path);
      };
    }
    
    module.exports = basePropertyDeep;


/***/ },
/* 374 */
/***/ function(module, exports, __webpack_require__) {

    var baseFindIndex = __webpack_require__(375),
        baseIteratee = __webpack_require__(260),
        toInteger = __webpack_require__(376);
    
    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeMax = Math.max;
    
    /**
     * This method is like `_.find` except that it returns the index of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.findIndex(users, function(o) { return o.user == 'barney'; });
     * // => 0
     *
     * // The `_.matches` iteratee shorthand.
     * _.findIndex(users, { 'user': 'fred', 'active': false });
     * // => 1
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findIndex(users, ['active', false]);
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.findIndex(users, 'active');
     * // => 2
     */
    function findIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseFindIndex(array, baseIteratee(predicate, 3), index);
    }
    
    module.exports = findIndex;


/***/ },
/* 375 */
/***/ function(module, exports) {

    /**
     * The base implementation of `_.findIndex` and `_.findLastIndex` without
     * support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} predicate The function invoked per iteration.
     * @param {number} fromIndex The index to search from.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function baseFindIndex(array, predicate, fromIndex, fromRight) {
      var length = array.length,
          index = fromIndex + (fromRight ? 1 : -1);
    
      while ((fromRight ? index-- : ++index < length)) {
        if (predicate(array[index], index, array)) {
          return index;
        }
      }
      return -1;
    }
    
    module.exports = baseFindIndex;


/***/ },
/* 376 */
/***/ function(module, exports, __webpack_require__) {

    var toFinite = __webpack_require__(377);
    
    /**
     * Converts `value` to an integer.
     *
     * **Note:** This method is loosely based on
     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toInteger(3.2);
     * // => 3
     *
     * _.toInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toInteger(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toInteger('3.2');
     * // => 3
     */
    function toInteger(value) {
      var result = toFinite(value),
          remainder = result % 1;
    
      return result === result ? (remainder ? result - remainder : result) : 0;
    }
    
    module.exports = toInteger;


/***/ },
/* 377 */
/***/ function(module, exports, __webpack_require__) {

    var toNumber = __webpack_require__(378);
    
    /** Used as references for various `Number` constants. */
    var INFINITY = 1 / 0,
        MAX_INTEGER = 1.7976931348623157e+308;
    
    /**
     * Converts `value` to a finite number.
     *
     * @static
     * @memberOf _
     * @since 4.12.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted number.
     * @example
     *
     * _.toFinite(3.2);
     * // => 3.2
     *
     * _.toFinite(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toFinite(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toFinite('3.2');
     * // => 3.2
     */
    function toFinite(value) {
      if (!value) {
        return value === 0 ? value : 0;
      }
      value = toNumber(value);
      if (value === INFINITY || value === -INFINITY) {
        var sign = (value < 0 ? -1 : 1);
        return sign * MAX_INTEGER;
      }
      return value === value ? value : 0;
    }
    
    module.exports = toFinite;


/***/ },
/* 378 */
/***/ function(module, exports, __webpack_require__) {

    var isObject = __webpack_require__(287),
        isSymbol = __webpack_require__(359);
    
    /** Used as references for various `Number` constants. */
    var NAN = 0 / 0;
    
    /** Used to match leading and trailing whitespace. */
    var reTrim = /^\s+|\s+$/g;
    
    /** Used to detect bad signed hexadecimal string values. */
    var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
    
    /** Used to detect binary string values. */
    var reIsBinary = /^0b[01]+$/i;
    
    /** Used to detect octal string values. */
    var reIsOctal = /^0o[0-7]+$/i;
    
    /** Built-in method references without a dependency on `root`. */
    var freeParseInt = parseInt;
    
    /**
     * Converts `value` to a number.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     * @example
     *
     * _.toNumber(3.2);
     * // => 3.2
     *
     * _.toNumber(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toNumber(Infinity);
     * // => Infinity
     *
     * _.toNumber('3.2');
     * // => 3.2
     */
    function toNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
      }
      if (typeof value != 'string') {
        return value === 0 ? value : +value;
      }
      value = value.replace(reTrim, '');
      var isBinary = reIsBinary.test(value);
      return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
    }
    
    module.exports = toNumber;


/***/ },
/* 379 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = createPrototypeProxy;
    
    var _assign = __webpack_require__(380);
    
    var _assign2 = _interopRequireDefault(_assign);
    
    var _difference = __webpack_require__(394);
    
    var _difference2 = _interopRequireDefault(_difference);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function createPrototypeProxy() {
      var proxy = {};
      var current = null;
      var mountedInstances = [];
    
      /**
       * Creates a proxied toString() method pointing to the current version's toString().
       */
      function proxyToString(name) {
        // Wrap to always call the current version
        return function toString() {
          if (typeof current[name] === 'function') {
            return current[name].toString();
          } else {
            return '<method was deleted>';
          }
        };
      }
    
      /**
       * Creates a proxied method that calls the current version, whenever available.
       */
      function proxyMethod(name) {
        // Wrap to always call the current version
        var proxiedMethod = function proxiedMethod() {
          if (typeof current[name] === 'function') {
            return current[name].apply(this, arguments);
          }
        };
    
        // Copy properties of the original function, if any
        (0, _assign2.default)(proxiedMethod, current[name]);
        proxiedMethod.toString = proxyToString(name);
    
        return proxiedMethod;
      }
    
      /**
       * Augments the original componentDidMount with instance tracking.
       */
      function proxiedComponentDidMount() {
        mountedInstances.push(this);
        if (typeof current.componentDidMount === 'function') {
          return current.componentDidMount.apply(this, arguments);
        }
      }
      proxiedComponentDidMount.toString = proxyToString('componentDidMount');
    
      /**
       * Augments the original componentWillUnmount with instance tracking.
       */
      function proxiedComponentWillUnmount() {
        var index = mountedInstances.indexOf(this);
        // Unless we're in a weird environment without componentDidMount
        if (index !== -1) {
          mountedInstances.splice(index, 1);
        }
        if (typeof current.componentWillUnmount === 'function') {
          return current.componentWillUnmount.apply(this, arguments);
        }
      }
      proxiedComponentWillUnmount.toString = proxyToString('componentWillUnmount');
    
      /**
       * Defines a property on the proxy.
       */
      function defineProxyProperty(name, descriptor) {
        Object.defineProperty(proxy, name, descriptor);
      }
    
      /**
       * Defines a property, attempting to keep the original descriptor configuration.
       */
      function defineProxyPropertyWithValue(name, value) {
        var _ref = Object.getOwnPropertyDescriptor(current, name) || {};
    
        var _ref$enumerable = _ref.enumerable;
        var enumerable = _ref$enumerable === undefined ? false : _ref$enumerable;
        var _ref$writable = _ref.writable;
        var writable = _ref$writable === undefined ? true : _ref$writable;
    
    
        defineProxyProperty(name, {
          configurable: true,
          enumerable: enumerable,
          writable: writable,
          value: value
        });
      }
    
      /**
       * Creates an auto-bind map mimicking the original map, but directed at proxy.
       */
      function createAutoBindMap() {
        if (!current.__reactAutoBindMap) {
          return;
        }
    
        var __reactAutoBindMap = {};
        for (var name in current.__reactAutoBindMap) {
          if (typeof proxy[name] === 'function' && current.__reactAutoBindMap.hasOwnProperty(name)) {
            __reactAutoBindMap[name] = proxy[name];
          }
        }
    
        return __reactAutoBindMap;
      }
    
      /**
       * Creates an auto-bind map mimicking the original map, but directed at proxy.
       */
      function createAutoBindPairs() {
        var __reactAutoBindPairs = [];
    
        for (var i = 0; i < current.__reactAutoBindPairs.length; i += 2) {
          var name = current.__reactAutoBindPairs[i];
          var method = proxy[name];
    
          if (typeof method === 'function') {
            __reactAutoBindPairs.push(name, method);
          }
        }
    
        return __reactAutoBindPairs;
      }
    
      /**
       * Applies the updated prototype.
       */
      function update(next) {
        // Save current source of truth
        current = next;
    
        // Find changed property names
        var currentNames = Object.getOwnPropertyNames(current);
        var previousName = Object.getOwnPropertyNames(proxy);
        var removedNames = (0, _difference2.default)(previousName, currentNames);
    
        // Remove properties and methods that are no longer there
        removedNames.forEach(function (name) {
          delete proxy[name];
        });
    
        // Copy every descriptor
        currentNames.forEach(function (name) {
          var descriptor = Object.getOwnPropertyDescriptor(current, name);
          if (typeof descriptor.value === 'function') {
            // Functions require additional wrapping so they can be bound later
            defineProxyPropertyWithValue(name, proxyMethod(name));
          } else {
            // Other values can be copied directly
            defineProxyProperty(name, descriptor);
          }
        });
    
        // Track mounting and unmounting
        defineProxyPropertyWithValue('componentDidMount', proxiedComponentDidMount);
        defineProxyPropertyWithValue('componentWillUnmount', proxiedComponentWillUnmount);
    
        if (current.hasOwnProperty('__reactAutoBindMap')) {
          defineProxyPropertyWithValue('__reactAutoBindMap', createAutoBindMap());
        }
    
        if (current.hasOwnProperty('__reactAutoBindPairs')) {
          defineProxyPropertyWithValue('__reactAutoBindPairs', createAutoBindPairs());
        }
    
        // Set up the prototype chain
        proxy.__proto__ = next;
    
        return mountedInstances;
      }
    
      /**
       * Returns the up-to-date proxy prototype.
       */
      function get() {
        return proxy;
      }
    
      return {
        update: update,
        get: get
      };
    };

/***/ },
/* 380 */
/***/ function(module, exports, __webpack_require__) {

    var assignValue = __webpack_require__(381),
        copyObject = __webpack_require__(384),
        createAssigner = __webpack_require__(385),
        isArrayLike = __webpack_require__(345),
        isPrototype = __webpack_require__(342),
        keys = __webpack_require__(327);
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * Assigns own enumerable string keyed properties of source objects to the
     * destination object. Source objects are applied from left to right.
     * Subsequent sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object` and is loosely based on
     * [`Object.assign`](https://mdn.io/Object/assign).
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assignIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assign({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'c': 3 }
     */
    var assign = createAssigner(function(object, source) {
      if (isPrototype(source) || isArrayLike(source)) {
        copyObject(source, keys(source), object);
        return;
      }
      for (var key in source) {
        if (hasOwnProperty.call(source, key)) {
          assignValue(object, key, source[key]);
        }
      }
    });
    
    module.exports = assign;


/***/ },
/* 381 */
/***/ function(module, exports, __webpack_require__) {

    var baseAssignValue = __webpack_require__(382),
        eq = __webpack_require__(268);
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * Assigns `value` to `key` of `object` if the existing value is not equivalent
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignValue(object, key, value) {
      var objValue = object[key];
      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }
    
    module.exports = assignValue;


/***/ },
/* 382 */
/***/ function(module, exports, __webpack_require__) {

    var defineProperty = __webpack_require__(383);
    
    /**
     * The base implementation of `assignValue` and `assignMergeValue` without
     * value checks.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function baseAssignValue(object, key, value) {
      if (key == '__proto__' && defineProperty) {
        defineProperty(object, key, {
          'configurable': true,
          'enumerable': true,
          'value': value,
          'writable': true
        });
      } else {
        object[key] = value;
      }
    }
    
    module.exports = baseAssignValue;


/***/ },
/* 383 */
/***/ function(module, exports, __webpack_require__) {

    var getNative = __webpack_require__(278);
    
    var defineProperty = (function() {
      try {
        var func = getNative(Object, 'defineProperty');
        func({}, '', {});
        return func;
      } catch (e) {}
    }());
    
    module.exports = defineProperty;


/***/ },
/* 384 */
/***/ function(module, exports, __webpack_require__) {

    var assignValue = __webpack_require__(381),
        baseAssignValue = __webpack_require__(382);
    
    /**
     * Copies properties of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy properties from.
     * @param {Array} props The property identifiers to copy.
     * @param {Object} [object={}] The object to copy properties to.
     * @param {Function} [customizer] The function to customize copied values.
     * @returns {Object} Returns `object`.
     */
    function copyObject(source, props, object, customizer) {
      var isNew = !object;
      object || (object = {});
    
      var index = -1,
          length = props.length;
    
      while (++index < length) {
        var key = props[index];
    
        var newValue = customizer
          ? customizer(object[key], source[key], key, object, source)
          : undefined;
    
        if (newValue === undefined) {
          newValue = source[key];
        }
        if (isNew) {
          baseAssignValue(object, key, newValue);
        } else {
          assignValue(object, key, newValue);
        }
      }
      return object;
    }
    
    module.exports = copyObject;


/***/ },
/* 385 */
/***/ function(module, exports, __webpack_require__) {

    var baseRest = __webpack_require__(386),
        isIterateeCall = __webpack_require__(393);
    
    /**
     * Creates a function like `_.assign`.
     *
     * @private
     * @param {Function} assigner The function to assign values.
     * @returns {Function} Returns the new assigner function.
     */
    function createAssigner(assigner) {
      return baseRest(function(object, sources) {
        var index = -1,
            length = sources.length,
            customizer = length > 1 ? sources[length - 1] : undefined,
            guard = length > 2 ? sources[2] : undefined;
    
        customizer = (assigner.length > 3 && typeof customizer == 'function')
          ? (length--, customizer)
          : undefined;
    
        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
          customizer = length < 3 ? undefined : customizer;
          length = 1;
        }
        object = Object(object);
        while (++index < length) {
          var source = sources[index];
          if (source) {
            assigner(object, source, index, customizer);
          }
        }
        return object;
      });
    }
    
    module.exports = createAssigner;


/***/ },
/* 386 */
/***/ function(module, exports, __webpack_require__) {

    var identity = __webpack_require__(370),
        overRest = __webpack_require__(387),
        setToString = __webpack_require__(389);
    
    /**
     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     */
    function baseRest(func, start) {
      return setToString(overRest(func, start, identity), func + '');
    }
    
    module.exports = baseRest;


/***/ },
/* 387 */
/***/ function(module, exports, __webpack_require__) {

    var apply = __webpack_require__(388);
    
    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeMax = Math.max;
    
    /**
     * A specialized version of `baseRest` which transforms the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @param {Function} transform The rest array transform.
     * @returns {Function} Returns the new function.
     */
    function overRest(func, start, transform) {
      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
      return function() {
        var args = arguments,
            index = -1,
            length = nativeMax(args.length - start, 0),
            array = Array(length);
    
        while (++index < length) {
          array[index] = args[start + index];
        }
        index = -1;
        var otherArgs = Array(start + 1);
        while (++index < start) {
          otherArgs[index] = args[index];
        }
        otherArgs[start] = transform(array);
        return apply(func, this, otherArgs);
      };
    }
    
    module.exports = overRest;


/***/ },
/* 388 */
/***/ function(module, exports) {

    /**
     * A faster alternative to `Function#apply`, this function invokes `func`
     * with the `this` binding of `thisArg` and the arguments of `args`.
     *
     * @private
     * @param {Function} func The function to invoke.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} args The arguments to invoke `func` with.
     * @returns {*} Returns the result of `func`.
     */
    function apply(func, thisArg, args) {
      switch (args.length) {
        case 0: return func.call(thisArg);
        case 1: return func.call(thisArg, args[0]);
        case 2: return func.call(thisArg, args[0], args[1]);
        case 3: return func.call(thisArg, args[0], args[1], args[2]);
      }
      return func.apply(thisArg, args);
    }
    
    module.exports = apply;


/***/ },
/* 389 */
/***/ function(module, exports, __webpack_require__) {

    var baseSetToString = __webpack_require__(390),
        shortOut = __webpack_require__(392);
    
    /**
     * Sets the `toString` method of `func` to return `string`.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var setToString = shortOut(baseSetToString);
    
    module.exports = setToString;


/***/ },
/* 390 */
/***/ function(module, exports, __webpack_require__) {

    var constant = __webpack_require__(391),
        defineProperty = __webpack_require__(383),
        identity = __webpack_require__(370);
    
    /**
     * The base implementation of `setToString` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var baseSetToString = !defineProperty ? identity : function(func, string) {
      return defineProperty(func, 'toString', {
        'configurable': true,
        'enumerable': false,
        'value': constant(string),
        'writable': true
      });
    };
    
    module.exports = baseSetToString;


/***/ },
/* 391 */
/***/ function(module, exports) {

    /**
     * Creates a function that returns `value`.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {*} value The value to return from the new function.
     * @returns {Function} Returns the new constant function.
     * @example
     *
     * var objects = _.times(2, _.constant({ 'a': 1 }));
     *
     * console.log(objects);
     * // => [{ 'a': 1 }, { 'a': 1 }]
     *
     * console.log(objects[0] === objects[1]);
     * // => true
     */
    function constant(value) {
      return function() {
        return value;
      };
    }
    
    module.exports = constant;


/***/ },
/* 392 */
/***/ function(module, exports) {

    /** Used to detect hot functions by number of calls within a span of milliseconds. */
    var HOT_COUNT = 800,
        HOT_SPAN = 16;
    
    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeNow = Date.now;
    
    /**
     * Creates a function that'll short out and invoke `identity` instead
     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
     * milliseconds.
     *
     * @private
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new shortable function.
     */
    function shortOut(func) {
      var count = 0,
          lastCalled = 0;
    
      return function() {
        var stamp = nativeNow(),
            remaining = HOT_SPAN - (stamp - lastCalled);
    
        lastCalled = stamp;
        if (remaining > 0) {
          if (++count >= HOT_COUNT) {
            return arguments[0];
          }
        } else {
          count = 0;
        }
        return func.apply(undefined, arguments);
      };
    }
    
    module.exports = shortOut;


/***/ },
/* 393 */
/***/ function(module, exports, __webpack_require__) {

    var eq = __webpack_require__(268),
        isArrayLike = __webpack_require__(345),
        isIndex = __webpack_require__(335),
        isObject = __webpack_require__(287);
    
    /**
     * Checks if the given arguments are from an iteratee call.
     *
     * @private
     * @param {*} value The potential iteratee value argument.
     * @param {*} index The potential iteratee index or key argument.
     * @param {*} object The potential iteratee object argument.
     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
     *  else `false`.
     */
    function isIterateeCall(value, index, object) {
      if (!isObject(object)) {
        return false;
      }
      var type = typeof index;
      if (type == 'number'
            ? (isArrayLike(object) && isIndex(index, object.length))
            : (type == 'string' && index in object)
          ) {
        return eq(object[index], value);
      }
      return false;
    }
    
    module.exports = isIterateeCall;


/***/ },
/* 394 */
/***/ function(module, exports, __webpack_require__) {

    var baseDifference = __webpack_require__(395),
        baseFlatten = __webpack_require__(401),
        baseRest = __webpack_require__(386),
        isArrayLikeObject = __webpack_require__(403);
    
    /**
     * Creates an array of `array` values not included in the other given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * **Note:** Unlike `_.pullAll`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.without, _.xor
     * @example
     *
     * _.difference([2, 1], [2, 3]);
     * // => [1]
     */
    var difference = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
        : [];
    });
    
    module.exports = difference;


/***/ },
/* 395 */
/***/ function(module, exports, __webpack_require__) {

    var SetCache = __webpack_require__(310),
        arrayIncludes = __webpack_require__(396),
        arrayIncludesWith = __webpack_require__(400),
        arrayMap = __webpack_require__(365),
        baseUnary = __webpack_require__(339),
        cacheHas = __webpack_require__(314);
    
    /** Used as the size to enable large array optimizations. */
    var LARGE_ARRAY_SIZE = 200;
    
    /**
     * The base implementation of methods like `_.difference` without support
     * for excluding multiple arrays or iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Array} values The values to exclude.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     */
    function baseDifference(array, values, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          isCommon = true,
          length = array.length,
          result = [],
          valuesLength = values.length;
    
      if (!length) {
        return result;
      }
      if (iteratee) {
        values = arrayMap(values, baseUnary(iteratee));
      }
      if (comparator) {
        includes = arrayIncludesWith;
        isCommon = false;
      }
      else if (values.length >= LARGE_ARRAY_SIZE) {
        includes = cacheHas;
        isCommon = false;
        values = new SetCache(values);
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee == null ? value : iteratee(value);
    
        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var valuesIndex = valuesLength;
          while (valuesIndex--) {
            if (values[valuesIndex] === computed) {
              continue outer;
            }
          }
          result.push(value);
        }
        else if (!includes(values, computed, comparator)) {
          result.push(value);
        }
      }
      return result;
    }
    
    module.exports = baseDifference;


/***/ },
/* 396 */
/***/ function(module, exports, __webpack_require__) {

    var baseIndexOf = __webpack_require__(397);
    
    /**
     * A specialized version of `_.includes` for arrays without support for
     * specifying an index to search from.
     *
     * @private
     * @param {Array} [array] The array to inspect.
     * @param {*} target The value to search for.
     * @returns {boolean} Returns `true` if `target` is found, else `false`.
     */
    function arrayIncludes(array, value) {
      var length = array == null ? 0 : array.length;
      return !!length && baseIndexOf(array, value, 0) > -1;
    }
    
    module.exports = arrayIncludes;


/***/ },
/* 397 */
/***/ function(module, exports, __webpack_require__) {

    var baseFindIndex = __webpack_require__(375),
        baseIsNaN = __webpack_require__(398),
        strictIndexOf = __webpack_require__(399);
    
    /**
     * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} fromIndex The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function baseIndexOf(array, value, fromIndex) {
      return value === value
        ? strictIndexOf(array, value, fromIndex)
        : baseFindIndex(array, baseIsNaN, fromIndex);
    }
    
    module.exports = baseIndexOf;


/***/ },
/* 398 */
/***/ function(module, exports) {

    /**
     * The base implementation of `_.isNaN` without support for number objects.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
     */
    function baseIsNaN(value) {
      return value !== value;
    }
    
    module.exports = baseIsNaN;


/***/ },
/* 399 */
/***/ function(module, exports) {

    /**
     * A specialized version of `_.indexOf` which performs strict equality
     * comparisons of values, i.e. `===`.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} fromIndex The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function strictIndexOf(array, value, fromIndex) {
      var index = fromIndex - 1,
          length = array.length;
    
      while (++index < length) {
        if (array[index] === value) {
          return index;
        }
      }
      return -1;
    }
    
    module.exports = strictIndexOf;


/***/ },
/* 400 */
/***/ function(module, exports) {

    /**
     * This function is like `arrayIncludes` except that it accepts a comparator.
     *
     * @private
     * @param {Array} [array] The array to inspect.
     * @param {*} target The value to search for.
     * @param {Function} comparator The comparator invoked per element.
     * @returns {boolean} Returns `true` if `target` is found, else `false`.
     */
    function arrayIncludesWith(array, value, comparator) {
      var index = -1,
          length = array == null ? 0 : array.length;
    
      while (++index < length) {
        if (comparator(value, array[index])) {
          return true;
        }
      }
      return false;
    }
    
    module.exports = arrayIncludesWith;


/***/ },
/* 401 */
/***/ function(module, exports, __webpack_require__) {

    var arrayPush = __webpack_require__(322),
        isFlattenable = __webpack_require__(402);
    
    /**
     * The base implementation of `_.flatten` with support for restricting flattening.
     *
     * @private
     * @param {Array} array The array to flatten.
     * @param {number} depth The maximum recursion depth.
     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
     * @param {Array} [result=[]] The initial result value.
     * @returns {Array} Returns the new flattened array.
     */
    function baseFlatten(array, depth, predicate, isStrict, result) {
      var index = -1,
          length = array.length;
    
      predicate || (predicate = isFlattenable);
      result || (result = []);
    
      while (++index < length) {
        var value = array[index];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) {
            // Recursively flatten arrays (susceptible to call stack limits).
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }
    
    module.exports = baseFlatten;


/***/ },
/* 402 */
/***/ function(module, exports, __webpack_require__) {

    var Symbol = __webpack_require__(282),
        isArguments = __webpack_require__(330),
        isArray = __webpack_require__(323);
    
    /** Built-in value references. */
    var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
    
    /**
     * Checks if `value` is a flattenable `arguments` object or array.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
     */
    function isFlattenable(value) {
      return isArray(value) || isArguments(value) ||
        !!(spreadableSymbol && value && value[spreadableSymbol]);
    }
    
    module.exports = isFlattenable;


/***/ },
/* 403 */
/***/ function(module, exports, __webpack_require__) {

    var isArrayLike = __webpack_require__(345),
        isObjectLike = __webpack_require__(332);
    
    /**
     * This method is like `_.isArrayLike` except that it also checks if `value`
     * is an object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array-like object,
     *  else `false`.
     * @example
     *
     * _.isArrayLikeObject([1, 2, 3]);
     * // => true
     *
     * _.isArrayLikeObject(document.body.children);
     * // => true
     *
     * _.isArrayLikeObject('abc');
     * // => false
     *
     * _.isArrayLikeObject(_.noop);
     * // => false
     */
    function isArrayLikeObject(value) {
      return isObjectLike(value) && isArrayLike(value);
    }
    
    module.exports = isArrayLikeObject;


/***/ },
/* 404 */
/***/ function(module, exports) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = bindAutoBindMethods;
    /**
     * Copyright 2013-2015, Facebook, Inc.
     * All rights reserved.
     *
     * This source code is licensed under the BSD-style license found in the
     * LICENSE file in the root directory of React source tree. An additional grant
     * of patent rights can be found in the PATENTS file in the same directory.
     *
     * Original:
     * https://github.com/facebook/react/blob/6508b1ad273a6f371e8d90ae676e5390199461b4/src/isomorphic/classic/class/ReactClass.js#L650-L713
     */
    
    function bindAutoBindMethod(component, method) {
      var boundMethod = method.bind(component);
    
      boundMethod.__reactBoundContext = component;
      boundMethod.__reactBoundMethod = method;
      boundMethod.__reactBoundArguments = null;
    
      var componentName = component.constructor.displayName,
          _bind = boundMethod.bind;
    
      boundMethod.bind = function (newThis) {
        var args = Array.prototype.slice.call(arguments, 1);
        if (newThis !== component && newThis !== null) {
          console.warn('bind(): React component methods may only be bound to the ' + 'component instance. See ' + componentName);
        } else if (!args.length) {
          console.warn('bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See ' + componentName);
          return boundMethod;
        }
    
        var reboundMethod = _bind.apply(boundMethod, arguments);
        reboundMethod.__reactBoundContext = component;
        reboundMethod.__reactBoundMethod = method;
        reboundMethod.__reactBoundArguments = args;
    
        return reboundMethod;
      };
    
      return boundMethod;
    }
    
    function bindAutoBindMethodsFromMap(component) {
      for (var autoBindKey in component.__reactAutoBindMap) {
        if (!component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {
          return;
        }
    
        // Tweak: skip methods that are already bound.
        // This is to preserve method reference in case it is used
        // as a subscription handler that needs to be detached later.
        if (component.hasOwnProperty(autoBindKey) && component[autoBindKey].__reactBoundContext === component) {
          continue;
        }
    
        var method = component.__reactAutoBindMap[autoBindKey];
        component[autoBindKey] = bindAutoBindMethod(component, method);
      }
    }
    
    function bindAutoBindMethods(component) {
      if (component.__reactAutoBindPairs) {
        bindAutoBindMethodsFromArray(component);
      } else if (component.__reactAutoBindMap) {
        bindAutoBindMethodsFromMap(component);
      }
    }
    
    function bindAutoBindMethodsFromArray(component) {
      var pairs = component.__reactAutoBindPairs;
    
      if (!pairs) {
        return;
      }
    
      for (var i = 0; i < pairs.length; i += 2) {
        var autoBindKey = pairs[i];
    
        if (component.hasOwnProperty(autoBindKey) && component[autoBindKey].__reactBoundContext === component) {
          continue;
        }
    
        var method = pairs[i + 1];
    
        component[autoBindKey] = bindAutoBindMethod(component, method);
      }
    }

/***/ },
/* 405 */
/***/ function(module, exports) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = deleteUnknownAutoBindMethods;
    function shouldDeleteClassicInstanceMethod(component, name) {
      if (component.__reactAutoBindMap && component.__reactAutoBindMap.hasOwnProperty(name)) {
        // It's a known autobound function, keep it
        return false;
      }
    
      if (component.__reactAutoBindPairs && component.__reactAutoBindPairs.indexOf(name) >= 0) {
        // It's a known autobound function, keep it
        return false;
      }
    
      if (component[name].__reactBoundArguments !== null) {
        // It's a function bound to specific args, keep it
        return false;
      }
    
      // It's a cached bound method for a function
      // that was deleted by user, so we delete it from component.
      return true;
    }
    
    function shouldDeleteModernInstanceMethod(component, name) {
      var prototype = component.constructor.prototype;
    
      var prototypeDescriptor = Object.getOwnPropertyDescriptor(prototype, name);
    
      if (!prototypeDescriptor || !prototypeDescriptor.get) {
        // This is definitely not an autobinding getter
        return false;
      }
    
      if (prototypeDescriptor.get().length !== component[name].length) {
        // The length doesn't match, bail out
        return false;
      }
    
      // This seems like a method bound using an autobinding getter on the prototype
      // Hopefully we won't run into too many false positives.
      return true;
    }
    
    function shouldDeleteInstanceMethod(component, name) {
      var descriptor = Object.getOwnPropertyDescriptor(component, name);
      if (typeof descriptor.value !== 'function') {
        // Not a function, or something fancy: bail out
        return;
      }
    
      if (component.__reactAutoBindMap || component.__reactAutoBindPairs) {
        // Classic
        return shouldDeleteClassicInstanceMethod(component, name);
      } else {
        // Modern
        return shouldDeleteModernInstanceMethod(component, name);
      }
    }
    
    /**
     * Deletes autobound methods from the instance.
     *
     * For classic React classes, we only delete the methods that no longer exist in map.
     * This means the user actually deleted them in code.
     *
     * For modern classes, we delete methods that exist on prototype with the same length,
     * and which have getters on prototype, but are normal values on the instance.
     * This is usually an indication that an autobinding decorator is being used,
     * and the getter will re-generate the memoized handler on next access.
     */
    function deleteUnknownAutoBindMethods(component) {
      var names = Object.getOwnPropertyNames(component);
    
      names.forEach(function (name) {
        if (shouldDeleteInstanceMethod(component, name)) {
          delete component[name];
        }
      });
    }

/***/ },
/* 406 */
/***/ function(module, exports) {

    "use strict";
    
    exports.__esModule = true;
    exports["default"] = getForceUpdate;
    function traverseRenderedChildren(internalInstance, callback, argument) {
      callback(internalInstance, argument);
    
      if (internalInstance._renderedComponent) {
        traverseRenderedChildren(internalInstance._renderedComponent, callback, argument);
      } else {
        for (var key in internalInstance._renderedChildren) {
          if (internalInstance._renderedChildren.hasOwnProperty(key)) {
            traverseRenderedChildren(internalInstance._renderedChildren[key], callback, argument);
          }
        }
      }
    }
    
    function setPendingForceUpdate(internalInstance) {
      if (internalInstance._pendingForceUpdate === false) {
        internalInstance._pendingForceUpdate = true;
      }
    }
    
    function forceUpdateIfPending(internalInstance, React) {
      if (internalInstance._pendingForceUpdate === true) {
        var publicInstance = internalInstance._instance;
        React.Component.prototype.forceUpdate.call(publicInstance);
      }
    }
    
    function getForceUpdate(React) {
      return function (instance) {
        var internalInstance = instance._reactInternalInstance;
        traverseRenderedChildren(internalInstance, setPendingForceUpdate);
        traverseRenderedChildren(internalInstance, forceUpdateIfPending, React);
      };
    }
    
    module.exports = exports["default"];

/***/ },
/* 407 */
/***/ function(module, exports) {

    /* WEBPACK VAR INJECTION */(function(global) {if (typeof window !== "undefined") {
        module.exports = window;
    } else if (typeof global !== "undefined") {
        module.exports = global;
    } else if (typeof self !== "undefined"){
        module.exports = self;
    } else {
        module.exports = {};
    }
    
    /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ },
/* 408 */,
/* 409 */,
/* 410 */,
/* 411 */,
/* 412 */,
/* 413 */,
/* 414 */,
/* 415 */,
/* 416 */,
/* 417 */,
/* 418 */,
/* 419 */,
/* 420 */,
/* 421 */,
/* 422 */,
/* 423 */,
/* 424 */,
/* 425 */,
/* 426 */,
/* 427 */,
/* 428 */,
/* 429 */
/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(module) {'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.HomeView = undefined;
    
    var _getPrototypeOf = __webpack_require__(161);
    
    var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
    
    var _classCallCheck2 = __webpack_require__(187);
    
    var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
    
    var _createClass2 = __webpack_require__(188);
    
    var _createClass3 = _interopRequireDefault(_createClass2);
    
    var _possibleConstructorReturn2 = __webpack_require__(192);
    
    var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
    
    var _inherits2 = __webpack_require__(239);
    
    var _inherits3 = _interopRequireDefault(_inherits2);
    
    var _redboxReact2 = __webpack_require__(247);
    
    var _redboxReact3 = _interopRequireDefault(_redboxReact2);
    
    var _reactTransformCatchErrors3 = __webpack_require__(253);
    
    var _reactTransformCatchErrors4 = _interopRequireDefault(_reactTransformCatchErrors3);
    
    var _react2 = __webpack_require__(2);
    
    var _react3 = _interopRequireDefault(_react2);
    
    var _reactTransformHmr3 = __webpack_require__(254);
    
    var _reactTransformHmr4 = _interopRequireDefault(_reactTransformHmr3);
    
    var _class, _temp;
    
    var _reactRedux = __webpack_require__(408);
    
    __webpack_require__(430);
    
    var _Mapbox = __webpack_require__(434);
    
    var _Mapbox2 = _interopRequireDefault(_Mapbox);
    
    var _InfoList = __webpack_require__(436);
    
    var _InfoList2 = _interopRequireDefault(_InfoList);
    
    var _geojson = __webpack_require__(513);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var _components = {
      HomeView: {
        displayName: 'HomeView'
      }
    };
    
    var _reactTransformHmr2 = (0, _reactTransformHmr4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/views/HomeView/HomeView.js',
      components: _components,
      locals: [module],
      imports: [_react3.default]
    });
    
    var _reactTransformCatchErrors2 = (0, _reactTransformCatchErrors4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/views/HomeView/HomeView.js',
      components: _components,
      locals: [],
      imports: [_react3.default, _redboxReact3.default]
    });
    
    function _wrapComponent(id) {
      return function (Component) {
        return _reactTransformHmr2(_reactTransformCatchErrors2(Component, id), id);
      };
    }
    // import FullElevation from '../../components/FullElevation/FullElevation'
    
    // We avoid using the `@connect` decorator on the class definition so
    // that we can export the undecorated component for testing.
    // See: http://rackt.github.io/redux/docs/recipes/WritingTests.html
    
    
    // We can use Flow (http://flowtype.org/) to type our component's props
    // and state. For convenience we've included both regular propTypes and
    // Flow types, but if you want to try just using Flow you'll want to
    // disable the eslint rule `react/prop-types`.
    // NOTE: You can run `npm run flow:check` to check for any errors in your
    // code, or `npm i -g flow-bin` to have access to the binary globally.
    // Sorry Windows users :(.
    var HomeView = exports.HomeView = _wrapComponent('HomeView')((_temp = _class = function (_React$Component) {
      (0, _inherits3.default)(HomeView, _React$Component);
    
      function HomeView() {
        (0, _classCallCheck3.default)(this, HomeView);
        return (0, _possibleConstructorReturn3.default)(this, (HomeView.__proto__ || (0, _getPrototypeOf2.default)(HomeView)).apply(this, arguments));
      }
    
      (0, _createClass3.default)(HomeView, [{
        key: 'renderMain',
        value: function renderMain() {
          if (this.props.geojson.type === 'FeatureCollection') {
            return _react3.default.createElement(
              'div',
              { id: 'main' },
              _react3.default.createElement(
                'div',
                { id: 'main-column' },
                _react3.default.createElement(_Mapbox2.default, {
                  layer: 'mapbox://styles/fenris/cik5z57vy008cn8m7ujlfxvha',
                  geojson: this.props.geojson,
                  bounds: [[44.0738, -71.3150], [44.2762, -71.1653]],
                  accessToken: 'pk.eyJ1IjoiZmVucmlzIiwiYSI6ImNpbHRpdm82dDAwOHR0eWtyam52ajEzM2sifQ.FGpXoyOoB_sB9YW73YMfFA',
                  activeStage: this.props.activeStage })
              ),
              _react3.default.createElement(_InfoList2.default, {
                geojson: this.props.geojson,
                onInfoListClick: this.props.activeStage
              })
            );
          } else {
            return _react3.default.createElement(
              'div',
              { id: 'main' },
              _react3.default.createElement(
                'h2',
                null,
                'Loading...'
              )
            );
          }
        }
      }, {
        key: 'render',
        value: function render() {
          return _react3.default.createElement(
            'div',
            { id: 'inferno-flex' },
            _react3.default.createElement(
              'div',
              { id: 'header' },
              _react3.default.createElement(
                'h1',
                null,
                'Tuckerman Inferno'
              )
            ),
            this.renderMain()
          );
        }
      }]);
      return HomeView;
    }(_react3.default.Component), _class.propTypes = {
      geojson: _react2.PropTypes.object.isRequired,
      activeStage: _react2.PropTypes.func.isRequired
    }, _temp));
    
    var mapStateToProps = function mapStateToProps(state) {
      return {
        geojson: state.geojson
      };
    };
    var mapDispatchToProps = function mapDispatchToProps(dispatch) {
      return {
        activeStage: function activeStage(stage) {
          dispatch((0, _geojson.activeStage)(stage));
        }
      };
    };
    exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(HomeView);
    /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(160)(module)))

/***/ },
/* 430 */
/***/ function(module, exports, __webpack_require__) {

    // style-loader: Adds some css to the DOM by adding a <style> tag
    
    // load the styles
    var content = __webpack_require__(431);
    if(typeof content === 'string') content = [[module.id, content, '']];
    // add the styles to the DOM
    var update = __webpack_require__(433)(content, {});
    if(content.locals) module.exports = content.locals;
    // Hot Module Replacement
    if(true) {
        // When the styles change, update the <style> tags
        if(!content.locals) {
            module.hot.accept(431, function() {
                var newContent = __webpack_require__(431);
                if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
                update(newContent);
            });
        }
        // When the module is disposed, remove the <style> tags
        module.hot.dispose(function() { update(); });
    }

/***/ },
/* 431 */
/***/ function(module, exports, __webpack_require__) {

    exports = module.exports = __webpack_require__(432)();
    // imports
    
    
    // module
    exports.push([module.id, "html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}h1{margin:0}#inferno-flex,.page-container,.view-container{height:100%}#header{color:#fff;padding-left:1em;background:#0a72ce;position:absolute;width:100%}#main{display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;height:100%;padding-top:37px}#info{background-color:#036240;overflow-y:scroll;-ms-flex:1 1 30%;flex:1 1 30%}#info ul{padding:0;list-style:none;position:relative}#info ul:before{content:\"\";position:absolute;top:0;bottom:0;width:10px;background:#79bcf8;left:12%;margin-left:-10px}#info li{position:relative}#info li .stage-info{margin:0 0 15px 20%;background:#fff;border-left:5px solid #fff;position:relative}#info li .stage-info :after{right:100%;border:solid transparent;content:\" \";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;border-width:10px;top:10px}#info li .stage-info .stage-name{color:#036240;font-size:1.2em;padding-bottom:5px;margin-bottom:0}#info li .stage-info .description img{max-width:100%}#info li .stage-icon{height:20px;width:20px;max-width:20px;max-height:20px;position:absolute;background:#0a72ce;border-radius:50%;box-shadow:0 0 0 8px #79bcf8;left:12%;top:0;margin:10px 0 0 -15px}#info li.finish .stage-icon,#info li.leg .stage-icon,#info li.start .stage-icon{width:40px;height:40px;max-width:40px;max-height:40px;margin:0 0 0 -25px}#info li.finish .stage-icon path,#info li.leg .stage-icon path,#info li.start .stage-icon path{fill:#fff}#info li.highlight .stage-info{border-color:#0a72ce;border-left-size:10px;border-left-style:solid}#info li.highlight .stage-info .stage-name{background-color:#0a72ce;color:#fff}#info li.highlight .stage-info :after{border-right-color:#0a72ce;border-width:15px;top:5px}#info li.highlight .stage-icon{box-shadow:0 0 0 8px #0a72ce;background-color:#053c6d}#info li.transition .stage-icon{width:30px;height:30px;max-width:30px;max-height:30px;margin:5px 0 0 -20px}#main-column{-ms-flex:1 1 70%;flex:1 1 70%;-ms-flex-order:2;order:2;height:100%;display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;background-color:gray}#map{-ms-flex:1 1 70%;flex:1 1 70%}.leaflet-popup-content-wrapper{padding:0}.leaflet-popup-content{padding:0;padding-top:0!important;border-radius:3px}.leaflet-popup-content h3{margin:0;color:#fff;text-align:center;background-color:#0a72ce;border-top-left-radius:3px;border-top-right-radius:3px;padding:5px}.leaflet-popup-content .description{padding:0 5px 5px}.leaflet-popup-content .description img{max-width:100%}@media (max-width:640px){#elevation,#info,#main,#main-column,#map{display:block}#elevation{height:300px}#map{height:70vh}#main-column{height:auto}}.leaflet-control-container .leaflet-bar-part-single .fa-spinner{margin-top:4px;margin-left:5px}html{box-sizing:border-box}body,html{margin:0;padding:0;height:100%}*,:after,:before{box-sizing:inherit}", "", {"version":3,"sources":["/./src/src/styles/core.scss","/./src/src/styles/vendor/_normalize.scss","/./src/src/styles/_base.scss"],"names":[],"mappings":"AAAA,KCSE,uBAAwB,0BACG,6BACI,CDXjC,KCmBE,QAAU,CDnBZ,2FC6CE,aAAe,CD7CjB,4BCyDE,qBAAsB,uBACG,CD1D3B,sBCmEE,aAAc,QACJ,CDpEZ,kBC8EE,YAAc,CD9EhB,ECyFE,4BAA8B,CDzFhC,iBCkGE,SAAW,CDlGb,YC6GE,wBAA0B,CD7G5B,SCsHE,eAAkB,CDtHpB,IC8HE,iBAAmB,CD9HrB,GCuIE,cAAe,cACE,CDxInB,KCgJE,gBAAiB,UACL,CDjJd,MCyJE,aAAe,CDzJjB,QCkKE,cAAe,cACA,kBACI,uBACM,CDrK3B,ICyKE,SAAY,CDzKd,IC6KE,aAAgB,CD7KlB,ICwLE,QAAU,CDxLZ,eCgME,eAAiB,CDhMnB,OC2ME,eAAiB,CD3MnB,GCoNE,uBAAwB,QACd,CDrNZ,IC6NE,aAAe,CD7NjB,kBCwOE,gCAAkC,aACnB,CDzOjB,sCCgQE,cAAe,aACD,QACJ,CDlQZ,OC0QE,gBAAkB,CD1QpB,cCsRE,mBAAqB,CDtRvB,oECqSE,0BAA2B,cACX,CDtSlB,sCC+SE,cAAgB,CD/SlB,iDCwTE,SAAU,SACC,CDzTb,MCkUE,kBAAoB,CDlUtB,uCC+UE,sBAAuB,SACZ,CDhVb,4FC2VE,WAAa,CD3Vf,mBCqWE,6BAA8B,sBAGN,CDxW1B,+FCmXE,uBAAyB,CDnX3B,SC2XE,wBAA0B,aACZ,0BACiB,CD7XjC,OCsYE,SAAU,SACC,CDvYb,SC+YE,aAAe,CD/YjB,SCwZE,eAAkB,CDxZpB,MCmaE,yBAA0B,gBACR,CDpapB,MCyaE,SAAW,CDzab,GEsCE,QAAU,CFtCZ,8CE0CE,WAAa,CF1Cf,QE8CE,WAAa,iBACK,mBA3BD,kBA6BE,UACP,CFlDd,MEuDE,oBAAA,aAAsB,kBAEd,cAAe,YACV,gBACK,CF3DpB,ME+DE,yBA5CkB,kBA6CC,iBAEX,YAAc,CFlExB,SEoEI,UAAW,gBACM,iBACE,CFtEvB,gBE0EI,WAAY,kBACO,MACZ,SACG,WACE,mBA9CI,SAgDN,iBACS,CFjFvB,SEqFI,iBAAmB,CFrFvB,qBEuFM,oBAAqB,gBA3DP,2BA6De,iBACV,CF1FzB,4BE8FQ,WAAY,yBACc,YACb,SACH,QACD,kBACU,oBACE,wBAxET,kBA0EO,QACT,CFvGlB,iCE0GQ,cAvFY,gBAwFK,mBACG,eACH,CF7GzB,sCEkHU,cACD,CFnHT,qBEuHM,YAAa,WACD,eACI,gBACC,kBACE,mBAvGN,kBAyGM,6BA7FL,SA+FJ,MACH,qBACgB,CFjI7B,gFEuIM,WAAY,YACC,eACG,gBACC,kBACG,CF3I1B,+FE6IQ,SAAc,CF7ItB,+BEqJM,qBAjIa,sBAkIU,uBACE,CFvJ/B,2CEyJQ,yBArIW,UAuIZ,CF3JP,sCE6JQ,2BAzIW,kBA0IQ,OACV,CF/JjB,+BEmKM,6BA/Ia,wBAgJW,CFpK9B,gCE0KM,WAAY,YACC,eACG,gBACC,oBACK,CF9K5B,aEqLU,iBAAA,aAAc,iBAEd,QAAS,YACJ,oBAEb,aAAsB,qBAEd,iBAAkB,qBACH,CF7LzB,KEkMU,iBAAA,YACT,CFnMD,+BEsME,SAAW,CFtMb,uBEyME,UAAW,wBACe,iBACP,CF3MrB,0BE6MI,SAAU,WACG,kBACM,yBA3LJ,2BA6La,4BACC,WAChB,CFnNjB,oCEsNI,iBAAyB,CFtN7B,wCEwNM,cAAgB,CACjB,yBFzNL,yCE+NI,aAAe,CF/NnB,WEmOI,YAAc,CFnOlB,KEuOI,WAAa,CFvOjB,aE2OI,WAAa,CACd,CF5OH,gEEsPI,eAAgB,eACC,CFvPrB,KAOI,qBAAuB,CAP3B,UAYI,SAAU,UACC,WACE,CAdjB,iBAoBI,kBAAoB,CACrB","file":"core.scss","sourcesContent":[":global {\n  @import 'vendor/normalize';\n  @import 'base';\n\n  // Some best-practice CSS that's useful for most apps\n  // Just remove them if they're not what you want\n  html {\n    box-sizing: border-box;\n  }\n\n  html,\n  body {\n    margin: 0;\n    padding: 0;\n    height: 100%;\n  }\n\n  *,\n  *:before,\n  *:after {\n    box-sizing: inherit;\n  }\n}\n","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; /* 1 */\n  font: inherit; /* 2 */\n  margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n  cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; /* 2 */\n  box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n","/*\nApplication Settings Go Here\n------------------------------------\nThis file acts as a bundler for all variables/mixins/themes, so they\ncan easily be swapped out without `core.scss` ever having to know.\n\nFor example:\n\n@import './variables/colors';\n@import './variables/components';\n@import './themes/default';\n*/\n\n\n/*----------\n/ Variables\n-----------*/\n\n// Friends of Tuckerman Ravine Colors\n$fotr-green: #036240;\n$fotr-blue: #0A72CE;\n\n\n// Header colors\n$header: $fotr-blue;\n\n// Info list colors\n$info-background: $fotr-green;\n$info-default: white;\n$info-highlight: $fotr-blue;\n// Line colors\n$line-color: #afdcf8;\n$line-color: lighten($fotr-blue, 30%);\n$line-dark-color: $fotr-blue;\n\n\n\nh1 {\n  margin: 0;\n}\n\n.page-container, .view-container, #inferno-flex {\n  height: 100%;\n}\n\n#header {\n  color: white;\n  padding-left: 1em;\n  background: $header;\n  position: absolute;\n  width: 100%;\n}\n\n#main {\n  display: -webkit-flex;\n  display:         flex;\n  -webkit-flex-flow: row;\n          flex-flow: row;\n  height: 100%;\n  padding-top: 37px;\n}\n\n#info {\n  background-color: $info-background;\n  overflow-y: scroll;\n  -webkit-flex: 1 1 30%;\n          flex: 1 1 30%;\n  ul {\n    padding: 0;\n    list-style: none;\n    position: relative;\n  }\n  // The line\n  ul:before {\n    content: '';\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    width: 10px;\n    background: $line-color;\n    left: 12%;\n    margin-left: -10px;\n  }\n\n  li {\n    position: relative;\n    .stage-info {\n      margin: 0 0 15px 20%;\n      background: $info-default;\n      border-left: white solid 5px;\n      position: relative;\n\n      // The arrow\n      :after {\n        right: 100%;\n        border: solid transparent;\n        content: \" \";\n        height: 0;\n        width: 0;\n        position: absolute;\n        pointer-events: none;\n        border-right-color: $info-default;\n        border-width: 10px;\n        top: 10px;\n      }\n      .stage-name {\n        color: $fotr-green;\n        font-size: 1.2em;\n        padding-bottom: 5px;\n        margin-bottom: 0;\n\n      }\n      .description {\n        img {\n          max-width: 100%\n        }\n      }\n    }\n    .stage-icon {\n      height: 20px;\n      width: 20px;\n      max-width: 20px;\n      max-height: 20px;\n      position: absolute;\n      background: $line-dark-color;\n      border-radius: 50%;\n      box-shadow: 0 0 0 8px $line-color;\n      left: 12%;\n      top: 0;\n      margin: 10px 0 0 -15px;\n    }\n  }\n\n  li.start, li.leg, li.finish {\n    .stage-icon {\n      width: 40px;\n      height: 40px;\n      max-width: 40px;\n      max-height: 40px;\n      margin: 0 0 0 -25px;\n      path {\n        fill: #FFFFFF;\n      }\n    }\n  }\n\n  // style the currently selected item\n  li.highlight {\n    .stage-info {\n      border-color: $info-highlight;\n      border-left-size: 10px;\n      border-left-style: solid;\n      .stage-name {\n        background-color: $info-highlight;\n        color: white\n      }\n      :after {\n        border-right-color: $info-highlight;\n        border-width: 15px;\n        top: 5px;\n      }\n    }\n    .stage-icon {\n      box-shadow: 0 0 0 8px $info-highlight;\n      background-color: darken($info-highlight, 20%);\n    }\n  }\n\n  li.transition {\n    .stage-icon {\n      width: 30px;\n      height: 30px;\n      max-width: 30px;\n      max-height: 30px;\n      margin: 5px 0 0 -20px;\n    }\n  }\n}\n\n#main-column {\n  -webkit-flex: 1 1 70%;\n          flex: 1 1 70%;\n  -webkit-order: 2;\n          order: 2;\n  height: 100%;\n  display: -webkit-flex;\n  display:         flex;\n  -webkit-flex-flow: column;\n          flex-flow: column;\n  background-color: gray;\n}\n\n#map {\n  -webkit-flex: 1 1 70%;\n          flex: 1 1 70%\n}\n\n.leaflet-popup-content-wrapper {\n  padding: 0;\n}\n.leaflet-popup-content {\n  padding: 0;\n  padding-top: 0 !important;\n  border-radius: 3px;\n  h3 {\n    margin: 0;\n    color: white;\n    text-align: center;\n    background-color: $fotr-blue;\n    border-top-left-radius: 3px;\n    border-top-right-radius: 3px;\n    padding: 5px;\n  }\n  .description {\n    padding: 0px 5px 5px 5px;\n    img {\n      max-width: 100%;\n    }\n  }\n}\n\n@media all and (max-width: 640px) {\n  #main, #main-column, #info, #elevation, #map {\n    display: block;\n  }\n\n  #elevation {\n    height: 300px;\n  }\n\n  #map {\n    height: 70vh;\n  }\n\n  #main-column {\n    height: auto;\n  }\n}\n\n// Fixing the leaflet-locate control\n.leaflet-control-container .leaflet-bar-part-single {\n  .fa-map-marker {\n    //margin-top: 4px;\n    //margin-left: 9px;\n  }\n  .fa-spinner {\n    margin-top: 4px;\n    margin-left: 5px;\n  }\n}\n"],"sourceRoot":"webpack://"}]);
    
    // exports


/***/ },
/* 432 */
/***/ function(module, exports) {

    /*
        MIT License http://www.opensource.org/licenses/mit-license.php
        Author Tobias Koppers @sokra
    */
    // css base code, injected by the css-loader
    module.exports = function() {
        var list = [];
    
        // return the list of modules as css string
        list.toString = function toString() {
            var result = [];
            for(var i = 0; i < this.length; i++) {
                var item = this[i];
                if(item[2]) {
                    result.push("@media " + item[2] + "{" + item[1] + "}");
                } else {
                    result.push(item[1]);
                }
            }
            return result.join("");
        };
    
        // import a list of modules into the list
        list.i = function(modules, mediaQuery) {
            if(typeof modules === "string")
                modules = [[null, modules, ""]];
            var alreadyImportedModules = {};
            for(var i = 0; i < this.length; i++) {
                var id = this[i][0];
                if(typeof id === "number")
                    alreadyImportedModules[id] = true;
            }
            for(i = 0; i < modules.length; i++) {
                var item = modules[i];
                // skip already imported module
                // this implementation is not 100% perfect for weird media query combinations
                //  when a module is imported multiple times with different media queries.
                //  I hope this will never occur (Hey this way we have smaller bundles)
                if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
                    if(mediaQuery && !item[2]) {
                        item[2] = mediaQuery;
                    } else if(mediaQuery) {
                        item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
                    }
                    list.push(item);
                }
            }
        };
        return list;
    };


/***/ },
/* 433 */
/***/ function(module, exports, __webpack_require__) {

    /*
        MIT License http://www.opensource.org/licenses/mit-license.php
        Author Tobias Koppers @sokra
    */
    var stylesInDom = {},
        memoize = function(fn) {
            var memo;
            return function () {
                if (typeof memo === "undefined") memo = fn.apply(this, arguments);
                return memo;
            };
        },
        isOldIE = memoize(function() {
            return /msie [6-9]\b/.test(self.navigator.userAgent.toLowerCase());
        }),
        getHeadElement = memoize(function () {
            return document.head || document.getElementsByTagName("head")[0];
        }),
        singletonElement = null,
        singletonCounter = 0,
        styleElementsInsertedAtTop = [];
    
    module.exports = function(list, options) {
        if(false) {
            if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
        }
    
        options = options || {};
        // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
        // tags it will allow on a page
        if (typeof options.singleton === "undefined") options.singleton = isOldIE();
    
        // By default, add <style> tags to the bottom of <head>.
        if (typeof options.insertAt === "undefined") options.insertAt = "bottom";
    
        var styles = listToStyles(list);
        addStylesToDom(styles, options);
    
        return function update(newList) {
            var mayRemove = [];
            for(var i = 0; i < styles.length; i++) {
                var item = styles[i];
                var domStyle = stylesInDom[item.id];
                domStyle.refs--;
                mayRemove.push(domStyle);
            }
            if(newList) {
                var newStyles = listToStyles(newList);
                addStylesToDom(newStyles, options);
            }
            for(var i = 0; i < mayRemove.length; i++) {
                var domStyle = mayRemove[i];
                if(domStyle.refs === 0) {
                    for(var j = 0; j < domStyle.parts.length; j++)
                        domStyle.parts[j]();
                    delete stylesInDom[domStyle.id];
                }
            }
        };
    }
    
    function addStylesToDom(styles, options) {
        for(var i = 0; i < styles.length; i++) {
            var item = styles[i];
            var domStyle = stylesInDom[item.id];
            if(domStyle) {
                domStyle.refs++;
                for(var j = 0; j < domStyle.parts.length; j++) {
                    domStyle.parts[j](item.parts[j]);
                }
                for(; j < item.parts.length; j++) {
                    domStyle.parts.push(addStyle(item.parts[j], options));
                }
            } else {
                var parts = [];
                for(var j = 0; j < item.parts.length; j++) {
                    parts.push(addStyle(item.parts[j], options));
                }
                stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
            }
        }
    }
    
    function listToStyles(list) {
        var styles = [];
        var newStyles = {};
        for(var i = 0; i < list.length; i++) {
            var item = list[i];
            var id = item[0];
            var css = item[1];
            var media = item[2];
            var sourceMap = item[3];
            var part = {css: css, media: media, sourceMap: sourceMap};
            if(!newStyles[id])
                styles.push(newStyles[id] = {id: id, parts: [part]});
            else
                newStyles[id].parts.push(part);
        }
        return styles;
    }
    
    function insertStyleElement(options, styleElement) {
        var head = getHeadElement();
        var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
        if (options.insertAt === "top") {
            if(!lastStyleElementInsertedAtTop) {
                head.insertBefore(styleElement, head.firstChild);
            } else if(lastStyleElementInsertedAtTop.nextSibling) {
                head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
            } else {
                head.appendChild(styleElement);
            }
            styleElementsInsertedAtTop.push(styleElement);
        } else if (options.insertAt === "bottom") {
            head.appendChild(styleElement);
        } else {
            throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
        }
    }
    
    function removeStyleElement(styleElement) {
        styleElement.parentNode.removeChild(styleElement);
        var idx = styleElementsInsertedAtTop.indexOf(styleElement);
        if(idx >= 0) {
            styleElementsInsertedAtTop.splice(idx, 1);
        }
    }
    
    function createStyleElement(options) {
        var styleElement = document.createElement("style");
        styleElement.type = "text/css";
        insertStyleElement(options, styleElement);
        return styleElement;
    }
    
    function createLinkElement(options) {
        var linkElement = document.createElement("link");
        linkElement.rel = "stylesheet";
        insertStyleElement(options, linkElement);
        return linkElement;
    }
    
    function addStyle(obj, options) {
        var styleElement, update, remove;
    
        if (options.singleton) {
            var styleIndex = singletonCounter++;
            styleElement = singletonElement || (singletonElement = createStyleElement(options));
            update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
            remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
        } else if(obj.sourceMap &&
            typeof URL === "function" &&
            typeof URL.createObjectURL === "function" &&
            typeof URL.revokeObjectURL === "function" &&
            typeof Blob === "function" &&
            typeof btoa === "function") {
            styleElement = createLinkElement(options);
            update = updateLink.bind(null, styleElement);
            remove = function() {
                removeStyleElement(styleElement);
                if(styleElement.href)
                    URL.revokeObjectURL(styleElement.href);
            };
        } else {
            styleElement = createStyleElement(options);
            update = applyToTag.bind(null, styleElement);
            remove = function() {
                removeStyleElement(styleElement);
            };
        }
    
        update(obj);
    
        return function updateStyle(newObj) {
            if(newObj) {
                if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
                    return;
                update(obj = newObj);
            } else {
                remove();
            }
        };
    }
    
    var replaceText = (function () {
        var textStore = [];
    
        return function (index, replacement) {
            textStore[index] = replacement;
            return textStore.filter(Boolean).join('\n');
        };
    })();
    
    function applyToSingletonTag(styleElement, index, remove, obj) {
        var css = remove ? "" : obj.css;
    
        if (styleElement.styleSheet) {
            styleElement.styleSheet.cssText = replaceText(index, css);
        } else {
            var cssNode = document.createTextNode(css);
            var childNodes = styleElement.childNodes;
            if (childNodes[index]) styleElement.removeChild(childNodes[index]);
            if (childNodes.length) {
                styleElement.insertBefore(cssNode, childNodes[index]);
            } else {
                styleElement.appendChild(cssNode);
            }
        }
    }
    
    function applyToTag(styleElement, obj) {
        var css = obj.css;
        var media = obj.media;
    
        if(media) {
            styleElement.setAttribute("media", media)
        }
    
        if(styleElement.styleSheet) {
            styleElement.styleSheet.cssText = css;
        } else {
            while(styleElement.firstChild) {
                styleElement.removeChild(styleElement.firstChild);
            }
            styleElement.appendChild(document.createTextNode(css));
        }
    }
    
    function updateLink(linkElement, obj) {
        var css = obj.css;
        var sourceMap = obj.sourceMap;
    
        if(sourceMap) {
            // http://stackoverflow.com/a/26603875
            css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
        }
    
        var blob = new Blob([css], { type: "text/css" });
    
        var oldSrc = linkElement.href;
    
        linkElement.href = URL.createObjectURL(blob);
    
        if(oldSrc)
            URL.revokeObjectURL(oldSrc);
    }


/***/ },
/* 434 */
/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(module) {'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.Mapbox = undefined;
    
    var _getPrototypeOf = __webpack_require__(161);
    
    var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
    
    var _classCallCheck2 = __webpack_require__(187);
    
    var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
    
    var _createClass2 = __webpack_require__(188);
    
    var _createClass3 = _interopRequireDefault(_createClass2);
    
    var _possibleConstructorReturn2 = __webpack_require__(192);
    
    var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
    
    var _inherits2 = __webpack_require__(239);
    
    var _inherits3 = _interopRequireDefault(_inherits2);
    
    var _redboxReact2 = __webpack_require__(247);
    
    var _redboxReact3 = _interopRequireDefault(_redboxReact2);
    
    var _reactTransformCatchErrors3 = __webpack_require__(253);
    
    var _reactTransformCatchErrors4 = _interopRequireDefault(_reactTransformCatchErrors3);
    
    var _react2 = __webpack_require__(2);
    
    var _react3 = _interopRequireDefault(_react2);
    
    var _reactTransformHmr3 = __webpack_require__(254);
    
    var _reactTransformHmr4 = _interopRequireDefault(_reactTransformHmr3);
    
    var _icons = __webpack_require__(435);
    
    var _icons2 = _interopRequireDefault(_icons);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var _components = {
      Mapbox: {
        displayName: 'Mapbox'
      }
    };
    
    var _reactTransformHmr2 = (0, _reactTransformHmr4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/components/Mapbox/Mapbox.js',
      components: _components,
      locals: [module],
      imports: [_react3.default]
    });
    
    var _reactTransformCatchErrors2 = (0, _reactTransformCatchErrors4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/components/Mapbox/Mapbox.js',
      components: _components,
      locals: [],
      imports: [_react3.default, _redboxReact3.default]
    });
    
    function _wrapComponent(id) {
      return function (Component) {
        return _reactTransformHmr2(_reactTransformCatchErrors2(Component, id), id);
      };
    }
    
    var Mapbox = exports.Mapbox = _wrapComponent('Mapbox')(function (_React$Component) {
      (0, _inherits3.default)(Mapbox, _React$Component);
    
      function Mapbox() {
        (0, _classCallCheck3.default)(this, Mapbox);
        return (0, _possibleConstructorReturn3.default)(this, (Mapbox.__proto__ || (0, _getPrototypeOf2.default)(Mapbox)).apply(this, arguments));
      }
    
      (0, _createClass3.default)(Mapbox, [{
        key: 'setGeoJSON',
        value: function setGeoJSON() {
          this.featureLayer.setGeoJSON(this.props.geojson);
    
          var map = this.map;
          var activeStage = this.props.activeStage;
          this.featureLayer.eachLayer(function (marker) {
            var properties = marker.feature.properties;
    
            // make popup
            var popup = '<h3 class="name">' + properties.name + '</h3>';
    
            if (properties.description) {
              popup += '<div class="description">';
              if (properties.img && properties.img_large) {
                popup += '<a target="_blank" href="' + properties.img_large + '"><img src="' + properties.img + '"></a>';
              }
              popup += properties.description + '</div>';
            }
            // Bind popup
            marker.bindPopup(popup);
    
            // Pop up highlighted stage
            if (properties.highlight === true) {
              marker.openPopup();
              map.setView(marker.getLatLng(), 13);
            }
    
            // Set stage highlight on click
            marker.on('click', function (e) {
              activeStage(properties.stage);
            });
          });
        }
      }, {
        key: 'componentDidMount',
        value: function componentDidMount() {
          L.mapbox.accessToken = this.props.accessToken; //eslint-disable-line
          this.map = L.mapbox.map('map', 'mapbox.streets').fitBounds(this.props.bounds); //eslint-disable-line
          L.mapbox.styleLayer(this.props.layer).addTo(this.map); //eslint-disable-line
    
          this.featureLayer = L.mapbox.featureLayer(null, { //eslint-disable-line
            pointToLayer: function pointToLayer(feature, latlng) {
              var smallIcon = L.icon({ //eslint-disable-line
                iconSize: [27, 27],
                iconAnchor: [13, 27],
                popupAnchor: [1, -24],
                iconUrl: (0, _icons2.default)(feature)
              });
              return L.marker(latlng, { icon: smallIcon }); //eslint-disable-line
            }
          });
          this.featureLayer.addTo(this.map);
          this.setGeoJSON();
          L.control.locate().addTo(this.map);
        }
      }, {
        key: 'componentDidUpdate',
        value: function componentDidUpdate() {
          this.setGeoJSON();
        }
      }, {
        key: 'render',
        value: function render() {
          return _react3.default.createElement('div', { id: 'map' });
        }
      }]);
      return Mapbox;
    }(_react3.default.Component));
    
    exports.default = Mapbox;
    /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(160)(module)))

/***/ },
/* 435 */
/***/ function(module, exports) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    var iconUrl = exports.iconUrl = function iconUrl(feature) {
      var base = 'images/icons/';
      if (feature.properties.icon) {
        if (feature.properties.icon.includes('http')) {
          return feature.properties.icon;
        }
        return base + feature.properties.icon;
      } else {
        return base + 'maki-svg/marker-24.svg';
      }
    };
    
    exports.default = iconUrl;

/***/ },
/* 436 */
/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(module) {'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.InfoList = undefined;
    
    var _getPrototypeOf = __webpack_require__(161);
    
    var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
    
    var _classCallCheck2 = __webpack_require__(187);
    
    var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
    
    var _createClass2 = __webpack_require__(188);
    
    var _createClass3 = _interopRequireDefault(_createClass2);
    
    var _possibleConstructorReturn2 = __webpack_require__(192);
    
    var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
    
    var _inherits2 = __webpack_require__(239);
    
    var _inherits3 = _interopRequireDefault(_inherits2);
    
    var _redboxReact2 = __webpack_require__(247);
    
    var _redboxReact3 = _interopRequireDefault(_redboxReact2);
    
    var _reactTransformCatchErrors3 = __webpack_require__(253);
    
    var _reactTransformCatchErrors4 = _interopRequireDefault(_reactTransformCatchErrors3);
    
    var _react2 = __webpack_require__(2);
    
    var _react3 = _interopRequireDefault(_react2);
    
    var _reactTransformHmr3 = __webpack_require__(254);
    
    var _reactTransformHmr4 = _interopRequireDefault(_reactTransformHmr3);
    
    var _InfoListItem = __webpack_require__(437);
    
    var _InfoListItem2 = _interopRequireDefault(_InfoListItem);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var _components = {
      InfoList: {
        displayName: 'InfoList'
      }
    };
    
    var _reactTransformHmr2 = (0, _reactTransformHmr4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/components/InfoList/InfoList.js',
      components: _components,
      locals: [module],
      imports: [_react3.default]
    });
    
    var _reactTransformCatchErrors2 = (0, _reactTransformCatchErrors4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/components/InfoList/InfoList.js',
      components: _components,
      locals: [],
      imports: [_react3.default, _redboxReact3.default]
    });
    
    function _wrapComponent(id) {
      return function (Component) {
        return _reactTransformHmr2(_reactTransformCatchErrors2(Component, id), id);
      };
    }
    
    var InfoList = exports.InfoList = _wrapComponent('InfoList')(function (_React$Component) {
      (0, _inherits3.default)(InfoList, _React$Component);
    
      function InfoList() {
        (0, _classCallCheck3.default)(this, InfoList);
        return (0, _possibleConstructorReturn3.default)(this, (InfoList.__proto__ || (0, _getPrototypeOf2.default)(InfoList)).apply(this, arguments));
      }
    
      (0, _createClass3.default)(InfoList, [{
        key: 'render',
        value: function render() {
          var _this2 = this;
    
          return _react3.default.createElement(
            'div',
            { id: 'info' },
            _react3.default.createElement(
              'ul',
              null,
              this.props.geojson.features.map(function (feature) {
                return _react3.default.createElement(_InfoListItem2.default, {
                  feature: feature,
                  key: feature.properties.stage,
                  onInfoListClick: _this2.props.onInfoListClick
                });
              })
            )
          );
        }
      }]);
      return InfoList;
    }(_react3.default.Component));
    
    exports.default = InfoList;
    /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(160)(module)))

/***/ },
/* 437 */
/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(module) {'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.InfoListItem = undefined;
    
    var _getPrototypeOf = __webpack_require__(161);
    
    var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
    
    var _classCallCheck2 = __webpack_require__(187);
    
    var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
    
    var _createClass2 = __webpack_require__(188);
    
    var _createClass3 = _interopRequireDefault(_createClass2);
    
    var _possibleConstructorReturn2 = __webpack_require__(192);
    
    var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
    
    var _inherits2 = __webpack_require__(239);
    
    var _inherits3 = _interopRequireDefault(_inherits2);
    
    var _redboxReact2 = __webpack_require__(247);
    
    var _redboxReact3 = _interopRequireDefault(_redboxReact2);
    
    var _reactTransformCatchErrors3 = __webpack_require__(253);
    
    var _reactTransformCatchErrors4 = _interopRequireDefault(_reactTransformCatchErrors3);
    
    var _react2 = __webpack_require__(2);
    
    var _react3 = _interopRequireDefault(_react2);
    
    var _reactTransformHmr3 = __webpack_require__(254);
    
    var _reactTransformHmr4 = _interopRequireDefault(_reactTransformHmr3);
    
    var _icons = __webpack_require__(435);
    
    var _icons2 = _interopRequireDefault(_icons);
    
    var _InfoElevation = __webpack_require__(438);
    
    var _InfoElevation2 = _interopRequireDefault(_InfoElevation);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var _components = {
      InfoListItem: {
        displayName: 'InfoListItem'
      }
    };
    
    var _reactTransformHmr2 = (0, _reactTransformHmr4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/components/InfoListItem/InfoListItem.js',
      components: _components,
      locals: [module],
      imports: [_react3.default]
    });
    
    var _reactTransformCatchErrors2 = (0, _reactTransformCatchErrors4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/components/InfoListItem/InfoListItem.js',
      components: _components,
      locals: [],
      imports: [_react3.default, _redboxReact3.default]
    });
    
    function _wrapComponent(id) {
      return function (Component) {
        return _reactTransformHmr2(_reactTransformCatchErrors2(Component, id), id);
      };
    }
    
    var InfoListItem = exports.InfoListItem = _wrapComponent('InfoListItem')(function (_React$Component) {
      (0, _inherits3.default)(InfoListItem, _React$Component);
    
      function InfoListItem() {
        (0, _classCallCheck3.default)(this, InfoListItem);
    
        var _this = (0, _possibleConstructorReturn3.default)(this, (InfoListItem.__proto__ || (0, _getPrototypeOf2.default)(InfoListItem)).call(this));
    
        _this.onClick = _this._onClick.bind(_this);
        return _this;
      }
    
      (0, _createClass3.default)(InfoListItem, [{
        key: 'renderElevation',
        value: function renderElevation() {
          if (this.props.feature.properties.elevations) {
            return _react3.default.createElement(_InfoElevation2.default, {
              elevations: this.props.feature.properties.elevations,
              color: this.props.feature.properties.stroke
            });
          }
        }
      }, {
        key: 'renderStyle',
        value: function renderStyle(style, properties) {
          if (properties.stroke) {
            var obj = {};
            obj[style] = properties.stroke;
            return obj;
          }
        }
      }, {
        key: 'renderIcon',
        value: function renderIcon() {
          return _react3.default.createElement('img', {
            className: 'stage-icon',
            style: this.renderStyle('background', this.props.feature.properties),
            src: (0, _icons2.default)(this.props.feature) });
        }
      }, {
        key: '_onClick',
        value: function _onClick(stage) {
          var _this2 = this;
    
          return function () {
            _this2.props.onInfoListClick(_this2.props.feature.properties.stage);
          };
        }
      }, {
        key: 'renderImage',
        value: function renderImage(properties) {
          if (properties.img && properties.img_large) {
            return _react3.default.createElement(
              'a',
              { href: properties['img-large'], target: '_blank' },
              _react3.default.createElement('img', { src: properties.img }),
              'Click to view larger',
              _react3.default.createElement('br', null)
            );
          }
        }
      }, {
        key: 'render',
        value: function render() {
          var properties = this.props.feature.properties;
    
          var classes = properties.type;
          if (properties.highlight === true) {
            classes += ' highlight';
          }
          return _react3.default.createElement(
            'li',
            { className: classes, onClick: this._onClick(properties.stage) },
            this.renderIcon(),
            _react3.default.createElement(
              'div',
              { className: 'stage-info' },
              _react3.default.createElement(
                'h3',
                {
                  className: 'stage-name',
                  style: properties.highlight ? null : this.renderStyle('color', properties)
                },
                properties.name
              ),
              _react3.default.createElement(
                'div',
                { className: 'description' },
                this.renderImage(properties),
                properties.description
              ),
              this.renderElevation()
            )
          );
        }
      }]);
      return InfoListItem;
    }(_react3.default.Component));
    
    exports.default = InfoListItem;
    /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(160)(module)))

/***/ },
/* 438 */
/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(module) {'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.InfoElevation = undefined;
    
    var _getPrototypeOf = __webpack_require__(161);
    
    var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
    
    var _classCallCheck2 = __webpack_require__(187);
    
    var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
    
    var _createClass2 = __webpack_require__(188);
    
    var _createClass3 = _interopRequireDefault(_createClass2);
    
    var _possibleConstructorReturn2 = __webpack_require__(192);
    
    var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
    
    var _inherits2 = __webpack_require__(239);
    
    var _inherits3 = _interopRequireDefault(_inherits2);
    
    var _redboxReact2 = __webpack_require__(247);
    
    var _redboxReact3 = _interopRequireDefault(_redboxReact2);
    
    var _reactTransformCatchErrors3 = __webpack_require__(253);
    
    var _reactTransformCatchErrors4 = _interopRequireDefault(_reactTransformCatchErrors3);
    
    var _react2 = __webpack_require__(2);
    
    var _react3 = _interopRequireDefault(_react2);
    
    var _reactTransformHmr3 = __webpack_require__(254);
    
    var _reactTransformHmr4 = _interopRequireDefault(_reactTransformHmr3);
    
    var _reactD3Basic = __webpack_require__(439);
    
    var _d = __webpack_require__(485);
    
    var _d2 = _interopRequireDefault(_d);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var _components = {
      InfoElevation: {
        displayName: 'InfoElevation'
      }
    };
    
    var _reactTransformHmr2 = (0, _reactTransformHmr4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/components/InfoElevation/InfoElevation.js',
      components: _components,
      locals: [module],
      imports: [_react3.default]
    });
    
    var _reactTransformCatchErrors2 = (0, _reactTransformCatchErrors4.default)({
      filename: '/Users/kerneya/Geek/inferno-react/src/components/InfoElevation/InfoElevation.js',
      components: _components,
      locals: [],
      imports: [_react3.default, _redboxReact3.default]
    });
    
    function _wrapComponent(id) {
      return function (Component) {
        return _reactTransformHmr2(_reactTransformCatchErrors2(Component, id), id);
      };
    }
    
    var width = 250;
    var height = 250;
    var margins = {
      left: 50,
      right: 10,
      top: 10,
      bottom: 30
    };
    
    // var x = function (d) {
    //   return d.x
    //
    
    var InfoElevation = exports.InfoElevation = _wrapComponent('InfoElevation')(function (_React$Component) {
      (0, _inherits3.default)(InfoElevation, _React$Component);
    
      function InfoElevation() {
        (0, _classCallCheck3.default)(this, InfoElevation);
        return (0, _possibleConstructorReturn3.default)(this, (InfoElevation.__proto__ || (0, _getPrototypeOf2.default)(InfoElevation)).apply(this, arguments));
      }
    
      (0, _createClass3.default)(InfoElevation, [{
        key: 'render',
        value: function render() {
          var elevations = this.props.elevations;
    
          // get the range of elevation values
          var yDomain = _d2.default.extent(elevations, function (d) {
            return d.y;
          });
    
          // add some padding to the values so they look nicer
          yDomain[0] = yDomain[0] - 50;
          yDomain[1] = yDomain[1] + 50;
    
          var xDomain = _d2.default.extent(elevations, function (d) {
            return d.x;
          });
    
          var xTickFormat = function xTickFormat(e) {
            // for any xMax's larger than 3, we're only looking for round numbers
            if (xDomain[1] >= 3) {
              if (Math.floor(e) === e) {
                return e;
              } else {
                return;
              }
            } else {
              // If it is .x0 but not if it is .xy
              // so anything smaller should be tenth
              if (Math.floor(e * 10) === e * 10) {
                return e;
              } else {
                return;
              }
            }
          };
    
          var x = function x(d) {
            // If the xMax is larger than 1 mile act normally and return miles
            if (xDomain[1] > 1) {
              return d.x;
              // otherwise return feet
            } else {
              return d.x * 5280;
            }
          };
    
          var chartSeries = [{
            field: 'y',
            name: 'Elevation in Feet',
            color: this.props.color
          }];
    
          return _react3.default.createElement(_reactD3Basic.LineChart, {
            margins: margins,
            data: elevations,
            width: width,
            height: height,
            chartSeries: chartSeries,
            yDomain: yDomain,
            xTickFormat: xTickFormat,
            x: x
          });
        }
      }]);
      return InfoElevation;
    }(_react3.default.Component));
    
    exports.default = InfoElevation;
    /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(160)(module)))

/***/ },
/* 439 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.PieChart = exports.BarStackHorizontalChart = exports.BarStackChart = exports.AreaStackChart = exports.BarGroupHorizontalChart = exports.BarGroupChart = exports.BarHorizontalChart = exports.BarChart = exports.ScatterPlot = exports.AreaChart = exports.LineChart = undefined;
    
    var _line = __webpack_require__(440);
    
    var _line2 = _interopRequireDefault(_line);
    
    var _area = __webpack_require__(503);
    
    var _area2 = _interopRequireDefault(_area);
    
    var _scatter = __webpack_require__(504);
    
    var _scatter2 = _interopRequireDefault(_scatter);
    
    var _bar = __webpack_require__(505);
    
    var _bar2 = _interopRequireDefault(_bar);
    
    var _bar_horizontal = __webpack_require__(506);
    
    var _bar_horizontal2 = _interopRequireDefault(_bar_horizontal);
    
    var _bar_group = __webpack_require__(507);
    
    var _bar_group2 = _interopRequireDefault(_bar_group);
    
    var _bar_group_horizontal = __webpack_require__(508);
    
    var _bar_group_horizontal2 = _interopRequireDefault(_bar_group_horizontal);
    
    var _area_stack = __webpack_require__(509);
    
    var _area_stack2 = _interopRequireDefault(_area_stack);
    
    var _bar_stack = __webpack_require__(510);
    
    var _bar_stack2 = _interopRequireDefault(_bar_stack);
    
    var _bar_stack_horizontal = __webpack_require__(511);
    
    var _bar_stack_horizontal2 = _interopRequireDefault(_bar_stack_horizontal);
    
    var _pie = __webpack_require__(512);
    
    var _pie2 = _interopRequireDefault(_pie);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.LineChart = _line2.default; // Export high level charts
    
    exports.AreaChart = _area2.default;
    exports.ScatterPlot = _scatter2.default;
    exports.BarChart = _bar2.default;
    exports.BarHorizontalChart = _bar_horizontal2.default;
    exports.BarGroupChart = _bar_group2.default;
    exports.BarGroupHorizontalChart = _bar_group_horizontal2.default;
    exports.AreaStackChart = _area_stack2.default;
    exports.BarStackChart = _bar_stack2.default;
    exports.BarStackHorizontalChart = _bar_stack_horizontal2.default;
    exports.PieChart = _pie2.default;

/***/ },
/* 440 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var LineChart = function (_Component) {
      _inherits(LineChart, _Component);
    
      function LineChart(props) {
        _classCallCheck(this, LineChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(LineChart).call(this, props));
      }
    
      _createClass(LineChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries
              }),
              _react2.default.createElement(_reactD3Shape.Line, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return LineChart;
    }(_react.Component);
    
    LineChart.defaultProps = _extends({
      showScatter: false
    }, _commonProps2.default);
    LineChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = LineChart;
    module.exports = exports['default'];

/***/ },
/* 441 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _svg = __webpack_require__(442);
    
    Object.defineProperty(exports, 'Svg', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_svg).default;
      }
    });
    
    var _title = __webpack_require__(453);
    
    Object.defineProperty(exports, 'Title', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_title).default;
      }
    });
    
    var _chartContainer = __webpack_require__(454);
    
    Object.defineProperty(exports, 'Chart', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_chartContainer).default;
      }
    });
    
    var _axis = __webpack_require__(473);
    
    Object.defineProperty(exports, 'Axis', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_axis).default;
      }
    });
    
    var _xaxis = __webpack_require__(475);
    
    Object.defineProperty(exports, 'Xaxis', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_xaxis).default;
      }
    });
    
    var _yaxis = __webpack_require__(477);
    
    Object.defineProperty(exports, 'Yaxis', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_yaxis).default;
      }
    });
    
    var _label = __webpack_require__(476);
    
    Object.defineProperty(exports, 'Label', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_label).default;
      }
    });
    
    var _legend = __webpack_require__(455);
    
    Object.defineProperty(exports, 'Legend', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_legend).default;
      }
    });
    
    var _grid = __webpack_require__(478);
    
    Object.defineProperty(exports, 'Grid', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_grid).default;
      }
    });
    
    var _xgrid = __webpack_require__(479);
    
    Object.defineProperty(exports, 'Xgrid', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_xgrid).default;
      }
    });
    
    var _ygrid = __webpack_require__(480);
    
    Object.defineProperty(exports, 'Ygrid', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_ygrid).default;
      }
    });
    
    var _scale = __webpack_require__(444);
    
    Object.defineProperty(exports, 'scale', {
      enumerable: true,
      get: function get() {
        return _scale.scale;
      }
    });
    
    var _xDomain = __webpack_require__(481);
    
    Object.defineProperty(exports, 'xDomainCount', {
      enumerable: true,
      get: function get() {
        return _xDomain.xDomain;
      }
    });
    
    var _yDomain = __webpack_require__(482);
    
    Object.defineProperty(exports, 'yDomainCount', {
      enumerable: true,
      get: function get() {
        return _yDomain.yDomain;
      }
    });
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/***/ },
/* 442 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _commonProps = __webpack_require__(443);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    var _scale = __webpack_require__(444);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var ChartSvg = function (_Component) {
      _inherits(ChartSvg, _Component);
    
      function ChartSvg(props) {
        _classCallCheck(this, ChartSvg);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(ChartSvg).call(this, props));
      }
    
      _createClass(ChartSvg, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var height = _props.height;
          var width = _props.width;
          var margins = _props.margins;
          var svgClassName = _props.svgClassName;
          var id = _props.id;
          var children = _props.children;
    
    
          var t = 'translate(' + margins.left + ', ' + margins.top + ')';
    
          return _react2.default.createElement(
            'svg',
            {
              height: height,
              width: width,
              className: svgClassName,
              id: id,
              ref: 'svgContainer'
            },
            _react2.default.createElement(
              'g',
              {
                transform: t
              },
              children
            )
          );
        }
      }]);
    
      return ChartSvg;
    }(_react.Component);
    
    ChartSvg.defaultProps = _extends({
      svgClassName: 'react-d3-core__container_svg',
      onZoom: function onZoom() {},
      scaleExtent: [1, 10]
    }, _commonProps2.default);
    ChartSvg.propTypes = {
      id: _react.PropTypes.string,
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      svgClassName: _react.PropTypes.string.isRequired
    };
    exports.default = ChartSvg;

/***/ },
/* 443 */
/***/ function(module, exports) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = {
      width: 960,
      height: 500,
      margins: { top: 80, right: 100, bottom: 80, left: 100 }
    };

/***/ },
/* 444 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.scale = scale;
    
    var _d3Scale = __webpack_require__(445);
    
    var _d3Scale2 = _interopRequireDefault(_d3Scale);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function scale(props) {
      var type = props.type;
      var scale = props.scale;
    
    
      var func;
    
      if (scale === 'linear') func = _d3Scale2.default.scaleLinear();else if (scale === 'identity') func = _d3Scale2.default.scaleIdentity();else if (scale === 'sqrt') func = _d3Scale2.default.scaleSqrt();else if (scale === 'pow') func = _d3Scale2.default.scalePow();else if (scale === 'log') func = _d3Scale2.default.scaleLog();else if (scale === 'quantize') func = _d3Scale2.default.scaleQuantize();else if (scale === 'quantile') func = _d3Scale2.default.scaleQuantile();else if (scale === 'ordinal') func = _d3Scale2.default.scaleOrdinal();else if (scale === 'band') func = _d3Scale2.default.scaleBand();else if (scale === 'time') func = _d3Scale2.default.scaleTime();else new Error('Please check your axis scale setting. "' + scale + '" scale is invalid. ');
    
      func = _mkScaleSettings(props, func);
    
      return func;
    }
    
    function _mkScaleSettings(props, func) {
      var type = props.type;
      var range = props.range;
      var domain = props.domain;
      var scale = props.scale;
      var bandPaddingInner = props.bandPaddingInner;
      var bandPaddingOuter = props.bandPaddingOuter;
    
    
      if (range) func.range(range);
    
      if (domain) func.domain(domain);
    
      if (scale === 'band') {
    
        func.round(true);
    
        if (bandPaddingInner) func.paddingInner(bandPaddingInner);else func.paddingInner(.1);
    
        if (bandPaddingOuter) func.paddingOuter(bandPaddingOuter);else func.paddingOuter(.1);
      }
    
      return func;
    }

/***/ },
/* 445 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports, __webpack_require__(446), __webpack_require__(447), __webpack_require__(448), __webpack_require__(450), __webpack_require__(451), __webpack_require__(452), __webpack_require__(449)) :
      typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-collection', 'd3-interpolate', 'd3-format', 'd3-time', 'd3-time-format', 'd3-color'], factory) :
      (factory((global.d3_scale = global.d3_scale || {}),global.d3_array,global.d3_collection,global.d3_interpolate,global.d3_format,global.d3_time,global.d3_time_format,global.d3_color));
    }(this, function (exports,d3Array,d3Collection,d3Interpolate,d3Format,d3Time,d3TimeFormat,d3Color) { 'use strict';
    
      var array = Array.prototype;
    
      var map$1 = array.map;
      var slice = array.slice;
    
      var implicit = {name: "implicit"};
    
      function ordinal() {
        var index = d3Collection.map(),
            domain = [],
            range = [],
            unknown = implicit;
    
        function scale(d) {
          var key = d + "", i = index.get(key);
          if (!i) {
            if (unknown !== implicit) return unknown;
            index.set(key, i = domain.push(d));
          }
          return range[(i - 1) % range.length];
        }
    
        scale.domain = function(_) {
          if (!arguments.length) return domain.slice();
          domain = [], index = d3Collection.map();
          var i = -1, n = _.length, d, key;
          while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
          return scale;
        };
    
        scale.range = function(_) {
          return arguments.length ? (range = slice.call(_), scale) : range.slice();
        };
    
        scale.unknown = function(_) {
          return arguments.length ? (unknown = _, scale) : unknown;
        };
    
        scale.copy = function() {
          return ordinal()
              .domain(domain)
              .range(range)
              .unknown(unknown);
        };
    
        return scale;
      }
    
      function band() {
        var scale = ordinal().unknown(undefined),
            domain = scale.domain,
            ordinalRange = scale.range,
            range = [0, 1],
            step,
            bandwidth,
            round = false,
            paddingInner = 0,
            paddingOuter = 0,
            align = 0.5;
    
        delete scale.unknown;
    
        function rescale() {
          var n = domain().length,
              reverse = range[1] < range[0],
              start = range[reverse - 0],
              stop = range[1 - reverse];
          step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
          if (round) step = Math.floor(step);
          start += (stop - start - step * (n - paddingInner)) * align;
          bandwidth = step * (1 - paddingInner);
          if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
          var values = d3Array.range(n).map(function(i) { return start + step * i; });
          return ordinalRange(reverse ? values.reverse() : values);
        }
    
        scale.domain = function(_) {
          return arguments.length ? (domain(_), rescale()) : domain();
        };
    
        scale.range = function(_) {
          return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();
        };
    
        scale.rangeRound = function(_) {
          return range = [+_[0], +_[1]], round = true, rescale();
        };
    
        scale.bandwidth = function() {
          return bandwidth;
        };
    
        scale.step = function() {
          return step;
        };
    
        scale.round = function(_) {
          return arguments.length ? (round = !!_, rescale()) : round;
        };
    
        scale.padding = function(_) {
          return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
        };
    
        scale.paddingInner = function(_) {
          return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
        };
    
        scale.paddingOuter = function(_) {
          return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;
        };
    
        scale.align = function(_) {
          return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
        };
    
        scale.copy = function() {
          return band()
              .domain(domain())
              .range(range)
              .round(round)
              .paddingInner(paddingInner)
              .paddingOuter(paddingOuter)
              .align(align);
        };
    
        return rescale();
      }
    
      function pointish(scale) {
        var copy = scale.copy;
    
        scale.padding = scale.paddingOuter;
        delete scale.paddingInner;
        delete scale.paddingOuter;
    
        scale.copy = function() {
          return pointish(copy());
        };
    
        return scale;
      }
    
      function point() {
        return pointish(band().paddingInner(1));
      }
    
      function constant(x) {
        return function() {
          return x;
        };
      }
    
      function number(x) {
        return +x;
      }
    
      var unit = [0, 1];
    
      function deinterpolate(a, b) {
        return (b -= (a = +a))
            ? function(x) { return (x - a) / b; }
            : constant(b);
      }
    
      function deinterpolateClamp(deinterpolate) {
        return function(a, b) {
          var d = deinterpolate(a = +a, b = +b);
          return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };
        };
      }
    
      function reinterpolateClamp(reinterpolate) {
        return function(a, b) {
          var r = reinterpolate(a = +a, b = +b);
          return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
        };
      }
    
      function bimap(domain, range, deinterpolate, reinterpolate) {
        var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
        if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
        else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
        return function(x) { return r0(d0(x)); };
      }
    
      function polymap(domain, range, deinterpolate, reinterpolate) {
        var j = Math.min(domain.length, range.length) - 1,
            d = new Array(j),
            r = new Array(j),
            i = -1;
    
        // Reverse descending domains.
        if (domain[j] < domain[0]) {
          domain = domain.slice().reverse();
          range = range.slice().reverse();
        }
    
        while (++i < j) {
          d[i] = deinterpolate(domain[i], domain[i + 1]);
          r[i] = reinterpolate(range[i], range[i + 1]);
        }
    
        return function(x) {
          var i = d3Array.bisect(domain, x, 1, j) - 1;
          return r[i](d[i](x));
        };
      }
    
      function copy(source, target) {
        return target
            .domain(source.domain())
            .range(source.range())
            .interpolate(source.interpolate())
            .clamp(source.clamp());
      }
    
      // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
      // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
      function continuous(deinterpolate$$, reinterpolate) {
        var domain = unit,
            range = unit,
            interpolate = d3Interpolate.interpolate,
            clamp = false,
            output,
            input;
    
        function rescale() {
          var map = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
          output = map(domain, range, clamp ? deinterpolateClamp(deinterpolate$$) : deinterpolate$$, interpolate);
          input = map(range, domain, deinterpolate, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate);
          return scale;
        }
    
        function scale(x) {
          return output(+x);
        }
    
        scale.invert = function(y) {
          return input(+y);
        };
    
        scale.domain = function(_) {
          return arguments.length ? (domain = map$1.call(_, number), rescale()) : domain.slice();
        };
    
        scale.range = function(_) {
          return arguments.length ? (range = slice.call(_), rescale()) : range.slice();
        };
    
        scale.rangeRound = function(_) {
          return range = slice.call(_), interpolate = d3Interpolate.interpolateRound, rescale();
        };
    
        scale.clamp = function(_) {
          return arguments.length ? (clamp = !!_, rescale()) : clamp;
        };
    
        scale.interpolate = function(_) {
          return arguments.length ? (interpolate = _, rescale()) : interpolate;
        };
    
        return rescale();
      }
    
      function tickFormat(domain, count, specifier) {
        var start = domain[0],
            stop = domain[domain.length - 1],
            step = d3Array.tickStep(start, stop, count == null ? 10 : count),
            precision;
        specifier = d3Format.formatSpecifier(specifier == null ? ",f" : specifier);
        switch (specifier.type) {
          case "s": {
            var value = Math.max(Math.abs(start), Math.abs(stop));
            if (specifier.precision == null && !isNaN(precision = d3Format.precisionPrefix(step, value))) specifier.precision = precision;
            return d3Format.formatPrefix(specifier, value);
          }
          case "":
          case "e":
          case "g":
          case "p":
          case "r": {
            if (specifier.precision == null && !isNaN(precision = d3Format.precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
            break;
          }
          case "f":
          case "%": {
            if (specifier.precision == null && !isNaN(precision = d3Format.precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
            break;
          }
        }
        return d3Format.format(specifier);
      }
    
      function linearish(scale) {
        var domain = scale.domain;
    
        scale.ticks = function(count) {
          var d = domain();
          return d3Array.ticks(d[0], d[d.length - 1], count == null ? 10 : count);
        };
    
        scale.tickFormat = function(count, specifier) {
          return tickFormat(domain(), count, specifier);
        };
    
        scale.nice = function(count) {
          var d = domain(),
              i = d.length - 1,
              n = count == null ? 10 : count,
              start = d[0],
              stop = d[i],
              step = d3Array.tickStep(start, stop, n);
    
          if (step) {
            step = d3Array.tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);
            d[0] = Math.floor(start / step) * step;
            d[i] = Math.ceil(stop / step) * step;
            domain(d);
          }
    
          return scale;
        };
    
        return scale;
      }
    
      function linear() {
        var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber);
    
        scale.copy = function() {
          return copy(scale, linear());
        };
    
        return linearish(scale);
      }
    
      function identity() {
        var domain = [0, 1];
    
        function scale(x) {
          return +x;
        }
    
        scale.invert = scale;
    
        scale.domain = scale.range = function(_) {
          return arguments.length ? (domain = map$1.call(_, number), scale) : domain.slice();
        };
    
        scale.copy = function() {
          return identity().domain(domain);
        };
    
        return linearish(scale);
      }
    
      function nice(domain, interval) {
        domain = domain.slice();
    
        var i0 = 0,
            i1 = domain.length - 1,
            x0 = domain[i0],
            x1 = domain[i1],
            t;
    
        if (x1 < x0) {
          t = i0, i0 = i1, i1 = t;
          t = x0, x0 = x1, x1 = t;
        }
    
        domain[i0] = interval.floor(x0);
        domain[i1] = interval.ceil(x1);
        return domain;
      }
    
      function deinterpolate$1(a, b) {
        return (b = Math.log(b / a))
            ? function(x) { return Math.log(x / a) / b; }
            : constant(b);
      }
    
      function reinterpolate(a, b) {
        return a < 0
            ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }
            : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };
      }
    
      function pow10(x) {
        return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
      }
    
      function powp(base) {
        return base === 10 ? pow10
            : base === Math.E ? Math.exp
            : function(x) { return Math.pow(base, x); };
      }
    
      function logp(base) {
        return base === Math.E ? Math.log
            : base === 10 && Math.log10
            || base === 2 && Math.log2
            || (base = Math.log(base), function(x) { return Math.log(x) / base; });
      }
    
      function reflect(f) {
        return function(x) {
          return -f(-x);
        };
      }
    
      function log() {
        var scale = continuous(deinterpolate$1, reinterpolate).domain([1, 10]),
            domain = scale.domain,
            base = 10,
            logs = logp(10),
            pows = powp(10);
    
        function rescale() {
          logs = logp(base), pows = powp(base);
          if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);
          return scale;
        }
    
        scale.base = function(_) {
          return arguments.length ? (base = +_, rescale()) : base;
        };
    
        scale.domain = function(_) {
          return arguments.length ? (domain(_), rescale()) : domain();
        };
    
        scale.ticks = function(count) {
          var d = domain(),
              u = d[0],
              v = d[d.length - 1],
              r;
    
          if (r = v < u) i = u, u = v, v = i;
    
          var i = logs(u),
              j = logs(v),
              p,
              k,
              t,
              n = count == null ? 10 : +count,
              z = [];
    
          if (!(base % 1) && j - i < n) {
            i = Math.round(i) - 1, j = Math.round(j) + 1;
            if (u > 0) for (; i < j; ++i) {
              for (k = 1, p = pows(i); k < base; ++k) {
                t = p * k;
                if (t < u) continue;
                if (t > v) break;
                z.push(t);
              }
            } else for (; i < j; ++i) {
              for (k = base - 1, p = pows(i); k >= 1; --k) {
                t = p * k;
                if (t < u) continue;
                if (t > v) break;
                z.push(t);
              }
            }
            if (r) z.reverse();
          } else {
            z = d3Array.ticks(i, j, Math.min(j - i, n)).map(pows);
          }
    
          return z;
        };
    
        scale.tickFormat = function(count, specifier) {
          if (specifier == null) specifier = base === 10 ? ".0e" : ",";
          if (typeof specifier !== "function") specifier = d3Format.format(specifier);
          if (count === Infinity) return specifier;
          if (count == null) count = 10;
          var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
          return function(d) {
            var i = d / pows(Math.round(logs(d)));
            if (i * base < base - 0.5) i *= base;
            return i <= k ? specifier(d) : "";
          };
        };
    
        scale.nice = function() {
          return domain(nice(domain(), {
            floor: function(x) { return pows(Math.floor(logs(x))); },
            ceil: function(x) { return pows(Math.ceil(logs(x))); }
          }));
        };
    
        scale.copy = function() {
          return copy(scale, log().base(base));
        };
    
        return scale;
      }
    
      function raise(x, exponent) {
        return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
      }
    
      function pow() {
        var exponent = 1,
            scale = continuous(deinterpolate, reinterpolate),
            domain = scale.domain;
    
        function deinterpolate(a, b) {
          return (b = raise(b, exponent) - (a = raise(a, exponent)))
              ? function(x) { return (raise(x, exponent) - a) / b; }
              : constant(b);
        }
    
        function reinterpolate(a, b) {
          b = raise(b, exponent) - (a = raise(a, exponent));
          return function(t) { return raise(a + b * t, 1 / exponent); };
        }
    
        scale.exponent = function(_) {
          return arguments.length ? (exponent = +_, domain(domain())) : exponent;
        };
    
        scale.copy = function() {
          return copy(scale, pow().exponent(exponent));
        };
    
        return linearish(scale);
      }
    
      function sqrt() {
        return pow().exponent(0.5);
      }
    
      function quantile$1() {
        var domain = [],
            range = [],
            thresholds = [];
    
        function rescale() {
          var i = 0, n = Math.max(1, range.length);
          thresholds = new Array(n - 1);
          while (++i < n) thresholds[i - 1] = d3Array.quantile(domain, i / n);
          return scale;
        }
    
        function scale(x) {
          if (!isNaN(x = +x)) return range[d3Array.bisect(thresholds, x)];
        }
    
        scale.invertExtent = function(y) {
          var i = range.indexOf(y);
          return i < 0 ? [NaN, NaN] : [
            i > 0 ? thresholds[i - 1] : domain[0],
            i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
          ];
        };
    
        scale.domain = function(_) {
          if (!arguments.length) return domain.slice();
          domain = [];
          for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
          domain.sort(d3Array.ascending);
          return rescale();
        };
    
        scale.range = function(_) {
          return arguments.length ? (range = slice.call(_), rescale()) : range.slice();
        };
    
        scale.quantiles = function() {
          return thresholds.slice();
        };
    
        scale.copy = function() {
          return quantile$1()
              .domain(domain)
              .range(range);
        };
    
        return scale;
      }
    
      function quantize() {
        var x0 = 0,
            x1 = 1,
            n = 1,
            domain = [0.5],
            range = [0, 1];
    
        function scale(x) {
          if (x <= x) return range[d3Array.bisect(domain, x, 0, n)];
        }
    
        function rescale() {
          var i = -1;
          domain = new Array(n);
          while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
          return scale;
        }
    
        scale.domain = function(_) {
          return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
        };
    
        scale.range = function(_) {
          return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();
        };
    
        scale.invertExtent = function(y) {
          var i = range.indexOf(y);
          return i < 0 ? [NaN, NaN]
              : i < 1 ? [x0, domain[0]]
              : i >= n ? [domain[n - 1], x1]
              : [domain[i - 1], domain[i]];
        };
    
        scale.copy = function() {
          return quantize()
              .domain([x0, x1])
              .range(range);
        };
    
        return linearish(scale);
      }
    
      function threshold() {
        var domain = [0.5],
            range = [0, 1],
            n = 1;
    
        function scale(x) {
          if (x <= x) return range[d3Array.bisect(domain, x, 0, n)];
        }
    
        scale.domain = function(_) {
          return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
        };
    
        scale.range = function(_) {
          return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
        };
    
        scale.invertExtent = function(y) {
          var i = range.indexOf(y);
          return [domain[i - 1], domain[i]];
        };
    
        scale.copy = function() {
          return threshold()
              .domain(domain)
              .range(range);
        };
    
        return scale;
      }
    
      var durationSecond = 1000;
      var durationMinute = durationSecond * 60;
      var durationHour = durationMinute * 60;
      var durationDay = durationHour * 24;
      var durationWeek = durationDay * 7;
      var durationMonth = durationDay * 30;
      var durationYear = durationDay * 365;
      function newDate(t) {
        return new Date(t);
      }
    
      function calendar(year, month, week, day, hour, minute, second, millisecond, format) {
        var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber),
            invert = scale.invert,
            domain = scale.domain;
    
        var formatMillisecond = format(".%L"),
            formatSecond = format(":%S"),
            formatMinute = format("%I:%M"),
            formatHour = format("%I %p"),
            formatDay = format("%a %d"),
            formatWeek = format("%b %d"),
            formatMonth = format("%B"),
            formatYear = format("%Y");
    
        var tickIntervals = [
          [second,  1,      durationSecond],
          [second,  5,  5 * durationSecond],
          [second, 15, 15 * durationSecond],
          [second, 30, 30 * durationSecond],
          [minute,  1,      durationMinute],
          [minute,  5,  5 * durationMinute],
          [minute, 15, 15 * durationMinute],
          [minute, 30, 30 * durationMinute],
          [  hour,  1,      durationHour  ],
          [  hour,  3,  3 * durationHour  ],
          [  hour,  6,  6 * durationHour  ],
          [  hour, 12, 12 * durationHour  ],
          [   day,  1,      durationDay   ],
          [   day,  2,  2 * durationDay   ],
          [  week,  1,      durationWeek  ],
          [ month,  1,      durationMonth ],
          [ month,  3,  3 * durationMonth ],
          [  year,  1,      durationYear  ]
        ];
    
        function tickFormat(date) {
          return (second(date) < date ? formatMillisecond
              : minute(date) < date ? formatSecond
              : hour(date) < date ? formatMinute
              : day(date) < date ? formatHour
              : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
              : year(date) < date ? formatMonth
              : formatYear)(date);
        }
    
        function tickInterval(interval, start, stop, step) {
          if (interval == null) interval = 10;
    
          // If a desired tick count is specified, pick a reasonable tick interval
          // based on the extent of the domain and a rough estimate of tick size.
          // Otherwise, assume interval is already a time interval and use it.
          if (typeof interval === "number") {
            var target = Math.abs(stop - start) / interval,
                i = d3Array.bisector(function(i) { return i[2]; }).right(tickIntervals, target);
            if (i === tickIntervals.length) {
              step = d3Array.tickStep(start / durationYear, stop / durationYear, interval);
              interval = year;
            } else if (i) {
              i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
              step = i[1];
              interval = i[0];
            } else {
              step = d3Array.tickStep(start, stop, interval);
              interval = millisecond;
            }
          }
    
          return step == null ? interval : interval.every(step);
        }
    
        scale.invert = function(y) {
          return new Date(invert(y));
        };
    
        scale.domain = function(_) {
          return arguments.length ? domain(_) : domain().map(newDate);
        };
    
        scale.ticks = function(interval, step) {
          var d = domain(),
              t0 = d[0],
              t1 = d[d.length - 1],
              r = t1 < t0,
              t;
          if (r) t = t0, t0 = t1, t1 = t;
          t = tickInterval(interval, t0, t1, step);
          t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
          return r ? t.reverse() : t;
        };
    
        scale.tickFormat = function(specifier) {
          return specifier == null ? tickFormat : format(specifier);
        };
    
        scale.nice = function(interval, step) {
          var d = domain();
          return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
              ? domain(nice(d, interval))
              : scale;
        };
    
        scale.copy = function() {
          return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));
        };
    
        return scale;
      }
    
      function time() {
        return calendar(d3Time.timeYear, d3Time.timeMonth, d3Time.timeWeek, d3Time.timeDay, d3Time.timeHour, d3Time.timeMinute, d3Time.timeSecond, d3Time.timeMillisecond, d3TimeFormat.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);
      }
    
      function utcTime() {
        return calendar(d3Time.utcYear, d3Time.utcMonth, d3Time.utcWeek, d3Time.utcDay, d3Time.utcHour, d3Time.utcMinute, d3Time.utcSecond, d3Time.utcMillisecond, d3TimeFormat.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);
      }
    
      function colors(s) {
        return s.match(/.{6}/g).map(function(x) {
          return "#" + x;
        });
      }
    
      var colors10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
    
      function category10() {
        return ordinal().range(colors10);
      }
    
      var colors20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6");
    
      function category20b() {
        return ordinal().range(colors20b);
      }
    
      var colors20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9");
    
      function category20c() {
        return ordinal().range(colors20c);
      }
    
      var colors20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5");
    
      function category20() {
        return ordinal().range(colors20);
      }
    
      function cubehelix$1() {
        return linear()
            .interpolate(d3Interpolate.interpolateCubehelixLong)
            .range([d3Color.cubehelix(300, 0.5, 0.0), d3Color.cubehelix(-240, 0.5, 1.0)]);
      }
    
      function sequential(interpolate) {
        var x0 = 0,
            x1 = 1,
            clamp = false;
    
        function scale(x) {
          var t = (x - x0) / (x1 - x0);
          return interpolate(clamp ? Math.max(0, Math.min(1, t)) : t);
        }
    
        scale.domain = function(_) {
          return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
        };
    
        scale.clamp = function(_) {
          return arguments.length ? (clamp = !!_, scale) : clamp;
        };
    
        scale.copy = function() {
          return sequential(interpolate).domain([x0, x1]).clamp(clamp);
        };
    
        return linearish(scale);
      }
    
      function warm() {
        return sequential(d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(-100, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8)));
      }
    
      function cool() {
        return sequential(d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(260, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8)));
      }
    
      function rainbow() {
        var rainbow = d3Color.cubehelix();
        return sequential(function(t) {
          if (t < 0 || t > 1) t -= Math.floor(t);
          var ts = Math.abs(t - 0.5);
          rainbow.h = 360 * t - 100;
          rainbow.s = 1.5 - 1.5 * ts;
          rainbow.l = 0.8 - 0.9 * ts;
          return rainbow + "";
        });
      }
    
      var rangeViridis = colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725");
      var rangeMagma = colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf");
      var rangeInferno = colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4");
      var rangePlasma = colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921");
      function ramp(range) {
        var s = sequential(function(t) { return range[Math.round(t * range.length - t)]; }).clamp(true);
        delete s.clamp;
        return s;
      }
    
      function viridis() {
        return ramp(rangeViridis);
      }
    
      function magma() {
        return ramp(rangeMagma);
      }
    
      function inferno() {
        return ramp(rangeInferno);
      }
    
      function plasma() {
        return ramp(rangePlasma);
      }
    
      var version = "0.6.4";
    
      exports.version = version;
      exports.scaleBand = band;
      exports.scalePoint = point;
      exports.scaleIdentity = identity;
      exports.scaleLinear = linear;
      exports.scaleLog = log;
      exports.scaleOrdinal = ordinal;
      exports.scaleImplicit = implicit;
      exports.scalePow = pow;
      exports.scaleSqrt = sqrt;
      exports.scaleQuantile = quantile$1;
      exports.scaleQuantize = quantize;
      exports.scaleThreshold = threshold;
      exports.scaleTime = time;
      exports.scaleUtc = utcTime;
      exports.scaleCategory10 = category10;
      exports.scaleCategory20b = category20b;
      exports.scaleCategory20c = category20c;
      exports.scaleCategory20 = category20;
      exports.scaleCubehelix = cubehelix$1;
      exports.scaleRainbow = rainbow;
      exports.scaleWarm = warm;
      exports.scaleCool = cool;
      exports.scaleViridis = viridis;
      exports.scaleMagma = magma;
      exports.scaleInferno = inferno;
      exports.scalePlasma = plasma;
    
    }));

/***/ },
/* 446 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], factory) :
      (factory((global.d3_array = {})));
    }(this, function (exports) { 'use strict';
    
      function ascending(a, b) {
        return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
      }
    
      function bisector(compare) {
        if (compare.length === 1) compare = ascendingComparator(compare);
        return {
          left: function(a, x, lo, hi) {
            if (lo == null) lo = 0;
            if (hi == null) hi = a.length;
            while (lo < hi) {
              var mid = lo + hi >>> 1;
              if (compare(a[mid], x) < 0) lo = mid + 1;
              else hi = mid;
            }
            return lo;
          },
          right: function(a, x, lo, hi) {
            if (lo == null) lo = 0;
            if (hi == null) hi = a.length;
            while (lo < hi) {
              var mid = lo + hi >>> 1;
              if (compare(a[mid], x) > 0) hi = mid;
              else lo = mid + 1;
            }
            return lo;
          }
        };
      }
    
      function ascendingComparator(f) {
        return function(d, x) {
          return ascending(f(d), x);
        };
      }
    
      var ascendingBisect = bisector(ascending);
      var bisectRight = ascendingBisect.right;
      var bisectLeft = ascendingBisect.left;
    
      function descending(a, b) {
        return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
      }
    
      function number$1(x) {
        return x === null ? NaN : +x;
      }
    
      function variance(array, f) {
        var n = array.length,
            m = 0,
            a,
            d,
            s = 0,
            i = -1,
            j = 0;
    
        if (f == null) {
          while (++i < n) {
            if (!isNaN(a = number$1(array[i]))) {
              d = a - m;
              m += d / ++j;
              s += d * (a - m);
            }
          }
        }
    
        else {
          while (++i < n) {
            if (!isNaN(a = number$1(f(array[i], i, array)))) {
              d = a - m;
              m += d / ++j;
              s += d * (a - m);
            }
          }
        }
    
        if (j > 1) return s / (j - 1);
      }
    
      function deviation(array, f) {
        var v = variance(array, f);
        return v ? Math.sqrt(v) : v;
      }
    
      function extent(array, f) {
        var i = -1,
            n = array.length,
            a,
            b,
            c;
    
        if (f == null) {
          while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }
          while (++i < n) if ((b = array[i]) != null) {
            if (a > b) a = b;
            if (c < b) c = b;
          }
        }
    
        else {
          while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }
          while (++i < n) if ((b = f(array[i], i, array)) != null) {
            if (a > b) a = b;
            if (c < b) c = b;
          }
        }
    
        return [a, c];
      }
    
      function constant(x) {
        return function() {
          return x;
        };
      }
    
      function identity(x) {
        return x;
      }
    
      function range(start, stop, step) {
        start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
    
        var i = -1,
            n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
            range = new Array(n);
    
        while (++i < n) {
          range[i] = start + i * step;
        }
    
        return range;
      }
    
      var e10 = Math.sqrt(50);
      var e5 = Math.sqrt(10);
      var e2 = Math.sqrt(2);
      function ticks(start, stop, count) {
        var step = tickStep(start, stop, count);
        return range(
          Math.ceil(start / step) * step,
          Math.floor(stop / step) * step + step / 2, // inclusive
          step
        );
      }
    
      function tickStep(start, stop, count) {
        var step0 = Math.abs(stop - start) / Math.max(0, count),
            step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
            error = step0 / step1;
        if (error >= e10) step1 *= 10;
        else if (error >= e5) step1 *= 5;
        else if (error >= e2) step1 *= 2;
        return stop < start ? -step1 : step1;
      }
    
      function sturges(values) {
        return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
      }
    
      function number(x) {
        return +x;
      }
    
      function histogram() {
        var value = identity,
            domain = extent,
            threshold = sturges;
    
        function histogram(data) {
          var i,
              n = data.length,
              x,
              values = new Array(n);
    
          // Coerce values to numbers.
          for (i = 0; i < n; ++i) {
            values[i] = +value(data[i], i, data);
          }
    
          var xz = domain(values),
              x0 = +xz[0],
              x1 = +xz[1],
              tz = threshold(values, x0, x1);
    
          // Convert number of thresholds into uniform thresholds.
          if (!Array.isArray(tz)) tz = ticks(x0, x1, +tz);
    
          // Coerce thresholds to numbers, ignoring any outside the domain.
          var m = tz.length;
          for (i = 0; i < m; ++i) tz[i] = +tz[i];
          while (tz[0] <= x0) tz.shift(), --m;
          while (tz[m - 1] >= x1) tz.pop(), --m;
    
          var bins = new Array(m + 1),
              bin;
    
          // Initialize bins.
          for (i = 0; i <= m; ++i) {
            bin = bins[i] = [];
            bin.x0 = i > 0 ? tz[i - 1] : x0;
            bin.x1 = i < m ? tz[i] : x1;
          }
    
          // Assign data to bins by value, ignoring any outside the domain.
          for (i = 0; i < n; ++i) {
            x = values[i];
            if (x0 <= x && x <= x1) {
              bins[bisectRight(tz, x, 0, m)].push(data[i]);
            }
          }
    
          return bins;
        }
    
        histogram.value = function(_) {
          return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), histogram) : value;
        };
    
        histogram.domain = function(_) {
          return arguments.length ? (domain = typeof _ === "function" ? _ : constant([+_[0], +_[1]]), histogram) : domain;
        };
    
        histogram.thresholds = function(_) {
          if (!arguments.length) return threshold;
          threshold = typeof _ === "function" ? _
              : Array.isArray(_) ? constant(Array.prototype.map.call(_, number))
              : constant(+_);
          return histogram;
        };
    
        return histogram;
      }
    
      function quantile(array, p, f) {
        if (f == null) f = number$1;
        if (!(n = array.length)) return;
        if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);
        if (p >= 1) return +f(array[n - 1], n - 1, array);
        var n,
            h = (n - 1) * p,
            i = Math.floor(h),
            a = +f(array[i], i, array),
            b = +f(array[i + 1], i + 1, array);
        return a + (b - a) * (h - i);
      }
    
      function freedmanDiaconis(values, min, max) {
        values.sort(ascending);
        return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));
      }
    
      function scott(values, min, max) {
        return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
      }
    
      function max(array, f) {
        var i = -1,
            n = array.length,
            a,
            b;
    
        if (f == null) {
          while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
          while (++i < n) if ((b = array[i]) != null && b > a) a = b;
        }
    
        else {
          while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
          while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;
        }
    
        return a;
      }
    
      function mean(array, f) {
        var s = 0,
            n = array.length,
            a,
            i = -1,
            j = n;
    
        if (f == null) {
          while (++i < n) if (!isNaN(a = number$1(array[i]))) s += a; else --j;
        }
    
        else {
          while (++i < n) if (!isNaN(a = number$1(f(array[i], i, array)))) s += a; else --j;
        }
    
        if (j) return s / j;
      }
    
      function median(array, f) {
        var numbers = [],
            n = array.length,
            a,
            i = -1;
    
        if (f == null) {
          while (++i < n) if (!isNaN(a = number$1(array[i]))) numbers.push(a);
        }
    
        else {
          while (++i < n) if (!isNaN(a = number$1(f(array[i], i, array)))) numbers.push(a);
        }
    
        return quantile(numbers.sort(ascending), 0.5);
      }
    
      function merge(arrays) {
        var n = arrays.length,
            m,
            i = -1,
            j = 0,
            merged,
            array;
    
        while (++i < n) j += arrays[i].length;
        merged = new Array(j);
    
        while (--n >= 0) {
          array = arrays[n];
          m = array.length;
          while (--m >= 0) {
            merged[--j] = array[m];
          }
        }
    
        return merged;
      }
    
      function min(array, f) {
        var i = -1,
            n = array.length,
            a,
            b;
    
        if (f == null) {
          while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
          while (++i < n) if ((b = array[i]) != null && a > b) a = b;
        }
    
        else {
          while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
          while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;
        }
    
        return a;
      }
    
      function pairs(array) {
        var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
        while (i < n) pairs[i] = [p, p = array[++i]];
        return pairs;
      }
    
      function permute(array, indexes) {
        var i = indexes.length, permutes = new Array(i);
        while (i--) permutes[i] = array[indexes[i]];
        return permutes;
      }
    
      function scan(array, compare) {
        if (!(n = array.length)) return;
        var i = 0,
            n,
            j = 0,
            xi,
            xj = array[j];
    
        if (!compare) compare = ascending;
    
        while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;
    
        if (compare(xj, xj) === 0) return j;
      }
    
      function shuffle(array, i0, i1) {
        var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
            t,
            i;
    
        while (m) {
          i = Math.random() * m-- | 0;
          t = array[m + i0];
          array[m + i0] = array[i + i0];
          array[i + i0] = t;
        }
    
        return array;
      }
    
      function sum(array, f) {
        var s = 0,
            n = array.length,
            a,
            i = -1;
    
        if (f == null) {
          while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.
        }
    
        else {
          while (++i < n) if (a = +f(array[i], i, array)) s += a;
        }
    
        return s;
      }
    
      function transpose(matrix) {
        if (!(n = matrix.length)) return [];
        for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
          for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
            row[j] = matrix[j][i];
          }
        }
        return transpose;
      }
    
      function length(d) {
        return d.length;
      }
    
      function zip() {
        return transpose(arguments);
      }
    
      var version = "0.7.1";
    
      exports.version = version;
      exports.bisect = bisectRight;
      exports.bisectRight = bisectRight;
      exports.bisectLeft = bisectLeft;
      exports.ascending = ascending;
      exports.bisector = bisector;
      exports.descending = descending;
      exports.deviation = deviation;
      exports.extent = extent;
      exports.histogram = histogram;
      exports.thresholdFreedmanDiaconis = freedmanDiaconis;
      exports.thresholdScott = scott;
      exports.thresholdSturges = sturges;
      exports.max = max;
      exports.mean = mean;
      exports.median = median;
      exports.merge = merge;
      exports.min = min;
      exports.pairs = pairs;
      exports.permute = permute;
      exports.quantile = quantile;
      exports.range = range;
      exports.scan = scan;
      exports.shuffle = shuffle;
      exports.sum = sum;
      exports.ticks = ticks;
      exports.tickStep = tickStep;
      exports.transpose = transpose;
      exports.variance = variance;
      exports.zip = zip;
    
    }));

/***/ },
/* 447 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], factory) :
      (factory((global.d3_collection = global.d3_collection || {})));
    }(this, function (exports) { 'use strict';
    
      var prefix = "$";
    
      function Map() {}
    
      Map.prototype = map.prototype = {
        constructor: Map,
        has: function(key) {
          return (prefix + key) in this;
        },
        get: function(key) {
          return this[prefix + key];
        },
        set: function(key, value) {
          this[prefix + key] = value;
          return this;
        },
        remove: function(key) {
          var property = prefix + key;
          return property in this && delete this[property];
        },
        clear: function() {
          for (var property in this) if (property[0] === prefix) delete this[property];
        },
        keys: function() {
          var keys = [];
          for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
          return keys;
        },
        values: function() {
          var values = [];
          for (var property in this) if (property[0] === prefix) values.push(this[property]);
          return values;
        },
        entries: function() {
          var entries = [];
          for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
          return entries;
        },
        size: function() {
          var size = 0;
          for (var property in this) if (property[0] === prefix) ++size;
          return size;
        },
        empty: function() {
          for (var property in this) if (property[0] === prefix) return false;
          return true;
        },
        each: function(f) {
          for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
        }
      };
    
      function map(object, f) {
        var map = new Map;
    
        // Copy constructor.
        if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });
    
        // Index array by numeric index or specified key function.
        else if (Array.isArray(object)) {
          var i = -1,
              n = object.length,
              o;
    
          if (f == null) while (++i < n) map.set(i, object[i]);
          else while (++i < n) map.set(f(o = object[i], i, object), o);
        }
    
        // Convert object to map.
        else if (object) for (var key in object) map.set(key, object[key]);
    
        return map;
      }
    
      function nest() {
        var keys = [],
            sortKeys = [],
            sortValues,
            rollup,
            nest;
    
        function apply(array, depth, createResult, setResult) {
          if (depth >= keys.length) return rollup
              ? rollup(array) : (sortValues
              ? array.sort(sortValues)
              : array);
    
          var i = -1,
              n = array.length,
              key = keys[depth++],
              keyValue,
              value,
              valuesByKey = map(),
              values,
              result = createResult();
    
          while (++i < n) {
            if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
              values.push(value);
            } else {
              valuesByKey.set(keyValue, [value]);
            }
          }
    
          valuesByKey.each(function(values, key) {
            setResult(result, key, apply(values, depth, createResult, setResult));
          });
    
          return result;
        }
    
        function entries(map, depth) {
          if (depth >= keys.length) return map;
    
          var array = [],
              sortKey = sortKeys[depth++];
    
          map.each(function(value, key) {
            array.push({key: key, values: entries(value, depth)});
          });
    
          return sortKey
              ? array.sort(function(a, b) { return sortKey(a.key, b.key); })
              : array;
        }
    
        return nest = {
          object: function(array) { return apply(array, 0, createObject, setObject); },
          map: function(array) { return apply(array, 0, createMap, setMap); },
          entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
          key: function(d) { keys.push(d); return nest; },
          sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
          sortValues: function(order) { sortValues = order; return nest; },
          rollup: function(f) { rollup = f; return nest; }
        };
      }
    
      function createObject() {
        return {};
      }
    
      function setObject(object, key, value) {
        object[key] = value;
      }
    
      function createMap() {
        return map();
      }
    
      function setMap(map, key, value) {
        map.set(key, value);
      }
    
      function Set() {}
    
      var proto = map.prototype;
    
      Set.prototype = set.prototype = {
        constructor: Set,
        has: proto.has,
        add: function(value) {
          value += "";
          this[prefix + value] = value;
          return this;
        },
        remove: proto.remove,
        clear: proto.clear,
        values: proto.keys,
        size: proto.size,
        empty: proto.empty,
        each: proto.each
      };
    
      function set(object, f) {
        var set = new Set;
    
        // Copy constructor.
        if (object instanceof Set) object.each(function(value) { set.add(value); });
    
        // Otherwise, assume it’s an array.
        else if (object) {
          var i = -1, n = object.length;
          if (f == null) while (++i < n) set.add(object[i]);
          else while (++i < n) set.add(f(object[i], i, object));
        }
    
        return set;
      }
    
      function keys(map) {
        var keys = [];
        for (var key in map) keys.push(key);
        return keys;
      }
    
      function values(map) {
        var values = [];
        for (var key in map) values.push(map[key]);
        return values;
      }
    
      function entries(map) {
        var entries = [];
        for (var key in map) entries.push({key: key, value: map[key]});
        return entries;
      }
    
      var version = "0.1.2";
    
      exports.version = version;
      exports.nest = nest;
      exports.set = set;
      exports.map = map;
      exports.keys = keys;
      exports.values = values;
      exports.entries = entries;
    
    }));

/***/ },
/* 448 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports, __webpack_require__(449)) :
      typeof define === 'function' && define.amd ? define(['exports', 'd3-color'], factory) :
      (factory((global.d3_interpolate = global.d3_interpolate || {}),global.d3_color));
    }(this, function (exports,d3Color) { 'use strict';
    
      function constant(x) {
        return function() {
          return x;
        };
      }
    
      function linear(a, d) {
        return function(t) {
          return a + t * d;
        };
      }
    
      function exponential(a, b, y) {
        return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
          return Math.pow(a + t * b, y);
        };
      }
    
      function interpolateHue(a, b) {
        var d = b - a;
        return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);
      }
    
      function gamma(y) {
        return (y = +y) === 1 ? nogamma : function(a, b) {
          return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);
        };
      }
    
      function nogamma(a, b) {
        var d = b - a;
        return d ? linear(a, d) : constant(isNaN(a) ? b : a);
      }
    
      var rgb$1 = (function gamma$$(y) {
        var interpolateColor = gamma(y);
    
        function interpolateRgb(start, end) {
          var r = interpolateColor((start = d3Color.rgb(start)).r, (end = d3Color.rgb(end)).r),
              g = interpolateColor(start.g, end.g),
              b = interpolateColor(start.b, end.b),
              opacity = interpolateColor(start.opacity, end.opacity);
          return function(t) {
            start.r = r(t);
            start.g = g(t);
            start.b = b(t);
            start.opacity = opacity(t);
            return start + "";
          };
        }
    
        interpolateRgb.gamma = gamma$$;
    
        return interpolateRgb;
      })(1);
    
      // TODO sparse arrays?
      function array(a, b) {
        var x = [],
            c = [],
            na = a ? a.length : 0,
            nb = b ? b.length : 0,
            n0 = Math.min(na, nb),
            i;
    
        for (i = 0; i < n0; ++i) x.push(value(a[i], b[i]));
        for (; i < na; ++i) c[i] = a[i];
        for (; i < nb; ++i) c[i] = b[i];
    
        return function(t) {
          for (i = 0; i < n0; ++i) c[i] = x[i](t);
          return c;
        };
      }
    
      function number(a, b) {
        return a = +a, b -= a, function(t) {
          return a + b * t;
        };
      }
    
      function object(a, b) {
        var i = {},
            c = {},
            k;
    
        if (a === null || typeof a !== "object") a = {};
        if (b === null || typeof b !== "object") b = {};
    
        for (k in a) {
          if (k in b) {
            i[k] = value(a[k], b[k]);
          } else {
            c[k] = a[k];
          }
        }
    
        for (k in b) {
          if (!(k in a)) {
            c[k] = b[k];
          }
        }
    
        return function(t) {
          for (k in i) c[k] = i[k](t);
          return c;
        };
      }
    
      var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
      var reB = new RegExp(reA.source, "g");
      function zero(b) {
        return function() {
          return b;
        };
      }
    
      function one(b) {
        return function(t) {
          return b(t) + "";
        };
      }
    
      function string(a, b) {
        var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
            am, // current match in a
            bm, // current match in b
            bs, // string preceding current number in b, if any
            i = -1, // index in s
            s = [], // string constants and placeholders
            q = []; // number interpolators
    
        // Coerce inputs to strings.
        a = a + "", b = b + "";
    
        // Interpolate pairs of numbers in a & b.
        while ((am = reA.exec(a))
            && (bm = reB.exec(b))) {
          if ((bs = bm.index) > bi) { // a string precedes the next number in b
            bs = b.slice(bi, bs);
            if (s[i]) s[i] += bs; // coalesce with previous string
            else s[++i] = bs;
          }
          if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
            if (s[i]) s[i] += bm; // coalesce with previous string
            else s[++i] = bm;
          } else { // interpolate non-matching numbers
            s[++i] = null;
            q.push({i: i, x: number(am, bm)});
          }
          bi = reB.lastIndex;
        }
    
        // Add remains of b.
        if (bi < b.length) {
          bs = b.slice(bi);
          if (s[i]) s[i] += bs; // coalesce with previous string
          else s[++i] = bs;
        }
    
        // Special optimization for only a single match.
        // Otherwise, interpolate each of the numbers and rejoin the string.
        return s.length < 2 ? (q[0]
            ? one(q[0].x)
            : zero(b))
            : (b = q.length, function(t) {
                for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
                return s.join("");
              });
      }
    
      function value(a, b) {
        var t = typeof b, c;
        return b == null || t === "boolean" ? constant(b)
            : (t === "number" ? number
            : t === "string" ? ((c = d3Color.color(b)) ? (b = c, rgb$1) : string)
            : b instanceof d3Color.color ? rgb$1
            : Array.isArray(b) ? array
            : object)(a, b);
      }
    
      function round(a, b) {
        return a = +a, b -= a, function(t) {
          return Math.round(a + b * t);
        };
      }
    
      var rad2deg = 180 / Math.PI;
    
      var identity = {
        translateX: 0,
        translateY: 0,
        rotate: 0,
        skewX: 0,
        scaleX: 1,
        scaleY: 1
      };
    
      function decompose(a, b, c, d, e, f) {
        if (a * d === b * c) return null;
    
        var scaleX = Math.sqrt(a * a + b * b);
        a /= scaleX, b /= scaleX;
    
        var skewX = a * c + b * d;
        c -= a * skewX, d -= b * skewX;
    
        var scaleY = Math.sqrt(c * c + d * d);
        c /= scaleY, d /= scaleY, skewX /= scaleY;
    
        if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
    
        return {
          translateX: e,
          translateY: f,
          rotate: Math.atan2(b, a) * rad2deg,
          skewX: Math.atan(skewX) * rad2deg,
          scaleX: scaleX,
          scaleY: scaleY
        };
      }
    
      var cssNode;
      var cssRoot;
      var cssView;
      var svgNode;
      function parseCss(value) {
        if (value === "none") return identity;
        if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
        cssNode.style.transform = value;
        value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
        cssRoot.removeChild(cssNode);
        var m = value.slice(7, -1).split(",");
        return decompose(+m[0], +m[1], +m[2], +m[3], +m[4], +m[5]);
      }
    
      function parseSvg(value) {
        if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
        svgNode.setAttribute("transform", value == null ? "" : value);
        var m = svgNode.transform.baseVal.consolidate().matrix;
        return decompose(m.a, m.b, m.c, m.d, m.e, m.f);
      }
    
      function interpolateTransform(parse, pxComma, pxParen, degParen) {
    
        function pop(s) {
          return s.length ? s.pop() + " " : "";
        }
    
        function translate(xa, ya, xb, yb, s, q) {
          if (xa !== xb || ya !== yb) {
            var i = s.push("translate(", null, pxComma, null, pxParen);
            q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});
          } else if (xb || yb) {
            s.push("translate(" + xb + pxComma + yb + pxParen);
          }
        }
    
        function rotate(a, b, s, q) {
          if (a !== b) {
            if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
            q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: number(a, b)});
          } else if (b) {
            s.push(pop(s) + "rotate(" + b + degParen);
          }
        }
    
        function skewX(a, b, s, q) {
          if (a !== b) {
            q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: number(a, b)});
          } else if (b) {
            s.push(pop(s) + "skewX(" + b + degParen);
          }
        }
    
        function scale(xa, ya, xb, yb, s, q) {
          if (xa !== xb || ya !== yb) {
            var i = s.push(pop(s) + "scale(", null, ",", null, ")");
            q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});
          } else if (xb !== 1 || yb !== 1) {
            s.push(pop(s) + "scale(" + xb + "," + yb + ")");
          }
        }
    
        return function(a, b) {
          var s = [], // string constants and placeholders
              q = []; // number interpolators
          a = parse(a), b = parse(b);
          translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
          rotate(a.rotate, b.rotate, s, q);
          skewX(a.skewX, b.skewX, s, q);
          scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
          a = b = null; // gc
          return function(t) {
            var i = -1, n = q.length, o;
            while (++i < n) s[(o = q[i]).i] = o.x(t);
            return s.join("");
          };
        };
      }
    
      var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
      var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
    
      var rho = Math.SQRT2;
      var rho2 = 2;
      var rho4 = 4;
      var epsilon2 = 1e-12;
      function cosh(x) {
        return ((x = Math.exp(x)) + 1 / x) / 2;
      }
    
      function sinh(x) {
        return ((x = Math.exp(x)) - 1 / x) / 2;
      }
    
      function tanh(x) {
        return ((x = Math.exp(2 * x)) - 1) / (x + 1);
      }
    
      // p0 = [ux0, uy0, w0]
      // p1 = [ux1, uy1, w1]
      function zoom(p0, p1) {
        var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
            ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
            dx = ux1 - ux0,
            dy = uy1 - uy0,
            d2 = dx * dx + dy * dy,
            i,
            S;
    
        // Special case for u0 ≅ u1.
        if (d2 < epsilon2) {
          S = Math.log(w1 / w0) / rho;
          i = function(t) {
            return [
              ux0 + t * dx,
              uy0 + t * dy,
              w0 * Math.exp(rho * t * S)
            ];
          }
        }
    
        // General case.
        else {
          var d1 = Math.sqrt(d2),
              b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
              b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
              r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
              r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
          S = (r1 - r0) / rho;
          i = function(t) {
            var s = t * S,
                coshr0 = cosh(r0),
                u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
            return [
              ux0 + u * dx,
              uy0 + u * dy,
              w0 * coshr0 / cosh(rho * s + r0)
            ];
          }
        }
    
        i.duration = S * 1000;
    
        return i;
      }
    
      function interpolateHsl(start, end) {
        var h = interpolateHue((start = d3Color.hsl(start)).h, (end = d3Color.hsl(end)).h),
            s = nogamma(start.s, end.s),
            l = nogamma(start.l, end.l),
            opacity = nogamma(start.opacity, end.opacity);
        return function(t) {
          start.h = h(t);
          start.s = s(t);
          start.l = l(t);
          start.opacity = opacity(t);
          return start + "";
        };
      }
    
      function interpolateHslLong(start, end) {
        var h = nogamma((start = d3Color.hsl(start)).h, (end = d3Color.hsl(end)).h),
            s = nogamma(start.s, end.s),
            l = nogamma(start.l, end.l),
            opacity = nogamma(start.opacity, end.opacity);
        return function(t) {
          start.h = h(t);
          start.s = s(t);
          start.l = l(t);
          start.opacity = opacity(t);
          return start + "";
        };
      }
    
      function interpolateLab(start, end) {
        var l = nogamma((start = d3Color.lab(start)).l, (end = d3Color.lab(end)).l),
            a = nogamma(start.a, end.a),
            b = nogamma(start.b, end.b),
            opacity = nogamma(start.opacity, end.opacity);
        return function(t) {
          start.l = l(t);
          start.a = a(t);
          start.b = b(t);
          start.opacity = opacity(t);
          return start + "";
        };
      }
    
      function interpolateHcl(start, end) {
        var h = interpolateHue((start = d3Color.hcl(start)).h, (end = d3Color.hcl(end)).h),
            c = nogamma(start.c, end.c),
            l = nogamma(start.l, end.l),
            opacity = nogamma(start.opacity, end.opacity);
        return function(t) {
          start.h = h(t);
          start.c = c(t);
          start.l = l(t);
          start.opacity = opacity(t);
          return start + "";
        };
      }
    
      function interpolateHclLong(start, end) {
        var h = nogamma((start = d3Color.hcl(start)).h, (end = d3Color.hcl(end)).h),
            c = nogamma(start.c, end.c),
            l = nogamma(start.l, end.l),
            opacity = nogamma(start.opacity, end.opacity);
        return function(t) {
          start.h = h(t);
          start.c = c(t);
          start.l = l(t);
          start.opacity = opacity(t);
          return start + "";
        };
      }
    
      var cubehelix$1 = (function gamma(y) {
        y = +y;
    
        function interpolateCubehelix(start, end) {
          var h = interpolateHue((start = d3Color.cubehelix(start)).h, (end = d3Color.cubehelix(end)).h),
              s = nogamma(start.s, end.s),
              l = nogamma(start.l, end.l),
              opacity = nogamma(start.opacity, end.opacity);
          return function(t) {
            start.h = h(t);
            start.s = s(t);
            start.l = l(Math.pow(t, y));
            start.opacity = opacity(t);
            return start + "";
          };
        }
    
        interpolateCubehelix.gamma = gamma;
    
        return interpolateCubehelix;
      })(1);
    
      var cubehelixLong = (function gamma(y) {
        y = +y;
    
        function interpolateCubehelixLong(start, end) {
          var h = nogamma((start = d3Color.cubehelix(start)).h, (end = d3Color.cubehelix(end)).h),
              s = nogamma(start.s, end.s),
              l = nogamma(start.l, end.l),
              opacity = nogamma(start.opacity, end.opacity);
          return function(t) {
            start.h = h(t);
            start.s = s(t);
            start.l = l(Math.pow(t, y));
            start.opacity = opacity(t);
            return start + "";
          };
        }
    
        interpolateCubehelixLong.gamma = gamma;
    
        return interpolateCubehelixLong;
      })(1);
    
      var version = "0.7.0";
    
      exports.version = version;
      exports.interpolate = value;
      exports.interpolateArray = array;
      exports.interpolateNumber = number;
      exports.interpolateObject = object;
      exports.interpolateRound = round;
      exports.interpolateString = string;
      exports.interpolateTransformCss = interpolateTransformCss;
      exports.interpolateTransformSvg = interpolateTransformSvg;
      exports.interpolateZoom = zoom;
      exports.interpolateRgb = rgb$1;
      exports.interpolateHsl = interpolateHsl;
      exports.interpolateHslLong = interpolateHslLong;
      exports.interpolateLab = interpolateLab;
      exports.interpolateHcl = interpolateHcl;
      exports.interpolateHclLong = interpolateHclLong;
      exports.interpolateCubehelix = cubehelix$1;
      exports.interpolateCubehelixLong = cubehelixLong;
    
    }));

/***/ },
/* 449 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], factory) :
      (factory((global.d3_color = global.d3_color || {})));
    }(this, function (exports) { 'use strict';
    
      function define(constructor, factory, prototype) {
        constructor.prototype = factory.prototype = prototype;
        prototype.constructor = constructor;
      }
    
      function extend(parent, definition) {
        var prototype = Object.create(parent.prototype);
        for (var key in definition) prototype[key] = definition[key];
        return prototype;
      }
    
      function Color() {}
    
      var darker = 0.7;
      var brighter = 1 / darker;
    
      var reHex3 = /^#([0-9a-f]{3})$/;
      var reHex6 = /^#([0-9a-f]{6})$/;
      var reRgbInteger = /^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/;
      var reRgbPercent = /^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
      var reRgbaInteger = /^rgba\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
      var reRgbaPercent = /^rgba\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
      var reHslPercent = /^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
      var reHslaPercent = /^hsla\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
      var named = {
        aliceblue: 0xf0f8ff,
        antiquewhite: 0xfaebd7,
        aqua: 0x00ffff,
        aquamarine: 0x7fffd4,
        azure: 0xf0ffff,
        beige: 0xf5f5dc,
        bisque: 0xffe4c4,
        black: 0x000000,
        blanchedalmond: 0xffebcd,
        blue: 0x0000ff,
        blueviolet: 0x8a2be2,
        brown: 0xa52a2a,
        burlywood: 0xdeb887,
        cadetblue: 0x5f9ea0,
        chartreuse: 0x7fff00,
        chocolate: 0xd2691e,
        coral: 0xff7f50,
        cornflowerblue: 0x6495ed,
        cornsilk: 0xfff8dc,
        crimson: 0xdc143c,
        cyan: 0x00ffff,
        darkblue: 0x00008b,
        darkcyan: 0x008b8b,
        darkgoldenrod: 0xb8860b,
        darkgray: 0xa9a9a9,
        darkgreen: 0x006400,
        darkgrey: 0xa9a9a9,
        darkkhaki: 0xbdb76b,
        darkmagenta: 0x8b008b,
        darkolivegreen: 0x556b2f,
        darkorange: 0xff8c00,
        darkorchid: 0x9932cc,
        darkred: 0x8b0000,
        darksalmon: 0xe9967a,
        darkseagreen: 0x8fbc8f,
        darkslateblue: 0x483d8b,
        darkslategray: 0x2f4f4f,
        darkslategrey: 0x2f4f4f,
        darkturquoise: 0x00ced1,
        darkviolet: 0x9400d3,
        deeppink: 0xff1493,
        deepskyblue: 0x00bfff,
        dimgray: 0x696969,
        dimgrey: 0x696969,
        dodgerblue: 0x1e90ff,
        firebrick: 0xb22222,
        floralwhite: 0xfffaf0,
        forestgreen: 0x228b22,
        fuchsia: 0xff00ff,
        gainsboro: 0xdcdcdc,
        ghostwhite: 0xf8f8ff,
        gold: 0xffd700,
        goldenrod: 0xdaa520,
        gray: 0x808080,
        green: 0x008000,
        greenyellow: 0xadff2f,
        grey: 0x808080,
        honeydew: 0xf0fff0,
        hotpink: 0xff69b4,
        indianred: 0xcd5c5c,
        indigo: 0x4b0082,
        ivory: 0xfffff0,
        khaki: 0xf0e68c,
        lavender: 0xe6e6fa,
        lavenderblush: 0xfff0f5,
        lawngreen: 0x7cfc00,
        lemonchiffon: 0xfffacd,
        lightblue: 0xadd8e6,
        lightcoral: 0xf08080,
        lightcyan: 0xe0ffff,
        lightgoldenrodyellow: 0xfafad2,
        lightgray: 0xd3d3d3,
        lightgreen: 0x90ee90,
        lightgrey: 0xd3d3d3,
        lightpink: 0xffb6c1,
        lightsalmon: 0xffa07a,
        lightseagreen: 0x20b2aa,
        lightskyblue: 0x87cefa,
        lightslategray: 0x778899,
        lightslategrey: 0x778899,
        lightsteelblue: 0xb0c4de,
        lightyellow: 0xffffe0,
        lime: 0x00ff00,
        limegreen: 0x32cd32,
        linen: 0xfaf0e6,
        magenta: 0xff00ff,
        maroon: 0x800000,
        mediumaquamarine: 0x66cdaa,
        mediumblue: 0x0000cd,
        mediumorchid: 0xba55d3,
        mediumpurple: 0x9370db,
        mediumseagreen: 0x3cb371,
        mediumslateblue: 0x7b68ee,
        mediumspringgreen: 0x00fa9a,
        mediumturquoise: 0x48d1cc,
        mediumvioletred: 0xc71585,
        midnightblue: 0x191970,
        mintcream: 0xf5fffa,
        mistyrose: 0xffe4e1,
        moccasin: 0xffe4b5,
        navajowhite: 0xffdead,
        navy: 0x000080,
        oldlace: 0xfdf5e6,
        olive: 0x808000,
        olivedrab: 0x6b8e23,
        orange: 0xffa500,
        orangered: 0xff4500,
        orchid: 0xda70d6,
        palegoldenrod: 0xeee8aa,
        palegreen: 0x98fb98,
        paleturquoise: 0xafeeee,
        palevioletred: 0xdb7093,
        papayawhip: 0xffefd5,
        peachpuff: 0xffdab9,
        peru: 0xcd853f,
        pink: 0xffc0cb,
        plum: 0xdda0dd,
        powderblue: 0xb0e0e6,
        purple: 0x800080,
        rebeccapurple: 0x663399,
        red: 0xff0000,
        rosybrown: 0xbc8f8f,
        royalblue: 0x4169e1,
        saddlebrown: 0x8b4513,
        salmon: 0xfa8072,
        sandybrown: 0xf4a460,
        seagreen: 0x2e8b57,
        seashell: 0xfff5ee,
        sienna: 0xa0522d,
        silver: 0xc0c0c0,
        skyblue: 0x87ceeb,
        slateblue: 0x6a5acd,
        slategray: 0x708090,
        slategrey: 0x708090,
        snow: 0xfffafa,
        springgreen: 0x00ff7f,
        steelblue: 0x4682b4,
        tan: 0xd2b48c,
        teal: 0x008080,
        thistle: 0xd8bfd8,
        tomato: 0xff6347,
        turquoise: 0x40e0d0,
        violet: 0xee82ee,
        wheat: 0xf5deb3,
        white: 0xffffff,
        whitesmoke: 0xf5f5f5,
        yellow: 0xffff00,
        yellowgreen: 0x9acd32
      };
    
      define(Color, color, {
        displayable: function() {
          return this.rgb().displayable();
        },
        toString: function() {
          return this.rgb() + "";
        }
      });
    
      function color(format) {
        var m;
        format = (format + "").trim().toLowerCase();
        return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
            : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
            : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
            : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
            : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
            : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
            : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
            : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
            : named.hasOwnProperty(format) ? rgbn(named[format])
            : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
            : null;
      }
    
      function rgbn(n) {
        return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
      }
    
      function rgba(r, g, b, a) {
        if (a <= 0) r = g = b = NaN;
        return new Rgb(r, g, b, a);
      }
    
      function rgbConvert(o) {
        if (!(o instanceof Color)) o = color(o);
        if (!o) return new Rgb;
        o = o.rgb();
        return new Rgb(o.r, o.g, o.b, o.opacity);
      }
    
      function rgb(r, g, b, opacity) {
        return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
      }
    
      function Rgb(r, g, b, opacity) {
        this.r = +r;
        this.g = +g;
        this.b = +b;
        this.opacity = +opacity;
      }
    
      define(Rgb, rgb, extend(Color, {
        brighter: function(k) {
          k = k == null ? brighter : Math.pow(brighter, k);
          return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
        },
        darker: function(k) {
          k = k == null ? darker : Math.pow(darker, k);
          return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
        },
        rgb: function() {
          return this;
        },
        displayable: function() {
          return (0 <= this.r && this.r <= 255)
              && (0 <= this.g && this.g <= 255)
              && (0 <= this.b && this.b <= 255)
              && (0 <= this.opacity && this.opacity <= 1);
        },
        toString: function() {
          var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
          return (a === 1 ? "rgb(" : "rgba(")
              + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
              + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
              + Math.max(0, Math.min(255, Math.round(this.b) || 0))
              + (a === 1 ? ")" : ", " + a + ")");
        }
      }));
    
      function hsla(h, s, l, a) {
        if (a <= 0) h = s = l = NaN;
        else if (l <= 0 || l >= 1) h = s = NaN;
        else if (s <= 0) h = NaN;
        return new Hsl(h, s, l, a);
      }
    
      function hslConvert(o) {
        if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
        if (!(o instanceof Color)) o = color(o);
        if (!o) return new Hsl;
        if (o instanceof Hsl) return o;
        o = o.rgb();
        var r = o.r / 255,
            g = o.g / 255,
            b = o.b / 255,
            min = Math.min(r, g, b),
            max = Math.max(r, g, b),
            h = NaN,
            s = max - min,
            l = (max + min) / 2;
        if (s) {
          if (r === max) h = (g - b) / s + (g < b) * 6;
          else if (g === max) h = (b - r) / s + 2;
          else h = (r - g) / s + 4;
          s /= l < 0.5 ? max + min : 2 - max - min;
          h *= 60;
        } else {
          s = l > 0 && l < 1 ? 0 : h;
        }
        return new Hsl(h, s, l, o.opacity);
      }
    
      function hsl(h, s, l, opacity) {
        return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
      }
    
      function Hsl(h, s, l, opacity) {
        this.h = +h;
        this.s = +s;
        this.l = +l;
        this.opacity = +opacity;
      }
    
      define(Hsl, hsl, extend(Color, {
        brighter: function(k) {
          k = k == null ? brighter : Math.pow(brighter, k);
          return new Hsl(this.h, this.s, this.l * k, this.opacity);
        },
        darker: function(k) {
          k = k == null ? darker : Math.pow(darker, k);
          return new Hsl(this.h, this.s, this.l * k, this.opacity);
        },
        rgb: function() {
          var h = this.h % 360 + (this.h < 0) * 360,
              s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
              l = this.l,
              m2 = l + (l < 0.5 ? l : 1 - l) * s,
              m1 = 2 * l - m2;
          return new Rgb(
            hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
            hsl2rgb(h, m1, m2),
            hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
            this.opacity
          );
        },
        displayable: function() {
          return (0 <= this.s && this.s <= 1 || isNaN(this.s))
              && (0 <= this.l && this.l <= 1)
              && (0 <= this.opacity && this.opacity <= 1);
        }
      }));
    
      /* From FvD 13.37, CSS Color Module Level 3 */
      function hsl2rgb(h, m1, m2) {
        return (h < 60 ? m1 + (m2 - m1) * h / 60
            : h < 180 ? m2
            : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
            : m1) * 255;
      }
    
      var deg2rad = Math.PI / 180;
      var rad2deg = 180 / Math.PI;
    
      var Kn = 18;
      var Xn = 0.950470;
      var Yn = 1;
      var Zn = 1.088830;
      var t0 = 4 / 29;
      var t1 = 6 / 29;
      var t2 = 3 * t1 * t1;
      var t3 = t1 * t1 * t1;
      function labConvert(o) {
        if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
        if (o instanceof Hcl) {
          var h = o.h * deg2rad;
          return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
        }
        if (!(o instanceof Rgb)) o = rgbConvert(o);
        var b = rgb2xyz(o.r),
            a = rgb2xyz(o.g),
            l = rgb2xyz(o.b),
            x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),
            y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),
            z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);
        return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
      }
    
      function lab(l, a, b, opacity) {
        return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
      }
    
      function Lab(l, a, b, opacity) {
        this.l = +l;
        this.a = +a;
        this.b = +b;
        this.opacity = +opacity;
      }
    
      define(Lab, lab, extend(Color, {
        brighter: function(k) {
          return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
        },
        darker: function(k) {
          return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
        },
        rgb: function() {
          var y = (this.l + 16) / 116,
              x = isNaN(this.a) ? y : y + this.a / 500,
              z = isNaN(this.b) ? y : y - this.b / 200;
          y = Yn * lab2xyz(y);
          x = Xn * lab2xyz(x);
          z = Zn * lab2xyz(z);
          return new Rgb(
            xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB
            xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),
            xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),
            this.opacity
          );
        }
      }));
    
      function xyz2lab(t) {
        return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
      }
    
      function lab2xyz(t) {
        return t > t1 ? t * t * t : t2 * (t - t0);
      }
    
      function xyz2rgb(x) {
        return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
      }
    
      function rgb2xyz(x) {
        return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
      }
    
      function hclConvert(o) {
        if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
        if (!(o instanceof Lab)) o = labConvert(o);
        var h = Math.atan2(o.b, o.a) * rad2deg;
        return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
      }
    
      function hcl(h, c, l, opacity) {
        return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
      }
    
      function Hcl(h, c, l, opacity) {
        this.h = +h;
        this.c = +c;
        this.l = +l;
        this.opacity = +opacity;
      }
    
      define(Hcl, hcl, extend(Color, {
        brighter: function(k) {
          return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);
        },
        darker: function(k) {
          return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);
        },
        rgb: function() {
          return labConvert(this).rgb();
        }
      }));
    
      var A = -0.14861;
      var B = +1.78277;
      var C = -0.29227;
      var D = -0.90649;
      var E = +1.97294;
      var ED = E * D;
      var EB = E * B;
      var BC_DA = B * C - D * A;
      function cubehelixConvert(o) {
        if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
        if (!(o instanceof Rgb)) o = rgbConvert(o);
        var r = o.r / 255,
            g = o.g / 255,
            b = o.b / 255,
            l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
            bl = b - l,
            k = (E * (g - l) - C * bl) / D,
            s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
            h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
        return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
      }
    
      function cubehelix(h, s, l, opacity) {
        return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
      }
    
      function Cubehelix(h, s, l, opacity) {
        this.h = +h;
        this.s = +s;
        this.l = +l;
        this.opacity = +opacity;
      }
    
      define(Cubehelix, cubehelix, extend(Color, {
        brighter: function(k) {
          k = k == null ? brighter : Math.pow(brighter, k);
          return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
        },
        darker: function(k) {
          k = k == null ? darker : Math.pow(darker, k);
          return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
        },
        rgb: function() {
          var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
              l = +this.l,
              a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
              cosh = Math.cos(h),
              sinh = Math.sin(h);
          return new Rgb(
            255 * (l + a * (A * cosh + B * sinh)),
            255 * (l + a * (C * cosh + D * sinh)),
            255 * (l + a * (E * cosh)),
            this.opacity
          );
        }
      }));
    
      var version = "0.4.2";
    
      exports.version = version;
      exports.color = color;
      exports.rgb = rgb;
      exports.hsl = hsl;
      exports.lab = lab;
      exports.hcl = hcl;
      exports.cubehelix = cubehelix;
    
    }));

/***/ },
/* 450 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], factory) :
      (factory((global.d3_format = {})));
    }(this, function (exports) { 'use strict';
    
      // Computes the decimal coefficient and exponent of the specified number x with
      // significant digits p, where x is positive and p is in [1, 21] or undefined.
      // For example, formatDecimal(1.23) returns ["123", 0].
      function formatDecimal(x, p) {
        if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
        var i, coefficient = x.slice(0, i);
    
        // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
        // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
        return [
          coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
          +x.slice(i + 1)
        ];
      }
    
      function exponent(x) {
        return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
      }
    
      function formatGroup(grouping, thousands) {
        return function(value, width) {
          var i = value.length,
              t = [],
              j = 0,
              g = grouping[0],
              length = 0;
    
          while (i > 0 && g > 0) {
            if (length + g + 1 > width) g = Math.max(1, width - length);
            t.push(value.substring(i -= g, i + g));
            if ((length += g + 1) > width) break;
            g = grouping[j = (j + 1) % grouping.length];
          }
    
          return t.reverse().join(thousands);
        };
      }
    
      function formatDefault(x, p) {
        x = x.toPrecision(p);
    
        out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {
          switch (x[i]) {
            case ".": i0 = i1 = i; break;
            case "0": if (i0 === 0) i0 = i; i1 = i; break;
            case "e": break out;
            default: if (i0 > 0) i0 = 0; break;
          }
        }
    
        return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;
      }
    
      var prefixExponent;
    
      function formatPrefixAuto(x, p) {
        var d = formatDecimal(x, p);
        if (!d) return x + "";
        var coefficient = d[0],
            exponent = d[1],
            i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
            n = coefficient.length;
        return i === n ? coefficient
            : i > n ? coefficient + new Array(i - n + 1).join("0")
            : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
            : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
      }
    
      function formatRounded(x, p) {
        var d = formatDecimal(x, p);
        if (!d) return x + "";
        var coefficient = d[0],
            exponent = d[1];
        return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
            : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
            : coefficient + new Array(exponent - coefficient.length + 2).join("0");
      }
    
      var formatTypes = {
        "": formatDefault,
        "%": function(x, p) { return (x * 100).toFixed(p); },
        "b": function(x) { return Math.round(x).toString(2); },
        "c": function(x) { return x + ""; },
        "d": function(x) { return Math.round(x).toString(10); },
        "e": function(x, p) { return x.toExponential(p); },
        "f": function(x, p) { return x.toFixed(p); },
        "g": function(x, p) { return x.toPrecision(p); },
        "o": function(x) { return Math.round(x).toString(8); },
        "p": function(x, p) { return formatRounded(x * 100, p); },
        "r": formatRounded,
        "s": formatPrefixAuto,
        "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
        "x": function(x) { return Math.round(x).toString(16); }
      };
    
      // [[fill]align][sign][symbol][0][width][,][.precision][type]
      var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
    
      function formatSpecifier(specifier) {
        return new FormatSpecifier(specifier);
      }
    
      function FormatSpecifier(specifier) {
        if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
    
        var match,
            fill = match[1] || " ",
            align = match[2] || ">",
            sign = match[3] || "-",
            symbol = match[4] || "",
            zero = !!match[5],
            width = match[6] && +match[6],
            comma = !!match[7],
            precision = match[8] && +match[8].slice(1),
            type = match[9] || "";
    
        // The "n" type is an alias for ",g".
        if (type === "n") comma = true, type = "g";
    
        // Map invalid types to the default format.
        else if (!formatTypes[type]) type = "";
    
        // If zero fill is specified, padding goes after sign and before digits.
        if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
    
        this.fill = fill;
        this.align = align;
        this.sign = sign;
        this.symbol = symbol;
        this.zero = zero;
        this.width = width;
        this.comma = comma;
        this.precision = precision;
        this.type = type;
      }
    
      FormatSpecifier.prototype.toString = function() {
        return this.fill
            + this.align
            + this.sign
            + this.symbol
            + (this.zero ? "0" : "")
            + (this.width == null ? "" : Math.max(1, this.width | 0))
            + (this.comma ? "," : "")
            + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
            + this.type;
      };
    
      var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
    
      function identity(x) {
        return x;
      }
    
      function locale(locale) {
        var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,
            currency = locale.currency,
            decimal = locale.decimal;
    
        function newFormat(specifier) {
          specifier = formatSpecifier(specifier);
    
          var fill = specifier.fill,
              align = specifier.align,
              sign = specifier.sign,
              symbol = specifier.symbol,
              zero = specifier.zero,
              width = specifier.width,
              comma = specifier.comma,
              precision = specifier.precision,
              type = specifier.type;
    
          // Compute the prefix and suffix.
          // For SI-prefix, the suffix is lazily computed.
          var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
              suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : "";
    
          // What format function should we use?
          // Is this an integer type?
          // Can this type generate exponential notation?
          var formatType = formatTypes[type],
              maybeSuffix = !type || /[defgprs%]/.test(type);
    
          // Set the default precision if not specified,
          // or clamp the specified precision to the supported range.
          // For significant precision, it must be in [1, 21].
          // For fixed precision, it must be in [0, 20].
          precision = precision == null ? (type ? 6 : 12)
              : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
              : Math.max(0, Math.min(20, precision));
    
          function format(value) {
            var valuePrefix = prefix,
                valueSuffix = suffix,
                i, n, c;
    
            if (type === "c") {
              valueSuffix = formatType(value) + valueSuffix;
              value = "";
            } else {
              value = +value;
    
              // Convert negative to positive, and compute the prefix.
              // Note that -0 is not less than 0, but 1 / -0 is!
              var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);
    
              // Perform the initial formatting.
              value = formatType(value, precision);
    
              // If the original value was negative, it may be rounded to zero during
              // formatting; treat this as (positive) zero.
              if (valueNegative) {
                i = -1, n = value.length;
                valueNegative = false;
                while (++i < n) {
                  if (c = value.charCodeAt(i), (48 < c && c < 58)
                      || (type === "x" && 96 < c && c < 103)
                      || (type === "X" && 64 < c && c < 71)) {
                    valueNegative = true;
                    break;
                  }
                }
              }
    
              // Compute the prefix and suffix.
              valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
              valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : "");
    
              // Break the formatted value into the integer “value” part that can be
              // grouped, and fractional or exponential “suffix” part that is not.
              if (maybeSuffix) {
                i = -1, n = value.length;
                while (++i < n) {
                  if (c = value.charCodeAt(i), 48 > c || c > 57) {
                    valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
                    value = value.slice(0, i);
                    break;
                  }
                }
              }
            }
    
            // If the fill character is not "0", grouping is applied before padding.
            if (comma && !zero) value = group(value, Infinity);
    
            // Compute the padding.
            var length = valuePrefix.length + value.length + valueSuffix.length,
                padding = length < width ? new Array(width - length + 1).join(fill) : "";
    
            // If the fill character is "0", grouping is applied after padding.
            if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
    
            // Reconstruct the final output based on the desired alignment.
            switch (align) {
              case "<": return valuePrefix + value + valueSuffix + padding;
              case "=": return valuePrefix + padding + value + valueSuffix;
              case "^": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);
            }
            return padding + valuePrefix + value + valueSuffix;
          }
    
          format.toString = function() {
            return specifier + "";
          };
    
          return format;
        }
    
        function formatPrefix(specifier, value) {
          var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
              e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,
              k = Math.pow(10, -e),
              prefix = prefixes[8 + e / 3];
          return function(value) {
            return f(k * value) + prefix;
          };
        }
    
        return {
          format: newFormat,
          formatPrefix: formatPrefix
        };
      }
    
      var defaultLocale = locale({
        decimal: ".",
        thousands: ",",
        grouping: [3],
        currency: ["$", ""]
      });
    
      var caES = locale({
        decimal: ",",
        thousands: ".",
        grouping: [3],
        currency: ["", "\xa0€"]
      });
    
      var csCZ = locale({
        decimal: ",",
        thousands: "\xa0",
        grouping: [3],
        currency: ["", "\xa0Kč"]
      });
    
      var deCH = locale({
        decimal: ",",
        thousands: "'",
        grouping: [3],
        currency: ["", "\xa0CHF"]
      });
    
      var deDE = locale({
        decimal: ",",
        thousands: ".",
        grouping: [3],
        currency: ["", "\xa0€"]
      });
    
      var enCA = locale({
        decimal: ".",
        thousands: ",",
        grouping: [3],
        currency: ["$", ""]
      });
    
      var enGB = locale({
        decimal: ".",
        thousands: ",",
        grouping: [3],
        currency: ["£", ""]
      });
    
      var esES = locale({
        decimal: ",",
        thousands: ".",
        grouping: [3],
        currency: ["", "\xa0€"]
      });
    
      var fiFI = locale({
        decimal: ",",
        thousands: "\xa0",
        grouping: [3],
        currency: ["", "\xa0€"]
      });
    
      var frCA = locale({
        decimal: ",",
        thousands: "\xa0",
        grouping: [3],
        currency: ["", "$"]
      });
    
      var frFR = locale({
        decimal: ",",
        thousands: ".",
        grouping: [3],
        currency: ["", "\xa0€"]
      });
    
      var heIL = locale({
        decimal: ".",
        thousands: ",",
        grouping: [3],
        currency: ["₪", ""]
      });
    
      var huHU = locale({
        decimal: ",",
        thousands: "\xa0",
        grouping: [3],
        currency: ["", "\xa0Ft"]
      });
    
      var itIT = locale({
        decimal: ",",
        thousands: ".",
        grouping: [3],
        currency: ["€", ""]
      });
    
      var jaJP = locale({
        decimal: ".",
        thousands: ",",
        grouping: [3],
        currency: ["", "円"]
      });
    
      var koKR = locale({
        decimal: ".",
        thousands: ",",
        grouping: [3],
        currency: ["₩", ""]
      });
    
      var mkMK = locale({
        decimal: ",",
        thousands: ".",
        grouping: [3],
        currency: ["", "\xa0ден."]
      });
    
      var nlNL = locale({
        decimal: ",",
        thousands: ".",
        grouping: [3],
        currency: ["€\xa0", ""]
      });
    
      var plPL = locale({
        decimal: ",",
        thousands: ".",
        grouping: [3],
        currency: ["", "zł"]
      });
    
      var ptBR = locale({
        decimal: ",",
        thousands: ".",
        grouping: [3],
        currency: ["R$", ""]
      });
    
      var ruRU = locale({
        decimal: ",",
        thousands: "\xa0",
        grouping: [3],
        currency: ["", "\xa0руб."]
      });
    
      var svSE = locale({
        decimal: ",",
        thousands: "\xa0",
        grouping: [3],
        currency: ["", "SEK"]
      });
    
      var zhCN = locale({
        decimal: ".",
        thousands: ",",
        grouping: [3],
        currency: ["¥", ""]
      });
    
      function precisionFixed(step) {
        return Math.max(0, -exponent(Math.abs(step)));
      }
    
      function precisionPrefix(step, value) {
        return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));
      }
    
      function precisionRound(step, max) {
        step = Math.abs(step), max = Math.abs(max) - step;
        return Math.max(0, exponent(max) - exponent(step)) + 1;
      }
    
      var format = defaultLocale.format;
      var formatPrefix = defaultLocale.formatPrefix;
    
      var version = "0.5.1";
    
      exports.version = version;
      exports.format = format;
      exports.formatPrefix = formatPrefix;
      exports.formatLocale = locale;
      exports.formatCaEs = caES;
      exports.formatCsCz = csCZ;
      exports.formatDeCh = deCH;
      exports.formatDeDe = deDE;
      exports.formatEnCa = enCA;
      exports.formatEnGb = enGB;
      exports.formatEnUs = defaultLocale;
      exports.formatEsEs = esES;
      exports.formatFiFi = fiFI;
      exports.formatFrCa = frCA;
      exports.formatFrFr = frFR;
      exports.formatHeIl = heIL;
      exports.formatHuHu = huHU;
      exports.formatItIt = itIT;
      exports.formatJaJp = jaJP;
      exports.formatKoKr = koKR;
      exports.formatMkMk = mkMK;
      exports.formatNlNl = nlNL;
      exports.formatPlPl = plPL;
      exports.formatPtBr = ptBR;
      exports.formatRuRu = ruRU;
      exports.formatSvSe = svSE;
      exports.formatZhCn = zhCN;
      exports.formatSpecifier = formatSpecifier;
      exports.precisionFixed = precisionFixed;
      exports.precisionPrefix = precisionPrefix;
      exports.precisionRound = precisionRound;
    
    }));

/***/ },
/* 451 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], factory) :
      (factory((global.d3_time = global.d3_time || {})));
    }(this, function (exports) { 'use strict';
    
      var version = "0.2.6";
    
      var t0 = new Date;
      var t1 = new Date;
      function newInterval(floori, offseti, count, field) {
    
        function interval(date) {
          return floori(date = new Date(+date)), date;
        }
    
        interval.floor = interval;
    
        interval.ceil = function(date) {
          return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
        };
    
        interval.round = function(date) {
          var d0 = interval(date),
              d1 = interval.ceil(date);
          return date - d0 < d1 - date ? d0 : d1;
        };
    
        interval.offset = function(date, step) {
          return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
        };
    
        interval.range = function(start, stop, step) {
          var range = [];
          start = interval.ceil(start);
          step = step == null ? 1 : Math.floor(step);
          if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
          do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)
          return range;
        };
    
        interval.filter = function(test) {
          return newInterval(function(date) {
            while (floori(date), !test(date)) date.setTime(date - 1);
          }, function(date, step) {
            while (--step >= 0) while (offseti(date, 1), !test(date));
          });
        };
    
        if (count) {
          interval.count = function(start, end) {
            t0.setTime(+start), t1.setTime(+end);
            floori(t0), floori(t1);
            return Math.floor(count(t0, t1));
          };
    
          interval.every = function(step) {
            step = Math.floor(step);
            return !isFinite(step) || !(step > 0) ? null
                : !(step > 1) ? interval
                : interval.filter(field
                    ? function(d) { return field(d) % step === 0; }
                    : function(d) { return interval.count(0, d) % step === 0; });
          };
        }
    
        return interval;
      }
    
      var millisecond = newInterval(function() {
        // noop
      }, function(date, step) {
        date.setTime(+date + step);
      }, function(start, end) {
        return end - start;
      });
    
      // An optimized implementation for this simple case.
      millisecond.every = function(k) {
        k = Math.floor(k);
        if (!isFinite(k) || !(k > 0)) return null;
        if (!(k > 1)) return millisecond;
        return newInterval(function(date) {
          date.setTime(Math.floor(date / k) * k);
        }, function(date, step) {
          date.setTime(+date + step * k);
        }, function(start, end) {
          return (end - start) / k;
        });
      };
    
      var second$1 = 1e3;
      var minute = 6e4;
      var hour = 36e5;
      var day = 864e5;
      var week = 6048e5;
    
      var second = newInterval(function(date) {
        date.setTime(Math.floor(date / second$1) * second$1);
      }, function(date, step) {
        date.setTime(+date + step * second$1);
      }, function(start, end) {
        return (end - start) / second$1;
      }, function(date) {
        return date.getUTCSeconds();
      });
    
      var minute$1 = newInterval(function(date) {
        date.setTime(Math.floor(date / minute) * minute);
      }, function(date, step) {
        date.setTime(+date + step * minute);
      }, function(start, end) {
        return (end - start) / minute;
      }, function(date) {
        return date.getMinutes();
      });
    
      var hour$1 = newInterval(function(date) {
        var offset = date.getTimezoneOffset() * minute % hour;
        if (offset < 0) offset += hour;
        date.setTime(Math.floor((+date - offset) / hour) * hour + offset);
      }, function(date, step) {
        date.setTime(+date + step * hour);
      }, function(start, end) {
        return (end - start) / hour;
      }, function(date) {
        return date.getHours();
      });
    
      var day$1 = newInterval(function(date) {
        date.setHours(0, 0, 0, 0);
      }, function(date, step) {
        date.setDate(date.getDate() + step);
      }, function(start, end) {
        return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * minute) / day;
      }, function(date) {
        return date.getDate() - 1;
      });
    
      function weekday(i) {
        return newInterval(function(date) {
          date.setHours(0, 0, 0, 0);
          date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
        }, function(date, step) {
          date.setDate(date.getDate() + step * 7);
        }, function(start, end) {
          return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * minute) / week;
        });
      }
    
      var sunday = weekday(0);
      var monday = weekday(1);
      var tuesday = weekday(2);
      var wednesday = weekday(3);
      var thursday = weekday(4);
      var friday = weekday(5);
      var saturday = weekday(6);
    
      var month = newInterval(function(date) {
        date.setHours(0, 0, 0, 0);
        date.setDate(1);
      }, function(date, step) {
        date.setMonth(date.getMonth() + step);
      }, function(start, end) {
        return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
      }, function(date) {
        return date.getMonth();
      });
    
      var year = newInterval(function(date) {
        date.setHours(0, 0, 0, 0);
        date.setMonth(0, 1);
      }, function(date, step) {
        date.setFullYear(date.getFullYear() + step);
      }, function(start, end) {
        return end.getFullYear() - start.getFullYear();
      }, function(date) {
        return date.getFullYear();
      });
    
      var utcMinute = newInterval(function(date) {
        date.setUTCSeconds(0, 0);
      }, function(date, step) {
        date.setTime(+date + step * minute);
      }, function(start, end) {
        return (end - start) / minute;
      }, function(date) {
        return date.getUTCMinutes();
      });
    
      var utcHour = newInterval(function(date) {
        date.setUTCMinutes(0, 0, 0);
      }, function(date, step) {
        date.setTime(+date + step * hour);
      }, function(start, end) {
        return (end - start) / hour;
      }, function(date) {
        return date.getUTCHours();
      });
    
      var utcDay = newInterval(function(date) {
        date.setUTCHours(0, 0, 0, 0);
      }, function(date, step) {
        date.setUTCDate(date.getUTCDate() + step);
      }, function(start, end) {
        return (end - start) / day;
      }, function(date) {
        return date.getUTCDate() - 1;
      });
    
      function utcWeekday(i) {
        return newInterval(function(date) {
          date.setUTCHours(0, 0, 0, 0);
          date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
        }, function(date, step) {
          date.setUTCDate(date.getUTCDate() + step * 7);
        }, function(start, end) {
          return (end - start) / week;
        });
      }
    
      var utcSunday = utcWeekday(0);
      var utcMonday = utcWeekday(1);
      var utcTuesday = utcWeekday(2);
      var utcWednesday = utcWeekday(3);
      var utcThursday = utcWeekday(4);
      var utcFriday = utcWeekday(5);
      var utcSaturday = utcWeekday(6);
    
      var utcMonth = newInterval(function(date) {
        date.setUTCHours(0, 0, 0, 0);
        date.setUTCDate(1);
      }, function(date, step) {
        date.setUTCMonth(date.getUTCMonth() + step);
      }, function(start, end) {
        return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
      }, function(date) {
        return date.getUTCMonth();
      });
    
      var utcYear = newInterval(function(date) {
        date.setUTCHours(0, 0, 0, 0);
        date.setUTCMonth(0, 1);
      }, function(date, step) {
        date.setUTCFullYear(date.getUTCFullYear() + step);
      }, function(start, end) {
        return end.getUTCFullYear() - start.getUTCFullYear();
      }, function(date) {
        return date.getUTCFullYear();
      });
    
      var timeMilliseconds = millisecond.range;
      var timeSeconds = second.range;
      var timeMinutes = minute$1.range;
      var timeHours = hour$1.range;
      var timeDays = day$1.range;
      var timeSundays = sunday.range;
      var timeMondays = monday.range;
      var timeTuesdays = tuesday.range;
      var timeWednesdays = wednesday.range;
      var timeThursdays = thursday.range;
      var timeFridays = friday.range;
      var timeSaturdays = saturday.range;
      var timeWeeks = sunday.range;
      var timeMonths = month.range;
      var timeYears = year.range;
    
      var utcMilliseconds = timeMilliseconds;
      var utcSeconds = timeSeconds;
      var utcMinutes = utcMinute.range;
      var utcHours = utcHour.range;
      var utcDays = utcDay.range;
      var utcSundays = utcSunday.range;
      var utcMondays = utcMonday.range;
      var utcTuesdays = utcTuesday.range;
      var utcWednesdays = utcWednesday.range;
      var utcThursdays = utcThursday.range;
      var utcFridays = utcFriday.range;
      var utcSaturdays = utcSaturday.range;
      var utcWeeks = utcSunday.range;
      var utcMonths = utcMonth.range;
      var utcYears = utcYear.range;
    
      exports.timeMilliseconds = timeMilliseconds;
      exports.timeSeconds = timeSeconds;
      exports.timeMinutes = timeMinutes;
      exports.timeHours = timeHours;
      exports.timeDays = timeDays;
      exports.timeSundays = timeSundays;
      exports.timeMondays = timeMondays;
      exports.timeTuesdays = timeTuesdays;
      exports.timeWednesdays = timeWednesdays;
      exports.timeThursdays = timeThursdays;
      exports.timeFridays = timeFridays;
      exports.timeSaturdays = timeSaturdays;
      exports.timeWeeks = timeWeeks;
      exports.timeMonths = timeMonths;
      exports.timeYears = timeYears;
      exports.utcMilliseconds = utcMilliseconds;
      exports.utcSeconds = utcSeconds;
      exports.utcMinutes = utcMinutes;
      exports.utcHours = utcHours;
      exports.utcDays = utcDays;
      exports.utcSundays = utcSundays;
      exports.utcMondays = utcMondays;
      exports.utcTuesdays = utcTuesdays;
      exports.utcWednesdays = utcWednesdays;
      exports.utcThursdays = utcThursdays;
      exports.utcFridays = utcFridays;
      exports.utcSaturdays = utcSaturdays;
      exports.utcWeeks = utcWeeks;
      exports.utcMonths = utcMonths;
      exports.utcYears = utcYears;
      exports.timeMillisecond = millisecond;
      exports.timeSecond = second;
      exports.timeMinute = minute$1;
      exports.timeHour = hour$1;
      exports.timeDay = day$1;
      exports.timeSunday = sunday;
      exports.timeMonday = monday;
      exports.timeTuesday = tuesday;
      exports.timeWednesday = wednesday;
      exports.timeThursday = thursday;
      exports.timeFriday = friday;
      exports.timeSaturday = saturday;
      exports.timeWeek = sunday;
      exports.timeMonth = month;
      exports.timeYear = year;
      exports.utcMillisecond = millisecond;
      exports.utcSecond = second;
      exports.utcMinute = utcMinute;
      exports.utcHour = utcHour;
      exports.utcDay = utcDay;
      exports.utcSunday = utcSunday;
      exports.utcMonday = utcMonday;
      exports.utcTuesday = utcTuesday;
      exports.utcWednesday = utcWednesday;
      exports.utcThursday = utcThursday;
      exports.utcFriday = utcFriday;
      exports.utcSaturday = utcSaturday;
      exports.utcWeek = utcSunday;
      exports.utcMonth = utcMonth;
      exports.utcYear = utcYear;
      exports.version = version;
      exports.timeInterval = newInterval;
    
      Object.defineProperty(exports, '__esModule', { value: true });
    
    }));

/***/ },
/* 452 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports, __webpack_require__(451)) :
      typeof define === 'function' && define.amd ? define(['exports', 'd3-time'], factory) :
      (factory((global.d3_time_format = global.d3_time_format || {}),global.d3_time));
    }(this, function (exports,d3Time) { 'use strict';
    
      var version = "0.3.2";
    
      function localDate(d) {
        if (0 <= d.y && d.y < 100) {
          var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
          date.setFullYear(d.y);
          return date;
        }
        return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
      }
    
      function utcDate(d) {
        if (0 <= d.y && d.y < 100) {
          var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
          date.setUTCFullYear(d.y);
          return date;
        }
        return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
      }
    
      function newYear(y) {
        return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
      }
    
      function locale$1(locale) {
        var locale_dateTime = locale.dateTime,
            locale_date = locale.date,
            locale_time = locale.time,
            locale_periods = locale.periods,
            locale_weekdays = locale.days,
            locale_shortWeekdays = locale.shortDays,
            locale_months = locale.months,
            locale_shortMonths = locale.shortMonths;
    
        var periodRe = formatRe(locale_periods),
            periodLookup = formatLookup(locale_periods),
            weekdayRe = formatRe(locale_weekdays),
            weekdayLookup = formatLookup(locale_weekdays),
            shortWeekdayRe = formatRe(locale_shortWeekdays),
            shortWeekdayLookup = formatLookup(locale_shortWeekdays),
            monthRe = formatRe(locale_months),
            monthLookup = formatLookup(locale_months),
            shortMonthRe = formatRe(locale_shortMonths),
            shortMonthLookup = formatLookup(locale_shortMonths);
    
        var formats = {
          "a": formatShortWeekday,
          "A": formatWeekday,
          "b": formatShortMonth,
          "B": formatMonth,
          "c": null,
          "d": formatDayOfMonth,
          "e": formatDayOfMonth,
          "H": formatHour24,
          "I": formatHour12,
          "j": formatDayOfYear,
          "L": formatMilliseconds,
          "m": formatMonthNumber,
          "M": formatMinutes,
          "p": formatPeriod,
          "S": formatSeconds,
          "U": formatWeekNumberSunday,
          "w": formatWeekdayNumber,
          "W": formatWeekNumberMonday,
          "x": null,
          "X": null,
          "y": formatYear,
          "Y": formatFullYear,
          "Z": formatZone,
          "%": formatLiteralPercent
        };
    
        var utcFormats = {
          "a": formatUTCShortWeekday,
          "A": formatUTCWeekday,
          "b": formatUTCShortMonth,
          "B": formatUTCMonth,
          "c": null,
          "d": formatUTCDayOfMonth,
          "e": formatUTCDayOfMonth,
          "H": formatUTCHour24,
          "I": formatUTCHour12,
          "j": formatUTCDayOfYear,
          "L": formatUTCMilliseconds,
          "m": formatUTCMonthNumber,
          "M": formatUTCMinutes,
          "p": formatUTCPeriod,
          "S": formatUTCSeconds,
          "U": formatUTCWeekNumberSunday,
          "w": formatUTCWeekdayNumber,
          "W": formatUTCWeekNumberMonday,
          "x": null,
          "X": null,
          "y": formatUTCYear,
          "Y": formatUTCFullYear,
          "Z": formatUTCZone,
          "%": formatLiteralPercent
        };
    
        var parses = {
          "a": parseShortWeekday,
          "A": parseWeekday,
          "b": parseShortMonth,
          "B": parseMonth,
          "c": parseLocaleDateTime,
          "d": parseDayOfMonth,
          "e": parseDayOfMonth,
          "H": parseHour24,
          "I": parseHour24,
          "j": parseDayOfYear,
          "L": parseMilliseconds,
          "m": parseMonthNumber,
          "M": parseMinutes,
          "p": parsePeriod,
          "S": parseSeconds,
          "U": parseWeekNumberSunday,
          "w": parseWeekdayNumber,
          "W": parseWeekNumberMonday,
          "x": parseLocaleDate,
          "X": parseLocaleTime,
          "y": parseYear,
          "Y": parseFullYear,
          "Z": parseZone,
          "%": parseLiteralPercent
        };
    
        // These recursive directive definitions must be deferred.
        formats.x = newFormat(locale_date, formats);
        formats.X = newFormat(locale_time, formats);
        formats.c = newFormat(locale_dateTime, formats);
        utcFormats.x = newFormat(locale_date, utcFormats);
        utcFormats.X = newFormat(locale_time, utcFormats);
        utcFormats.c = newFormat(locale_dateTime, utcFormats);
    
        function newFormat(specifier, formats) {
          return function(date) {
            var string = [],
                i = -1,
                j = 0,
                n = specifier.length,
                c,
                pad,
                format;
    
            if (!(date instanceof Date)) date = new Date(+date);
    
            while (++i < n) {
              if (specifier.charCodeAt(i) === 37) {
                string.push(specifier.slice(j, i));
                if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
                else pad = c === "e" ? " " : "0";
                if (format = formats[c]) c = format(date, pad);
                string.push(c);
                j = i + 1;
              }
            }
    
            string.push(specifier.slice(j, i));
            return string.join("");
          };
        }
    
        function newParse(specifier, newDate) {
          return function(string) {
            var d = newYear(1900),
                i = parseSpecifier(d, specifier, string += "", 0);
            if (i != string.length) return null;
    
            // The am-pm flag is 0 for AM, and 1 for PM.
            if ("p" in d) d.H = d.H % 12 + d.p * 12;
    
            // Convert day-of-week and week-of-year to day-of-year.
            if ("W" in d || "U" in d) {
              if (!("w" in d)) d.w = "W" in d ? 1 : 0;
              var day = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
              d.m = 0;
              d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;
            }
    
            // If a time zone is specified, all fields are interpreted as UTC and then
            // offset according to the specified time zone.
            if ("Z" in d) {
              d.H += d.Z / 100 | 0;
              d.M += d.Z % 100;
              return utcDate(d);
            }
    
            // Otherwise, all fields are in local time.
            return newDate(d);
          };
        }
    
        function parseSpecifier(d, specifier, string, j) {
          var i = 0,
              n = specifier.length,
              m = string.length,
              c,
              parse;
    
          while (i < n) {
            if (j >= m) return -1;
            c = specifier.charCodeAt(i++);
            if (c === 37) {
              c = specifier.charAt(i++);
              parse = parses[c in pads ? specifier.charAt(i++) : c];
              if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
            } else if (c != string.charCodeAt(j++)) {
              return -1;
            }
          }
    
          return j;
        }
    
        function parsePeriod(d, string, i) {
          var n = periodRe.exec(string.slice(i));
          return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
        }
    
        function parseShortWeekday(d, string, i) {
          var n = shortWeekdayRe.exec(string.slice(i));
          return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
        }
    
        function parseWeekday(d, string, i) {
          var n = weekdayRe.exec(string.slice(i));
          return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
        }
    
        function parseShortMonth(d, string, i) {
          var n = shortMonthRe.exec(string.slice(i));
          return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
        }
    
        function parseMonth(d, string, i) {
          var n = monthRe.exec(string.slice(i));
          return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
        }
    
        function parseLocaleDateTime(d, string, i) {
          return parseSpecifier(d, locale_dateTime, string, i);
        }
    
        function parseLocaleDate(d, string, i) {
          return parseSpecifier(d, locale_date, string, i);
        }
    
        function parseLocaleTime(d, string, i) {
          return parseSpecifier(d, locale_time, string, i);
        }
    
        function formatShortWeekday(d) {
          return locale_shortWeekdays[d.getDay()];
        }
    
        function formatWeekday(d) {
          return locale_weekdays[d.getDay()];
        }
    
        function formatShortMonth(d) {
          return locale_shortMonths[d.getMonth()];
        }
    
        function formatMonth(d) {
          return locale_months[d.getMonth()];
        }
    
        function formatPeriod(d) {
          return locale_periods[+(d.getHours() >= 12)];
        }
    
        function formatUTCShortWeekday(d) {
          return locale_shortWeekdays[d.getUTCDay()];
        }
    
        function formatUTCWeekday(d) {
          return locale_weekdays[d.getUTCDay()];
        }
    
        function formatUTCShortMonth(d) {
          return locale_shortMonths[d.getUTCMonth()];
        }
    
        function formatUTCMonth(d) {
          return locale_months[d.getUTCMonth()];
        }
    
        function formatUTCPeriod(d) {
          return locale_periods[+(d.getUTCHours() >= 12)];
        }
    
        return {
          format: function(specifier) {
            var f = newFormat(specifier += "", formats);
            f.toString = function() { return specifier; };
            return f;
          },
          parse: function(specifier) {
            var p = newParse(specifier += "", localDate);
            p.toString = function() { return specifier; };
            return p;
          },
          utcFormat: function(specifier) {
            var f = newFormat(specifier += "", utcFormats);
            f.toString = function() { return specifier; };
            return f;
          },
          utcParse: function(specifier) {
            var p = newParse(specifier, utcDate);
            p.toString = function() { return specifier; };
            return p;
          }
        };
      }
    
      var pads = {"-": "", "_": " ", "0": "0"};
      var numberRe = /^\s*\d+/;
      var percentRe = /^%/;
      var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
      function pad(value, fill, width) {
        var sign = value < 0 ? "-" : "",
            string = (sign ? -value : value) + "",
            length = string.length;
        return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
      }
    
      function requote(s) {
        return s.replace(requoteRe, "\\$&");
      }
    
      function formatRe(names) {
        return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
      }
    
      function formatLookup(names) {
        var map = {}, i = -1, n = names.length;
        while (++i < n) map[names[i].toLowerCase()] = i;
        return map;
      }
    
      function parseWeekdayNumber(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 1));
        return n ? (d.w = +n[0], i + n[0].length) : -1;
      }
    
      function parseWeekNumberSunday(d, string, i) {
        var n = numberRe.exec(string.slice(i));
        return n ? (d.U = +n[0], i + n[0].length) : -1;
      }
    
      function parseWeekNumberMonday(d, string, i) {
        var n = numberRe.exec(string.slice(i));
        return n ? (d.W = +n[0], i + n[0].length) : -1;
      }
    
      function parseFullYear(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 4));
        return n ? (d.y = +n[0], i + n[0].length) : -1;
      }
    
      function parseYear(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 2));
        return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
      }
    
      function parseZone(d, string, i) {
        var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6));
        return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
      }
    
      function parseMonthNumber(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 2));
        return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
      }
    
      function parseDayOfMonth(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 2));
        return n ? (d.d = +n[0], i + n[0].length) : -1;
      }
    
      function parseDayOfYear(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 3));
        return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
      }
    
      function parseHour24(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 2));
        return n ? (d.H = +n[0], i + n[0].length) : -1;
      }
    
      function parseMinutes(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 2));
        return n ? (d.M = +n[0], i + n[0].length) : -1;
      }
    
      function parseSeconds(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 2));
        return n ? (d.S = +n[0], i + n[0].length) : -1;
      }
    
      function parseMilliseconds(d, string, i) {
        var n = numberRe.exec(string.slice(i, i + 3));
        return n ? (d.L = +n[0], i + n[0].length) : -1;
      }
    
      function parseLiteralPercent(d, string, i) {
        var n = percentRe.exec(string.slice(i, i + 1));
        return n ? i + n[0].length : -1;
      }
    
      function formatDayOfMonth(d, p) {
        return pad(d.getDate(), p, 2);
      }
    
      function formatHour24(d, p) {
        return pad(d.getHours(), p, 2);
      }
    
      function formatHour12(d, p) {
        return pad(d.getHours() % 12 || 12, p, 2);
      }
    
      function formatDayOfYear(d, p) {
        return pad(1 + d3Time.timeDay.count(d3Time.timeYear(d), d), p, 3);
      }
    
      function formatMilliseconds(d, p) {
        return pad(d.getMilliseconds(), p, 3);
      }
    
      function formatMonthNumber(d, p) {
        return pad(d.getMonth() + 1, p, 2);
      }
    
      function formatMinutes(d, p) {
        return pad(d.getMinutes(), p, 2);
      }
    
      function formatSeconds(d, p) {
        return pad(d.getSeconds(), p, 2);
      }
    
      function formatWeekNumberSunday(d, p) {
        return pad(d3Time.timeSunday.count(d3Time.timeYear(d), d), p, 2);
      }
    
      function formatWeekdayNumber(d) {
        return d.getDay();
      }
    
      function formatWeekNumberMonday(d, p) {
        return pad(d3Time.timeMonday.count(d3Time.timeYear(d), d), p, 2);
      }
    
      function formatYear(d, p) {
        return pad(d.getFullYear() % 100, p, 2);
      }
    
      function formatFullYear(d, p) {
        return pad(d.getFullYear() % 10000, p, 4);
      }
    
      function formatZone(d) {
        var z = d.getTimezoneOffset();
        return (z > 0 ? "-" : (z *= -1, "+"))
            + pad(z / 60 | 0, "0", 2)
            + pad(z % 60, "0", 2);
      }
    
      function formatUTCDayOfMonth(d, p) {
        return pad(d.getUTCDate(), p, 2);
      }
    
      function formatUTCHour24(d, p) {
        return pad(d.getUTCHours(), p, 2);
      }
    
      function formatUTCHour12(d, p) {
        return pad(d.getUTCHours() % 12 || 12, p, 2);
      }
    
      function formatUTCDayOfYear(d, p) {
        return pad(1 + d3Time.utcDay.count(d3Time.utcYear(d), d), p, 3);
      }
    
      function formatUTCMilliseconds(d, p) {
        return pad(d.getUTCMilliseconds(), p, 3);
      }
    
      function formatUTCMonthNumber(d, p) {
        return pad(d.getUTCMonth() + 1, p, 2);
      }
    
      function formatUTCMinutes(d, p) {
        return pad(d.getUTCMinutes(), p, 2);
      }
    
      function formatUTCSeconds(d, p) {
        return pad(d.getUTCSeconds(), p, 2);
      }
    
      function formatUTCWeekNumberSunday(d, p) {
        return pad(d3Time.utcSunday.count(d3Time.utcYear(d), d), p, 2);
      }
    
      function formatUTCWeekdayNumber(d) {
        return d.getUTCDay();
      }
    
      function formatUTCWeekNumberMonday(d, p) {
        return pad(d3Time.utcMonday.count(d3Time.utcYear(d), d), p, 2);
      }
    
      function formatUTCYear(d, p) {
        return pad(d.getUTCFullYear() % 100, p, 2);
      }
    
      function formatUTCFullYear(d, p) {
        return pad(d.getUTCFullYear() % 10000, p, 4);
      }
    
      function formatUTCZone() {
        return "+0000";
      }
    
      function formatLiteralPercent() {
        return "%";
      }
    
      var locale = locale$1({
        dateTime: "%a %b %e %X %Y",
        date: "%m/%d/%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
        shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
        months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
        shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
      });
    
      var caES = locale$1({
        dateTime: "%A, %e de %B de %Y, %X",
        date: "%d/%m/%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["diumenge", "dilluns", "dimarts", "dimecres", "dijous", "divendres", "dissabte"],
        shortDays: ["dg.", "dl.", "dt.", "dc.", "dj.", "dv.", "ds."],
        months: ["gener", "febrer", "març", "abril", "maig", "juny", "juliol", "agost", "setembre", "octubre", "novembre", "desembre"],
        shortMonths: ["gen.", "febr.", "març", "abr.", "maig", "juny", "jul.", "ag.", "set.", "oct.", "nov.", "des."]
      });
    
      var deCH = locale$1({
        dateTime: "%A, der %e. %B %Y, %X",
        date: "%d.%m.%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"], // unused
        days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
        shortDays: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
        months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
        shortMonths: ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]
      });
    
      var deDE = locale$1({
        dateTime: "%A, der %e. %B %Y, %X",
        date: "%d.%m.%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"], // unused
        days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
        shortDays: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
        months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
        shortMonths: ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]
      });
    
      var enCA = locale$1({
        dateTime: "%a %b %e %X %Y",
        date: "%Y-%m-%d",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
        shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
        months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
        shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
      });
    
      var enGB = locale$1({
        dateTime: "%a %e %b %X %Y",
        date: "%d/%m/%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
        shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
        months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
        shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
      });
    
      var esES = locale$1({
        dateTime: "%A, %e de %B de %Y, %X",
        date: "%d/%m/%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"],
        shortDays: ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"],
        months: ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"],
        shortMonths: ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"]
      });
    
      var fiFI = locale$1({
        dateTime: "%A, %-d. %Bta %Y klo %X",
        date: "%-d.%-m.%Y",
        time: "%H:%M:%S",
        periods: ["a.m.", "p.m."],
        days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"],
        shortDays: ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"],
        months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"],
        shortMonths: ["Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä", "Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu"]
      });
    
      var frCA = locale$1({
        dateTime: "%a %e %b %Y %X",
        date: "%Y-%m-%d",
        time: "%H:%M:%S",
        periods: ["", ""],
        days: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"],
        shortDays: ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"],
        months: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"],
        shortMonths: ["jan", "fév", "mar", "avr", "mai", "jui", "jul", "aoû", "sep", "oct", "nov", "déc"]
      });
    
      var frFR = locale$1({
        dateTime: "%A, le %e %B %Y, %X",
        date: "%d/%m/%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"], // unused
        days: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"],
        shortDays: ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
        months: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"],
        shortMonths: ["janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."]
      });
    
      var heIL = locale$1({
        dateTime: "%A, %e ב%B %Y %X",
        date: "%d.%m.%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
        shortDays: ["א׳", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳"],
        months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
        shortMonths: ["ינו׳", "פבר׳", "מרץ", "אפר׳", "מאי", "יוני", "יולי", "אוג׳", "ספט׳", "אוק׳", "נוב׳", "דצמ׳"]
      });
    
      var huHU = locale$1({
        dateTime: "%Y. %B %-e., %A %X",
        date: "%Y. %m. %d.",
        time: "%H:%M:%S",
        periods: ["de.", "du."], // unused
        days: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"],
        shortDays: ["V", "H", "K", "Sze", "Cs", "P", "Szo"],
        months: ["január", "február", "március", "április", "május", "június", "július", "augusztus", "szeptember", "október", "november", "december"],
        shortMonths: ["jan.", "feb.", "már.", "ápr.", "máj.", "jún.", "júl.", "aug.", "szept.", "okt.", "nov.", "dec."]
      });
    
      var itIT = locale$1({
        dateTime: "%A %e %B %Y, %X",
        date: "%d/%m/%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"], // unused
        days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"],
        shortDays: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
        months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
        shortMonths: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"]
      });
    
      var jaJP = locale$1({
        dateTime: "%Y %b %e %a %X",
        date: "%Y/%m/%d",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"],
        shortDays: ["日", "月", "火", "水", "木", "金", "土"],
        months: ["睦月", "如月", "弥生", "卯月", "皐月", "水無月", "文月", "葉月", "長月", "神無月", "霜月", "師走"],
        shortMonths: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
      });
    
      var koKR = locale$1({
        dateTime: "%Y/%m/%d %a %X",
        date: "%Y/%m/%d",
        time: "%H:%M:%S",
        periods: ["오전", "오후"],
        days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
        shortDays: ["일", "월", "화", "수", "목", "금", "토"],
        months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
        shortMonths: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
      });
    
      var mkMK = locale$1({
        dateTime: "%A, %e %B %Y г. %X",
        date: "%d.%m.%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["недела", "понеделник", "вторник", "среда", "четврток", "петок", "сабота"],
        shortDays: ["нед", "пон", "вто", "сре", "чет", "пет", "саб"],
        months: ["јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември"],
        shortMonths: ["јан", "фев", "мар", "апр", "мај", "јун", "јул", "авг", "сеп", "окт", "ное", "дек"]
      });
    
      var nlNL = locale$1({
        dateTime: "%a %e %B %Y %T",
        date: "%d-%m-%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"], // unused
        days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
        shortDays: ["zo", "ma", "di", "wo", "do", "vr", "za"],
        months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
        shortMonths: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"]
      });
    
      var plPL = locale$1({
        dateTime: "%A, %e %B %Y, %X",
        date: "%d/%m/%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"], // unused
        days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"],
        shortDays: ["Niedz.", "Pon.", "Wt.", "Śr.", "Czw.", "Pt.", "Sob."],
        months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
        shortMonths: ["Stycz.", "Luty", "Marz.", "Kwie.", "Maj", "Czerw.", "Lipc.", "Sierp.", "Wrz.", "Paźdz.", "Listop.", "Grudz."]/* In Polish language abbraviated months are not commonly used so there is a dispute about the proper abbraviations. */
      });
    
      var ptBR = locale$1({
        dateTime: "%A, %e de %B de %Y. %X",
        date: "%d/%m/%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
        shortDays: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
        months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
        shortMonths: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"]
      });
    
      var ruRU = locale$1({
        dateTime: "%A, %e %B %Y г. %X",
        date: "%d.%m.%Y",
        time: "%H:%M:%S",
        periods: ["AM", "PM"],
        days: ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"],
        shortDays: ["вс", "пн", "вт", "ср", "чт", "пт", "сб"],
        months: ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"],
        shortMonths: ["янв", "фев", "мар", "апр", "май", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"]
      });
    
      var svSE = locale$1({
        dateTime: "%A den %d %B %Y %X",
        date: "%Y-%m-%d",
        time: "%H:%M:%S",
        periods: ["fm", "em"],
        days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"],
        shortDays: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"],
        months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"],
        shortMonths: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"]
      });
    
      var zhCN = locale$1({
        dateTime: "%x %A %X",
        date: "%Y年%-m月%-d日",
        time: "%H:%M:%S",
        periods: ["上午", "下午"],
        days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
        shortDays: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
        months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
        shortMonths: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
      });
    
      var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
    
      function formatIsoNative(date) {
        return date.toISOString();
      }
    
      var formatIso = Date.prototype.toISOString
          ? formatIsoNative
          : locale.utcFormat(isoSpecifier);
    
      function parseIsoNative(string) {
        var date = new Date(string);
        return isNaN(date) ? null : date;
      }
    
      var parseIso = +new Date("2000-01-01T00:00:00.000Z")
          ? parseIsoNative
          : locale.utcParse(isoSpecifier);
    
      var timeFormat = locale.format;
      var timeParse = locale.parse;
      var utcFormat = locale.utcFormat;
      var utcParse = locale.utcParse;
    
      exports.timeFormat = timeFormat;
      exports.timeParse = timeParse;
      exports.utcFormat = utcFormat;
      exports.utcParse = utcParse;
      exports.version = version;
      exports.timeFormatLocale = locale$1;
      exports.timeFormatCaEs = caES;
      exports.timeFormatDeCh = deCH;
      exports.timeFormatDeDe = deDE;
      exports.timeFormatEnCa = enCA;
      exports.timeFormatEnGb = enGB;
      exports.timeFormatEnUs = locale;
      exports.timeFormatEsEs = esES;
      exports.timeFormatFiFi = fiFI;
      exports.timeFormatFrCa = frCA;
      exports.timeFormatFrFr = frFR;
      exports.timeFormatHeIl = heIL;
      exports.timeFormatHuHu = huHU;
      exports.timeFormatItIt = itIT;
      exports.timeFormatJaJp = jaJP;
      exports.timeFormatKoKr = koKR;
      exports.timeFormatMkMk = mkMK;
      exports.timeFormatNlNl = nlNL;
      exports.timeFormatPlPl = plPL;
      exports.timeFormatPtBr = ptBR;
      exports.timeFormatRuRu = ruRU;
      exports.timeFormatSvSe = svSE;
      exports.timeFormatZhCn = zhCN;
      exports.isoFormat = formatIso;
      exports.isoParse = parseIso;
    
    }));

/***/ },
/* 453 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _commonProps = __webpack_require__(443);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var ChartTitle = function (_Component) {
      _inherits(ChartTitle, _Component);
    
      function ChartTitle(props) {
        _classCallCheck(this, ChartTitle);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(ChartTitle).call(this, props));
      }
    
      _createClass(ChartTitle, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var titleClassName = _props.titleClassName;
          var title = _props.title;
          var width = _props.width;
    
    
          var titleStyle = {
            width: width,
            textAlign: 'center',
            fontSize: '2em',
            paddingBottom: '1.3em'
          };
    
          return _react2.default.createElement(
            'div',
            {
              style: titleStyle,
              className: titleClassName
            },
            title
          );
        }
      }]);
    
      return ChartTitle;
    }(_react.Component);
    
    ChartTitle.defaultProps = _extends({
      titleClassName: 'react-d3-core__container_title',
      title: ''
    }, _commonProps2.default);
    ChartTitle.propTypes = {
      width: _react.PropTypes.number.isRequired,
      title: _react.PropTypes.string,
      titleClassName: _react.PropTypes.string
    };
    exports.default = ChartTitle;

/***/ },
/* 454 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _svg = __webpack_require__(442);
    
    var _svg2 = _interopRequireDefault(_svg);
    
    var _legend = __webpack_require__(455);
    
    var _legend2 = _interopRequireDefault(_legend);
    
    var _commonProps = __webpack_require__(443);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var ChartContainer = function (_Component) {
      _inherits(ChartContainer, _Component);
    
      function ChartContainer(props) {
        _classCallCheck(this, ChartContainer);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(ChartContainer).call(this, props));
      }
    
      _createClass(ChartContainer, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var chartSeries = _props.chartSeries;
    
    
          var legend;
    
          var divStyle = {
            width: width
          };
    
          if (chartSeries) {
            legend = _react2.default.createElement(_legend2.default, _extends({}, this.props, {
              chartSeries: chartSeries
            }));
          }
    
          return _react2.default.createElement(
            'div',
            { style: divStyle },
            legend,
            _react2.default.createElement(_svg2.default, this.props)
          );
        }
      }]);
    
      return ChartContainer;
    }(_react.Component);
    
    ChartContainer.defaultProps = _commonProps2.default;
    exports.default = ChartContainer;

/***/ },
/* 455 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Selection = __webpack_require__(456);
    
    var _d3Selection2 = _interopRequireDefault(_d3Selection);
    
    var _d3Scale = __webpack_require__(445);
    
    var _d3Scale2 = _interopRequireDefault(_d3Scale);
    
    var _reactFauxDom = __webpack_require__(457);
    
    var _reactFauxDom2 = _interopRequireDefault(_reactFauxDom);
    
    var _commonProps = __webpack_require__(443);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Legend = function (_Component) {
      _inherits(Legend, _Component);
    
      function Legend(props) {
        _classCallCheck(this, Legend);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Legend).call(this, props));
      }
    
      _createClass(Legend, [{
        key: '_radius',
        value: function _radius(swatchShape) {
          return swatchShape === 'circle' ? 18 : 0;
        }
      }, {
        key: '_series',
        value: function _series(props) {
          var chartSeries = props.chartSeries;
          var categoricalColors = props.categoricalColors;
    
    
          var colors = categoricalColors || _d3Scale2.default.scaleCategory10();
    
          return chartSeries.map(function (_ref, i) {
            var name = _ref.name;
            var color = _ref.color;
            var field = _ref.field;
            return {
              color: color || colors(i),
              name: name || field,
              field: field
            };
          });
        }
      }, {
        key: '_mkLegend',
        value: function _mkLegend(dom) {
          var _props = this.props;
          var legendClassName = _props.legendClassName;
          var backgroundColor = _props.backgroundColor;
          var legendPosition = _props.legendPosition;
          var legendOffset = _props.legendOffset;
          var swatchShape = _props.swatchShape;
          var chartSeries = _props.chartSeries;
          var margins = _props.margins;
          var width = _props.width;
    
    
          var legendArea = _d3Selection2.default.select(dom);
          var series = this._series(this.props);
          var radius = this._radius(swatchShape);
    
          // make legends
          var legend = legendArea.selectAll('div').data(series).enter().append("div").attr("class", legendClassName + ' legend').style("height", 20).style("padding", 5).style("background-color", backgroundColor).style("display", "inline-block");
    
          var rect = legend.append("div").style("width", 18).style("height", 18).style("border-radius", radius).style("background-color", function (d) {
            return d.color;
          }).style("float", legendPosition);
    
          var text = legend.append("div").style("padding-left", 5).style("padding-right", 5).text(function (d) {
            return d.name;
          }).style("float", legendPosition);
    
          return legendArea;
        }
      }, {
        key: 'render',
        value: function render() {
          var _props2 = this.props;
          var legendClassName = _props2.legendClassName;
          var width = _props2.width;
          var height = _props2.height;
    
    
          var legendGroup = _reactFauxDom2.default.createElement('div');
          var legendClasses = legendClassName + ' legend';
    
          legendGroup.setAttribute('class', legendClasses);
          legendGroup.style.width = width;
          legendGroup.style.textAlign = 'center';
    
          return this._mkLegend(legendGroup).node().toReact();
        }
      }]);
    
      return Legend;
    }(_react.Component);
    
    Legend.defaultProps = _extends({
      backgroundColor: '#FFF',
      legendHeight: 50,
      legendPosition: 'left',
      legendOffset: 90,
      legendClassName: 'react-d3-core__legend',
      swatchShape: 'square'
    }, _commonProps2.default);
    Legend.propTypes = {
      backgroundColor: _react.PropTypes.string,
      width: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      chartSeries: _react.PropTypes.array.isRequired,
      legendOffset: _react.PropTypes.number.isRequired,
      legendClassName: _react.PropTypes.string.isRequired,
      legendPosition: _react.PropTypes.oneOf(['left', 'right']).isRequired,
      swatchShape: _react.PropTypes.oneOf(['circle', 'square'])
    };
    exports.default = Legend;

/***/ },
/* 456 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], factory) :
      (factory((global.d3_selection = global.d3_selection || {})));
    }(this, function (exports) { 'use strict';
    
      var version = "0.7.3";
    
      var xhtml = "http://www.w3.org/1999/xhtml";
    
      var namespaces = {
        svg: "http://www.w3.org/2000/svg",
        xhtml: xhtml,
        xlink: "http://www.w3.org/1999/xlink",
        xml: "http://www.w3.org/XML/1998/namespace",
        xmlns: "http://www.w3.org/2000/xmlns/"
      };
    
      function namespace(name) {
        var prefix = name += "", i = prefix.indexOf(":");
        if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
        return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
      }
    
      function creatorInherit(name) {
        return function() {
          var document = this.ownerDocument,
              uri = this.namespaceURI;
          return uri === xhtml && document.documentElement.namespaceURI === xhtml
              ? document.createElement(name)
              : document.createElementNS(uri, name);
        };
      }
    
      function creatorFixed(fullname) {
        return function() {
          return this.ownerDocument.createElementNS(fullname.space, fullname.local);
        };
      }
    
      function creator(name) {
        var fullname = namespace(name);
        return (fullname.local
            ? creatorFixed
            : creatorInherit)(fullname);
      }
    
      var matcher = function(selector) {
        return function() {
          return this.matches(selector);
        };
      };
    
      if (typeof document !== "undefined") {
        var element = document.documentElement;
        if (!element.matches) {
          var vendorMatches = element.webkitMatchesSelector
              || element.msMatchesSelector
              || element.mozMatchesSelector
              || element.oMatchesSelector;
          matcher = function(selector) {
            return function() {
              return vendorMatches.call(this, selector);
            };
          };
        }
      }
    
      var matcher$1 = matcher;
    
      var filterEvents = {};
    
      exports.event = null;
    
      if (typeof document !== "undefined") {
        var element$1 = document.documentElement;
        if (!("onmouseenter" in element$1)) {
          filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
        }
      }
    
      function filterContextListener(listener, index, group) {
        listener = contextListener(listener, index, group);
        return function(event) {
          var related = event.relatedTarget;
          if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
            listener.call(this, event);
          }
        };
      }
    
      function contextListener(listener, index, group) {
        return function(event1) {
          var event0 = exports.event; // Events can be reentrant (e.g., focus).
          exports.event = event1;
          try {
            listener.call(this, this.__data__, index, group);
          } finally {
            exports.event = event0;
          }
        };
      }
    
      function parseTypenames(typenames) {
        return typenames.trim().split(/^|\s+/).map(function(t) {
          var name = "", i = t.indexOf(".");
          if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
          return {type: t, name: name};
        });
      }
    
      function onRemove(typename) {
        return function() {
          var on = this.__on;
          if (!on) return;
          for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
            if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
              this.removeEventListener(o.type, o.listener, o.capture);
            } else {
              on[++i] = o;
            }
          }
          if (++i) on.length = i;
          else delete this.__on;
        };
      }
    
      function onAdd(typename, value, capture) {
        var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
        return function(d, i, group) {
          var on = this.__on, o, listener = wrap(value, i, group);
          if (on) for (var j = 0, m = on.length; j < m; ++j) {
            if ((o = on[j]).type === typename.type && o.name === typename.name) {
              this.removeEventListener(o.type, o.listener, o.capture);
              this.addEventListener(o.type, o.listener = listener, o.capture = capture);
              o.value = value;
              return;
            }
          }
          this.addEventListener(typename.type, listener, capture);
          o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
          if (!on) this.__on = [o];
          else on.push(o);
        };
      }
    
      function selection_on(typename, value, capture) {
        var typenames = parseTypenames(typename + ""), i, n = typenames.length, t;
    
        if (arguments.length < 2) {
          var on = this.node().__on;
          if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
            for (i = 0, o = on[j]; i < n; ++i) {
              if ((t = typenames[i]).type === o.type && t.name === o.name) {
                return o.value;
              }
            }
          }
          return;
        }
    
        on = value ? onAdd : onRemove;
        if (capture == null) capture = false;
        for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
        return this;
      }
    
      function customEvent(event1, listener, that, args) {
        var event0 = exports.event;
        event1.sourceEvent = exports.event;
        exports.event = event1;
        try {
          return listener.apply(that, args);
        } finally {
          exports.event = event0;
        }
      }
    
      function sourceEvent() {
        var current = exports.event, source;
        while (source = current.sourceEvent) current = source;
        return current;
      }
    
      function point(node, event) {
        var svg = node.ownerSVGElement || node;
    
        if (svg.createSVGPoint) {
          var point = svg.createSVGPoint();
          point.x = event.clientX, point.y = event.clientY;
          point = point.matrixTransform(node.getScreenCTM().inverse());
          return [point.x, point.y];
        }
    
        var rect = node.getBoundingClientRect();
        return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
      }
    
      function mouse(node) {
        var event = sourceEvent();
        if (event.changedTouches) event = event.changedTouches[0];
        return point(node, event);
      }
    
      function selector(selector) {
        return function() {
          return this.querySelector(selector);
        };
      }
    
      function selection_select(select) {
        if (typeof select !== "function") select = selector(select);
    
        for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
          for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
            if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
              if ("__data__" in node) subnode.__data__ = node.__data__;
              subgroup[i] = subnode;
            }
          }
        }
    
        return new Selection(subgroups, this._parents);
      }
    
      function selectorAll(selector) {
        return function() {
          return this.querySelectorAll(selector);
        };
      }
    
      function selection_selectAll(select) {
        if (typeof select !== "function") select = selectorAll(select);
    
        for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
          for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
            if (node = group[i]) {
              subgroups.push(select.call(node, node.__data__, i, group));
              parents.push(node);
            }
          }
        }
    
        return new Selection(subgroups, parents);
      }
    
      function selection_filter(match) {
        if (typeof match !== "function") match = matcher$1(match);
    
        for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
          for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
            if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
              subgroup[i] = node;
            }
          }
        }
    
        return new Selection(subgroups, this._parents);
      }
    
      function constant(x) {
        return function() {
          return x;
        };
      }
    
      var keyPrefix = "$"; // Protect against keys like “__proto__”.
    
      function bindIndex(parent, group, enter, update, exit, data) {
        var i = 0,
            node,
            groupLength = group.length,
            dataLength = data.length;
    
        // Put any non-null nodes that fit into update.
        // Put any null nodes into enter.
        // Put any remaining data into enter.
        for (; i < dataLength; ++i) {
          if (node = group[i]) {
            node.__data__ = data[i];
            update[i] = node;
          } else {
            enter[i] = new EnterNode(parent, data[i]);
          }
        }
    
        // Put any non-null nodes that don’t fit into exit.
        for (; i < groupLength; ++i) {
          if (node = group[i]) {
            exit[i] = node;
          }
        }
      }
    
      function bindKey(parent, group, enter, update, exit, data, key) {
        var i,
            node,
            nodeByKeyValue = {},
            groupLength = group.length,
            dataLength = data.length,
            keyValues = new Array(groupLength),
            keyValue;
    
        // Compute the key for each node.
        // If multiple nodes have the same key, the duplicates are added to exit.
        for (i = 0; i < groupLength; ++i) {
          if (node = group[i]) {
            keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
            if (keyValue in nodeByKeyValue) {
              exit[i] = node;
            } else {
              nodeByKeyValue[keyValue] = node;
            }
          }
        }
    
        // Compute the key for each datum.
        // If there a node associated with this key, join and add it to update.
        // If there is not (or the key is a duplicate), add it to enter.
        for (i = 0; i < dataLength; ++i) {
          keyValue = keyPrefix + key.call(parent, data[i], i, data);
          if (node = nodeByKeyValue[keyValue]) {
            update[i] = node;
            node.__data__ = data[i];
            nodeByKeyValue[keyValue] = null;
          } else {
            enter[i] = new EnterNode(parent, data[i]);
          }
        }
    
        // Add any remaining nodes that were not bound to data to exit.
        for (i = 0; i < groupLength; ++i) {
          if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
            exit[i] = node;
          }
        }
      }
    
      function selection_data(value, key) {
        if (!value) {
          data = new Array(this.size()), j = -1;
          this.each(function(d) { data[++j] = d; });
          return data;
        }
    
        var bind = key ? bindKey : bindIndex,
            parents = this._parents,
            groups = this._groups;
    
        if (typeof value !== "function") value = constant(value);
    
        for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
          var parent = parents[j],
              group = groups[j],
              groupLength = group.length,
              data = value.call(parent, parent && parent.__data__, j, parents),
              dataLength = data.length,
              enterGroup = enter[j] = new Array(dataLength),
              updateGroup = update[j] = new Array(dataLength),
              exitGroup = exit[j] = new Array(groupLength);
    
          bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
    
          // Now connect the enter nodes to their following update node, such that
          // appendChild can insert the materialized enter node before this node,
          // rather than at the end of the parent node.
          for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
            if (previous = enterGroup[i0]) {
              if (i0 >= i1) i1 = i0 + 1;
              while (!(next = updateGroup[i1]) && ++i1 < dataLength);
              previous._next = next || null;
            }
          }
        }
    
        update = new Selection(update, parents);
        update._enter = enter;
        update._exit = exit;
        return update;
      }
    
      function EnterNode(parent, datum) {
        this.ownerDocument = parent.ownerDocument;
        this.namespaceURI = parent.namespaceURI;
        this._next = null;
        this._parent = parent;
        this.__data__ = datum;
      }
    
      EnterNode.prototype = {
        constructor: EnterNode,
        appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
        insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
        querySelector: function(selector) { return this._parent.querySelector(selector); },
        querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
      };
    
      function sparse(update) {
        return new Array(update.length);
      }
    
      function selection_enter() {
        return new Selection(this._enter || this._groups.map(sparse), this._parents);
      }
    
      function selection_exit() {
        return new Selection(this._exit || this._groups.map(sparse), this._parents);
      }
    
      function selection_merge(selection) {
    
        for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
          for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
            if (node = group0[i] || group1[i]) {
              merge[i] = node;
            }
          }
        }
    
        for (; j < m0; ++j) {
          merges[j] = groups0[j];
        }
    
        return new Selection(merges, this._parents);
      }
    
      function selection_order() {
    
        for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
          for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
            if (node = group[i]) {
              if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
              next = node;
            }
          }
        }
    
        return this;
      }
    
      function selection_sort(compare) {
        if (!compare) compare = ascending;
    
        function compareNode(a, b) {
          return a && b ? compare(a.__data__, b.__data__) : !a - !b;
        }
    
        for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
          for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
            if (node = group[i]) {
              sortgroup[i] = node;
            }
          }
          sortgroup.sort(compareNode);
        }
    
        return new Selection(sortgroups, this._parents).order();
      }
    
      function ascending(a, b) {
        return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
      }
    
      function selection_call() {
        var callback = arguments[0];
        arguments[0] = this;
        callback.apply(null, arguments);
        return this;
      }
    
      function selection_nodes() {
        var nodes = new Array(this.size()), i = -1;
        this.each(function() { nodes[++i] = this; });
        return nodes;
      }
    
      function selection_node() {
    
        for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
          for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
            var node = group[i];
            if (node) return node;
          }
        }
    
        return null;
      }
    
      function selection_size() {
        var size = 0;
        this.each(function() { ++size; });
        return size;
      }
    
      function selection_empty() {
        return !this.node();
      }
    
      function selection_each(callback) {
    
        for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
          for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
            if (node = group[i]) callback.call(node, node.__data__, i, group);
          }
        }
    
        return this;
      }
    
      function attrRemove(name) {
        return function() {
          this.removeAttribute(name);
        };
      }
    
      function attrRemoveNS(fullname) {
        return function() {
          this.removeAttributeNS(fullname.space, fullname.local);
        };
      }
    
      function attrConstant(name, value) {
        return function() {
          this.setAttribute(name, value);
        };
      }
    
      function attrConstantNS(fullname, value) {
        return function() {
          this.setAttributeNS(fullname.space, fullname.local, value);
        };
      }
    
      function attrFunction(name, value) {
        return function() {
          var v = value.apply(this, arguments);
          if (v == null) this.removeAttribute(name);
          else this.setAttribute(name, v);
        };
      }
    
      function attrFunctionNS(fullname, value) {
        return function() {
          var v = value.apply(this, arguments);
          if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
          else this.setAttributeNS(fullname.space, fullname.local, v);
        };
      }
    
      function selection_attr(name, value) {
        var fullname = namespace(name);
    
        if (arguments.length < 2) {
          var node = this.node();
          return fullname.local
              ? node.getAttributeNS(fullname.space, fullname.local)
              : node.getAttribute(fullname);
        }
    
        return this.each((value == null
            ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
            ? (fullname.local ? attrFunctionNS : attrFunction)
            : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
      }
    
      function defaultView(node) {
        return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
            || (node.document && node) // node is a Window
            || node.defaultView; // node is a Document
      }
    
      function styleRemove(name) {
        return function() {
          this.style.removeProperty(name);
        };
      }
    
      function styleConstant(name, value, priority) {
        return function() {
          this.style.setProperty(name, value, priority);
        };
      }
    
      function styleFunction(name, value, priority) {
        return function() {
          var v = value.apply(this, arguments);
          if (v == null) this.style.removeProperty(name);
          else this.style.setProperty(name, v, priority);
        };
      }
    
      function selection_style(name, value, priority) {
        var node;
        return arguments.length > 1
            ? this.each((value == null
                  ? styleRemove : typeof value === "function"
                  ? styleFunction
                  : styleConstant)(name, value, priority == null ? "" : priority))
            : defaultView(node = this.node())
                .getComputedStyle(node, null)
                .getPropertyValue(name);
      }
    
      function propertyRemove(name) {
        return function() {
          delete this[name];
        };
      }
    
      function propertyConstant(name, value) {
        return function() {
          this[name] = value;
        };
      }
    
      function propertyFunction(name, value) {
        return function() {
          var v = value.apply(this, arguments);
          if (v == null) delete this[name];
          else this[name] = v;
        };
      }
    
      function selection_property(name, value) {
        return arguments.length > 1
            ? this.each((value == null
                ? propertyRemove : typeof value === "function"
                ? propertyFunction
                : propertyConstant)(name, value))
            : this.node()[name];
      }
    
      function classArray(string) {
        return string.trim().split(/^|\s+/);
      }
    
      function classList(node) {
        return node.classList || new ClassList(node);
      }
    
      function ClassList(node) {
        this._node = node;
        this._names = classArray(node.getAttribute("class") || "");
      }
    
      ClassList.prototype = {
        add: function(name) {
          var i = this._names.indexOf(name);
          if (i < 0) {
            this._names.push(name);
            this._node.setAttribute("class", this._names.join(" "));
          }
        },
        remove: function(name) {
          var i = this._names.indexOf(name);
          if (i >= 0) {
            this._names.splice(i, 1);
            this._node.setAttribute("class", this._names.join(" "));
          }
        },
        contains: function(name) {
          return this._names.indexOf(name) >= 0;
        }
      };
    
      function classedAdd(node, names) {
        var list = classList(node), i = -1, n = names.length;
        while (++i < n) list.add(names[i]);
      }
    
      function classedRemove(node, names) {
        var list = classList(node), i = -1, n = names.length;
        while (++i < n) list.remove(names[i]);
      }
    
      function classedTrue(names) {
        return function() {
          classedAdd(this, names);
        };
      }
    
      function classedFalse(names) {
        return function() {
          classedRemove(this, names);
        };
      }
    
      function classedFunction(names, value) {
        return function() {
          (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
        };
      }
    
      function selection_classed(name, value) {
        var names = classArray(name + "");
    
        if (arguments.length < 2) {
          var list = classList(this.node()), i = -1, n = names.length;
          while (++i < n) if (!list.contains(names[i])) return false;
          return true;
        }
    
        return this.each((typeof value === "function"
            ? classedFunction : value
            ? classedTrue
            : classedFalse)(names, value));
      }
    
      function textRemove() {
        this.textContent = "";
      }
    
      function textConstant(value) {
        return function() {
          this.textContent = value;
        };
      }
    
      function textFunction(value) {
        return function() {
          var v = value.apply(this, arguments);
          this.textContent = v == null ? "" : v;
        };
      }
    
      function selection_text(value) {
        return arguments.length
            ? this.each(value == null
                ? textRemove : (typeof value === "function"
                ? textFunction
                : textConstant)(value))
            : this.node().textContent;
      }
    
      function htmlRemove() {
        this.innerHTML = "";
      }
    
      function htmlConstant(value) {
        return function() {
          this.innerHTML = value;
        };
      }
    
      function htmlFunction(value) {
        return function() {
          var v = value.apply(this, arguments);
          this.innerHTML = v == null ? "" : v;
        };
      }
    
      function selection_html(value) {
        return arguments.length
            ? this.each(value == null
                ? htmlRemove : (typeof value === "function"
                ? htmlFunction
                : htmlConstant)(value))
            : this.node().innerHTML;
      }
    
      function raise() {
        if (this.nextSibling) this.parentNode.appendChild(this);
      }
    
      function selection_raise() {
        return this.each(raise);
      }
    
      function lower() {
        if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
      }
    
      function selection_lower() {
        return this.each(lower);
      }
    
      function append(create) {
        return function() {
          return this.appendChild(create.apply(this, arguments));
        };
      }
    
      function insert(create, select) {
        return function() {
          return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
        };
      }
    
      function constantNull() {
        return null;
      }
    
      function selection_append(name, before) {
        var create = typeof name === "function" ? name : creator(name);
        return this.select(arguments.length < 2
            ? append(create)
            : insert(create, before == null
                ? constantNull : typeof before === "function"
                ? before
                : selector(before)));
      }
    
      function remove() {
        var parent = this.parentNode;
        if (parent) parent.removeChild(this);
      }
    
      function selection_remove() {
        return this.each(remove);
      }
    
      function selection_datum(value) {
        return arguments.length
            ? this.property("__data__", value)
            : this.node().__data__;
      }
    
      function dispatchEvent(node, type, params) {
        var window = defaultView(node),
            event = window.CustomEvent;
    
        if (event) {
          event = new event(type, params);
        } else {
          event = window.document.createEvent("Event");
          if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
          else event.initEvent(type, false, false);
        }
    
        node.dispatchEvent(event);
      }
    
      function dispatchConstant(type, params) {
        return function() {
          return dispatchEvent(this, type, params);
        };
      }
    
      function dispatchFunction(type, params) {
        return function() {
          return dispatchEvent(this, type, params.apply(this, arguments));
        };
      }
    
      function selection_dispatch(type, params) {
        return this.each((typeof params === "function"
            ? dispatchFunction
            : dispatchConstant)(type, params));
      }
    
      var root = [null];
    
      function Selection(groups, parents) {
        this._groups = groups;
        this._parents = parents;
      }
    
      function selection() {
        return new Selection([[document.documentElement]], root);
      }
    
      Selection.prototype = selection.prototype = {
        constructor: Selection,
        select: selection_select,
        selectAll: selection_selectAll,
        filter: selection_filter,
        data: selection_data,
        enter: selection_enter,
        exit: selection_exit,
        merge: selection_merge,
        order: selection_order,
        sort: selection_sort,
        call: selection_call,
        nodes: selection_nodes,
        node: selection_node,
        size: selection_size,
        empty: selection_empty,
        each: selection_each,
        attr: selection_attr,
        style: selection_style,
        property: selection_property,
        classed: selection_classed,
        text: selection_text,
        html: selection_html,
        raise: selection_raise,
        lower: selection_lower,
        append: selection_append,
        remove: selection_remove,
        datum: selection_datum,
        on: selection_on,
        dispatch: selection_dispatch
      };
    
      function select(selector) {
        return typeof selector === "string"
            ? new Selection([[document.querySelector(selector)]], [document.documentElement])
            : new Selection([[selector]], root);
      }
    
      function selectAll(selector) {
        return typeof selector === "string"
            ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
            : new Selection([selector], root);
      }
    
      function touch(node, touches, identifier) {
        if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
    
        for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
          if ((touch = touches[i]).identifier === identifier) {
            return point(node, touch);
          }
        }
    
        return null;
      }
    
      function touches(node, touches) {
        if (touches == null) touches = sourceEvent().touches;
    
        for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
          points[i] = point(node, touches[i]);
        }
    
        return points;
      }
    
      exports.version = version;
      exports.creator = creator;
      exports.matcher = matcher$1;
      exports.mouse = mouse;
      exports.namespace = namespace;
      exports.namespaces = namespaces;
      exports.select = select;
      exports.selectAll = selectAll;
      exports.selection = selection;
      exports.selector = selector;
      exports.selectorAll = selectorAll;
      exports.touch = touch;
      exports.touches = touches;
      exports.window = defaultView;
      exports.customEvent = customEvent;
    
    }));

/***/ },
/* 457 */
/***/ function(module, exports, __webpack_require__) {

    var Element = __webpack_require__(458)
    var Window = __webpack_require__(470)
    var core = __webpack_require__(471)
    var anim = __webpack_require__(472)
    
    var ReactFauxDOM = {
      Element: Element,
      defaultView: Window,
      mixins: {
        core: core,
        anim: anim
      },
      createElement: function (nodeName) {
        return new Element(nodeName)
      },
      createElementNS: function (namespace, nodeName) {
        return this.createElement(nodeName)
      },
      compareDocumentPosition: function () {
        // The selector engine tries to validate with this, but we don't care.
        // 8 = DOCUMENT_POSITION_CONTAINS, so we say all nodes are in this document.
        return 8
      }
    }
    
    Element.prototype.ownerDocument = ReactFauxDOM
    
    module.exports = ReactFauxDOM


/***/ },
/* 458 */
/***/ function(module, exports, __webpack_require__) {

    var React = __webpack_require__(2)
    var styleAttr = __webpack_require__(459)
    var querySelectorAll = __webpack_require__(460)
    var camelCase = __webpack_require__(464)
    var isString = __webpack_require__(465)
    var isUndefined = __webpack_require__(466)
    var assign = __webpack_require__(467)
    var mapValues = __webpack_require__(468)
    var styleCamelCase = __webpack_require__(469)
    
    function Element (nodeName, parentNode) {
      this.nodeName = nodeName
      this.parentNode = parentNode
      this.childNodes = []
      this.eventListeners = {}
      this.text = ''
      var self = this
      var props = this.props = {
        ref: function (component) {
          self.component = component
        },
        style: {
          setProperty: function (name, value) {
            props.style[styleCamelCase(name)] = value
          },
          getProperty: function (name) {
            return props.style[styleCamelCase(name)]
          },
          removeProperty: function (name) {
            delete props.style[styleCamelCase(name)]
          }
        }
      }
    
      this.style = props.style
    }
    
    Element.prototype.nodeType = 1
    
    // This was easy to do with Vim.
    // Just saying.
    Element.prototype.eventNameMappings = {
      'blur': 'onBlur',
      'change': 'onChange',
      'click': 'onClick',
      'contextmenu': 'onContextMenu',
      'copy': 'onCopy',
      'cut': 'onCut',
      'doubleclick': 'onDoubleClick',
      'drag': 'onDrag',
      'dragend': 'onDragEnd',
      'dragenter': 'onDragEnter',
      'dragexit': 'onDragExit',
      'dragleave': 'onDragLeave',
      'dragover': 'onDragOver',
      'dragstart': 'onDragStart',
      'drop': 'onDrop',
      'error': 'onError',
      'focus': 'onFocus',
      'input': 'onInput',
      'keydown': 'onKeyDown',
      'keypress': 'onKeyPress',
      'keyup': 'onKeyUp',
      'load': 'onLoad',
      'mousedown': 'onMouseDown',
      'mouseenter': 'onMouseEnter',
      'mouseleave': 'onMouseLeave',
      'mousemove': 'onMouseMove',
      'mouseout': 'onMouseOut',
      'mouseover': 'onMouseOver',
      'mouseup': 'onMouseUp',
      'paste': 'onPaste',
      'scroll': 'onScroll',
      'submit': 'onSubmit',
      'touchcancel': 'onTouchCancel',
      'touchend': 'onTouchEnd',
      'touchmove': 'onTouchMove',
      'touchstart': 'onTouchStart',
      'wheel': 'onWheel'
    }
    
    Element.prototype.skipNameTransformationExpressions = [
      /^data-/,
      /^aria-/
    ]
    
    Element.prototype.attributeNameMappings = {
      'class': 'className'
    }
    
    Element.prototype.attributeToPropName = function (name) {
      var skipTransformMatches = this.skipNameTransformationExpressions.map(function (expr) {
        return expr.test(name)
      })
    
      if (skipTransformMatches.some(Boolean)) {
        return name
      } else {
        return this.attributeNameMappings[name] || camelCase(name)
      }
    }
    
    Element.prototype.setAttribute = function (name, value) {
      if (name === 'style' && isString(value)) {
        var styles = styleAttr.parse(value)
    
        for (var key in styles) {
          this.style.setProperty(key, styles[key])
        }
      } else {
        this.props[this.attributeToPropName(name)] = value
      }
    }
    
    Element.prototype.getAttribute = function (name) {
      return this.props[this.attributeToPropName(name)]
    }
    
    Element.prototype.getAttributeNode = function (name) {
      var value = this.getAttribute(name)
    
      if (!isUndefined(value)) {
        return {
          value: value,
          specified: true
        }
      }
    }
    
    Element.prototype.removeAttribute = function (name) {
      delete this.props[this.attributeToPropName(name)]
    }
    
    Element.prototype.eventToPropName = function (name) {
      return this.eventNameMappings[name] || name
    }
    
    Element.prototype.addEventListener = function (name, fn) {
      var prop = this.eventToPropName(name)
      this.eventListeners[prop] = this.eventListeners[prop] || []
      this.eventListeners[prop].push(fn)
    }
    
    Element.prototype.removeEventListener = function (name, fn) {
      var listeners = this.eventListeners[this.eventToPropName(name)]
    
      if (listeners) {
        var match = listeners.indexOf(fn)
    
        if (match !== -1) {
          listeners.splice(match, 1)
        }
      }
    }
    
    Element.prototype.appendChild = function (el) {
      el.parentNode = this
      this.childNodes.push(el)
      return el
    }
    
    Element.prototype.insertBefore = function (el, before) {
      var index = this.childNodes.indexOf(before)
      el.parentNode = this
    
      if (index !== -1) {
        this.childNodes.splice(index, 0, el)
      } else {
        this.childNodes.push(el)
      }
    
      return el
    }
    
    Element.prototype.removeChild = function (child) {
      var target = this.childNodes.indexOf(child)
      this.childNodes.splice(target, 1)
    }
    
    Element.prototype.querySelector = function () {
      return this.querySelectorAll.apply(this, arguments)[0] || null
    }
    
    Element.prototype.querySelectorAll = function (selector) {
      if (!selector) {
        throw new Error('Not enough arguments')
      }
    
      return querySelectorAll(selector, this)
    }
    
    Element.prototype.getElementsByTagName = function (nodeName) {
      var children = this.children
    
      if (children.length === 0) {
        return []
      } else {
        var matches
    
        if (nodeName !== '*') {
          matches = children.filter(function (el) {
            return el.nodeName === nodeName
          })
        } else {
          matches = children
        }
    
        var childMatches = children.map(function (el) {
          return el.getElementsByTagName(nodeName)
        })
    
        return matches.concat.apply(matches, childMatches)
      }
    }
    
    Element.prototype.getElementById = function (id) {
      var children = this.children
    
      if (children.length === 0) {
        return null
      } else {
        var match = children.filter(function (el) {
          return el.getAttribute('id') === id
        })[0]
    
        if (match) {
          return match
        } else {
          var childMatches = children.map(function (el) {
            return el.getElementById(id)
          })
    
          return childMatches.filter(function (match) {
            return match !== null
          })[0] || null
        }
      }
    }
    
    Element.prototype.getBoundingClientRect = function () {
      if (!this.component) {
        return undefined
      }
    
      return this.component.getBoundingClientRect()
    }
    
    Element.prototype.toReact = function (index) {
      index = index || 0
      var props = assign({}, this.props)
      props.style = assign({}, props.style)
    
      var originalElement = this
    
      function uniqueKey () {
        return 'faux-dom-' + index
      }
    
      if (isUndefined(props.key)) {
        props.key = uniqueKey()
      }
    
      delete props.style.setProperty
      delete props.style.getProperty
      delete props.style.removeProperty
    
      assign(props, mapValues(this.eventListeners, function (listeners) {
        return function (syntheticEvent) {
          var event
    
          if (syntheticEvent) {
            event = syntheticEvent.nativeEvent
            event.syntheticEvent = syntheticEvent
          }
    
          mapValues(listeners, function (listener) {
            listener.call(originalElement, event)
          })
        }
      }))
    
      return React.createElement(this.nodeName, props, this.text || this.children.map(function (el, i) {
        if (el instanceof Element) {
          return el.toReact(i)
        } else {
          return el
        }
      }))
    }
    
    Object.defineProperties(Element.prototype, {
      nextSibling: {
        get: function () {
          var siblings = this.parentNode.children
          var me = siblings.indexOf(this)
          return siblings[me + 1]
        }
      },
      previousSibling: {
        get: function () {
          var siblings = this.parentNode.children
          var me = siblings.indexOf(this)
          return siblings[me - 1]
        }
      },
      innerHTML: {
        get: function () {
          return this.text
        },
        set: function (text) {
          this.text = text
        }
      },
      textContent: {
        get: function () {
          return this.text
        },
        set: function (text) {
          this.text = text
        }
      },
      children: {
        get: function () {
          // So far nodes created by this library are all of nodeType 1 (elements),
          // but this could change in the future.
          return this.childNodes.filter(function (el) {
            if (!el.nodeType) {
              // It's a React element, we always add it
              return true
            }
    
            // It's a HTML node. We want to filter to have only nodes with type 1
            return el.nodeType === 1
          })
        }
      }
    })
    
    // These NS methods are called by things like D3 if it spots a namespace.
    // Like xlink:href. I don't care about namespaces, so these functions have NS aliases created.
    var namespaceMethods = [
      'setAttribute',
      'getAttribute',
      'getAttributeNode',
      'removeAttribute',
      'getElementsByTagName',
      'getElementById'
    ]
    
    namespaceMethods.forEach(function (name) {
      var fn = Element.prototype[name]
      Element.prototype[name + 'NS'] = function () {
        return fn.apply(this, Array.prototype.slice.call(arguments, 1))
      }
    })
    
    module.exports = Element


/***/ },
/* 459 */
/***/ function(module, exports) {

    
    
    /*:: type Attr = { [key: string]: string } */
    
    /*
    
    style-attr
    ====
    
    Very simple parsing and stringifying of style attributes.
    
    `parse`
    ----
    
    Convert a style attribute string to an object.
    
    */
    
    /*:: declare function parse (raw: string): Attr */
    function parse(raw) {
      var trim = function (s) {
        return s.trim();
      };
      var obj = {};
    
      getKeyValueChunks(raw).map(trim).filter(Boolean).forEach(function (item) {
        // split with `.indexOf` rather than `.split` because the value may also contain colons.
        var pos = item.indexOf(':');
        var key = item.substr(0, pos).trim();
        var val = item.substr(pos + 1).trim();
    
        obj[key] = val;
      });
    
      return obj;
    }
    
    /*
    
    `getKeyValueChunks`
    ----
    
    Split a string into chunks matching `<key>: <value>`
    
    */
    /*:: declare function getKeyValueChunks (raw: string): Array<string> */
    function getKeyValueChunks(raw) {
      var chunks = [];
      var offset = 0;
      var sep = ';';
      var hasUnclosedUrl = /url\([^\)]+$/;
      var chunk = '';
      var nextSplit;
      while (offset < raw.length) {
        nextSplit = raw.indexOf(sep, offset);
        if (nextSplit === -1) {
          nextSplit = raw.length;
        }
    
        chunk += raw.substring(offset, nextSplit);
    
        // data URIs can contain semicolons, so make sure we get the whole thing
        if (hasUnclosedUrl.test(chunk)) {
          chunk += ';';
          offset = nextSplit + 1;
          continue;
        }
    
        chunks.push(chunk);
        chunk = '';
        offset = nextSplit + 1;
      }
    
      return chunks;
    }
    
    /*
    
    `stringify`
    ----
    
    Convert an object into an attribute string
    
    */
    /*:: declare function stringify (obj: Attr): string */
    function stringify(obj) {
      return Object.keys(obj).map(function (key) {
        return key + ':' + obj[key];
      }).join(';');
    }
    
    /*
    
    `normalize`
    ----
    
    Normalize an attribute string (eg. collapse duplicates)
    
    */
    /*:: declare function normalize (str: string): string */
    function normalize(str) {
      return stringify(parse(str));
    }
    
    module.exports.parse = parse;
    module.exports.stringify = stringify;
    module.exports.normalize = normalize;

/***/ },
/* 460 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = __webpack_require__(461);

/***/ },
/* 461 */
/***/ function(module, exports, __webpack_require__) {

    /**
     * @ignore
     * css3 selector engine for ie6-8
     * @author yiminghe@gmail.com
     */
    
    var util = __webpack_require__(462);
    var parser = __webpack_require__(463);
    
    var EXPANDO_SELECTOR_KEY = '_ks_data_selector_id_',
      caches = {},
      isContextXML,
      uuid = 0,
      subMatchesCache = {},
      getAttr = function (el, name) {
        if (isContextXML) {
          return util.getSimpleAttr(el, name);
        } else {
          return util.attr(el, name);
        }
      },
      hasSingleClass = util.hasSingleClass,
      isTag = util.isTag,
      aNPlusB = /^(([+-]?(?:\d+)?)?n)?([+-]?\d+)?$/;
    
    // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
    var unescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
      unescapeFn = function (_, escaped) {
        var high = '0x' + escaped - 0x10000;
        // NaN means non-codepoint
        return isNaN(high) ?
          escaped :
          // BMP codepoint
          high < 0 ?
            String.fromCharCode(high + 0x10000) :
            // Supplemental Plane codepoint (surrogate pair)
            String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
      };
    
    var matchExpr;
    
    var pseudoFnExpr = {
      'nth-child': function (el, param) {
        var ab = getAb(param),
          a = ab.a,
          b = ab.b;
        if (a === 0 && b === 0) {
          return 0;
        }
        var index = 0,
          parent = el.parentNode;
        if (parent) {
          var childNodes = parent.childNodes,
            count = 0,
            child,
            ret,
            len = childNodes.length;
          for (; count < len; count++) {
            child = childNodes[count];
            if (child.nodeType === 1) {
              index++;
              ret = matchIndexByAb(index, a, b, child === el);
              if (ret !== undefined) {
                return ret;
              }
            }
          }
        }
        return 0;
      },
      'nth-last-child': function (el, param) {
        var ab = getAb(param),
          a = ab.a,
          b = ab.b;
        if (a === 0 && b === 0) {
          return 0;
        }
        var index = 0,
          parent = el.parentNode;
        if (parent) {
          var childNodes = parent.childNodes,
            len = childNodes.length,
            count = len - 1,
            child,
            ret;
          for (; count >= 0; count--) {
            child = childNodes[count];
            if (child.nodeType === 1) {
              index++;
              ret = matchIndexByAb(index, a, b, child === el);
              if (ret !== undefined) {
                return ret;
              }
            }
          }
        }
        return 0;
      },
      'nth-of-type': function (el, param) {
        var ab = getAb(param),
          a = ab.a,
          b = ab.b;
        if (a === 0 && b === 0) {
          return 0;
        }
        var index = 0,
          parent = el.parentNode;
        if (parent) {
          var childNodes = parent.childNodes,
            elType = el.tagName,
            count = 0,
            child,
            ret,
            len = childNodes.length;
          for (; count < len; count++) {
            child = childNodes[count];
            if (child.tagName === elType) {
              index++;
              ret = matchIndexByAb(index, a, b, child === el);
              if (ret !== undefined) {
                return ret;
              }
            }
          }
        }
        return 0;
      },
      'nth-last-of-type': function (el, param) {
        var ab = getAb(param),
          a = ab.a,
          b = ab.b;
        if (a === 0 && b === 0) {
          return 0;
        }
        var index = 0,
          parent = el.parentNode;
        if (parent) {
          var childNodes = parent.childNodes,
            len = childNodes.length,
            elType = el.tagName,
            count = len - 1,
            child,
            ret;
          for (; count >= 0; count--) {
            child = childNodes[count];
            if (child.tagName === elType) {
              index++;
              ret = matchIndexByAb(index, a, b, child === el);
              if (ret !== undefined) {
                return ret;
              }
            }
          }
        }
        return 0;
      },
      lang: function (el, lang) {
        var elLang;
        lang = unEscape(lang.toLowerCase());
        do {
          if ((elLang = (isContextXML ?
            el.getAttribute('xml:lang') || el.getAttribute('lang') :
              el.lang))) {
            elLang = elLang.toLowerCase();
            return elLang === lang || elLang.indexOf(lang + '-') === 0;
          }
        } while ((el = el.parentNode) && el.nodeType === 1);
        return false;
      },
      not: function (el, negationArg) {
        return !matchExpr[negationArg.t](el, negationArg.value);
      }
    };
    
    var pseudoIdentExpr = {
      empty: function (el) {
        var childNodes = el.childNodes,
          index = 0,
          len = childNodes.length - 1,
          child,
          nodeType;
        for (; index < len; index++) {
          child = childNodes[index];
          nodeType = child.nodeType;
          // only element nodes and content nodes
          // (such as Dom [Dom-LEVEL-3-CORE] text nodes,
          // CDATA nodes, and entity references
          if (nodeType === 1 || nodeType === 3 || nodeType === 4 || nodeType === 5) {
            return 0;
          }
        }
        return 1;
      },
      root: function (el) {
        if (el.nodeType === 9) {
          return true;
        }
        return el.ownerDocument &&
          el === el.ownerDocument.documentElement;
      },
      'first-child': function (el) {
        return pseudoFnExpr['nth-child'](el, 1);
      },
      'last-child': function (el) {
        return pseudoFnExpr['nth-last-child'](el, 1);
      },
      'first-of-type': function (el) {
        return pseudoFnExpr['nth-of-type'](el, 1);
      },
      'last-of-type': function (el) {
        return pseudoFnExpr['nth-last-of-type'](el, 1);
      },
      'only-child': function (el) {
        return pseudoIdentExpr['first-child'](el) &&
          pseudoIdentExpr['last-child'](el);
      },
      'only-of-type': function (el) {
        return pseudoIdentExpr['first-of-type'](el) &&
          pseudoIdentExpr['last-of-type'](el);
      },
      focus: function (el) {
        var doc = el.ownerDocument;
        return doc && el === doc.activeElement &&
          (!doc.hasFocus || doc.hasFocus()) && !!(el.type || el.href || el.tabIndex >= 0);
      },
      target: function (el) {
        var hash = location.hash;
        return hash && hash.slice(1) === getAttr(el, 'id');
      },
      enabled: function (el) {
        return !el.disabled;
      },
      disabled: function (el) {
        return el.disabled;
      },
      checked: function (el) {
        var nodeName = el.nodeName.toLowerCase();
        return (nodeName === 'input' && el.checked) ||
          (nodeName === 'option' && el.selected);
      }
    };
    
    var attributeExpr = {
      '~=': function (elValue, value) {
        if (!value || value.indexOf(' ') > -1) {
          return 0;
        }
        return (' ' + elValue + ' ').indexOf(' ' + value + ' ') !== -1;
      },
      '|=': function (elValue, value) {
        return (' ' + elValue).indexOf(' ' + value + '-') !== -1;
      },
      '^=': function (elValue, value) {
        return value && util.startsWith(elValue, value);
      },
      '$=': function (elValue, value) {
        return value && util.endsWith(elValue, value);
      },
      '*=': function (elValue, value) {
        return value && elValue.indexOf(value) !== -1;
      },
      '=': function (elValue, value) {
        return elValue === value;
      }
    };
    
    var relativeExpr = {
      '>': {
        dir: 'parentNode',
        immediate: 1
      },
      ' ': {
        dir: 'parentNode'
      },
      '+': {
        dir: 'previousSibling',
        immediate: 1
      },
      '~': {
        dir: 'previousSibling'
      }
    };
    
    matchExpr = {
      tag: isTag,
      cls: hasSingleClass,
      id: function (el, value) {
        return getAttr(el, 'id') === value;
      },
      attrib: function (el, value) {
        var name = value.ident;
        if (!isContextXML) {
          name = name.toLowerCase();
        }
        var elValue = getAttr(el, name);
        var match = value.match;
        if (!match && elValue !== undefined) {
          return 1;
        } else if (match) {
          if (elValue === undefined) {
            return 0;
          }
          var matchFn = attributeExpr[match];
          if (matchFn) {
            return matchFn(elValue + '', value.value + '');
          }
        }
        return 0;
      },
      pseudo: function (el, value) {
        var fn, fnStr, ident;
        if ((fnStr = value.fn)) {
          if (!(fn = pseudoFnExpr[fnStr])) {
            throw new SyntaxError('Syntax error: not support pseudo: ' + fnStr);
          }
          return fn(el, value.param);
        }
        if ((ident = value.ident)) {
          if (!pseudoIdentExpr[ident]) {
            throw new SyntaxError('Syntax error: not support pseudo: ' + ident);
          }
          return pseudoIdentExpr[ident](el);
        }
        return 0;
      }
    };
    
    function unEscape(str) {
      return str.replace(unescape, unescapeFn);
    }
    
    parser.lexer.yy = {
      trim: util.trim,
      unEscape: unEscape,
      unEscapeStr: function (str) {
        return this.unEscape(str.slice(1, -1));
      }
    };
    
    function resetStatus() {
      subMatchesCache = {};
    }
    
    function dir(el, direction) {
      do {
        el = el[direction];
      } while (el && el.nodeType !== 1);
      return el;
    }
    
    function getAb(param) {
      var a = 0,
        match,
        b = 0;
      if (typeof param === 'number') {
        b = param;
      } else if (param === 'odd') {
        a = 2;
        b = 1;
      } else if (param === 'even') {
        a = 2;
        b = 0;
      } else if ((match = param.replace(/\s/g, '').match(aNPlusB))) {
        if (match[1]) {
          a = parseInt(match[2], 10);
          if (isNaN(a)) {
            if (match[2] === '-') {
              a = -1;
            } else {
              a = 1;
            }
          }
        } else {
          a = 0;
        }
        b = parseInt(match[3], 10) || 0;
      }
      return {
        a: a,
        b: b
      };
    }
    
    function matchIndexByAb(index, a, b, eq) {
      if (a === 0) {
        if (index === b) {
          return eq;
        }
      } else {
        if ((index - b) / a >= 0 && (index - b) % a === 0 && eq) {
          return 1;
        }
      }
      return undefined;
    }
    
    function isXML(elem) {
      var documentElement = elem && (elem.ownerDocument || elem).documentElement;
      return documentElement ? documentElement.nodeName.toLowerCase() !== 'html' : false;
    }
    
    function matches(str, seeds) {
      return select(str, null, seeds);
    }
    
    function singleMatch(el, match) {
      if (!match) {
        return true;
      }
      if (!el) {
        return false;
      }
    
      if (el.nodeType === 9) {
        return false;
      }
    
      var matched = 1,
        matchSuffix = match.suffix,
        matchSuffixLen,
        matchSuffixIndex;
    
      if (match.t === 'tag') {
        matched &= matchExpr.tag(el, match.value);
      }
    
      if (matched && matchSuffix) {
        matchSuffixLen = matchSuffix.length;
        matchSuffixIndex = 0;
        for (; matched && matchSuffixIndex < matchSuffixLen; matchSuffixIndex++) {
          var singleMatchSuffix = matchSuffix[matchSuffixIndex],
            singleMatchSuffixType = singleMatchSuffix.t;
          if (matchExpr[singleMatchSuffixType]) {
            matched &= matchExpr[singleMatchSuffixType](el, singleMatchSuffix.value);
          }
        }
      }
    
      return matched;
    }
    
    // match by adjacent immediate single selector match
    function matchImmediate(el, match) {
      var matched = 1,
        startEl = el,
        relativeOp,
        startMatch = match;
    
      do {
        matched &= singleMatch(el, match);
        if (matched) {
          // advance
          match = match && match.prev;
          if (!match) {
            return true;
          }
          relativeOp = relativeExpr[match.nextCombinator];
          el = dir(el, relativeOp.dir);
          if (!relativeOp.immediate) {
            return {
              // advance for non-immediate
              el: el,
              match: match
            };
          }
        } else {
          relativeOp = relativeExpr[match.nextCombinator];
          if (relativeOp.immediate) {
            // retreat but advance startEl
            return {
              el: dir(startEl, relativeExpr[startMatch.nextCombinator].dir),
              match: startMatch
            };
          } else {
            // advance (before immediate match + jump unmatched)
            return {
              el: el && dir(el, relativeOp.dir),
              match: match
            };
          }
        }
      } while (el);
    
      // only occur when match immediate
      return {
        el: dir(startEl, relativeExpr[startMatch.nextCombinator].dir),
        match: startMatch
      };
    }
    
    // find fixed part, fixed with seeds
    function findFixedMatchFromHead(el, head) {
      var relativeOp,
        cur = head;
    
      do {
        if (!singleMatch(el, cur)) {
          return null;
        }
        cur = cur.prev;
        if (!cur) {
          return true;
        }
        relativeOp = relativeExpr[cur.nextCombinator];
        el = dir(el, relativeOp.dir);
      } while (el && relativeOp.immediate);
      if (!el) {
        return null;
      }
      return {
        el: el,
        match: cur
      };
    }
    
    function genId(el) {
      var selectorId;
    
      if (isContextXML) {
        if (!(selectorId = el.getAttribute(EXPANDO_SELECTOR_KEY))) {
          el.setAttribute(EXPANDO_SELECTOR_KEY, selectorId = (+new Date() + '_' + (++uuid)));
        }
      } else {
        if (!(selectorId = el[EXPANDO_SELECTOR_KEY])) {
          selectorId = el[EXPANDO_SELECTOR_KEY] = (+new Date()) + '_' + (++uuid);
        }
      }
    
      return selectorId;
    }
    
    function matchSub(el, match) {
      var selectorId = genId(el),
        matchKey;
      matchKey = selectorId + '_' + (match.order || 0);
      if (matchKey in subMatchesCache) {
        return subMatchesCache[matchKey];
      }
      subMatchesCache[matchKey] = matchSubInternal(el, match);
      return subMatchesCache[matchKey];
    }
    
    // recursive match by sub selector string from right to left
    // grouped by immediate selectors
    function matchSubInternal(el, match) {
      var matchImmediateRet = matchImmediate(el, match);
      if (matchImmediateRet === true) {
        return true;
      } else {
        el = matchImmediateRet.el;
        match = matchImmediateRet.match;
        while (el) {
          if (matchSub(el, match)) {
            return true;
          }
          el = dir(el, relativeExpr[match.nextCombinator].dir);
        }
        return false;
      }
    }
    
    function select(str, context, seeds) {
      if (!caches[str]) {
        caches[str] = parser.parse(str);
      }
    
      var selector = caches[str],
        groupIndex = 0,
        groupLen = selector.length,
        contextDocument,
        group,
        ret = [];
    
      if (seeds) {
        context = context || seeds[0].ownerDocument;
      }
    
      contextDocument = context && context.ownerDocument || typeof document !== 'undefined' && document;
    
      if (context && context.nodeType === 9 && !contextDocument) {
        contextDocument = context;
      }
    
      context = context || contextDocument;
    
      isContextXML = isXML(context);
    
      for (; groupIndex < groupLen; groupIndex++) {
        resetStatus();
    
        group = selector[groupIndex];
    
        var suffix = group.suffix,
          suffixIndex,
          suffixLen,
          seedsIndex,
          mySeeds = seeds,
          seedsLen,
          id = null;
    
        if (!mySeeds) {
          if (suffix && !isContextXML) {
            suffixIndex = 0;
            suffixLen = suffix.length;
            for (; suffixIndex < suffixLen; suffixIndex++) {
              var singleSuffix = suffix[suffixIndex];
              if (singleSuffix.t === 'id') {
                id = singleSuffix.value;
                break;
              }
            }
          }
    
          if (id) {
            // http://yiminghe.github.io/lab/playground/fragment-selector/selector.html
            var doesNotHasById = !context.getElementById,
              contextInDom = util.contains(contextDocument, context),
              tmp = doesNotHasById ? (
                contextInDom ?
                  contextDocument.getElementById(id) :
                  null
              ) : context.getElementById(id);
            // id bug
            // https://github.com/kissyteam/kissy/issues/67
            if (!tmp && doesNotHasById || tmp && getAttr(tmp, 'id') !== id) {
              var tmps = util.getElementsByTagName('*', context),
                tmpLen = tmps.length,
                tmpI = 0;
              for (; tmpI < tmpLen; tmpI++) {
                tmp = tmps[tmpI];
                if (getAttr(tmp, 'id') === id) {
                  mySeeds = [tmp];
                  break;
                }
              }
              if (tmpI === tmpLen) {
                mySeeds = [];
              }
            } else {
              if (contextInDom && tmp && context !== contextDocument) {
                tmp = util.contains(context, tmp) ? tmp : null;
              }
              mySeeds = tmp ? [tmp] : [];
            }
          } else {
            mySeeds = util.getElementsByTagName(group.value || '*', context);
          }
        }
    
        seedsIndex = 0;
        seedsLen = mySeeds.length;
    
        if (!seedsLen) {
          continue;
        }
    
        for (; seedsIndex < seedsLen; seedsIndex++) {
          var seed = mySeeds[seedsIndex];
          var matchHead = findFixedMatchFromHead(seed, group);
          if (matchHead === true) {
            ret.push(seed);
          } else if (matchHead) {
            if (matchSub(matchHead.el, matchHead.match)) {
              ret.push(seed);
            }
          }
        }
      }
    
      if (groupLen > 1) {
        ret = util.unique(ret);
      }
    
      return ret;
    }
    
    module.exports = select;
    
    select.parse = function (str) {
      return parser.parse(str);
    };
    
    select.matches = matches;
    
    select.util = util;
    
    select.version = '@VERSION@';
    /**
     * @ignore
     * note 2013-03-28
     *  - use recursive call to replace backtracking algorithm
     *
     * refer
     *  - http://www.w3.org/TR/selectors/
     *  - http://www.impressivewebs.com/browser-support-css3-selectors/
     *  - http://blogs.msdn.com/ie/archive/2010/05/13/the-css-corner-css3-selectors.aspx
     *  - http://sizzlejs.com/
     */

/***/ },
/* 462 */
/***/ function(module, exports) {

    /**
     * attr fix for old ie
     * @author yiminghe@gmail.com
     */
    var R_BOOLEAN = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
      R_FOCUSABLE = /^(?:button|input|object|select|textarea)$/i,
      R_CLICKABLE = /^a(?:rea)?$/i,
      R_INVALID_CHAR = /:|^on/;
    
    var attrFix = {},
      propFix,
      attrHooks = {
        // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
        tabindex: {
          get: function (el) {
            // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
            var attributeNode = el.getAttributeNode('tabindex');
            return attributeNode && attributeNode.specified ?
              parseInt(attributeNode.value, 10) :
              R_FOCUSABLE.test(el.nodeName) ||
              R_CLICKABLE.test(el.nodeName) && el.href ?
                0 :
                undefined;
          }
        }
      },
      boolHook = {
        get: function (elem, name) {
          // 转发到 prop 方法
          return elem[propFix[name] || name] ?
            // 根据 w3c attribute , true 时返回属性名字符串
            name.toLowerCase() :
            undefined;
        }
      },
      attrNodeHook = {};
    
    attrHooks.style = {
      get: function (el) {
        return el.style.cssText;
      }
    };
    
    propFix = {
      hidefocus: 'hideFocus',
      tabindex: 'tabIndex',
      readonly: 'readOnly',
      'for': 'htmlFor',
      'class': 'className',
      maxlength: 'maxLength',
      cellspacing: 'cellSpacing',
      cellpadding: 'cellPadding',
      rowspan: 'rowSpan',
      colspan: 'colSpan',
      usemap: 'useMap',
      frameborder: 'frameBorder',
      contenteditable: 'contentEditable'
    };
    
    var ua = typeof navigator !== 'undefined' ? navigator.userAgent : '';
    var doc = typeof document !== 'undefined' ? document : {};
    
    function numberify(s) {
      var c = 0;
      // convert '1.2.3.4' to 1.234
      return parseFloat(s.replace(/\./g, function () {
        return (c++ === 0) ? '.' : '';
      }));
    }
    
    function ieVersion() {
      var m, v;
      if ((m = ua.match(/MSIE ([^;]*)|Trident.*; rv(?:\s|:)?([0-9.]+)/)) &&
        (v = (m[1] || m[2]))) {
        return doc.documentMode || numberify(v);
      }
    }
    
    function mix(s, t) {
      for (var p in t) {
        s[p] = t[p];
      }
    }
    
    function each(arr, fn) {
      var i = 0, l = arr.length;
      for (; i < l; i++) {
        if (fn(arr[i], i) === false) {
          break;
        }
      }
    }
    var ie = ieVersion();
    
    if (ie && ie < 8) {
      attrHooks.style.set = function (el, val) {
        el.style.cssText = val;
      };
    
      // get attribute value from attribute node for ie
      mix(attrNodeHook, {
        get: function (elem, name) {
          var ret = elem.getAttributeNode(name);
          // Return undefined if attribute node specified by user
          return ret && (
            // fix #100
          ret.specified || ret.nodeValue) ?
            ret.nodeValue :
            undefined;
        }
      });
    
      // ie6,7 不区分 attribute 与 property
      mix(attrFix, propFix);
    
      // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
      attrHooks.tabIndex = attrHooks.tabindex;
    
      // 不光是 href, src, 还有 rowspan 等非 mapping 属性,也需要用第 2 个参数来获取原始值
      // 注意 colSpan rowSpan 已经由 propFix 转为大写
      each(['href', 'src', 'width', 'height', 'colSpan', 'rowSpan'], function (name) {
        attrHooks[name] = {
          get: function (elem) {
            var ret = elem.getAttribute(name, 2);
            return ret === null ? undefined : ret;
          }
        };
      });
    
      attrHooks.placeholder = {
        get: function (elem, name) {
          return elem[name] || attrNodeHook.get(elem, name);
        }
      };
    }
    
    if (ie) {
      var hrefFix = attrHooks.href = attrHooks.href || {};
      hrefFix.set = function (el, val, name) {
        var childNodes = el.childNodes,
          b,
          len = childNodes.length,
          allText = len > 0;
        for (len = len - 1; len >= 0; len--) {
          if (childNodes[len].nodeType !== 3) {
            allText = 0;
          }
        }
        if (allText) {
          b = el.ownerDocument.createElement('b');
          b.style.display = 'none';
          el.appendChild(b);
        }
        el.setAttribute(name, '' + val);
        if (b) {
          el.removeChild(b);
        }
      };
    }
    
    var RE_TRIM = /^[\s\xa0]+|[\s\xa0]+$/g,
      trim = String.prototype.trim;
    var SPACE = ' ';
    
    var getElementsByTagName;
    getElementsByTagName = function (name, context) {
      return context.getElementsByTagName(name);
    };
    
    if (doc.createElement) {
      var div = doc.createElement('div');
      div.appendChild(document.createComment(''));
      if (div.getElementsByTagName('*').length) {
        getElementsByTagName = function (name, context) {
          var nodes = context.getElementsByTagName(name),
            needsFilter = name === '*';
          // <input id='length'>
          if (needsFilter || typeof nodes.length !== 'number') {
            var ret = [],
              i = 0,
              el;
            while ((el = nodes[i++])) {
              if (!needsFilter || el.nodeType === 1) {
                ret.push(el);
              }
            }
            return ret;
          } else {
            return nodes;
          }
        };
      }
    }
    
    var compareNodeOrder = ('sourceIndex' in (doc && doc.documentElement || {})) ? function (a, b) {
      return a.sourceIndex - b.sourceIndex;
    } : function (a, b) {
      if (!a.compareDocumentPosition || !b.compareDocumentPosition) {
        return a.compareDocumentPosition ? -1 : 1;
      }
      var bit = a.compareDocumentPosition(b) & 4;
      return bit ? -1 : 1;
    };
    
    var util = module.exports = {
      ie: ie,
    
      unique: (function () {
        var hasDuplicate,
          baseHasDuplicate = true;
    
        // Here we check if the JavaScript engine is using some sort of
        // optimization where it does not always call our comparison
        // function. If that is the case, discard the hasDuplicate value.
        // Thus far that includes Google Chrome.
        [0, 0].sort(function () {
          baseHasDuplicate = false;
          return 0;
        });
    
        function sortOrder(a, b) {
          if (a === b) {
            hasDuplicate = true;
            return 0;
          }
    
          return compareNodeOrder(a, b);
        }
    
        // 排序去重
        return function (elements) {
          hasDuplicate = baseHasDuplicate;
          elements.sort(sortOrder);
    
          if (hasDuplicate) {
            var i = 1, len = elements.length;
            while (i < len) {
              if (elements[i] === elements[i - 1]) {
                elements.splice(i, 1);
                --len;
              } else {
                i++;
              }
            }
          }
          return elements;
        };
      })(),
    
      getElementsByTagName: getElementsByTagName,
    
      getSimpleAttr: function (el, name) {
        var ret = el && el.getAttributeNode(name);
        if (ret && ret.specified) {
          return 'value' in ret ? ret.value : ret.nodeValue;
        }
        return undefined;
      },
    
      contains: ie ? function (a, b) {
        if (a.nodeType === 9) {
          a = a.documentElement;
        }
        // !a.contains => a===document || text
        // 注意原生 contains 判断时 a===b 也返回 true
        b = b.parentNode;
    
        if (a === b) {
          return true;
        }
    
        // when b is document, a.contains(b) 不支持的接口 in ie
        if (b && b.nodeType === 1) {
          return a.contains && a.contains(b);
        } else {
          return false;
        }
      } : function (a, b) {
        return !!(a.compareDocumentPosition(b) & 16);
      },
    
      isTag: function (el, value) {
        return value === '*' || el.nodeName.toLowerCase() === value.toLowerCase();
      },
    
      hasSingleClass: function (el, cls) {
        // consider xml
        // https://github.com/kissyteam/kissy/issues/532
        var className = el && util.getSimpleAttr(el, 'class');
        return className && (className = className.replace(/[\r\t\n]/g, SPACE)) &&
          (SPACE + className + SPACE).indexOf(SPACE + cls + SPACE) > -1;
      },
    
      startsWith: function (str, prefix) {
        return str.lastIndexOf(prefix, 0) === 0;
      },
    
      endsWith: function (str, suffix) {
        var ind = str.length - suffix.length;
        return ind >= 0 && str.indexOf(suffix, ind) === ind;
      },
    
      trim: trim ?
        function (str) {
          return str == null ? '' : trim.call(str);
        } :
        function (str) {
          return str == null ? '' : (str + '').replace(RE_TRIM, '');
        },
    
      attr: function (el, name) {
        var attrNormalizer, ret;
        // scrollLeft
        name = name.toLowerCase();
        // custom attrs
        name = attrFix[name] || name;
        if (R_BOOLEAN.test(name)) {
          attrNormalizer = boolHook;
        } else if (R_INVALID_CHAR.test(name)) {
          // only old ie?
          attrNormalizer = attrNodeHook;
        } else {
          attrNormalizer = attrHooks[name];
        }
        if (el && el.nodeType === 1) {
          // browsers index elements by id/name on forms, give priority to attributes.
          if (el.nodeName.toLowerCase() === 'form') {
            attrNormalizer = attrNodeHook;
          }
          if (attrNormalizer && attrNormalizer.get) {
            return attrNormalizer.get(el, name);
          }
          ret = el.getAttribute(name);
          if (ret === '') {
            var attrNode = el.getAttributeNode(name);
            if (!attrNode || !attrNode.specified) {
              return undefined;
            }
          }
          // standard browser non-existing attribute return null
          // ie<8 will return undefined , because it return property
          // so norm to undefined
          return ret === null ? undefined : ret;
        }
      }
    };

/***/ },
/* 463 */
/***/ function(module, exports, __webpack_require__) {

    /*
      Generated by kison.*/
    var parser = (function (undefined) {
        /*jshint quotmark:false, loopfunc:true, indent:false, unused:false, asi:true, boss:true*/
        /* Generated by kison */
        var parser = {},
            GrammarConst = {
                'SHIFT_TYPE': 1,
                'REDUCE_TYPE': 2,
                'ACCEPT_TYPE': 0,
                'TYPE_INDEX': 0,
                'PRODUCTION_INDEX': 1,
                'TO_INDEX': 2
            };
        /*jslint quotmark: false*/
        function mix(to, from) {
            for (var f in from) {
                to[f] = from[f];
            }
        }
    
        function isArray(obj) {
            return '[object Array]' === Object.prototype.toString.call(obj);
        }
    
        function each(object, fn, context) {
            if (object) {
                var key,
                    val,
                    length,
                    i = 0;
    
                context = context || null;
    
                if (!isArray(object)) {
                    for (key in object) {
                        // can not use hasOwnProperty
                        if (fn.call(context, object[key], key, object) === false) {
                            break;
                        }
                    }
                } else {
                    length = object.length;
                    for (val = object[0]; i < length; val = object[++i]) {
                        if (fn.call(context, val, i, object) === false) {
                            break;
                        }
                    }
                }
            }
        }
    
        function inArray(item, arr) {
            for (var i = 0, l = arr.length; i < l; i++) {
                if (arr[i] === item) {
                    return true;
                }
            }
            return false;
        }
        var Lexer = function Lexer(cfg) {
    
            var self = this;
    
            /*
         lex rules.
         @type {Object[]}
         @example
         [
         {
         regexp:'\\w+',
         state:['xx'],
         token:'c',
         // this => lex
         action:function(){}
         }
         ]
         */
            self.rules = [];
    
            mix(self, cfg);
    
            /*
         Input languages
         @type {String}
         */
    
            self.resetInput(self.input);
        };
        Lexer.prototype = {
            'resetInput': function (input) {
                mix(this, {
                    input: input,
                    matched: '',
                    stateStack: [Lexer.STATIC.INITIAL],
                    match: '',
                    text: '',
                    firstLine: 1,
                    lineNumber: 1,
                    lastLine: 1,
                    firstColumn: 1,
                    lastColumn: 1
                });
            },
            'getCurrentRules': function () {
                var self = this,
                    currentState = self.stateStack[self.stateStack.length - 1],
                    rules = [];
                //#JSCOVERAGE_IF
                if (self.mapState) {
                    currentState = self.mapState(currentState);
                }
                each(self.rules, function (r) {
                    var state = r.state || r[3];
                    if (!state) {
                        if (currentState === Lexer.STATIC.INITIAL) {
                            rules.push(r);
                        }
                    } else if (inArray(currentState, state)) {
                        rules.push(r);
                    }
                });
                return rules;
            },
            'pushState': function (state) {
                this.stateStack.push(state);
            },
            'popState': function (num) {
                num = num || 1;
                var ret;
                while (num--) {
                    ret = this.stateStack.pop();
                }
                return ret;
            },
            'showDebugInfo': function () {
                var self = this,
                    DEBUG_CONTEXT_LIMIT = Lexer.STATIC.DEBUG_CONTEXT_LIMIT,
                    matched = self.matched,
                    match = self.match,
                    input = self.input;
                matched = matched.slice(0, matched.length - match.length);
                //#JSCOVERAGE_IF 0
                var past = (matched.length > DEBUG_CONTEXT_LIMIT ? '...' : '') +
                    matched.slice(0 - DEBUG_CONTEXT_LIMIT).replace(/\n/, ' '),
                    next = match + input;
                //#JSCOVERAGE_ENDIF
                next = next.slice(0, DEBUG_CONTEXT_LIMIT) +
                    (next.length > DEBUG_CONTEXT_LIMIT ? '...' : '');
                return past + next + '\n' + new Array(past.length + 1).join('-') + '^';
            },
            'mapSymbol': function mapSymbolForCodeGen(t) {
                return this.symbolMap[t];
            },
            'mapReverseSymbol': function (rs) {
                var self = this,
                    symbolMap = self.symbolMap,
                    i,
                    reverseSymbolMap = self.reverseSymbolMap;
                if (!reverseSymbolMap && symbolMap) {
                    reverseSymbolMap = self.reverseSymbolMap = {};
                    for (i in symbolMap) {
                        reverseSymbolMap[symbolMap[i]] = i;
                    }
                }
                //#JSCOVERAGE_IF
                if (reverseSymbolMap) {
                    return reverseSymbolMap[rs];
                } else {
                    return rs;
                }
            },
            'lex': function () {
                var self = this,
                    input = self.input,
                    i,
                    rule,
                    m,
                    ret,
                    lines,
                    rules = self.getCurrentRules();
    
                self.match = self.text = '';
    
                if (!input) {
                    return self.mapSymbol(Lexer.STATIC.END_TAG);
                }
    
                for (i = 0; i < rules.length; i++) {
                    rule = rules[i];
                    //#JSCOVERAGE_IF 0
                    var regexp = rule.regexp || rule[1],
                        token = rule.token || rule[0],
                        action = rule.action || rule[2] || undefined;
                    //#JSCOVERAGE_ENDIF
                    if ((m = input.match(regexp))) {
                        lines = m[0].match(/\n.*/g);
                        if (lines) {
                            self.lineNumber += lines.length;
                        }
                        mix(self, {
                            firstLine: self.lastLine,
                            lastLine: self.lineNumber + 1,
                            firstColumn: self.lastColumn,
                            lastColumn: lines ?
                                lines[lines.length - 1].length - 1 : self.lastColumn + m[0].length
                        });
                        var match;
                        // for error report
                        match = self.match = m[0];
    
                        // all matches
                        self.matches = m;
                        // may change by user
                        self.text = match;
                        // matched content utils now
                        self.matched += match;
                        ret = action && action.call(self);
                        if (ret === undefined) {
                            ret = token;
                        } else {
                            ret = self.mapSymbol(ret);
                        }
                        input = input.slice(match.length);
                        self.input = input;
    
                        if (ret) {
                            return ret;
                        } else {
                            // ignore
                            return self.lex();
                        }
                    }
                }
            }
        };
        Lexer.STATIC = {
            'INITIAL': 'I',
            'DEBUG_CONTEXT_LIMIT': 20,
            'END_TAG': '$EOF'
        };
        var lexer = new Lexer({
            'rules': [
                ['b', /^\[(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['c', /^(?:[\t\r\n\f\x20]*)\]/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['d', /^(?:[\t\r\n\f\x20]*)~=(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['e', /^(?:[\t\r\n\f\x20]*)\|=(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['f', /^(?:[\t\r\n\f\x20]*)\^=(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['g', /^(?:[\t\r\n\f\x20]*)\$=(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['h', /^(?:[\t\r\n\f\x20]*)\*=(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['i', /^(?:[\t\r\n\f\x20]*)\=(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['j', /^(?:(?:[\w]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))*)\(/,
                    function () {
                        this.text = this.yy.trim(this.text).slice(0, -1);
                        this.pushState('fn');
                    }
                ],
                ['k', /^[^\)]*/,
                    function () {
                        this.popState();
                    },
                    ['fn']
                ],
                ['l', /^(?:[\t\r\n\f\x20]*)\)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['m', /^:not\((?:[\t\r\n\f\x20]*)/i,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['n', /^(?:(?:[\w]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))*)/,
                    function () {
                        this.text = this.yy.unEscape(this.text);
                    }
                ],
                ['o', /^"(\\"|[^"])*"/,
                    function () {
                        this.text = this.yy.unEscapeStr(this.text);
                    }
                ],
                ['o', /^'(\\'|[^'])*'/,
                    function () {
                        this.text = this.yy.unEscapeStr(this.text);
                    }
                ],
                ['p', /^#(?:(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))+)/,
                    function () {
                        this.text = this.yy.unEscape(this.text.slice(1));
                    }
                ],
                ['q', /^\.(?:(?:[\w]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))*)/,
                    function () {
                        this.text = this.yy.unEscape(this.text.slice(1));
                    }
                ],
                ['r', /^(?:[\t\r\n\f\x20]*),(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['s', /^::?/, 0],
                ['t', /^(?:[\t\r\n\f\x20]*)\+(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['u', /^(?:[\t\r\n\f\x20]*)>(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['v', /^(?:[\t\r\n\f\x20]*)~(?:[\t\r\n\f\x20]*)/,
                    function () {
                        this.text = this.yy.trim(this.text);
                    }
                ],
                ['w', /^\*/, 0],
                ['x', /^(?:[\t\r\n\f\x20]+)/, 0],
                ['y', /^./, 0]
            ]
        });
        parser.lexer = lexer;
        lexer.symbolMap = {
            '$EOF': 'a',
            'LEFT_BRACKET': 'b',
            'RIGHT_BRACKET': 'c',
            'INCLUDES': 'd',
            'DASH_MATCH': 'e',
            'PREFIX_MATCH': 'f',
            'SUFFIX_MATCH': 'g',
            'SUBSTRING_MATCH': 'h',
            'ALL_MATCH': 'i',
            'FUNCTION': 'j',
            'PARAMETER': 'k',
            'RIGHT_PARENTHESES': 'l',
            'NOT': 'm',
            'IDENT': 'n',
            'STRING': 'o',
            'HASH': 'p',
            'CLASS': 'q',
            'COMMA': 'r',
            'COLON': 's',
            'PLUS': 't',
            'GREATER': 'u',
            'TILDE': 'v',
            'UNIVERSAL': 'w',
            'S': 'x',
            'INVALID': 'y',
            '$START': 'z',
            'selectors_group': 'aa',
            'selector': 'ab',
            'simple_selector_sequence': 'ac',
            'combinator': 'ad',
            'type_selector': 'ae',
            'id_selector': 'af',
            'class_selector': 'ag',
            'attrib_match': 'ah',
            'attrib': 'ai',
            'attrib_val': 'aj',
            'pseudo': 'ak',
            'negation': 'al',
            'negation_arg': 'am',
            'suffix_selector': 'an',
            'suffix_selectors': 'ao'
        };
        parser.productions = [
            ['z', ['aa']],
            ['aa', ['ab'],
                function () {
                    return [this.$1];
                }
            ],
            ['aa', ['aa', 'r', 'ab'],
                function () {
                    this.$1.push(this.$3);
                }
            ],
            ['ab', ['ac']],
            ['ab', ['ab', 'ad', 'ac'],
                function () {
                    // LinkedList
    
                    this.$1.nextCombinator = this.$3.prevCombinator = this.$2;
                    var order;
                    order = this.$1.order = this.$1.order || 0;
                    this.$3.order = order + 1;
                    this.$3.prev = this.$1;
                    this.$1.next = this.$3;
                    return this.$3;
                }
            ],
            ['ad', ['t']],
            ['ad', ['u']],
            ['ad', ['v']],
            ['ad', ['x'],
                function () {
                    return ' ';
                }
            ],
            ['ae', ['n'],
                function () {
                    return {
                        t: 'tag',
                        value: this.$1
                    };
                }
            ],
            ['ae', ['w'],
                function () {
                    return {
                        t: 'tag',
                        value: this.$1
                    };
                }
            ],
            ['af', ['p'],
                function () {
                    return {
                        t: 'id',
                        value: this.$1
                    };
                }
            ],
            ['ag', ['q'],
                function () {
                    return {
                        t: 'cls',
                        value: this.$1
                    };
                }
            ],
            ['ah', ['f']],
            ['ah', ['g']],
            ['ah', ['h']],
            ['ah', ['i']],
            ['ah', ['d']],
            ['ah', ['e']],
            ['ai', ['b', 'n', 'c'],
                function () {
                    return {
                        t: 'attrib',
                        value: {
                            ident: this.$2
                        }
                    };
                }
            ],
            ['aj', ['n']],
            ['aj', ['o']],
            ['ai', ['b', 'n', 'ah', 'aj', 'c'],
                function () {
                    return {
                        t: 'attrib',
                        value: {
                            ident: this.$2,
                            match: this.$3,
                            value: this.$4
                        }
                    };
                }
            ],
            ['ak', ['s', 'j', 'k', 'l'],
                function () {
                    return {
                        t: 'pseudo',
                        value: {
                            fn: this.$2.toLowerCase(),
                            param: this.$3
                        }
                    };
                }
            ],
            ['ak', ['s', 'n'],
                function () {
                    return {
                        t: 'pseudo',
                        value: {
                            ident: this.$2.toLowerCase()
                        }
                    };
                }
            ],
            ['al', ['m', 'am', 'l'],
                function () {
                    return {
                        t: 'pseudo',
                        value: {
                            fn: 'not',
                            param: this.$2
                        }
                    };
                }
            ],
            ['am', ['ae']],
            ['am', ['af']],
            ['am', ['ag']],
            ['am', ['ai']],
            ['am', ['ak']],
            ['an', ['af']],
            ['an', ['ag']],
            ['an', ['ai']],
            ['an', ['ak']],
            ['an', ['al']],
            ['ao', ['an'],
                function () {
                    return [this.$1];
                }
            ],
            ['ao', ['ao', 'an'],
                function () {
                    this.$1.push(this.$2);
                }
            ],
            ['ac', ['ae']],
            ['ac', ['ao'],
                function () {
                    return {
                        suffix: this.$1
                    };
                }
            ],
            ['ac', ['ae', 'ao'],
                function () {
                    return {
                        t: 'tag',
                        value: this.$1.value,
                        suffix: this.$2
                    };
                }
            ]
        ];
        parser.table = {
            'gotos': {
                '0': {
                    'aa': 8,
                    'ab': 9,
                    'ae': 10,
                    'af': 11,
                    'ag': 12,
                    'ai': 13,
                    'ak': 14,
                    'al': 15,
                    'an': 16,
                    'ao': 17,
                    'ac': 18
                },
                '2': {
                    'ae': 20,
                    'af': 21,
                    'ag': 22,
                    'ai': 23,
                    'ak': 24,
                    'am': 25
                },
                '9': {
                    'ad': 33
                },
                '10': {
                    'af': 11,
                    'ag': 12,
                    'ai': 13,
                    'ak': 14,
                    'al': 15,
                    'an': 16,
                    'ao': 34
                },
                '17': {
                    'af': 11,
                    'ag': 12,
                    'ai': 13,
                    'ak': 14,
                    'al': 15,
                    'an': 35
                },
                '19': {
                    'ah': 43
                },
                '28': {
                    'ab': 46,
                    'ae': 10,
                    'af': 11,
                    'ag': 12,
                    'ai': 13,
                    'ak': 14,
                    'al': 15,
                    'an': 16,
                    'ao': 17,
                    'ac': 18
                },
                '33': {
                    'ae': 10,
                    'af': 11,
                    'ag': 12,
                    'ai': 13,
                    'ak': 14,
                    'al': 15,
                    'an': 16,
                    'ao': 17,
                    'ac': 47
                },
                '34': {
                    'af': 11,
                    'ag': 12,
                    'ai': 13,
                    'ak': 14,
                    'al': 15,
                    'an': 35
                },
                '43': {
                    'aj': 50
                },
                '46': {
                    'ad': 33
                }
            },
            'action': {
                '0': {
                    'b': [1, undefined, 1],
                    'm': [1, undefined, 2],
                    'n': [1, undefined, 3],
                    'p': [1, undefined, 4],
                    'q': [1, undefined, 5],
                    's': [1, undefined, 6],
                    'w': [1, undefined, 7]
                },
                '1': {
                    'n': [1, undefined, 19]
                },
                '2': {
                    'b': [1, undefined, 1],
                    'n': [1, undefined, 3],
                    'p': [1, undefined, 4],
                    'q': [1, undefined, 5],
                    's': [1, undefined, 6],
                    'w': [1, undefined, 7]
                },
                '3': {
                    'a': [2, 9],
                    'r': [2, 9],
                    't': [2, 9],
                    'u': [2, 9],
                    'v': [2, 9],
                    'x': [2, 9],
                    'p': [2, 9],
                    'q': [2, 9],
                    'b': [2, 9],
                    's': [2, 9],
                    'm': [2, 9],
                    'l': [2, 9]
                },
                '4': {
                    'a': [2, 11],
                    'r': [2, 11],
                    't': [2, 11],
                    'u': [2, 11],
                    'v': [2, 11],
                    'x': [2, 11],
                    'p': [2, 11],
                    'q': [2, 11],
                    'b': [2, 11],
                    's': [2, 11],
                    'm': [2, 11],
                    'l': [2, 11]
                },
                '5': {
                    'a': [2, 12],
                    'r': [2, 12],
                    't': [2, 12],
                    'u': [2, 12],
                    'v': [2, 12],
                    'x': [2, 12],
                    'p': [2, 12],
                    'q': [2, 12],
                    'b': [2, 12],
                    's': [2, 12],
                    'm': [2, 12],
                    'l': [2, 12]
                },
                '6': {
                    'j': [1, undefined, 26],
                    'n': [1, undefined, 27]
                },
                '7': {
                    'a': [2, 10],
                    'r': [2, 10],
                    't': [2, 10],
                    'u': [2, 10],
                    'v': [2, 10],
                    'x': [2, 10],
                    'p': [2, 10],
                    'q': [2, 10],
                    'b': [2, 10],
                    's': [2, 10],
                    'm': [2, 10],
                    'l': [2, 10]
                },
                '8': {
                    'a': [0],
                    'r': [1, undefined, 28]
                },
                '9': {
                    'a': [2, 1],
                    'r': [2, 1],
                    't': [1, undefined, 29],
                    'u': [1, undefined, 30],
                    'v': [1, undefined, 31],
                    'x': [1, undefined, 32]
                },
                '10': {
                    'a': [2, 38],
                    'r': [2, 38],
                    't': [2, 38],
                    'u': [2, 38],
                    'v': [2, 38],
                    'x': [2, 38],
                    'b': [1, undefined, 1],
                    'm': [1, undefined, 2],
                    'p': [1, undefined, 4],
                    'q': [1, undefined, 5],
                    's': [1, undefined, 6]
                },
                '11': {
                    'a': [2, 31],
                    'r': [2, 31],
                    't': [2, 31],
                    'u': [2, 31],
                    'v': [2, 31],
                    'x': [2, 31],
                    'p': [2, 31],
                    'q': [2, 31],
                    'b': [2, 31],
                    's': [2, 31],
                    'm': [2, 31]
                },
                '12': {
                    'a': [2, 32],
                    'r': [2, 32],
                    't': [2, 32],
                    'u': [2, 32],
                    'v': [2, 32],
                    'x': [2, 32],
                    'p': [2, 32],
                    'q': [2, 32],
                    'b': [2, 32],
                    's': [2, 32],
                    'm': [2, 32]
                },
                '13': {
                    'a': [2, 33],
                    'r': [2, 33],
                    't': [2, 33],
                    'u': [2, 33],
                    'v': [2, 33],
                    'x': [2, 33],
                    'p': [2, 33],
                    'q': [2, 33],
                    'b': [2, 33],
                    's': [2, 33],
                    'm': [2, 33]
                },
                '14': {
                    'a': [2, 34],
                    'r': [2, 34],
                    't': [2, 34],
                    'u': [2, 34],
                    'v': [2, 34],
                    'x': [2, 34],
                    'p': [2, 34],
                    'q': [2, 34],
                    'b': [2, 34],
                    's': [2, 34],
                    'm': [2, 34]
                },
                '15': {
                    'a': [2, 35],
                    'r': [2, 35],
                    't': [2, 35],
                    'u': [2, 35],
                    'v': [2, 35],
                    'x': [2, 35],
                    'p': [2, 35],
                    'q': [2, 35],
                    'b': [2, 35],
                    's': [2, 35],
                    'm': [2, 35]
                },
                '16': {
                    'a': [2, 36],
                    'r': [2, 36],
                    't': [2, 36],
                    'u': [2, 36],
                    'v': [2, 36],
                    'x': [2, 36],
                    'p': [2, 36],
                    'q': [2, 36],
                    'b': [2, 36],
                    's': [2, 36],
                    'm': [2, 36]
                },
                '17': {
                    'a': [2, 39],
                    'r': [2, 39],
                    't': [2, 39],
                    'u': [2, 39],
                    'v': [2, 39],
                    'x': [2, 39],
                    'b': [1, undefined, 1],
                    'm': [1, undefined, 2],
                    'p': [1, undefined, 4],
                    'q': [1, undefined, 5],
                    's': [1, undefined, 6]
                },
                '18': {
                    'a': [2, 3],
                    'r': [2, 3],
                    't': [2, 3],
                    'u': [2, 3],
                    'v': [2, 3],
                    'x': [2, 3]
                },
                '19': {
                    'c': [1, undefined, 36],
                    'd': [1, undefined, 37],
                    'e': [1, undefined, 38],
                    'f': [1, undefined, 39],
                    'g': [1, undefined, 40],
                    'h': [1, undefined, 41],
                    'i': [1, undefined, 42]
                },
                '20': {
                    'l': [2, 26]
                },
                '21': {
                    'l': [2, 27]
                },
                '22': {
                    'l': [2, 28]
                },
                '23': {
                    'l': [2, 29]
                },
                '24': {
                    'l': [2, 30]
                },
                '25': {
                    'l': [1, undefined, 44]
                },
                '26': {
                    'k': [1, undefined, 45]
                },
                '27': {
                    'a': [2, 24],
                    'r': [2, 24],
                    't': [2, 24],
                    'u': [2, 24],
                    'v': [2, 24],
                    'x': [2, 24],
                    'p': [2, 24],
                    'q': [2, 24],
                    'b': [2, 24],
                    's': [2, 24],
                    'm': [2, 24],
                    'l': [2, 24]
                },
                '28': {
                    'b': [1, undefined, 1],
                    'm': [1, undefined, 2],
                    'n': [1, undefined, 3],
                    'p': [1, undefined, 4],
                    'q': [1, undefined, 5],
                    's': [1, undefined, 6],
                    'w': [1, undefined, 7]
                },
                '29': {
                    'n': [2, 5],
                    'w': [2, 5],
                    'p': [2, 5],
                    'q': [2, 5],
                    'b': [2, 5],
                    's': [2, 5],
                    'm': [2, 5]
                },
                '30': {
                    'n': [2, 6],
                    'w': [2, 6],
                    'p': [2, 6],
                    'q': [2, 6],
                    'b': [2, 6],
                    's': [2, 6],
                    'm': [2, 6]
                },
                '31': {
                    'n': [2, 7],
                    'w': [2, 7],
                    'p': [2, 7],
                    'q': [2, 7],
                    'b': [2, 7],
                    's': [2, 7],
                    'm': [2, 7]
                },
                '32': {
                    'n': [2, 8],
                    'w': [2, 8],
                    'p': [2, 8],
                    'q': [2, 8],
                    'b': [2, 8],
                    's': [2, 8],
                    'm': [2, 8]
                },
                '33': {
                    'b': [1, undefined, 1],
                    'm': [1, undefined, 2],
                    'n': [1, undefined, 3],
                    'p': [1, undefined, 4],
                    'q': [1, undefined, 5],
                    's': [1, undefined, 6],
                    'w': [1, undefined, 7]
                },
                '34': {
                    'a': [2, 40],
                    'r': [2, 40],
                    't': [2, 40],
                    'u': [2, 40],
                    'v': [2, 40],
                    'x': [2, 40],
                    'b': [1, undefined, 1],
                    'm': [1, undefined, 2],
                    'p': [1, undefined, 4],
                    'q': [1, undefined, 5],
                    's': [1, undefined, 6]
                },
                '35': {
                    'a': [2, 37],
                    'r': [2, 37],
                    't': [2, 37],
                    'u': [2, 37],
                    'v': [2, 37],
                    'x': [2, 37],
                    'p': [2, 37],
                    'q': [2, 37],
                    'b': [2, 37],
                    's': [2, 37],
                    'm': [2, 37]
                },
                '36': {
                    'a': [2, 19],
                    'r': [2, 19],
                    't': [2, 19],
                    'u': [2, 19],
                    'v': [2, 19],
                    'x': [2, 19],
                    'p': [2, 19],
                    'q': [2, 19],
                    'b': [2, 19],
                    's': [2, 19],
                    'm': [2, 19],
                    'l': [2, 19]
                },
                '37': {
                    'n': [2, 17],
                    'o': [2, 17]
                },
                '38': {
                    'n': [2, 18],
                    'o': [2, 18]
                },
                '39': {
                    'n': [2, 13],
                    'o': [2, 13]
                },
                '40': {
                    'n': [2, 14],
                    'o': [2, 14]
                },
                '41': {
                    'n': [2, 15],
                    'o': [2, 15]
                },
                '42': {
                    'n': [2, 16],
                    'o': [2, 16]
                },
                '43': {
                    'n': [1, undefined, 48],
                    'o': [1, undefined, 49]
                },
                '44': {
                    'a': [2, 25],
                    'r': [2, 25],
                    't': [2, 25],
                    'u': [2, 25],
                    'v': [2, 25],
                    'x': [2, 25],
                    'p': [2, 25],
                    'q': [2, 25],
                    'b': [2, 25],
                    's': [2, 25],
                    'm': [2, 25]
                },
                '45': {
                    'l': [1, undefined, 51]
                },
                '46': {
                    'a': [2, 2],
                    'r': [2, 2],
                    't': [1, undefined, 29],
                    'u': [1, undefined, 30],
                    'v': [1, undefined, 31],
                    'x': [1, undefined, 32]
                },
                '47': {
                    'a': [2, 4],
                    'r': [2, 4],
                    't': [2, 4],
                    'u': [2, 4],
                    'v': [2, 4],
                    'x': [2, 4]
                },
                '48': {
                    'c': [2, 20]
                },
                '49': {
                    'c': [2, 21]
                },
                '50': {
                    'c': [1, undefined, 52]
                },
                '51': {
                    'a': [2, 23],
                    'r': [2, 23],
                    't': [2, 23],
                    'u': [2, 23],
                    'v': [2, 23],
                    'x': [2, 23],
                    'p': [2, 23],
                    'q': [2, 23],
                    'b': [2, 23],
                    's': [2, 23],
                    'm': [2, 23],
                    'l': [2, 23]
                },
                '52': {
                    'a': [2, 22],
                    'r': [2, 22],
                    't': [2, 22],
                    'u': [2, 22],
                    'v': [2, 22],
                    'x': [2, 22],
                    'p': [2, 22],
                    'q': [2, 22],
                    'b': [2, 22],
                    's': [2, 22],
                    'm': [2, 22],
                    'l': [2, 22]
                }
            }
        };
        parser.parse = function parse(input, filename) {
            var self = this,
                lexer = self.lexer,
                state,
                symbol,
                action,
                table = self.table,
                gotos = table.gotos,
                tableAction = table.action,
                productions = self.productions,
                valueStack = [null],
                // for debug info
                prefix = filename ? ('in file: ' + filename + ' ') : '',
                stack = [0];
    
            lexer.resetInput(input);
    
            while (1) {
                // retrieve state number from top of stack
                state = stack[stack.length - 1];
    
                if (!symbol) {
                    symbol = lexer.lex();
                }
    
                if (symbol) {
                    // read action for current state and first input
                    action = tableAction[state] && tableAction[state][symbol];
                } else {
                    action = null;
                }
    
                if (!action) {
                    var expected = [],
                        error;
                    //#JSCOVERAGE_IF
                    if (tableAction[state]) {
                        for (var symbolForState in tableAction[state]) {
                            expected.push(self.lexer.mapReverseSymbol(symbolForState));
                        }
                    }
                    error = prefix + 'syntax error at line ' + lexer.lineNumber +
                        ':\n' + lexer.showDebugInfo() +
                        '\n' + 'expect ' + expected.join(', ');
                    throw new Error(error);
                }
    
                switch (action[GrammarConst.TYPE_INDEX]) {
                case GrammarConst.SHIFT_TYPE:
                    stack.push(symbol);
    
                    valueStack.push(lexer.text);
    
                    // push state
                    stack.push(action[GrammarConst.TO_INDEX]);
    
                    // allow to read more
                    symbol = null;
    
                    break;
    
                case GrammarConst.REDUCE_TYPE:
                    var production = productions[action[GrammarConst.PRODUCTION_INDEX]],
                        reducedSymbol = production.symbol || production[0],
                        reducedAction = production.action || production[2],
                        reducedRhs = production.rhs || production[1],
                        len = reducedRhs.length,
                        i = 0,
                        ret,
                        $$ = valueStack[valueStack.length - len]; // default to $$ = $1
    
                    ret = undefined;
    
                    self.$$ = $$;
    
                    for (; i < len; i++) {
                        self['$' + (len - i)] = valueStack[valueStack.length - 1 - i];
                    }
    
                    if (reducedAction) {
                        ret = reducedAction.call(self);
                    }
    
                    if (ret !== undefined) {
                        $$ = ret;
                    } else {
                        $$ = self.$$;
                    }
    
                    stack = stack.slice(0, -1 * len * 2);
                    valueStack = valueStack.slice(0, -1 * len);
    
                    stack.push(reducedSymbol);
    
                    valueStack.push($$);
    
                    var newState = gotos[stack[stack.length - 2]][stack[stack.length - 1]];
    
                    stack.push(newState);
    
                    break;
    
                case GrammarConst.ACCEPT_TYPE:
                    return $$;
                }
            }
        };
        return parser;
    })();
    if (true) {
        module.exports = parser;
    }

/***/ },
/* 464 */
/***/ function(module, exports) {

    var hyphenExpression = /\-+([a-z])/gi
    
    function upperCaseFirstMatch (match, c, offset) {
      if (offset !== 0) {
        return c.toUpperCase()
      } else {
        return c
      }
    }
    
    function camelCase (str) {
      var camelCased = str.replace(hyphenExpression, upperCaseFirstMatch)
      hyphenExpression.lastIndex = 0
      return camelCased
    }
    
    module.exports = camelCase


/***/ },
/* 465 */
/***/ function(module, exports) {

    function isString (value) {
      return typeof value === 'string'
    }
    
    module.exports = isString


/***/ },
/* 466 */
/***/ function(module, exports) {

    function isUndefined (value) {
      return typeof value === 'undefined'
    }
    
    module.exports = isUndefined


/***/ },
/* 467 */
/***/ function(module, exports) {

    function assign (dest) {
      var args = arguments
      var source
    
      for (var i = 1; i < args.length; i++) {
        source = args[i]
    
        for (var key in source) {
          dest[key] = source[key]
        }
      }
    
      return dest
    }
    
    module.exports = assign


/***/ },
/* 468 */
/***/ function(module, exports) {

    function mapValues (source, fn) {
      var destination = {}
    
      for (var key in source) {
        if (source.hasOwnProperty(key)) {
          destination[key] = fn(source[key])
        }
      }
    
      return destination
    }
    
    module.exports = mapValues


/***/ },
/* 469 */
/***/ function(module, exports, __webpack_require__) {

    var camelCase = __webpack_require__(464)
    
    function styleCamelCase (name) {
      var camel = camelCase(name)
    
      // Detect if the style property is already camelCased
      // To not convert Webkit*, Moz* and O* to lowercase
      if (camel.charAt(0).toUpperCase() === name.charAt(0)) {
        return name.charAt(0) + camel.slice(1)
      }
    
      if (name.charAt(0) === '-') {
        return camel.indexOf('ms') === 0 ? camel
          : camel.charAt(0).toUpperCase() + camel.slice(1)
      } else {
        return camel
      }
    }
    
    module.exports = styleCamelCase


/***/ },
/* 470 */
/***/ function(module, exports) {

    var Window = {
      getComputedStyle: function (node) {
        return {
          getPropertyValue: node.style.getProperty
        }
      }
    }
    
    module.exports = Window


/***/ },
/* 471 */
/***/ function(module, exports, __webpack_require__) {

    var Element = __webpack_require__(458)
    var mapValues = __webpack_require__(468)
    
    var mixin = {
      componentWillMount: function () {
        this.connectedFauxDOM = {}
        this.animateFauxDOMUntil = 0
      },
      connectFauxDOM: function (node, name) {
        this.connectedFauxDOM[name] = typeof node !== 'string' ? node : new Element(node)
        setTimeout(this.drawFauxDOM)
        return this.connectedFauxDOM[name]
      },
      drawFauxDOM: function () {
        var virtualDOM = mapValues(this.connectedFauxDOM, function (n) {
          return n.toReact()
        })
        this.setState(virtualDOM)
      }
    }
    
    module.exports = mixin


/***/ },
/* 472 */
/***/ function(module, exports) {

    var anim = {
      animateFauxDOM: function (duration) {
        this.animateFauxDOMUntil = Math.max(Date.now() + duration, this.animateFauxDOMUntil)
        if (!this.fauxDOMAnimationInterval) {
          this.fauxDOMAnimationInterval = setInterval(function () {
            if (Date.now() < this.animateFauxDOMUntil) {
              this.drawFauxDOM()
            } else {
              this.stopAnimatingFauxDOM()
            }
          }.bind(this), 16)
        }
      },
      stopAnimatingFauxDOM: function () {
        this.fauxDOMAnimationInterval = clearInterval(this.fauxDOMAnimationInterval)
        this.animateFauxDOMUntil = 0
      },
      isAnimatingFauxDOM: function () {
        return !!this.fauxDOMAnimationInterval
      },
      componentWillUnmount: function () {
        this.stopAnimatingFauxDOM()
      }
    }
    
    module.exports = anim


/***/ },
/* 473 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Axis = __webpack_require__(474);
    
    var _d3Axis2 = _interopRequireDefault(_d3Axis);
    
    var _d3Selection = __webpack_require__(456);
    
    var _d3Selection2 = _interopRequireDefault(_d3Selection);
    
    var _reactFauxDom = __webpack_require__(457);
    
    var _reactFauxDom2 = _interopRequireDefault(_reactFauxDom);
    
    var _scale = __webpack_require__(444);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Axis = function (_Component) {
      _inherits(Axis, _Component);
    
      function Axis(props) {
        _classCallCheck(this, Axis);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Axis).call(this, props));
      }
    
      _createClass(Axis, [{
        key: '_mkTickAxis',
        value: function _mkTickAxis() {
          var _props = this.props;
          var type = _props.type;
          var tickOrient = _props.tickOrient;
          var tickFormat = _props.tickFormat;
          var tickPadding = _props.tickPadding;
          var tickSizeInner = _props.tickSizeInner;
          var tickSizeOuter = _props.tickSizeOuter;
          var ticks = _props.ticks;
          var tickValues = _props.tickValues;
    
    
          var func = _d3Axis2.default;
    
          if (tickOrient === 'left') {
            func = func.axisLeft(this._mkScale(this.props));
          } else if (tickOrient === 'right') {
            func = func.axisRight(this._mkScale(this.props));
          } else if (tickOrient === 'top') {
            func = func.axisTop(this._mkScale(this.props));
          } else if (tickOrient === 'bottom') {
            func = func.axisBottom(this._mkScale(this.props));
          }
    
          if (tickFormat) func.tickFormat(tickFormat);
    
          if (tickPadding) func.tickPadding(tickPadding);
    
          if (tickSizeOuter) func.tickSizeOuter(tickSizeOuter);
    
          if (tickSizeInner) func.tickSizeInner(tickSizeInner);
    
          if (tickValues) func.tickValues(tickValues);
    
          if (ticks) func.ticks.apply(null, ticks);
    
          return func;
        }
      }, {
        key: '_mkScale',
        value: function _mkScale() {
          var newScale;
    
          if (this.props.scale === 'ordinal') newScale = 'band';else newScale = this.props.scale;
    
          var func = (0, _scale.scale)(Object.assign({}, this.props, { scale: newScale }));
    
          return func;
        }
      }, {
        key: 'render',
        value: function render() {
          var _props2 = this.props;
          var showAxis = _props2.showAxis;
          var gridAxisClassName = _props2.gridAxisClassName;
          var axisClassName = _props2.axisClassName;
          var type = _props2.type;
          var style = _props2.style;
          var axisStyling = _props2.axisStyling;
          var gridStyleClassName = _props2.gridStyleClassName;
    
    
          var axisGroup = _reactFauxDom2.default.createElement('g');
    
          if (type === 'x') var axisClasses = axisClassName + ' axis x';else if (type === 'y') var axisClasses = axisClassName + ' axis y';else if (type === 'gridx' || type === 'gridy') var axisClasses = gridAxisClassName + ' grid-axis';
    
          axisGroup.setAttribute('class', axisClasses);
    
          var axisDom = _d3Selection2.default.select(axisGroup);
    
          axisDom.call(this._mkTickAxis());
    
          if (!showAxis) {
            axisDom.selectAll(".grid-axis .tick text").style("opacity", "0");
    
            if (type === 'gridx' || type === 'gridy') {
              // hide domain in grids
              axisDom.selectAll(".grid-axis .domain").style("opacity", "0");
            }
          }
    
          // apply user defined axis path style (path refers to x-axis line)if provided or else default
          if (axisStyling && axisStyling.pathClassName) {
            var axisPath = axisDom.selectAll('.axis path');
            axisPath.attr("class", axisStyling.pathClassName);
          } else axisDom.selectAll('.axis path').style('fill', 'none').style('stroke', '#000').style('shape-rendering', 'crispEdges').style('display', 'none');
    
          // apply user defined style for axis tick line if provided or else default
          if (axisStyling && axisStyling.ticksClassName) {
            var axisLine = axisDom.selectAll('.axis line');
            axisLine.attr("class", axisStyling.ticksClassName);
          } else axisDom.selectAll('.axis line').style('fill', 'none').style('stroke', '#000').style('shape-rendering', 'crispEdges');
    
          // apply user defined style for grid axes if provided or else default
          if (gridStyleClassName) {
            var grids = axisDom.selectAll('.grid-axis line');
            grids.attr("class", gridStyleClassName);
          } else axisDom.selectAll('.grid-axis line').style('opacity', .2).style('fill', 'none').style('stroke', '#000').style('stroke-width', '1.5px');
    
          // Axis tick labels style
          var axisText = axisDom.selectAll('.axis text');
          if (style) {
            for (var key in style) {
              axisText.style(key, style[key]);
            }
          }
          // user defined style for axis labels
          else if (axisStyling && axisStyling.textClassName) {
              axisText.attr("class", axisStyling.textClassName);
            }
    
          return axisDom.node().toReact();
        }
      }]);
    
      return Axis;
    }(_react.Component);
    
    Axis.defaultProps = {
      range: null,
      rangeRoundBands: null,
      domain: null,
      tickFormat: null,
      tickOrient: null
    };
    Axis.PropTypes = {
      showAxis: _react.PropTypes.bool,
      type: _react.PropTypes.string,
      orient: _react.PropTypes.oneOf(['top', 'bottom', 'left', 'right']),
      tickOrient: _react.PropTypes.oneOf(['top', 'bottom', 'left', 'right'])
    };
    exports.default = Axis;

/***/ },
/* 474 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], factory) :
      (factory((global.d3_axis = global.d3_axis || {})));
    }(this, function (exports) { 'use strict';
    
      var version = "0.3.2";
    
      var slice = Array.prototype.slice;
    
      function identity(x) {
        return x;
      }
    
      var top = 1;
      var right = 2;
      var bottom = 3;
      var left = 4;
      var epsilon = 1e-6;
      function translateX(scale0, scale1, d) {
        var x = scale0(d);
        return "translate(" + (isFinite(x) ? x : scale1(d)) + ",0)";
      }
    
      function translateY(scale0, scale1, d) {
        var y = scale0(d);
        return "translate(0," + (isFinite(y) ? y : scale1(d)) + ")";
      }
    
      function center(scale) {
        var width = scale.bandwidth() / 2;
        return function(d) {
          return scale(d) + width;
        };
      }
    
      function axis(orient, scale) {
        var tickArguments = [],
            tickValues = null,
            tickFormat = null,
            tickSizeInner = 6,
            tickSizeOuter = 6,
            tickPadding = 3;
    
        function axis(context) {
          var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
              format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,
              spacing = Math.max(tickSizeInner, 0) + tickPadding,
              transform = orient === top || orient === bottom ? translateX : translateY,
              range = scale.range(),
              range0 = range[0] + 0.5,
              range1 = range[range.length - 1] + 0.5,
              position = (scale.bandwidth ? center : identity)(scale.copy()),
              selection = context.selection ? context.selection() : context,
              path = selection.selectAll(".domain").data([null]),
              tick = selection.selectAll(".tick").data(values, scale).order(),
              tickExit = tick.exit(),
              tickEnter = tick.enter().append("g", ".domain").attr("class", "tick"),
              line = tick.select("line"),
              text = tick.select("text"),
              k = orient === top || orient === left ? -1 : 1,
              x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x");
    
          path = path.merge(path.enter().append("path")
              .attr("class", "domain")
              .attr("stroke", "#000"));
    
          tick = tick.merge(tickEnter);
    
          line = line.merge(tickEnter.append("line")
              .attr("stroke", "#000")
              .attr(x + "2", k * tickSizeInner));
    
          text = text.merge(tickEnter.append("text")
              .attr("fill", "#000")
              .attr(x, k * spacing));
    
          if (context !== selection) {
            path = path.transition(context);
            tick = tick.transition(context);
            line = line.transition(context);
            text = text.transition(context);
    
            tickExit = tickExit.transition(context)
                .attr("opacity", epsilon)
                .attr("transform", function(d) { return transform(position, this.parentNode.__axis || position, d); });
    
            tickEnter
                .attr("opacity", epsilon)
                .attr("transform", function(d) { return transform(this.parentNode.__axis || position, position, d); });
          }
    
          tickExit.remove();
    
          path
              .attr("d", orient === left || orient == right
                  ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter
                  : "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter)
    
          tick
              .attr("opacity", 1)
              .attr("transform", function(d) { return transform(position, position, d); });
    
          line
              .attr(x + "2", k * tickSizeInner)
              .attr(y + "1", 0.5)
              .attr(y + "2", 0.5);
    
          text
              .attr(x, k * spacing)
              .attr(y, 0.5)
              .attr("dy", orient === top ? "0em" : orient === bottom ? ".71em" : ".32em")
              .text(format);
    
          selection
              .attr("fill", "none")
              .attr("font-size", 10)
              .attr("font-family", "sans-serif")
              .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle")
              .each(function() { this.__axis = position; });
        }
    
        axis.scale = function(_) {
          return arguments.length ? (scale = _, axis) : scale;
        };
    
        axis.ticks = function() {
          return tickArguments = slice.call(arguments), axis;
        };
    
        axis.tickArguments = function(_) {
          return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();
        };
    
        axis.tickValues = function(_) {
          return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();
        };
    
        axis.tickFormat = function(_) {
          return arguments.length ? (tickFormat = _, axis) : tickFormat;
        };
    
        axis.tickSize = function(_) {
          return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
        };
    
        axis.tickSizeInner = function(_) {
          return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
        };
    
        axis.tickSizeOuter = function(_) {
          return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
        };
    
        axis.tickPadding = function(_) {
          return arguments.length ? (tickPadding = +_, axis) : tickPadding;
        };
    
        return axis;
      }
    
      function axisTop(scale) {
        return axis(top, scale);
      }
    
      function axisRight(scale) {
        return axis(right, scale);
      }
    
      function axisBottom(scale) {
        return axis(bottom, scale);
      }
    
      function axisLeft(scale) {
        return axis(left, scale);
      }
    
      exports.version = version;
      exports.axisTop = axisTop;
      exports.axisRight = axisRight;
      exports.axisBottom = axisBottom;
      exports.axisLeft = axisLeft;
    
    }));

/***/ },
/* 475 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _axis = __webpack_require__(473);
    
    var _axis2 = _interopRequireDefault(_axis);
    
    var _label = __webpack_require__(476);
    
    var _label2 = _interopRequireDefault(_label);
    
    var _commonProps = __webpack_require__(443);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Xaxis = function (_Component) {
      _inherits(Xaxis, _Component);
    
      function Xaxis(props) {
        _classCallCheck(this, Xaxis);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Xaxis).call(this, props));
      }
    
      _createClass(Xaxis, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var height = _props.height;
          var width = _props.width;
          var margins = _props.margins;
          var showXAxis = _props.showXAxis;
          var x = _props.x;
          var xAxisClassName = _props.xAxisClassName;
          var xDomain = _props.xDomain;
          var xRange = _props.xRange;
          var xBandPaddingInner = _props.xBandPaddingInner;
          var xBandPaddingOuter = _props.xBandPaddingOuter;
          var xScale = _props.xScale;
          var xOrient = _props.xOrient;
          var xTickOrient = _props.xTickOrient;
          var xTickPadding = _props.xTickPadding;
          var xTickSizeOuter = _props.xTickSizeOuter;
          var xTickSizeInner = _props.xTickSizeInner;
          var xTickFormat = _props.xTickFormat;
          var xTicks = _props.xTicks;
          var xLabel = _props.xLabel;
          var xLabelPosition = _props.xLabelPosition;
          var labelOffset = _props.labelOffset;
          var style = _props.style;
          var xAxisStyling = _props.xAxisStyling;
          var xTickValues = _props.xTickValues;
    
    
          var t;
          var axisLabel;
    
          if (!xRange) {
            xRange = [0, width - margins.left - margins.right];
          }
    
          if (xOrient === 'bottom') {
            // x - bottom
            t = 'translate(0, ' + (height - margins.bottom - margins.top) + ')';
          } else if (xOrient === 'top') {
            // x - top
            t = 'translate(0, 0)';
          }
    
          if (xLabel) {
            axisLabel = _react2.default.createElement(_label2.default, {
              height: height,
              width: width,
              margins: margins,
              labelTitle: xLabel,
              labelPosition: xLabelPosition,
              labelOffset: labelOffset,
              bandPaddingInner: xBandPaddingInner,
              bandPaddingOuter: xBandPaddingOuter
            });
          }
    
          return _react2.default.createElement(
            'g',
            { transform: t },
            _react2.default.createElement(_axis2.default, {
              height: height,
              width: width,
              margins: margins,
              showAxis: showXAxis,
              axisClassName: xAxisClassName,
              bandPaddingInner: xBandPaddingInner,
              bandPaddingOuter: xBandPaddingOuter,
              type: 'x',
              proxy: x,
              domain: xDomain,
              range: xRange,
              scale: xScale,
              orient: xOrient,
              tickOrient: xTickOrient,
              tickFormat: xTickFormat,
              tickPadding: xTickPadding,
              tickSizeInner: xTickSizeInner,
              tickSizeOuter: xTickSizeOuter,
              style: style,
              ticks: xTicks,
              axisStyling: xAxisStyling,
              tickValues: xTickValues
            }),
            axisLabel
          );
        }
      }]);
    
      return Xaxis;
    }(_react.Component);
    
    Xaxis.defaultProps = _extends({
      showXAxis: true,
      xAxisClassName: 'react-d3-core__axis__xAxis',
      xScale: 'linear',
      xOrient: 'bottom',
      xTickOrient: 'bottom',
      xLabelPosition: 'bottom',
      xTickPadding: 3,
      xInnerTickSize: 6,
      xOuterTickSize: 6
    }, _commonProps2.default);
    Xaxis.propTypes = {
      height: _react.PropTypes.number.isRequired,
      width: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      showXAxis: _react.PropTypes.bool,
      x: _react.PropTypes.func,
      xDomain: _react.PropTypes.array,
      xRange: _react.PropTypes.array,
      xScale: _react.PropTypes.string.isRequired,
      xOrient: _react.PropTypes.oneOf(['top', 'bottom']),
      xTickOrient: _react.PropTypes.oneOf(['top', 'bottom']),
      xAxisClassName: _react.PropTypes.string,
      xTickSizeInner: _react.PropTypes.number,
      xTickSizeOuter: _react.PropTypes.number,
      xBandPaddingInner: _react.PropTypes.number,
      xBandPaddingOuter: _react.PropTypes.number,
      xTickPadding: _react.PropTypes.number,
      xTickFormat: _react.PropTypes.func,
      xTicks: _react.PropTypes.array,
      style: _react.PropTypes.object,
      /*
       xAxisStyling object holds css styling classes for axis elements
       pathClassName: "someCls"
       ticksClassName: "someCls"
       textClassName: "someCls"
       */
      xAxisStyling: _react.PropTypes.object,
      xTickValues: _react.PropTypes.array
    };
    exports.default = Xaxis;

/***/ },
/* 476 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Selection = __webpack_require__(456);
    
    var _d3Selection2 = _interopRequireDefault(_d3Selection);
    
    var _reactFauxDom = __webpack_require__(457);
    
    var _reactFauxDom2 = _interopRequireDefault(_reactFauxDom);
    
    var _commonProps = __webpack_require__(443);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Label = function (_Component) {
      _inherits(Label, _Component);
    
      function Label(props) {
        _classCallCheck(this, Label);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Label).call(this, props));
      }
    
      _createClass(Label, [{
        key: '_mkLabel',
        value: function _mkLabel(dom) {
          var _props = this.props;
          var height = _props.height;
          var width = _props.width;
          var margins = _props.margins;
          var labelOffset = _props.labelOffset;
          var labelTitle = _props.labelTitle;
          var labelPosition = _props.labelPosition;
          var vTransform = _props.vTransform;
          var hTransform = _props.hTransform;
          var textAnchor = _props.textAnchor;
    
    
          var labelDom = _d3Selection2.default.select(dom);
          var fixWidth = width - margins.left - margins.right;
          var fixHeight = height - margins.top - margins.bottom;
    
          if (labelPosition === 'top') {
    
            labelDom.attr('transform', hTransform).attr('y', -labelOffset).attr('x', fixWidth / 2).style('text-anchor', textAnchor).text(labelTitle);
          } else if (labelPosition === 'bottom') {
    
            labelDom.attr('transform', hTransform).attr('y', +labelOffset).attr('x', fixWidth / 2).style('text-anchor', textAnchor).text(labelTitle);
          } else if (labelPosition === 'left') {
    
            labelDom.attr('transform', vTransform).attr('y', -labelOffset).attr('x', -fixHeight / 2).style('text-anchor', textAnchor).text(labelTitle);
          } else if (labelPosition === 'right') {
    
            labelDom.attr('transform', vTransform).attr('y', +labelOffset).attr('x', -fixHeight / 2).style('text-anchor', textAnchor).text(labelTitle);
          }
    
          return labelDom;
        }
      }, {
        key: 'render',
        value: function render() {
          var labelClassName = this.props.labelClassName;
    
    
          var labelText = _reactFauxDom2.default.createElement('text');
          var labelClasses = labelClassName + ' label';
          labelText.setAttribute('class', labelClasses);
    
          var labelDom = this._mkLabel(labelText);
    
          return labelDom.node().toReact();
        }
      }]);
    
      return Label;
    }(_react.Component);
    
    Label.defaultProps = _extends({
      hTransform: 'rotate(0)',
      vTransform: 'rotate(270)',
      labelTitle: 'label title',
      labelPosition: 'bottom',
      labelOffset: 40,
      textAnchor: 'middle',
      labelClassName: 'react-d3-core__label'
    }, _commonProps2.default);
    Label.propTypes = {
      height: _react.PropTypes.number.isRequired,
      width: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      hTransform: _react.PropTypes.string,
      vTransform: _react.PropTypes.string,
      labelTitle: _react.PropTypes.string,
      labelPosition: _react.PropTypes.oneOf(['top', 'bottom', 'left', 'right']),
      labelOffset: _react.PropTypes.number,
      textAnchor: _react.PropTypes.string,
      labelClassName: _react.PropTypes.string
    };
    exports.default = Label;

/***/ },
/* 477 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _axis = __webpack_require__(473);
    
    var _axis2 = _interopRequireDefault(_axis);
    
    var _label = __webpack_require__(476);
    
    var _label2 = _interopRequireDefault(_label);
    
    var _commonProps = __webpack_require__(443);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Yaxis = function (_Component) {
      _inherits(Yaxis, _Component);
    
      function Yaxis(props) {
        _classCallCheck(this, Yaxis);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Yaxis).call(this, props));
      }
    
      _createClass(Yaxis, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var y = _props.y;
          var yAxisClassName = _props.yAxisClassName;
          var yDomain = _props.yDomain;
          var yRange = _props.yRange;
          var yBandPaddingInner = _props.yBandPaddingInner;
          var yBandPaddingOuter = _props.yBandPaddingOuter;
          var yScale = _props.yScale;
          var yOrient = _props.yOrient;
          var yTickOrient = _props.yTickOrient;
          var yTickFormat = _props.yTickFormat;
          var yTickPadding = _props.yTickPadding;
          var yTickSizeOuter = _props.yTickSizeOuter;
          var yTickSizeInner = _props.yTickSizeInner;
          var yTicks = _props.yTicks;
          var yLabel = _props.yLabel;
          var yLabelPosition = _props.yLabelPosition;
          var labelOffset = _props.labelOffset;
          var showYAxis = _props.showYAxis;
          var style = _props.style;
          var yAxisStyling = _props.yAxisStyling;
          var yTickValues = _props.yTickValues;
    
    
          var t;
          var axisLabel;
    
          if (!yRange) {
            yRange = [height - margins.top - margins.bottom, 0];
          }
    
          if (yOrient === 'right') {
            // y - right
            t = 'translate(' + (width - margins.right - margins.left) + ', 0)';
          } else if (yOrient === 'left') {
            // y - left
            t = 'translate(0, 0)';
          }
    
          if (yLabel) {
            axisLabel = _react2.default.createElement(_label2.default, {
              height: height,
              width: width,
              margins: margins,
              labelTitle: yLabel,
              labelPosition: yLabelPosition,
              labelOffset: labelOffset,
              bandPaddingInner: yBandPaddingInner,
              bandPaddingOuter: yBandPaddingOuter
            });
          }
    
          return _react2.default.createElement(
            'g',
            { transform: t },
            _react2.default.createElement(_axis2.default, {
              height: height,
              width: width,
              margins: margins,
              showAxis: showYAxis,
              axisClassName: yAxisClassName,
              bandPaddingInner: yBandPaddingInner,
              bandPaddingOuter: yBandPaddingOuter,
              type: 'y',
              proxy: y,
              domain: yDomain,
              range: yRange,
              scale: yScale,
              orient: yOrient,
              tickOrient: yTickOrient,
              tickFormat: yTickFormat,
              tickPadding: yTickPadding,
              tickSizeInner: yTickSizeInner,
              tickSizeOuter: yTickSizeOuter,
              ticks: yTicks,
              style: style,
              axisStyling: yAxisStyling,
              tickValues: yTickValues
            }),
            axisLabel
          );
        }
      }]);
    
      return Yaxis;
    }(_react.Component);
    
    Yaxis.defaultProps = _extends({
      showYAxis: true,
      yAxisClassName: 'react-d3-core__axis__yAxis',
      yScale: 'linear',
      yOrient: 'left',
      yTickOrient: 'left',
      yLabelPosition: 'left',
      yTickPadding: 3,
      yInnerTickSize: 6,
      yOuterTickSize: 6
    }, _commonProps2.default);
    Yaxis.propTypes = {
      height: _react.PropTypes.number.isRequired,
      width: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      showYAxis: _react.PropTypes.bool,
      y: _react.PropTypes.func,
      yDomain: _react.PropTypes.array,
      yRange: _react.PropTypes.array,
      yScale: _react.PropTypes.string.isRequired,
      yOrient: _react.PropTypes.oneOf(['left', 'right']),
      yTickOrient: _react.PropTypes.oneOf(['left', 'right']),
      yAxisClassName: _react.PropTypes.string,
      yTickSizeInner: _react.PropTypes.number,
      yTickSizeOuter: _react.PropTypes.number,
      yBandPaddingInner: _react.PropTypes.number,
      yBandPaddingOuter: _react.PropTypes.number,
      yTickPadding: _react.PropTypes.number,
      yTickFormat: _react.PropTypes.func,
      yTicks: _react.PropTypes.array,
      style: _react.PropTypes.object,
      /*
       yAxisStyling object holds css styling classes for axis elements
       pathClassName: "someCls"
       ticksClassName: "someCls"
       textClassName: "someCls"
       */
      yAxisStyling: _react.PropTypes.object,
      yTickValues: _react.PropTypes.array
    };
    exports.default = Yaxis;

/***/ },
/* 478 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _axis = __webpack_require__(473);
    
    var _axis2 = _interopRequireDefault(_axis);
    
    var _commonProps = __webpack_require__(443);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Grid = function (_Component) {
      _inherits(Grid, _Component);
    
      function Grid(props) {
        _classCallCheck(this, Grid);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Grid).call(this, props));
      }
    
      _createClass(Grid, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var height = _props.height;
          var width = _props.width;
          var margins = _props.margins;
          var type = _props.type;
          var gridAxisClassName = _props.gridAxisClassName;
          var xBandPaddingInner = _props.xBandPaddingInner;
          var xBandPaddingOuter = _props.xBandPaddingOuter;
          var x = _props.x;
          var xDomain = _props.xDomain;
          var xRange = _props.xRange;
          var xScale = _props.xScale;
          var xGridCount = _props.xGridCount;
          var xGridStyleClassName = _props.xGridStyleClassName;
          var yBandPaddingInner = _props.yBandPaddingInner;
          var yBandPaddingOuter = _props.yBandPaddingOuter;
          var y = _props.y;
          var yDomain = _props.yDomain;
          var yRange = _props.yRange;
          var yScale = _props.yScale;
          var yGridCount = _props.yGridCount;
          var yGridStyleClassName = _props.yGridStyleClassName;
          var xTickValues = _props.xTickValues;
          var yTickValues = _props.yTickValues;
    
    
          var gridAxis;
          var t;
    
          if (!yRange) {
            yRange = [height - margins.top - margins.bottom, 0];
          }
    
          if (!xRange) {
            xRange = [0, width - margins.left - margins.right];
          }
    
          if (type === 'x') {
            t = 'translate(0, ' + (height - margins.bottom - margins.top) + ')';
            var tickSize = height - margins.top - margins.bottom;
    
            // if grid axis don't pass customize ticks.
            gridAxis = _react2.default.createElement(_axis2.default, {
              height: height,
              width: width,
              margins: margins,
              type: 'gridx',
              showAxis: false,
              gridAxisClassName: gridAxisClassName,
              bandPaddingInner: xBandPaddingInner,
              bandPaddingOuter: xBandPaddingOuter,
              tickOrient: 'bottom',
              orient: 'bottom',
              tickSizeOuter: 0,
              tickPadding: 10,
              tickFormat: null,
              tickSizeInner: -tickSize,
              proxy: x,
              domain: xDomain,
              range: xRange,
              scale: xScale,
              ticks: xGridCount,
              gridStyleClassName: xGridStyleClassName,
              tickValues: xTickValues
            });
          } else if (type === 'y') {
            t = 'translate(0, 0)';
            var tickSize = width - margins.left - margins.right;
    
            // if grid axis don't pass customize ticks.
            gridAxis = _react2.default.createElement(_axis2.default, {
              height: height,
              width: width,
              margins: margins,
              type: 'gridy',
              showAxis: false,
              gridAxisClassName: gridAxisClassName,
              bandPaddingInner: yBandPaddingInner,
              bandPaddingOuter: yBandPaddingOuter,
              tickOrient: 'left',
              orient: 'left',
              tickSizeOuter: 0,
              tickPadding: 10,
              tickSizeInner: -tickSize,
              tickFormat: null,
              proxy: y,
              scale: yScale,
              domain: yDomain,
              range: yRange,
              ticks: yGridCount,
              gridStyleClassName: yGridStyleClassName,
              tickValues: yTickValues
            });
          }
    
          return _react2.default.createElement(
            'g',
            { transform: t },
            gridAxis
          );
        }
      }]);
    
      return Grid;
    }(_react.Component);
    
    Grid.defaultProps = _extends({
      type: 'x',
      gridAxisClassName: 'react-d3-core__grid_axis'
    }, _commonProps2.default);
    Grid.propTypes = {
      height: _react.PropTypes.number.isRequired,
      width: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      type: _react.PropTypes.oneOf(['x', 'y']).isRequired,
      gridAxisClassName: _react.PropTypes.string,
      x: _react.PropTypes.func,
      xDomain: _react.PropTypes.array,
      xRange: _react.PropTypes.array,
      xScale: _react.PropTypes.oneOf(['linear', 'identity', 'sqrt', 'pow', 'log', 'quantize', 'quantile', 'ordinal', 'time']).isRequired,
      xBandPaddingInner: _react.PropTypes.number,
      xBandPaddingOuter: _react.PropTypes.number,
      y: _react.PropTypes.func,
      yDomain: _react.PropTypes.array,
      yRange: _react.PropTypes.array,
      yScale: _react.PropTypes.oneOf(['linear', 'identity', 'sqrt', 'pow', 'log', 'quantize', 'quantile', 'ordinal', 'time']).isRequired,
      yBandPaddingInner: _react.PropTypes.number,
      yBandPaddingOuter: _react.PropTypes.number,
      xGridCount: _react.PropTypes.array,
      yGridCount: _react.PropTypes.array,
      xGridStyleClassName: _react.PropTypes.string,
      yGridStyleClassName: _react.PropTypes.string,
      xTickValues: _react.PropTypes.array
    };
    exports.default = Grid;

/***/ },
/* 479 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _grid = __webpack_require__(478);
    
    var _grid2 = _interopRequireDefault(_grid);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var XGrid = function (_Component) {
      _inherits(XGrid, _Component);
    
      function XGrid(props) {
        _classCallCheck(this, XGrid);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(XGrid).call(this, props));
      }
    
      _createClass(XGrid, [{
        key: 'render',
        value: function render() {
          return _react2.default.createElement(_grid2.default, _extends({}, this.props, {
            type: 'x'
          }));
        }
      }]);
    
      return XGrid;
    }(_react.Component);
    
    exports.default = XGrid;

/***/ },
/* 480 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _grid = __webpack_require__(478);
    
    var _grid2 = _interopRequireDefault(_grid);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var YGrid = function (_Component) {
      _inherits(YGrid, _Component);
    
      function YGrid(props) {
        _classCallCheck(this, YGrid);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(YGrid).call(this, props));
      }
    
      _createClass(YGrid, [{
        key: 'render',
        value: function render() {
          return _react2.default.createElement(_grid2.default, _extends({}, this.props, {
            type: 'y'
          }));
        }
      }]);
    
      return YGrid;
    }(_react.Component);
    
    exports.default = YGrid;

/***/ },
/* 481 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.xDomain = xDomain;
    
    var _d3Array = __webpack_require__(446);
    
    var _d3Array2 = _interopRequireDefault(_d3Array);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function xDomain(props, stack, horizonal) {
      var data = props.data;
      var chartSeries = props.chartSeries;
      var x = props.x;
      var xScale = props.xScale;
      var xDomain = props.xDomain;
    
    
      if (xDomain) return xDomain;
    
      if (!horizonal) {
        if (xScale === 'ordinal') {
          return data.map(function (d) {
            return x(d);
          });
        } else {
          return _d3Array2.default.extent(data, function (d) {
            return x(d);
          });
        }
      } else {
        if (stack) {
          // stack
          var max = 0;
          var min = 0;
    
          data.forEach(function (d) {
            var totalTop = 0;
            var totalBottom = 0;
    
            chartSeries.forEach(function (sd) {
              var field = sd.field;
    
              if (d[field] > 0) {
                totalTop += x(d[field]);
              } else if (d[field] < 0) {
                totalBottom += x(d[field]);
              }
            });
    
            if (totalTop > max) max = totalTop;
            if (totalBottom < min) min = totalBottom;
          });
    
          return [min, max];
        } else {
          // not stack, single
          var domainArr = chartSeries.map(function (d) {
            var field = d.field;
            var extent = _d3Array2.default.extent(data, function (dt) {
              return x(dt[field]);
            });
    
            return extent;
          });
    
          return _d3Array2.default.extent([].concat.apply([], domainArr));
        }
      }
    }

/***/ },
/* 482 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.yDomain = yDomain;
    
    var _d3Array = __webpack_require__(446);
    
    var _d3Array2 = _interopRequireDefault(_d3Array);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function yDomain(props, stack, horizonal) {
      var data = props.data;
      var chartSeries = props.chartSeries;
      var y = props.y;
      var yDomain = props.yDomain;
      var yScale = props.yScale;
    
    
      if (yDomain) return yDomain;
    
      if (!horizonal) {
        if (stack) {
          // stack
          var max = 0;
          var min = 0;
    
          data.forEach(function (d) {
            var totalTop = 0;
            var totalBottom = 0;
    
            chartSeries.forEach(function (sd) {
              var field = sd.field;
    
              if (d[field] > 0) {
                totalTop += y(d[field]);
              } else if (d[field] < 0) {
                totalBottom += y(d[field]);
              }
            });
    
            if (totalTop > max) max = totalTop;
            if (totalBottom < min) min = totalBottom;
          });
    
          return [min, max];
        } else {
          // not stack, single
          var domainArr = chartSeries.map(function (d) {
            var field = d.field;
            var extent = _d3Array2.default.extent(data, function (dt) {
              return y(dt[field]);
            });
    
            return extent;
          });
    
          var extentArr = _d3Array2.default.extent([].concat.apply([], domainArr));
    
          if (extentArr[0] * extentArr[1] >= 0) {
            return [0, extentArr[1]];
          } else {
            return extentArr;
          }
        }
      } else {
        if (yScale === 'ordinal') {
          return data.map(function (d) {
            return y(d);
          });
        } else {
          return _d3Array2.default.extent(data, function (d) {
            return y(d);
          });
        }
      }
    }

/***/ },
/* 483 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _series = __webpack_require__(484);
    
    Object.defineProperty(exports, 'series', {
      enumerable: true,
      get: function get() {
        return _series.series;
      }
    });
    
    var _chart = __webpack_require__(486);
    
    Object.defineProperty(exports, 'Chart', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_chart).default;
      }
    });
    
    var _chartpie = __webpack_require__(488);
    
    Object.defineProperty(exports, 'ChartPie', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_chartpie).default;
      }
    });
    
    var _line = __webpack_require__(489);
    
    Object.defineProperty(exports, 'Line', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_line).default;
      }
    });
    
    var _area = __webpack_require__(492);
    
    Object.defineProperty(exports, 'Area', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_area).default;
      }
    });
    
    var _area_stack = __webpack_require__(493);
    
    Object.defineProperty(exports, 'AreaStack', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_area_stack).default;
      }
    });
    
    var _bar = __webpack_require__(494);
    
    Object.defineProperty(exports, 'Bar', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_bar).default;
      }
    });
    
    var _bar_horizontal = __webpack_require__(495);
    
    Object.defineProperty(exports, 'BarHorizontal', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_bar_horizontal).default;
      }
    });
    
    var _bar_group = __webpack_require__(496);
    
    Object.defineProperty(exports, 'BarGroup', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_bar_group).default;
      }
    });
    
    var _bar_group_horizontal = __webpack_require__(497);
    
    Object.defineProperty(exports, 'BarGroupHorizontal', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_bar_group_horizontal).default;
      }
    });
    
    var _bar_stack = __webpack_require__(498);
    
    Object.defineProperty(exports, 'BarStack', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_bar_stack).default;
      }
    });
    
    var _bar_stack_horizontal = __webpack_require__(499);
    
    Object.defineProperty(exports, 'BarStackHorizontal', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_bar_stack_horizontal).default;
      }
    });
    
    var _pie = __webpack_require__(500);
    
    Object.defineProperty(exports, 'Pie', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_pie).default;
      }
    });
    
    var _scatter = __webpack_require__(501);
    
    Object.defineProperty(exports, 'Scatter', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_scatter).default;
      }
    });
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/***/ },
/* 484 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.series = series;
    
    var _d = __webpack_require__(485);
    
    var _d2 = _interopRequireDefault(_d);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function series(props, horizontal) {
      var data = props.data;
      var chartSeries = props.chartSeries;
      var x = props.x;
      var y = props.y;
      var categoricalColors = props.categoricalColors;
    
    
      categoricalColors = categoricalColors || _d2.default.scale.category10();
    
      var chartSeriesData = chartSeries.map(function (f, i) {
    
        // set a color if not set
        f.color = f.color || categoricalColors(i);
    
        // set name if not set
        f.name = f.name || f.field;
    
        // mapping throught data set x, y data
        var mapping = data.map(function (d) {
          if (!d._style) d._style = {};
    
          if (!horizontal) {
            return {
              x: x(d),
              y: y(d[f.field]),
              color: f.color,
              name: f.name,
              field: f.field,
              _style: d._style
            };
          } else {
            return {
              y: y(d),
              x: x(d[f.field]),
              color: f.color,
              name: f.name,
              field: f.field,
              _style: d._style
            };
          }
        });
    
        return Object.assign(f, { data: mapping });
      });
    
      return chartSeriesData;
    }

/***/ },
/* 485 */
/***/ function(module, exports, __webpack_require__) {

    var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;!function() {
      var d3 = {
        version: "3.5.17"
      };
      var d3_arraySlice = [].slice, d3_array = function(list) {
        return d3_arraySlice.call(list);
      };
      var d3_document = this.document;
      function d3_documentElement(node) {
        return node && (node.ownerDocument || node.document || node).documentElement;
      }
      function d3_window(node) {
        return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);
      }
      if (d3_document) {
        try {
          d3_array(d3_document.documentElement.childNodes)[0].nodeType;
        } catch (e) {
          d3_array = function(list) {
            var i = list.length, array = new Array(i);
            while (i--) array[i] = list[i];
            return array;
          };
        }
      }
      if (!Date.now) Date.now = function() {
        return +new Date();
      };
      if (d3_document) {
        try {
          d3_document.createElement("DIV").style.setProperty("opacity", 0, "");
        } catch (error) {
          var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;
          d3_element_prototype.setAttribute = function(name, value) {
            d3_element_setAttribute.call(this, name, value + "");
          };
          d3_element_prototype.setAttributeNS = function(space, local, value) {
            d3_element_setAttributeNS.call(this, space, local, value + "");
          };
          d3_style_prototype.setProperty = function(name, value, priority) {
            d3_style_setProperty.call(this, name, value + "", priority);
          };
        }
      }
      d3.ascending = d3_ascending;
      function d3_ascending(a, b) {
        return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
      }
      d3.descending = function(a, b) {
        return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
      };
      d3.min = function(array, f) {
        var i = -1, n = array.length, a, b;
        if (arguments.length === 1) {
          while (++i < n) if ((b = array[i]) != null && b >= b) {
            a = b;
            break;
          }
          while (++i < n) if ((b = array[i]) != null && a > b) a = b;
        } else {
          while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
            a = b;
            break;
          }
          while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
        }
        return a;
      };
      d3.max = function(array, f) {
        var i = -1, n = array.length, a, b;
        if (arguments.length === 1) {
          while (++i < n) if ((b = array[i]) != null && b >= b) {
            a = b;
            break;
          }
          while (++i < n) if ((b = array[i]) != null && b > a) a = b;
        } else {
          while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
            a = b;
            break;
          }
          while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
        }
        return a;
      };
      d3.extent = function(array, f) {
        var i = -1, n = array.length, a, b, c;
        if (arguments.length === 1) {
          while (++i < n) if ((b = array[i]) != null && b >= b) {
            a = c = b;
            break;
          }
          while (++i < n) if ((b = array[i]) != null) {
            if (a > b) a = b;
            if (c < b) c = b;
          }
        } else {
          while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
            a = c = b;
            break;
          }
          while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
            if (a > b) a = b;
            if (c < b) c = b;
          }
        }
        return [ a, c ];
      };
      function d3_number(x) {
        return x === null ? NaN : +x;
      }
      function d3_numeric(x) {
        return !isNaN(x);
      }
      d3.sum = function(array, f) {
        var s = 0, n = array.length, a, i = -1;
        if (arguments.length === 1) {
          while (++i < n) if (d3_numeric(a = +array[i])) s += a;
        } else {
          while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;
        }
        return s;
      };
      d3.mean = function(array, f) {
        var s = 0, n = array.length, a, i = -1, j = n;
        if (arguments.length === 1) {
          while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;
        } else {
          while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;
        }
        if (j) return s / j;
      };
      d3.quantile = function(values, p) {
        var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;
        return e ? v + e * (values[h] - v) : v;
      };
      d3.median = function(array, f) {
        var numbers = [], n = array.length, a, i = -1;
        if (arguments.length === 1) {
          while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);
        } else {
          while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);
        }
        if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);
      };
      d3.variance = function(array, f) {
        var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;
        if (arguments.length === 1) {
          while (++i < n) {
            if (d3_numeric(a = d3_number(array[i]))) {
              d = a - m;
              m += d / ++j;
              s += d * (a - m);
            }
          }
        } else {
          while (++i < n) {
            if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {
              d = a - m;
              m += d / ++j;
              s += d * (a - m);
            }
          }
        }
        if (j > 1) return s / (j - 1);
      };
      d3.deviation = function() {
        var v = d3.variance.apply(this, arguments);
        return v ? Math.sqrt(v) : v;
      };
      function d3_bisector(compare) {
        return {
          left: function(a, x, lo, hi) {
            if (arguments.length < 3) lo = 0;
            if (arguments.length < 4) hi = a.length;
            while (lo < hi) {
              var mid = lo + hi >>> 1;
              if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;
            }
            return lo;
          },
          right: function(a, x, lo, hi) {
            if (arguments.length < 3) lo = 0;
            if (arguments.length < 4) hi = a.length;
            while (lo < hi) {
              var mid = lo + hi >>> 1;
              if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;
            }
            return lo;
          }
        };
      }
      var d3_bisect = d3_bisector(d3_ascending);
      d3.bisectLeft = d3_bisect.left;
      d3.bisect = d3.bisectRight = d3_bisect.right;
      d3.bisector = function(f) {
        return d3_bisector(f.length === 1 ? function(d, x) {
          return d3_ascending(f(d), x);
        } : f);
      };
      d3.shuffle = function(array, i0, i1) {
        if ((m = arguments.length) < 3) {
          i1 = array.length;
          if (m < 2) i0 = 0;
        }
        var m = i1 - i0, t, i;
        while (m) {
          i = Math.random() * m-- | 0;
          t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;
        }
        return array;
      };
      d3.permute = function(array, indexes) {
        var i = indexes.length, permutes = new Array(i);
        while (i--) permutes[i] = array[indexes[i]];
        return permutes;
      };
      d3.pairs = function(array) {
        var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);
        while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];
        return pairs;
      };
      d3.transpose = function(matrix) {
        if (!(n = matrix.length)) return [];
        for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) {
          for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) {
            row[j] = matrix[j][i];
          }
        }
        return transpose;
      };
      function d3_transposeLength(d) {
        return d.length;
      }
      d3.zip = function() {
        return d3.transpose(arguments);
      };
      d3.keys = function(map) {
        var keys = [];
        for (var key in map) keys.push(key);
        return keys;
      };
      d3.values = function(map) {
        var values = [];
        for (var key in map) values.push(map[key]);
        return values;
      };
      d3.entries = function(map) {
        var entries = [];
        for (var key in map) entries.push({
          key: key,
          value: map[key]
        });
        return entries;
      };
      d3.merge = function(arrays) {
        var n = arrays.length, m, i = -1, j = 0, merged, array;
        while (++i < n) j += arrays[i].length;
        merged = new Array(j);
        while (--n >= 0) {
          array = arrays[n];
          m = array.length;
          while (--m >= 0) {
            merged[--j] = array[m];
          }
        }
        return merged;
      };
      var abs = Math.abs;
      d3.range = function(start, stop, step) {
        if (arguments.length < 3) {
          step = 1;
          if (arguments.length < 2) {
            stop = start;
            start = 0;
          }
        }
        if ((stop - start) / step === Infinity) throw new Error("infinite range");
        var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;
        start *= k, stop *= k, step *= k;
        if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);
        return range;
      };
      function d3_range_integerScale(x) {
        var k = 1;
        while (x * k % 1) k *= 10;
        return k;
      }
      function d3_class(ctor, properties) {
        for (var key in properties) {
          Object.defineProperty(ctor.prototype, key, {
            value: properties[key],
            enumerable: false
          });
        }
      }
      d3.map = function(object, f) {
        var map = new d3_Map();
        if (object instanceof d3_Map) {
          object.forEach(function(key, value) {
            map.set(key, value);
          });
        } else if (Array.isArray(object)) {
          var i = -1, n = object.length, o;
          if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);
        } else {
          for (var key in object) map.set(key, object[key]);
        }
        return map;
      };
      function d3_Map() {
        this._ = Object.create(null);
      }
      var d3_map_proto = "__proto__", d3_map_zero = "\x00";
      d3_class(d3_Map, {
        has: d3_map_has,
        get: function(key) {
          return this._[d3_map_escape(key)];
        },
        set: function(key, value) {
          return this._[d3_map_escape(key)] = value;
        },
        remove: d3_map_remove,
        keys: d3_map_keys,
        values: function() {
          var values = [];
          for (var key in this._) values.push(this._[key]);
          return values;
        },
        entries: function() {
          var entries = [];
          for (var key in this._) entries.push({
            key: d3_map_unescape(key),
            value: this._[key]
          });
          return entries;
        },
        size: d3_map_size,
        empty: d3_map_empty,
        forEach: function(f) {
          for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);
        }
      });
      function d3_map_escape(key) {
        return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;
      }
      function d3_map_unescape(key) {
        return (key += "")[0] === d3_map_zero ? key.slice(1) : key;
      }
      function d3_map_has(key) {
        return d3_map_escape(key) in this._;
      }
      function d3_map_remove(key) {
        return (key = d3_map_escape(key)) in this._ && delete this._[key];
      }
      function d3_map_keys() {
        var keys = [];
        for (var key in this._) keys.push(d3_map_unescape(key));
        return keys;
      }
      function d3_map_size() {
        var size = 0;
        for (var key in this._) ++size;
        return size;
      }
      function d3_map_empty() {
        for (var key in this._) return false;
        return true;
      }
      d3.nest = function() {
        var nest = {}, keys = [], sortKeys = [], sortValues, rollup;
        function map(mapType, array, depth) {
          if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;
          var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;
          while (++i < n) {
            if (values = valuesByKey.get(keyValue = key(object = array[i]))) {
              values.push(object);
            } else {
              valuesByKey.set(keyValue, [ object ]);
            }
          }
          if (mapType) {
            object = mapType();
            setter = function(keyValue, values) {
              object.set(keyValue, map(mapType, values, depth));
            };
          } else {
            object = {};
            setter = function(keyValue, values) {
              object[keyValue] = map(mapType, values, depth);
            };
          }
          valuesByKey.forEach(setter);
          return object;
        }
        function entries(map, depth) {
          if (depth >= keys.length) return map;
          var array = [], sortKey = sortKeys[depth++];
          map.forEach(function(key, keyMap) {
            array.push({
              key: key,
              values: entries(keyMap, depth)
            });
          });
          return sortKey ? array.sort(function(a, b) {
            return sortKey(a.key, b.key);
          }) : array;
        }
        nest.map = function(array, mapType) {
          return map(mapType, array, 0);
        };
        nest.entries = function(array) {
          return entries(map(d3.map, array, 0), 0);
        };
        nest.key = function(d) {
          keys.push(d);
          return nest;
        };
        nest.sortKeys = function(order) {
          sortKeys[keys.length - 1] = order;
          return nest;
        };
        nest.sortValues = function(order) {
          sortValues = order;
          return nest;
        };
        nest.rollup = function(f) {
          rollup = f;
          return nest;
        };
        return nest;
      };
      d3.set = function(array) {
        var set = new d3_Set();
        if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);
        return set;
      };
      function d3_Set() {
        this._ = Object.create(null);
      }
      d3_class(d3_Set, {
        has: d3_map_has,
        add: function(key) {
          this._[d3_map_escape(key += "")] = true;
          return key;
        },
        remove: d3_map_remove,
        values: d3_map_keys,
        size: d3_map_size,
        empty: d3_map_empty,
        forEach: function(f) {
          for (var key in this._) f.call(this, d3_map_unescape(key));
        }
      });
      d3.behavior = {};
      function d3_identity(d) {
        return d;
      }
      d3.rebind = function(target, source) {
        var i = 1, n = arguments.length, method;
        while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
        return target;
      };
      function d3_rebind(target, source, method) {
        return function() {
          var value = method.apply(source, arguments);
          return value === source ? target : value;
        };
      }
      function d3_vendorSymbol(object, name) {
        if (name in object) return name;
        name = name.charAt(0).toUpperCase() + name.slice(1);
        for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {
          var prefixName = d3_vendorPrefixes[i] + name;
          if (prefixName in object) return prefixName;
        }
      }
      var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ];
      function d3_noop() {}
      d3.dispatch = function() {
        var dispatch = new d3_dispatch(), i = -1, n = arguments.length;
        while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
        return dispatch;
      };
      function d3_dispatch() {}
      d3_dispatch.prototype.on = function(type, listener) {
        var i = type.indexOf("."), name = "";
        if (i >= 0) {
          name = type.slice(i + 1);
          type = type.slice(0, i);
        }
        if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);
        if (arguments.length === 2) {
          if (listener == null) for (type in this) {
            if (this.hasOwnProperty(type)) this[type].on(name, null);
          }
          return this;
        }
      };
      function d3_dispatch_event(dispatch) {
        var listeners = [], listenerByName = new d3_Map();
        function event() {
          var z = listeners, i = -1, n = z.length, l;
          while (++i < n) if (l = z[i].on) l.apply(this, arguments);
          return dispatch;
        }
        event.on = function(name, listener) {
          var l = listenerByName.get(name), i;
          if (arguments.length < 2) return l && l.on;
          if (l) {
            l.on = null;
            listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));
            listenerByName.remove(name);
          }
          if (listener) listeners.push(listenerByName.set(name, {
            on: listener
          }));
          return dispatch;
        };
        return event;
      }
      d3.event = null;
      function d3_eventPreventDefault() {
        d3.event.preventDefault();
      }
      function d3_eventSource() {
        var e = d3.event, s;
        while (s = e.sourceEvent) e = s;
        return e;
      }
      function d3_eventDispatch(target) {
        var dispatch = new d3_dispatch(), i = 0, n = arguments.length;
        while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
        dispatch.of = function(thiz, argumentz) {
          return function(e1) {
            try {
              var e0 = e1.sourceEvent = d3.event;
              e1.target = target;
              d3.event = e1;
              dispatch[e1.type].apply(thiz, argumentz);
            } finally {
              d3.event = e0;
            }
          };
        };
        return dispatch;
      }
      d3.requote = function(s) {
        return s.replace(d3_requote_re, "\\$&");
      };
      var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
      var d3_subclass = {}.__proto__ ? function(object, prototype) {
        object.__proto__ = prototype;
      } : function(object, prototype) {
        for (var property in prototype) object[property] = prototype[property];
      };
      function d3_selection(groups) {
        d3_subclass(groups, d3_selectionPrototype);
        return groups;
      }
      var d3_select = function(s, n) {
        return n.querySelector(s);
      }, d3_selectAll = function(s, n) {
        return n.querySelectorAll(s);
      }, d3_selectMatches = function(n, s) {
        var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, "matchesSelector")];
        d3_selectMatches = function(n, s) {
          return d3_selectMatcher.call(n, s);
        };
        return d3_selectMatches(n, s);
      };
      if (typeof Sizzle === "function") {
        d3_select = function(s, n) {
          return Sizzle(s, n)[0] || null;
        };
        d3_selectAll = Sizzle;
        d3_selectMatches = Sizzle.matchesSelector;
      }
      d3.selection = function() {
        return d3.select(d3_document.documentElement);
      };
      var d3_selectionPrototype = d3.selection.prototype = [];
      d3_selectionPrototype.select = function(selector) {
        var subgroups = [], subgroup, subnode, group, node;
        selector = d3_selection_selector(selector);
        for (var j = -1, m = this.length; ++j < m; ) {
          subgroups.push(subgroup = []);
          subgroup.parentNode = (group = this[j]).parentNode;
          for (var i = -1, n = group.length; ++i < n; ) {
            if (node = group[i]) {
              subgroup.push(subnode = selector.call(node, node.__data__, i, j));
              if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
            } else {
              subgroup.push(null);
            }
          }
        }
        return d3_selection(subgroups);
      };
      function d3_selection_selector(selector) {
        return typeof selector === "function" ? selector : function() {
          return d3_select(selector, this);
        };
      }
      d3_selectionPrototype.selectAll = function(selector) {
        var subgroups = [], subgroup, node;
        selector = d3_selection_selectorAll(selector);
        for (var j = -1, m = this.length; ++j < m; ) {
          for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
            if (node = group[i]) {
              subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));
              subgroup.parentNode = node;
            }
          }
        }
        return d3_selection(subgroups);
      };
      function d3_selection_selectorAll(selector) {
        return typeof selector === "function" ? selector : function() {
          return d3_selectAll(selector, this);
        };
      }
      var d3_nsXhtml = "http://www.w3.org/1999/xhtml";
      var d3_nsPrefix = {
        svg: "http://www.w3.org/2000/svg",
        xhtml: d3_nsXhtml,
        xlink: "http://www.w3.org/1999/xlink",
        xml: "http://www.w3.org/XML/1998/namespace",
        xmlns: "http://www.w3.org/2000/xmlns/"
      };
      d3.ns = {
        prefix: d3_nsPrefix,
        qualify: function(name) {
          var i = name.indexOf(":"), prefix = name;
          if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
          return d3_nsPrefix.hasOwnProperty(prefix) ? {
            space: d3_nsPrefix[prefix],
            local: name
          } : name;
        }
      };
      d3_selectionPrototype.attr = function(name, value) {
        if (arguments.length < 2) {
          if (typeof name === "string") {
            var node = this.node();
            name = d3.ns.qualify(name);
            return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);
          }
          for (value in name) this.each(d3_selection_attr(value, name[value]));
          return this;
        }
        return this.each(d3_selection_attr(name, value));
      };
      function d3_selection_attr(name, value) {
        name = d3.ns.qualify(name);
        function attrNull() {
          this.removeAttribute(name);
        }
        function attrNullNS() {
          this.removeAttributeNS(name.space, name.local);
        }
        function attrConstant() {
          this.setAttribute(name, value);
        }
        function attrConstantNS() {
          this.setAttributeNS(name.space, name.local, value);
        }
        function attrFunction() {
          var x = value.apply(this, arguments);
          if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);
        }
        function attrFunctionNS() {
          var x = value.apply(this, arguments);
          if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);
        }
        return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;
      }
      function d3_collapse(s) {
        return s.trim().replace(/\s+/g, " ");
      }
      d3_selectionPrototype.classed = function(name, value) {
        if (arguments.length < 2) {
          if (typeof name === "string") {
            var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;
            if (value = node.classList) {
              while (++i < n) if (!value.contains(name[i])) return false;
            } else {
              value = node.getAttribute("class");
              while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;
            }
            return true;
          }
          for (value in name) this.each(d3_selection_classed(value, name[value]));
          return this;
        }
        return this.each(d3_selection_classed(name, value));
      };
      function d3_selection_classedRe(name) {
        return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g");
      }
      function d3_selection_classes(name) {
        return (name + "").trim().split(/^|\s+/);
      }
      function d3_selection_classed(name, value) {
        name = d3_selection_classes(name).map(d3_selection_classedName);
        var n = name.length;
        function classedConstant() {
          var i = -1;
          while (++i < n) name[i](this, value);
        }
        function classedFunction() {
          var i = -1, x = value.apply(this, arguments);
          while (++i < n) name[i](this, x);
        }
        return typeof value === "function" ? classedFunction : classedConstant;
      }
      function d3_selection_classedName(name) {
        var re = d3_selection_classedRe(name);
        return function(node, value) {
          if (c = node.classList) return value ? c.add(name) : c.remove(name);
          var c = node.getAttribute("class") || "";
          if (value) {
            re.lastIndex = 0;
            if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name));
          } else {
            node.setAttribute("class", d3_collapse(c.replace(re, " ")));
          }
        };
      }
      d3_selectionPrototype.style = function(name, value, priority) {
        var n = arguments.length;
        if (n < 3) {
          if (typeof name !== "string") {
            if (n < 2) value = "";
            for (priority in name) this.each(d3_selection_style(priority, name[priority], value));
            return this;
          }
          if (n < 2) {
            var node = this.node();
            return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);
          }
          priority = "";
        }
        return this.each(d3_selection_style(name, value, priority));
      };
      function d3_selection_style(name, value, priority) {
        function styleNull() {
          this.style.removeProperty(name);
        }
        function styleConstant() {
          this.style.setProperty(name, value, priority);
        }
        function styleFunction() {
          var x = value.apply(this, arguments);
          if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);
        }
        return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant;
      }
      d3_selectionPrototype.property = function(name, value) {
        if (arguments.length < 2) {
          if (typeof name === "string") return this.node()[name];
          for (value in name) this.each(d3_selection_property(value, name[value]));
          return this;
        }
        return this.each(d3_selection_property(name, value));
      };
      function d3_selection_property(name, value) {
        function propertyNull() {
          delete this[name];
        }
        function propertyConstant() {
          this[name] = value;
        }
        function propertyFunction() {
          var x = value.apply(this, arguments);
          if (x == null) delete this[name]; else this[name] = x;
        }
        return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant;
      }
      d3_selectionPrototype.text = function(value) {
        return arguments.length ? this.each(typeof value === "function" ? function() {
          var v = value.apply(this, arguments);
          this.textContent = v == null ? "" : v;
        } : value == null ? function() {
          this.textContent = "";
        } : function() {
          this.textContent = value;
        }) : this.node().textContent;
      };
      d3_selectionPrototype.html = function(value) {
        return arguments.length ? this.each(typeof value === "function" ? function() {
          var v = value.apply(this, arguments);
          this.innerHTML = v == null ? "" : v;
        } : value == null ? function() {
          this.innerHTML = "";
        } : function() {
          this.innerHTML = value;
        }) : this.node().innerHTML;
      };
      d3_selectionPrototype.append = function(name) {
        name = d3_selection_creator(name);
        return this.select(function() {
          return this.appendChild(name.apply(this, arguments));
        });
      };
      function d3_selection_creator(name) {
        function create() {
          var document = this.ownerDocument, namespace = this.namespaceURI;
          return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name);
        }
        function createNS() {
          return this.ownerDocument.createElementNS(name.space, name.local);
        }
        return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;
      }
      d3_selectionPrototype.insert = function(name, before) {
        name = d3_selection_creator(name);
        before = d3_selection_selector(before);
        return this.select(function() {
          return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);
        });
      };
      d3_selectionPrototype.remove = function() {
        return this.each(d3_selectionRemove);
      };
      function d3_selectionRemove() {
        var parent = this.parentNode;
        if (parent) parent.removeChild(this);
      }
      d3_selectionPrototype.data = function(value, key) {
        var i = -1, n = this.length, group, node;
        if (!arguments.length) {
          value = new Array(n = (group = this[0]).length);
          while (++i < n) {
            if (node = group[i]) {
              value[i] = node.__data__;
            }
          }
          return value;
        }
        function bind(group, groupData) {
          var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;
          if (key) {
            var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;
            for (i = -1; ++i < n; ) {
              if (node = group[i]) {
                if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {
                  exitNodes[i] = node;
                } else {
                  nodeByKeyValue.set(keyValue, node);
                }
                keyValues[i] = keyValue;
              }
            }
            for (i = -1; ++i < m; ) {
              if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {
                enterNodes[i] = d3_selection_dataNode(nodeData);
              } else if (node !== true) {
                updateNodes[i] = node;
                node.__data__ = nodeData;
              }
              nodeByKeyValue.set(keyValue, true);
            }
            for (i = -1; ++i < n; ) {
              if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) {
                exitNodes[i] = group[i];
              }
            }
          } else {
            for (i = -1; ++i < n0; ) {
              node = group[i];
              nodeData = groupData[i];
              if (node) {
                node.__data__ = nodeData;
                updateNodes[i] = node;
              } else {
                enterNodes[i] = d3_selection_dataNode(nodeData);
              }
            }
            for (;i < m; ++i) {
              enterNodes[i] = d3_selection_dataNode(groupData[i]);
            }
            for (;i < n; ++i) {
              exitNodes[i] = group[i];
            }
          }
          enterNodes.update = updateNodes;
          enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;
          enter.push(enterNodes);
          update.push(updateNodes);
          exit.push(exitNodes);
        }
        var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);
        if (typeof value === "function") {
          while (++i < n) {
            bind(group = this[i], value.call(group, group.parentNode.__data__, i));
          }
        } else {
          while (++i < n) {
            bind(group = this[i], value);
          }
        }
        update.enter = function() {
          return enter;
        };
        update.exit = function() {
          return exit;
        };
        return update;
      };
      function d3_selection_dataNode(data) {
        return {
          __data__: data
        };
      }
      d3_selectionPrototype.datum = function(value) {
        return arguments.length ? this.property("__data__", value) : this.property("__data__");
      };
      d3_selectionPrototype.filter = function(filter) {
        var subgroups = [], subgroup, group, node;
        if (typeof filter !== "function") filter = d3_selection_filter(filter);
        for (var j = 0, m = this.length; j < m; j++) {
          subgroups.push(subgroup = []);
          subgroup.parentNode = (group = this[j]).parentNode;
          for (var i = 0, n = group.length; i < n; i++) {
            if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {
              subgroup.push(node);
            }
          }
        }
        return d3_selection(subgroups);
      };
      function d3_selection_filter(selector) {
        return function() {
          return d3_selectMatches(this, selector);
        };
      }
      d3_selectionPrototype.order = function() {
        for (var j = -1, m = this.length; ++j < m; ) {
          for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {
            if (node = group[i]) {
              if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
              next = node;
            }
          }
        }
        return this;
      };
      d3_selectionPrototype.sort = function(comparator) {
        comparator = d3_selection_sortComparator.apply(this, arguments);
        for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);
        return this.order();
      };
      function d3_selection_sortComparator(comparator) {
        if (!arguments.length) comparator = d3_ascending;
        return function(a, b) {
          return a && b ? comparator(a.__data__, b.__data__) : !a - !b;
        };
      }
      d3_selectionPrototype.each = function(callback) {
        return d3_selection_each(this, function(node, i, j) {
          callback.call(node, node.__data__, i, j);
        });
      };
      function d3_selection_each(groups, callback) {
        for (var j = 0, m = groups.length; j < m; j++) {
          for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {
            if (node = group[i]) callback(node, i, j);
          }
        }
        return groups;
      }
      d3_selectionPrototype.call = function(callback) {
        var args = d3_array(arguments);
        callback.apply(args[0] = this, args);
        return this;
      };
      d3_selectionPrototype.empty = function() {
        return !this.node();
      };
      d3_selectionPrototype.node = function() {
        for (var j = 0, m = this.length; j < m; j++) {
          for (var group = this[j], i = 0, n = group.length; i < n; i++) {
            var node = group[i];
            if (node) return node;
          }
        }
        return null;
      };
      d3_selectionPrototype.size = function() {
        var n = 0;
        d3_selection_each(this, function() {
          ++n;
        });
        return n;
      };
      function d3_selection_enter(selection) {
        d3_subclass(selection, d3_selection_enterPrototype);
        return selection;
      }
      var d3_selection_enterPrototype = [];
      d3.selection.enter = d3_selection_enter;
      d3.selection.enter.prototype = d3_selection_enterPrototype;
      d3_selection_enterPrototype.append = d3_selectionPrototype.append;
      d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
      d3_selection_enterPrototype.node = d3_selectionPrototype.node;
      d3_selection_enterPrototype.call = d3_selectionPrototype.call;
      d3_selection_enterPrototype.size = d3_selectionPrototype.size;
      d3_selection_enterPrototype.select = function(selector) {
        var subgroups = [], subgroup, subnode, upgroup, group, node;
        for (var j = -1, m = this.length; ++j < m; ) {
          upgroup = (group = this[j]).update;
          subgroups.push(subgroup = []);
          subgroup.parentNode = group.parentNode;
          for (var i = -1, n = group.length; ++i < n; ) {
            if (node = group[i]) {
              subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));
              subnode.__data__ = node.__data__;
            } else {
              subgroup.push(null);
            }
          }
        }
        return d3_selection(subgroups);
      };
      d3_selection_enterPrototype.insert = function(name, before) {
        if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);
        return d3_selectionPrototype.insert.call(this, name, before);
      };
      function d3_selection_enterInsertBefore(enter) {
        var i0, j0;
        return function(d, i, j) {
          var group = enter[j].update, n = group.length, node;
          if (j != j0) j0 = j, i0 = 0;
          if (i >= i0) i0 = i + 1;
          while (!(node = group[i0]) && ++i0 < n) ;
          return node;
        };
      }
      d3.select = function(node) {
        var group;
        if (typeof node === "string") {
          group = [ d3_select(node, d3_document) ];
          group.parentNode = d3_document.documentElement;
        } else {
          group = [ node ];
          group.parentNode = d3_documentElement(node);
        }
        return d3_selection([ group ]);
      };
      d3.selectAll = function(nodes) {
        var group;
        if (typeof nodes === "string") {
          group = d3_array(d3_selectAll(nodes, d3_document));
          group.parentNode = d3_document.documentElement;
        } else {
          group = d3_array(nodes);
          group.parentNode = null;
        }
        return d3_selection([ group ]);
      };
      d3_selectionPrototype.on = function(type, listener, capture) {
        var n = arguments.length;
        if (n < 3) {
          if (typeof type !== "string") {
            if (n < 2) listener = false;
            for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));
            return this;
          }
          if (n < 2) return (n = this.node()["__on" + type]) && n._;
          capture = false;
        }
        return this.each(d3_selection_on(type, listener, capture));
      };
      function d3_selection_on(type, listener, capture) {
        var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener;
        if (i > 0) type = type.slice(0, i);
        var filter = d3_selection_onFilters.get(type);
        if (filter) type = filter, wrap = d3_selection_onFilter;
        function onRemove() {
          var l = this[name];
          if (l) {
            this.removeEventListener(type, l, l.$);
            delete this[name];
          }
        }
        function onAdd() {
          var l = wrap(listener, d3_array(arguments));
          onRemove.call(this);
          this.addEventListener(type, this[name] = l, l.$ = capture);
          l._ = listener;
        }
        function removeAll() {
          var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match;
          for (var name in this) {
            if (match = name.match(re)) {
              var l = this[name];
              this.removeEventListener(match[1], l, l.$);
              delete this[name];
            }
          }
        }
        return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;
      }
      var d3_selection_onFilters = d3.map({
        mouseenter: "mouseover",
        mouseleave: "mouseout"
      });
      if (d3_document) {
        d3_selection_onFilters.forEach(function(k) {
          if ("on" + k in d3_document) d3_selection_onFilters.remove(k);
        });
      }
      function d3_selection_onListener(listener, argumentz) {
        return function(e) {
          var o = d3.event;
          d3.event = e;
          argumentz[0] = this.__data__;
          try {
            listener.apply(this, argumentz);
          } finally {
            d3.event = o;
          }
        };
      }
      function d3_selection_onFilter(listener, argumentz) {
        var l = d3_selection_onListener(listener, argumentz);
        return function(e) {
          var target = this, related = e.relatedTarget;
          if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {
            l.call(target, e);
          }
        };
      }
      var d3_event_dragSelect, d3_event_dragId = 0;
      function d3_event_dragSuppress(node) {
        var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window(node)).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault);
        if (d3_event_dragSelect == null) {
          d3_event_dragSelect = "onselectstart" in node ? false : d3_vendorSymbol(node.style, "userSelect");
        }
        if (d3_event_dragSelect) {
          var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];
          style[d3_event_dragSelect] = "none";
        }
        return function(suppressClick) {
          w.on(name, null);
          if (d3_event_dragSelect) style[d3_event_dragSelect] = select;
          if (suppressClick) {
            var off = function() {
              w.on(click, null);
            };
            w.on(click, function() {
              d3_eventPreventDefault();
              off();
            }, true);
            setTimeout(off, 0);
          }
        };
      }
      d3.mouse = function(container) {
        return d3_mousePoint(container, d3_eventSource());
      };
      var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;
      function d3_mousePoint(container, e) {
        if (e.changedTouches) e = e.changedTouches[0];
        var svg = container.ownerSVGElement || container;
        if (svg.createSVGPoint) {
          var point = svg.createSVGPoint();
          if (d3_mouse_bug44083 < 0) {
            var window = d3_window(container);
            if (window.scrollX || window.scrollY) {
              svg = d3.select("body").append("svg").style({
                position: "absolute",
                top: 0,
                left: 0,
                margin: 0,
                padding: 0,
                border: "none"
              }, "important");
              var ctm = svg[0][0].getScreenCTM();
              d3_mouse_bug44083 = !(ctm.f || ctm.e);
              svg.remove();
            }
          }
          if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, 
          point.y = e.clientY;
          point = point.matrixTransform(container.getScreenCTM().inverse());
          return [ point.x, point.y ];
        }
        var rect = container.getBoundingClientRect();
        return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];
      }
      d3.touch = function(container, touches, identifier) {
        if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;
        if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {
          if ((touch = touches[i]).identifier === identifier) {
            return d3_mousePoint(container, touch);
          }
        }
      };
      d3.behavior.drag = function() {
        var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, "touchmove", "touchend");
        function drag() {
          this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart);
        }
        function dragstart(id, position, subject, move, end) {
          return function() {
            var that = this, target = d3.event.target.correspondingElement || d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);
            if (origin) {
              dragOffset = origin.apply(that, arguments);
              dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];
            } else {
              dragOffset = [ 0, 0 ];
            }
            dispatch({
              type: "dragstart"
            });
            function moved() {
              var position1 = position(parent, dragId), dx, dy;
              if (!position1) return;
              dx = position1[0] - position0[0];
              dy = position1[1] - position0[1];
              dragged |= dx | dy;
              position0 = position1;
              dispatch({
                type: "drag",
                x: position1[0] + dragOffset[0],
                y: position1[1] + dragOffset[1],
                dx: dx,
                dy: dy
              });
            }
            function ended() {
              if (!position(parent, dragId)) return;
              dragSubject.on(move + dragName, null).on(end + dragName, null);
              dragRestore(dragged);
              dispatch({
                type: "dragend"
              });
            }
          };
        }
        drag.origin = function(x) {
          if (!arguments.length) return origin;
          origin = x;
          return drag;
        };
        return d3.rebind(drag, event, "on");
      };
      function d3_behavior_dragTouchId() {
        return d3.event.changedTouches[0].identifier;
      }
      d3.touches = function(container, touches) {
        if (arguments.length < 2) touches = d3_eventSource().touches;
        return touches ? d3_array(touches).map(function(touch) {
          var point = d3_mousePoint(container, touch);
          point.identifier = touch.identifier;
          return point;
        }) : [];
      };
      var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;
      function d3_sgn(x) {
        return x > 0 ? 1 : x < 0 ? -1 : 0;
      }
      function d3_cross2d(a, b, c) {
        return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
      }
      function d3_acos(x) {
        return x > 1 ? 0 : x < -1 ? π : Math.acos(x);
      }
      function d3_asin(x) {
        return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);
      }
      function d3_sinh(x) {
        return ((x = Math.exp(x)) - 1 / x) / 2;
      }
      function d3_cosh(x) {
        return ((x = Math.exp(x)) + 1 / x) / 2;
      }
      function d3_tanh(x) {
        return ((x = Math.exp(2 * x)) - 1) / (x + 1);
      }
      function d3_haversin(x) {
        return (x = Math.sin(x / 2)) * x;
      }
      var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;
      d3.interpolateZoom = function(p0, p1) {
        var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;
        if (d2 < ε2) {
          S = Math.log(w1 / w0) / ρ;
          i = function(t) {
            return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ];
          };
        } else {
          var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
          S = (r1 - r0) / ρ;
          i = function(t) {
            var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));
            return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];
          };
        }
        i.duration = S * 1e3;
        return i;
      };
      d3.behavior.zoom = function() {
        var view = {
          x: 0,
          y: 0,
          k: 1
        }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1;
        if (!d3_behavior_zoomWheel) {
          d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() {
            return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);
          }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() {
            return d3.event.wheelDelta;
          }, "mousewheel") : (d3_behavior_zoomDelta = function() {
            return -d3.event.detail;
          }, "MozMousePixelScroll");
        }
        function zoom(g) {
          g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted);
        }
        zoom.event = function(g) {
          g.each(function() {
            var dispatch = event.of(this, arguments), view1 = view;
            if (d3_transitionInheritId) {
              d3.select(this).transition().each("start.zoom", function() {
                view = this.__chart__ || {
                  x: 0,
                  y: 0,
                  k: 1
                };
                zoomstarted(dispatch);
              }).tween("zoom:zoom", function() {
                var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);
                return function(t) {
                  var l = i(t), k = dx / l[2];
                  this.__chart__ = view = {
                    x: cx - l[0] * k,
                    y: cy - l[1] * k,
                    k: k
                  };
                  zoomed(dispatch);
                };
              }).each("interrupt.zoom", function() {
                zoomended(dispatch);
              }).each("end.zoom", function() {
                zoomended(dispatch);
              });
            } else {
              this.__chart__ = view;
              zoomstarted(dispatch);
              zoomed(dispatch);
              zoomended(dispatch);
            }
          });
        };
        zoom.translate = function(_) {
          if (!arguments.length) return [ view.x, view.y ];
          view = {
            x: +_[0],
            y: +_[1],
            k: view.k
          };
          rescale();
          return zoom;
        };
        zoom.scale = function(_) {
          if (!arguments.length) return view.k;
          view = {
            x: view.x,
            y: view.y,
            k: null
          };
          scaleTo(+_);
          rescale();
          return zoom;
        };
        zoom.scaleExtent = function(_) {
          if (!arguments.length) return scaleExtent;
          scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];
          return zoom;
        };
        zoom.center = function(_) {
          if (!arguments.length) return center;
          center = _ && [ +_[0], +_[1] ];
          return zoom;
        };
        zoom.size = function(_) {
          if (!arguments.length) return size;
          size = _ && [ +_[0], +_[1] ];
          return zoom;
        };
        zoom.duration = function(_) {
          if (!arguments.length) return duration;
          duration = +_;
          return zoom;
        };
        zoom.x = function(z) {
          if (!arguments.length) return x1;
          x1 = z;
          x0 = z.copy();
          view = {
            x: 0,
            y: 0,
            k: 1
          };
          return zoom;
        };
        zoom.y = function(z) {
          if (!arguments.length) return y1;
          y1 = z;
          y0 = z.copy();
          view = {
            x: 0,
            y: 0,
            k: 1
          };
          return zoom;
        };
        function location(p) {
          return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];
        }
        function point(l) {
          return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];
        }
        function scaleTo(s) {
          view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));
        }
        function translateTo(p, l) {
          l = point(l);
          view.x += p[0] - l[0];
          view.y += p[1] - l[1];
        }
        function zoomTo(that, p, l, k) {
          that.__chart__ = {
            x: view.x,
            y: view.y,
            k: view.k
          };
          scaleTo(Math.pow(2, k));
          translateTo(center0 = p, l);
          that = d3.select(that);
          if (duration > 0) that = that.transition().duration(duration);
          that.call(zoom.event);
        }
        function rescale() {
          if (x1) x1.domain(x0.range().map(function(x) {
            return (x - view.x) / view.k;
          }).map(x0.invert));
          if (y1) y1.domain(y0.range().map(function(y) {
            return (y - view.y) / view.k;
          }).map(y0.invert));
        }
        function zoomstarted(dispatch) {
          if (!zooming++) dispatch({
            type: "zoomstart"
          });
        }
        function zoomed(dispatch) {
          rescale();
          dispatch({
            type: "zoom",
            scale: view.k,
            translate: [ view.x, view.y ]
          });
        }
        function zoomended(dispatch) {
          if (!--zooming) dispatch({
            type: "zoomend"
          }), center0 = null;
        }
        function mousedowned() {
          var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);
          d3_selection_interrupt.call(that);
          zoomstarted(dispatch);
          function moved() {
            dragged = 1;
            translateTo(d3.mouse(that), location0);
            zoomed(dispatch);
          }
          function ended() {
            subject.on(mousemove, null).on(mouseup, null);
            dragRestore(dragged);
            zoomended(dispatch);
          }
        }
        function touchstarted() {
          var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);
          started();
          zoomstarted(dispatch);
          subject.on(mousedown, null).on(touchstart, started);
          function relocate() {
            var touches = d3.touches(that);
            scale0 = view.k;
            touches.forEach(function(t) {
              if (t.identifier in locations0) locations0[t.identifier] = location(t);
            });
            return touches;
          }
          function started() {
            var target = d3.event.target;
            d3.select(target).on(touchmove, moved).on(touchend, ended);
            targets.push(target);
            var changed = d3.event.changedTouches;
            for (var i = 0, n = changed.length; i < n; ++i) {
              locations0[changed[i].identifier] = null;
            }
            var touches = relocate(), now = Date.now();
            if (touches.length === 1) {
              if (now - touchtime < 500) {
                var p = touches[0];
                zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);
                d3_eventPreventDefault();
              }
              touchtime = now;
            } else if (touches.length > 1) {
              var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];
              distance0 = dx * dx + dy * dy;
            }
          }
          function moved() {
            var touches = d3.touches(that), p0, l0, p1, l1;
            d3_selection_interrupt.call(that);
            for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {
              p1 = touches[i];
              if (l1 = locations0[p1.identifier]) {
                if (l0) break;
                p0 = p1, l0 = l1;
              }
            }
            if (l1) {
              var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);
              p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];
              l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];
              scaleTo(scale1 * scale0);
            }
            touchtime = null;
            translateTo(p0, l0);
            zoomed(dispatch);
          }
          function ended() {
            if (d3.event.touches.length) {
              var changed = d3.event.changedTouches;
              for (var i = 0, n = changed.length; i < n; ++i) {
                delete locations0[changed[i].identifier];
              }
              for (var identifier in locations0) {
                return void relocate();
              }
            }
            d3.selectAll(targets).on(zoomName, null);
            subject.on(mousedown, mousedowned).on(touchstart, touchstarted);
            dragRestore();
            zoomended(dispatch);
          }
        }
        function mousewheeled() {
          var dispatch = event.of(this, arguments);
          if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), 
          translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);
          mousewheelTimer = setTimeout(function() {
            mousewheelTimer = null;
            zoomended(dispatch);
          }, 50);
          d3_eventPreventDefault();
          scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);
          translateTo(center0, translate0);
          zoomed(dispatch);
        }
        function dblclicked() {
          var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;
          zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);
        }
        return d3.rebind(zoom, event, "on");
      };
      var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;
      d3.color = d3_color;
      function d3_color() {}
      d3_color.prototype.toString = function() {
        return this.rgb() + "";
      };
      d3.hsl = d3_hsl;
      function d3_hsl(h, s, l) {
        return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);
      }
      var d3_hslPrototype = d3_hsl.prototype = new d3_color();
      d3_hslPrototype.brighter = function(k) {
        k = Math.pow(.7, arguments.length ? k : 1);
        return new d3_hsl(this.h, this.s, this.l / k);
      };
      d3_hslPrototype.darker = function(k) {
        k = Math.pow(.7, arguments.length ? k : 1);
        return new d3_hsl(this.h, this.s, k * this.l);
      };
      d3_hslPrototype.rgb = function() {
        return d3_hsl_rgb(this.h, this.s, this.l);
      };
      function d3_hsl_rgb(h, s, l) {
        var m1, m2;
        h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;
        s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;
        l = l < 0 ? 0 : l > 1 ? 1 : l;
        m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
        m1 = 2 * l - m2;
        function v(h) {
          if (h > 360) h -= 360; else if (h < 0) h += 360;
          if (h < 60) return m1 + (m2 - m1) * h / 60;
          if (h < 180) return m2;
          if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
          return m1;
        }
        function vv(h) {
          return Math.round(v(h) * 255);
        }
        return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));
      }
      d3.hcl = d3_hcl;
      function d3_hcl(h, c, l) {
        return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);
      }
      var d3_hclPrototype = d3_hcl.prototype = new d3_color();
      d3_hclPrototype.brighter = function(k) {
        return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));
      };
      d3_hclPrototype.darker = function(k) {
        return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));
      };
      d3_hclPrototype.rgb = function() {
        return d3_hcl_lab(this.h, this.c, this.l).rgb();
      };
      function d3_hcl_lab(h, c, l) {
        if (isNaN(h)) h = 0;
        if (isNaN(c)) c = 0;
        return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);
      }
      d3.lab = d3_lab;
      function d3_lab(l, a, b) {
        return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);
      }
      var d3_lab_K = 18;
      var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;
      var d3_labPrototype = d3_lab.prototype = new d3_color();
      d3_labPrototype.brighter = function(k) {
        return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
      };
      d3_labPrototype.darker = function(k) {
        return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
      };
      d3_labPrototype.rgb = function() {
        return d3_lab_rgb(this.l, this.a, this.b);
      };
      function d3_lab_rgb(l, a, b) {
        var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;
        x = d3_lab_xyz(x) * d3_lab_X;
        y = d3_lab_xyz(y) * d3_lab_Y;
        z = d3_lab_xyz(z) * d3_lab_Z;
        return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));
      }
      function d3_lab_hcl(l, a, b) {
        return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);
      }
      function d3_lab_xyz(x) {
        return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;
      }
      function d3_xyz_lab(x) {
        return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;
      }
      function d3_xyz_rgb(r) {
        return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));
      }
      d3.rgb = d3_rgb;
      function d3_rgb(r, g, b) {
        return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);
      }
      function d3_rgbNumber(value) {
        return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);
      }
      function d3_rgbString(value) {
        return d3_rgbNumber(value) + "";
      }
      var d3_rgbPrototype = d3_rgb.prototype = new d3_color();
      d3_rgbPrototype.brighter = function(k) {
        k = Math.pow(.7, arguments.length ? k : 1);
        var r = this.r, g = this.g, b = this.b, i = 30;
        if (!r && !g && !b) return new d3_rgb(i, i, i);
        if (r && r < i) r = i;
        if (g && g < i) g = i;
        if (b && b < i) b = i;
        return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));
      };
      d3_rgbPrototype.darker = function(k) {
        k = Math.pow(.7, arguments.length ? k : 1);
        return new d3_rgb(k * this.r, k * this.g, k * this.b);
      };
      d3_rgbPrototype.hsl = function() {
        return d3_rgb_hsl(this.r, this.g, this.b);
      };
      d3_rgbPrototype.toString = function() {
        return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
      };
      function d3_rgb_hex(v) {
        return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);
      }
      function d3_rgb_parse(format, rgb, hsl) {
        var r = 0, g = 0, b = 0, m1, m2, color;
        m1 = /([a-z]+)\((.*)\)/.exec(format = format.toLowerCase());
        if (m1) {
          m2 = m1[2].split(",");
          switch (m1[1]) {
           case "hsl":
            {
              return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);
            }
    
           case "rgb":
            {
              return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));
            }
          }
        }
        if (color = d3_rgb_names.get(format)) {
          return rgb(color.r, color.g, color.b);
        }
        if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) {
          if (format.length === 4) {
            r = (color & 3840) >> 4;
            r = r >> 4 | r;
            g = color & 240;
            g = g >> 4 | g;
            b = color & 15;
            b = b << 4 | b;
          } else if (format.length === 7) {
            r = (color & 16711680) >> 16;
            g = (color & 65280) >> 8;
            b = color & 255;
          }
        }
        return rgb(r, g, b);
      }
      function d3_rgb_hsl(r, g, b) {
        var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;
        if (d) {
          s = l < .5 ? d / (max + min) : d / (2 - max - min);
          if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;
          h *= 60;
        } else {
          h = NaN;
          s = l > 0 && l < 1 ? 0 : h;
        }
        return new d3_hsl(h, s, l);
      }
      function d3_rgb_lab(r, g, b) {
        r = d3_rgb_xyz(r);
        g = d3_rgb_xyz(g);
        b = d3_rgb_xyz(b);
        var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);
        return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));
      }
      function d3_rgb_xyz(r) {
        return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);
      }
      function d3_rgb_parseNumber(c) {
        var f = parseFloat(c);
        return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
      }
      var d3_rgb_names = d3.map({
        aliceblue: 15792383,
        antiquewhite: 16444375,
        aqua: 65535,
        aquamarine: 8388564,
        azure: 15794175,
        beige: 16119260,
        bisque: 16770244,
        black: 0,
        blanchedalmond: 16772045,
        blue: 255,
        blueviolet: 9055202,
        brown: 10824234,
        burlywood: 14596231,
        cadetblue: 6266528,
        chartreuse: 8388352,
        chocolate: 13789470,
        coral: 16744272,
        cornflowerblue: 6591981,
        cornsilk: 16775388,
        crimson: 14423100,
        cyan: 65535,
        darkblue: 139,
        darkcyan: 35723,
        darkgoldenrod: 12092939,
        darkgray: 11119017,
        darkgreen: 25600,
        darkgrey: 11119017,
        darkkhaki: 12433259,
        darkmagenta: 9109643,
        darkolivegreen: 5597999,
        darkorange: 16747520,
        darkorchid: 10040012,
        darkred: 9109504,
        darksalmon: 15308410,
        darkseagreen: 9419919,
        darkslateblue: 4734347,
        darkslategray: 3100495,
        darkslategrey: 3100495,
        darkturquoise: 52945,
        darkviolet: 9699539,
        deeppink: 16716947,
        deepskyblue: 49151,
        dimgray: 6908265,
        dimgrey: 6908265,
        dodgerblue: 2003199,
        firebrick: 11674146,
        floralwhite: 16775920,
        forestgreen: 2263842,
        fuchsia: 16711935,
        gainsboro: 14474460,
        ghostwhite: 16316671,
        gold: 16766720,
        goldenrod: 14329120,
        gray: 8421504,
        green: 32768,
        greenyellow: 11403055,
        grey: 8421504,
        honeydew: 15794160,
        hotpink: 16738740,
        indianred: 13458524,
        indigo: 4915330,
        ivory: 16777200,
        khaki: 15787660,
        lavender: 15132410,
        lavenderblush: 16773365,
        lawngreen: 8190976,
        lemonchiffon: 16775885,
        lightblue: 11393254,
        lightcoral: 15761536,
        lightcyan: 14745599,
        lightgoldenrodyellow: 16448210,
        lightgray: 13882323,
        lightgreen: 9498256,
        lightgrey: 13882323,
        lightpink: 16758465,
        lightsalmon: 16752762,
        lightseagreen: 2142890,
        lightskyblue: 8900346,
        lightslategray: 7833753,
        lightslategrey: 7833753,
        lightsteelblue: 11584734,
        lightyellow: 16777184,
        lime: 65280,
        limegreen: 3329330,
        linen: 16445670,
        magenta: 16711935,
        maroon: 8388608,
        mediumaquamarine: 6737322,
        mediumblue: 205,
        mediumorchid: 12211667,
        mediumpurple: 9662683,
        mediumseagreen: 3978097,
        mediumslateblue: 8087790,
        mediumspringgreen: 64154,
        mediumturquoise: 4772300,
        mediumvioletred: 13047173,
        midnightblue: 1644912,
        mintcream: 16121850,
        mistyrose: 16770273,
        moccasin: 16770229,
        navajowhite: 16768685,
        navy: 128,
        oldlace: 16643558,
        olive: 8421376,
        olivedrab: 7048739,
        orange: 16753920,
        orangered: 16729344,
        orchid: 14315734,
        palegoldenrod: 15657130,
        palegreen: 10025880,
        paleturquoise: 11529966,
        palevioletred: 14381203,
        papayawhip: 16773077,
        peachpuff: 16767673,
        peru: 13468991,
        pink: 16761035,
        plum: 14524637,
        powderblue: 11591910,
        purple: 8388736,
        rebeccapurple: 6697881,
        red: 16711680,
        rosybrown: 12357519,
        royalblue: 4286945,
        saddlebrown: 9127187,
        salmon: 16416882,
        sandybrown: 16032864,
        seagreen: 3050327,
        seashell: 16774638,
        sienna: 10506797,
        silver: 12632256,
        skyblue: 8900331,
        slateblue: 6970061,
        slategray: 7372944,
        slategrey: 7372944,
        snow: 16775930,
        springgreen: 65407,
        steelblue: 4620980,
        tan: 13808780,
        teal: 32896,
        thistle: 14204888,
        tomato: 16737095,
        turquoise: 4251856,
        violet: 15631086,
        wheat: 16113331,
        white: 16777215,
        whitesmoke: 16119285,
        yellow: 16776960,
        yellowgreen: 10145074
      });
      d3_rgb_names.forEach(function(key, value) {
        d3_rgb_names.set(key, d3_rgbNumber(value));
      });
      function d3_functor(v) {
        return typeof v === "function" ? v : function() {
          return v;
        };
      }
      d3.functor = d3_functor;
      d3.xhr = d3_xhrType(d3_identity);
      function d3_xhrType(response) {
        return function(url, mimeType, callback) {
          if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, 
          mimeType = null;
          return d3_xhr(url, mimeType, response, callback);
        };
      }
      function d3_xhr(url, mimeType, response, callback) {
        var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null;
        if (this.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest();
        "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {
          request.readyState > 3 && respond();
        };
        function respond() {
          var status = request.status, result;
          if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {
            try {
              result = response.call(xhr, request);
            } catch (e) {
              dispatch.error.call(xhr, e);
              return;
            }
            dispatch.load.call(xhr, result);
          } else {
            dispatch.error.call(xhr, request);
          }
        }
        request.onprogress = function(event) {
          var o = d3.event;
          d3.event = event;
          try {
            dispatch.progress.call(xhr, request);
          } finally {
            d3.event = o;
          }
        };
        xhr.header = function(name, value) {
          name = (name + "").toLowerCase();
          if (arguments.length < 2) return headers[name];
          if (value == null) delete headers[name]; else headers[name] = value + "";
          return xhr;
        };
        xhr.mimeType = function(value) {
          if (!arguments.length) return mimeType;
          mimeType = value == null ? null : value + "";
          return xhr;
        };
        xhr.responseType = function(value) {
          if (!arguments.length) return responseType;
          responseType = value;
          return xhr;
        };
        xhr.response = function(value) {
          response = value;
          return xhr;
        };
        [ "get", "post" ].forEach(function(method) {
          xhr[method] = function() {
            return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));
          };
        });
        xhr.send = function(method, data, callback) {
          if (arguments.length === 2 && typeof data === "function") callback = data, data = null;
          request.open(method, url, true);
          if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*";
          if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);
          if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);
          if (responseType != null) request.responseType = responseType;
          if (callback != null) xhr.on("error", callback).on("load", function(request) {
            callback(null, request);
          });
          dispatch.beforesend.call(xhr, request);
          request.send(data == null ? null : data);
          return xhr;
        };
        xhr.abort = function() {
          request.abort();
          return xhr;
        };
        d3.rebind(xhr, dispatch, "on");
        return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));
      }
      function d3_xhr_fixCallback(callback) {
        return callback.length === 1 ? function(error, request) {
          callback(error == null ? request : null);
        } : callback;
      }
      function d3_xhrHasResponse(request) {
        var type = request.responseType;
        return type && type !== "text" ? request.response : request.responseText;
      }
      d3.dsv = function(delimiter, mimeType) {
        var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
        function dsv(url, row, callback) {
          if (arguments.length < 3) callback = row, row = null;
          var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);
          xhr.row = function(_) {
            return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;
          };
          return xhr;
        }
        function response(request) {
          return dsv.parse(request.responseText);
        }
        function typedResponse(f) {
          return function(request) {
            return dsv.parse(request.responseText, f);
          };
        }
        dsv.parse = function(text, f) {
          var o;
          return dsv.parseRows(text, function(row, i) {
            if (o) return o(row, i - 1);
            var a = new Function("d", "return {" + row.map(function(name, i) {
              return JSON.stringify(name) + ": d[" + i + "]";
            }).join(",") + "}");
            o = f ? function(row, i) {
              return f(a(row), i);
            } : a;
          });
        };
        dsv.parseRows = function(text, f) {
          var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;
          function token() {
            if (I >= N) return EOF;
            if (eol) return eol = false, EOL;
            var j = I;
            if (text.charCodeAt(j) === 34) {
              var i = j;
              while (i++ < N) {
                if (text.charCodeAt(i) === 34) {
                  if (text.charCodeAt(i + 1) !== 34) break;
                  ++i;
                }
              }
              I = i + 2;
              var c = text.charCodeAt(i + 1);
              if (c === 13) {
                eol = true;
                if (text.charCodeAt(i + 2) === 10) ++I;
              } else if (c === 10) {
                eol = true;
              }
              return text.slice(j + 1, i).replace(/""/g, '"');
            }
            while (I < N) {
              var c = text.charCodeAt(I++), k = 1;
              if (c === 10) eol = true; else if (c === 13) {
                eol = true;
                if (text.charCodeAt(I) === 10) ++I, ++k;
              } else if (c !== delimiterCode) continue;
              return text.slice(j, I - k);
            }
            return text.slice(j);
          }
          while ((t = token()) !== EOF) {
            var a = [];
            while (t !== EOL && t !== EOF) {
              a.push(t);
              t = token();
            }
            if (f && (a = f(a, n++)) == null) continue;
            rows.push(a);
          }
          return rows;
        };
        dsv.format = function(rows) {
          if (Array.isArray(rows[0])) return dsv.formatRows(rows);
          var fieldSet = new d3_Set(), fields = [];
          rows.forEach(function(row) {
            for (var field in row) {
              if (!fieldSet.has(field)) {
                fields.push(fieldSet.add(field));
              }
            }
          });
          return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {
            return fields.map(function(field) {
              return formatValue(row[field]);
            }).join(delimiter);
          })).join("\n");
        };
        dsv.formatRows = function(rows) {
          return rows.map(formatRow).join("\n");
        };
        function formatRow(row) {
          return row.map(formatValue).join(delimiter);
        }
        function formatValue(text) {
          return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text;
        }
        return dsv;
      };
      d3.csv = d3.dsv(",", "text/csv");
      d3.tsv = d3.dsv("    ", "text/tab-separated-values");
      var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, "requestAnimationFrame")] || function(callback) {
        setTimeout(callback, 17);
      };
      d3.timer = function() {
        d3_timer.apply(this, arguments);
      };
      function d3_timer(callback, delay, then) {
        var n = arguments.length;
        if (n < 2) delay = 0;
        if (n < 3) then = Date.now();
        var time = then + delay, timer = {
          c: callback,
          t: time,
          n: null
        };
        if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;
        d3_timer_queueTail = timer;
        if (!d3_timer_interval) {
          d3_timer_timeout = clearTimeout(d3_timer_timeout);
          d3_timer_interval = 1;
          d3_timer_frame(d3_timer_step);
        }
        return timer;
      }
      function d3_timer_step() {
        var now = d3_timer_mark(), delay = d3_timer_sweep() - now;
        if (delay > 24) {
          if (isFinite(delay)) {
            clearTimeout(d3_timer_timeout);
            d3_timer_timeout = setTimeout(d3_timer_step, delay);
          }
          d3_timer_interval = 0;
        } else {
          d3_timer_interval = 1;
          d3_timer_frame(d3_timer_step);
        }
      }
      d3.timer.flush = function() {
        d3_timer_mark();
        d3_timer_sweep();
      };
      function d3_timer_mark() {
        var now = Date.now(), timer = d3_timer_queueHead;
        while (timer) {
          if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;
          timer = timer.n;
        }
        return now;
      }
      function d3_timer_sweep() {
        var t0, t1 = d3_timer_queueHead, time = Infinity;
        while (t1) {
          if (t1.c) {
            if (t1.t < time) time = t1.t;
            t1 = (t0 = t1).n;
          } else {
            t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;
          }
        }
        d3_timer_queueTail = t0;
        return time;
      }
      function d3_format_precision(x, p) {
        return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);
      }
      d3.round = function(x, n) {
        return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);
      };
      var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix);
      d3.formatPrefix = function(value, precision) {
        var i = 0;
        if (value = +value) {
          if (value < 0) value *= -1;
          if (precision) value = d3.round(value, d3_format_precision(value, precision));
          i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);
          i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));
        }
        return d3_formatPrefixes[8 + i / 3];
      };
      function d3_formatPrefix(d, i) {
        var k = Math.pow(10, abs(8 - i) * 3);
        return {
          scale: i > 8 ? function(d) {
            return d / k;
          } : function(d) {
            return d * k;
          },
          symbol: d
        };
      }
      function d3_locale_numberFormat(locale) {
        var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {
          var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;
          while (i > 0 && g > 0) {
            if (length + g + 1 > width) g = Math.max(1, width - length);
            t.push(value.substring(i -= g, i + g));
            if ((length += g + 1) > width) break;
            g = locale_grouping[j = (j + 1) % locale_grouping.length];
          }
          return t.reverse().join(locale_thousands);
        } : d3_identity;
        return function(specifier) {
          var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "-", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false, exponent = true;
          if (precision) precision = +precision.substring(1);
          if (zfill || fill === "0" && align === "=") {
            zfill = fill = "0";
            align = "=";
          }
          switch (type) {
           case "n":
            comma = true;
            type = "g";
            break;
    
           case "%":
            scale = 100;
            suffix = "%";
            type = "f";
            break;
    
           case "p":
            scale = 100;
            suffix = "%";
            type = "r";
            break;
    
           case "b":
           case "o":
           case "x":
           case "X":
            if (symbol === "#") prefix = "0" + type.toLowerCase();
    
           case "c":
            exponent = false;
    
           case "d":
            integer = true;
            precision = 0;
            break;
    
           case "s":
            scale = -1;
            type = "r";
            break;
          }
          if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1];
          if (type == "r" && !precision) type = "g";
          if (precision != null) {
            if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision));
          }
          type = d3_format_types.get(type) || d3_format_typeDefault;
          var zcomma = zfill && comma;
          return function(value) {
            var fullSuffix = suffix;
            if (integer && value % 1) return "";
            var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign === "-" ? "" : sign;
            if (scale < 0) {
              var unit = d3.formatPrefix(value, precision);
              value = unit.scale(value);
              fullSuffix = unit.symbol + suffix;
            } else {
              value *= scale;
            }
            value = type(value, precision);
            var i = value.lastIndexOf("."), before, after;
            if (i < 0) {
              var j = exponent ? value.lastIndexOf("e") : -1;
              if (j < 0) before = value, after = ""; else before = value.substring(0, j), after = value.substring(j);
            } else {
              before = value.substring(0, i);
              after = locale_decimal + value.substring(i + 1);
            }
            if (!zfill && comma) before = formatGroup(before, Infinity);
            var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : "";
            if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);
            negative += prefix;
            value = before + after;
            return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;
          };
        };
      }
      var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i;
      var d3_format_types = d3.map({
        b: function(x) {
          return x.toString(2);
        },
        c: function(x) {
          return String.fromCharCode(x);
        },
        o: function(x) {
          return x.toString(8);
        },
        x: function(x) {
          return x.toString(16);
        },
        X: function(x) {
          return x.toString(16).toUpperCase();
        },
        g: function(x, p) {
          return x.toPrecision(p);
        },
        e: function(x, p) {
          return x.toExponential(p);
        },
        f: function(x, p) {
          return x.toFixed(p);
        },
        r: function(x, p) {
          return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));
        }
      });
      function d3_format_typeDefault(x) {
        return x + "";
      }
      var d3_time = d3.time = {}, d3_date = Date;
      function d3_date_utc() {
        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);
      }
      d3_date_utc.prototype = {
        getDate: function() {
          return this._.getUTCDate();
        },
        getDay: function() {
          return this._.getUTCDay();
        },
        getFullYear: function() {
          return this._.getUTCFullYear();
        },
        getHours: function() {
          return this._.getUTCHours();
        },
        getMilliseconds: function() {
          return this._.getUTCMilliseconds();
        },
        getMinutes: function() {
          return this._.getUTCMinutes();
        },
        getMonth: function() {
          return this._.getUTCMonth();
        },
        getSeconds: function() {
          return this._.getUTCSeconds();
        },
        getTime: function() {
          return this._.getTime();
        },
        getTimezoneOffset: function() {
          return 0;
        },
        valueOf: function() {
          return this._.valueOf();
        },
        setDate: function() {
          d3_time_prototype.setUTCDate.apply(this._, arguments);
        },
        setDay: function() {
          d3_time_prototype.setUTCDay.apply(this._, arguments);
        },
        setFullYear: function() {
          d3_time_prototype.setUTCFullYear.apply(this._, arguments);
        },
        setHours: function() {
          d3_time_prototype.setUTCHours.apply(this._, arguments);
        },
        setMilliseconds: function() {
          d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);
        },
        setMinutes: function() {
          d3_time_prototype.setUTCMinutes.apply(this._, arguments);
        },
        setMonth: function() {
          d3_time_prototype.setUTCMonth.apply(this._, arguments);
        },
        setSeconds: function() {
          d3_time_prototype.setUTCSeconds.apply(this._, arguments);
        },
        setTime: function() {
          d3_time_prototype.setTime.apply(this._, arguments);
        }
      };
      var d3_time_prototype = Date.prototype;
      function d3_time_interval(local, step, number) {
        function round(date) {
          var d0 = local(date), d1 = offset(d0, 1);
          return date - d0 < d1 - date ? d0 : d1;
        }
        function ceil(date) {
          step(date = local(new d3_date(date - 1)), 1);
          return date;
        }
        function offset(date, k) {
          step(date = new d3_date(+date), k);
          return date;
        }
        function range(t0, t1, dt) {
          var time = ceil(t0), times = [];
          if (dt > 1) {
            while (time < t1) {
              if (!(number(time) % dt)) times.push(new Date(+time));
              step(time, 1);
            }
          } else {
            while (time < t1) times.push(new Date(+time)), step(time, 1);
          }
          return times;
        }
        function range_utc(t0, t1, dt) {
          try {
            d3_date = d3_date_utc;
            var utc = new d3_date_utc();
            utc._ = t0;
            return range(utc, t1, dt);
          } finally {
            d3_date = Date;
          }
        }
        local.floor = local;
        local.round = round;
        local.ceil = ceil;
        local.offset = offset;
        local.range = range;
        var utc = local.utc = d3_time_interval_utc(local);
        utc.floor = utc;
        utc.round = d3_time_interval_utc(round);
        utc.ceil = d3_time_interval_utc(ceil);
        utc.offset = d3_time_interval_utc(offset);
        utc.range = range_utc;
        return local;
      }
      function d3_time_interval_utc(method) {
        return function(date, k) {
          try {
            d3_date = d3_date_utc;
            var utc = new d3_date_utc();
            utc._ = date;
            return method(utc, k)._;
          } finally {
            d3_date = Date;
          }
        };
      }
      d3_time.year = d3_time_interval(function(date) {
        date = d3_time.day(date);
        date.setMonth(0, 1);
        return date;
      }, function(date, offset) {
        date.setFullYear(date.getFullYear() + offset);
      }, function(date) {
        return date.getFullYear();
      });
      d3_time.years = d3_time.year.range;
      d3_time.years.utc = d3_time.year.utc.range;
      d3_time.day = d3_time_interval(function(date) {
        var day = new d3_date(2e3, 0);
        day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
        return day;
      }, function(date, offset) {
        date.setDate(date.getDate() + offset);
      }, function(date) {
        return date.getDate() - 1;
      });
      d3_time.days = d3_time.day.range;
      d3_time.days.utc = d3_time.day.utc.range;
      d3_time.dayOfYear = function(date) {
        var year = d3_time.year(date);
        return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);
      };
      [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) {
        i = 7 - i;
        var interval = d3_time[day] = d3_time_interval(function(date) {
          (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);
          return date;
        }, function(date, offset) {
          date.setDate(date.getDate() + Math.floor(offset) * 7);
        }, function(date) {
          var day = d3_time.year(date).getDay();
          return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);
        });
        d3_time[day + "s"] = interval.range;
        d3_time[day + "s"].utc = interval.utc.range;
        d3_time[day + "OfYear"] = function(date) {
          var day = d3_time.year(date).getDay();
          return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);
        };
      });
      d3_time.week = d3_time.sunday;
      d3_time.weeks = d3_time.sunday.range;
      d3_time.weeks.utc = d3_time.sunday.utc.range;
      d3_time.weekOfYear = d3_time.sundayOfYear;
      function d3_locale_timeFormat(locale) {
        var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;
        function d3_time_format(template) {
          var n = template.length;
          function format(date) {
            var string = [], i = -1, j = 0, c, p, f;
            while (++i < n) {
              if (template.charCodeAt(i) === 37) {
                string.push(template.slice(j, i));
                if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);
                if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p);
                string.push(c);
                j = i + 1;
              }
            }
            string.push(template.slice(j, i));
            return string.join("");
          }
          format.parse = function(string) {
            var d = {
              y: 1900,
              m: 0,
              d: 1,
              H: 0,
              M: 0,
              S: 0,
              L: 0,
              Z: null
            }, i = d3_time_parse(d, template, string, 0);
            if (i != string.length) return null;
            if ("p" in d) d.H = d.H % 12 + d.p * 12;
            var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();
            if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("W" in d || "U" in d) {
              if (!("w" in d)) d.w = "W" in d ? 1 : 0;
              date.setFullYear(d.y, 0, 1);
              date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);
            } else date.setFullYear(d.y, d.m, d.d);
            date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);
            return localZ ? date._ : date;
          };
          format.toString = function() {
            return template;
          };
          return format;
        }
        function d3_time_parse(date, template, string, j) {
          var c, p, t, i = 0, n = template.length, m = string.length;
          while (i < n) {
            if (j >= m) return -1;
            c = template.charCodeAt(i++);
            if (c === 37) {
              t = template.charAt(i++);
              p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];
              if (!p || (j = p(date, string, j)) < 0) return -1;
            } else if (c != string.charCodeAt(j++)) {
              return -1;
            }
          }
          return j;
        }
        d3_time_format.utc = function(template) {
          var local = d3_time_format(template);
          function format(date) {
            try {
              d3_date = d3_date_utc;
              var utc = new d3_date();
              utc._ = date;
              return local(utc);
            } finally {
              d3_date = Date;
            }
          }
          format.parse = function(string) {
            try {
              d3_date = d3_date_utc;
              var date = local.parse(string);
              return date && date._;
            } finally {
              d3_date = Date;
            }
          };
          format.toString = local.toString;
          return format;
        };
        d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;
        var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);
        locale_periods.forEach(function(p, i) {
          d3_time_periodLookup.set(p.toLowerCase(), i);
        });
        var d3_time_formats = {
          a: function(d) {
            return locale_shortDays[d.getDay()];
          },
          A: function(d) {
            return locale_days[d.getDay()];
          },
          b: function(d) {
            return locale_shortMonths[d.getMonth()];
          },
          B: function(d) {
            return locale_months[d.getMonth()];
          },
          c: d3_time_format(locale_dateTime),
          d: function(d, p) {
            return d3_time_formatPad(d.getDate(), p, 2);
          },
          e: function(d, p) {
            return d3_time_formatPad(d.getDate(), p, 2);
          },
          H: function(d, p) {
            return d3_time_formatPad(d.getHours(), p, 2);
          },
          I: function(d, p) {
            return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);
          },
          j: function(d, p) {
            return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);
          },
          L: function(d, p) {
            return d3_time_formatPad(d.getMilliseconds(), p, 3);
          },
          m: function(d, p) {
            return d3_time_formatPad(d.getMonth() + 1, p, 2);
          },
          M: function(d, p) {
            return d3_time_formatPad(d.getMinutes(), p, 2);
          },
          p: function(d) {
            return locale_periods[+(d.getHours() >= 12)];
          },
          S: function(d, p) {
            return d3_time_formatPad(d.getSeconds(), p, 2);
          },
          U: function(d, p) {
            return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);
          },
          w: function(d) {
            return d.getDay();
          },
          W: function(d, p) {
            return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);
          },
          x: d3_time_format(locale_date),
          X: d3_time_format(locale_time),
          y: function(d, p) {
            return d3_time_formatPad(d.getFullYear() % 100, p, 2);
          },
          Y: function(d, p) {
            return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);
          },
          Z: d3_time_zone,
          "%": function() {
            return "%";
          }
        };
        var d3_time_parsers = {
          a: d3_time_parseWeekdayAbbrev,
          A: d3_time_parseWeekday,
          b: d3_time_parseMonthAbbrev,
          B: d3_time_parseMonth,
          c: d3_time_parseLocaleFull,
          d: d3_time_parseDay,
          e: d3_time_parseDay,
          H: d3_time_parseHour24,
          I: d3_time_parseHour24,
          j: d3_time_parseDayOfYear,
          L: d3_time_parseMilliseconds,
          m: d3_time_parseMonthNumber,
          M: d3_time_parseMinutes,
          p: d3_time_parseAmPm,
          S: d3_time_parseSeconds,
          U: d3_time_parseWeekNumberSunday,
          w: d3_time_parseWeekdayNumber,
          W: d3_time_parseWeekNumberMonday,
          x: d3_time_parseLocaleDate,
          X: d3_time_parseLocaleTime,
          y: d3_time_parseYear,
          Y: d3_time_parseFullYear,
          Z: d3_time_parseZone,
          "%": d3_time_parseLiteralPercent
        };
        function d3_time_parseWeekdayAbbrev(date, string, i) {
          d3_time_dayAbbrevRe.lastIndex = 0;
          var n = d3_time_dayAbbrevRe.exec(string.slice(i));
          return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
        }
        function d3_time_parseWeekday(date, string, i) {
          d3_time_dayRe.lastIndex = 0;
          var n = d3_time_dayRe.exec(string.slice(i));
          return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
        }
        function d3_time_parseMonthAbbrev(date, string, i) {
          d3_time_monthAbbrevRe.lastIndex = 0;
          var n = d3_time_monthAbbrevRe.exec(string.slice(i));
          return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
        }
        function d3_time_parseMonth(date, string, i) {
          d3_time_monthRe.lastIndex = 0;
          var n = d3_time_monthRe.exec(string.slice(i));
          return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
        }
        function d3_time_parseLocaleFull(date, string, i) {
          return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
        }
        function d3_time_parseLocaleDate(date, string, i) {
          return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
        }
        function d3_time_parseLocaleTime(date, string, i) {
          return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
        }
        function d3_time_parseAmPm(date, string, i) {
          var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());
          return n == null ? -1 : (date.p = n, i);
        }
        return d3_time_format;
      }
      var d3_time_formatPads = {
        "-": "",
        _: " ",
        "0": "0"
      }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/;
      function d3_time_formatPad(value, fill, width) {
        var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length;
        return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
      }
      function d3_time_formatRe(names) {
        return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i");
      }
      function d3_time_formatLookup(names) {
        var map = new d3_Map(), i = -1, n = names.length;
        while (++i < n) map.set(names[i].toLowerCase(), i);
        return map;
      }
      function d3_time_parseWeekdayNumber(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 1));
        return n ? (date.w = +n[0], i + n[0].length) : -1;
      }
      function d3_time_parseWeekNumberSunday(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i));
        return n ? (date.U = +n[0], i + n[0].length) : -1;
      }
      function d3_time_parseWeekNumberMonday(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i));
        return n ? (date.W = +n[0], i + n[0].length) : -1;
      }
      function d3_time_parseFullYear(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 4));
        return n ? (date.y = +n[0], i + n[0].length) : -1;
      }
      function d3_time_parseYear(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 2));
        return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;
      }
      function d3_time_parseZone(date, string, i) {
        return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, 
        i + 5) : -1;
      }
      function d3_time_expandYear(d) {
        return d + (d > 68 ? 1900 : 2e3);
      }
      function d3_time_parseMonthNumber(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 2));
        return n ? (date.m = n[0] - 1, i + n[0].length) : -1;
      }
      function d3_time_parseDay(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 2));
        return n ? (date.d = +n[0], i + n[0].length) : -1;
      }
      function d3_time_parseDayOfYear(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 3));
        return n ? (date.j = +n[0], i + n[0].length) : -1;
      }
      function d3_time_parseHour24(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 2));
        return n ? (date.H = +n[0], i + n[0].length) : -1;
      }
      function d3_time_parseMinutes(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 2));
        return n ? (date.M = +n[0], i + n[0].length) : -1;
      }
      function d3_time_parseSeconds(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 2));
        return n ? (date.S = +n[0], i + n[0].length) : -1;
      }
      function d3_time_parseMilliseconds(date, string, i) {
        d3_time_numberRe.lastIndex = 0;
        var n = d3_time_numberRe.exec(string.slice(i, i + 3));
        return n ? (date.L = +n[0], i + n[0].length) : -1;
      }
      function d3_time_zone(d) {
        var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60;
        return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2);
      }
      function d3_time_parseLiteralPercent(date, string, i) {
        d3_time_percentRe.lastIndex = 0;
        var n = d3_time_percentRe.exec(string.slice(i, i + 1));
        return n ? i + n[0].length : -1;
      }
      function d3_time_formatMulti(formats) {
        var n = formats.length, i = -1;
        while (++i < n) formats[i][0] = this(formats[i][0]);
        return function(date) {
          var i = 0, f = formats[i];
          while (!f[1](date)) f = formats[++i];
          return f[0](date);
        };
      }
      d3.locale = function(locale) {
        return {
          numberFormat: d3_locale_numberFormat(locale),
          timeFormat: d3_locale_timeFormat(locale)
        };
      };
      var d3_locale_enUS = d3.locale({
        decimal: ".",
        thousands: ",",
        grouping: [ 3 ],
        currency: [ "$", "" ],
        dateTime: "%a %b %e %X %Y",
        date: "%m/%d/%Y",
        time: "%H:%M:%S",
        periods: [ "AM", "PM" ],
        days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
        shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
        months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ],
        shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]
      });
      d3.format = d3_locale_enUS.numberFormat;
      d3.geo = {};
      function d3_adder() {}
      d3_adder.prototype = {
        s: 0,
        t: 0,
        add: function(y) {
          d3_adderSum(y, this.t, d3_adderTemp);
          d3_adderSum(d3_adderTemp.s, this.s, this);
          if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;
        },
        reset: function() {
          this.s = this.t = 0;
        },
        valueOf: function() {
          return this.s;
        }
      };
      var d3_adderTemp = new d3_adder();
      function d3_adderSum(a, b, o) {
        var x = o.s = a + b, bv = x - a, av = x - bv;
        o.t = a - av + (b - bv);
      }
      d3.geo.stream = function(object, listener) {
        if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {
          d3_geo_streamObjectType[object.type](object, listener);
        } else {
          d3_geo_streamGeometry(object, listener);
        }
      };
      function d3_geo_streamGeometry(geometry, listener) {
        if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {
          d3_geo_streamGeometryType[geometry.type](geometry, listener);
        }
      }
      var d3_geo_streamObjectType = {
        Feature: function(feature, listener) {
          d3_geo_streamGeometry(feature.geometry, listener);
        },
        FeatureCollection: function(object, listener) {
          var features = object.features, i = -1, n = features.length;
          while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);
        }
      };
      var d3_geo_streamGeometryType = {
        Sphere: function(object, listener) {
          listener.sphere();
        },
        Point: function(object, listener) {
          object = object.coordinates;
          listener.point(object[0], object[1], object[2]);
        },
        MultiPoint: function(object, listener) {
          var coordinates = object.coordinates, i = -1, n = coordinates.length;
          while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);
        },
        LineString: function(object, listener) {
          d3_geo_streamLine(object.coordinates, listener, 0);
        },
        MultiLineString: function(object, listener) {
          var coordinates = object.coordinates, i = -1, n = coordinates.length;
          while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);
        },
        Polygon: function(object, listener) {
          d3_geo_streamPolygon(object.coordinates, listener);
        },
        MultiPolygon: function(object, listener) {
          var coordinates = object.coordinates, i = -1, n = coordinates.length;
          while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);
        },
        GeometryCollection: function(object, listener) {
          var geometries = object.geometries, i = -1, n = geometries.length;
          while (++i < n) d3_geo_streamGeometry(geometries[i], listener);
        }
      };
      function d3_geo_streamLine(coordinates, listener, closed) {
        var i = -1, n = coordinates.length - closed, coordinate;
        listener.lineStart();
        while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);
        listener.lineEnd();
      }
      function d3_geo_streamPolygon(coordinates, listener) {
        var i = -1, n = coordinates.length;
        listener.polygonStart();
        while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);
        listener.polygonEnd();
      }
      d3.geo.area = function(object) {
        d3_geo_areaSum = 0;
        d3.geo.stream(object, d3_geo_area);
        return d3_geo_areaSum;
      };
      var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();
      var d3_geo_area = {
        sphere: function() {
          d3_geo_areaSum += 4 * π;
        },
        point: d3_noop,
        lineStart: d3_noop,
        lineEnd: d3_noop,
        polygonStart: function() {
          d3_geo_areaRingSum.reset();
          d3_geo_area.lineStart = d3_geo_areaRingStart;
        },
        polygonEnd: function() {
          var area = 2 * d3_geo_areaRingSum;
          d3_geo_areaSum += area < 0 ? 4 * π + area : area;
          d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;
        }
      };
      function d3_geo_areaRingStart() {
        var λ00, φ00, λ0, cosφ0, sinφ0;
        d3_geo_area.point = function(λ, φ) {
          d3_geo_area.point = nextPoint;
          λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), 
          sinφ0 = Math.sin(φ);
        };
        function nextPoint(λ, φ) {
          λ *= d3_radians;
          φ = φ * d3_radians / 2 + π / 4;
          var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);
          d3_geo_areaRingSum.add(Math.atan2(v, u));
          λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;
        }
        d3_geo_area.lineEnd = function() {
          nextPoint(λ00, φ00);
        };
      }
      function d3_geo_cartesian(spherical) {
        var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);
        return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];
      }
      function d3_geo_cartesianDot(a, b) {
        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
      }
      function d3_geo_cartesianCross(a, b) {
        return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];
      }
      function d3_geo_cartesianAdd(a, b) {
        a[0] += b[0];
        a[1] += b[1];
        a[2] += b[2];
      }
      function d3_geo_cartesianScale(vector, k) {
        return [ vector[0] * k, vector[1] * k, vector[2] * k ];
      }
      function d3_geo_cartesianNormalize(d) {
        var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
        d[0] /= l;
        d[1] /= l;
        d[2] /= l;
      }
      function d3_geo_spherical(cartesian) {
        return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];
      }
      function d3_geo_sphericalEqual(a, b) {
        return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;
      }
      d3.geo.bounds = function() {
        var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;
        var bound = {
          point: point,
          lineStart: lineStart,
          lineEnd: lineEnd,
          polygonStart: function() {
            bound.point = ringPoint;
            bound.lineStart = ringStart;
            bound.lineEnd = ringEnd;
            dλSum = 0;
            d3_geo_area.polygonStart();
          },
          polygonEnd: function() {
            d3_geo_area.polygonEnd();
            bound.point = point;
            bound.lineStart = lineStart;
            bound.lineEnd = lineEnd;
            if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;
            range[0] = λ0, range[1] = λ1;
          }
        };
        function point(λ, φ) {
          ranges.push(range = [ λ0 = λ, λ1 = λ ]);
          if (φ < φ0) φ0 = φ;
          if (φ > φ1) φ1 = φ;
        }
        function linePoint(λ, φ) {
          var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);
          if (p0) {
            var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);
            d3_geo_cartesianNormalize(inflection);
            inflection = d3_geo_spherical(inflection);
            var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;
            if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
              var φi = inflection[1] * d3_degrees;
              if (φi > φ1) φ1 = φi;
            } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
              var φi = -inflection[1] * d3_degrees;
              if (φi < φ0) φ0 = φi;
            } else {
              if (φ < φ0) φ0 = φ;
              if (φ > φ1) φ1 = φ;
            }
            if (antimeridian) {
              if (λ < λ_) {
                if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
              } else {
                if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
              }
            } else {
              if (λ1 >= λ0) {
                if (λ < λ0) λ0 = λ;
                if (λ > λ1) λ1 = λ;
              } else {
                if (λ > λ_) {
                  if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
                } else {
                  if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
                }
              }
            }
          } else {
            point(λ, φ);
          }
          p0 = p, λ_ = λ;
        }
        function lineStart() {
          bound.point = linePoint;
        }
        function lineEnd() {
          range[0] = λ0, range[1] = λ1;
          bound.point = point;
          p0 = null;
        }
        function ringPoint(λ, φ) {
          if (p0) {
            var dλ = λ - λ_;
            dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;
          } else λ__ = λ, φ__ = φ;
          d3_geo_area.point(λ, φ);
          linePoint(λ, φ);
        }
        function ringStart() {
          d3_geo_area.lineStart();
        }
        function ringEnd() {
          ringPoint(λ__, φ__);
          d3_geo_area.lineEnd();
          if (abs(dλSum) > ε) λ0 = -(λ1 = 180);
          range[0] = λ0, range[1] = λ1;
          p0 = null;
        }
        function angle(λ0, λ1) {
          return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;
        }
        function compareRanges(a, b) {
          return a[0] - b[0];
        }
        function withinRange(x, range) {
          return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
        }
        return function(feature) {
          φ1 = λ1 = -(λ0 = φ0 = Infinity);
          ranges = [];
          d3.geo.stream(feature, bound);
          var n = ranges.length;
          if (n) {
            ranges.sort(compareRanges);
            for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {
              b = ranges[i];
              if (withinRange(b[0], a) || withinRange(b[1], a)) {
                if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
                if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
              } else {
                merged.push(a = b);
              }
            }
            var best = -Infinity, dλ;
            for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {
              b = merged[i];
              if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];
            }
          }
          ranges = range = null;
          return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];
        };
      }();
      d3.geo.centroid = function(object) {
        d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
        d3.geo.stream(object, d3_geo_centroid);
        var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;
        if (m < ε2) {
          x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;
          if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;
          m = x * x + y * y + z * z;
          if (m < ε2) return [ NaN, NaN ];
        }
        return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];
      };
      var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;
      var d3_geo_centroid = {
        sphere: d3_noop,
        point: d3_geo_centroidPoint,
        lineStart: d3_geo_centroidLineStart,
        lineEnd: d3_geo_centroidLineEnd,
        polygonStart: function() {
          d3_geo_centroid.lineStart = d3_geo_centroidRingStart;
        },
        polygonEnd: function() {
          d3_geo_centroid.lineStart = d3_geo_centroidLineStart;
        }
      };
      function d3_geo_centroidPoint(λ, φ) {
        λ *= d3_radians;
        var cosφ = Math.cos(φ *= d3_radians);
        d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));
      }
      function d3_geo_centroidPointXYZ(x, y, z) {
        ++d3_geo_centroidW0;
        d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;
        d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;
        d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;
      }
      function d3_geo_centroidLineStart() {
        var x0, y0, z0;
        d3_geo_centroid.point = function(λ, φ) {
          λ *= d3_radians;
          var cosφ = Math.cos(φ *= d3_radians);
          x0 = cosφ * Math.cos(λ);
          y0 = cosφ * Math.sin(λ);
          z0 = Math.sin(φ);
          d3_geo_centroid.point = nextPoint;
          d3_geo_centroidPointXYZ(x0, y0, z0);
        };
        function nextPoint(λ, φ) {
          λ *= d3_radians;
          var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
          d3_geo_centroidW1 += w;
          d3_geo_centroidX1 += w * (x0 + (x0 = x));
          d3_geo_centroidY1 += w * (y0 + (y0 = y));
          d3_geo_centroidZ1 += w * (z0 + (z0 = z));
          d3_geo_centroidPointXYZ(x0, y0, z0);
        }
      }
      function d3_geo_centroidLineEnd() {
        d3_geo_centroid.point = d3_geo_centroidPoint;
      }
      function d3_geo_centroidRingStart() {
        var λ00, φ00, x0, y0, z0;
        d3_geo_centroid.point = function(λ, φ) {
          λ00 = λ, φ00 = φ;
          d3_geo_centroid.point = nextPoint;
          λ *= d3_radians;
          var cosφ = Math.cos(φ *= d3_radians);
          x0 = cosφ * Math.cos(λ);
          y0 = cosφ * Math.sin(λ);
          z0 = Math.sin(φ);
          d3_geo_centroidPointXYZ(x0, y0, z0);
        };
        d3_geo_centroid.lineEnd = function() {
          nextPoint(λ00, φ00);
          d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;
          d3_geo_centroid.point = d3_geo_centroidPoint;
        };
        function nextPoint(λ, φ) {
          λ *= d3_radians;
          var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);
          d3_geo_centroidX2 += v * cx;
          d3_geo_centroidY2 += v * cy;
          d3_geo_centroidZ2 += v * cz;
          d3_geo_centroidW1 += w;
          d3_geo_centroidX1 += w * (x0 + (x0 = x));
          d3_geo_centroidY1 += w * (y0 + (y0 = y));
          d3_geo_centroidZ1 += w * (z0 + (z0 = z));
          d3_geo_centroidPointXYZ(x0, y0, z0);
        }
      }
      function d3_geo_compose(a, b) {
        function compose(x, y) {
          return x = a(x, y), b(x[0], x[1]);
        }
        if (a.invert && b.invert) compose.invert = function(x, y) {
          return x = b.invert(x, y), x && a.invert(x[0], x[1]);
        };
        return compose;
      }
      function d3_true() {
        return true;
      }
      function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {
        var subject = [], clip = [];
        segments.forEach(function(segment) {
          if ((n = segment.length - 1) <= 0) return;
          var n, p0 = segment[0], p1 = segment[n];
          if (d3_geo_sphericalEqual(p0, p1)) {
            listener.lineStart();
            for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);
            listener.lineEnd();
            return;
          }
          var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);
          a.o = b;
          subject.push(a);
          clip.push(b);
          a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);
          b = new d3_geo_clipPolygonIntersection(p1, null, a, true);
          a.o = b;
          subject.push(a);
          clip.push(b);
        });
        clip.sort(compare);
        d3_geo_clipPolygonLinkCircular(subject);
        d3_geo_clipPolygonLinkCircular(clip);
        if (!subject.length) return;
        for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {
          clip[i].e = entry = !entry;
        }
        var start = subject[0], points, point;
        while (1) {
          var current = start, isSubject = true;
          while (current.v) if ((current = current.n) === start) return;
          points = current.z;
          listener.lineStart();
          do {
            current.v = current.o.v = true;
            if (current.e) {
              if (isSubject) {
                for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);
              } else {
                interpolate(current.x, current.n.x, 1, listener);
              }
              current = current.n;
            } else {
              if (isSubject) {
                points = current.p.z;
                for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);
              } else {
                interpolate(current.x, current.p.x, -1, listener);
              }
              current = current.p;
            }
            current = current.o;
            points = current.z;
            isSubject = !isSubject;
          } while (!current.v);
          listener.lineEnd();
        }
      }
      function d3_geo_clipPolygonLinkCircular(array) {
        if (!(n = array.length)) return;
        var n, i = 0, a = array[0], b;
        while (++i < n) {
          a.n = b = array[i];
          b.p = a;
          a = b;
        }
        a.n = b = array[0];
        b.p = a;
      }
      function d3_geo_clipPolygonIntersection(point, points, other, entry) {
        this.x = point;
        this.z = points;
        this.o = other;
        this.e = entry;
        this.v = false;
        this.n = this.p = null;
      }
      function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {
        return function(rotate, listener) {
          var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);
          var clip = {
            point: point,
            lineStart: lineStart,
            lineEnd: lineEnd,
            polygonStart: function() {
              clip.point = pointRing;
              clip.lineStart = ringStart;
              clip.lineEnd = ringEnd;
              segments = [];
              polygon = [];
            },
            polygonEnd: function() {
              clip.point = point;
              clip.lineStart = lineStart;
              clip.lineEnd = lineEnd;
              segments = d3.merge(segments);
              var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);
              if (segments.length) {
                if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
                d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);
              } else if (clipStartInside) {
                if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
                listener.lineStart();
                interpolate(null, null, 1, listener);
                listener.lineEnd();
              }
              if (polygonStarted) listener.polygonEnd(), polygonStarted = false;
              segments = polygon = null;
            },
            sphere: function() {
              listener.polygonStart();
              listener.lineStart();
              interpolate(null, null, 1, listener);
              listener.lineEnd();
              listener.polygonEnd();
            }
          };
          function point(λ, φ) {
            var point = rotate(λ, φ);
            if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);
          }
          function pointLine(λ, φ) {
            var point = rotate(λ, φ);
            line.point(point[0], point[1]);
          }
          function lineStart() {
            clip.point = pointLine;
            line.lineStart();
          }
          function lineEnd() {
            clip.point = point;
            line.lineEnd();
          }
          var segments;
          var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;
          function pointRing(λ, φ) {
            ring.push([ λ, φ ]);
            var point = rotate(λ, φ);
            ringListener.point(point[0], point[1]);
          }
          function ringStart() {
            ringListener.lineStart();
            ring = [];
          }
          function ringEnd() {
            pointRing(ring[0][0], ring[0][1]);
            ringListener.lineEnd();
            var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;
            ring.pop();
            polygon.push(ring);
            ring = null;
            if (!n) return;
            if (clean & 1) {
              segment = ringSegments[0];
              var n = segment.length - 1, i = -1, point;
              if (n > 0) {
                if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
                listener.lineStart();
                while (++i < n) listener.point((point = segment[i])[0], point[1]);
                listener.lineEnd();
              }
              return;
            }
            if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
            segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));
          }
          return clip;
        };
      }
      function d3_geo_clipSegmentLength1(segment) {
        return segment.length > 1;
      }
      function d3_geo_clipBufferListener() {
        var lines = [], line;
        return {
          lineStart: function() {
            lines.push(line = []);
          },
          point: function(λ, φ) {
            line.push([ λ, φ ]);
          },
          lineEnd: d3_noop,
          buffer: function() {
            var buffer = lines;
            lines = [];
            line = null;
            return buffer;
          },
          rejoin: function() {
            if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
          }
        };
      }
      function d3_geo_clipSort(a, b) {
        return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);
      }
      var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);
      function d3_geo_clipAntimeridianLine(listener) {
        var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;
        return {
          lineStart: function() {
            listener.lineStart();
            clean = 1;
          },
          point: function(λ1, φ1) {
            var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);
            if (abs(dλ - π) < ε) {
              listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);
              listener.point(sλ0, φ0);
              listener.lineEnd();
              listener.lineStart();
              listener.point(sλ1, φ0);
              listener.point(λ1, φ0);
              clean = 0;
            } else if (sλ0 !== sλ1 && dλ >= π) {
              if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;
              if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;
              φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);
              listener.point(sλ0, φ0);
              listener.lineEnd();
              listener.lineStart();
              listener.point(sλ1, φ0);
              clean = 0;
            }
            listener.point(λ0 = λ1, φ0 = φ1);
            sλ0 = sλ1;
          },
          lineEnd: function() {
            listener.lineEnd();
            λ0 = φ0 = NaN;
          },
          clean: function() {
            return 2 - clean;
          }
        };
      }
      function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {
        var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);
        return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;
      }
      function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {
        var φ;
        if (from == null) {
          φ = direction * halfπ;
          listener.point(-π, φ);
          listener.point(0, φ);
          listener.point(π, φ);
          listener.point(π, 0);
          listener.point(π, -φ);
          listener.point(0, -φ);
          listener.point(-π, -φ);
          listener.point(-π, 0);
          listener.point(-π, φ);
        } else if (abs(from[0] - to[0]) > ε) {
          var s = from[0] < to[0] ? π : -π;
          φ = direction * s / 2;
          listener.point(-s, φ);
          listener.point(0, φ);
          listener.point(s, φ);
        } else {
          listener.point(to[0], to[1]);
        }
      }
      function d3_geo_pointInPolygon(point, polygon) {
        var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;
        d3_geo_areaRingSum.reset();
        for (var i = 0, n = polygon.length; i < n; ++i) {
          var ring = polygon[i], m = ring.length;
          if (!m) continue;
          var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;
          while (true) {
            if (j === m) j = 0;
            point = ring[j];
            var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;
            d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));
            polarAngle += antimeridian ? dλ + sdλ * τ : dλ;
            if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {
              var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));
              d3_geo_cartesianNormalize(arc);
              var intersection = d3_geo_cartesianCross(meridianNormal, arc);
              d3_geo_cartesianNormalize(intersection);
              var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
              if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
                winding += antimeridian ^ dλ >= 0 ? 1 : -1;
              }
            }
            if (!j++) break;
            λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
          }
        }
        return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < -ε) ^ winding & 1;
      }
      function d3_geo_clipCircle(radius) {
        var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
        return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);
        function visible(λ, φ) {
          return Math.cos(λ) * Math.cos(φ) > cr;
        }
        function clipLine(listener) {
          var point0, c0, v0, v00, clean;
          return {
            lineStart: function() {
              v00 = v0 = false;
              clean = 1;
            },
            point: function(λ, φ) {
              var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;
              if (!point0 && (v00 = v0 = v)) listener.lineStart();
              if (v !== v0) {
                point2 = intersect(point0, point1);
                if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {
                  point1[0] += ε;
                  point1[1] += ε;
                  v = visible(point1[0], point1[1]);
                }
              }
              if (v !== v0) {
                clean = 0;
                if (v) {
                  listener.lineStart();
                  point2 = intersect(point1, point0);
                  listener.point(point2[0], point2[1]);
                } else {
                  point2 = intersect(point0, point1);
                  listener.point(point2[0], point2[1]);
                  listener.lineEnd();
                }
                point0 = point2;
              } else if (notHemisphere && point0 && smallRadius ^ v) {
                var t;
                if (!(c & c0) && (t = intersect(point1, point0, true))) {
                  clean = 0;
                  if (smallRadius) {
                    listener.lineStart();
                    listener.point(t[0][0], t[0][1]);
                    listener.point(t[1][0], t[1][1]);
                    listener.lineEnd();
                  } else {
                    listener.point(t[1][0], t[1][1]);
                    listener.lineEnd();
                    listener.lineStart();
                    listener.point(t[0][0], t[0][1]);
                  }
                }
              }
              if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {
                listener.point(point1[0], point1[1]);
              }
              point0 = point1, v0 = v, c0 = c;
            },
            lineEnd: function() {
              if (v0) listener.lineEnd();
              point0 = null;
            },
            clean: function() {
              return clean | (v00 && v0) << 1;
            }
          };
        }
        function intersect(a, b, two) {
          var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);
          var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;
          if (!determinant) return !two && a;
          var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);
          d3_geo_cartesianAdd(A, B);
          var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);
          if (t2 < 0) return;
          var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);
          d3_geo_cartesianAdd(q, A);
          q = d3_geo_spherical(q);
          if (!two) return q;
          var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;
          if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;
          var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;
          if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;
          if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {
            var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);
            d3_geo_cartesianAdd(q1, A);
            return [ q, d3_geo_spherical(q1) ];
          }
        }
        function code(λ, φ) {
          var r = smallRadius ? radius : π - radius, code = 0;
          if (λ < -r) code |= 1; else if (λ > r) code |= 2;
          if (φ < -r) code |= 4; else if (φ > r) code |= 8;
          return code;
        }
      }
      function d3_geom_clipLine(x0, y0, x1, y1) {
        return function(line) {
          var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;
          r = x0 - ax;
          if (!dx && r > 0) return;
          r /= dx;
          if (dx < 0) {
            if (r < t0) return;
            if (r < t1) t1 = r;
          } else if (dx > 0) {
            if (r > t1) return;
            if (r > t0) t0 = r;
          }
          r = x1 - ax;
          if (!dx && r < 0) return;
          r /= dx;
          if (dx < 0) {
            if (r > t1) return;
            if (r > t0) t0 = r;
          } else if (dx > 0) {
            if (r < t0) return;
            if (r < t1) t1 = r;
          }
          r = y0 - ay;
          if (!dy && r > 0) return;
          r /= dy;
          if (dy < 0) {
            if (r < t0) return;
            if (r < t1) t1 = r;
          } else if (dy > 0) {
            if (r > t1) return;
            if (r > t0) t0 = r;
          }
          r = y1 - ay;
          if (!dy && r < 0) return;
          r /= dy;
          if (dy < 0) {
            if (r > t1) return;
            if (r > t0) t0 = r;
          } else if (dy > 0) {
            if (r < t0) return;
            if (r < t1) t1 = r;
          }
          if (t0 > 0) line.a = {
            x: ax + t0 * dx,
            y: ay + t0 * dy
          };
          if (t1 < 1) line.b = {
            x: ax + t1 * dx,
            y: ay + t1 * dy
          };
          return line;
        };
      }
      var d3_geo_clipExtentMAX = 1e9;
      d3.geo.clipExtent = function() {
        var x0, y0, x1, y1, stream, clip, clipExtent = {
          stream: function(output) {
            if (stream) stream.valid = false;
            stream = clip(output);
            stream.valid = true;
            return stream;
          },
          extent: function(_) {
            if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];
            clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);
            if (stream) stream.valid = false, stream = null;
            return clipExtent;
          }
        };
        return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);
      };
      function d3_geo_clipExtent(x0, y0, x1, y1) {
        return function(listener) {
          var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;
          var clip = {
            point: point,
            lineStart: lineStart,
            lineEnd: lineEnd,
            polygonStart: function() {
              listener = bufferListener;
              segments = [];
              polygon = [];
              clean = true;
            },
            polygonEnd: function() {
              listener = listener_;
              segments = d3.merge(segments);
              var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;
              if (inside || visible) {
                listener.polygonStart();
                if (inside) {
                  listener.lineStart();
                  interpolate(null, null, 1, listener);
                  listener.lineEnd();
                }
                if (visible) {
                  d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);
                }
                listener.polygonEnd();
              }
              segments = polygon = ring = null;
            }
          };
          function insidePolygon(p) {
            var wn = 0, n = polygon.length, y = p[1];
            for (var i = 0; i < n; ++i) {
              for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {
                b = v[j];
                if (a[1] <= y) {
                  if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;
                } else {
                  if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;
                }
                a = b;
              }
            }
            return wn !== 0;
          }
          function interpolate(from, to, direction, listener) {
            var a = 0, a1 = 0;
            if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {
              do {
                listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
              } while ((a = (a + direction + 4) % 4) !== a1);
            } else {
              listener.point(to[0], to[1]);
            }
          }
          function pointVisible(x, y) {
            return x0 <= x && x <= x1 && y0 <= y && y <= y1;
          }
          function point(x, y) {
            if (pointVisible(x, y)) listener.point(x, y);
          }
          var x__, y__, v__, x_, y_, v_, first, clean;
          function lineStart() {
            clip.point = linePoint;
            if (polygon) polygon.push(ring = []);
            first = true;
            v_ = false;
            x_ = y_ = NaN;
          }
          function lineEnd() {
            if (segments) {
              linePoint(x__, y__);
              if (v__ && v_) bufferListener.rejoin();
              segments.push(bufferListener.buffer());
            }
            clip.point = point;
            if (v_) listener.lineEnd();
          }
          function linePoint(x, y) {
            x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));
            y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));
            var v = pointVisible(x, y);
            if (polygon) ring.push([ x, y ]);
            if (first) {
              x__ = x, y__ = y, v__ = v;
              first = false;
              if (v) {
                listener.lineStart();
                listener.point(x, y);
              }
            } else {
              if (v && v_) listener.point(x, y); else {
                var l = {
                  a: {
                    x: x_,
                    y: y_
                  },
                  b: {
                    x: x,
                    y: y
                  }
                };
                if (clipLine(l)) {
                  if (!v_) {
                    listener.lineStart();
                    listener.point(l.a.x, l.a.y);
                  }
                  listener.point(l.b.x, l.b.y);
                  if (!v) listener.lineEnd();
                  clean = false;
                } else if (v) {
                  listener.lineStart();
                  listener.point(x, y);
                  clean = false;
                }
              }
            }
            x_ = x, y_ = y, v_ = v;
          }
          return clip;
        };
        function corner(p, direction) {
          return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;
        }
        function compare(a, b) {
          return comparePoints(a.x, b.x);
        }
        function comparePoints(a, b) {
          var ca = corner(a, 1), cb = corner(b, 1);
          return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];
        }
      }
      function d3_geo_conic(projectAt) {
        var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);
        p.parallels = function(_) {
          if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];
          return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);
        };
        return p;
      }
      function d3_geo_conicEqualArea(φ0, φ1) {
        var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;
        function forward(λ, φ) {
          var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;
          return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];
        }
        forward.invert = function(x, y) {
          var ρ0_y = ρ0 - y;
          return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];
        };
        return forward;
      }
      (d3.geo.conicEqualArea = function() {
        return d3_geo_conic(d3_geo_conicEqualArea);
      }).raw = d3_geo_conicEqualArea;
      d3.geo.albers = function() {
        return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);
      };
      d3.geo.albersUsa = function() {
        var lower48 = d3.geo.albers();
        var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);
        var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);
        var point, pointStream = {
          point: function(x, y) {
            point = [ x, y ];
          }
        }, lower48Point, alaskaPoint, hawaiiPoint;
        function albersUsa(coordinates) {
          var x = coordinates[0], y = coordinates[1];
          point = null;
          (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);
          return point;
        }
        albersUsa.invert = function(coordinates) {
          var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;
          return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);
        };
        albersUsa.stream = function(stream) {
          var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);
          return {
            point: function(x, y) {
              lower48Stream.point(x, y);
              alaskaStream.point(x, y);
              hawaiiStream.point(x, y);
            },
            sphere: function() {
              lower48Stream.sphere();
              alaskaStream.sphere();
              hawaiiStream.sphere();
            },
            lineStart: function() {
              lower48Stream.lineStart();
              alaskaStream.lineStart();
              hawaiiStream.lineStart();
            },
            lineEnd: function() {
              lower48Stream.lineEnd();
              alaskaStream.lineEnd();
              hawaiiStream.lineEnd();
            },
            polygonStart: function() {
              lower48Stream.polygonStart();
              alaskaStream.polygonStart();
              hawaiiStream.polygonStart();
            },
            polygonEnd: function() {
              lower48Stream.polygonEnd();
              alaskaStream.polygonEnd();
              hawaiiStream.polygonEnd();
            }
          };
        };
        albersUsa.precision = function(_) {
          if (!arguments.length) return lower48.precision();
          lower48.precision(_);
          alaska.precision(_);
          hawaii.precision(_);
          return albersUsa;
        };
        albersUsa.scale = function(_) {
          if (!arguments.length) return lower48.scale();
          lower48.scale(_);
          alaska.scale(_ * .35);
          hawaii.scale(_);
          return albersUsa.translate(lower48.translate());
        };
        albersUsa.translate = function(_) {
          if (!arguments.length) return lower48.translate();
          var k = lower48.scale(), x = +_[0], y = +_[1];
          lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;
          alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
          hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
          return albersUsa;
        };
        return albersUsa.scale(1070);
      };
      var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {
        point: d3_noop,
        lineStart: d3_noop,
        lineEnd: d3_noop,
        polygonStart: function() {
          d3_geo_pathAreaPolygon = 0;
          d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;
        },
        polygonEnd: function() {
          d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;
          d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);
        }
      };
      function d3_geo_pathAreaRingStart() {
        var x00, y00, x0, y0;
        d3_geo_pathArea.point = function(x, y) {
          d3_geo_pathArea.point = nextPoint;
          x00 = x0 = x, y00 = y0 = y;
        };
        function nextPoint(x, y) {
          d3_geo_pathAreaPolygon += y0 * x - x0 * y;
          x0 = x, y0 = y;
        }
        d3_geo_pathArea.lineEnd = function() {
          nextPoint(x00, y00);
        };
      }
      var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;
      var d3_geo_pathBounds = {
        point: d3_geo_pathBoundsPoint,
        lineStart: d3_noop,
        lineEnd: d3_noop,
        polygonStart: d3_noop,
        polygonEnd: d3_noop
      };
      function d3_geo_pathBoundsPoint(x, y) {
        if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;
        if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;
        if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;
        if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;
      }
      function d3_geo_pathBuffer() {
        var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];
        var stream = {
          point: point,
          lineStart: function() {
            stream.point = pointLineStart;
          },
          lineEnd: lineEnd,
          polygonStart: function() {
            stream.lineEnd = lineEndPolygon;
          },
          polygonEnd: function() {
            stream.lineEnd = lineEnd;
            stream.point = point;
          },
          pointRadius: function(_) {
            pointCircle = d3_geo_pathBufferCircle(_);
            return stream;
          },
          result: function() {
            if (buffer.length) {
              var result = buffer.join("");
              buffer = [];
              return result;
            }
          }
        };
        function point(x, y) {
          buffer.push("M", x, ",", y, pointCircle);
        }
        function pointLineStart(x, y) {
          buffer.push("M", x, ",", y);
          stream.point = pointLine;
        }
        function pointLine(x, y) {
          buffer.push("L", x, ",", y);
        }
        function lineEnd() {
          stream.point = point;
        }
        function lineEndPolygon() {
          buffer.push("Z");
        }
        return stream;
      }
      function d3_geo_pathBufferCircle(radius) {
        return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z";
      }
      var d3_geo_pathCentroid = {
        point: d3_geo_pathCentroidPoint,
        lineStart: d3_geo_pathCentroidLineStart,
        lineEnd: d3_geo_pathCentroidLineEnd,
        polygonStart: function() {
          d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;
        },
        polygonEnd: function() {
          d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
          d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;
          d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;
        }
      };
      function d3_geo_pathCentroidPoint(x, y) {
        d3_geo_centroidX0 += x;
        d3_geo_centroidY0 += y;
        ++d3_geo_centroidZ0;
      }
      function d3_geo_pathCentroidLineStart() {
        var x0, y0;
        d3_geo_pathCentroid.point = function(x, y) {
          d3_geo_pathCentroid.point = nextPoint;
          d3_geo_pathCentroidPoint(x0 = x, y0 = y);
        };
        function nextPoint(x, y) {
          var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
          d3_geo_centroidX1 += z * (x0 + x) / 2;
          d3_geo_centroidY1 += z * (y0 + y) / 2;
          d3_geo_centroidZ1 += z;
          d3_geo_pathCentroidPoint(x0 = x, y0 = y);
        }
      }
      function d3_geo_pathCentroidLineEnd() {
        d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
      }
      function d3_geo_pathCentroidRingStart() {
        var x00, y00, x0, y0;
        d3_geo_pathCentroid.point = function(x, y) {
          d3_geo_pathCentroid.point = nextPoint;
          d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);
        };
        function nextPoint(x, y) {
          var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
          d3_geo_centroidX1 += z * (x0 + x) / 2;
          d3_geo_centroidY1 += z * (y0 + y) / 2;
          d3_geo_centroidZ1 += z;
          z = y0 * x - x0 * y;
          d3_geo_centroidX2 += z * (x0 + x);
          d3_geo_centroidY2 += z * (y0 + y);
          d3_geo_centroidZ2 += z * 3;
          d3_geo_pathCentroidPoint(x0 = x, y0 = y);
        }
        d3_geo_pathCentroid.lineEnd = function() {
          nextPoint(x00, y00);
        };
      }
      function d3_geo_pathContext(context) {
        var pointRadius = 4.5;
        var stream = {
          point: point,
          lineStart: function() {
            stream.point = pointLineStart;
          },
          lineEnd: lineEnd,
          polygonStart: function() {
            stream.lineEnd = lineEndPolygon;
          },
          polygonEnd: function() {
            stream.lineEnd = lineEnd;
            stream.point = point;
          },
          pointRadius: function(_) {
            pointRadius = _;
            return stream;
          },
          result: d3_noop
        };
        function point(x, y) {
          context.moveTo(x + pointRadius, y);
          context.arc(x, y, pointRadius, 0, τ);
        }
        function pointLineStart(x, y) {
          context.moveTo(x, y);
          stream.point = pointLine;
        }
        function pointLine(x, y) {
          context.lineTo(x, y);
        }
        function lineEnd() {
          stream.point = point;
        }
        function lineEndPolygon() {
          context.closePath();
        }
        return stream;
      }
      function d3_geo_resample(project) {
        var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;
        function resample(stream) {
          return (maxDepth ? resampleRecursive : resampleNone)(stream);
        }
        function resampleNone(stream) {
          return d3_geo_transformPoint(stream, function(x, y) {
            x = project(x, y);
            stream.point(x[0], x[1]);
          });
        }
        function resampleRecursive(stream) {
          var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;
          var resample = {
            point: point,
            lineStart: lineStart,
            lineEnd: lineEnd,
            polygonStart: function() {
              stream.polygonStart();
              resample.lineStart = ringStart;
            },
            polygonEnd: function() {
              stream.polygonEnd();
              resample.lineStart = lineStart;
            }
          };
          function point(x, y) {
            x = project(x, y);
            stream.point(x[0], x[1]);
          }
          function lineStart() {
            x0 = NaN;
            resample.point = linePoint;
            stream.lineStart();
          }
          function linePoint(λ, φ) {
            var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);
            resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
            stream.point(x0, y0);
          }
          function lineEnd() {
            resample.point = point;
            stream.lineEnd();
          }
          function ringStart() {
            lineStart();
            resample.point = ringPoint;
            resample.lineEnd = ringEnd;
          }
          function ringPoint(λ, φ) {
            linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
            resample.point = linePoint;
          }
          function ringEnd() {
            resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);
            resample.lineEnd = lineEnd;
            lineEnd();
          }
          return resample;
        }
        function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {
          var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;
          if (d2 > 4 * δ2 && depth--) {
            var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;
            if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {
              resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);
              stream.point(x2, y2);
              resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);
            }
          }
        }
        resample.precision = function(_) {
          if (!arguments.length) return Math.sqrt(δ2);
          maxDepth = (δ2 = _ * _) > 0 && 16;
          return resample;
        };
        return resample;
      }
      d3.geo.path = function() {
        var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;
        function path(object) {
          if (object) {
            if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
            if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);
            d3.geo.stream(object, cacheStream);
          }
          return contextStream.result();
        }
        path.area = function(object) {
          d3_geo_pathAreaSum = 0;
          d3.geo.stream(object, projectStream(d3_geo_pathArea));
          return d3_geo_pathAreaSum;
        };
        path.centroid = function(object) {
          d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
          d3.geo.stream(object, projectStream(d3_geo_pathCentroid));
          return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];
        };
        path.bounds = function(object) {
          d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);
          d3.geo.stream(object, projectStream(d3_geo_pathBounds));
          return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];
        };
        path.projection = function(_) {
          if (!arguments.length) return projection;
          projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;
          return reset();
        };
        path.context = function(_) {
          if (!arguments.length) return context;
          contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);
          if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
          return reset();
        };
        path.pointRadius = function(_) {
          if (!arguments.length) return pointRadius;
          pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
          return path;
        };
        function reset() {
          cacheStream = null;
          return path;
        }
        return path.projection(d3.geo.albersUsa()).context(null);
      };
      function d3_geo_pathProjectStream(project) {
        var resample = d3_geo_resample(function(x, y) {
          return project([ x * d3_degrees, y * d3_degrees ]);
        });
        return function(stream) {
          return d3_geo_projectionRadians(resample(stream));
        };
      }
      d3.geo.transform = function(methods) {
        return {
          stream: function(stream) {
            var transform = new d3_geo_transform(stream);
            for (var k in methods) transform[k] = methods[k];
            return transform;
          }
        };
      };
      function d3_geo_transform(stream) {
        this.stream = stream;
      }
      d3_geo_transform.prototype = {
        point: function(x, y) {
          this.stream.point(x, y);
        },
        sphere: function() {
          this.stream.sphere();
        },
        lineStart: function() {
          this.stream.lineStart();
        },
        lineEnd: function() {
          this.stream.lineEnd();
        },
        polygonStart: function() {
          this.stream.polygonStart();
        },
        polygonEnd: function() {
          this.stream.polygonEnd();
        }
      };
      function d3_geo_transformPoint(stream, point) {
        return {
          point: point,
          sphere: function() {
            stream.sphere();
          },
          lineStart: function() {
            stream.lineStart();
          },
          lineEnd: function() {
            stream.lineEnd();
          },
          polygonStart: function() {
            stream.polygonStart();
          },
          polygonEnd: function() {
            stream.polygonEnd();
          }
        };
      }
      d3.geo.projection = d3_geo_projection;
      d3.geo.projectionMutator = d3_geo_projectionMutator;
      function d3_geo_projection(project) {
        return d3_geo_projectionMutator(function() {
          return project;
        })();
      }
      function d3_geo_projectionMutator(projectAt) {
        var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {
          x = project(x, y);
          return [ x[0] * k + δx, δy - x[1] * k ];
        }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;
        function projection(point) {
          point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);
          return [ point[0] * k + δx, δy - point[1] * k ];
        }
        function invert(point) {
          point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);
          return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];
        }
        projection.stream = function(output) {
          if (stream) stream.valid = false;
          stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));
          stream.valid = true;
          return stream;
        };
        projection.clipAngle = function(_) {
          if (!arguments.length) return clipAngle;
          preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);
          return invalidate();
        };
        projection.clipExtent = function(_) {
          if (!arguments.length) return clipExtent;
          clipExtent = _;
          postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;
          return invalidate();
        };
        projection.scale = function(_) {
          if (!arguments.length) return k;
          k = +_;
          return reset();
        };
        projection.translate = function(_) {
          if (!arguments.length) return [ x, y ];
          x = +_[0];
          y = +_[1];
          return reset();
        };
        projection.center = function(_) {
          if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];
          λ = _[0] % 360 * d3_radians;
          φ = _[1] % 360 * d3_radians;
          return reset();
        };
        projection.rotate = function(_) {
          if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];
          δλ = _[0] % 360 * d3_radians;
          δφ = _[1] % 360 * d3_radians;
          δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;
          return reset();
        };
        d3.rebind(projection, projectResample, "precision");
        function reset() {
          projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);
          var center = project(λ, φ);
          δx = x - center[0] * k;
          δy = y + center[1] * k;
          return invalidate();
        }
        function invalidate() {
          if (stream) stream.valid = false, stream = null;
          return projection;
        }
        return function() {
          project = projectAt.apply(this, arguments);
          projection.invert = project.invert && invert;
          return reset();
        };
      }
      function d3_geo_projectionRadians(stream) {
        return d3_geo_transformPoint(stream, function(x, y) {
          stream.point(x * d3_radians, y * d3_radians);
        });
      }
      function d3_geo_equirectangular(λ, φ) {
        return [ λ, φ ];
      }
      (d3.geo.equirectangular = function() {
        return d3_geo_projection(d3_geo_equirectangular);
      }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;
      d3.geo.rotation = function(rotate) {
        rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);
        function forward(coordinates) {
          coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
          return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
        }
        forward.invert = function(coordinates) {
          coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
          return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
        };
        return forward;
      };
      function d3_geo_identityRotation(λ, φ) {
        return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];
      }
      d3_geo_identityRotation.invert = d3_geo_equirectangular;
      function d3_geo_rotation(δλ, δφ, δγ) {
        return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;
      }
      function d3_geo_forwardRotationλ(δλ) {
        return function(λ, φ) {
          return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];
        };
      }
      function d3_geo_rotationλ(δλ) {
        var rotation = d3_geo_forwardRotationλ(δλ);
        rotation.invert = d3_geo_forwardRotationλ(-δλ);
        return rotation;
      }
      function d3_geo_rotationφγ(δφ, δγ) {
        var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);
        function rotation(λ, φ) {
          var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;
          return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];
        }
        rotation.invert = function(λ, φ) {
          var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;
          return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];
        };
        return rotation;
      }
      d3.geo.circle = function() {
        var origin = [ 0, 0 ], angle, precision = 6, interpolate;
        function circle() {
          var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];
          interpolate(null, null, 1, {
            point: function(x, y) {
              ring.push(x = rotate(x, y));
              x[0] *= d3_degrees, x[1] *= d3_degrees;
            }
          });
          return {
            type: "Polygon",
            coordinates: [ ring ]
          };
        }
        circle.origin = function(x) {
          if (!arguments.length) return origin;
          origin = x;
          return circle;
        };
        circle.angle = function(x) {
          if (!arguments.length) return angle;
          interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);
          return circle;
        };
        circle.precision = function(_) {
          if (!arguments.length) return precision;
          interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);
          return circle;
        };
        return circle.angle(90);
      };
      function d3_geo_circleInterpolate(radius, precision) {
        var cr = Math.cos(radius), sr = Math.sin(radius);
        return function(from, to, direction, listener) {
          var step = direction * precision;
          if (from != null) {
            from = d3_geo_circleAngle(cr, from);
            to = d3_geo_circleAngle(cr, to);
            if (direction > 0 ? from < to : from > to) from += direction * τ;
          } else {
            from = radius + direction * τ;
            to = radius - .5 * step;
          }
          for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {
            listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);
          }
        };
      }
      function d3_geo_circleAngle(cr, point) {
        var a = d3_geo_cartesian(point);
        a[0] -= cr;
        d3_geo_cartesianNormalize(a);
        var angle = d3_acos(-a[1]);
        return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);
      }
      d3.geo.distance = function(a, b) {
        var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;
        return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);
      };
      d3.geo.graticule = function() {
        var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;
        function graticule() {
          return {
            type: "MultiLineString",
            coordinates: lines()
          };
        }
        function lines() {
          return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {
            return abs(x % DX) > ε;
          }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {
            return abs(y % DY) > ε;
          }).map(y));
        }
        graticule.lines = function() {
          return lines().map(function(coordinates) {
            return {
              type: "LineString",
              coordinates: coordinates
            };
          });
        };
        graticule.outline = function() {
          return {
            type: "Polygon",
            coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]
          };
        };
        graticule.extent = function(_) {
          if (!arguments.length) return graticule.minorExtent();
          return graticule.majorExtent(_).minorExtent(_);
        };
        graticule.majorExtent = function(_) {
          if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];
          X0 = +_[0][0], X1 = +_[1][0];
          Y0 = +_[0][1], Y1 = +_[1][1];
          if (X0 > X1) _ = X0, X0 = X1, X1 = _;
          if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
          return graticule.precision(precision);
        };
        graticule.minorExtent = function(_) {
          if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];
          x0 = +_[0][0], x1 = +_[1][0];
          y0 = +_[0][1], y1 = +_[1][1];
          if (x0 > x1) _ = x0, x0 = x1, x1 = _;
          if (y0 > y1) _ = y0, y0 = y1, y1 = _;
          return graticule.precision(precision);
        };
        graticule.step = function(_) {
          if (!arguments.length) return graticule.minorStep();
          return graticule.majorStep(_).minorStep(_);
        };
        graticule.majorStep = function(_) {
          if (!arguments.length) return [ DX, DY ];
          DX = +_[0], DY = +_[1];
          return graticule;
        };
        graticule.minorStep = function(_) {
          if (!arguments.length) return [ dx, dy ];
          dx = +_[0], dy = +_[1];
          return graticule;
        };
        graticule.precision = function(_) {
          if (!arguments.length) return precision;
          precision = +_;
          x = d3_geo_graticuleX(y0, y1, 90);
          y = d3_geo_graticuleY(x0, x1, precision);
          X = d3_geo_graticuleX(Y0, Y1, 90);
          Y = d3_geo_graticuleY(X0, X1, precision);
          return graticule;
        };
        return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);
      };
      function d3_geo_graticuleX(y0, y1, dy) {
        var y = d3.range(y0, y1 - ε, dy).concat(y1);
        return function(x) {
          return y.map(function(y) {
            return [ x, y ];
          });
        };
      }
      function d3_geo_graticuleY(x0, x1, dx) {
        var x = d3.range(x0, x1 - ε, dx).concat(x1);
        return function(y) {
          return x.map(function(x) {
            return [ x, y ];
          });
        };
      }
      function d3_source(d) {
        return d.source;
      }
      function d3_target(d) {
        return d.target;
      }
      d3.geo.greatArc = function() {
        var source = d3_source, source_, target = d3_target, target_;
        function greatArc() {
          return {
            type: "LineString",
            coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]
          };
        }
        greatArc.distance = function() {
          return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));
        };
        greatArc.source = function(_) {
          if (!arguments.length) return source;
          source = _, source_ = typeof _ === "function" ? null : _;
          return greatArc;
        };
        greatArc.target = function(_) {
          if (!arguments.length) return target;
          target = _, target_ = typeof _ === "function" ? null : _;
          return greatArc;
        };
        greatArc.precision = function() {
          return arguments.length ? greatArc : 0;
        };
        return greatArc;
      };
      d3.geo.interpolate = function(source, target) {
        return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);
      };
      function d3_geo_interpolate(x0, y0, x1, y1) {
        var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);
        var interpolate = d ? function(t) {
          var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;
          return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];
        } : function() {
          return [ x0 * d3_degrees, y0 * d3_degrees ];
        };
        interpolate.distance = d;
        return interpolate;
      }
      d3.geo.length = function(object) {
        d3_geo_lengthSum = 0;
        d3.geo.stream(object, d3_geo_length);
        return d3_geo_lengthSum;
      };
      var d3_geo_lengthSum;
      var d3_geo_length = {
        sphere: d3_noop,
        point: d3_noop,
        lineStart: d3_geo_lengthLineStart,
        lineEnd: d3_noop,
        polygonStart: d3_noop,
        polygonEnd: d3_noop
      };
      function d3_geo_lengthLineStart() {
        var λ0, sinφ0, cosφ0;
        d3_geo_length.point = function(λ, φ) {
          λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);
          d3_geo_length.point = nextPoint;
        };
        d3_geo_length.lineEnd = function() {
          d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;
        };
        function nextPoint(λ, φ) {
          var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);
          d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);
          λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;
        }
      }
      function d3_geo_azimuthal(scale, angle) {
        function azimuthal(λ, φ) {
          var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);
          return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];
        }
        azimuthal.invert = function(x, y) {
          var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);
          return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];
        };
        return azimuthal;
      }
      var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {
        return Math.sqrt(2 / (1 + cosλcosφ));
      }, function(ρ) {
        return 2 * Math.asin(ρ / 2);
      });
      (d3.geo.azimuthalEqualArea = function() {
        return d3_geo_projection(d3_geo_azimuthalEqualArea);
      }).raw = d3_geo_azimuthalEqualArea;
      var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {
        var c = Math.acos(cosλcosφ);
        return c && c / Math.sin(c);
      }, d3_identity);
      (d3.geo.azimuthalEquidistant = function() {
        return d3_geo_projection(d3_geo_azimuthalEquidistant);
      }).raw = d3_geo_azimuthalEquidistant;
      function d3_geo_conicConformal(φ0, φ1) {
        var cosφ0 = Math.cos(φ0), t = function(φ) {
          return Math.tan(π / 4 + φ / 2);
        }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;
        if (!n) return d3_geo_mercator;
        function forward(λ, φ) {
          if (F > 0) {
            if (φ < -halfπ + ε) φ = -halfπ + ε;
          } else {
            if (φ > halfπ - ε) φ = halfπ - ε;
          }
          var ρ = F / Math.pow(t(φ), n);
          return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];
        }
        forward.invert = function(x, y) {
          var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);
          return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];
        };
        return forward;
      }
      (d3.geo.conicConformal = function() {
        return d3_geo_conic(d3_geo_conicConformal);
      }).raw = d3_geo_conicConformal;
      function d3_geo_conicEquidistant(φ0, φ1) {
        var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;
        if (abs(n) < ε) return d3_geo_equirectangular;
        function forward(λ, φ) {
          var ρ = G - φ;
          return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];
        }
        forward.invert = function(x, y) {
          var ρ0_y = G - y;
          return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];
        };
        return forward;
      }
      (d3.geo.conicEquidistant = function() {
        return d3_geo_conic(d3_geo_conicEquidistant);
      }).raw = d3_geo_conicEquidistant;
      var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {
        return 1 / cosλcosφ;
      }, Math.atan);
      (d3.geo.gnomonic = function() {
        return d3_geo_projection(d3_geo_gnomonic);
      }).raw = d3_geo_gnomonic;
      function d3_geo_mercator(λ, φ) {
        return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];
      }
      d3_geo_mercator.invert = function(x, y) {
        return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];
      };
      function d3_geo_mercatorProjection(project) {
        var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;
        m.scale = function() {
          var v = scale.apply(m, arguments);
          return v === m ? clipAuto ? m.clipExtent(null) : m : v;
        };
        m.translate = function() {
          var v = translate.apply(m, arguments);
          return v === m ? clipAuto ? m.clipExtent(null) : m : v;
        };
        m.clipExtent = function(_) {
          var v = clipExtent.apply(m, arguments);
          if (v === m) {
            if (clipAuto = _ == null) {
              var k = π * scale(), t = translate();
              clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);
            }
          } else if (clipAuto) {
            v = null;
          }
          return v;
        };
        return m.clipExtent(null);
      }
      (d3.geo.mercator = function() {
        return d3_geo_mercatorProjection(d3_geo_mercator);
      }).raw = d3_geo_mercator;
      var d3_geo_orthographic = d3_geo_azimuthal(function() {
        return 1;
      }, Math.asin);
      (d3.geo.orthographic = function() {
        return d3_geo_projection(d3_geo_orthographic);
      }).raw = d3_geo_orthographic;
      var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {
        return 1 / (1 + cosλcosφ);
      }, function(ρ) {
        return 2 * Math.atan(ρ);
      });
      (d3.geo.stereographic = function() {
        return d3_geo_projection(d3_geo_stereographic);
      }).raw = d3_geo_stereographic;
      function d3_geo_transverseMercator(λ, φ) {
        return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];
      }
      d3_geo_transverseMercator.invert = function(x, y) {
        return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];
      };
      (d3.geo.transverseMercator = function() {
        var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;
        projection.center = function(_) {
          return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);
        };
        projection.rotate = function(_) {
          return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), 
          [ _[0], _[1], _[2] - 90 ]);
        };
        return rotate([ 0, 0, 90 ]);
      }).raw = d3_geo_transverseMercator;
      d3.geom = {};
      function d3_geom_pointX(d) {
        return d[0];
      }
      function d3_geom_pointY(d) {
        return d[1];
      }
      d3.geom.hull = function(vertices) {
        var x = d3_geom_pointX, y = d3_geom_pointY;
        if (arguments.length) return hull(vertices);
        function hull(data) {
          if (data.length < 3) return [];
          var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];
          for (i = 0; i < n; i++) {
            points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);
          }
          points.sort(d3_geom_hullOrder);
          for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);
          var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);
          var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];
          for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);
          for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);
          return polygon;
        }
        hull.x = function(_) {
          return arguments.length ? (x = _, hull) : x;
        };
        hull.y = function(_) {
          return arguments.length ? (y = _, hull) : y;
        };
        return hull;
      };
      function d3_geom_hullUpper(points) {
        var n = points.length, hull = [ 0, 1 ], hs = 2;
        for (var i = 2; i < n; i++) {
          while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;
          hull[hs++] = i;
        }
        return hull.slice(0, hs);
      }
      function d3_geom_hullOrder(a, b) {
        return a[0] - b[0] || a[1] - b[1];
      }
      d3.geom.polygon = function(coordinates) {
        d3_subclass(coordinates, d3_geom_polygonPrototype);
        return coordinates;
      };
      var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];
      d3_geom_polygonPrototype.area = function() {
        var i = -1, n = this.length, a, b = this[n - 1], area = 0;
        while (++i < n) {
          a = b;
          b = this[i];
          area += a[1] * b[0] - a[0] * b[1];
        }
        return area * .5;
      };
      d3_geom_polygonPrototype.centroid = function(k) {
        var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;
        if (!arguments.length) k = -1 / (6 * this.area());
        while (++i < n) {
          a = b;
          b = this[i];
          c = a[0] * b[1] - b[0] * a[1];
          x += (a[0] + b[0]) * c;
          y += (a[1] + b[1]) * c;
        }
        return [ x * k, y * k ];
      };
      d3_geom_polygonPrototype.clip = function(subject) {
        var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;
        while (++i < n) {
          input = subject.slice();
          subject.length = 0;
          b = this[i];
          c = input[(m = input.length - closed) - 1];
          j = -1;
          while (++j < m) {
            d = input[j];
            if (d3_geom_polygonInside(d, a, b)) {
              if (!d3_geom_polygonInside(c, a, b)) {
                subject.push(d3_geom_polygonIntersect(c, d, a, b));
              }
              subject.push(d);
            } else if (d3_geom_polygonInside(c, a, b)) {
              subject.push(d3_geom_polygonIntersect(c, d, a, b));
            }
            c = d;
          }
          if (closed) subject.push(subject[0]);
          a = b;
        }
        return subject;
      };
      function d3_geom_polygonInside(p, a, b) {
        return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
      }
      function d3_geom_polygonIntersect(c, d, a, b) {
        var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);
        return [ x1 + ua * x21, y1 + ua * y21 ];
      }
      function d3_geom_polygonClosed(coordinates) {
        var a = coordinates[0], b = coordinates[coordinates.length - 1];
        return !(a[0] - b[0] || a[1] - b[1]);
      }
      var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];
      function d3_geom_voronoiBeach() {
        d3_geom_voronoiRedBlackNode(this);
        this.edge = this.site = this.circle = null;
      }
      function d3_geom_voronoiCreateBeach(site) {
        var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();
        beach.site = site;
        return beach;
      }
      function d3_geom_voronoiDetachBeach(beach) {
        d3_geom_voronoiDetachCircle(beach);
        d3_geom_voronoiBeaches.remove(beach);
        d3_geom_voronoiBeachPool.push(beach);
        d3_geom_voronoiRedBlackNode(beach);
      }
      function d3_geom_voronoiRemoveBeach(beach) {
        var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {
          x: x,
          y: y
        }, previous = beach.P, next = beach.N, disappearing = [ beach ];
        d3_geom_voronoiDetachBeach(beach);
        var lArc = previous;
        while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {
          previous = lArc.P;
          disappearing.unshift(lArc);
          d3_geom_voronoiDetachBeach(lArc);
          lArc = previous;
        }
        disappearing.unshift(lArc);
        d3_geom_voronoiDetachCircle(lArc);
        var rArc = next;
        while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {
          next = rArc.N;
          disappearing.push(rArc);
          d3_geom_voronoiDetachBeach(rArc);
          rArc = next;
        }
        disappearing.push(rArc);
        d3_geom_voronoiDetachCircle(rArc);
        var nArcs = disappearing.length, iArc;
        for (iArc = 1; iArc < nArcs; ++iArc) {
          rArc = disappearing[iArc];
          lArc = disappearing[iArc - 1];
          d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
        }
        lArc = disappearing[0];
        rArc = disappearing[nArcs - 1];
        rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);
        d3_geom_voronoiAttachCircle(lArc);
        d3_geom_voronoiAttachCircle(rArc);
      }
      function d3_geom_voronoiAddBeach(site) {
        var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;
        while (node) {
          dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;
          if (dxl > ε) node = node.L; else {
            dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);
            if (dxr > ε) {
              if (!node.R) {
                lArc = node;
                break;
              }
              node = node.R;
            } else {
              if (dxl > -ε) {
                lArc = node.P;
                rArc = node;
              } else if (dxr > -ε) {
                lArc = node;
                rArc = node.N;
              } else {
                lArc = rArc = node;
              }
              break;
            }
          }
        }
        var newArc = d3_geom_voronoiCreateBeach(site);
        d3_geom_voronoiBeaches.insert(lArc, newArc);
        if (!lArc && !rArc) return;
        if (lArc === rArc) {
          d3_geom_voronoiDetachCircle(lArc);
          rArc = d3_geom_voronoiCreateBeach(lArc.site);
          d3_geom_voronoiBeaches.insert(newArc, rArc);
          newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);
          d3_geom_voronoiAttachCircle(lArc);
          d3_geom_voronoiAttachCircle(rArc);
          return;
        }
        if (!rArc) {
          newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);
          return;
        }
        d3_geom_voronoiDetachCircle(lArc);
        d3_geom_voronoiDetachCircle(rArc);
        var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {
          x: (cy * hb - by * hc) / d + ax,
          y: (bx * hc - cx * hb) / d + ay
        };
        d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);
        newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);
        rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);
        d3_geom_voronoiAttachCircle(lArc);
        d3_geom_voronoiAttachCircle(rArc);
      }
      function d3_geom_voronoiLeftBreakPoint(arc, directrix) {
        var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;
        if (!pby2) return rfocx;
        var lArc = arc.P;
        if (!lArc) return -Infinity;
        site = lArc.site;
        var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;
        if (!plby2) return lfocx;
        var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;
        if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
        return (rfocx + lfocx) / 2;
      }
      function d3_geom_voronoiRightBreakPoint(arc, directrix) {
        var rArc = arc.N;
        if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);
        var site = arc.site;
        return site.y === directrix ? site.x : Infinity;
      }
      function d3_geom_voronoiCell(site) {
        this.site = site;
        this.edges = [];
      }
      d3_geom_voronoiCell.prototype.prepare = function() {
        var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;
        while (iHalfEdge--) {
          edge = halfEdges[iHalfEdge].edge;
          if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);
        }
        halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);
        return halfEdges.length;
      };
      function d3_geom_voronoiCloseCells(extent) {
        var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;
        while (iCell--) {
          cell = cells[iCell];
          if (!cell || !cell.prepare()) continue;
          halfEdges = cell.edges;
          nHalfEdges = halfEdges.length;
          iHalfEdge = 0;
          while (iHalfEdge < nHalfEdges) {
            end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;
            start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;
            if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {
              halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {
                x: x0,
                y: abs(x2 - x0) < ε ? y2 : y1
              } : abs(y3 - y1) < ε && x1 - x3 > ε ? {
                x: abs(y2 - y1) < ε ? x2 : x1,
                y: y1
              } : abs(x3 - x1) < ε && y3 - y0 > ε ? {
                x: x1,
                y: abs(x2 - x1) < ε ? y2 : y0
              } : abs(y3 - y0) < ε && x3 - x0 > ε ? {
                x: abs(y2 - y0) < ε ? x2 : x0,
                y: y0
              } : null), cell.site, null));
              ++nHalfEdges;
            }
          }
        }
      }
      function d3_geom_voronoiHalfEdgeOrder(a, b) {
        return b.angle - a.angle;
      }
      function d3_geom_voronoiCircle() {
        d3_geom_voronoiRedBlackNode(this);
        this.x = this.y = this.arc = this.site = this.cy = null;
      }
      function d3_geom_voronoiAttachCircle(arc) {
        var lArc = arc.P, rArc = arc.N;
        if (!lArc || !rArc) return;
        var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;
        if (lSite === rSite) return;
        var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;
        var d = 2 * (ax * cy - ay * cx);
        if (d >= -ε2) return;
        var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;
        var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();
        circle.arc = arc;
        circle.site = cSite;
        circle.x = x + bx;
        circle.y = cy + Math.sqrt(x * x + y * y);
        circle.cy = cy;
        arc.circle = circle;
        var before = null, node = d3_geom_voronoiCircles._;
        while (node) {
          if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {
            if (node.L) node = node.L; else {
              before = node.P;
              break;
            }
          } else {
            if (node.R) node = node.R; else {
              before = node;
              break;
            }
          }
        }
        d3_geom_voronoiCircles.insert(before, circle);
        if (!before) d3_geom_voronoiFirstCircle = circle;
      }
      function d3_geom_voronoiDetachCircle(arc) {
        var circle = arc.circle;
        if (circle) {
          if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;
          d3_geom_voronoiCircles.remove(circle);
          d3_geom_voronoiCirclePool.push(circle);
          d3_geom_voronoiRedBlackNode(circle);
          arc.circle = null;
        }
      }
      function d3_geom_voronoiClipEdges(extent) {
        var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;
        while (i--) {
          e = edges[i];
          if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {
            e.a = e.b = null;
            edges.splice(i, 1);
          }
        }
      }
      function d3_geom_voronoiConnectEdge(edge, extent) {
        var vb = edge.b;
        if (vb) return true;
        var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;
        if (ry === ly) {
          if (fx < x0 || fx >= x1) return;
          if (lx > rx) {
            if (!va) va = {
              x: fx,
              y: y0
            }; else if (va.y >= y1) return;
            vb = {
              x: fx,
              y: y1
            };
          } else {
            if (!va) va = {
              x: fx,
              y: y1
            }; else if (va.y < y0) return;
            vb = {
              x: fx,
              y: y0
            };
          }
        } else {
          fm = (lx - rx) / (ry - ly);
          fb = fy - fm * fx;
          if (fm < -1 || fm > 1) {
            if (lx > rx) {
              if (!va) va = {
                x: (y0 - fb) / fm,
                y: y0
              }; else if (va.y >= y1) return;
              vb = {
                x: (y1 - fb) / fm,
                y: y1
              };
            } else {
              if (!va) va = {
                x: (y1 - fb) / fm,
                y: y1
              }; else if (va.y < y0) return;
              vb = {
                x: (y0 - fb) / fm,
                y: y0
              };
            }
          } else {
            if (ly < ry) {
              if (!va) va = {
                x: x0,
                y: fm * x0 + fb
              }; else if (va.x >= x1) return;
              vb = {
                x: x1,
                y: fm * x1 + fb
              };
            } else {
              if (!va) va = {
                x: x1,
                y: fm * x1 + fb
              }; else if (va.x < x0) return;
              vb = {
                x: x0,
                y: fm * x0 + fb
              };
            }
          }
        }
        edge.a = va;
        edge.b = vb;
        return true;
      }
      function d3_geom_voronoiEdge(lSite, rSite) {
        this.l = lSite;
        this.r = rSite;
        this.a = this.b = null;
      }
      function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {
        var edge = new d3_geom_voronoiEdge(lSite, rSite);
        d3_geom_voronoiEdges.push(edge);
        if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);
        if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);
        d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));
        d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));
        return edge;
      }
      function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {
        var edge = new d3_geom_voronoiEdge(lSite, null);
        edge.a = va;
        edge.b = vb;
        d3_geom_voronoiEdges.push(edge);
        return edge;
      }
      function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {
        if (!edge.a && !edge.b) {
          edge.a = vertex;
          edge.l = lSite;
          edge.r = rSite;
        } else if (edge.l === rSite) {
          edge.b = vertex;
        } else {
          edge.a = vertex;
        }
      }
      function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {
        var va = edge.a, vb = edge.b;
        this.edge = edge;
        this.site = lSite;
        this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);
      }
      d3_geom_voronoiHalfEdge.prototype = {
        start: function() {
          return this.edge.l === this.site ? this.edge.a : this.edge.b;
        },
        end: function() {
          return this.edge.l === this.site ? this.edge.b : this.edge.a;
        }
      };
      function d3_geom_voronoiRedBlackTree() {
        this._ = null;
      }
      function d3_geom_voronoiRedBlackNode(node) {
        node.U = node.C = node.L = node.R = node.P = node.N = null;
      }
      d3_geom_voronoiRedBlackTree.prototype = {
        insert: function(after, node) {
          var parent, grandpa, uncle;
          if (after) {
            node.P = after;
            node.N = after.N;
            if (after.N) after.N.P = node;
            after.N = node;
            if (after.R) {
              after = after.R;
              while (after.L) after = after.L;
              after.L = node;
            } else {
              after.R = node;
            }
            parent = after;
          } else if (this._) {
            after = d3_geom_voronoiRedBlackFirst(this._);
            node.P = null;
            node.N = after;
            after.P = after.L = node;
            parent = after;
          } else {
            node.P = node.N = null;
            this._ = node;
            parent = null;
          }
          node.L = node.R = null;
          node.U = parent;
          node.C = true;
          after = node;
          while (parent && parent.C) {
            grandpa = parent.U;
            if (parent === grandpa.L) {
              uncle = grandpa.R;
              if (uncle && uncle.C) {
                parent.C = uncle.C = false;
                grandpa.C = true;
                after = grandpa;
              } else {
                if (after === parent.R) {
                  d3_geom_voronoiRedBlackRotateLeft(this, parent);
                  after = parent;
                  parent = after.U;
                }
                parent.C = false;
                grandpa.C = true;
                d3_geom_voronoiRedBlackRotateRight(this, grandpa);
              }
            } else {
              uncle = grandpa.L;
              if (uncle && uncle.C) {
                parent.C = uncle.C = false;
                grandpa.C = true;
                after = grandpa;
              } else {
                if (after === parent.L) {
                  d3_geom_voronoiRedBlackRotateRight(this, parent);
                  after = parent;
                  parent = after.U;
                }
                parent.C = false;
                grandpa.C = true;
                d3_geom_voronoiRedBlackRotateLeft(this, grandpa);
              }
            }
            parent = after.U;
          }
          this._.C = false;
        },
        remove: function(node) {
          if (node.N) node.N.P = node.P;
          if (node.P) node.P.N = node.N;
          node.N = node.P = null;
          var parent = node.U, sibling, left = node.L, right = node.R, next, red;
          if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);
          if (parent) {
            if (parent.L === node) parent.L = next; else parent.R = next;
          } else {
            this._ = next;
          }
          if (left && right) {
            red = next.C;
            next.C = node.C;
            next.L = left;
            left.U = next;
            if (next !== right) {
              parent = next.U;
              next.U = node.U;
              node = next.R;
              parent.L = node;
              next.R = right;
              right.U = next;
            } else {
              next.U = parent;
              parent = next;
              node = next.R;
            }
          } else {
            red = node.C;
            node = next;
          }
          if (node) node.U = parent;
          if (red) return;
          if (node && node.C) {
            node.C = false;
            return;
          }
          do {
            if (node === this._) break;
            if (node === parent.L) {
              sibling = parent.R;
              if (sibling.C) {
                sibling.C = false;
                parent.C = true;
                d3_geom_voronoiRedBlackRotateLeft(this, parent);
                sibling = parent.R;
              }
              if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
                if (!sibling.R || !sibling.R.C) {
                  sibling.L.C = false;
                  sibling.C = true;
                  d3_geom_voronoiRedBlackRotateRight(this, sibling);
                  sibling = parent.R;
                }
                sibling.C = parent.C;
                parent.C = sibling.R.C = false;
                d3_geom_voronoiRedBlackRotateLeft(this, parent);
                node = this._;
                break;
              }
            } else {
              sibling = parent.L;
              if (sibling.C) {
                sibling.C = false;
                parent.C = true;
                d3_geom_voronoiRedBlackRotateRight(this, parent);
                sibling = parent.L;
              }
              if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
                if (!sibling.L || !sibling.L.C) {
                  sibling.R.C = false;
                  sibling.C = true;
                  d3_geom_voronoiRedBlackRotateLeft(this, sibling);
                  sibling = parent.L;
                }
                sibling.C = parent.C;
                parent.C = sibling.L.C = false;
                d3_geom_voronoiRedBlackRotateRight(this, parent);
                node = this._;
                break;
              }
            }
            sibling.C = true;
            node = parent;
            parent = parent.U;
          } while (!node.C);
          if (node) node.C = false;
        }
      };
      function d3_geom_voronoiRedBlackRotateLeft(tree, node) {
        var p = node, q = node.R, parent = p.U;
        if (parent) {
          if (parent.L === p) parent.L = q; else parent.R = q;
        } else {
          tree._ = q;
        }
        q.U = parent;
        p.U = q;
        p.R = q.L;
        if (p.R) p.R.U = p;
        q.L = p;
      }
      function d3_geom_voronoiRedBlackRotateRight(tree, node) {
        var p = node, q = node.L, parent = p.U;
        if (parent) {
          if (parent.L === p) parent.L = q; else parent.R = q;
        } else {
          tree._ = q;
        }
        q.U = parent;
        p.U = q;
        p.L = q.R;
        if (p.L) p.L.U = p;
        q.R = p;
      }
      function d3_geom_voronoiRedBlackFirst(node) {
        while (node.L) node = node.L;
        return node;
      }
      function d3_geom_voronoi(sites, bbox) {
        var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;
        d3_geom_voronoiEdges = [];
        d3_geom_voronoiCells = new Array(sites.length);
        d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();
        d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();
        while (true) {
          circle = d3_geom_voronoiFirstCircle;
          if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {
            if (site.x !== x0 || site.y !== y0) {
              d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);
              d3_geom_voronoiAddBeach(site);
              x0 = site.x, y0 = site.y;
            }
            site = sites.pop();
          } else if (circle) {
            d3_geom_voronoiRemoveBeach(circle.arc);
          } else {
            break;
          }
        }
        if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);
        var diagram = {
          cells: d3_geom_voronoiCells,
          edges: d3_geom_voronoiEdges
        };
        d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;
        return diagram;
      }
      function d3_geom_voronoiVertexOrder(a, b) {
        return b.y - a.y || b.x - a.x;
      }
      d3.geom.voronoi = function(points) {
        var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;
        if (points) return voronoi(points);
        function voronoi(data) {
          var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];
          d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {
            var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {
              var s = e.start();
              return [ s.x, s.y ];
            }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];
            polygon.point = data[i];
          });
          return polygons;
        }
        function sites(data) {
          return data.map(function(d, i) {
            return {
              x: Math.round(fx(d, i) / ε) * ε,
              y: Math.round(fy(d, i) / ε) * ε,
              i: i
            };
          });
        }
        voronoi.links = function(data) {
          return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {
            return edge.l && edge.r;
          }).map(function(edge) {
            return {
              source: data[edge.l.i],
              target: data[edge.r.i]
            };
          });
        };
        voronoi.triangles = function(data) {
          var triangles = [];
          d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {
            var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;
            while (++j < m) {
              e0 = e1;
              s0 = s1;
              e1 = edges[j].edge;
              s1 = e1.l === site ? e1.r : e1.l;
              if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
                triangles.push([ data[i], data[s0.i], data[s1.i] ]);
              }
            }
          });
          return triangles;
        };
        voronoi.x = function(_) {
          return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;
        };
        voronoi.y = function(_) {
          return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;
        };
        voronoi.clipExtent = function(_) {
          if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;
          clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;
          return voronoi;
        };
        voronoi.size = function(_) {
          if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];
          return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);
        };
        return voronoi;
      };
      var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];
      function d3_geom_voronoiTriangleArea(a, b, c) {
        return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);
      }
      d3.geom.delaunay = function(vertices) {
        return d3.geom.voronoi().triangles(vertices);
      };
      d3.geom.quadtree = function(points, x1, y1, x2, y2) {
        var x = d3_geom_pointX, y = d3_geom_pointY, compat;
        if (compat = arguments.length) {
          x = d3_geom_quadtreeCompatX;
          y = d3_geom_quadtreeCompatY;
          if (compat === 3) {
            y2 = y1;
            x2 = x1;
            y1 = x1 = 0;
          }
          return quadtree(points);
        }
        function quadtree(data) {
          var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;
          if (x1 != null) {
            x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;
          } else {
            x2_ = y2_ = -(x1_ = y1_ = Infinity);
            xs = [], ys = [];
            n = data.length;
            if (compat) for (i = 0; i < n; ++i) {
              d = data[i];
              if (d.x < x1_) x1_ = d.x;
              if (d.y < y1_) y1_ = d.y;
              if (d.x > x2_) x2_ = d.x;
              if (d.y > y2_) y2_ = d.y;
              xs.push(d.x);
              ys.push(d.y);
            } else for (i = 0; i < n; ++i) {
              var x_ = +fx(d = data[i], i), y_ = +fy(d, i);
              if (x_ < x1_) x1_ = x_;
              if (y_ < y1_) y1_ = y_;
              if (x_ > x2_) x2_ = x_;
              if (y_ > y2_) y2_ = y_;
              xs.push(x_);
              ys.push(y_);
            }
          }
          var dx = x2_ - x1_, dy = y2_ - y1_;
          if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;
          function insert(n, d, x, y, x1, y1, x2, y2) {
            if (isNaN(x) || isNaN(y)) return;
            if (n.leaf) {
              var nx = n.x, ny = n.y;
              if (nx != null) {
                if (abs(nx - x) + abs(ny - y) < .01) {
                  insertChild(n, d, x, y, x1, y1, x2, y2);
                } else {
                  var nPoint = n.point;
                  n.x = n.y = n.point = null;
                  insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);
                  insertChild(n, d, x, y, x1, y1, x2, y2);
                }
              } else {
                n.x = x, n.y = y, n.point = d;
              }
            } else {
              insertChild(n, d, x, y, x1, y1, x2, y2);
            }
          }
          function insertChild(n, d, x, y, x1, y1, x2, y2) {
            var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;
            n.leaf = false;
            n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
            if (right) x1 = xm; else x2 = xm;
            if (below) y1 = ym; else y2 = ym;
            insert(n, d, x, y, x1, y1, x2, y2);
          }
          var root = d3_geom_quadtreeNode();
          root.add = function(d) {
            insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);
          };
          root.visit = function(f) {
            d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);
          };
          root.find = function(point) {
            return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);
          };
          i = -1;
          if (x1 == null) {
            while (++i < n) {
              insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);
            }
            --i;
          } else data.forEach(root.add);
          xs = ys = data = d = null;
          return root;
        }
        quadtree.x = function(_) {
          return arguments.length ? (x = _, quadtree) : x;
        };
        quadtree.y = function(_) {
          return arguments.length ? (y = _, quadtree) : y;
        };
        quadtree.extent = function(_) {
          if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];
          if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], 
          y2 = +_[1][1];
          return quadtree;
        };
        quadtree.size = function(_) {
          if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];
          if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];
          return quadtree;
        };
        return quadtree;
      };
      function d3_geom_quadtreeCompatX(d) {
        return d.x;
      }
      function d3_geom_quadtreeCompatY(d) {
        return d.y;
      }
      function d3_geom_quadtreeNode() {
        return {
          leaf: true,
          nodes: [],
          point: null,
          x: null,
          y: null
        };
      }
      function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
        if (!f(node, x1, y1, x2, y2)) {
          var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;
          if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
          if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
          if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
          if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
        }
      }
      function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {
        var minDistance2 = Infinity, closestPoint;
        (function find(node, x1, y1, x2, y2) {
          if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;
          if (point = node.point) {
            var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;
            if (distance2 < minDistance2) {
              var distance = Math.sqrt(minDistance2 = distance2);
              x0 = x - distance, y0 = y - distance;
              x3 = x + distance, y3 = y + distance;
              closestPoint = point;
            }
          }
          var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;
          for (var i = below << 1 | right, j = i + 4; i < j; ++i) {
            if (node = children[i & 3]) switch (i & 3) {
             case 0:
              find(node, x1, y1, xm, ym);
              break;
    
             case 1:
              find(node, xm, y1, x2, ym);
              break;
    
             case 2:
              find(node, x1, ym, xm, y2);
              break;
    
             case 3:
              find(node, xm, ym, x2, y2);
              break;
            }
          }
        })(root, x0, y0, x3, y3);
        return closestPoint;
      }
      d3.interpolateRgb = d3_interpolateRgb;
      function d3_interpolateRgb(a, b) {
        a = d3.rgb(a);
        b = d3.rgb(b);
        var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;
        return function(t) {
          return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));
        };
      }
      d3.interpolateObject = d3_interpolateObject;
      function d3_interpolateObject(a, b) {
        var i = {}, c = {}, k;
        for (k in a) {
          if (k in b) {
            i[k] = d3_interpolate(a[k], b[k]);
          } else {
            c[k] = a[k];
          }
        }
        for (k in b) {
          if (!(k in a)) {
            c[k] = b[k];
          }
        }
        return function(t) {
          for (k in i) c[k] = i[k](t);
          return c;
        };
      }
      d3.interpolateNumber = d3_interpolateNumber;
      function d3_interpolateNumber(a, b) {
        a = +a, b = +b;
        return function(t) {
          return a * (1 - t) + b * t;
        };
      }
      d3.interpolateString = d3_interpolateString;
      function d3_interpolateString(a, b) {
        var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];
        a = a + "", b = b + "";
        while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {
          if ((bs = bm.index) > bi) {
            bs = b.slice(bi, bs);
            if (s[i]) s[i] += bs; else s[++i] = bs;
          }
          if ((am = am[0]) === (bm = bm[0])) {
            if (s[i]) s[i] += bm; else s[++i] = bm;
          } else {
            s[++i] = null;
            q.push({
              i: i,
              x: d3_interpolateNumber(am, bm)
            });
          }
          bi = d3_interpolate_numberB.lastIndex;
        }
        if (bi < b.length) {
          bs = b.slice(bi);
          if (s[i]) s[i] += bs; else s[++i] = bs;
        }
        return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {
          return b(t) + "";
        }) : function() {
          return b;
        } : (b = q.length, function(t) {
          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
          return s.join("");
        });
      }
      var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g");
      d3.interpolate = d3_interpolate;
      function d3_interpolate(a, b) {
        var i = d3.interpolators.length, f;
        while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;
        return f;
      }
      d3.interpolators = [ function(a, b) {
        var t = typeof b;
        return (t === "string" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\(|hsl\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);
      } ];
      d3.interpolateArray = d3_interpolateArray;
      function d3_interpolateArray(a, b) {
        var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;
        for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));
        for (;i < na; ++i) c[i] = a[i];
        for (;i < nb; ++i) c[i] = b[i];
        return function(t) {
          for (i = 0; i < n0; ++i) c[i] = x[i](t);
          return c;
        };
      }
      var d3_ease_default = function() {
        return d3_identity;
      };
      var d3_ease = d3.map({
        linear: d3_ease_default,
        poly: d3_ease_poly,
        quad: function() {
          return d3_ease_quad;
        },
        cubic: function() {
          return d3_ease_cubic;
        },
        sin: function() {
          return d3_ease_sin;
        },
        exp: function() {
          return d3_ease_exp;
        },
        circle: function() {
          return d3_ease_circle;
        },
        elastic: d3_ease_elastic,
        back: d3_ease_back,
        bounce: function() {
          return d3_ease_bounce;
        }
      });
      var d3_ease_mode = d3.map({
        "in": d3_identity,
        out: d3_ease_reverse,
        "in-out": d3_ease_reflect,
        "out-in": function(f) {
          return d3_ease_reflect(d3_ease_reverse(f));
        }
      });
      d3.ease = function(name) {
        var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in";
        t = d3_ease.get(t) || d3_ease_default;
        m = d3_ease_mode.get(m) || d3_identity;
        return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));
      };
      function d3_ease_clamp(f) {
        return function(t) {
          return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
        };
      }
      function d3_ease_reverse(f) {
        return function(t) {
          return 1 - f(1 - t);
        };
      }
      function d3_ease_reflect(f) {
        return function(t) {
          return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));
        };
      }
      function d3_ease_quad(t) {
        return t * t;
      }
      function d3_ease_cubic(t) {
        return t * t * t;
      }
      function d3_ease_cubicInOut(t) {
        if (t <= 0) return 0;
        if (t >= 1) return 1;
        var t2 = t * t, t3 = t2 * t;
        return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);
      }
      function d3_ease_poly(e) {
        return function(t) {
          return Math.pow(t, e);
        };
      }
      function d3_ease_sin(t) {
        return 1 - Math.cos(t * halfπ);
      }
      function d3_ease_exp(t) {
        return Math.pow(2, 10 * (t - 1));
      }
      function d3_ease_circle(t) {
        return 1 - Math.sqrt(1 - t * t);
      }
      function d3_ease_elastic(a, p) {
        var s;
        if (arguments.length < 2) p = .45;
        if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;
        return function(t) {
          return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);
        };
      }
      function d3_ease_back(s) {
        if (!s) s = 1.70158;
        return function(t) {
          return t * t * ((s + 1) * t - s);
        };
      }
      function d3_ease_bounce(t) {
        return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
      }
      d3.interpolateHcl = d3_interpolateHcl;
      function d3_interpolateHcl(a, b) {
        a = d3.hcl(a);
        b = d3.hcl(b);
        var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;
        if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;
        if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
        return function(t) {
          return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
        };
      }
      d3.interpolateHsl = d3_interpolateHsl;
      function d3_interpolateHsl(a, b) {
        a = d3.hsl(a);
        b = d3.hsl(b);
        var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;
        if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;
        if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
        return function(t) {
          return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + "";
        };
      }
      d3.interpolateLab = d3_interpolateLab;
      function d3_interpolateLab(a, b) {
        a = d3.lab(a);
        b = d3.lab(b);
        var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;
        return function(t) {
          return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + "";
        };
      }
      d3.interpolateRound = d3_interpolateRound;
      function d3_interpolateRound(a, b) {
        b -= a;
        return function(t) {
          return Math.round(a + b * t);
        };
      }
      d3.transform = function(string) {
        var g = d3_document.createElementNS(d3.ns.prefix.svg, "g");
        return (d3.transform = function(string) {
          if (string != null) {
            g.setAttribute("transform", string);
            var t = g.transform.baseVal.consolidate();
          }
          return new d3_transform(t ? t.matrix : d3_transformIdentity);
        })(string);
      };
      function d3_transform(m) {
        var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;
        if (r0[0] * r1[1] < r1[0] * r0[1]) {
          r0[0] *= -1;
          r0[1] *= -1;
          kx *= -1;
          kz *= -1;
        }
        this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;
        this.translate = [ m.e, m.f ];
        this.scale = [ kx, ky ];
        this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;
      }
      d3_transform.prototype.toString = function() {
        return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")";
      };
      function d3_transformDot(a, b) {
        return a[0] * b[0] + a[1] * b[1];
      }
      function d3_transformNormalize(a) {
        var k = Math.sqrt(d3_transformDot(a, a));
        if (k) {
          a[0] /= k;
          a[1] /= k;
        }
        return k;
      }
      function d3_transformCombine(a, b, k) {
        a[0] += k * b[0];
        a[1] += k * b[1];
        return a;
      }
      var d3_transformIdentity = {
        a: 1,
        b: 0,
        c: 0,
        d: 1,
        e: 0,
        f: 0
      };
      d3.interpolateTransform = d3_interpolateTransform;
      function d3_interpolateTransformPop(s) {
        return s.length ? s.pop() + "," : "";
      }
      function d3_interpolateTranslate(ta, tb, s, q) {
        if (ta[0] !== tb[0] || ta[1] !== tb[1]) {
          var i = s.push("translate(", null, ",", null, ")");
          q.push({
            i: i - 4,
            x: d3_interpolateNumber(ta[0], tb[0])
          }, {
            i: i - 2,
            x: d3_interpolateNumber(ta[1], tb[1])
          });
        } else if (tb[0] || tb[1]) {
          s.push("translate(" + tb + ")");
        }
      }
      function d3_interpolateRotate(ra, rb, s, q) {
        if (ra !== rb) {
          if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;
          q.push({
            i: s.push(d3_interpolateTransformPop(s) + "rotate(", null, ")") - 2,
            x: d3_interpolateNumber(ra, rb)
          });
        } else if (rb) {
          s.push(d3_interpolateTransformPop(s) + "rotate(" + rb + ")");
        }
      }
      function d3_interpolateSkew(wa, wb, s, q) {
        if (wa !== wb) {
          q.push({
            i: s.push(d3_interpolateTransformPop(s) + "skewX(", null, ")") - 2,
            x: d3_interpolateNumber(wa, wb)
          });
        } else if (wb) {
          s.push(d3_interpolateTransformPop(s) + "skewX(" + wb + ")");
        }
      }
      function d3_interpolateScale(ka, kb, s, q) {
        if (ka[0] !== kb[0] || ka[1] !== kb[1]) {
          var i = s.push(d3_interpolateTransformPop(s) + "scale(", null, ",", null, ")");
          q.push({
            i: i - 4,
            x: d3_interpolateNumber(ka[0], kb[0])
          }, {
            i: i - 2,
            x: d3_interpolateNumber(ka[1], kb[1])
          });
        } else if (kb[0] !== 1 || kb[1] !== 1) {
          s.push(d3_interpolateTransformPop(s) + "scale(" + kb + ")");
        }
      }
      function d3_interpolateTransform(a, b) {
        var s = [], q = [];
        a = d3.transform(a), b = d3.transform(b);
        d3_interpolateTranslate(a.translate, b.translate, s, q);
        d3_interpolateRotate(a.rotate, b.rotate, s, q);
        d3_interpolateSkew(a.skew, b.skew, s, q);
        d3_interpolateScale(a.scale, b.scale, s, q);
        a = b = null;
        return function(t) {
          var i = -1, n = q.length, o;
          while (++i < n) s[(o = q[i]).i] = o.x(t);
          return s.join("");
        };
      }
      function d3_uninterpolateNumber(a, b) {
        b = (b -= a = +a) || 1 / b;
        return function(x) {
          return (x - a) / b;
        };
      }
      function d3_uninterpolateClamp(a, b) {
        b = (b -= a = +a) || 1 / b;
        return function(x) {
          return Math.max(0, Math.min(1, (x - a) / b));
        };
      }
      d3.layout = {};
      d3.layout.bundle = function() {
        return function(links) {
          var paths = [], i = -1, n = links.length;
          while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
          return paths;
        };
      };
      function d3_layout_bundlePath(link) {
        var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];
        while (start !== lca) {
          start = start.parent;
          points.push(start);
        }
        var k = points.length;
        while (end !== lca) {
          points.splice(k, 0, end);
          end = end.parent;
        }
        return points;
      }
      function d3_layout_bundleAncestors(node) {
        var ancestors = [], parent = node.parent;
        while (parent != null) {
          ancestors.push(node);
          node = parent;
          parent = parent.parent;
        }
        ancestors.push(node);
        return ancestors;
      }
      function d3_layout_bundleLeastCommonAncestor(a, b) {
        if (a === b) return a;
        var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;
        while (aNode === bNode) {
          sharedNode = aNode;
          aNode = aNodes.pop();
          bNode = bNodes.pop();
        }
        return sharedNode;
      }
      d3.layout.chord = function() {
        var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;
        function relayout() {
          var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;
          chords = [];
          groups = [];
          k = 0, i = -1;
          while (++i < n) {
            x = 0, j = -1;
            while (++j < n) {
              x += matrix[i][j];
            }
            groupSums.push(x);
            subgroupIndex.push(d3.range(n));
            k += x;
          }
          if (sortGroups) {
            groupIndex.sort(function(a, b) {
              return sortGroups(groupSums[a], groupSums[b]);
            });
          }
          if (sortSubgroups) {
            subgroupIndex.forEach(function(d, i) {
              d.sort(function(a, b) {
                return sortSubgroups(matrix[i][a], matrix[i][b]);
              });
            });
          }
          k = (τ - padding * n) / k;
          x = 0, i = -1;
          while (++i < n) {
            x0 = x, j = -1;
            while (++j < n) {
              var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;
              subgroups[di + "-" + dj] = {
                index: di,
                subindex: dj,
                startAngle: a0,
                endAngle: a1,
                value: v
              };
            }
            groups[di] = {
              index: di,
              startAngle: x0,
              endAngle: x,
              value: groupSums[di]
            };
            x += padding;
          }
          i = -1;
          while (++i < n) {
            j = i - 1;
            while (++j < n) {
              var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i];
              if (source.value || target.value) {
                chords.push(source.value < target.value ? {
                  source: target,
                  target: source
                } : {
                  source: source,
                  target: target
                });
              }
            }
          }
          if (sortChords) resort();
        }
        function resort() {
          chords.sort(function(a, b) {
            return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);
          });
        }
        chord.matrix = function(x) {
          if (!arguments.length) return matrix;
          n = (matrix = x) && matrix.length;
          chords = groups = null;
          return chord;
        };
        chord.padding = function(x) {
          if (!arguments.length) return padding;
          padding = x;
          chords = groups = null;
          return chord;
        };
        chord.sortGroups = function(x) {
          if (!arguments.length) return sortGroups;
          sortGroups = x;
          chords = groups = null;
          return chord;
        };
        chord.sortSubgroups = function(x) {
          if (!arguments.length) return sortSubgroups;
          sortSubgroups = x;
          chords = null;
          return chord;
        };
        chord.sortChords = function(x) {
          if (!arguments.length) return sortChords;
          sortChords = x;
          if (chords) resort();
          return chord;
        };
        chord.chords = function() {
          if (!chords) relayout();
          return chords;
        };
        chord.groups = function() {
          if (!groups) relayout();
          return groups;
        };
        return chord;
      };
      d3.layout.force = function() {
        var force = {}, event = d3.dispatch("start", "tick", "end"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;
        function repulse(node) {
          return function(quad, x1, _, x2) {
            if (quad.point !== node) {
              var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;
              if (dw * dw / theta2 < dn) {
                if (dn < chargeDistance2) {
                  var k = quad.charge / dn;
                  node.px -= dx * k;
                  node.py -= dy * k;
                }
                return true;
              }
              if (quad.point && dn && dn < chargeDistance2) {
                var k = quad.pointCharge / dn;
                node.px -= dx * k;
                node.py -= dy * k;
              }
            }
            return !quad.charge;
          };
        }
        force.tick = function() {
          if ((alpha *= .99) < .005) {
            timer = null;
            event.end({
              type: "end",
              alpha: alpha = 0
            });
            return true;
          }
          var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;
          for (i = 0; i < m; ++i) {
            o = links[i];
            s = o.source;
            t = o.target;
            x = t.x - s.x;
            y = t.y - s.y;
            if (l = x * x + y * y) {
              l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
              x *= l;
              y *= l;
              t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5);
              t.y -= y * k;
              s.x += x * (k = 1 - k);
              s.y += y * k;
            }
          }
          if (k = alpha * gravity) {
            x = size[0] / 2;
            y = size[1] / 2;
            i = -1;
            if (k) while (++i < n) {
              o = nodes[i];
              o.x += (x - o.x) * k;
              o.y += (y - o.y) * k;
            }
          }
          if (charge) {
            d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);
            i = -1;
            while (++i < n) {
              if (!(o = nodes[i]).fixed) {
                q.visit(repulse(o));
              }
            }
          }
          i = -1;
          while (++i < n) {
            o = nodes[i];
            if (o.fixed) {
              o.x = o.px;
              o.y = o.py;
            } else {
              o.x -= (o.px - (o.px = o.x)) * friction;
              o.y -= (o.py - (o.py = o.y)) * friction;
            }
          }
          event.tick({
            type: "tick",
            alpha: alpha
          });
        };
        force.nodes = function(x) {
          if (!arguments.length) return nodes;
          nodes = x;
          return force;
        };
        force.links = function(x) {
          if (!arguments.length) return links;
          links = x;
          return force;
        };
        force.size = function(x) {
          if (!arguments.length) return size;
          size = x;
          return force;
        };
        force.linkDistance = function(x) {
          if (!arguments.length) return linkDistance;
          linkDistance = typeof x === "function" ? x : +x;
          return force;
        };
        force.distance = force.linkDistance;
        force.linkStrength = function(x) {
          if (!arguments.length) return linkStrength;
          linkStrength = typeof x === "function" ? x : +x;
          return force;
        };
        force.friction = function(x) {
          if (!arguments.length) return friction;
          friction = +x;
          return force;
        };
        force.charge = function(x) {
          if (!arguments.length) return charge;
          charge = typeof x === "function" ? x : +x;
          return force;
        };
        force.chargeDistance = function(x) {
          if (!arguments.length) return Math.sqrt(chargeDistance2);
          chargeDistance2 = x * x;
          return force;
        };
        force.gravity = function(x) {
          if (!arguments.length) return gravity;
          gravity = +x;
          return force;
        };
        force.theta = function(x) {
          if (!arguments.length) return Math.sqrt(theta2);
          theta2 = x * x;
          return force;
        };
        force.alpha = function(x) {
          if (!arguments.length) return alpha;
          x = +x;
          if (alpha) {
            if (x > 0) {
              alpha = x;
            } else {
              timer.c = null, timer.t = NaN, timer = null;
              event.end({
                type: "end",
                alpha: alpha = 0
              });
            }
          } else if (x > 0) {
            event.start({
              type: "start",
              alpha: alpha = x
            });
            timer = d3_timer(force.tick);
          }
          return force;
        };
        force.start = function() {
          var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;
          for (i = 0; i < n; ++i) {
            (o = nodes[i]).index = i;
            o.weight = 0;
          }
          for (i = 0; i < m; ++i) {
            o = links[i];
            if (typeof o.source == "number") o.source = nodes[o.source];
            if (typeof o.target == "number") o.target = nodes[o.target];
            ++o.source.weight;
            ++o.target.weight;
          }
          for (i = 0; i < n; ++i) {
            o = nodes[i];
            if (isNaN(o.x)) o.x = position("x", w);
            if (isNaN(o.y)) o.y = position("y", h);
            if (isNaN(o.px)) o.px = o.x;
            if (isNaN(o.py)) o.py = o.y;
          }
          distances = [];
          if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;
          strengths = [];
          if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;
          charges = [];
          if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;
          function position(dimension, size) {
            if (!neighbors) {
              neighbors = new Array(n);
              for (j = 0; j < n; ++j) {
                neighbors[j] = [];
              }
              for (j = 0; j < m; ++j) {
                var o = links[j];
                neighbors[o.source.index].push(o.target);
                neighbors[o.target.index].push(o.source);
              }
            }
            var candidates = neighbors[i], j = -1, l = candidates.length, x;
            while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;
            return Math.random() * size;
          }
          return force.resume();
        };
        force.resume = function() {
          return force.alpha(.1);
        };
        force.stop = function() {
          return force.alpha(0);
        };
        force.drag = function() {
          if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend);
          if (!arguments.length) return drag;
          this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag);
        };
        function dragmove(d) {
          d.px = d3.event.x, d.py = d3.event.y;
          force.resume();
        }
        return d3.rebind(force, event, "on");
      };
      function d3_layout_forceDragstart(d) {
        d.fixed |= 2;
      }
      function d3_layout_forceDragend(d) {
        d.fixed &= ~6;
      }
      function d3_layout_forceMouseover(d) {
        d.fixed |= 4;
        d.px = d.x, d.py = d.y;
      }
      function d3_layout_forceMouseout(d) {
        d.fixed &= ~4;
      }
      function d3_layout_forceAccumulate(quad, alpha, charges) {
        var cx = 0, cy = 0;
        quad.charge = 0;
        if (!quad.leaf) {
          var nodes = quad.nodes, n = nodes.length, i = -1, c;
          while (++i < n) {
            c = nodes[i];
            if (c == null) continue;
            d3_layout_forceAccumulate(c, alpha, charges);
            quad.charge += c.charge;
            cx += c.charge * c.cx;
            cy += c.charge * c.cy;
          }
        }
        if (quad.point) {
          if (!quad.leaf) {
            quad.point.x += Math.random() - .5;
            quad.point.y += Math.random() - .5;
          }
          var k = alpha * charges[quad.point.index];
          quad.charge += quad.pointCharge = k;
          cx += k * quad.point.x;
          cy += k * quad.point.y;
        }
        quad.cx = cx / quad.charge;
        quad.cy = cy / quad.charge;
      }
      var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;
      d3.layout.hierarchy = function() {
        var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;
        function hierarchy(root) {
          var stack = [ root ], nodes = [], node;
          root.depth = 0;
          while ((node = stack.pop()) != null) {
            nodes.push(node);
            if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {
              var n, childs, child;
              while (--n >= 0) {
                stack.push(child = childs[n]);
                child.parent = node;
                child.depth = node.depth + 1;
              }
              if (value) node.value = 0;
              node.children = childs;
            } else {
              if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;
              delete node.children;
            }
          }
          d3_layout_hierarchyVisitAfter(root, function(node) {
            var childs, parent;
            if (sort && (childs = node.children)) childs.sort(sort);
            if (value && (parent = node.parent)) parent.value += node.value;
          });
          return nodes;
        }
        hierarchy.sort = function(x) {
          if (!arguments.length) return sort;
          sort = x;
          return hierarchy;
        };
        hierarchy.children = function(x) {
          if (!arguments.length) return children;
          children = x;
          return hierarchy;
        };
        hierarchy.value = function(x) {
          if (!arguments.length) return value;
          value = x;
          return hierarchy;
        };
        hierarchy.revalue = function(root) {
          if (value) {
            d3_layout_hierarchyVisitBefore(root, function(node) {
              if (node.children) node.value = 0;
            });
            d3_layout_hierarchyVisitAfter(root, function(node) {
              var parent;
              if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;
              if (parent = node.parent) parent.value += node.value;
            });
          }
          return root;
        };
        return hierarchy;
      };
      function d3_layout_hierarchyRebind(object, hierarchy) {
        d3.rebind(object, hierarchy, "sort", "children", "value");
        object.nodes = object;
        object.links = d3_layout_hierarchyLinks;
        return object;
      }
      function d3_layout_hierarchyVisitBefore(node, callback) {
        var nodes = [ node ];
        while ((node = nodes.pop()) != null) {
          callback(node);
          if ((children = node.children) && (n = children.length)) {
            var n, children;
            while (--n >= 0) nodes.push(children[n]);
          }
        }
      }
      function d3_layout_hierarchyVisitAfter(node, callback) {
        var nodes = [ node ], nodes2 = [];
        while ((node = nodes.pop()) != null) {
          nodes2.push(node);
          if ((children = node.children) && (n = children.length)) {
            var i = -1, n, children;
            while (++i < n) nodes.push(children[i]);
          }
        }
        while ((node = nodes2.pop()) != null) {
          callback(node);
        }
      }
      function d3_layout_hierarchyChildren(d) {
        return d.children;
      }
      function d3_layout_hierarchyValue(d) {
        return d.value;
      }
      function d3_layout_hierarchySort(a, b) {
        return b.value - a.value;
      }
      function d3_layout_hierarchyLinks(nodes) {
        return d3.merge(nodes.map(function(parent) {
          return (parent.children || []).map(function(child) {
            return {
              source: parent,
              target: child
            };
          });
        }));
      }
      d3.layout.partition = function() {
        var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];
        function position(node, x, dx, dy) {
          var children = node.children;
          node.x = x;
          node.y = node.depth * dy;
          node.dx = dx;
          node.dy = dy;
          if (children && (n = children.length)) {
            var i = -1, n, c, d;
            dx = node.value ? dx / node.value : 0;
            while (++i < n) {
              position(c = children[i], x, d = c.value * dx, dy);
              x += d;
            }
          }
        }
        function depth(node) {
          var children = node.children, d = 0;
          if (children && (n = children.length)) {
            var i = -1, n;
            while (++i < n) d = Math.max(d, depth(children[i]));
          }
          return 1 + d;
        }
        function partition(d, i) {
          var nodes = hierarchy.call(this, d, i);
          position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
          return nodes;
        }
        partition.size = function(x) {
          if (!arguments.length) return size;
          size = x;
          return partition;
        };
        return d3_layout_hierarchyRebind(partition, hierarchy);
      };
      d3.layout.pie = function() {
        var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;
        function pie(data) {
          var n = data.length, values = data.map(function(d, i) {
            return +value.call(pie, d, i);
          }), a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === "function" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v;
          if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {
            return values[j] - values[i];
          } : function(i, j) {
            return sort(data[i], data[j]);
          });
          index.forEach(function(i) {
            arcs[i] = {
              data: data[i],
              value: v = values[i],
              startAngle: a,
              endAngle: a += v * k + pa,
              padAngle: p
            };
          });
          return arcs;
        }
        pie.value = function(_) {
          if (!arguments.length) return value;
          value = _;
          return pie;
        };
        pie.sort = function(_) {
          if (!arguments.length) return sort;
          sort = _;
          return pie;
        };
        pie.startAngle = function(_) {
          if (!arguments.length) return startAngle;
          startAngle = _;
          return pie;
        };
        pie.endAngle = function(_) {
          if (!arguments.length) return endAngle;
          endAngle = _;
          return pie;
        };
        pie.padAngle = function(_) {
          if (!arguments.length) return padAngle;
          padAngle = _;
          return pie;
        };
        return pie;
      };
      var d3_layout_pieSortByValue = {};
      d3.layout.stack = function() {
        var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;
        function stack(data, index) {
          if (!(n = data.length)) return data;
          var series = data.map(function(d, i) {
            return values.call(stack, d, i);
          });
          var points = series.map(function(d) {
            return d.map(function(v, i) {
              return [ x.call(stack, v, i), y.call(stack, v, i) ];
            });
          });
          var orders = order.call(stack, points, index);
          series = d3.permute(series, orders);
          points = d3.permute(points, orders);
          var offsets = offset.call(stack, points, index);
          var m = series[0].length, n, i, j, o;
          for (j = 0; j < m; ++j) {
            out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
            for (i = 1; i < n; ++i) {
              out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
            }
          }
          return data;
        }
        stack.values = function(x) {
          if (!arguments.length) return values;
          values = x;
          return stack;
        };
        stack.order = function(x) {
          if (!arguments.length) return order;
          order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;
          return stack;
        };
        stack.offset = function(x) {
          if (!arguments.length) return offset;
          offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;
          return stack;
        };
        stack.x = function(z) {
          if (!arguments.length) return x;
          x = z;
          return stack;
        };
        stack.y = function(z) {
          if (!arguments.length) return y;
          y = z;
          return stack;
        };
        stack.out = function(z) {
          if (!arguments.length) return out;
          out = z;
          return stack;
        };
        return stack;
      };
      function d3_layout_stackX(d) {
        return d.x;
      }
      function d3_layout_stackY(d) {
        return d.y;
      }
      function d3_layout_stackOut(d, y0, y) {
        d.y0 = y0;
        d.y = y;
      }
      var d3_layout_stackOrders = d3.map({
        "inside-out": function(data) {
          var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {
            return max[a] - max[b];
          }), top = 0, bottom = 0, tops = [], bottoms = [];
          for (i = 0; i < n; ++i) {
            j = index[i];
            if (top < bottom) {
              top += sums[j];
              tops.push(j);
            } else {
              bottom += sums[j];
              bottoms.push(j);
            }
          }
          return bottoms.reverse().concat(tops);
        },
        reverse: function(data) {
          return d3.range(data.length).reverse();
        },
        "default": d3_layout_stackOrderDefault
      });
      var d3_layout_stackOffsets = d3.map({
        silhouette: function(data) {
          var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];
          for (j = 0; j < m; ++j) {
            for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
            if (o > max) max = o;
            sums.push(o);
          }
          for (j = 0; j < m; ++j) {
            y0[j] = (max - sums[j]) / 2;
          }
          return y0;
        },
        wiggle: function(data) {
          var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];
          y0[0] = o = o0 = 0;
          for (j = 1; j < m; ++j) {
            for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
            for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
              for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
                s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
              }
              s2 += s3 * data[i][j][1];
            }
            y0[j] = o -= s1 ? s2 / s1 * dx : 0;
            if (o < o0) o0 = o;
          }
          for (j = 0; j < m; ++j) y0[j] -= o0;
          return y0;
        },
        expand: function(data) {
          var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];
          for (j = 0; j < m; ++j) {
            for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
            if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;
          }
          for (j = 0; j < m; ++j) y0[j] = 0;
          return y0;
        },
        zero: d3_layout_stackOffsetZero
      });
      function d3_layout_stackOrderDefault(data) {
        return d3.range(data.length);
      }
      function d3_layout_stackOffsetZero(data) {
        var j = -1, m = data[0].length, y0 = [];
        while (++j < m) y0[j] = 0;
        return y0;
      }
      function d3_layout_stackMaxIndex(array) {
        var i = 1, j = 0, v = array[0][1], k, n = array.length;
        for (;i < n; ++i) {
          if ((k = array[i][1]) > v) {
            j = i;
            v = k;
          }
        }
        return j;
      }
      function d3_layout_stackReduceSum(d) {
        return d.reduce(d3_layout_stackSum, 0);
      }
      function d3_layout_stackSum(p, d) {
        return p + d[1];
      }
      d3.layout.histogram = function() {
        var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;
        function histogram(data, i) {
          var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;
          while (++i < m) {
            bin = bins[i] = [];
            bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
            bin.y = 0;
          }
          if (m > 0) {
            i = -1;
            while (++i < n) {
              x = values[i];
              if (x >= range[0] && x <= range[1]) {
                bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
                bin.y += k;
                bin.push(data[i]);
              }
            }
          }
          return bins;
        }
        histogram.value = function(x) {
          if (!arguments.length) return valuer;
          valuer = x;
          return histogram;
        };
        histogram.range = function(x) {
          if (!arguments.length) return ranger;
          ranger = d3_functor(x);
          return histogram;
        };
        histogram.bins = function(x) {
          if (!arguments.length) return binner;
          binner = typeof x === "number" ? function(range) {
            return d3_layout_histogramBinFixed(range, x);
          } : d3_functor(x);
          return histogram;
        };
        histogram.frequency = function(x) {
          if (!arguments.length) return frequency;
          frequency = !!x;
          return histogram;
        };
        return histogram;
      };
      function d3_layout_histogramBinSturges(range, values) {
        return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
      }
      function d3_layout_histogramBinFixed(range, n) {
        var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];
        while (++x <= n) f[x] = m * x + b;
        return f;
      }
      function d3_layout_histogramRange(values) {
        return [ d3.min(values), d3.max(values) ];
      }
      d3.layout.pack = function() {
        var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;
        function pack(d, i) {
          var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() {
            return radius;
          };
          root.x = root.y = 0;
          d3_layout_hierarchyVisitAfter(root, function(d) {
            d.r = +r(d.value);
          });
          d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
          if (padding) {
            var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;
            d3_layout_hierarchyVisitAfter(root, function(d) {
              d.r += dr;
            });
            d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
            d3_layout_hierarchyVisitAfter(root, function(d) {
              d.r -= dr;
            });
          }
          d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));
          return nodes;
        }
        pack.size = function(_) {
          if (!arguments.length) return size;
          size = _;
          return pack;
        };
        pack.radius = function(_) {
          if (!arguments.length) return radius;
          radius = _ == null || typeof _ === "function" ? _ : +_;
          return pack;
        };
        pack.padding = function(_) {
          if (!arguments.length) return padding;
          padding = +_;
          return pack;
        };
        return d3_layout_hierarchyRebind(pack, hierarchy);
      };
      function d3_layout_packSort(a, b) {
        return a.value - b.value;
      }
      function d3_layout_packInsert(a, b) {
        var c = a._pack_next;
        a._pack_next = b;
        b._pack_prev = a;
        b._pack_next = c;
        c._pack_prev = b;
      }
      function d3_layout_packSplice(a, b) {
        a._pack_next = b;
        b._pack_prev = a;
      }
      function d3_layout_packIntersects(a, b) {
        var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;
        return .999 * dr * dr > dx * dx + dy * dy;
      }
      function d3_layout_packSiblings(node) {
        if (!(nodes = node.children) || !(n = nodes.length)) return;
        var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;
        function bound(node) {
          xMin = Math.min(node.x - node.r, xMin);
          xMax = Math.max(node.x + node.r, xMax);
          yMin = Math.min(node.y - node.r, yMin);
          yMax = Math.max(node.y + node.r, yMax);
        }
        nodes.forEach(d3_layout_packLink);
        a = nodes[0];
        a.x = -a.r;
        a.y = 0;
        bound(a);
        if (n > 1) {
          b = nodes[1];
          b.x = b.r;
          b.y = 0;
          bound(b);
          if (n > 2) {
            c = nodes[2];
            d3_layout_packPlace(a, b, c);
            bound(c);
            d3_layout_packInsert(a, c);
            a._pack_prev = c;
            d3_layout_packInsert(c, b);
            b = a._pack_next;
            for (i = 3; i < n; i++) {
              d3_layout_packPlace(a, b, c = nodes[i]);
              var isect = 0, s1 = 1, s2 = 1;
              for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
                if (d3_layout_packIntersects(j, c)) {
                  isect = 1;
                  break;
                }
              }
              if (isect == 1) {
                for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
                  if (d3_layout_packIntersects(k, c)) {
                    break;
                  }
                }
              }
              if (isect) {
                if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);
                i--;
              } else {
                d3_layout_packInsert(a, c);
                b = c;
                bound(c);
              }
            }
          }
        }
        var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;
        for (i = 0; i < n; i++) {
          c = nodes[i];
          c.x -= cx;
          c.y -= cy;
          cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));
        }
        node.r = cr;
        nodes.forEach(d3_layout_packUnlink);
      }
      function d3_layout_packLink(node) {
        node._pack_next = node._pack_prev = node;
      }
      function d3_layout_packUnlink(node) {
        delete node._pack_next;
        delete node._pack_prev;
      }
      function d3_layout_packTransform(node, x, y, k) {
        var children = node.children;
        node.x = x += k * node.x;
        node.y = y += k * node.y;
        node.r *= k;
        if (children) {
          var i = -1, n = children.length;
          while (++i < n) d3_layout_packTransform(children[i], x, y, k);
        }
      }
      function d3_layout_packPlace(a, b, c) {
        var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;
        if (db && (dx || dy)) {
          var da = b.r + c.r, dc = dx * dx + dy * dy;
          da *= da;
          db *= db;
          var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
          c.x = a.x + x * dx + y * dy;
          c.y = a.y + x * dy - y * dx;
        } else {
          c.x = a.x + db;
          c.y = a.y;
        }
      }
      d3.layout.tree = function() {
        var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;
        function tree(d, i) {
          var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);
          d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;
          d3_layout_hierarchyVisitBefore(root1, secondWalk);
          if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {
            var left = root0, right = root0, bottom = root0;
            d3_layout_hierarchyVisitBefore(root0, function(node) {
              if (node.x < left.x) left = node;
              if (node.x > right.x) right = node;
              if (node.depth > bottom.depth) bottom = node;
            });
            var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);
            d3_layout_hierarchyVisitBefore(root0, function(node) {
              node.x = (node.x + tx) * kx;
              node.y = node.depth * ky;
            });
          }
          return nodes;
        }
        function wrapTree(root0) {
          var root1 = {
            A: null,
            children: [ root0 ]
          }, queue = [ root1 ], node1;
          while ((node1 = queue.pop()) != null) {
            for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {
              queue.push((children[i] = child = {
                _: children[i],
                parent: node1,
                children: (child = children[i].children) && child.slice() || [],
                A: null,
                a: null,
                z: 0,
                m: 0,
                c: 0,
                s: 0,
                t: null,
                i: i
              }).a = child);
            }
          }
          return root1.children[0];
        }
        function firstWalk(v) {
          var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;
          if (children.length) {
            d3_layout_treeShift(v);
            var midpoint = (children[0].z + children[children.length - 1].z) / 2;
            if (w) {
              v.z = w.z + separation(v._, w._);
              v.m = v.z - midpoint;
            } else {
              v.z = midpoint;
            }
          } else if (w) {
            v.z = w.z + separation(v._, w._);
          }
          v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
        }
        function secondWalk(v) {
          v._.x = v.z + v.parent.m;
          v.m += v.parent.m;
        }
        function apportion(v, w, ancestor) {
          if (w) {
            var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;
            while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
              vom = d3_layout_treeLeft(vom);
              vop = d3_layout_treeRight(vop);
              vop.a = v;
              shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
              if (shift > 0) {
                d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);
                sip += shift;
                sop += shift;
              }
              sim += vim.m;
              sip += vip.m;
              som += vom.m;
              sop += vop.m;
            }
            if (vim && !d3_layout_treeRight(vop)) {
              vop.t = vim;
              vop.m += sim - sop;
            }
            if (vip && !d3_layout_treeLeft(vom)) {
              vom.t = vip;
              vom.m += sip - som;
              ancestor = v;
            }
          }
          return ancestor;
        }
        function sizeNode(node) {
          node.x *= size[0];
          node.y = node.depth * size[1];
        }
        tree.separation = function(x) {
          if (!arguments.length) return separation;
          separation = x;
          return tree;
        };
        tree.size = function(x) {
          if (!arguments.length) return nodeSize ? null : size;
          nodeSize = (size = x) == null ? sizeNode : null;
          return tree;
        };
        tree.nodeSize = function(x) {
          if (!arguments.length) return nodeSize ? size : null;
          nodeSize = (size = x) == null ? null : sizeNode;
          return tree;
        };
        return d3_layout_hierarchyRebind(tree, hierarchy);
      };
      function d3_layout_treeSeparation(a, b) {
        return a.parent == b.parent ? 1 : 2;
      }
      function d3_layout_treeLeft(v) {
        var children = v.children;
        return children.length ? children[0] : v.t;
      }
      function d3_layout_treeRight(v) {
        var children = v.children, n;
        return (n = children.length) ? children[n - 1] : v.t;
      }
      function d3_layout_treeMove(wm, wp, shift) {
        var change = shift / (wp.i - wm.i);
        wp.c -= change;
        wp.s += shift;
        wm.c += change;
        wp.z += shift;
        wp.m += shift;
      }
      function d3_layout_treeShift(v) {
        var shift = 0, change = 0, children = v.children, i = children.length, w;
        while (--i >= 0) {
          w = children[i];
          w.z += shift;
          w.m += shift;
          shift += w.s + (change += w.c);
        }
      }
      function d3_layout_treeAncestor(vim, v, ancestor) {
        return vim.a.parent === v.parent ? vim.a : ancestor;
      }
      d3.layout.cluster = function() {
        var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;
        function cluster(d, i) {
          var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;
          d3_layout_hierarchyVisitAfter(root, function(node) {
            var children = node.children;
            if (children && children.length) {
              node.x = d3_layout_clusterX(children);
              node.y = d3_layout_clusterY(children);
            } else {
              node.x = previousNode ? x += separation(node, previousNode) : 0;
              node.y = 0;
              previousNode = node;
            }
          });
          var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;
          d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {
            node.x = (node.x - root.x) * size[0];
            node.y = (root.y - node.y) * size[1];
          } : function(node) {
            node.x = (node.x - x0) / (x1 - x0) * size[0];
            node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];
          });
          return nodes;
        }
        cluster.separation = function(x) {
          if (!arguments.length) return separation;
          separation = x;
          return cluster;
        };
        cluster.size = function(x) {
          if (!arguments.length) return nodeSize ? null : size;
          nodeSize = (size = x) == null;
          return cluster;
        };
        cluster.nodeSize = function(x) {
          if (!arguments.length) return nodeSize ? size : null;
          nodeSize = (size = x) != null;
          return cluster;
        };
        return d3_layout_hierarchyRebind(cluster, hierarchy);
      };
      function d3_layout_clusterY(children) {
        return 1 + d3.max(children, function(child) {
          return child.y;
        });
      }
      function d3_layout_clusterX(children) {
        return children.reduce(function(x, child) {
          return x + child.x;
        }, 0) / children.length;
      }
      function d3_layout_clusterLeft(node) {
        var children = node.children;
        return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
      }
      function d3_layout_clusterRight(node) {
        var children = node.children, n;
        return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
      }
      d3.layout.treemap = function() {
        var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5));
        function scale(children, k) {
          var i = -1, n = children.length, child, area;
          while (++i < n) {
            area = (child = children[i]).value * (k < 0 ? 0 : k);
            child.area = isNaN(area) || area <= 0 ? 0 : area;
          }
        }
        function squarify(node) {
          var children = node.children;
          if (children && children.length) {
            var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;
            scale(remaining, rect.dx * rect.dy / node.value);
            row.area = 0;
            while ((n = remaining.length) > 0) {
              row.push(child = remaining[n - 1]);
              row.area += child.area;
              if (mode !== "squarify" || (score = worst(row, u)) <= best) {
                remaining.pop();
                best = score;
              } else {
                row.area -= row.pop().area;
                position(row, u, rect, false);
                u = Math.min(rect.dx, rect.dy);
                row.length = row.area = 0;
                best = Infinity;
              }
            }
            if (row.length) {
              position(row, u, rect, true);
              row.length = row.area = 0;
            }
            children.forEach(squarify);
          }
        }
        function stickify(node) {
          var children = node.children;
          if (children && children.length) {
            var rect = pad(node), remaining = children.slice(), child, row = [];
            scale(remaining, rect.dx * rect.dy / node.value);
            row.area = 0;
            while (child = remaining.pop()) {
              row.push(child);
              row.area += child.area;
              if (child.z != null) {
                position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);
                row.length = row.area = 0;
              }
            }
            children.forEach(stickify);
          }
        }
        function worst(row, u) {
          var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;
          while (++i < n) {
            if (!(r = row[i].area)) continue;
            if (r < rmin) rmin = r;
            if (r > rmax) rmax = r;
          }
          s *= s;
          u *= u;
          return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;
        }
        function position(row, u, rect, flush) {
          var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;
          if (u == rect.dx) {
            if (flush || v > rect.dy) v = rect.dy;
            while (++i < n) {
              o = row[i];
              o.x = x;
              o.y = y;
              o.dy = v;
              x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);
            }
            o.z = true;
            o.dx += rect.x + rect.dx - x;
            rect.y += v;
            rect.dy -= v;
          } else {
            if (flush || v > rect.dx) v = rect.dx;
            while (++i < n) {
              o = row[i];
              o.x = x;
              o.y = y;
              o.dx = v;
              y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);
            }
            o.z = false;
            o.dy += rect.y + rect.dy - y;
            rect.x += v;
            rect.dx -= v;
          }
        }
        function treemap(d) {
          var nodes = stickies || hierarchy(d), root = nodes[0];
          root.x = root.y = 0;
          if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;
          if (stickies) hierarchy.revalue(root);
          scale([ root ], root.dx * root.dy / root.value);
          (stickies ? stickify : squarify)(root);
          if (sticky) stickies = nodes;
          return nodes;
        }
        treemap.size = function(x) {
          if (!arguments.length) return size;
          size = x;
          return treemap;
        };
        treemap.padding = function(x) {
          if (!arguments.length) return padding;
          function padFunction(node) {
            var p = x.call(treemap, node, node.depth);
            return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p);
          }
          function padConstant(node) {
            return d3_layout_treemapPad(node, x);
          }
          var type;
          pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], 
          padConstant) : padConstant;
          return treemap;
        };
        treemap.round = function(x) {
          if (!arguments.length) return round != Number;
          round = x ? Math.round : Number;
          return treemap;
        };
        treemap.sticky = function(x) {
          if (!arguments.length) return sticky;
          sticky = x;
          stickies = null;
          return treemap;
        };
        treemap.ratio = function(x) {
          if (!arguments.length) return ratio;
          ratio = x;
          return treemap;
        };
        treemap.mode = function(x) {
          if (!arguments.length) return mode;
          mode = x + "";
          return treemap;
        };
        return d3_layout_hierarchyRebind(treemap, hierarchy);
      };
      function d3_layout_treemapPadNull(node) {
        return {
          x: node.x,
          y: node.y,
          dx: node.dx,
          dy: node.dy
        };
      }
      function d3_layout_treemapPad(node, padding) {
        var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];
        if (dx < 0) {
          x += dx / 2;
          dx = 0;
        }
        if (dy < 0) {
          y += dy / 2;
          dy = 0;
        }
        return {
          x: x,
          y: y,
          dx: dx,
          dy: dy
        };
      }
      d3.random = {
        normal: function(µ, σ) {
          var n = arguments.length;
          if (n < 2) σ = 1;
          if (n < 1) µ = 0;
          return function() {
            var x, y, r;
            do {
              x = Math.random() * 2 - 1;
              y = Math.random() * 2 - 1;
              r = x * x + y * y;
            } while (!r || r > 1);
            return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);
          };
        },
        logNormal: function() {
          var random = d3.random.normal.apply(d3, arguments);
          return function() {
            return Math.exp(random());
          };
        },
        bates: function(m) {
          var random = d3.random.irwinHall(m);
          return function() {
            return random() / m;
          };
        },
        irwinHall: function(m) {
          return function() {
            for (var s = 0, j = 0; j < m; j++) s += Math.random();
            return s;
          };
        }
      };
      d3.scale = {};
      function d3_scaleExtent(domain) {
        var start = domain[0], stop = domain[domain.length - 1];
        return start < stop ? [ start, stop ] : [ stop, start ];
      }
      function d3_scaleRange(scale) {
        return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());
      }
      function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
        var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);
        return function(x) {
          return i(u(x));
        };
      }
      function d3_scale_nice(domain, nice) {
        var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;
        if (x1 < x0) {
          dx = i0, i0 = i1, i1 = dx;
          dx = x0, x0 = x1, x1 = dx;
        }
        domain[i0] = nice.floor(x0);
        domain[i1] = nice.ceil(x1);
        return domain;
      }
      function d3_scale_niceStep(step) {
        return step ? {
          floor: function(x) {
            return Math.floor(x / step) * step;
          },
          ceil: function(x) {
            return Math.ceil(x / step) * step;
          }
        } : d3_scale_niceIdentity;
      }
      var d3_scale_niceIdentity = {
        floor: d3_identity,
        ceil: d3_identity
      };
      function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
        var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;
        if (domain[k] < domain[0]) {
          domain = domain.slice().reverse();
          range = range.slice().reverse();
        }
        while (++j <= k) {
          u.push(uninterpolate(domain[j - 1], domain[j]));
          i.push(interpolate(range[j - 1], range[j]));
        }
        return function(x) {
          var j = d3.bisect(domain, x, 1, k) - 1;
          return i[j](u[j](x));
        };
      }
      d3.scale.linear = function() {
        return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);
      };
      function d3_scale_linear(domain, range, interpolate, clamp) {
        var output, input;
        function rescale() {
          var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
          output = linear(domain, range, uninterpolate, interpolate);
          input = linear(range, domain, uninterpolate, d3_interpolate);
          return scale;
        }
        function scale(x) {
          return output(x);
        }
        scale.invert = function(y) {
          return input(y);
        };
        scale.domain = function(x) {
          if (!arguments.length) return domain;
          domain = x.map(Number);
          return rescale();
        };
        scale.range = function(x) {
          if (!arguments.length) return range;
          range = x;
          return rescale();
        };
        scale.rangeRound = function(x) {
          return scale.range(x).interpolate(d3_interpolateRound);
        };
        scale.clamp = function(x) {
          if (!arguments.length) return clamp;
          clamp = x;
          return rescale();
        };
        scale.interpolate = function(x) {
          if (!arguments.length) return interpolate;
          interpolate = x;
          return rescale();
        };
        scale.ticks = function(m) {
          return d3_scale_linearTicks(domain, m);
        };
        scale.tickFormat = function(m, format) {
          return d3_scale_linearTickFormat(domain, m, format);
        };
        scale.nice = function(m) {
          d3_scale_linearNice(domain, m);
          return rescale();
        };
        scale.copy = function() {
          return d3_scale_linear(domain, range, interpolate, clamp);
        };
        return rescale();
      }
      function d3_scale_linearRebind(scale, linear) {
        return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
      }
      function d3_scale_linearNice(domain, m) {
        d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
        d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
        return domain;
      }
      function d3_scale_linearTickRange(domain, m) {
        if (m == null) m = 10;
        var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;
        if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;
        extent[0] = Math.ceil(extent[0] / step) * step;
        extent[1] = Math.floor(extent[1] / step) * step + step * .5;
        extent[2] = step;
        return extent;
      }
      function d3_scale_linearTicks(domain, m) {
        return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
      }
      function d3_scale_linearTickFormat(domain, m, format) {
        var range = d3_scale_linearTickRange(domain, m);
        if (format) {
          var match = d3_format_re.exec(format);
          match.shift();
          if (match[8] === "s") {
            var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));
            if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2]));
            match[8] = "f";
            format = d3.format(match.join(""));
            return function(d) {
              return format(prefix.scale(d)) + prefix.symbol;
            };
          }
          if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range);
          format = match.join("");
        } else {
          format = ",." + d3_scale_linearPrecision(range[2]) + "f";
        }
        return d3.format(format);
      }
      var d3_scale_linearFormatSignificant = {
        s: 1,
        g: 1,
        p: 1,
        r: 1,
        e: 1
      };
      function d3_scale_linearPrecision(value) {
        return -Math.floor(Math.log(value) / Math.LN10 + .01);
      }
      function d3_scale_linearFormatPrecision(type, range) {
        var p = d3_scale_linearPrecision(range[2]);
        return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2;
      }
      d3.scale.log = function() {
        return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);
      };
      function d3_scale_log(linear, base, positive, domain) {
        function log(x) {
          return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);
        }
        function pow(x) {
          return positive ? Math.pow(base, x) : -Math.pow(base, -x);
        }
        function scale(x) {
          return linear(log(x));
        }
        scale.invert = function(x) {
          return pow(linear.invert(x));
        };
        scale.domain = function(x) {
          if (!arguments.length) return domain;
          positive = x[0] >= 0;
          linear.domain((domain = x.map(Number)).map(log));
          return scale;
        };
        scale.base = function(_) {
          if (!arguments.length) return base;
          base = +_;
          linear.domain(domain.map(log));
          return scale;
        };
        scale.nice = function() {
          var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);
          linear.domain(niced);
          domain = niced.map(pow);
          return scale;
        };
        scale.ticks = function() {
          var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;
          if (isFinite(j - i)) {
            if (positive) {
              for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);
              ticks.push(pow(i));
            } else {
              ticks.push(pow(i));
              for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);
            }
            for (i = 0; ticks[i] < u; i++) {}
            for (j = ticks.length; ticks[j - 1] > v; j--) {}
            ticks = ticks.slice(i, j);
          }
          return ticks;
        };
        scale.tickFormat = function(n, format) {
          if (!arguments.length) return d3_scale_logFormat;
          if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format);
          var k = Math.max(1, base * n / scale.ticks().length);
          return function(d) {
            var i = d / pow(Math.round(log(d)));
            if (i * base < base - .5) i *= base;
            return i <= k ? format(d) : "";
          };
        };
        scale.copy = function() {
          return d3_scale_log(linear.copy(), base, positive, domain);
        };
        return d3_scale_linearRebind(scale, linear);
      }
      var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = {
        floor: function(x) {
          return -Math.ceil(-x);
        },
        ceil: function(x) {
          return -Math.floor(-x);
        }
      };
      d3.scale.pow = function() {
        return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);
      };
      function d3_scale_pow(linear, exponent, domain) {
        var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);
        function scale(x) {
          return linear(powp(x));
        }
        scale.invert = function(x) {
          return powb(linear.invert(x));
        };
        scale.domain = function(x) {
          if (!arguments.length) return domain;
          linear.domain((domain = x.map(Number)).map(powp));
          return scale;
        };
        scale.ticks = function(m) {
          return d3_scale_linearTicks(domain, m);
        };
        scale.tickFormat = function(m, format) {
          return d3_scale_linearTickFormat(domain, m, format);
        };
        scale.nice = function(m) {
          return scale.domain(d3_scale_linearNice(domain, m));
        };
        scale.exponent = function(x) {
          if (!arguments.length) return exponent;
          powp = d3_scale_powPow(exponent = x);
          powb = d3_scale_powPow(1 / exponent);
          linear.domain(domain.map(powp));
          return scale;
        };
        scale.copy = function() {
          return d3_scale_pow(linear.copy(), exponent, domain);
        };
        return d3_scale_linearRebind(scale, linear);
      }
      function d3_scale_powPow(e) {
        return function(x) {
          return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
        };
      }
      d3.scale.sqrt = function() {
        return d3.scale.pow().exponent(.5);
      };
      d3.scale.ordinal = function() {
        return d3_scale_ordinal([], {
          t: "range",
          a: [ [] ]
        });
      };
      function d3_scale_ordinal(domain, ranger) {
        var index, range, rangeBand;
        function scale(x) {
          return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];
        }
        function steps(start, step) {
          return d3.range(domain.length).map(function(i) {
            return start + step * i;
          });
        }
        scale.domain = function(x) {
          if (!arguments.length) return domain;
          domain = [];
          index = new d3_Map();
          var i = -1, n = x.length, xi;
          while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));
          return scale[ranger.t].apply(scale, ranger.a);
        };
        scale.range = function(x) {
          if (!arguments.length) return range;
          range = x;
          rangeBand = 0;
          ranger = {
            t: "range",
            a: arguments
          };
          return scale;
        };
        scale.rangePoints = function(x, padding) {
          if (arguments.length < 2) padding = 0;
          var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, 
          0) : (stop - start) / (domain.length - 1 + padding);
          range = steps(start + step * padding / 2, step);
          rangeBand = 0;
          ranger = {
            t: "rangePoints",
            a: arguments
          };
          return scale;
        };
        scale.rangeRoundPoints = function(x, padding) {
          if (arguments.length < 2) padding = 0;
          var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), 
          0) : (stop - start) / (domain.length - 1 + padding) | 0;
          range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);
          rangeBand = 0;
          ranger = {
            t: "rangeRoundPoints",
            a: arguments
          };
          return scale;
        };
        scale.rangeBands = function(x, padding, outerPadding) {
          if (arguments.length < 2) padding = 0;
          if (arguments.length < 3) outerPadding = padding;
          var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);
          range = steps(start + step * outerPadding, step);
          if (reverse) range.reverse();
          rangeBand = step * (1 - padding);
          ranger = {
            t: "rangeBands",
            a: arguments
          };
          return scale;
        };
        scale.rangeRoundBands = function(x, padding, outerPadding) {
          if (arguments.length < 2) padding = 0;
          if (arguments.length < 3) outerPadding = padding;
          var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));
          range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);
          if (reverse) range.reverse();
          rangeBand = Math.round(step * (1 - padding));
          ranger = {
            t: "rangeRoundBands",
            a: arguments
          };
          return scale;
        };
        scale.rangeBand = function() {
          return rangeBand;
        };
        scale.rangeExtent = function() {
          return d3_scaleExtent(ranger.a[0]);
        };
        scale.copy = function() {
          return d3_scale_ordinal(domain, ranger);
        };
        return scale.domain(domain);
      }
      d3.scale.category10 = function() {
        return d3.scale.ordinal().range(d3_category10);
      };
      d3.scale.category20 = function() {
        return d3.scale.ordinal().range(d3_category20);
      };
      d3.scale.category20b = function() {
        return d3.scale.ordinal().range(d3_category20b);
      };
      d3.scale.category20c = function() {
        return d3.scale.ordinal().range(d3_category20c);
      };
      var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);
      var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);
      var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);
      var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);
      d3.scale.quantile = function() {
        return d3_scale_quantile([], []);
      };
      function d3_scale_quantile(domain, range) {
        var thresholds;
        function rescale() {
          var k = 0, q = range.length;
          thresholds = [];
          while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
          return scale;
        }
        function scale(x) {
          if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];
        }
        scale.domain = function(x) {
          if (!arguments.length) return domain;
          domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);
          return rescale();
        };
        scale.range = function(x) {
          if (!arguments.length) return range;
          range = x;
          return rescale();
        };
        scale.quantiles = function() {
          return thresholds;
        };
        scale.invertExtent = function(y) {
          y = range.indexOf(y);
          return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];
        };
        scale.copy = function() {
          return d3_scale_quantile(domain, range);
        };
        return rescale();
      }
      d3.scale.quantize = function() {
        return d3_scale_quantize(0, 1, [ 0, 1 ]);
      };
      function d3_scale_quantize(x0, x1, range) {
        var kx, i;
        function scale(x) {
          return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
        }
        function rescale() {
          kx = range.length / (x1 - x0);
          i = range.length - 1;
          return scale;
        }
        scale.domain = function(x) {
          if (!arguments.length) return [ x0, x1 ];
          x0 = +x[0];
          x1 = +x[x.length - 1];
          return rescale();
        };
        scale.range = function(x) {
          if (!arguments.length) return range;
          range = x;
          return rescale();
        };
        scale.invertExtent = function(y) {
          y = range.indexOf(y);
          y = y < 0 ? NaN : y / kx + x0;
          return [ y, y + 1 / kx ];
        };
        scale.copy = function() {
          return d3_scale_quantize(x0, x1, range);
        };
        return rescale();
      }
      d3.scale.threshold = function() {
        return d3_scale_threshold([ .5 ], [ 0, 1 ]);
      };
      function d3_scale_threshold(domain, range) {
        function scale(x) {
          if (x <= x) return range[d3.bisect(domain, x)];
        }
        scale.domain = function(_) {
          if (!arguments.length) return domain;
          domain = _;
          return scale;
        };
        scale.range = function(_) {
          if (!arguments.length) return range;
          range = _;
          return scale;
        };
        scale.invertExtent = function(y) {
          y = range.indexOf(y);
          return [ domain[y - 1], domain[y] ];
        };
        scale.copy = function() {
          return d3_scale_threshold(domain, range);
        };
        return scale;
      }
      d3.scale.identity = function() {
        return d3_scale_identity([ 0, 1 ]);
      };
      function d3_scale_identity(domain) {
        function identity(x) {
          return +x;
        }
        identity.invert = identity;
        identity.domain = identity.range = function(x) {
          if (!arguments.length) return domain;
          domain = x.map(identity);
          return identity;
        };
        identity.ticks = function(m) {
          return d3_scale_linearTicks(domain, m);
        };
        identity.tickFormat = function(m, format) {
          return d3_scale_linearTickFormat(domain, m, format);
        };
        identity.copy = function() {
          return d3_scale_identity(domain);
        };
        return identity;
      }
      d3.svg = {};
      function d3_zero() {
        return 0;
      }
      d3.svg.arc = function() {
        var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;
        function arc() {
          var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;
          if (r1 < r0) rc = r1, r1 = r0, r0 = rc;
          if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : "") + "Z";
          var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];
          if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {
            rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);
            if (!cw) p1 *= -1;
            if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));
            if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));
          }
          if (r1) {
            x0 = r1 * Math.cos(a0 + p1);
            y0 = r1 * Math.sin(a0 + p1);
            x1 = r1 * Math.cos(a1 - p1);
            y1 = r1 * Math.sin(a1 - p1);
            var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;
            if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {
              var h1 = (a0 + a1) / 2;
              x0 = r1 * Math.cos(h1);
              y0 = r1 * Math.sin(h1);
              x1 = y1 = null;
            }
          } else {
            x0 = y0 = 0;
          }
          if (r0) {
            x2 = r0 * Math.cos(a1 - p0);
            y2 = r0 * Math.sin(a1 - p0);
            x3 = r0 * Math.cos(a0 + p0);
            y3 = r0 * Math.sin(a0 + p0);
            var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;
            if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {
              var h0 = (a0 + a1) / 2;
              x2 = r0 * Math.cos(h0);
              y2 = r0 * Math.sin(h0);
              x3 = y3 = null;
            }
          } else {
            x2 = y2 = 0;
          }
          if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {
            cr = r0 < r1 ^ cw ? 0 : 1;
            var rc1 = rc, rc0 = rc;
            if (da < π) {
              var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
              rc0 = Math.min(rc, (r0 - lc) / (kc - 1));
              rc1 = Math.min(rc, (r1 - lc) / (kc + 1));
            }
            if (x1 != null) {
              var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);
              if (rc === rc1) {
                path.push("M", t30[0], "A", rc1, ",", rc1, " 0 0,", cr, " ", t30[1], "A", r1, ",", r1, " 0 ", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), ",", cw, " ", t12[1], "A", rc1, ",", rc1, " 0 0,", cr, " ", t12[0]);
              } else {
                path.push("M", t30[0], "A", rc1, ",", rc1, " 0 1,", cr, " ", t12[0]);
              }
            } else {
              path.push("M", x0, ",", y0);
            }
            if (x3 != null) {
              var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);
              if (rc === rc0) {
                path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t21[1], "A", r0, ",", r0, " 0 ", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), ",", 1 - cw, " ", t03[1], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]);
              } else {
                path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]);
              }
            } else {
              path.push("L", x2, ",", y2);
            }
          } else {
            path.push("M", x0, ",", y0);
            if (x1 != null) path.push("A", r1, ",", r1, " 0 ", l1, ",", cw, " ", x1, ",", y1);
            path.push("L", x2, ",", y2);
            if (x3 != null) path.push("A", r0, ",", r0, " 0 ", l0, ",", 1 - cw, " ", x3, ",", y3);
          }
          path.push("Z");
          return path.join("");
        }
        function circleSegment(r1, cw) {
          return "M0," + r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + -r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + r1;
        }
        arc.innerRadius = function(v) {
          if (!arguments.length) return innerRadius;
          innerRadius = d3_functor(v);
          return arc;
        };
        arc.outerRadius = function(v) {
          if (!arguments.length) return outerRadius;
          outerRadius = d3_functor(v);
          return arc;
        };
        arc.cornerRadius = function(v) {
          if (!arguments.length) return cornerRadius;
          cornerRadius = d3_functor(v);
          return arc;
        };
        arc.padRadius = function(v) {
          if (!arguments.length) return padRadius;
          padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);
          return arc;
        };
        arc.startAngle = function(v) {
          if (!arguments.length) return startAngle;
          startAngle = d3_functor(v);
          return arc;
        };
        arc.endAngle = function(v) {
          if (!arguments.length) return endAngle;
          endAngle = d3_functor(v);
          return arc;
        };
        arc.padAngle = function(v) {
          if (!arguments.length) return padAngle;
          padAngle = d3_functor(v);
          return arc;
        };
        arc.centroid = function() {
          var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;
          return [ Math.cos(a) * r, Math.sin(a) * r ];
        };
        return arc;
      };
      var d3_svg_arcAuto = "auto";
      function d3_svg_arcInnerRadius(d) {
        return d.innerRadius;
      }
      function d3_svg_arcOuterRadius(d) {
        return d.outerRadius;
      }
      function d3_svg_arcStartAngle(d) {
        return d.startAngle;
      }
      function d3_svg_arcEndAngle(d) {
        return d.endAngle;
      }
      function d3_svg_arcPadAngle(d) {
        return d && d.padAngle;
      }
      function d3_svg_arcSweep(x0, y0, x1, y1) {
        return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;
      }
      function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {
        var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;
        if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
        return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];
      }
      function d3_svg_line(projection) {
        var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;
        function line(data) {
          var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);
          function segment() {
            segments.push("M", interpolate(projection(points), tension));
          }
          while (++i < n) {
            if (defined.call(this, d = data[i], i)) {
              points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);
            } else if (points.length) {
              segment();
              points = [];
            }
          }
          if (points.length) segment();
          return segments.length ? segments.join("") : null;
        }
        line.x = function(_) {
          if (!arguments.length) return x;
          x = _;
          return line;
        };
        line.y = function(_) {
          if (!arguments.length) return y;
          y = _;
          return line;
        };
        line.defined = function(_) {
          if (!arguments.length) return defined;
          defined = _;
          return line;
        };
        line.interpolate = function(_) {
          if (!arguments.length) return interpolateKey;
          if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
          return line;
        };
        line.tension = function(_) {
          if (!arguments.length) return tension;
          tension = _;
          return line;
        };
        return line;
      }
      d3.svg.line = function() {
        return d3_svg_line(d3_identity);
      };
      var d3_svg_lineInterpolators = d3.map({
        linear: d3_svg_lineLinear,
        "linear-closed": d3_svg_lineLinearClosed,
        step: d3_svg_lineStep,
        "step-before": d3_svg_lineStepBefore,
        "step-after": d3_svg_lineStepAfter,
        basis: d3_svg_lineBasis,
        "basis-open": d3_svg_lineBasisOpen,
        "basis-closed": d3_svg_lineBasisClosed,
        bundle: d3_svg_lineBundle,
        cardinal: d3_svg_lineCardinal,
        "cardinal-open": d3_svg_lineCardinalOpen,
        "cardinal-closed": d3_svg_lineCardinalClosed,
        monotone: d3_svg_lineMonotone
      });
      d3_svg_lineInterpolators.forEach(function(key, value) {
        value.key = key;
        value.closed = /-closed$/.test(key);
      });
      function d3_svg_lineLinear(points) {
        return points.length > 1 ? points.join("L") : points + "Z";
      }
      function d3_svg_lineLinearClosed(points) {
        return points.join("L") + "Z";
      }
      function d3_svg_lineStep(points) {
        var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
        while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]);
        if (n > 1) path.push("H", p[0]);
        return path.join("");
      }
      function d3_svg_lineStepBefore(points) {
        var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
        while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
        return path.join("");
      }
      function d3_svg_lineStepAfter(points) {
        var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
        while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
        return path.join("");
      }
      function d3_svg_lineCardinalOpen(points, tension) {
        return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));
      }
      function d3_svg_lineCardinalClosed(points, tension) {
        return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), 
        points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));
      }
      function d3_svg_lineCardinal(points, tension) {
        return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));
      }
      function d3_svg_lineHermite(points, tangents) {
        if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {
          return d3_svg_lineLinear(points);
        }
        var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;
        if (quad) {
          path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1];
          p0 = points[1];
          pi = 2;
        }
        if (tangents.length > 1) {
          t = tangents[1];
          p = points[pi];
          pi++;
          path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
          for (var i = 2; i < tangents.length; i++, pi++) {
            p = points[pi];
            t = tangents[i];
            path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
          }
        }
        if (quad) {
          var lp = points[pi];
          path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1];
        }
        return path;
      }
      function d3_svg_lineCardinalTangents(points, tension) {
        var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;
        while (++i < n) {
          p0 = p1;
          p1 = p2;
          p2 = points[i];
          tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);
        }
        return tangents;
      }
      function d3_svg_lineBasis(points) {
        if (points.length < 3) return d3_svg_lineLinear(points);
        var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
        points.push(points[n - 1]);
        while (++i <= n) {
          pi = points[i];
          px.shift();
          px.push(pi[0]);
          py.shift();
          py.push(pi[1]);
          d3_svg_lineBasisBezier(path, px, py);
        }
        points.pop();
        path.push("L", pi);
        return path.join("");
      }
      function d3_svg_lineBasisOpen(points) {
        if (points.length < 4) return d3_svg_lineLinear(points);
        var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];
        while (++i < 3) {
          pi = points[i];
          px.push(pi[0]);
          py.push(pi[1]);
        }
        path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
        --i;
        while (++i < n) {
          pi = points[i];
          px.shift();
          px.push(pi[0]);
          py.shift();
          py.push(pi[1]);
          d3_svg_lineBasisBezier(path, px, py);
        }
        return path.join("");
      }
      function d3_svg_lineBasisClosed(points) {
        var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];
        while (++i < 4) {
          pi = points[i % n];
          px.push(pi[0]);
          py.push(pi[1]);
        }
        path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
        --i;
        while (++i < m) {
          pi = points[i % n];
          px.shift();
          px.push(pi[0]);
          py.shift();
          py.push(pi[1]);
          d3_svg_lineBasisBezier(path, px, py);
        }
        return path.join("");
      }
      function d3_svg_lineBundle(points, tension) {
        var n = points.length - 1;
        if (n) {
          var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;
          while (++i <= n) {
            p = points[i];
            t = i / n;
            p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
            p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
          }
        }
        return d3_svg_lineBasis(points);
      }
      function d3_svg_lineDot4(a, b) {
        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
      }
      var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];
      function d3_svg_lineBasisBezier(path, x, y) {
        path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
      }
      function d3_svg_lineSlope(p0, p1) {
        return (p1[1] - p0[1]) / (p1[0] - p0[0]);
      }
      function d3_svg_lineFiniteDifferences(points) {
        var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);
        while (++i < j) {
          m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;
        }
        m[i] = d;
        return m;
      }
      function d3_svg_lineMonotoneTangents(points) {
        var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;
        while (++i < j) {
          d = d3_svg_lineSlope(points[i], points[i + 1]);
          if (abs(d) < ε) {
            m[i] = m[i + 1] = 0;
          } else {
            a = m[i] / d;
            b = m[i + 1] / d;
            s = a * a + b * b;
            if (s > 9) {
              s = d * 3 / Math.sqrt(s);
              m[i] = s * a;
              m[i + 1] = s * b;
            }
          }
        }
        i = -1;
        while (++i <= j) {
          s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));
          tangents.push([ s || 0, m[i] * s || 0 ]);
        }
        return tangents;
      }
      function d3_svg_lineMonotone(points) {
        return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
      }
      d3.svg.line.radial = function() {
        var line = d3_svg_line(d3_svg_lineRadial);
        line.radius = line.x, delete line.x;
        line.angle = line.y, delete line.y;
        return line;
      };
      function d3_svg_lineRadial(points) {
        var point, i = -1, n = points.length, r, a;
        while (++i < n) {
          point = points[i];
          r = point[0];
          a = point[1] - halfπ;
          point[0] = r * Math.cos(a);
          point[1] = r * Math.sin(a);
        }
        return points;
      }
      function d3_svg_area(projection) {
        var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7;
        function area(data) {
          var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {
            return x;
          } : d3_functor(x1), fy1 = y0 === y1 ? function() {
            return y;
          } : d3_functor(y1), x, y;
          function segment() {
            segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z");
          }
          while (++i < n) {
            if (defined.call(this, d = data[i], i)) {
              points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);
              points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);
            } else if (points0.length) {
              segment();
              points0 = [];
              points1 = [];
            }
          }
          if (points0.length) segment();
          return segments.length ? segments.join("") : null;
        }
        area.x = function(_) {
          if (!arguments.length) return x1;
          x0 = x1 = _;
          return area;
        };
        area.x0 = function(_) {
          if (!arguments.length) return x0;
          x0 = _;
          return area;
        };
        area.x1 = function(_) {
          if (!arguments.length) return x1;
          x1 = _;
          return area;
        };
        area.y = function(_) {
          if (!arguments.length) return y1;
          y0 = y1 = _;
          return area;
        };
        area.y0 = function(_) {
          if (!arguments.length) return y0;
          y0 = _;
          return area;
        };
        area.y1 = function(_) {
          if (!arguments.length) return y1;
          y1 = _;
          return area;
        };
        area.defined = function(_) {
          if (!arguments.length) return defined;
          defined = _;
          return area;
        };
        area.interpolate = function(_) {
          if (!arguments.length) return interpolateKey;
          if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
          interpolateReverse = interpolate.reverse || interpolate;
          L = interpolate.closed ? "M" : "L";
          return area;
        };
        area.tension = function(_) {
          if (!arguments.length) return tension;
          tension = _;
          return area;
        };
        return area;
      }
      d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;
      d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;
      d3.svg.area = function() {
        return d3_svg_area(d3_identity);
      };
      d3.svg.area.radial = function() {
        var area = d3_svg_area(d3_svg_lineRadial);
        area.radius = area.x, delete area.x;
        area.innerRadius = area.x0, delete area.x0;
        area.outerRadius = area.x1, delete area.x1;
        area.angle = area.y, delete area.y;
        area.startAngle = area.y0, delete area.y0;
        area.endAngle = area.y1, delete area.y1;
        return area;
      };
      d3.svg.chord = function() {
        var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
        function chord(d, i) {
          var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);
          return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z";
        }
        function subgroup(self, f, d, i) {
          var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;
          return {
            r: r,
            a0: a0,
            a1: a1,
            p0: [ r * Math.cos(a0), r * Math.sin(a0) ],
            p1: [ r * Math.cos(a1), r * Math.sin(a1) ]
          };
        }
        function equals(a, b) {
          return a.a0 == b.a0 && a.a1 == b.a1;
        }
        function arc(r, p, a) {
          return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p;
        }
        function curve(r0, p0, r1, p1) {
          return "Q 0,0 " + p1;
        }
        chord.radius = function(v) {
          if (!arguments.length) return radius;
          radius = d3_functor(v);
          return chord;
        };
        chord.source = function(v) {
          if (!arguments.length) return source;
          source = d3_functor(v);
          return chord;
        };
        chord.target = function(v) {
          if (!arguments.length) return target;
          target = d3_functor(v);
          return chord;
        };
        chord.startAngle = function(v) {
          if (!arguments.length) return startAngle;
          startAngle = d3_functor(v);
          return chord;
        };
        chord.endAngle = function(v) {
          if (!arguments.length) return endAngle;
          endAngle = d3_functor(v);
          return chord;
        };
        return chord;
      };
      function d3_svg_chordRadius(d) {
        return d.radius;
      }
      d3.svg.diagonal = function() {
        var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;
        function diagonal(d, i) {
          var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {
            x: p0.x,
            y: m
          }, {
            x: p3.x,
            y: m
          }, p3 ];
          p = p.map(projection);
          return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
        }
        diagonal.source = function(x) {
          if (!arguments.length) return source;
          source = d3_functor(x);
          return diagonal;
        };
        diagonal.target = function(x) {
          if (!arguments.length) return target;
          target = d3_functor(x);
          return diagonal;
        };
        diagonal.projection = function(x) {
          if (!arguments.length) return projection;
          projection = x;
          return diagonal;
        };
        return diagonal;
      };
      function d3_svg_diagonalProjection(d) {
        return [ d.x, d.y ];
      }
      d3.svg.diagonal.radial = function() {
        var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;
        diagonal.projection = function(x) {
          return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;
        };
        return diagonal;
      };
      function d3_svg_diagonalRadialProjection(projection) {
        return function() {
          var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;
          return [ r * Math.cos(a), r * Math.sin(a) ];
        };
      }
      d3.svg.symbol = function() {
        var type = d3_svg_symbolType, size = d3_svg_symbolSize;
        function symbol(d, i) {
          return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));
        }
        symbol.type = function(x) {
          if (!arguments.length) return type;
          type = d3_functor(x);
          return symbol;
        };
        symbol.size = function(x) {
          if (!arguments.length) return size;
          size = d3_functor(x);
          return symbol;
        };
        return symbol;
      };
      function d3_svg_symbolSize() {
        return 64;
      }
      function d3_svg_symbolType() {
        return "circle";
      }
      function d3_svg_symbolCircle(size) {
        var r = Math.sqrt(size / π);
        return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z";
      }
      var d3_svg_symbols = d3.map({
        circle: d3_svg_symbolCircle,
        cross: function(size) {
          var r = Math.sqrt(size / 5) / 2;
          return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z";
        },
        diamond: function(size) {
          var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;
          return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z";
        },
        square: function(size) {
          var r = Math.sqrt(size) / 2;
          return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z";
        },
        "triangle-down": function(size) {
          var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
          return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z";
        },
        "triangle-up": function(size) {
          var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
          return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z";
        }
      });
      d3.svg.symbolTypes = d3_svg_symbols.keys();
      var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);
      d3_selectionPrototype.transition = function(name) {
        var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {
          time: Date.now(),
          ease: d3_ease_cubicInOut,
          delay: 0,
          duration: 250
        };
        for (var j = -1, m = this.length; ++j < m; ) {
          subgroups.push(subgroup = []);
          for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
            if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);
            subgroup.push(node);
          }
        }
        return d3_transition(subgroups, ns, id);
      };
      d3_selectionPrototype.interrupt = function(name) {
        return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));
      };
      var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());
      function d3_selection_interruptNS(ns) {
        return function() {
          var lock, activeId, active;
          if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {
            active.timer.c = null;
            active.timer.t = NaN;
            if (--lock.count) delete lock[activeId]; else delete this[ns];
            lock.active += .5;
            active.event && active.event.interrupt.call(this, this.__data__, active.index);
          }
        };
      }
      function d3_transition(groups, ns, id) {
        d3_subclass(groups, d3_transitionPrototype);
        groups.namespace = ns;
        groups.id = id;
        return groups;
      }
      var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;
      d3_transitionPrototype.call = d3_selectionPrototype.call;
      d3_transitionPrototype.empty = d3_selectionPrototype.empty;
      d3_transitionPrototype.node = d3_selectionPrototype.node;
      d3_transitionPrototype.size = d3_selectionPrototype.size;
      d3.transition = function(selection, name) {
        return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);
      };
      d3.transition.prototype = d3_transitionPrototype;
      d3_transitionPrototype.select = function(selector) {
        var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;
        selector = d3_selection_selector(selector);
        for (var j = -1, m = this.length; ++j < m; ) {
          subgroups.push(subgroup = []);
          for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
            if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {
              if ("__data__" in node) subnode.__data__ = node.__data__;
              d3_transitionNode(subnode, i, ns, id, node[ns][id]);
              subgroup.push(subnode);
            } else {
              subgroup.push(null);
            }
          }
        }
        return d3_transition(subgroups, ns, id);
      };
      d3_transitionPrototype.selectAll = function(selector) {
        var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;
        selector = d3_selection_selectorAll(selector);
        for (var j = -1, m = this.length; ++j < m; ) {
          for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
            if (node = group[i]) {
              transition = node[ns][id];
              subnodes = selector.call(node, node.__data__, i, j);
              subgroups.push(subgroup = []);
              for (var k = -1, o = subnodes.length; ++k < o; ) {
                if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);
                subgroup.push(subnode);
              }
            }
          }
        }
        return d3_transition(subgroups, ns, id);
      };
      d3_transitionPrototype.filter = function(filter) {
        var subgroups = [], subgroup, group, node;
        if (typeof filter !== "function") filter = d3_selection_filter(filter);
        for (var j = 0, m = this.length; j < m; j++) {
          subgroups.push(subgroup = []);
          for (var group = this[j], i = 0, n = group.length; i < n; i++) {
            if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {
              subgroup.push(node);
            }
          }
        }
        return d3_transition(subgroups, this.namespace, this.id);
      };
      d3_transitionPrototype.tween = function(name, tween) {
        var id = this.id, ns = this.namespace;
        if (arguments.length < 2) return this.node()[ns][id].tween.get(name);
        return d3_selection_each(this, tween == null ? function(node) {
          node[ns][id].tween.remove(name);
        } : function(node) {
          node[ns][id].tween.set(name, tween);
        });
      };
      function d3_transition_tween(groups, name, value, tween) {
        var id = groups.id, ns = groups.namespace;
        return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) {
          node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));
        } : (value = tween(value), function(node) {
          node[ns][id].tween.set(name, value);
        }));
      }
      d3_transitionPrototype.attr = function(nameNS, value) {
        if (arguments.length < 2) {
          for (value in nameNS) this.attr(value, nameNS[value]);
          return this;
        }
        var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);
        function attrNull() {
          this.removeAttribute(name);
        }
        function attrNullNS() {
          this.removeAttributeNS(name.space, name.local);
        }
        function attrTween(b) {
          return b == null ? attrNull : (b += "", function() {
            var a = this.getAttribute(name), i;
            return a !== b && (i = interpolate(a, b), function(t) {
              this.setAttribute(name, i(t));
            });
          });
        }
        function attrTweenNS(b) {
          return b == null ? attrNullNS : (b += "", function() {
            var a = this.getAttributeNS(name.space, name.local), i;
            return a !== b && (i = interpolate(a, b), function(t) {
              this.setAttributeNS(name.space, name.local, i(t));
            });
          });
        }
        return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween);
      };
      d3_transitionPrototype.attrTween = function(nameNS, tween) {
        var name = d3.ns.qualify(nameNS);
        function attrTween(d, i) {
          var f = tween.call(this, d, i, this.getAttribute(name));
          return f && function(t) {
            this.setAttribute(name, f(t));
          };
        }
        function attrTweenNS(d, i) {
          var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
          return f && function(t) {
            this.setAttributeNS(name.space, name.local, f(t));
          };
        }
        return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween);
      };
      d3_transitionPrototype.style = function(name, value, priority) {
        var n = arguments.length;
        if (n < 3) {
          if (typeof name !== "string") {
            if (n < 2) value = "";
            for (priority in name) this.style(priority, name[priority], value);
            return this;
          }
          priority = "";
        }
        function styleNull() {
          this.style.removeProperty(name);
        }
        function styleString(b) {
          return b == null ? styleNull : (b += "", function() {
            var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;
            return a !== b && (i = d3_interpolate(a, b), function(t) {
              this.style.setProperty(name, i(t), priority);
            });
          });
        }
        return d3_transition_tween(this, "style." + name, value, styleString);
      };
      d3_transitionPrototype.styleTween = function(name, tween, priority) {
        if (arguments.length < 3) priority = "";
        function styleTween(d, i) {
          var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));
          return f && function(t) {
            this.style.setProperty(name, f(t), priority);
          };
        }
        return this.tween("style." + name, styleTween);
      };
      d3_transitionPrototype.text = function(value) {
        return d3_transition_tween(this, "text", value, d3_transition_text);
      };
      function d3_transition_text(b) {
        if (b == null) b = "";
        return function() {
          this.textContent = b;
        };
      }
      d3_transitionPrototype.remove = function() {
        var ns = this.namespace;
        return this.each("end.transition", function() {
          var p;
          if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);
        });
      };
      d3_transitionPrototype.ease = function(value) {
        var id = this.id, ns = this.namespace;
        if (arguments.length < 1) return this.node()[ns][id].ease;
        if (typeof value !== "function") value = d3.ease.apply(d3, arguments);
        return d3_selection_each(this, function(node) {
          node[ns][id].ease = value;
        });
      };
      d3_transitionPrototype.delay = function(value) {
        var id = this.id, ns = this.namespace;
        if (arguments.length < 1) return this.node()[ns][id].delay;
        return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
          node[ns][id].delay = +value.call(node, node.__data__, i, j);
        } : (value = +value, function(node) {
          node[ns][id].delay = value;
        }));
      };
      d3_transitionPrototype.duration = function(value) {
        var id = this.id, ns = this.namespace;
        if (arguments.length < 1) return this.node()[ns][id].duration;
        return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
          node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));
        } : (value = Math.max(1, value), function(node) {
          node[ns][id].duration = value;
        }));
      };
      d3_transitionPrototype.each = function(type, listener) {
        var id = this.id, ns = this.namespace;
        if (arguments.length < 2) {
          var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;
          try {
            d3_transitionInheritId = id;
            d3_selection_each(this, function(node, i, j) {
              d3_transitionInherit = node[ns][id];
              type.call(node, node.__data__, i, j);
            });
          } finally {
            d3_transitionInherit = inherit;
            d3_transitionInheritId = inheritId;
          }
        } else {
          d3_selection_each(this, function(node) {
            var transition = node[ns][id];
            (transition.event || (transition.event = d3.dispatch("start", "end", "interrupt"))).on(type, listener);
          });
        }
        return this;
      };
      d3_transitionPrototype.transition = function() {
        var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;
        for (var j = 0, m = this.length; j < m; j++) {
          subgroups.push(subgroup = []);
          for (var group = this[j], i = 0, n = group.length; i < n; i++) {
            if (node = group[i]) {
              transition = node[ns][id0];
              d3_transitionNode(node, i, ns, id1, {
                time: transition.time,
                ease: transition.ease,
                delay: transition.delay + transition.duration,
                duration: transition.duration
              });
            }
            subgroup.push(node);
          }
        }
        return d3_transition(subgroups, ns, id1);
      };
      function d3_transitionNamespace(name) {
        return name == null ? "__transition__" : "__transition_" + name + "__";
      }
      function d3_transitionNode(node, i, ns, id, inherit) {
        var lock = node[ns] || (node[ns] = {
          active: 0,
          count: 0
        }), transition = lock[id], time, timer, duration, ease, tweens;
        function schedule(elapsed) {
          var delay = transition.delay;
          timer.t = delay + time;
          if (delay <= elapsed) return start(elapsed - delay);
          timer.c = start;
        }
        function start(elapsed) {
          var activeId = lock.active, active = lock[activeId];
          if (active) {
            active.timer.c = null;
            active.timer.t = NaN;
            --lock.count;
            delete lock[activeId];
            active.event && active.event.interrupt.call(node, node.__data__, active.index);
          }
          for (var cancelId in lock) {
            if (+cancelId < id) {
              var cancel = lock[cancelId];
              cancel.timer.c = null;
              cancel.timer.t = NaN;
              --lock.count;
              delete lock[cancelId];
            }
          }
          timer.c = tick;
          d3_timer(function() {
            if (timer.c && tick(elapsed || 1)) {
              timer.c = null;
              timer.t = NaN;
            }
            return 1;
          }, 0, time);
          lock.active = id;
          transition.event && transition.event.start.call(node, node.__data__, i);
          tweens = [];
          transition.tween.forEach(function(key, value) {
            if (value = value.call(node, node.__data__, i)) {
              tweens.push(value);
            }
          });
          ease = transition.ease;
          duration = transition.duration;
        }
        function tick(elapsed) {
          var t = elapsed / duration, e = ease(t), n = tweens.length;
          while (n > 0) {
            tweens[--n].call(node, e);
          }
          if (t >= 1) {
            transition.event && transition.event.end.call(node, node.__data__, i);
            if (--lock.count) delete lock[id]; else delete node[ns];
            return 1;
          }
        }
        if (!transition) {
          time = inherit.time;
          timer = d3_timer(schedule, 0, time);
          transition = lock[id] = {
            tween: new d3_Map(),
            time: time,
            timer: timer,
            delay: inherit.delay,
            duration: inherit.duration,
            ease: inherit.ease,
            index: i
          };
          inherit = null;
          ++lock.count;
        }
      }
      d3.svg.axis = function() {
        var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;
        function axis(g) {
          g.each(function() {
            var g = d3.select(this);
            var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();
            var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;
            var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), 
            d3.transition(path));
            tickEnter.append("line");
            tickEnter.append("text");
            var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"), sign = orient === "top" || orient === "left" ? -1 : 1, x1, x2, y1, y2;
            if (orient === "bottom" || orient === "top") {
              tickTransform = d3_svg_axisX, x1 = "x", y1 = "y", x2 = "x2", y2 = "y2";
              text.attr("dy", sign < 0 ? "0em" : ".71em").style("text-anchor", "middle");
              pathUpdate.attr("d", "M" + range[0] + "," + sign * outerTickSize + "V0H" + range[1] + "V" + sign * outerTickSize);
            } else {
              tickTransform = d3_svg_axisY, x1 = "y", y1 = "x", x2 = "y2", y2 = "x2";
              text.attr("dy", ".32em").style("text-anchor", sign < 0 ? "end" : "start");
              pathUpdate.attr("d", "M" + sign * outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + sign * outerTickSize);
            }
            lineEnter.attr(y2, sign * innerTickSize);
            textEnter.attr(y1, sign * tickSpacing);
            lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);
            textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);
            if (scale1.rangeBand) {
              var x = scale1, dx = x.rangeBand() / 2;
              scale0 = scale1 = function(d) {
                return x(d) + dx;
              };
            } else if (scale0.rangeBand) {
              scale0 = scale1;
            } else {
              tickExit.call(tickTransform, scale1, scale0);
            }
            tickEnter.call(tickTransform, scale0, scale1);
            tickUpdate.call(tickTransform, scale1, scale1);
          });
        }
        axis.scale = function(x) {
          if (!arguments.length) return scale;
          scale = x;
          return axis;
        };
        axis.orient = function(x) {
          if (!arguments.length) return orient;
          orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient;
          return axis;
        };
        axis.ticks = function() {
          if (!arguments.length) return tickArguments_;
          tickArguments_ = d3_array(arguments);
          return axis;
        };
        axis.tickValues = function(x) {
          if (!arguments.length) return tickValues;
          tickValues = x;
          return axis;
        };
        axis.tickFormat = function(x) {
          if (!arguments.length) return tickFormat_;
          tickFormat_ = x;
          return axis;
        };
        axis.tickSize = function(x) {
          var n = arguments.length;
          if (!n) return innerTickSize;
          innerTickSize = +x;
          outerTickSize = +arguments[n - 1];
          return axis;
        };
        axis.innerTickSize = function(x) {
          if (!arguments.length) return innerTickSize;
          innerTickSize = +x;
          return axis;
        };
        axis.outerTickSize = function(x) {
          if (!arguments.length) return outerTickSize;
          outerTickSize = +x;
          return axis;
        };
        axis.tickPadding = function(x) {
          if (!arguments.length) return tickPadding;
          tickPadding = +x;
          return axis;
        };
        axis.tickSubdivide = function() {
          return arguments.length && axis;
        };
        return axis;
      };
      var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = {
        top: 1,
        right: 1,
        bottom: 1,
        left: 1
      };
      function d3_svg_axisX(selection, x0, x1) {
        selection.attr("transform", function(d) {
          var v0 = x0(d);
          return "translate(" + (isFinite(v0) ? v0 : x1(d)) + ",0)";
        });
      }
      function d3_svg_axisY(selection, y0, y1) {
        selection.attr("transform", function(d) {
          var v0 = y0(d);
          return "translate(0," + (isFinite(v0) ? v0 : y1(d)) + ")";
        });
      }
      d3.svg.brush = function() {
        var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];
        function brush(g) {
          g.each(function() {
            var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart);
            var background = g.selectAll(".background").data([ 0 ]);
            background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair");
            g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move");
            var resize = g.selectAll(".resize").data(resizes, d3_identity);
            resize.exit().remove();
            resize.enter().append("g").attr("class", function(d) {
              return "resize " + d;
            }).style("cursor", function(d) {
              return d3_svg_brushCursor[d];
            }).append("rect").attr("x", function(d) {
              return /[ew]$/.test(d) ? -3 : null;
            }).attr("y", function(d) {
              return /^[ns]/.test(d) ? -3 : null;
            }).attr("width", 6).attr("height", 6).style("visibility", "hidden");
            resize.style("display", brush.empty() ? "none" : null);
            var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;
            if (x) {
              range = d3_scaleRange(x);
              backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]);
              redrawX(gUpdate);
            }
            if (y) {
              range = d3_scaleRange(y);
              backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]);
              redrawY(gUpdate);
            }
            redraw(gUpdate);
          });
        }
        brush.event = function(g) {
          g.each(function() {
            var event_ = event.of(this, arguments), extent1 = {
              x: xExtent,
              y: yExtent,
              i: xExtentDomain,
              j: yExtentDomain
            }, extent0 = this.__chart__ || extent1;
            this.__chart__ = extent1;
            if (d3_transitionInheritId) {
              d3.select(this).transition().each("start.brush", function() {
                xExtentDomain = extent0.i;
                yExtentDomain = extent0.j;
                xExtent = extent0.x;
                yExtent = extent0.y;
                event_({
                  type: "brushstart"
                });
              }).tween("brush:brush", function() {
                var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);
                xExtentDomain = yExtentDomain = null;
                return function(t) {
                  xExtent = extent1.x = xi(t);
                  yExtent = extent1.y = yi(t);
                  event_({
                    type: "brush",
                    mode: "resize"
                  });
                };
              }).each("end.brush", function() {
                xExtentDomain = extent1.i;
                yExtentDomain = extent1.j;
                event_({
                  type: "brush",
                  mode: "resize"
                });
                event_({
                  type: "brushend"
                });
              });
            } else {
              event_({
                type: "brushstart"
              });
              event_({
                type: "brush",
                mode: "resize"
              });
              event_({
                type: "brushend"
              });
            }
          });
        };
        function redraw(g) {
          g.selectAll(".resize").attr("transform", function(d) {
            return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")";
          });
        }
        function redrawX(g) {
          g.select(".extent").attr("x", xExtent[0]);
          g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]);
        }
        function redrawY(g) {
          g.select(".extent").attr("y", yExtent[0]);
          g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]);
        }
        function brushstart() {
          var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;
          var w = d3.select(d3_window(target)).on("keydown.brush", keydown).on("keyup.brush", keyup);
          if (d3.event.changedTouches) {
            w.on("touchmove.brush", brushmove).on("touchend.brush", brushend);
          } else {
            w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend);
          }
          g.interrupt().selectAll("*").interrupt();
          if (dragging) {
            origin[0] = xExtent[0] - origin[0];
            origin[1] = yExtent[0] - origin[1];
          } else if (resizing) {
            var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);
            offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];
            origin[0] = xExtent[ex];
            origin[1] = yExtent[ey];
          } else if (d3.event.altKey) center = origin.slice();
          g.style("pointer-events", "none").selectAll(".resize").style("display", null);
          d3.select("body").style("cursor", eventTarget.style("cursor"));
          event_({
            type: "brushstart"
          });
          brushmove();
          function keydown() {
            if (d3.event.keyCode == 32) {
              if (!dragging) {
                center = null;
                origin[0] -= xExtent[1];
                origin[1] -= yExtent[1];
                dragging = 2;
              }
              d3_eventPreventDefault();
            }
          }
          function keyup() {
            if (d3.event.keyCode == 32 && dragging == 2) {
              origin[0] += xExtent[1];
              origin[1] += yExtent[1];
              dragging = 0;
              d3_eventPreventDefault();
            }
          }
          function brushmove() {
            var point = d3.mouse(target), moved = false;
            if (offset) {
              point[0] += offset[0];
              point[1] += offset[1];
            }
            if (!dragging) {
              if (d3.event.altKey) {
                if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];
                origin[0] = xExtent[+(point[0] < center[0])];
                origin[1] = yExtent[+(point[1] < center[1])];
              } else center = null;
            }
            if (resizingX && move1(point, x, 0)) {
              redrawX(g);
              moved = true;
            }
            if (resizingY && move1(point, y, 1)) {
              redrawY(g);
              moved = true;
            }
            if (moved) {
              redraw(g);
              event_({
                type: "brush",
                mode: dragging ? "move" : "resize"
              });
            }
          }
          function move1(point, scale, i) {
            var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;
            if (dragging) {
              r0 -= position;
              r1 -= size + position;
            }
            min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];
            if (dragging) {
              max = (min += position) + size;
            } else {
              if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));
              if (position < min) {
                max = min;
                min = position;
              } else {
                max = position;
              }
            }
            if (extent[0] != min || extent[1] != max) {
              if (i) yExtentDomain = null; else xExtentDomain = null;
              extent[0] = min;
              extent[1] = max;
              return true;
            }
          }
          function brushend() {
            brushmove();
            g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null);
            d3.select("body").style("cursor", null);
            w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null);
            dragRestore();
            event_({
              type: "brushend"
            });
          }
        }
        brush.x = function(z) {
          if (!arguments.length) return x;
          x = z;
          resizes = d3_svg_brushResizes[!x << 1 | !y];
          return brush;
        };
        brush.y = function(z) {
          if (!arguments.length) return y;
          y = z;
          resizes = d3_svg_brushResizes[!x << 1 | !y];
          return brush;
        };
        brush.clamp = function(z) {
          if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;
          if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;
          return brush;
        };
        brush.extent = function(z) {
          var x0, x1, y0, y1, t;
          if (!arguments.length) {
            if (x) {
              if (xExtentDomain) {
                x0 = xExtentDomain[0], x1 = xExtentDomain[1];
              } else {
                x0 = xExtent[0], x1 = xExtent[1];
                if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);
                if (x1 < x0) t = x0, x0 = x1, x1 = t;
              }
            }
            if (y) {
              if (yExtentDomain) {
                y0 = yExtentDomain[0], y1 = yExtentDomain[1];
              } else {
                y0 = yExtent[0], y1 = yExtent[1];
                if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);
                if (y1 < y0) t = y0, y0 = y1, y1 = t;
              }
            }
            return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];
          }
          if (x) {
            x0 = z[0], x1 = z[1];
            if (y) x0 = x0[0], x1 = x1[0];
            xExtentDomain = [ x0, x1 ];
            if (x.invert) x0 = x(x0), x1 = x(x1);
            if (x1 < x0) t = x0, x0 = x1, x1 = t;
            if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];
          }
          if (y) {
            y0 = z[0], y1 = z[1];
            if (x) y0 = y0[1], y1 = y1[1];
            yExtentDomain = [ y0, y1 ];
            if (y.invert) y0 = y(y0), y1 = y(y1);
            if (y1 < y0) t = y0, y0 = y1, y1 = t;
            if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];
          }
          return brush;
        };
        brush.clear = function() {
          if (!brush.empty()) {
            xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];
            xExtentDomain = yExtentDomain = null;
          }
          return brush;
        };
        brush.empty = function() {
          return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];
        };
        return d3.rebind(brush, event, "on");
      };
      var d3_svg_brushCursor = {
        n: "ns-resize",
        e: "ew-resize",
        s: "ns-resize",
        w: "ew-resize",
        nw: "nwse-resize",
        ne: "nesw-resize",
        se: "nwse-resize",
        sw: "nesw-resize"
      };
      var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ];
      var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;
      var d3_time_formatUtc = d3_time_format.utc;
      var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ");
      d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso;
      function d3_time_formatIsoNative(date) {
        return date.toISOString();
      }
      d3_time_formatIsoNative.parse = function(string) {
        var date = new Date(string);
        return isNaN(date) ? null : date;
      };
      d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
      d3_time.second = d3_time_interval(function(date) {
        return new d3_date(Math.floor(date / 1e3) * 1e3);
      }, function(date, offset) {
        date.setTime(date.getTime() + Math.floor(offset) * 1e3);
      }, function(date) {
        return date.getSeconds();
      });
      d3_time.seconds = d3_time.second.range;
      d3_time.seconds.utc = d3_time.second.utc.range;
      d3_time.minute = d3_time_interval(function(date) {
        return new d3_date(Math.floor(date / 6e4) * 6e4);
      }, function(date, offset) {
        date.setTime(date.getTime() + Math.floor(offset) * 6e4);
      }, function(date) {
        return date.getMinutes();
      });
      d3_time.minutes = d3_time.minute.range;
      d3_time.minutes.utc = d3_time.minute.utc.range;
      d3_time.hour = d3_time_interval(function(date) {
        var timezone = date.getTimezoneOffset() / 60;
        return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);
      }, function(date, offset) {
        date.setTime(date.getTime() + Math.floor(offset) * 36e5);
      }, function(date) {
        return date.getHours();
      });
      d3_time.hours = d3_time.hour.range;
      d3_time.hours.utc = d3_time.hour.utc.range;
      d3_time.month = d3_time_interval(function(date) {
        date = d3_time.day(date);
        date.setDate(1);
        return date;
      }, function(date, offset) {
        date.setMonth(date.getMonth() + offset);
      }, function(date) {
        return date.getMonth();
      });
      d3_time.months = d3_time.month.range;
      d3_time.months.utc = d3_time.month.utc.range;
      function d3_time_scale(linear, methods, format) {
        function scale(x) {
          return linear(x);
        }
        scale.invert = function(x) {
          return d3_time_scaleDate(linear.invert(x));
        };
        scale.domain = function(x) {
          if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
          linear.domain(x);
          return scale;
        };
        function tickMethod(extent, count) {
          var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);
          return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {
            return d / 31536e6;
          }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];
        }
        scale.nice = function(interval, skip) {
          var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval);
          if (method) interval = method[0], skip = method[1];
          function skipped(date) {
            return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;
          }
          return scale.domain(d3_scale_nice(domain, skip > 1 ? {
            floor: function(date) {
              while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);
              return date;
            },
            ceil: function(date) {
              while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);
              return date;
            }
          } : interval));
        };
        scale.ticks = function(interval, skip) {
          var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ {
            range: interval
          }, skip ];
          if (method) interval = method[0], skip = method[1];
          return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);
        };
        scale.tickFormat = function() {
          return format;
        };
        scale.copy = function() {
          return d3_time_scale(linear.copy(), methods, format);
        };
        return d3_scale_linearRebind(scale, linear);
      }
      function d3_time_scaleDate(t) {
        return new Date(t);
      }
      var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];
      var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];
      var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) {
        return d.getMilliseconds();
      } ], [ ":%S", function(d) {
        return d.getSeconds();
      } ], [ "%I:%M", function(d) {
        return d.getMinutes();
      } ], [ "%I %p", function(d) {
        return d.getHours();
      } ], [ "%a %d", function(d) {
        return d.getDay() && d.getDate() != 1;
      } ], [ "%b %d", function(d) {
        return d.getDate() != 1;
      } ], [ "%B", function(d) {
        return d.getMonth();
      } ], [ "%Y", d3_true ] ]);
      var d3_time_scaleMilliseconds = {
        range: function(start, stop, step) {
          return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);
        },
        floor: d3_identity,
        ceil: d3_identity
      };
      d3_time_scaleLocalMethods.year = d3_time.year;
      d3_time.scale = function() {
        return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
      };
      var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {
        return [ m[0].utc, m[1] ];
      });
      var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) {
        return d.getUTCMilliseconds();
      } ], [ ":%S", function(d) {
        return d.getUTCSeconds();
      } ], [ "%I:%M", function(d) {
        return d.getUTCMinutes();
      } ], [ "%I %p", function(d) {
        return d.getUTCHours();
      } ], [ "%a %d", function(d) {
        return d.getUTCDay() && d.getUTCDate() != 1;
      } ], [ "%b %d", function(d) {
        return d.getUTCDate() != 1;
      } ], [ "%B", function(d) {
        return d.getUTCMonth();
      } ], [ "%Y", d3_true ] ]);
      d3_time_scaleUtcMethods.year = d3_time.year.utc;
      d3_time.scale.utc = function() {
        return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);
      };
      d3.text = d3_xhrType(function(request) {
        return request.responseText;
      });
      d3.json = function(url, callback) {
        return d3_xhr(url, "application/json", d3_json, callback);
      };
      function d3_json(request) {
        return JSON.parse(request.responseText);
      }
      d3.html = function(url, callback) {
        return d3_xhr(url, "text/html", d3_html, callback);
      };
      function d3_html(request) {
        var range = d3_document.createRange();
        range.selectNode(d3_document.body);
        return range.createContextualFragment(request.responseText);
      }
      d3.xml = d3_xhrType(function(request) {
        return request.responseXML;
      });
      if (true) this.d3 = d3, !(__WEBPACK_AMD_DEFINE_FACTORY__ = (d3), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); else if (typeof module === "object" && module.exports) module.exports = d3; else this.d3 = d3;
    }();

/***/ },
/* 486 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _commonProps = __webpack_require__(487);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var ChartSvg = function (_Component) {
      _inherits(ChartSvg, _Component);
    
      function ChartSvg(props) {
        _classCallCheck(this, ChartSvg);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(ChartSvg).call(this, props));
      }
    
      _createClass(ChartSvg, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var horizontal = _props.horizontal;
          var height = _props.height;
          var width = _props.width;
          var margins = _props.margins;
          var xScale = _props.xScale;
          var yScale = _props.yScale;
          var xRange = _props.xRange;
          var yRange = _props.yRange;
          var xDomain = _props.xDomain;
          var yDomain = _props.yDomain;
          var xTicks = _props.xTicks;
          var yTicks = _props.yTicks;
          var xTickFormat = _props.xTickFormat;
          var yTickFormat = _props.yTickFormat;
          var xBandPaddingInner = _props.xBandPaddingInner;
          var xBandPaddingOuter = _props.xBandPaddingOuter;
          var yBandPaddingInner = _props.yBandPaddingInner;
          var yBandPaddingOuter = _props.yBandPaddingOuter;
          var xLabel = _props.xLabel;
          var yLabel = _props.yLabel;
          var stack = _props.stack;
          var data = _props.data;
          var svgClassName = _props.svgClassName;
          var id = _props.id;
          var x = _props.x;
          var y = _props.y;
    
    
          var xRange = xRange || [0, width - margins.left - margins.right];
          var yRange = yRange || [height - margins.top - margins.bottom, 0];
          var xDomain = xDomain || (0, _reactD3Core.xDomainCount)(this.props, stack, horizontal);
          var yDomain = yDomain || (0, _reactD3Core.yDomainCount)(this.props, stack, horizontal);
    
          if (xScale === 'ordinal') xScale = 'band';
    
          if (yScale === 'ordinal') yScale = 'band';
    
          var newXScale = {
            scale: xScale,
            range: xRange,
            domain: xDomain,
            bandPaddingInner: xBandPaddingInner,
            bandPaddingOuter: xBandPaddingOuter
          };
    
          var xScaleSet = (0, _reactD3Core.scale)(newXScale);
    
          var newYScale = {
            scale: yScale,
            range: yRange,
            domain: yDomain,
            bandPaddingInner: yBandPaddingInner,
            bandPaddingOuter: yBandPaddingOuter
          };
    
          var yScaleSet = (0, _reactD3Core.scale)(newYScale);
    
          var children = _react2.default.Children.map(this.props.children, function (el) {
            if (el) {
              return _react2.default.cloneElement(el, {
                height: height,
                width: width,
                margins: margins,
                xScaleSet: xScaleSet,
                yScaleSet: yScaleSet,
                xDomain: xDomain,
                yDomain: yDomain,
                xRange: xRange,
                yRange: yRange,
                xBandPaddingInner: xBandPaddingInner,
                xBandPaddingOuter: xBandPaddingOuter,
                yBandPaddingInner: yBandPaddingInner,
                yBandPaddingOuter: yBandPaddingOuter,
                xScale: xScale,
                yScale: yScale,
                xTickFormat: xTickFormat,
                yTickFormat: yTickFormat,
                xTicks: xTicks,
                yTicks: yTicks,
                xLabel: xLabel,
                yLabel: yLabel,
                data: data,
                x: x,
                y: y
              });
            } else {
              return null;
            }
          });
    
          var t = 'translate(' + margins.left + ', ' + margins.top + ')';
    
          return _react2.default.createElement(
            'svg',
            {
              height: height,
              width: width,
              className: svgClassName,
              id: id,
              ref: 'svgContainer'
            },
            _react2.default.createElement(
              'g',
              {
                transform: t
              },
              children
            )
          );
        }
      }]);
    
      return ChartSvg;
    }(_react.Component);
    
    ChartSvg.defaultProps = _extends({
      svgClassName: 'react-d3-core__container_svg'
    }, _commonProps2.default);
    ChartSvg.propTypes = {
      id: _react.PropTypes.string,
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      svgClassName: _react.PropTypes.string.isRequired
    };
    exports.default = ChartSvg;

/***/ },
/* 487 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.pieProps = undefined;
    
    var _d3Scale = __webpack_require__(445);
    
    var _d3Scale2 = _interopRequireDefault(_d3Scale);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var width = 960;
    var height = 500;
    var margins = { top: 80, right: 100, bottom: 80, left: 100 };
    
    exports.default = {
      width: width,
      height: height,
      margins: margins,
      y: function y(d) {
        return +d;
      },
      xScale: 'linear',
      yScale: 'linear',
      showXGrid: true,
      showYGrid: true
    };
    var pieProps = exports.pieProps = {
      width: width,
      height: height,
      margins: margins,
      innerRadius: 0,
      categoricalColors: _d3Scale2.default.scaleCategory10(),
      pieSort: function pieSort() {},
      pieTextShow: true
    };

/***/ },
/* 488 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _commonProps = __webpack_require__(487);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var ChartSvg = function (_Component) {
      _inherits(ChartSvg, _Component);
    
      function ChartSvg(props) {
        _classCallCheck(this, ChartSvg);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(ChartSvg).call(this, props));
      }
    
      _createClass(ChartSvg, [{
        key: 'render',
        value: function render() {
          var _this2 = this;
    
          var _props = this.props;
          var height = _props.height;
          var width = _props.width;
          var margins = _props.margins;
          var data = _props.data;
          var svgClassName = _props.svgClassName;
          var id = _props.id;
          var name = _props.name;
          var value = _props.value;
    
    
          var children = _react2.default.Children.map(this.props.children, function (el) {
            if (el) return _react2.default.cloneElement(el, _this2.props);else return null;
          });
    
          var t = 'translate(' + margins.left + ', ' + margins.top + ')';
    
          return _react2.default.createElement(
            'svg',
            {
              height: height,
              width: width,
              className: svgClassName,
              id: id,
              ref: 'svgContainer'
            },
            _react2.default.createElement(
              'g',
              {
                transform: t
              },
              children
            )
          );
        }
      }]);
    
      return ChartSvg;
    }(_react.Component);
    
    ChartSvg.defaultProps = _extends({
      svgClassName: 'react-d3-core__container_svg'
    }, _commonProps2.default);
    ChartSvg.propTypes = {
      id: _react.PropTypes.string,
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      svgClassName: _react.PropTypes.string.isRequired
    };
    exports.default = ChartSvg;

/***/ },
/* 489 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Shape = __webpack_require__(490);
    
    var _d3Shape2 = _interopRequireDefault(_d3Shape);
    
    var _commonProps = __webpack_require__(487);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Line = function (_Component) {
      _inherits(Line, _Component);
    
      function Line(props) {
        _classCallCheck(this, Line);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Line).call(this, props));
      }
    
      _createClass(Line, [{
        key: '_mkLine',
        value: function _mkLine(dom) {
          var lineClassName = this.props.lineClassName;
    
    
          var dataset = (0, _series.series)(this.props);
          var that = this;
    
          return _react2.default.createElement(
            'g',
            null,
            dataset.map(function (line, i) {
              return _react2.default.createElement('path', {
                stroke: line.color,
                fill: 'none',
                className: lineClassName + ' line',
                d: that._setAxes(line.data),
                style: line.style,
                key: i });
            })
          );
        }
      }, {
        key: '_setAxes',
        value: function _setAxes(data) {
          var _props = this.props;
          var xScaleSet = _props.xScaleSet;
          var yScaleSet = _props.yScaleSet;
    
    
          var line = _d3Shape2.default.line().x(function (d) {
            return xScaleSet(d.x);
          }).y(function (d) {
            return yScaleSet(d.y);
          });
    
          return line.call(this, data);
        }
      }, {
        key: 'render',
        value: function render() {
          var line = this._mkLine();
    
          return _react2.default.createElement(
            'g',
            null,
            line
          );
        }
      }]);
    
      return Line;
    }(_react.Component);
    
    Line.defaultProps = _extends({
      interpolate: null,
      lineClassName: 'react-d3-basic__line'
    }, _commonProps2.default);
    exports.default = Line;

/***/ },
/* 490 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports, __webpack_require__(491)) :
      typeof define === 'function' && define.amd ? define(['exports', 'd3-path'], factory) :
      (factory((global.d3_shape = {}),global.d3_path));
    }(this, function (exports,d3Path) { 'use strict';
    
      function constant(x) {
        return function constant() {
          return x;
        };
      }
    
      var epsilon = 1e-12;
      var pi = Math.PI;
      var halfPi = pi / 2;
      var tau = 2 * pi;
    
      function arcInnerRadius(d) {
        return d.innerRadius;
      }
    
      function arcOuterRadius(d) {
        return d.outerRadius;
      }
    
      function arcStartAngle(d) {
        return d.startAngle;
      }
    
      function arcEndAngle(d) {
        return d.endAngle;
      }
    
      function arcPadAngle(d) {
        return d && d.padAngle; // Note: optional!
      }
    
      function asin(x) {
        return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);
      }
    
      function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
        var x10 = x1 - x0, y10 = y1 - y0,
            x32 = x3 - x2, y32 = y3 - y2,
            t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);
        return [x0 + t * x10, y0 + t * y10];
      }
    
      // Compute perpendicular offset line of length rc.
      // http://mathworld.wolfram.com/Circle-LineIntersection.html
      function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
        var x01 = x0 - x1,
            y01 = y0 - y1,
            lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),
            ox = lo * y01,
            oy = -lo * x01,
            x11 = x0 + ox,
            y11 = y0 + oy,
            x10 = x1 + ox,
            y10 = y1 + oy,
            x00 = (x11 + x10) / 2,
            y00 = (y11 + y10) / 2,
            dx = x10 - x11,
            dy = y10 - y11,
            d2 = dx * dx + dy * dy,
            r = r1 - rc,
            D = x11 * y10 - x10 * y11,
            d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),
            cx0 = (D * dy - dx * d) / d2,
            cy0 = (-D * dx - dy * d) / d2,
            cx1 = (D * dy + dx * d) / d2,
            cy1 = (-D * dx + dy * d) / d2,
            dx0 = cx0 - x00,
            dy0 = cy0 - y00,
            dx1 = cx1 - x00,
            dy1 = cy1 - y00;
    
        // Pick the closer of the two intersection points.
        // TODO Is there a faster way to determine which intersection to use?
        if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
    
        return {
          cx: cx0,
          cy: cy0,
          x01: -ox,
          y01: -oy,
          x11: cx0 * (r1 / r - 1),
          y11: cy0 * (r1 / r - 1)
        };
      }
    
      function arc() {
        var innerRadius = arcInnerRadius,
            outerRadius = arcOuterRadius,
            cornerRadius = constant(0),
            padRadius = null,
            startAngle = arcStartAngle,
            endAngle = arcEndAngle,
            padAngle = arcPadAngle,
            context = null;
    
        function arc() {
          var buffer,
              r,
              r0 = +innerRadius.apply(this, arguments),
              r1 = +outerRadius.apply(this, arguments),
              a0 = startAngle.apply(this, arguments) - halfPi,
              a1 = endAngle.apply(this, arguments) - halfPi,
              da = Math.abs(a1 - a0),
              cw = a1 > a0;
    
          if (!context) context = buffer = d3Path.path();
    
          // Ensure that the outer radius is always larger than the inner radius.
          if (r1 < r0) r = r1, r1 = r0, r0 = r;
    
          // Is it a point?
          if (!(r1 > epsilon)) context.moveTo(0, 0);
    
          // Or is it a circle or annulus?
          else if (da > tau - epsilon) {
            context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));
            context.arc(0, 0, r1, a0, a1, !cw);
            if (r0 > epsilon) {
              context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));
              context.arc(0, 0, r0, a1, a0, cw);
            }
          }
    
          // Or is it a circular or annular sector?
          else {
            var a01 = a0,
                a11 = a1,
                a00 = a0,
                a10 = a1,
                da0 = da,
                da1 = da,
                ap = padAngle.apply(this, arguments) / 2,
                rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),
                rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
                rc0 = rc,
                rc1 = rc,
                t0,
                t1;
    
            // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
            if (rp > epsilon) {
              var p0 = asin(rp / r0 * Math.sin(ap)),
                  p1 = asin(rp / r1 * Math.sin(ap));
              if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
              else da0 = 0, a00 = a10 = (a0 + a1) / 2;
              if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
              else da1 = 0, a01 = a11 = (a0 + a1) / 2;
            }
    
            var x01 = r1 * Math.cos(a01),
                y01 = r1 * Math.sin(a01),
                x10 = r0 * Math.cos(a10),
                y10 = r0 * Math.sin(a10);
    
            // Apply rounded corners?
            if (rc > epsilon) {
              var x11 = r1 * Math.cos(a11),
                  y11 = r1 * Math.sin(a11),
                  x00 = r0 * Math.cos(a00),
                  y00 = r0 * Math.sin(a00);
    
              // Restrict the corner radius according to the sector angle.
              if (da < pi) {
                var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],
                    ax = x01 - oc[0],
                    ay = y01 - oc[1],
                    bx = x11 - oc[0],
                    by = y11 - oc[1],
                    kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),
                    lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
                rc0 = Math.min(rc, (r0 - lc) / (kc - 1));
                rc1 = Math.min(rc, (r1 - lc) / (kc + 1));
              }
            }
    
            // Is the sector collapsed to a line?
            if (!(da1 > epsilon)) context.moveTo(x01, y01);
    
            // Does the sector’s outer ring have rounded corners?
            else if (rc1 > epsilon) {
              t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
              t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
    
              context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
    
              // Have the corners merged?
              if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
    
              // Otherwise, draw the two corners and the ring.
              else {
                context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
                context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
                context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
              }
            }
    
            // Or is the outer ring just a circular arc?
            else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
    
            // Is there no inner ring, and it’s a circular sector?
            // Or perhaps it’s an annular sector collapsed due to padding?
            if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);
    
            // Does the sector’s inner ring (or point) have rounded corners?
            else if (rc0 > epsilon) {
              t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
              t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
    
              context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
    
              // Have the corners merged?
              if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
    
              // Otherwise, draw the two corners and the ring.
              else {
                context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
                context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);
                context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
              }
            }
    
            // Or is the inner ring just a circular arc?
            else context.arc(0, 0, r0, a10, a00, cw);
          }
    
          context.closePath();
    
          if (buffer) return context = null, buffer + "" || null;
        }
    
        arc.centroid = function() {
          var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
              a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;
          return [Math.cos(a) * r, Math.sin(a) * r];
        };
    
        arc.innerRadius = function(_) {
          return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant(+_), arc) : innerRadius;
        };
    
        arc.outerRadius = function(_) {
          return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant(+_), arc) : outerRadius;
        };
    
        arc.cornerRadius = function(_) {
          return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant(+_), arc) : cornerRadius;
        };
    
        arc.padRadius = function(_) {
          return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant(+_), arc) : padRadius;
        };
    
        arc.startAngle = function(_) {
          return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), arc) : startAngle;
        };
    
        arc.endAngle = function(_) {
          return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), arc) : endAngle;
        };
    
        arc.padAngle = function(_) {
          return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), arc) : padAngle;
        };
    
        arc.context = function(_) {
          return arguments.length ? ((context = _ == null ? null : _), arc) : context;
        };
    
        return arc;
      }
    
      var slice = Array.prototype.slice;
    
      function bind(curve, args) {
        if (args.length < 2) return curve;
        args = slice.call(args);
        args[0] = null;
        return function(context) {
          args[0] = context;
          return curve.apply(null, args);
        };
      }
    
      function Linear(context) {
        this._context = context;
      }
    
      Linear.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._point = 0;
        },
        lineEnd: function() {
          if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
          this._line = 1 - this._line;
        },
        point: function(x, y) {
          x = +x, y = +y;
          switch (this._point) {
            case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
            case 1: this._point = 2; // proceed
            default: this._context.lineTo(x, y); break;
          }
        }
      };
    
      function curveLinear(context) {
        return new Linear(context);
      }
    
      function x(p) {
        return p[0];
      }
    
      function y(p) {
        return p[1];
      }
    
      function area() {
        var x0 = x,
            x1 = null,
            y0 = constant(0),
            y1 = y,
            defined = constant(true),
            context = null,
            curve = curveLinear,
            output = null;
    
        function area(data) {
          var i,
              j,
              k,
              n = data.length,
              d,
              defined0 = false,
              buffer,
              x0z = new Array(n),
              y0z = new Array(n);
    
          if (!context) output = curve(buffer = d3Path.path());
    
          for (i = 0; i <= n; ++i) {
            if (!(i < n && defined(d = data[i], i, data)) === defined0) {
              if (defined0 = !defined0) {
                j = i;
                output.areaStart();
                output.lineStart();
              } else {
                output.lineEnd();
                output.lineStart();
                for (k = i - 1; k >= j; --k) {
                  output.point(x0z[k], y0z[k]);
                }
                output.lineEnd();
                output.areaEnd();
              }
            }
            if (defined0) {
              x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
              output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
            }
          }
    
          if (buffer) return output = null, buffer + "" || null;
        }
    
        area.x = function(_) {
          return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), x1 = null, area) : x0;
        };
    
        area.x0 = function(_) {
          return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), area) : x0;
        };
    
        area.x1 = function(_) {
          return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : x1;
        };
    
        area.y = function(_) {
          return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), y1 = null, area) : y0;
        };
    
        area.y0 = function(_) {
          return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), area) : y0;
        };
    
        area.y1 = function(_) {
          return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : y1;
        };
    
        area.defined = function(_) {
          return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), area) : defined;
        };
    
        area.curve = function(_) {
          return arguments.length ? (curve = bind(_, arguments), context != null && (output = curve(context)), area) : curve;
        };
    
        area.context = function(_) {
          return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
        };
    
        return area;
      }
    
      function line() {
        var x$$ = x,
            y$$ = y,
            defined = constant(true),
            context = null,
            curve = curveLinear,
            output = null;
    
        function line(data) {
          var i,
              n = data.length,
              d,
              defined0 = false,
              buffer;
    
          if (!context) output = curve(buffer = d3Path.path());
    
          for (i = 0; i <= n; ++i) {
            if (!(i < n && defined(d = data[i], i, data)) === defined0) {
              if (defined0 = !defined0) output.lineStart();
              else output.lineEnd();
            }
            if (defined0) output.point(+x$$(d, i, data), +y$$(d, i, data));
          }
    
          if (buffer) return output = null, buffer + "" || null;
        }
    
        line.x = function(_) {
          return arguments.length ? (x$$ = typeof _ === "function" ? _ : constant(+_), line) : x$$;
        };
    
        line.y = function(_) {
          return arguments.length ? (y$$ = typeof _ === "function" ? _ : constant(+_), line) : y$$;
        };
    
        line.defined = function(_) {
          return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), line) : defined;
        };
    
        line.curve = function(_) {
          return arguments.length ? (curve = bind(_, arguments), context != null && (output = curve(context)), line) : curve;
        };
    
        line.context = function(_) {
          return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
        };
    
        return line;
      }
    
      function descending$1(a, b) {
        return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
      }
    
      function identity(d) {
        return d;
      }
    
      function pie() {
        var value = identity,
            sortValues = descending$1,
            sort = null,
            startAngle = constant(0),
            endAngle = constant(tau),
            padAngle = constant(0);
    
        function pie(data) {
          var i,
              n = data.length,
              j,
              k,
              sum = 0,
              index = new Array(n),
              arcs = new Array(n),
              a0 = +startAngle.apply(this, arguments),
              da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),
              a1,
              p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
              pa = p * (da < 0 ? -1 : 1),
              v;
    
          for (i = 0; i < n; ++i) {
            if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
              sum += v;
            }
          }
    
          // Optionally sort the arcs by previously-computed values or by data.
          if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
          else if (sort !== null) index.sort(function(i, j) { return sort(data[i], data[j]); });
    
          // Compute the arcs! They are stored in the original data's order.
          for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
            j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
              data: data[j],
              index: i,
              value: v,
              startAngle: a0,
              endAngle: a1,
              padAngle: p
            };
          }
    
          return arcs;
        }
    
        pie.value = function(_) {
          return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), pie) : value;
        };
    
        pie.sortValues = function(_) {
          return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
        };
    
        pie.sort = function(_) {
          return arguments.length ? (sort = _, sortValues = null, pie) : sort;
        };
    
        pie.startAngle = function(_) {
          return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), pie) : startAngle;
        };
    
        pie.endAngle = function(_) {
          return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), pie) : endAngle;
        };
    
        pie.padAngle = function(_) {
          return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), pie) : padAngle;
        };
    
        return pie;
      }
    
      function Radial(curve) {
        this._curve = curve;
      }
    
      Radial.prototype = {
        areaStart: function() {
          this._curve.areaStart();
        },
        areaEnd: function() {
          this._curve.areaEnd();
        },
        lineStart: function() {
          this._curve.lineStart();
        },
        lineEnd: function() {
          this._curve.lineEnd();
        },
        point: function(a, r) {
          a -= halfPi, this._curve.point(r * Math.cos(a), r * Math.sin(a));
        }
      };
    
      function curveRadial(curve, args) {
        curve = bind(curve, args);
    
        function radial(context) {
          return new Radial(curve(context));
        }
    
        radial._curve = curve;
    
        return radial;
      }
    
      function radialArea() {
        var a = area(),
            c = a.curve;
    
        a.angle = a.x, delete a.x;
        a.startAngle = a.x0, delete a.x0;
        a.endAngle = a.x1, delete a.x1;
        a.radius = a.y, delete a.y;
        a.innerRadius = a.y0, delete a.y0;
        a.outerRadius = a.y1, delete a.y1;
    
        a.curve = function(_) {
          return arguments.length ? c(curveRadial(_, arguments)) : c()._curve;
        };
    
        return a.curve(curveLinear);
      }
    
      function radialLine() {
        var l = line(),
            c = l.curve;
    
        l.angle = l.x, delete l.x;
        l.radius = l.y, delete l.y;
    
        l.curve = function(_) {
          return arguments.length ? c(curveRadial(_, arguments)) : c()._curve;
        };
    
        return l.curve(curveLinear);
      }
    
      var circle = {
        draw: function(context, size) {
          var r = Math.sqrt(size / pi);
          context.moveTo(r, 0);
          context.arc(0, 0, r, 0, tau);
        }
      };
    
      var cross = {
        draw: function(context, size) {
          var r = Math.sqrt(size / 5) / 2;
          context.moveTo(-3 * r, -r);
          context.lineTo(-r, -r);
          context.lineTo(-r, -3 * r);
          context.lineTo(r, -3 * r);
          context.lineTo(r, -r);
          context.lineTo(3 * r, -r);
          context.lineTo(3 * r, r);
          context.lineTo(r, r);
          context.lineTo(r, 3 * r);
          context.lineTo(-r, 3 * r);
          context.lineTo(-r, r);
          context.lineTo(-3 * r, r);
          context.closePath();
        }
      };
    
      var tan30 = Math.sqrt(1 / 3);
      var tan30_2 = tan30 * 2;
      var diamond = {
        draw: function(context, size) {
          var y = Math.sqrt(size / tan30_2),
              x = y * tan30;
          context.moveTo(0, -y);
          context.lineTo(x, 0);
          context.lineTo(0, y);
          context.lineTo(-x, 0);
          context.closePath();
        }
      };
    
      var ka = 0.89081309152928522810;
      var kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10);
      var kx = Math.sin(tau / 10) * kr;
      var ky = -Math.cos(tau / 10) * kr;
      var star = {
        draw: function(context, size) {
          var r = Math.sqrt(size * ka),
              x = kx * r,
              y = ky * r;
          context.moveTo(0, -r);
          context.lineTo(x, y);
          for (var i = 1; i < 5; ++i) {
            var a = tau * i / 5,
                c = Math.cos(a),
                s = Math.sin(a);
            context.lineTo(s * r, -c * r);
            context.lineTo(c * x - s * y, s * x + c * y);
          }
          context.closePath();
        }
      };
    
      var square = {
        draw: function(context, size) {
          var w = Math.sqrt(size),
              x = -w / 2;
          context.rect(x, x, w, w);
        }
      };
    
      var sqrt3 = Math.sqrt(3);
    
      var triangle = {
        draw: function(context, size) {
          var y = -Math.sqrt(size / (sqrt3 * 3));
          context.moveTo(0, y * 2);
          context.lineTo(-sqrt3 * y, -y);
          context.lineTo(sqrt3 * y, -y);
          context.closePath();
        }
      };
    
      var c = -0.5;
      var s = Math.sqrt(3) / 2;
      var k = 1 / Math.sqrt(12);
      var a = (k / 2 + 1) * 3;
      var wye = {
        draw: function(context, size) {
          var r = Math.sqrt(size / a),
              x0 = r / 2,
              y0 = r * k,
              x1 = x0,
              y1 = r * k + r,
              x2 = -x1,
              y2 = y1;
          context.moveTo(x0, y0);
          context.lineTo(x1, y1);
          context.lineTo(x2, y2);
          context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
          context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
          context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
          context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
          context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
          context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
          context.closePath();
        }
      };
    
      var symbols = [
        circle,
        cross,
        diamond,
        square,
        star,
        triangle,
        wye
      ];
    
      function symbol() {
        var type = constant(circle),
            size = constant(64),
            context = null;
    
        function symbol() {
          var buffer;
          if (!context) context = buffer = d3Path.path();
          type.apply(this, arguments).draw(context, +size.apply(this, arguments));
          if (buffer) return context = null, buffer + "" || null;
        }
    
        symbol.type = function(_) {
          return arguments.length ? (type = typeof _ === "function" ? _ : constant(_), symbol) : type;
        };
    
        symbol.size = function(_) {
          return arguments.length ? (size = typeof _ === "function" ? _ : constant(+_), symbol) : size;
        };
    
        symbol.context = function(_) {
          return arguments.length ? (context = _ == null ? null : _, symbol) : context;
        };
    
        return symbol;
      }
    
      function noop() {}
    
      function point(that, x, y) {
        that._context.bezierCurveTo(
          (2 * that._x0 + that._x1) / 3,
          (2 * that._y0 + that._y1) / 3,
          (that._x0 + 2 * that._x1) / 3,
          (that._y0 + 2 * that._y1) / 3,
          (that._x0 + 4 * that._x1 + x) / 6,
          (that._y0 + 4 * that._y1 + y) / 6
        );
      }
    
      function Basis(context) {
        this._context = context;
      }
    
      Basis.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._x0 = this._x1 =
          this._y0 = this._y1 = NaN;
          this._point = 0;
        },
        lineEnd: function() {
          switch (this._point) {
            case 3: point(this, this._x1, this._y1); // proceed
            case 2: this._context.lineTo(this._x1, this._y1); break;
          }
          if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
          this._line = 1 - this._line;
        },
        point: function(x, y) {
          x = +x, y = +y;
          switch (this._point) {
            case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
            case 1: this._point = 2; break;
            case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
            default: point(this, x, y); break;
          }
          this._x0 = this._x1, this._x1 = x;
          this._y0 = this._y1, this._y1 = y;
        }
      };
    
      function basis(context) {
        return new Basis(context);
      }
    
      function BasisClosed(context) {
        this._context = context;
      }
    
      BasisClosed.prototype = {
        areaStart: noop,
        areaEnd: noop,
        lineStart: function() {
          this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
          this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
          this._point = 0;
        },
        lineEnd: function() {
          switch (this._point) {
            case 1: {
              this._context.moveTo(this._x2, this._y2);
              this._context.closePath();
              break;
            }
            case 2: {
              this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
              this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
              this._context.closePath();
              break;
            }
            case 3: {
              this.point(this._x2, this._y2);
              this.point(this._x3, this._y3);
              this.point(this._x4, this._y4);
              break;
            }
          }
        },
        point: function(x, y) {
          x = +x, y = +y;
          switch (this._point) {
            case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
            case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
            case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
            default: point(this, x, y); break;
          }
          this._x0 = this._x1, this._x1 = x;
          this._y0 = this._y1, this._y1 = y;
        }
      };
    
      function basisClosed(context) {
        return new BasisClosed(context);
      }
    
      function BasisOpen(context) {
        this._context = context;
      }
    
      BasisOpen.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._x0 = this._x1 =
          this._y0 = this._y1 = NaN;
          this._point = 0;
        },
        lineEnd: function() {
          if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
          this._line = 1 - this._line;
        },
        point: function(x, y) {
          x = +x, y = +y;
          switch (this._point) {
            case 0: this._point = 1; break;
            case 1: this._point = 2; break;
            case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
            case 3: this._point = 4; // proceed
            default: point(this, x, y); break;
          }
          this._x0 = this._x1, this._x1 = x;
          this._y0 = this._y1, this._y1 = y;
        }
      };
    
      function basisOpen(context) {
        return new BasisOpen(context);
      }
    
      function Bundle(context, beta) {
        this._basis = basis(context);
        this._beta = beta;
      }
    
      Bundle.prototype = {
        lineStart: function() {
          this._x = [];
          this._y = [];
          this._basis.lineStart();
        },
        lineEnd: function() {
          var x = this._x,
              y = this._y,
              j = x.length - 1;
    
          if (j > 0) {
            var x0 = x[0],
                y0 = y[0],
                dx = x[j] - x0,
                dy = y[j] - y0,
                i = -1,
                t;
    
            while (++i <= j) {
              t = i / j;
              this._basis.point(
                this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
                this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
              );
            }
          }
    
          this._x = this._y = null;
          this._basis.lineEnd();
        },
        point: function(x, y) {
          this._x.push(+x);
          this._y.push(+y);
        }
      };
    
      function bundle(context, beta) {
        return beta == null ? new Bundle(context, 0.85)
            : (beta = +beta) === 1 ? basis(context)
            : new Bundle(context, beta);
      }
    
      function point$1(that, x, y) {
        that._context.bezierCurveTo(
          that._x1 + that._k * (that._x2 - that._x0),
          that._y1 + that._k * (that._y2 - that._y0),
          that._x2 + that._k * (that._x1 - x),
          that._y2 + that._k * (that._y1 - y),
          that._x2,
          that._y2
        );
      }
    
      function Cardinal(context, k) {
        this._context = context;
        this._k = k;
      }
    
      Cardinal.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._x0 = this._x1 = this._x2 =
          this._y0 = this._y1 = this._y2 = NaN;
          this._point = 0;
        },
        lineEnd: function() {
          switch (this._point) {
            case 2: this._context.lineTo(this._x2, this._y2); break;
            case 3: point$1(this, this._x1, this._y1); break;
          }
          if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
          this._line = 1 - this._line;
        },
        point: function(x, y) {
          x = +x, y = +y;
          switch (this._point) {
            case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
            case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
            case 2: this._point = 3; // proceed
            default: point$1(this, x, y); break;
          }
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
        }
      };
    
      function cardinal(context, tension) {
        return new Cardinal(context, (tension == null ? 1 : 1 - tension) / 6);
      }
    
      function CardinalClosed(context, k) {
        this._context = context;
        this._k = k;
      }
    
      CardinalClosed.prototype = {
        areaStart: noop,
        areaEnd: noop,
        lineStart: function() {
          this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
          this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
          this._point = 0;
        },
        lineEnd: function() {
          switch (this._point) {
            case 1: {
              this._context.moveTo(this._x3, this._y3);
              this._context.closePath();
              break;
            }
            case 2: {
              this._context.lineTo(this._x3, this._y3);
              this._context.closePath();
              break;
            }
            case 3: {
              this.point(this._x3, this._y3);
              this.point(this._x4, this._y4);
              this.point(this._x5, this._y5);
              break;
            }
          }
        },
        point: function(x, y) {
          x = +x, y = +y;
          switch (this._point) {
            case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
            case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
            case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
            default: point$1(this, x, y); break;
          }
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
        }
      };
    
      function cardinalClosed(context, tension) {
        return new CardinalClosed(context, (tension == null ? 1 : 1 - tension) / 6);
      }
    
      function CardinalOpen(context, k) {
        this._context = context;
        this._k = k;
      }
    
      CardinalOpen.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._x0 = this._x1 = this._x2 =
          this._y0 = this._y1 = this._y2 = NaN;
          this._point = 0;
        },
        lineEnd: function() {
          if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
          this._line = 1 - this._line;
        },
        point: function(x, y) {
          x = +x, y = +y;
          switch (this._point) {
            case 0: this._point = 1; break;
            case 1: this._point = 2; break;
            case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
            case 3: this._point = 4; // proceed
            default: point$1(this, x, y); break;
          }
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
        }
      };
    
      function cardinalOpen(context, tension) {
        return new CardinalOpen(context, (tension == null ? 1 : 1 - tension) / 6);
      }
    
      function point$2(that, x, y) {
        var x1 = that._x1,
            y1 = that._y1,
            x2 = that._x2,
            y2 = that._y2;
    
        if (that._l01_a > epsilon) {
          var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
              n = 3 * that._l01_a * (that._l01_a + that._l12_a);
          x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
          y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
        }
    
        if (that._l23_a > epsilon) {
          var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
              m = 3 * that._l23_a * (that._l23_a + that._l12_a);
          x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
          y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
        }
    
        that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
      }
    
      function CatmullRom(context, alpha) {
        this._context = context;
        this._alpha = alpha;
      }
    
      CatmullRom.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._x0 = this._x1 = this._x2 =
          this._y0 = this._y1 = this._y2 = NaN;
          this._l01_a = this._l12_a = this._l23_a =
          this._l01_2a = this._l12_2a = this._l23_2a =
          this._point = 0;
        },
        lineEnd: function() {
          switch (this._point) {
            case 2: this._context.lineTo(this._x2, this._y2); break;
            case 3: this.point(this, this._x2, this._y2); break;
          }
          if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
          this._line = 1 - this._line;
        },
        point: function(x, y) {
          x = +x, y = +y;
    
          if (this._point) {
            var x23 = this._x2 - x,
                y23 = this._y2 - y;
            this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
          }
    
          switch (this._point) {
            case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
            case 1: this._point = 2; break;
            case 2: this._point = 3; // proceed
            default: point$2(this, x, y); break;
          }
    
          this._l01_a = this._l12_a, this._l12_a = this._l23_a;
          this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
        }
      };
    
      function catmullRom(context, alpha) {
        return (alpha = alpha == null ? 0.5 : +alpha)
            ? new CatmullRom(context, alpha)
            : cardinal(context, 0);
      }
    
      function CatmullRomClosed(context, alpha) {
        this._context = context;
        this._alpha = alpha;
      }
    
      CatmullRomClosed.prototype = {
        areaStart: noop,
        areaEnd: noop,
        lineStart: function() {
          this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
          this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
          this._l01_a = this._l12_a = this._l23_a =
          this._l01_2a = this._l12_2a = this._l23_2a =
          this._point = 0;
        },
        lineEnd: function() {
          switch (this._point) {
            case 1: {
              this._context.moveTo(this._x3, this._y3);
              this._context.closePath();
              break;
            }
            case 2: {
              this._context.lineTo(this._x3, this._y3);
              this._context.closePath();
              break;
            }
            case 3: {
              this.point(this._x3, this._y3);
              this.point(this._x4, this._y4);
              this.point(this._x5, this._y5);
              break;
            }
          }
        },
        point: function(x, y) {
          x = +x, y = +y;
    
          if (this._point) {
            var x23 = this._x2 - x,
                y23 = this._y2 - y;
            this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
          }
    
          switch (this._point) {
            case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
            case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
            case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
            default: point$2(this, x, y); break;
          }
    
          this._l01_a = this._l12_a, this._l12_a = this._l23_a;
          this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
        }
      };
    
      function catmullRomClosed(context, alpha) {
        return (alpha = alpha == null ? 0.5 : +alpha)
            ? new CatmullRomClosed(context, alpha)
            : cardinalClosed(context, 0);
      }
    
      function CatmullRomOpen(context, alpha) {
        this._context = context;
        this._alpha = alpha;
      }
    
      CatmullRomOpen.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._x0 = this._x1 = this._x2 =
          this._y0 = this._y1 = this._y2 = NaN;
          this._l01_a = this._l12_a = this._l23_a =
          this._l01_2a = this._l12_2a = this._l23_2a =
          this._point = 0;
        },
        lineEnd: function() {
          if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
          this._line = 1 - this._line;
        },
        point: function(x, y) {
          x = +x, y = +y;
    
          if (this._point) {
            var x23 = this._x2 - x,
                y23 = this._y2 - y;
            this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
          }
    
          switch (this._point) {
            case 0: this._point = 1; break;
            case 1: this._point = 2; break;
            case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
            case 3: this._point = 4; // proceed
            default: point$2(this, x, y); break;
          }
    
          this._l01_a = this._l12_a, this._l12_a = this._l23_a;
          this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
        }
      };
    
      function catmullRomOpen(context, alpha) {
        return (alpha = alpha == null ? 0.5 : +alpha)
            ? new CatmullRomOpen(context, alpha)
            : cardinalOpen(context, 0);
      }
    
      function LinearClosed(context) {
        this._context = context;
      }
    
      LinearClosed.prototype = {
        areaStart: noop,
        areaEnd: noop,
        lineStart: function() {
          this._point = 0;
        },
        lineEnd: function() {
          if (this._point) this._context.closePath();
        },
        point: function(x, y) {
          x = +x, y = +y;
          if (this._point) this._context.lineTo(x, y);
          else this._point = 1, this._context.moveTo(x, y);
        }
      };
    
      function linearClosed(context) {
        return new LinearClosed(context);
      }
    
      function sign(x) {
        return x < 0 ? -1 : 1;
      }
    
      // Calculate the slopes of the tangents (Hermite-type interpolation) based on
      // the following paper: Steffen, M. 1990. A Simple Method for Monotonic
      // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
      // NOV(II), P. 443, 1990.
      function slope3(that, x2, y2) {
        var h0 = that._x1 - that._x0,
            h1 = x2 - that._x1,
            s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
            s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
            p = (s0 * h1 + s1 * h0) / (h0 + h1);
        return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
      }
    
      // Calculate a one-sided slope.
      function slope2(that, t) {
        var h = that._x1 - that._x0;
        return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
      }
    
      // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
      // "you can express cubic Hermite interpolation in terms of cubic Bézier curves
      // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
      function point$3(that, t0, t1) {
        var x0 = that._x0,
            y0 = that._y0,
            x1 = that._x1,
            y1 = that._y1,
            dx = (x1 - x0) / 3;
        that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
      }
    
      function MonotoneX(context) {
        this._context = context;
      }
    
      MonotoneX.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._x0 = this._x1 =
          this._y0 = this._y1 =
          this._t0 = NaN;
          this._point = 0;
        },
        lineEnd: function() {
          switch (this._point) {
            case 2: this._context.lineTo(this._x1, this._y1); break;
            case 3: point$3(this, this._t0, slope2(this, this._t0)); break;
          }
          if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
          this._line = 1 - this._line;
        },
        point: function(x, y) {
          var t1 = NaN;
    
          x = +x, y = +y;
          if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
          switch (this._point) {
            case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
            case 1: this._point = 2; break;
            case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
            default: point$3(this, this._t0, t1 = slope3(this, x, y)); break;
          }
    
          this._x0 = this._x1, this._x1 = x;
          this._y0 = this._y1, this._y1 = y;
          this._t0 = t1;
        }
      }
    
      function MonotoneY(context) {
        this._context = new ReflectContext(context);
      }
    
      (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
        MonotoneX.prototype.point.call(this, y, x);
      };
    
      function ReflectContext(context) {
        this._context = context;
      }
    
      ReflectContext.prototype = {
        moveTo: function(x, y) { this._context.moveTo(y, x); },
        closePath: function() { this._context.closePath(); },
        lineTo: function(x, y) { this._context.lineTo(y, x); },
        bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
      };
    
      function monotoneX(context) {
        return new MonotoneX(context);
      }
    
      function monotoneY(context) {
        return new MonotoneY(context);
      }
    
      function Natural(context) {
        this._context = context;
      }
    
      Natural.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._x = [];
          this._y = [];
        },
        lineEnd: function() {
          var x = this._x,
              y = this._y,
              n = x.length;
    
          if (n) {
            this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
            if (n === 2) {
              this._context.lineTo(x[1], y[1]);
            } else {
              var px = controlPoints(x),
                  py = controlPoints(y);
              for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
                this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
              }
            }
          }
    
          if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
          this._line = 1 - this._line;
          this._x = this._y = null;
        },
        point: function(x, y) {
          this._x.push(+x);
          this._y.push(+y);
        }
      };
    
      // See https://www.particleincell.com/2012/bezier-splines/ for derivation.
      function controlPoints(x) {
        var i,
            n = x.length - 1,
            m,
            a = new Array(n),
            b = new Array(n),
            r = new Array(n);
        a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
        for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
        a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
        for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
        a[n - 1] = r[n - 1] / b[n - 1];
        for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
        b[n - 1] = (x[n] + a[n - 1]) / 2;
        for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
        return [a, b];
      }
    
      function natural(context) {
        return new Natural(context);
      }
    
      function Step(context, t) {
        this._context = context;
        this._t = t;
      }
    
      Step.prototype = {
        areaStart: function() {
          this._line = 0;
        },
        areaEnd: function() {
          this._line = NaN;
        },
        lineStart: function() {
          this._x = this._y = NaN;
          this._point = 0;
        },
        lineEnd: function() {
          if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
          if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
          this._line = 1 - this._line;
        },
        point: function(x, y) {
          x = +x, y = +y;
          switch (this._point) {
            case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
            case 1: this._point = 2; // proceed
            default: {
              var t = x > this._x ? this._t : 1 - this._t;
              if (t <= 0) {
                this._context.lineTo(this._x, y);
                this._context.lineTo(x, y);
              } else if (t >= 1) {
                this._context.lineTo(x, this._y);
                this._context.lineTo(x, y);
              } else {
                var x1 = (this._x + x) * t;
                this._context.lineTo(x1, this._y);
                this._context.lineTo(x1, y);
              }
              break;
            }
          }
          this._x = x, this._y = y;
        }
      };
    
      function step(context) {
        return new Step(context, 0.5);
      }
    
      function stepBefore(context) {
        return new Step(context, 0);
      }
    
      function stepAfter(context) {
        return new Step(context, 1);
      }
    
      var slice$1 = Array.prototype.slice;
    
      function none(series, order) {
        if (!((n = series.length) > 1)) return;
        for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
          s0 = s1, s1 = series[order[i]];
          for (var j = 0; j < m; ++j) {
            s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
          }
        }
      }
    
      function none$1(series) {
        var n = series.length, o = new Array(n);
        while (--n >= 0) o[n] = n;
        return o;
      }
    
      function stackValue(d, key) {
        return d[key];
      }
    
      function stack() {
        var keys = constant([]),
            order = none$1,
            offset = none,
            value = stackValue;
    
        function stack(data) {
          var kz = keys.apply(this, arguments),
              i,
              m = data.length,
              n = kz.length,
              sz = new Array(n),
              oz;
    
          for (i = 0; i < n; ++i) {
            for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
              si[j] = sij = [0, +value(data[j], ki, j, data)];
              sij.data = data[j];
            }
            si.key = ki;
          }
    
          for (i = 0, oz = order(sz); i < n; ++i) {
            sz[oz[i]].index = i;
          }
    
          offset(sz, oz);
          return sz;
        }
    
        stack.keys = function(_) {
          return arguments.length ? (keys = typeof _ === "function" ? _ : constant(slice$1.call(_)), stack) : keys;
        };
    
        stack.value = function(_) {
          return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), stack) : value;
        };
    
        stack.order = function(_) {
          return arguments.length ? (order = _ == null ? none$1 : typeof _ === "function" ? _ : constant(slice$1.call(_)), stack) : order;
        };
    
        stack.offset = function(_) {
          return arguments.length ? (offset = _ == null ? none : _, stack) : offset;
        };
    
        return stack;
      }
    
      function expand(series, order) {
        if (!((n = series.length) > 0)) return;
        for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
          for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
          if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
        }
        none(series, order);
      }
    
      function silhouette(series, order) {
        if (!((n = series.length) > 0)) return;
        for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
          for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
          s0[j][1] += s0[j][0] = -y / 2;
        }
        none(series, order);
      }
    
      function wiggle(series, order) {
        if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
        for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
          for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
            var si = series[order[i]],
                sij0 = si[j][1] || 0,
                sij1 = si[j - 1][1] || 0,
                s3 = (sij0 - sij1) / 2;
            for (var k = 0; k < i; ++k) {
              var sk = series[order[k]],
                  skj0 = sk[j][1] || 0,
                  skj1 = sk[j - 1][1] || 0;
              s3 += skj0 - skj1;
            }
            s1 += sij0, s2 += s3 * sij0;
          }
          s0[j - 1][1] += s0[j - 1][0] = y;
          if (s1) y -= s2 / s1;
        }
        s0[j - 1][1] += s0[j - 1][0] = y;
        none(series, order);
      }
    
      function ascending(series) {
        var sums = series.map(sum);
        return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; });
      }
    
      function sum(series) {
        var s = 0, i = -1, n = series.length, v;
        while (++i < n) if (v = +series[i][1]) s += v;
        return s;
      }
    
      function descending(series) {
        return ascending(series).reverse();
      }
    
      function insideOut(series) {
        var n = series.length,
            i,
            j,
            sums = series.map(sum),
            order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }),
            top = 0,
            bottom = 0,
            tops = [],
            bottoms = [];
    
        for (i = 0; i < n; ++i) {
          j = order[i];
          if (top < bottom) {
            top += sums[j];
            tops.push(j);
          } else {
            bottom += sums[j];
            bottoms.push(j);
          }
        }
    
        return bottoms.reverse().concat(tops);
      }
    
      function reverse(series) {
        return none$1(series).reverse();
      }
    
      var version = "0.5.1";
    
      exports.version = version;
      exports.arc = arc;
      exports.area = area;
      exports.line = line;
      exports.pie = pie;
      exports.radialArea = radialArea;
      exports.radialLine = radialLine;
      exports.symbol = symbol;
      exports.symbols = symbols;
      exports.symbolCircle = circle;
      exports.symbolCross = cross;
      exports.symbolDiamond = diamond;
      exports.symbolSquare = square;
      exports.symbolStar = star;
      exports.symbolTriangle = triangle;
      exports.symbolWye = wye;
      exports.curveBasisClosed = basisClosed;
      exports.curveBasisOpen = basisOpen;
      exports.curveBasis = basis;
      exports.curveBundle = bundle;
      exports.curveCardinalClosed = cardinalClosed;
      exports.curveCardinalOpen = cardinalOpen;
      exports.curveCardinal = cardinal;
      exports.curveCatmullRomClosed = catmullRomClosed;
      exports.curveCatmullRomOpen = catmullRomOpen;
      exports.curveCatmullRom = catmullRom;
      exports.curveLinearClosed = linearClosed;
      exports.curveLinear = curveLinear;
      exports.curveMonotoneX = monotoneX;
      exports.curveMonotoneY = monotoneY;
      exports.curveNatural = natural;
      exports.curveStep = step;
      exports.curveStepAfter = stepAfter;
      exports.curveStepBefore = stepBefore;
      exports.stack = stack;
      exports.stackOffsetExpand = expand;
      exports.stackOffsetNone = none;
      exports.stackOffsetSilhouette = silhouette;
      exports.stackOffsetWiggle = wiggle;
      exports.stackOrderAscending = ascending;
      exports.stackOrderDescending = descending;
      exports.stackOrderInsideOut = insideOut;
      exports.stackOrderNone = none$1;
      exports.stackOrderReverse = reverse;
    
    }));

/***/ },
/* 491 */
/***/ function(module, exports, __webpack_require__) {

    (function (global, factory) {
       true ? factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], factory) :
      (factory((global.d3_path = global.d3_path || {})));
    }(this, function (exports) { 'use strict';
    
      var pi = Math.PI;
      var tau = 2 * pi;
      var epsilon = 1e-6;
      var tauEpsilon = tau - epsilon;
      function Path() {
        this._x0 = this._y0 = // start of current subpath
        this._x1 = this._y1 = null; // end of current subpath
        this._ = [];
      }
    
      function path() {
        return new Path;
      }
    
      Path.prototype = path.prototype = {
        constructor: Path,
        moveTo: function(x, y) {
          this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y);
        },
        closePath: function() {
          if (this._x1 !== null) {
            this._x1 = this._x0, this._y1 = this._y0;
            this._.push("Z");
          }
        },
        lineTo: function(x, y) {
          this._.push("L", this._x1 = +x, ",", this._y1 = +y);
        },
        quadraticCurveTo: function(x1, y1, x, y) {
          this._.push("Q", +x1, ",", +y1, ",", this._x1 = +x, ",", this._y1 = +y);
        },
        bezierCurveTo: function(x1, y1, x2, y2, x, y) {
          this._.push("C", +x1, ",", +y1, ",", +x2, ",", +y2, ",", this._x1 = +x, ",", this._y1 = +y);
        },
        arcTo: function(x1, y1, x2, y2, r) {
          x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
          var x0 = this._x1,
              y0 = this._y1,
              x21 = x2 - x1,
              y21 = y2 - y1,
              x01 = x0 - x1,
              y01 = y0 - y1,
              l01_2 = x01 * x01 + y01 * y01;
    
          // Is the radius negative? Error.
          if (r < 0) throw new Error("negative radius: " + r);
    
          // Is this path empty? Move to (x1,y1).
          if (this._x1 === null) {
            this._.push(
              "M", this._x1 = x1, ",", this._y1 = y1
            );
          }
    
          // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
          else if (!(l01_2 > epsilon));
    
          // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
          // Equivalently, is (x1,y1) coincident with (x2,y2)?
          // Or, is the radius zero? Line to (x1,y1).
          else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {
            this._.push(
              "L", this._x1 = x1, ",", this._y1 = y1
            );
          }
    
          // Otherwise, draw an arc!
          else {
            var x20 = x2 - x0,
                y20 = y2 - y0,
                l21_2 = x21 * x21 + y21 * y21,
                l20_2 = x20 * x20 + y20 * y20,
                l21 = Math.sqrt(l21_2),
                l01 = Math.sqrt(l01_2),
                l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
                t01 = l / l01,
                t21 = l / l21;
    
            // If the start tangent is not coincident with (x0,y0), line to.
            if (Math.abs(t01 - 1) > epsilon) {
              this._.push(
                "L", x1 + t01 * x01, ",", y1 + t01 * y01
              );
            }
    
            this._.push(
              "A", r, ",", r, ",0,0,", +(y01 * x20 > x01 * y20), ",", this._x1 = x1 + t21 * x21, ",", this._y1 = y1 + t21 * y21
            );
          }
        },
        arc: function(x, y, r, a0, a1, ccw) {
          x = +x, y = +y, r = +r;
          var dx = r * Math.cos(a0),
              dy = r * Math.sin(a0),
              x0 = x + dx,
              y0 = y + dy,
              cw = 1 ^ ccw,
              da = ccw ? a0 - a1 : a1 - a0;
    
          // Is the radius negative? Error.
          if (r < 0) throw new Error("negative radius: " + r);
    
          // Is this path empty? Move to (x0,y0).
          if (this._x1 === null) {
            this._.push(
              "M", x0, ",", y0
            );
          }
    
          // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
          else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {
            this._.push(
              "L", x0, ",", y0
            );
          }
    
          // Is this arc empty? We’re done.
          if (!r) return;
    
          // Is this a complete circle? Draw two arcs to complete the circle.
          if (da > tauEpsilon) {
            this._.push(
              "A", r, ",", r, ",0,1,", cw, ",", x - dx, ",", y - dy,
              "A", r, ",", r, ",0,1,", cw, ",", this._x1 = x0, ",", this._y1 = y0
            );
          }
    
          // Otherwise, draw an arc!
          else {
            if (da < 0) da = da % tau + tau;
            this._.push(
              "A", r, ",", r, ",0,", +(da >= pi), ",", cw, ",", this._x1 = x + r * Math.cos(a1), ",", this._y1 = y + r * Math.sin(a1)
            );
          }
        },
        rect: function(x, y, w, h) {
          this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y, "h", +w, "v", +h, "h", -w, "Z");
        },
        toString: function() {
          return this._.join("");
        }
      };
    
      var version = "0.1.5";
    
      exports.version = version;
      exports.path = path;
    
    }));

/***/ },
/* 492 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Shape = __webpack_require__(490);
    
    var _d3Shape2 = _interopRequireDefault(_d3Shape);
    
    var _commonProps = __webpack_require__(487);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Area = function (_Component) {
      _inherits(Area, _Component);
    
      function Area(props) {
        _classCallCheck(this, Area);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Area).call(this, props));
      }
    
      _createClass(Area, [{
        key: '_mkArea',
        value: function _mkArea() {
          var _props = this.props;
          var areaClassName = _props.areaClassName;
          var areaOpacity = _props.areaOpacity;
    
    
          var dataset = (0, _series.series)(this.props);
          var that = this;
    
          return _react2.default.createElement(
            'g',
            null,
            dataset.map(function (area, i) {
              return _react2.default.createElement('path', {
                className: areaClassName + ' area',
                fill: area.color,
                d: that._setAxes(area.data),
                style: area.style,
                key: i
              });
            })
          );
        }
      }, {
        key: '_setAxes',
        value: function _setAxes(data) {
          var _props2 = this.props;
          var height = _props2.height;
          var margins = _props2.margins;
          var xScaleSet = _props2.xScaleSet;
          var yScaleSet = _props2.yScaleSet;
    
    
          var area = _d3Shape2.default.area().x(function (d) {
            return xScaleSet(d.x);
          }).y0(function (d) {
            var domain = yScaleSet.domain();
    
            if (domain[0] * domain[1] < 0) {
              return yScaleSet(0);
            } else if (domain[0] * domain[1] >= 0 && domain[0] >= 0) {
              return yScaleSet.range()[0];
            } else if (domain[0] * domain[1] >= 0 && domain[0] < 0) {
              return yScaleSet.range()[1];
            }
          }).y1(function (d) {
            return yScaleSet(d.y);
          });
    
          return area.call(this, data);
        }
      }, {
        key: 'render',
        value: function render() {
          var area = this._mkArea();
    
          return _react2.default.createElement(
            'g',
            null,
            area
          );
        }
      }]);
    
      return Area;
    }(_react.Component);
    
    Area.defaultProps = _extends({
      areaClassName: 'react-d3-basic__area'
    }, _commonProps2.default);
    exports.default = Area;

/***/ },
/* 493 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Shape = __webpack_require__(490);
    
    var _d3Shape2 = _interopRequireDefault(_d3Shape);
    
    var _commonProps = __webpack_require__(487);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var AreaStack = function (_Component) {
      _inherits(AreaStack, _Component);
    
      function AreaStack(props) {
        _classCallCheck(this, AreaStack);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(AreaStack).call(this, props));
      }
    
      _createClass(AreaStack, [{
        key: '_mkStack',
        value: function _mkStack() {
          var areaClassName = this.props.areaClassName;
    
    
          var dataset = (0, _series.series)(this.props);
    
          var _setStack = this._setStack();
          var _setAxes = this._setAxes();
    
          return _react2.default.createElement(
            'g',
            null,
            _setStack(dataset).map(function (area) {
              return _react2.default.createElement('path', {
                className: areaClassName + ' area',
                fill: area.color,
                d: _setAxes(area.data),
                style: area.style
              });
            })
          );
        }
      }, {
        key: '_setStack',
        value: function _setStack() {
          var chartSeries = this.props.chartSeries;
    
    
          var buildOut = function buildOut(len) {
            // baseline for positive and negative bars respectively.
            var currentXOffsets = [];
            var currentXIndex = 0;
            return function (d, y0, y) {
    
              if (currentXIndex++ % len === 0) {
                currentXOffsets = [0, 0];
              }
    
              if (y >= 0) {
                d.y0 = currentXOffsets[1];
                d.y = y;
                currentXOffsets[1] += y;
              } else {
                d.y0 = currentXOffsets[0] + y;
                d.y = -y;
                currentXOffsets[0] += y;
              }
            };
          };
          return d3.layout.stack().values(function (d) {
            return d.data;
          }).out(buildOut(chartSeries.length));
        }
      }, {
        key: '_setAxes',
        value: function _setAxes() {
          var _props = this.props;
          var xScaleSet = _props.xScaleSet;
          var yScaleSet = _props.yScaleSet;
    
    
          return _d3Shape2.default.area().x(function (d) {
            return xScaleSet(d.x);
          }).y0(function (d) {
            return yScaleSet(d.y0);
          }).y1(function (d) {
            return yScaleSet(d.y0 + d.y);
          });
        }
      }, {
        key: 'render',
        value: function render() {
          var area = this._mkStack();
    
          return _react2.default.createElement(
            'g',
            null,
            area
          );
        }
      }]);
    
      return AreaStack;
    }(_react.Component);
    
    AreaStack.defaultProps = _extends({
      areaClass: 'react-d3-basics__area_stack',
      areaClassName: 'react-d3-basic__area_stack'
    }, _commonProps2.default);
    exports.default = AreaStack;

/***/ },
/* 494 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Bar = function (_Component) {
      _inherits(Bar, _Component);
    
      function Bar(props) {
        _classCallCheck(this, Bar);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Bar).call(this, props));
      }
    
      _createClass(Bar, [{
        key: 'triggerOver',
        value: function triggerOver(data, e) {
          this.props.onMouseOver(e, data);
        }
      }, {
        key: 'triggerOut',
        value: function triggerOut(data, e) {
          this.props.onMouseOut(e, data);
        }
      }, {
        key: 'triggerClick',
        value: function triggerClick(data, e) {
          this.props.onClick(e, data);
        }
      }, {
        key: '_mkBar',
        value: function _mkBar() {
          var _this2 = this;
    
          var _props = this.props;
          var height = _props.height;
          var width = _props.width;
          var margins = _props.margins;
          var barClassName = _props.barClassName;
          var xScaleSet = _props.xScaleSet;
          var yScaleSet = _props.yScaleSet;
    
    
          var that = this;
          var dataset = (0, _series.series)(this.props)[0];
          var domain = yScaleSet.domain();
          var zeroBase;
    
          if (domain[0] * domain[1] < 0) {
            zeroBase = yScaleSet(0);
          } else if (domain[0] * domain[1] >= 0 && domain[0] >= 0) {
            zeroBase = yScaleSet.range()[0];
          } else if (domain[0] * domain[1] >= 0 && domain[0] < 0) {
            zeroBase = yScaleSet.range()[1];
          }
    
          return _react2.default.createElement(
            'g',
            null,
            dataset.data.map(function (bar, i) {
              return _react2.default.createElement('rect', {
                className: barClassName + ' bar',
                x: xScaleSet(bar.x) || xScaleSet(bar.x) === 0 ? xScaleSet(bar.x) : -10000,
                y: bar.y < 0 ? zeroBase : yScaleSet(bar.y),
                width: xScaleSet.bandwidth(),
                height: bar.y < domain[0] ? 0 : Math.abs(zeroBase - yScaleSet(bar.y)),
                fill: bar._style.color ? bar._style.color : dataset.color,
                style: Object.assign({}, dataset.style, bar._style),
                onMouseOut: that.triggerOut.bind(_this2, bar),
                onMouseOver: that.triggerOver.bind(_this2, bar),
                onClick: that.triggerClick.bind(_this2, bar),
                key: i
              });
            })
          );
        }
      }, {
        key: 'render',
        value: function render() {
          var bar = this._mkBar();
    
          return _react2.default.createElement(
            'g',
            null,
            bar
          );
        }
      }]);
    
      return Bar;
    }(_react.Component);
    
    Bar.defaultProps = {
      onMouseOver: function onMouseOver(d) {},
      onMouseOut: function onMouseOut(d) {},
      onClick: function onClick(d) {},
      barClassName: 'react-d3-basic__bar'
    };
    exports.default = Bar;

/***/ },
/* 495 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarHorizontal = function (_Component) {
      _inherits(BarHorizontal, _Component);
    
      function BarHorizontal(props) {
        _classCallCheck(this, BarHorizontal);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarHorizontal).call(this, props));
      }
    
      _createClass(BarHorizontal, [{
        key: 'triggerOver',
        value: function triggerOver(data, e) {
          this.props.onMouseOver(e, data);
        }
      }, {
        key: 'triggerOut',
        value: function triggerOut(data, e) {
          this.props.onMouseOut(e, data);
        }
      }, {
        key: '_mkBar',
        value: function _mkBar(dom) {
          var _this2 = this;
    
          var _props = this.props;
          var height = _props.height;
          var margins = _props.margins;
          var barClassName = _props.barClassName;
          var xScaleSet = _props.xScaleSet;
          var yScaleSet = _props.yScaleSet;
    
    
          var that = this;
          var dataset = (0, _series.series)(this.props, true)[0];
          var domain = xScaleSet.domain();
          var zeroBase;
    
          if (domain[0] * domain[1] < 0) {
            zeroBase = xScaleSet(0);
          } else if (domain[0] * domain[1] >= 0 && domain[0] >= 0) {
            zeroBase = xScaleSet.range()[0];
          } else if (domain[0] * domain[1] >= 0 && domain[0] < 0) {
            zeroBase = xScaleSet.range()[1];
          }
    
          return _react2.default.createElement(
            'g',
            null,
            dataset.data.map(function (bar, i) {
              return _react2.default.createElement('rect', {
                className: barClassName + ' bar',
                y: yScaleSet(bar.y) || yScaleSet(bar.y) === 0 ? yScaleSet(bar.y) : -10000,
                x: bar.x > 0 ? zeroBase : zeroBase - Math.abs(zeroBase - xScaleSet(bar.x)),
                height: yScaleSet.bandwidth(),
                width: bar.x < domain[0] ? 0 : Math.abs(zeroBase - xScaleSet(bar.x)),
                fill: bar._style.color ? bar._style.color : dataset.color,
                style: Object.assign({}, dataset.style, bar._style),
                onMouseOut: that.triggerOut.bind(_this2, bar),
                onMouseOver: that.triggerOver.bind(_this2, bar),
                key: i
              });
            })
          );
        }
      }, {
        key: 'render',
        value: function render() {
          var bar = this._mkBar();
    
          return _react2.default.createElement(
            'g',
            null,
            bar
          );
        }
      }]);
    
      return BarHorizontal;
    }(_react.Component);
    
    BarHorizontal.defaultProps = {
      onMouseOver: function onMouseOver(d) {},
      onMouseOut: function onMouseOut(d) {},
      barClassName: 'react-d3-basic__bar_horizontal'
    };
    exports.default = BarHorizontal;

/***/ },
/* 496 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Scale = __webpack_require__(445);
    
    var _d3Scale2 = _interopRequireDefault(_d3Scale);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarGroup = function (_Component) {
      _inherits(BarGroup, _Component);
    
      function BarGroup(props) {
        _classCallCheck(this, BarGroup);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarGroup).call(this, props));
      }
    
      _createClass(BarGroup, [{
        key: 'triggerOver',
        value: function triggerOver(data, e) {
          this.props.onMouseOver(e, data);
        }
      }, {
        key: 'triggerOut',
        value: function triggerOut(data, e) {
          this.props.onMouseOut(e, data);
        }
      }, {
        key: '_mkBarGroup',
        value: function _mkBarGroup(dom) {
          var _this2 = this;
    
          var _props = this.props;
          var height = _props.height;
          var margins = _props.margins;
          var barClassName = _props.barClassName;
          var xScaleSet = _props.xScaleSet;
          var yScaleSet = _props.yScaleSet;
    
    
          var that = this;
          var dataset = (0, _series.series)(this.props);
          var x1 = _d3Scale2.default.scaleBand();
    
          // mapping x1, inner x axis
          x1.domain(dataset.map(function (d) {
            return d.field;
          })).range([0, xScaleSet.bandwidth()]).padding(.1).round(true);
    
          var domain = yScaleSet.domain();
          var zeroBase;
    
          if (domain[0] * domain[1] < 0) {
            zeroBase = yScaleSet(0);
          } else if (domain[0] * domain[1] >= 0 && domain[0] >= 0) {
            zeroBase = yScaleSet.range()[0];
          } else if (domain[0] * domain[1] >= 0 && domain[0] < 0) {
            zeroBase = yScaleSet.range()[1];
          }
    
          return dataset.map(function (barGroup, i) {
            return _react2.default.createElement(
              'g',
              { className: 'bargroup', key: i },
              barGroup.data.map(function (bar, j) {
                return _react2.default.createElement('rect', {
                  key: j,
                  className: barClassName + ' bar',
                  width: x1.bandwidth(),
                  x: xScaleSet(bar.x) || xScaleSet(bar.x) === 0 ? xScaleSet(bar.x) + x1.bandwidth() * i : -10000,
                  y: bar.y < 0 ? zeroBase : yScaleSet(bar.y),
                  height: bar.y < domain[0] ? 0 : Math.abs(zeroBase - yScaleSet(bar.y)),
                  fill: barGroup.color,
                  onMouseOut: that.triggerOut.bind(_this2, bar),
                  onMouseOver: that.triggerOver.bind(_this2, bar),
                  style: barGroup.style
                });
              })
            );
          });
        }
      }, {
        key: 'render',
        value: function render() {
          var bar = this._mkBarGroup();
    
          return _react2.default.createElement(
            'g',
            null,
            bar
          );
        }
      }]);
    
      return BarGroup;
    }(_react.Component);
    
    BarGroup.defaultProps = {
      onMouseOver: function onMouseOver(d) {},
      onMouseOut: function onMouseOut(d) {},
      barClassName: 'react-d3-basic__bar_group'
    };
    exports.default = BarGroup;

/***/ },
/* 497 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Scale = __webpack_require__(445);
    
    var _d3Scale2 = _interopRequireDefault(_d3Scale);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarGroupHorizontal = function (_Component) {
      _inherits(BarGroupHorizontal, _Component);
    
      function BarGroupHorizontal(props) {
        _classCallCheck(this, BarGroupHorizontal);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarGroupHorizontal).call(this, props));
      }
    
      _createClass(BarGroupHorizontal, [{
        key: 'triggerOver',
        value: function triggerOver(data, e) {
          this.props.onMouseOver(e, data);
        }
      }, {
        key: 'triggerOut',
        value: function triggerOut(data, e) {
          this.props.onMouseOut(e, data);
        }
      }, {
        key: '_mkBarGroup',
        value: function _mkBarGroup() {
          var _this2 = this;
    
          var _props = this.props;
          var height = _props.height;
          var margins = _props.margins;
          var barClassName = _props.barClassName;
          var xScaleSet = _props.xScaleSet;
          var yScaleSet = _props.yScaleSet;
          var onMouseOut = _props.onMouseOut;
          var onMouseOver = _props.onMouseOver;
    
    
          var that = this;
          var dataset = (0, _series.series)(this.props, true);
          var y1 = _d3Scale2.default.scaleBand();
    
          // mapping x1, inner x axis
          y1.domain(dataset.map(function (d) {
            return d.field;
          })).range([0, yScaleSet.bandwidth()]).padding(.1).round(true);
    
          var domain = xScaleSet.domain();
          var zeroBase;
    
          if (domain[0] * domain[1] < 0) {
            zeroBase = xScaleSet(0);
          } else if (domain[0] * domain[1] >= 0 && domain[0] >= 0) {
            zeroBase = xScaleSet.range()[0];
          } else if (domain[0] * domain[1] >= 0 && domain[0] < 0) {
            zeroBase = xScaleSet.range()[1];
          }
    
          return _react2.default.createElement(
            'g',
            null,
            dataset.map(function (barGroup, i) {
              return _react2.default.createElement(
                'g',
                { className: 'bargroup', key: i },
                barGroup.data.map(function (bar, j) {
                  return _react2.default.createElement('rect', {
                    className: barClassName + ' bar',
                    height: y1.bandwidth(),
                    y: yScaleSet(bar.y) || yScaleSet(bar.y) === 0 ? yScaleSet(bar.y) + y1.bandwidth() * i : -10000,
                    x: bar.x > 0 ? zeroBase : zeroBase - Math.abs(zeroBase - xScaleSet(bar.x)),
                    width: bar.x < domain[0] ? 0 : Math.abs(zeroBase - xScaleSet(bar.x)),
                    fill: barGroup.color,
                    onMouseOut: that.triggerOut.bind(_this2, bar),
                    onMouseOver: that.triggerOver.bind(_this2, bar),
                    style: barGroup.style,
                    key: j
                  });
                })
              );
            })
          );
        }
      }, {
        key: 'render',
        value: function render() {
          var bar = this._mkBarGroup();
    
          return _react2.default.createElement(
            'g',
            null,
            bar
          );
        }
      }]);
    
      return BarGroupHorizontal;
    }(_react.Component);
    
    BarGroupHorizontal.defaultProps = {
      onMouseOver: function onMouseOver(d) {},
      onMouseOut: function onMouseOut(d) {},
      barClassName: 'react-d3-basic__bar_group_horizontal'
    };
    exports.default = BarGroupHorizontal;

/***/ },
/* 498 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d = __webpack_require__(485);
    
    var _d2 = _interopRequireDefault(_d);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarStack = function (_Component) {
      _inherits(BarStack, _Component);
    
      function BarStack(props) {
        _classCallCheck(this, BarStack);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarStack).call(this, props));
      }
    
      _createClass(BarStack, [{
        key: 'triggerOver',
        value: function triggerOver(data, e) {
          this.props.onMouseOver(e, data);
        }
      }, {
        key: 'triggerOut',
        value: function triggerOut(data, e) {
          this.props.onMouseOut(e, data);
        }
      }, {
        key: 'triggerClick',
        value: function triggerClick(data, e) {
          this.props.onClick(e, data);
        }
      }, {
        key: '_mkBarStack',
        value: function _mkBarStack() {
          var _this2 = this;
    
          var _props = this.props;
          var height = _props.height;
          var margins = _props.margins;
          var barClassName = _props.barClassName;
          var xScaleSet = _props.xScaleSet;
          var yScaleSet = _props.yScaleSet;
    
    
          var that = this;
          var dataset = (0, _series.series)(this.props);
          var _setStack = this._setStack();
    
          var domain = yScaleSet.domain();
          var zeroBase;
    
          if (domain[0] * domain[1] < 0) {
            zeroBase = yScaleSet(0);
          } else if (domain[0] * domain[1] >= 0 && domain[0] >= 0) {
            zeroBase = yScaleSet.range()[0];
          } else if (domain[0] * domain[1] >= 0 && domain[0] < 0) {
            zeroBase = yScaleSet.range()[1];
          }
    
          return _react2.default.createElement(
            'g',
            null,
            _setStack(dataset).map(function (barGroup, i) {
              return _react2.default.createElement(
                'g',
                {
                  key: i,
                  className: 'barGroup',
                  fill: barGroup.color,
                  style: barGroup.style },
                barGroup.data.map(function (bar, j) {
                  return _react2.default.createElement('rect', {
                    className: barClassName + ' bar',
                    width: xScaleSet.bandwidth(),
                    x: xScaleSet(bar.x) || xScaleSet(bar.x) === 0 ? xScaleSet(bar.x) : -10000,
                    y: yScaleSet(bar.y0 + bar.y),
                    height: Math.abs(yScaleSet(bar.y) - yScaleSet(0)),
                    onMouseOut: that.triggerOut.bind(_this2, bar),
                    onMouseOver: that.triggerOver.bind(_this2, bar),
                    onClick: that.triggerClick.bind(_this2, bar),
                    key: j
                  });
                })
              );
            })
          );
        }
      }, {
        key: '_setStack',
        value: function _setStack() {
          var chartSeries = this.props.chartSeries;
    
    
          var buildOut = function buildOut(len) {
            // baseline for positive and negative bars respectively.
            var currentXOffsets = [];
            var currentXIndex = 0;
            return function (d, y0, y) {
    
              if (currentXIndex++ % len === 0) {
                currentXOffsets = [0, 0];
              }
    
              if (y >= 0) {
                d.y0 = currentXOffsets[1];
                d.y = y;
                currentXOffsets[1] += y;
              } else {
                d.y0 = currentXOffsets[0] + y;
                d.y = -y;
                currentXOffsets[0] += y;
              }
            };
          };
          return _d2.default.layout.stack().values(function (d) {
            return d.data;
          }).out(buildOut(chartSeries.length));
        }
      }, {
        key: 'render',
        value: function render() {
          var bar = this._mkBarStack();
    
          return _react2.default.createElement(
            'g',
            null,
            bar
          );
        }
      }]);
    
      return BarStack;
    }(_react.Component);
    
    BarStack.defaultProps = {
      onMouseOver: function onMouseOver(d) {},
      onMouseOut: function onMouseOut(d) {},
      onClick: function onClick(d) {},
      barClassName: 'react-d3-basic__bar_stack'
    };
    exports.default = BarStack;

/***/ },
/* 499 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d = __webpack_require__(485);
    
    var _d2 = _interopRequireDefault(_d);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarStackHorizontal = function (_Component) {
      _inherits(BarStackHorizontal, _Component);
    
      function BarStackHorizontal(props) {
        _classCallCheck(this, BarStackHorizontal);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarStackHorizontal).call(this, props));
      }
    
      _createClass(BarStackHorizontal, [{
        key: 'triggerOver',
        value: function triggerOver(data, e) {
          this.props.onMouseOver(e, data);
        }
      }, {
        key: 'triggerOut',
        value: function triggerOut(data, e) {
          this.props.onMouseOut(e, data);
        }
      }, {
        key: '_mkBarStack',
        value: function _mkBarStack(dom) {
          var _this2 = this;
    
          var _props = this.props;
          var height = _props.height;
          var margins = _props.margins;
          var barClassName = _props.barClassName;
          var xScaleSet = _props.xScaleSet;
          var yScaleSet = _props.yScaleSet;
    
    
          var that = this;
          var dataset = (0, _series.series)(this.props, true);
          var _setStack = this._setStack();
    
          // make areas
          var chart = _d2.default.select(dom).attr("class", "g");
    
          var domain = xScaleSet.domain();
          var zeroBase;
    
          if (domain[0] * domain[1] < 0) {
            zeroBase = xScaleSet(0);
          } else if (domain[0] * domain[1] >= 0 && domain[0] >= 0) {
            zeroBase = xScaleSet.range()[0];
          } else if (domain[0] * domain[1] >= 0 && domain[0] < 0) {
            zeroBase = xScaleSet.range()[1];
          }
    
          return _react2.default.createElement(
            'g',
            null,
            _setStack(dataset).map(function (barGroup, i) {
              return _react2.default.createElement(
                'g',
                {
                  className: 'barGroup',
                  fill: barGroup.color,
                  style: barGroup.style,
                  key: i
                },
                barGroup.data.map(function (bar, j) {
                  return _react2.default.createElement('rect', {
                    className: barClassName + ' bar',
                    height: yScaleSet.bandwidth(),
                    y: yScaleSet(bar.y) || yScaleSet(bar.y) === 0 ? yScaleSet(bar.y) : -10000,
                    x: xScaleSet(bar.x0),
                    width: Math.abs(xScaleSet(bar.x) - xScaleSet(0)),
                    onMouseOut: that.triggerOut.bind(_this2, bar),
                    onMouseOver: that.triggerOver.bind(_this2, bar),
                    key: j
                  });
                })
              );
            })
          );
        }
      }, {
        key: '_setStack',
        value: function _setStack() {
          var chartSeries = this.props.chartSeries;
    
    
          var buildOut = function buildOut(len) {
            // baseline for positive and negative bars respectively.
            var currentXOffsets = [];
            var currentXIndex = 0;
            return function (d, x0, x) {
    
              if (currentXIndex++ % len === 0) {
                currentXOffsets = [0, 0];
              }
    
              if (x >= 0) {
                d.x0 = currentXOffsets[1];
                d.x = x;
                currentXOffsets[1] += x;
              } else {
                d.x0 = currentXOffsets[0] + x;
                d.x = -x;
                currentXOffsets[0] += x;
              }
            };
          };
          return _d2.default.layout.stack().values(function (d) {
            return d.data;
          }).y(function (d) {
            return d.x;
          }).out(buildOut(chartSeries.length));
        }
      }, {
        key: 'render',
        value: function render() {
          var bar = this._mkBarStack();
    
          return _react2.default.createElement(
            'g',
            null,
            bar
          );
        }
      }]);
    
      return BarStackHorizontal;
    }(_react.Component);
    
    BarStackHorizontal.defaultProps = {
      onMouseOver: function onMouseOver(d) {},
      onMouseOut: function onMouseOut(d) {},
      barClassName: 'react-d3-basic__bar_stack_horizontal'
    };
    exports.default = BarStackHorizontal;

/***/ },
/* 500 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Shape = __webpack_require__(490);
    
    var _d3Shape2 = _interopRequireDefault(_d3Shape);
    
    var _commonProps = __webpack_require__(487);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Pie = function (_Component) {
      _inherits(Pie, _Component);
    
      function Pie(props) {
        _classCallCheck(this, Pie);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Pie).call(this, props));
      }
    
      _createClass(Pie, [{
        key: 'triggerOver',
        value: function triggerOver(data, e) {
          this.props.onMouseOver(e, data);
        }
      }, {
        key: 'triggerOut',
        value: function triggerOut(data, e) {
          this.props.onMouseOut(e, data);
        }
      }, {
        key: 'mkSeries',
        value: function mkSeries() {
          var _props = this.props;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var value = _props.value;
          var name = _props.name;
          var categoricalColors = _props.categoricalColors;
    
    
          var chartSeriesData = chartSeries.map(function (f, i) {
    
            // set a color if not set
            if (!f.color) f.color = categoricalColors(i);
    
            // set name if not set
            if (!f.name) f.name = f.field;
    
            var val;
    
            data.forEach(function (d) {
              if (name(d) === f.field) val = d;
            });
    
            return Object.assign(f, { value: value(val) });
          });
    
          return chartSeriesData;
        }
      }, {
        key: '_mkPie',
        value: function _mkPie() {
          var _this2 = this;
    
          var _props2 = this.props;
          var width = _props2.width;
          var height = _props2.height;
          var innerRadius = _props2.innerRadius;
          var outerRadius = _props2.outerRadius;
          var pieSort = _props2.pieSort;
          var value = _props2.value;
          var radius = _props2.radius;
          var pieTextShow = _props2.pieTextShow;
    
    
          var that = this;
          var radius = this.props.radius || Math.min(width - 100, height - 100) / 2;
          var outerRadius = outerRadius || radius - 10;
          var labelr = radius + 10;
    
          var chartSeriesData = this.mkSeries();
    
          var arc = _d3Shape2.default.arc().outerRadius(outerRadius).innerRadius(innerRadius);
    
          var arcOver = _d3Shape2.default.arc().outerRadius(outerRadius + 10).innerRadius(innerRadius);
    
          var pie = _d3Shape2.default.pie().sort(function (a, b) {
            return pieSort(a.value, b.value);
          }).value(function (d) {
            return d.value;
          });
    
          return _react2.default.createElement(
            'g',
            { className: 'arc' },
            pie(chartSeriesData).map(function (slice, i) {
              var textTransform = function textTransform(d) {
                var c = arc.centroid(d),
                    x = c[0],
                    y = c[1],
    
                // pythagorean theorem for hypotenuse
                h = Math.sqrt(x * x + y * y);
    
                return "translate(" + x / h * labelr + ',' + y / h * labelr + ")";
              };
    
              var textAnchor = function textAnchor(d) {
                return (d.endAngle + d.startAngle) / 2 > Math.PI ? "end" : "start";
              };
    
              return _react2.default.createElement(
                'g',
                { key: i },
                _react2.default.createElement('path', {
                  d: arc(slice),
                  style: _extends({ fill: slice.data.color, stroke: '#FFF' }, slice.data.style),
                  onMouseOut: that.triggerOut.bind(_this2, slice),
                  onMouseOver: that.triggerOver.bind(_this2, slice)
                }),
                pieTextShow ? _react2.default.createElement(
                  'text',
                  {
                    transform: textTransform(slice),
                    dy: '.35em',
                    textAnchor: textAnchor(slice)
                  },
                  slice.data.name
                ) : null
              );
            })
          );
        }
      }, {
        key: 'render',
        value: function render() {
          var _props3 = this.props;
          var width = _props3.width;
          var height = _props3.height;
          var margins = _props3.margins;
    
    
          var t = 'translate(' + (width - margins.left - margins.right) / 2 + ',  ' + (height - margins.top - margins.bottom) / 2 + ')';
          var pie = this._mkPie();
    
          return _react2.default.createElement(
            'g',
            { transform: t },
            pie
          );
        }
      }]);
    
      return Pie;
    }(_react.Component);
    
    Pie.defaultProps = _extends({
      onMouseOver: function onMouseOver(d) {},
      onMouseOut: function onMouseOut(d) {}
    }, _commonProps.pieProps);
    exports.default = Pie;

/***/ },
/* 501 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _d3Shape = __webpack_require__(490);
    
    var _d3Shape2 = _interopRequireDefault(_d3Shape);
    
    var _series = __webpack_require__(484);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var Scatter = function (_Component) {
      _inherits(Scatter, _Component);
    
      function Scatter(props) {
        _classCallCheck(this, Scatter);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(Scatter).call(this, props));
      }
    
      _createClass(Scatter, [{
        key: '_mkScatter',
        value: function _mkScatter(dataset) {
          var _props = this.props;
          var scatterClassName = _props.scatterClassName;
          var defaultSymbol = _props.defaultSymbol;
          var defaultSymbolSize = _props.defaultSymbolSize;
          var brushSymbol = _props.brushSymbol;
          var xScaleSet = _props.xScaleSet;
          var yScaleSet = _props.yScaleSet;
    
          // for building symbols in brush, set to circle and size to 4
    
          if (brushSymbol) {
            symbol = 'circle';
            symbolSize = 4;
          }
    
          return _react2.default.createElement(
            'g',
            null,
            dataset.map(function (dot) {
              var symbol = dot.symbol ? dot.symbol : defaultSymbol;
              var symbolSize = dot.symbolSize ? dot.symbolSize : defaultSymbolSize;
    
              return dot.data.map(function (d) {
                var symbolFunc = _d3Shape2.default.symbol().size(symbolSize * symbolSize).type(function () {
                  console.log(symbol);
    
                  if (symbol === 'circle') {
                    return _d3Shape2.default.symbolCircle;
                  } else if (symbol === 'cross') {
                    return _d3Shape2.default.symbolCross;
                  } else if (symbol === 'diamond') {
                    return _d3Shape2.default.symbolDiamond;
                  } else if (symbol === 'square') {
                    return _d3Shape2.default.symbolSquare;
                  } else if (symbol === 'star') {
                    return _d3Shape2.default.symbolStar;
                  } else if (symbol === 'triangle') {
                    return _d3Shape2.default.symbolTriangle;
                  } else if (symbol === 'wye') {
                    return _d3Shape2.default.symbolWye;
                  } else {
                    console.error('Symbol is not support ' + symbol + '.');
                  }
                });
    
                return _react2.default.createElement('path', {
                  className: 'react-d3-basic__scatter__path',
                  fill: d.color,
                  transform: "translate(" + xScaleSet(d.x) + "," + yScaleSet(d.y) + ")",
                  d: symbolFunc(),
                  style: dot.style
                });
              });
            })
          );
        }
      }, {
        key: 'render',
        value: function render() {
          var d = (0, _series.series)(this.props);
          var scatter = this._mkScatter(d);
    
          return _react2.default.createElement(
            'g',
            null,
            scatter
          );
        }
      }]);
    
      return Scatter;
    }(_react.Component);
    
    Scatter.defaultProps = {
      defaultSymbol: 'circle',
      defaultSymbolSize: 10,
      scatterClassName: 'react-d3-basic__scatter'
    };
    exports.default = Scatter;

/***/ },
/* 502 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.pieProps = exports.horizontalProps = undefined;
    
    var _d3Scale = __webpack_require__(445);
    
    var _d3Scale2 = _interopRequireDefault(_d3Scale);
    
    var _d3Array = __webpack_require__(446);
    
    var _d3Array2 = _interopRequireDefault(_d3Array);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var width = 960;
    var height = 500;
    var margins = { top: 40, right: 100, bottom: 40, left: 100 };
    
    exports.default = {
      width: width,
      height: height,
      margins: margins,
      y: function y(d) {
        return +d;
      },
      xScale: 'linear',
      yScale: 'linear',
      showXGrid: true,
      showYGrid: true,
      showLegend: true
    };
    var horizontalProps = exports.horizontalProps = {
      width: width,
      height: height,
      margins: margins,
      x: function x(d) {
        return +d;
      },
      xScale: 'linear',
      yScale: 'linear',
      showXGrid: true,
      showYGrid: true,
      showLegend: true
    };
    
    var pieProps = exports.pieProps = {
      width: width,
      height: height,
      margins: margins,
      innerRadius: 0,
      categoricalColors: _d3Scale2.default.scaleCategory10(),
      pieSort: _d3Array2.default.descending
    };

/***/ },
/* 503 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var AreaChart = function (_Component) {
      _inherits(AreaChart, _Component);
    
      function AreaChart(props) {
        _classCallCheck(this, AreaChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(AreaChart).call(this, props));
      }
    
      _createClass(AreaChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries
              }),
              _react2.default.createElement(_reactD3Shape.Area, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return AreaChart;
    }(_react.Component);
    
    AreaChart.defaultProps = _extends({
      showScatter: false
    }, _commonProps2.default);
    AreaChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = AreaChart;
    module.exports = exports['default'];

/***/ },
/* 504 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var ScatterPlot = function (_Component) {
      _inherits(ScatterPlot, _Component);
    
      function ScatterPlot(props) {
        _classCallCheck(this, ScatterPlot);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(ScatterPlot).call(this, props));
      }
    
      _createClass(ScatterPlot, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries
              }),
              _react2.default.createElement(_reactD3Shape.Scatter, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return ScatterPlot;
    }(_react.Component);
    
    ScatterPlot.defaultProps = _commonProps2.default;
    ScatterPlot.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = ScatterPlot;
    module.exports = exports['default'];

/***/ },
/* 505 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarChart = function (_Component) {
      _inherits(BarChart, _Component);
    
      function BarChart(props) {
        _classCallCheck(this, BarChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarChart).call(this, props));
      }
    
      _createClass(BarChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries
              }),
              _react2.default.createElement(_reactD3Shape.Bar, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return BarChart;
    }(_react.Component);
    
    BarChart.defaultProps = _extends({
      onMouseOver: function onMouseOver() {},
      onMouseOut: function onMouseOut() {}
    }, _commonProps2.default);
    BarChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = BarChart;
    module.exports = exports['default'];

/***/ },
/* 506 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarHorizontalChart = function (_Component) {
      _inherits(BarHorizontalChart, _Component);
    
      function BarHorizontalChart(props) {
        _classCallCheck(this, BarHorizontalChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarHorizontalChart).call(this, props));
      }
    
      _createClass(BarHorizontalChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries,
                horizontal: true
              }),
              _react2.default.createElement(_reactD3Shape.BarHorizontal, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return BarHorizontalChart;
    }(_react.Component);
    
    BarHorizontalChart.defaultProps = _extends({
      onMouseOver: function onMouseOver() {},
      onMouseOut: function onMouseOut() {}
    }, _commonProps.horizontalProps);
    BarHorizontalChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = BarHorizontalChart;
    module.exports = exports['default'];

/***/ },
/* 507 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarGroupChart = function (_Component) {
      _inherits(BarGroupChart, _Component);
    
      function BarGroupChart(props) {
        _classCallCheck(this, BarGroupChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarGroupChart).call(this, props));
      }
    
      _createClass(BarGroupChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries
              }),
              _react2.default.createElement(_reactD3Shape.BarGroup, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return BarGroupChart;
    }(_react.Component);
    
    BarGroupChart.defaultProps = _extends({
      onMouseOver: function onMouseOver() {},
      onMouseOut: function onMouseOut() {}
    }, _commonProps2.default);
    BarGroupChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = BarGroupChart;
    module.exports = exports['default'];

/***/ },
/* 508 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarGroupHorizontalChart = function (_Component) {
      _inherits(BarGroupHorizontalChart, _Component);
    
      function BarGroupHorizontalChart(props) {
        _classCallCheck(this, BarGroupHorizontalChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarGroupHorizontalChart).call(this, props));
      }
    
      _createClass(BarGroupHorizontalChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries,
                horizontal: true
              }),
              _react2.default.createElement(_reactD3Shape.BarGroupHorizontal, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return BarGroupHorizontalChart;
    }(_react.Component);
    
    BarGroupHorizontalChart.defaultProps = _extends({
      onMouseOver: function onMouseOver() {},
      onMouseOut: function onMouseOut() {}
    }, _commonProps.horizontalProps);
    BarGroupHorizontalChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = BarGroupHorizontalChart;
    module.exports = exports['default'];

/***/ },
/* 509 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var AreaStackChart = function (_Component) {
      _inherits(AreaStackChart, _Component);
    
      function AreaStackChart(props) {
        _classCallCheck(this, AreaStackChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(AreaStackChart).call(this, props));
      }
    
      _createClass(AreaStackChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries,
                stack: true
              }),
              _react2.default.createElement(_reactD3Shape.AreaStack, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return AreaStackChart;
    }(_react.Component);
    
    AreaStackChart.defaultProps = _commonProps2.default;
    AreaStackChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = AreaStackChart;
    module.exports = exports['default'];

/***/ },
/* 510 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    var _commonProps2 = _interopRequireDefault(_commonProps);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarStackChart = function (_Component) {
      _inherits(BarStackChart, _Component);
    
      function BarStackChart(props) {
        _classCallCheck(this, BarStackChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarStackChart).call(this, props));
      }
    
      _createClass(BarStackChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries,
                stack: true
              }),
              _react2.default.createElement(_reactD3Shape.BarStack, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return BarStackChart;
    }(_react.Component);
    
    BarStackChart.defaultProps = _extends({
      onMouseOver: function onMouseOver() {},
      onMouseOut: function onMouseOut() {}
    }, _commonProps2.default);
    BarStackChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = BarStackChart;
    module.exports = exports['default'];

/***/ },
/* 511 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    var _commonProps = __webpack_require__(502);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var BarStackChart = function (_Component) {
      _inherits(BarStackChart, _Component);
    
      function BarStackChart(props) {
        _classCallCheck(this, BarStackChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(BarStackChart).call(this, props));
      }
    
      _createClass(BarStackChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var showXGrid = _props.showXGrid;
          var showYGrid = _props.showYGrid;
          var showLegend = _props.showLegend;
          var categoricalColors = _props.categoricalColors;
    
    
          var xgrid, ygrid;
    
          if (showXGrid) xgrid = _react2.default.createElement(_reactD3Core.Xgrid, null);
          if (showYGrid) ygrid = _react2.default.createElement(_reactD3Core.Ygrid, null);
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.Chart,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries,
                stack: true,
                horizontal: true
              }),
              _react2.default.createElement(_reactD3Shape.BarStackHorizontal, {
                chartSeries: chartSeries
              }),
              xgrid,
              ygrid,
              _react2.default.createElement(_reactD3Core.Xaxis, null),
              _react2.default.createElement(_reactD3Core.Yaxis, null),
              this.props.children
            )
          );
        }
      }]);
    
      return BarStackChart;
    }(_react.Component);
    
    BarStackChart.defaultProps = _extends({
      onMouseOver: function onMouseOver() {},
      onMouseOut: function onMouseOut() {}
    }, _commonProps.horizontalProps);
    BarStackChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      margins: _react.PropTypes.object.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired
    };
    exports.default = BarStackChart;
    module.exports = exports['default'];

/***/ },
/* 512 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactD3Core = __webpack_require__(441);
    
    var _reactD3Shape = __webpack_require__(483);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var PieChart = function (_Component) {
      _inherits(PieChart, _Component);
    
      function PieChart(props) {
        _classCallCheck(this, PieChart);
    
        return _possibleConstructorReturn(this, Object.getPrototypeOf(PieChart).call(this, props));
      }
    
      _createClass(PieChart, [{
        key: 'render',
        value: function render() {
          var _props = this.props;
          var width = _props.width;
          var height = _props.height;
          var margins = _props.margins;
          var data = _props.data;
          var chartSeries = _props.chartSeries;
          var value = _props.value;
          var name = _props.name;
          var categoricalColors = _props.categoricalColors;
          var showLegend = _props.showLegend;
    
    
          return _react2.default.createElement(
            'div',
            null,
            showLegend ? _react2.default.createElement(_reactD3Core.Legend, _extends({}, this.props, {
              width: width,
              margins: margins,
              chartSeries: chartSeries,
              categoricalColors: categoricalColors
            })) : null,
            _react2.default.createElement(
              _reactD3Shape.ChartPie,
              _extends({}, this.props, {
                width: width,
                height: height,
                data: data,
                chartSeries: chartSeries,
                value: value,
                name: name
              }),
              _react2.default.createElement(_reactD3Shape.Pie, _extends({}, this.props, {
                chartSeries: chartSeries
              })),
              this.props.children
            )
          );
        }
      }]);
    
      return PieChart;
    }(_react.Component);
    
    PieChart.defaultProps = {
      onMouseOver: function onMouseOver() {},
      onMouseOut: function onMouseOut() {},
      showLegend: true
    };
    PieChart.propTypes = {
      width: _react.PropTypes.number.isRequired,
      height: _react.PropTypes.number.isRequired,
      data: _react.PropTypes.array.isRequired,
      chartSeries: _react.PropTypes.array.isRequired,
      value: _react.PropTypes.func.isRequired,
      name: _react.PropTypes.func.isRequired
    };
    exports.default = PieChart;
    module.exports = exports['default'];

/***/ },
/* 513 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.ACTIVE_STAGE = exports.JSON_URL = exports.FAILED_GEOJSON = exports.RECIEVE_GEOJSON = exports.LOADING_GEOJSON = exports.LOAD_GEOJSON = undefined;
    
    var _assign = __webpack_require__(514);
    
    var _assign2 = _interopRequireDefault(_assign);
    
    exports.loadingGeojson = loadingGeojson;
    exports.recieveGeojson = recieveGeojson;
    exports.failedGeojson = failedGeojson;
    exports.loadGeojson = loadGeojson;
    exports.activeStage = activeStage;
    
    var _isomorphicFetch = __webpack_require__(518);
    
    var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);
    
    var _turfDistance = __webpack_require__(520);
    
    var _turfDistance2 = _interopRequireDefault(_turfDistance);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    // ------------------------------------
    // Constants
    // ------------------------------------
    var LOAD_GEOJSON = exports.LOAD_GEOJSON = 'LOAD_GEOJSON';
    var LOADING_GEOJSON = exports.LOADING_GEOJSON = 'LOADING_GEOJSON';
    var RECIEVE_GEOJSON = exports.RECIEVE_GEOJSON = 'RECIEVE_GEOJSON';
    var FAILED_GEOJSON = exports.FAILED_GEOJSON = 'FAILED_GEOJSON';
    var JSON_URL = exports.JSON_URL = 'https://gist.githubusercontent.com/abkfenris/d979f32ffcda7e528031/raw/map.geojson'; //eslint-disable-line
    var ACTIVE_STAGE = exports.ACTIVE_STAGE = 'ACTIVE_STAGE';
    
    // ------------------------------------
    // Actions
    // ------------------------------------
    function loadingGeojson() {
      return {
        type: LOADING_GEOJSON
      };
    }
    
    function recieveGeojson(json) {
      return {
        type: RECIEVE_GEOJSON,
        json: json
      };
    }
    
    function failedGeojson(exception) {
      return {
        type: FAILED_GEOJSON,
        exception: exception
      };
    }
    
    function loadGeojson() {
      return function (dispatch) {
        // inform app that we are attempting to load
        dispatch(loadingGeojson());
        return (0, _isomorphicFetch2.default)(JSON_URL).then(function (response) {
          return response.json();
        }).then(function (json) {
          return (
            // update state with new geojson
            dispatch(recieveGeojson(json))
          );
        }).catch(function (exception) {
          return dispatch(failedGeojson(exception));
        });
      };
    }
    
    function activeStage(stage) {
      return {
        type: ACTIVE_STAGE,
        stage: stage
      };
    }
    
    // ------------------------------------
    // Action Handlers
    // ------------------------------------
    
    // ------------------------------------
    // Geojson sorter
    // ------------------------------------
    
    var geojsonCompare = function geojsonCompare(a, b) {
      if (a.properties.stage < b.properties.stage) {
        return -1;
      } else if (a.properties.stage > b.properties.stage) {
        return 1;
      } else {
        return 0;
      }
    };
    
    // ------------------------------------
    // Geojson elevations along distance
    // ------------------------------------
    
    var makePoint = function makePoint(coordinates) {
      return { type: 'Feature',
        geometry: {
          type: 'Point',
          coordinates: coordinates
        }
      };
    };
    
    var lineDistanceElevation = function lineDistanceElevation(coordinates_array) {
      var output = [];
      var dist = 0;
      for (var i = 0; i < coordinates_array.length; i++) {
        if (i === 0) {
          output.push({ x: 0, y: coordinates_array[i][2] });
        } else {
          var pointA = makePoint(coordinates_array[i - 1]);
          var pointB = makePoint(coordinates_array[i]);
          var distanceAB = (0, _turfDistance2.default)(pointA, pointB, 'miles');
          dist = dist + distanceAB;
          output.push({ x: dist, y: coordinates_array[i][2] });
        }
      }
      return output;
    };
    
    // ------------------------------------
    // Reducer
    // ------------------------------------
    var initialState = {};
    var geojsonReducer = function geojsonReducer() {
      var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
      var action = arguments[1];
    
      switch (action.type) {
        case LOADING_GEOJSON:
          return (0, _assign2.default)({}, state, { loading: true });
        case RECIEVE_GEOJSON:
          var features = action.json.features.map(function (feature, index) {
            // add display, highlight, and id properties to each feature
            var new_properties;
            if (feature.geometry.type === 'LineString') {
              var elevations = lineDistanceElevation(feature.geometry.coordinates);
              new_properties = {
                display: true,
                highlight: false,
                stage: parseFloat(feature.properties.stage),
                elevations: elevations
              };
            } else {
              new_properties = {
                display: true,
                highlight: false,
                id: index, stage: parseFloat(feature.properties.stage),
                elevation: feature.geometry.coordinates[2] };
            }
            return (0, _assign2.default)({}, feature, { properties: (0, _assign2.default)({}, feature.properties, new_properties) });
          });
          features.sort(geojsonCompare);
          return (0, _assign2.default)({}, action.json, { features: features });
        case FAILED_GEOJSON:
          console.log(action.exception);
          return (0, _assign2.default)({}, state, { loading: false, failed: true });
        case ACTIVE_STAGE:
          var active_features = state.features.map(function (feature) {
            var new_properties;
            if (feature.properties.stage === action.stage) {
              new_properties = (0, _assign2.default)({}, feature.properties, { highlight: true });
            } else {
              new_properties = (0, _assign2.default)({}, feature.properties, { highlight: false });
            }
            return (0, _assign2.default)({}, feature, { properties: new_properties });
          });
          return (0, _assign2.default)({}, state, { features: active_features });
        case LOAD_GEOJSON:
        default:
          return state;
      }
    };
    
    exports.default = geojsonReducer;

/***/ },
/* 514 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(515), __esModule: true };

/***/ },
/* 515 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(516);
    module.exports = __webpack_require__(174).Object.assign;

/***/ },
/* 516 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.3.1 Object.assign(target, source)
    var $export = __webpack_require__(173);
    
    $export($export.S + $export.F, 'Object', {assign: __webpack_require__(517)});

/***/ },
/* 517 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    // 19.1.2.1 Object.assign(target, source, ...)
    var getKeys  = __webpack_require__(206)
      , gOPS     = __webpack_require__(230)
      , pIE      = __webpack_require__(231)
      , toObject = __webpack_require__(164)
      , IObject  = __webpack_require__(209)
      , $assign  = Object.assign;
    
    // should work with symbols and should have deterministic property order (V8 bug)
    module.exports = !$assign || __webpack_require__(183)(function(){
      var A = {}
        , B = {}
        , S = Symbol()
        , K = 'abcdefghijklmnopqrst';
      A[S] = 7;
      K.split('').forEach(function(k){ B[k] = k; });
      return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
    }) ? function assign(target, source){ // eslint-disable-line no-unused-vars
      var T     = toObject(target)
        , aLen  = arguments.length
        , index = 1
        , getSymbols = gOPS.f
        , isEnum     = pIE.f;
      while(aLen > index){
        var S      = IObject(arguments[index++])
          , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
          , length = keys.length
          , j      = 0
          , key;
        while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
      } return T;
    } : $assign;

/***/ },
/* 518 */
/***/ function(module, exports, __webpack_require__) {

    // the whatwg-fetch polyfill installs the fetch() function
    // on the global object (window or self)
    //
    // Return that as the export for use in Webpack, Browserify etc.
    __webpack_require__(519);
    module.exports = self.fetch.bind(self);


/***/ },
/* 519 */
/***/ function(module, exports) {

    (function(self) {
      'use strict';
    
      if (self.fetch) {
        return
      }
    
      var support = {
        searchParams: 'URLSearchParams' in self,
        iterable: 'Symbol' in self && 'iterator' in Symbol,
        blob: 'FileReader' in self && 'Blob' in self && (function() {
          try {
            new Blob()
            return true
          } catch(e) {
            return false
          }
        })(),
        formData: 'FormData' in self,
        arrayBuffer: 'ArrayBuffer' in self
      }
    
      if (support.arrayBuffer) {
        var viewClasses = [
          '[object Int8Array]',
          '[object Uint8Array]',
          '[object Uint8ClampedArray]',
          '[object Int16Array]',
          '[object Uint16Array]',
          '[object Int32Array]',
          '[object Uint32Array]',
          '[object Float32Array]',
          '[object Float64Array]'
        ]
    
        var isDataView = function(obj) {
          return obj && DataView.prototype.isPrototypeOf(obj)
        }
    
        var isArrayBufferView = ArrayBuffer.isView || function(obj) {
          return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
        }
      }
    
      function normalizeName(name) {
        if (typeof name !== 'string') {
          name = String(name)
        }
        if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
          throw new TypeError('Invalid character in header field name')
        }
        return name.toLowerCase()
      }
    
      function normalizeValue(value) {
        if (typeof value !== 'string') {
          value = String(value)
        }
        return value
      }
    
      // Build a destructive iterator for the value list
      function iteratorFor(items) {
        var iterator = {
          next: function() {
            var value = items.shift()
            return {done: value === undefined, value: value}
          }
        }
    
        if (support.iterable) {
          iterator[Symbol.iterator] = function() {
            return iterator
          }
        }
    
        return iterator
      }
    
      function Headers(headers) {
        this.map = {}
    
        if (headers instanceof Headers) {
          headers.forEach(function(value, name) {
            this.append(name, value)
          }, this)
        } else if (Array.isArray(headers)) {
          headers.forEach(function(header) {
            this.append(header[0], header[1])
          }, this)
        } else if (headers) {
          Object.getOwnPropertyNames(headers).forEach(function(name) {
            this.append(name, headers[name])
          }, this)
        }
      }
    
      Headers.prototype.append = function(name, value) {
        name = normalizeName(name)
        value = normalizeValue(value)
        var oldValue = this.map[name]
        this.map[name] = oldValue ? oldValue+','+value : value
      }
    
      Headers.prototype['delete'] = function(name) {
        delete this.map[normalizeName(name)]
      }
    
      Headers.prototype.get = function(name) {
        name = normalizeName(name)
        return this.has(name) ? this.map[name] : null
      }
    
      Headers.prototype.has = function(name) {
        return this.map.hasOwnProperty(normalizeName(name))
      }
    
      Headers.prototype.set = function(name, value) {
        this.map[normalizeName(name)] = normalizeValue(value)
      }
    
      Headers.prototype.forEach = function(callback, thisArg) {
        for (var name in this.map) {
          if (this.map.hasOwnProperty(name)) {
            callback.call(thisArg, this.map[name], name, this)
          }
        }
      }
    
      Headers.prototype.keys = function() {
        var items = []
        this.forEach(function(value, name) { items.push(name) })
        return iteratorFor(items)
      }
    
      Headers.prototype.values = function() {
        var items = []
        this.forEach(function(value) { items.push(value) })
        return iteratorFor(items)
      }
    
      Headers.prototype.entries = function() {
        var items = []
        this.forEach(function(value, name) { items.push([name, value]) })
        return iteratorFor(items)
      }
    
      if (support.iterable) {
        Headers.prototype[Symbol.iterator] = Headers.prototype.entries
      }
    
      function consumed(body) {
        if (body.bodyUsed) {
          return Promise.reject(new TypeError('Already read'))
        }
        body.bodyUsed = true
      }
    
      function fileReaderReady(reader) {
        return new Promise(function(resolve, reject) {
          reader.onload = function() {
            resolve(reader.result)
          }
          reader.onerror = function() {
            reject(reader.error)
          }
        })
      }
    
      function readBlobAsArrayBuffer(blob) {
        var reader = new FileReader()
        var promise = fileReaderReady(reader)
        reader.readAsArrayBuffer(blob)
        return promise
      }
    
      function readBlobAsText(blob) {
        var reader = new FileReader()
        var promise = fileReaderReady(reader)
        reader.readAsText(blob)
        return promise
      }
    
      function readArrayBufferAsText(buf) {
        var view = new Uint8Array(buf)
        var chars = new Array(view.length)
    
        for (var i = 0; i < view.length; i++) {
          chars[i] = String.fromCharCode(view[i])
        }
        return chars.join('')
      }
    
      function bufferClone(buf) {
        if (buf.slice) {
          return buf.slice(0)
        } else {
          var view = new Uint8Array(buf.byteLength)
          view.set(new Uint8Array(buf))
          return view.buffer
        }
      }
    
      function Body() {
        this.bodyUsed = false
    
        this._initBody = function(body) {
          this._bodyInit = body
          if (!body) {
            this._bodyText = ''
          } else if (typeof body === 'string') {
            this._bodyText = body
          } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
            this._bodyBlob = body
          } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
            this._bodyFormData = body
          } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
            this._bodyText = body.toString()
          } else if (support.arrayBuffer && support.blob && isDataView(body)) {
            this._bodyArrayBuffer = bufferClone(body.buffer)
            // IE 10-11 can't handle a DataView body.
            this._bodyInit = new Blob([this._bodyArrayBuffer])
          } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
            this._bodyArrayBuffer = bufferClone(body)
          } else {
            throw new Error('unsupported BodyInit type')
          }
    
          if (!this.headers.get('content-type')) {
            if (typeof body === 'string') {
              this.headers.set('content-type', 'text/plain;charset=UTF-8')
            } else if (this._bodyBlob && this._bodyBlob.type) {
              this.headers.set('content-type', this._bodyBlob.type)
            } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
              this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')
            }
          }
        }
    
        if (support.blob) {
          this.blob = function() {
            var rejected = consumed(this)
            if (rejected) {
              return rejected
            }
    
            if (this._bodyBlob) {
              return Promise.resolve(this._bodyBlob)
            } else if (this._bodyArrayBuffer) {
              return Promise.resolve(new Blob([this._bodyArrayBuffer]))
            } else if (this._bodyFormData) {
              throw new Error('could not read FormData body as blob')
            } else {
              return Promise.resolve(new Blob([this._bodyText]))
            }
          }
    
          this.arrayBuffer = function() {
            if (this._bodyArrayBuffer) {
              return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
            } else {
              return this.blob().then(readBlobAsArrayBuffer)
            }
          }
        }
    
        this.text = function() {
          var rejected = consumed(this)
          if (rejected) {
            return rejected
          }
    
          if (this._bodyBlob) {
            return readBlobAsText(this._bodyBlob)
          } else if (this._bodyArrayBuffer) {
            return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
          } else if (this._bodyFormData) {
            throw new Error('could not read FormData body as text')
          } else {
            return Promise.resolve(this._bodyText)
          }
        }
    
        if (support.formData) {
          this.formData = function() {
            return this.text().then(decode)
          }
        }
    
        this.json = function() {
          return this.text().then(JSON.parse)
        }
    
        return this
      }
    
      // HTTP methods whose capitalization should be normalized
      var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']
    
      function normalizeMethod(method) {
        var upcased = method.toUpperCase()
        return (methods.indexOf(upcased) > -1) ? upcased : method
      }
    
      function Request(input, options) {
        options = options || {}
        var body = options.body
    
        if (input instanceof Request) {
          if (input.bodyUsed) {
            throw new TypeError('Already read')
          }
          this.url = input.url
          this.credentials = input.credentials
          if (!options.headers) {
            this.headers = new Headers(input.headers)
          }
          this.method = input.method
          this.mode = input.mode
          if (!body && input._bodyInit != null) {
            body = input._bodyInit
            input.bodyUsed = true
          }
        } else {
          this.url = String(input)
        }
    
        this.credentials = options.credentials || this.credentials || 'omit'
        if (options.headers || !this.headers) {
          this.headers = new Headers(options.headers)
        }
        this.method = normalizeMethod(options.method || this.method || 'GET')
        this.mode = options.mode || this.mode || null
        this.referrer = null
    
        if ((this.method === 'GET' || this.method === 'HEAD') && body) {
          throw new TypeError('Body not allowed for GET or HEAD requests')
        }
        this._initBody(body)
      }
    
      Request.prototype.clone = function() {
        return new Request(this, { body: this._bodyInit })
      }
    
      function decode(body) {
        var form = new FormData()
        body.trim().split('&').forEach(function(bytes) {
          if (bytes) {
            var split = bytes.split('=')
            var name = split.shift().replace(/\+/g, ' ')
            var value = split.join('=').replace(/\+/g, ' ')
            form.append(decodeURIComponent(name), decodeURIComponent(value))
          }
        })
        return form
      }
    
      function parseHeaders(rawHeaders) {
        var headers = new Headers()
        rawHeaders.split(/\r?\n/).forEach(function(line) {
          var parts = line.split(':')
          var key = parts.shift().trim()
          if (key) {
            var value = parts.join(':').trim()
            headers.append(key, value)
          }
        })
        return headers
      }
    
      Body.call(Request.prototype)
    
      function Response(bodyInit, options) {
        if (!options) {
          options = {}
        }
    
        this.type = 'default'
        this.status = 'status' in options ? options.status : 200
        this.ok = this.status >= 200 && this.status < 300
        this.statusText = 'statusText' in options ? options.statusText : 'OK'
        this.headers = new Headers(options.headers)
        this.url = options.url || ''
        this._initBody(bodyInit)
      }
    
      Body.call(Response.prototype)
    
      Response.prototype.clone = function() {
        return new Response(this._bodyInit, {
          status: this.status,
          statusText: this.statusText,
          headers: new Headers(this.headers),
          url: this.url
        })
      }
    
      Response.error = function() {
        var response = new Response(null, {status: 0, statusText: ''})
        response.type = 'error'
        return response
      }
    
      var redirectStatuses = [301, 302, 303, 307, 308]
    
      Response.redirect = function(url, status) {
        if (redirectStatuses.indexOf(status) === -1) {
          throw new RangeError('Invalid status code')
        }
    
        return new Response(null, {status: status, headers: {location: url}})
      }
    
      self.Headers = Headers
      self.Request = Request
      self.Response = Response
    
      self.fetch = function(input, init) {
        return new Promise(function(resolve, reject) {
          var request = new Request(input, init)
          var xhr = new XMLHttpRequest()
    
          xhr.onload = function() {
            var options = {
              status: xhr.status,
              statusText: xhr.statusText,
              headers: parseHeaders(xhr.getAllResponseHeaders() || '')
            }
            options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')
            var body = 'response' in xhr ? xhr.response : xhr.responseText
            resolve(new Response(body, options))
          }
    
          xhr.onerror = function() {
            reject(new TypeError('Network request failed'))
          }
    
          xhr.ontimeout = function() {
            reject(new TypeError('Network request failed'))
          }
    
          xhr.open(request.method, request.url, true)
    
          if (request.credentials === 'include') {
            xhr.withCredentials = true
          }
    
          if ('responseType' in xhr && support.blob) {
            xhr.responseType = 'blob'
          }
    
          request.headers.forEach(function(value, name) {
            xhr.setRequestHeader(name, value)
          })
    
          xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)
        })
      }
      self.fetch.polyfill = true
    })(typeof self !== 'undefined' ? self : this);


/***/ },
/* 520 */
/***/ function(module, exports, __webpack_require__) {

    var invariant = __webpack_require__(521);
    //http://en.wikipedia.org/wiki/Haversine_formula
    //http://www.movable-type.co.uk/scripts/latlong.html
    
    /**
     * Calculates the distance between two {@link Point|points} in degress, radians,
     * miles, or kilometers. This uses the
     * [Haversine formula](http://en.wikipedia.org/wiki/Haversine_formula)
     * to account for global curvature.
     *
     * @module turf/distance
     * @category measurement
     * @param {Feature<Point>} from origin point
     * @param {Feature<Point>} to destination point
     * @param {String} [units=kilometers] can be degrees, radians, miles, or kilometers
     * @return {Number} distance between the two points
     * @example
     * var point1 = {
     *   "type": "Feature",
     *   "properties": {},
     *   "geometry": {
     *     "type": "Point",
     *     "coordinates": [-75.343, 39.984]
     *   }
     * };
     * var point2 = {
     *   "type": "Feature",
     *   "properties": {},
     *   "geometry": {
     *     "type": "Point",
     *     "coordinates": [-75.534, 39.123]
     *   }
     * };
     * var units = "miles";
     *
     * var points = {
     *   "type": "FeatureCollection",
     *   "features": [point1, point2]
     * };
     *
     * //=points
     *
     * var distance = turf.distance(point1, point2, units);
     *
     * //=distance
     */
    module.exports = function(point1, point2, units) {
      invariant.featureOf(point1, 'Point', 'distance');
      invariant.featureOf(point2, 'Point', 'distance');
      var coordinates1 = point1.geometry.coordinates;
      var coordinates2 = point2.geometry.coordinates;
    
      var dLat = toRad(coordinates2[1] - coordinates1[1]);
      var dLon = toRad(coordinates2[0] - coordinates1[0]);
      var lat1 = toRad(coordinates1[1]);
      var lat2 = toRad(coordinates2[1]);
    
      var a = Math.pow(Math.sin(dLat/2), 2) +
              Math.pow(Math.sin(dLon/2), 2) * Math.cos(lat1) * Math.cos(lat2);
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    
      var R;
      switch(units) {
        case 'miles':
          R = 3960;
          break;
        case 'kilometers':
        case 'kilometres':
          R = 6373;
          break;
        case 'degrees':
          R = 57.2957795;
          break;
        case 'radians':
          R = 1;
          break;
        case undefined:
          R = 6373;
          break;
        default:
          throw new Error('unknown option given to "units"');
      }
    
      var distance = R * c;
      return distance;
    };
    
    function toRad(degree) {
      return degree * Math.PI / 180;
    }


/***/ },
/* 521 */
/***/ function(module, exports) {

    module.exports.geojsonType = geojsonType;
    module.exports.collectionOf = collectionOf;
    module.exports.featureOf = featureOf;
    
    /**
     * Enforce expectations about types of GeoJSON objects for Turf.
     *
     * @alias geojsonType
     * @param {GeoJSON} value any GeoJSON object
     * @param {string} type expected GeoJSON type
     * @param {String} name name of calling function
     * @throws Error if value is not the expected type.
     */
    function geojsonType(value, type, name) {
        if (!type || !name) throw new Error('type and name required');
    
        if (!value || value.type !== type) {
            throw new Error('Invalid input to ' + name + ': must be a ' + type + ', given ' + value.type);
        }
    }
    
    /**
     * Enforce expectations about types of {@link Feature} inputs for Turf.
     * Internally this uses {@link geojsonType} to judge geometry types.
     *
     * @alias featureOf
     * @param {Feature} feature a feature with an expected geometry type
     * @param {string} type expected GeoJSON type
     * @param {String} name name of calling function
     * @throws Error if value is not the expected type.
     */
    function featureOf(value, type, name) {
        if (!name) throw new Error('.featureOf() requires a name');
        if (!value || value.type !== 'Feature' || !value.geometry) {
            throw new Error('Invalid input to ' + name + ', Feature with geometry required');
        }
        if (!value.geometry || value.geometry.type !== type) {
            throw new Error('Invalid input to ' + name + ': must be a ' + type + ', given ' + value.geometry.type);
        }
    }
    
    /**
     * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
     * Internally this uses {@link geojsonType} to judge geometry types.
     *
     * @alias collectionOf
     * @param {FeatureCollection} featurecollection a featurecollection for which features will be judged
     * @param {string} type expected GeoJSON type
     * @param {String} name name of calling function
     * @throws Error if value is not the expected type.
     */
    function collectionOf(value, type, name) {
        if (!name) throw new Error('.collectionOf() requires a name');
        if (!value || value.type !== 'FeatureCollection') {
            throw new Error('Invalid input to ' + name + ', FeatureCollection required');
        }
        for (var i = 0; i < value.features.length; i++) {
            var feature = value.features[i];
            if (!feature || feature.type !== 'Feature' || !feature.geometry) {
                throw new Error('Invalid input to ' + name + ', Feature with geometry required');
            }
            if (!feature.geometry || feature.geometry.type !== type) {
                throw new Error('Invalid input to ' + name + ': must be a ' + type + ', given ' + feature.geometry.type);
            }
        }
    }


/***/ },
/* 522 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reduxDevtools = __webpack_require__(523);
    
    var _reduxDevtoolsLogMonitor = __webpack_require__(535);
    
    var _reduxDevtoolsLogMonitor2 = _interopRequireDefault(_reduxDevtoolsLogMonitor);
    
    var _reduxDevtoolsDockMonitor = __webpack_require__(634);
    
    var _reduxDevtoolsDockMonitor2 = _interopRequireDefault(_reduxDevtoolsDockMonitor);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = (0, _reduxDevtools.createDevTools)(_react2.default.createElement(
      _reduxDevtoolsDockMonitor2.default,
      {
        toggleVisibilityKey: 'ctrl-h',
        changePositionKey: 'ctrl-q' },
      _react2.default.createElement(_reduxDevtoolsLogMonitor2.default, null)
    ));

/***/ },
/* 523 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _reduxDevtoolsInstrument = __webpack_require__(524);
    
    Object.defineProperty(exports, 'instrument', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_reduxDevtoolsInstrument).default;
      }
    });
    Object.defineProperty(exports, 'ActionCreators', {
      enumerable: true,
      get: function get() {
        return _reduxDevtoolsInstrument.ActionCreators;
      }
    });
    Object.defineProperty(exports, 'ActionTypes', {
      enumerable: true,
      get: function get() {
        return _reduxDevtoolsInstrument.ActionTypes;
      }
    });
    
    var _persistState = __webpack_require__(529);
    
    Object.defineProperty(exports, 'persistState', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_persistState).default;
      }
    });
    
    var _createDevTools = __webpack_require__(534);
    
    Object.defineProperty(exports, 'createDevTools', {
      enumerable: true,
      get: function get() {
        return _interopRequireDefault(_createDevTools).default;
      }
    });
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/***/ },
/* 524 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    exports.INIT_ACTION = exports.ActionCreators = exports.ActionTypes = undefined;
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
    
    exports.liftAction = liftAction;
    exports.liftReducerWith = liftReducerWith;
    exports.unliftState = unliftState;
    exports.unliftStore = unliftStore;
    exports.default = instrument;
    
    var _difference = __webpack_require__(394);
    
    var _difference2 = _interopRequireDefault(_difference);
    
    var _union = __webpack_require__(525);
    
    var _union2 = _interopRequireDefault(_union);
    
    var _isPlainObject = __webpack_require__(417);
    
    var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
    
    var _symbolObservable = __webpack_require__(419);
    
    var _symbolObservable2 = _interopRequireDefault(_symbolObservable);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var ActionTypes = exports.ActionTypes = {
      PERFORM_ACTION: 'PERFORM_ACTION',
      RESET: 'RESET',
      ROLLBACK: 'ROLLBACK',
      COMMIT: 'COMMIT',
      SWEEP: 'SWEEP',
      TOGGLE_ACTION: 'TOGGLE_ACTION',
      SET_ACTIONS_ACTIVE: 'SET_ACTIONS_ACTIVE',
      JUMP_TO_STATE: 'JUMP_TO_STATE',
      JUMP_TO_ACTION: 'JUMP_TO_ACTION',
      REORDER_ACTION: 'REORDER_ACTION',
      IMPORT_STATE: 'IMPORT_STATE',
      LOCK_CHANGES: 'LOCK_CHANGES',
      PAUSE_RECORDING: 'PAUSE_RECORDING'
    };
    
    /**
     * Action creators to change the History state.
     */
    var ActionCreators = exports.ActionCreators = {
      performAction: function performAction(action) {
        if (!(0, _isPlainObject2.default)(action)) {
          throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');
        }
    
        if (typeof action.type === 'undefined') {
          throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?');
        }
    
        return { type: ActionTypes.PERFORM_ACTION, action: action, timestamp: Date.now() };
      },
      reset: function reset() {
        return { type: ActionTypes.RESET, timestamp: Date.now() };
      },
      rollback: function rollback() {
        return { type: ActionTypes.ROLLBACK, timestamp: Date.now() };
      },
      commit: function commit() {
        return { type: ActionTypes.COMMIT, timestamp: Date.now() };
      },
      sweep: function sweep() {
        return { type: ActionTypes.SWEEP };
      },
      toggleAction: function toggleAction(id) {
        return { type: ActionTypes.TOGGLE_ACTION, id: id };
      },
      setActionsActive: function setActionsActive(start, end) {
        var active = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];
    
        return { type: ActionTypes.SET_ACTIONS_ACTIVE, start: start, end: end, active: active };
      },
      reorderAction: function reorderAction(actionId, beforeActionId) {
        return { type: ActionTypes.REORDER_ACTION, actionId: actionId, beforeActionId: beforeActionId };
      },
      jumpToState: function jumpToState(index) {
        return { type: ActionTypes.JUMP_TO_STATE, index: index };
      },
      jumpToAction: function jumpToAction(actionId) {
        return { type: ActionTypes.JUMP_TO_ACTION, actionId: actionId };
      },
      importState: function importState(nextLiftedState, noRecompute) {
        return { type: ActionTypes.IMPORT_STATE, nextLiftedState: nextLiftedState, noRecompute: noRecompute };
      },
      lockChanges: function lockChanges(status) {
        return { type: ActionTypes.LOCK_CHANGES, status: status };
      },
      pauseRecording: function pauseRecording(status) {
        return { type: ActionTypes.PAUSE_RECORDING, status: status };
      }
    };
    
    var INIT_ACTION = exports.INIT_ACTION = { type: '@@INIT' };
    
    /**
     * Computes the next entry with exceptions catching.
     */
    function computeWithTryCatch(reducer, action, state) {
      var nextState = state;
      var nextError = void 0;
      try {
        nextState = reducer(state, action);
      } catch (err) {
        nextError = err.toString();
        if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && (typeof window.chrome !== 'undefined' || typeof window.process !== 'undefined' && window.process.type === 'renderer')) {
          // In Chrome, rethrowing provides better source map support
          setTimeout(function () {
            throw err;
          });
        } else {
          console.error(err);
        }
      }
    
      return {
        state: nextState,
        error: nextError
      };
    }
    
    /**
     * Computes the next entry in the log by applying an action.
     */
    function computeNextEntry(reducer, action, state, shouldCatchErrors) {
      if (!shouldCatchErrors) {
        return { state: reducer(state, action) };
      }
      return computeWithTryCatch(reducer, action, state);
    }
    
    /**
     * Runs the reducer on invalidated actions to get a fresh computation log.
     */
    function recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, shouldCatchErrors) {
      // Optimization: exit early and return the same reference
      // if we know nothing could have changed.
      if (!computedStates || minInvalidatedStateIndex === -1 || minInvalidatedStateIndex >= computedStates.length && computedStates.length === stagedActionIds.length) {
        return computedStates;
      }
    
      var nextComputedStates = computedStates.slice(0, minInvalidatedStateIndex);
      for (var i = minInvalidatedStateIndex; i < stagedActionIds.length; i++) {
        var actionId = stagedActionIds[i];
        var action = actionsById[actionId].action;
    
        var previousEntry = nextComputedStates[i - 1];
        var previousState = previousEntry ? previousEntry.state : committedState;
    
        var shouldSkip = skippedActionIds.indexOf(actionId) > -1;
        var entry = void 0;
        if (shouldSkip) {
          entry = previousEntry;
        } else {
          if (shouldCatchErrors && previousEntry && previousEntry.error) {
            entry = {
              state: previousState,
              error: 'Interrupted by an error up the chain'
            };
          } else {
            entry = computeNextEntry(reducer, action, previousState, shouldCatchErrors);
          }
        }
        nextComputedStates.push(entry);
      }
    
      return nextComputedStates;
    }
    
    /**
     * Lifts an app's action into an action on the lifted store.
     */
    function liftAction(action) {
      return ActionCreators.performAction(action);
    }
    
    /**
     * Creates a history state reducer from an app's reducer.
     */
    function liftReducerWith(reducer, initialCommittedState, monitorReducer, options) {
      var initialLiftedState = {
        monitorState: monitorReducer(undefined, {}),
        nextActionId: 1,
        actionsById: { 0: liftAction(INIT_ACTION) },
        stagedActionIds: [0],
        skippedActionIds: [],
        committedState: initialCommittedState,
        currentStateIndex: 0,
        computedStates: [],
        isLocked: options.shouldStartLocked === true,
        isPaused: options.shouldRecordChanges === false
      };
    
      /**
       * Manages how the history actions modify the history state.
       */
      return function (liftedState, liftedAction) {
        var _ref = liftedState || initialLiftedState;
    
        var monitorState = _ref.monitorState;
        var actionsById = _ref.actionsById;
        var nextActionId = _ref.nextActionId;
        var stagedActionIds = _ref.stagedActionIds;
        var skippedActionIds = _ref.skippedActionIds;
        var committedState = _ref.committedState;
        var currentStateIndex = _ref.currentStateIndex;
        var computedStates = _ref.computedStates;
        var isLocked = _ref.isLocked;
        var isPaused = _ref.isPaused;
    
    
        if (!liftedState) {
          // Prevent mutating initialLiftedState
          actionsById = _extends({}, actionsById);
        }
    
        function commitExcessActions(n) {
          // Auto-commits n-number of excess actions.
          var excess = n;
          var idsToDelete = stagedActionIds.slice(1, excess + 1);
    
          for (var i = 0; i < idsToDelete.length; i++) {
            if (computedStates[i + 1].error) {
              // Stop if error is found. Commit actions up to error.
              excess = i;
              idsToDelete = stagedActionIds.slice(1, excess + 1);
              break;
            } else {
              delete actionsById[idsToDelete[i]];
            }
          }
    
          skippedActionIds = skippedActionIds.filter(function (id) {
            return idsToDelete.indexOf(id) === -1;
          });
          stagedActionIds = [0].concat(stagedActionIds.slice(excess + 1));
          committedState = computedStates[excess].state;
          computedStates = computedStates.slice(excess);
          currentStateIndex = currentStateIndex > excess ? currentStateIndex - excess : 0;
        }
    
        function computePausedAction(shouldInit) {
          var _extends2;
    
          var computedState = void 0;
          if (shouldInit) {
            computedState = computedStates[currentStateIndex];
            monitorState = monitorReducer(monitorState, liftedAction);
          } else {
            computedState = computeNextEntry(reducer, liftedAction.action, computedStates[currentStateIndex].state, false);
          }
          if (!options.pauseActionType || nextActionId === 1) {
            return {
              monitorState: monitorState,
              actionsById: { 0: liftAction(INIT_ACTION) },
              nextActionId: 1,
              stagedActionIds: [0],
              skippedActionIds: [],
              committedState: computedState.state,
              currentStateIndex: 0,
              computedStates: [computedState],
              isLocked: isLocked,
              isPaused: true
            };
          }
          if (shouldInit) {
            if (currentStateIndex === stagedActionIds.length - 1) {
              currentStateIndex++;
            }
            stagedActionIds = [].concat(stagedActionIds, [nextActionId]);
            nextActionId++;
          }
          return {
            monitorState: monitorState,
            actionsById: _extends({}, actionsById, (_extends2 = {}, _extends2[nextActionId - 1] = liftAction({ type: options.pauseActionType }), _extends2)),
            nextActionId: nextActionId,
            stagedActionIds: stagedActionIds,
            skippedActionIds: skippedActionIds,
            committedState: committedState,
            currentStateIndex: currentStateIndex,
            computedStates: [].concat(computedStates.slice(0, stagedActionIds.length - 1), [computedState]),
            isLocked: isLocked,
            isPaused: true
          };
        }
    
        // By default, agressively recompute every state whatever happens.
        // This has O(n) performance, so we'll override this to a sensible
        // value whenever we feel like we don't have to recompute the states.
        var minInvalidatedStateIndex = 0;
    
        switch (liftedAction.type) {
          case ActionTypes.PERFORM_ACTION:
            {
              if (isLocked) return liftedState || initialLiftedState;
              if (isPaused) return computePausedAction();
    
              // Auto-commit as new actions come in.
              if (options.maxAge && stagedActionIds.length === options.maxAge) {
                commitExcessActions(1);
              }
    
              if (currentStateIndex === stagedActionIds.length - 1) {
                currentStateIndex++;
              }
              var actionId = nextActionId++;
              // Mutation! This is the hottest path, and we optimize on purpose.
              // It is safe because we set a new key in a cache dictionary.
              actionsById[actionId] = liftedAction;
              stagedActionIds = [].concat(stagedActionIds, [actionId]);
              // Optimization: we know that only the new action needs computing.
              minInvalidatedStateIndex = stagedActionIds.length - 1;
              break;
            }
          case ActionTypes.RESET:
            {
              // Get back to the state the store was created with.
              actionsById = { 0: liftAction(INIT_ACTION) };
              nextActionId = 1;
              stagedActionIds = [0];
              skippedActionIds = [];
              committedState = initialCommittedState;
              currentStateIndex = 0;
              computedStates = [];
              break;
            }
          case ActionTypes.COMMIT:
            {
              // Consider the last committed state the new starting point.
              // Squash any staged actions into a single committed state.
              actionsById = { 0: liftAction(INIT_ACTION) };
              nextActionId = 1;
              stagedActionIds = [0];
              skippedActionIds = [];
              committedState = computedStates[currentStateIndex].state;
              currentStateIndex = 0;
              computedStates = [];
              break;
            }
          case ActionTypes.ROLLBACK:
            {
              // Forget about any staged actions.
              // Start again from the last committed state.
              actionsById = { 0: liftAction(INIT_ACTION) };
              nextActionId = 1;
              stagedActionIds = [0];
              skippedActionIds = [];
              currentStateIndex = 0;
              computedStates = [];
              break;
            }
          case ActionTypes.TOGGLE_ACTION:
            {
              var _ret = function () {
                // Toggle whether an action with given ID is skipped.
                // Being skipped means it is a no-op during the computation.
                var actionId = liftedAction.id;
    
                var index = skippedActionIds.indexOf(actionId);
                if (index === -1) {
                  skippedActionIds = [actionId].concat(skippedActionIds);
                } else {
                  skippedActionIds = skippedActionIds.filter(function (id) {
                    return id !== actionId;
                  });
                }
                // Optimization: we know history before this action hasn't changed
                minInvalidatedStateIndex = stagedActionIds.indexOf(actionId);
                return 'break';
              }();
    
              if (_ret === 'break') break;
            }
          case ActionTypes.SET_ACTIONS_ACTIVE:
            {
              // Toggle whether an action with given ID is skipped.
              // Being skipped means it is a no-op during the computation.
              var start = liftedAction.start;
              var end = liftedAction.end;
              var active = liftedAction.active;
    
              var actionIds = [];
              for (var i = start; i < end; i++) {
                actionIds.push(i);
              }if (active) {
                skippedActionIds = (0, _difference2.default)(skippedActionIds, actionIds);
              } else {
                skippedActionIds = (0, _union2.default)(skippedActionIds, actionIds);
              }
    
              // Optimization: we know history before this action hasn't changed
              minInvalidatedStateIndex = stagedActionIds.indexOf(start);
              break;
            }
          case ActionTypes.JUMP_TO_STATE:
            {
              // Without recomputing anything, move the pointer that tell us
              // which state is considered the current one. Useful for sliders.
              currentStateIndex = liftedAction.index;
              // Optimization: we know the history has not changed.
              minInvalidatedStateIndex = Infinity;
              break;
            }
          case ActionTypes.JUMP_TO_ACTION:
            {
              // Jumps to a corresponding state to a specific action.
              // Useful when filtering actions.
              var _index = stagedActionIds.indexOf(liftedAction.actionId);
              if (_index !== -1) currentStateIndex = _index;
              minInvalidatedStateIndex = Infinity;
              break;
            }
          case ActionTypes.SWEEP:
            {
              // Forget any actions that are currently being skipped.
              stagedActionIds = (0, _difference2.default)(stagedActionIds, skippedActionIds);
              skippedActionIds = [];
              currentStateIndex = Math.min(currentStateIndex, stagedActionIds.length - 1);
              break;
            }
          case ActionTypes.REORDER_ACTION:
            {
              // Recompute actions in a new order.
              var _actionId = liftedAction.actionId;
              var idx = stagedActionIds.indexOf(_actionId);
              // do nothing in case the action is already removed or trying to move the first action
              if (idx < 1) break;
              var beforeActionId = liftedAction.beforeActionId;
              var newIdx = stagedActionIds.indexOf(beforeActionId);
              if (newIdx < 1) {
                // move to the beginning or to the end
                var count = stagedActionIds.length;
                newIdx = beforeActionId > stagedActionIds[count - 1] ? count : 1;
              }
              var diff = idx - newIdx;
    
              if (diff > 0) {
                // move left
                stagedActionIds = [].concat(stagedActionIds.slice(0, newIdx), [_actionId], stagedActionIds.slice(newIdx, idx), stagedActionIds.slice(idx + 1));
                minInvalidatedStateIndex = newIdx;
              } else if (diff < 0) {
                // move right
                stagedActionIds = [].concat(stagedActionIds.slice(0, idx), stagedActionIds.slice(idx + 1, newIdx), [_actionId], stagedActionIds.slice(newIdx));
                minInvalidatedStateIndex = idx;
              }
              break;
            }
          case ActionTypes.IMPORT_STATE:
            {
              if (Array.isArray(liftedAction.nextLiftedState)) {
                // recompute array of actions
                actionsById = { 0: liftAction(INIT_ACTION) };
                nextActionId = 1;
                stagedActionIds = [0];
                skippedActionIds = [];
                currentStateIndex = liftedAction.nextLiftedState.length;
                computedStates = [];
                committedState = liftedAction.preloadedState;
                minInvalidatedStateIndex = 0;
                // iterate through actions
                liftedAction.nextLiftedState.forEach(function (action) {
                  actionsById[nextActionId] = liftAction(action);
                  stagedActionIds.push(nextActionId);
                  nextActionId++;
                });
              } else {
                var _liftedAction$nextLif = liftedAction.nextLiftedState;
                // Completely replace everything.
    
                monitorState = _liftedAction$nextLif.monitorState;
                actionsById = _liftedAction$nextLif.actionsById;
                nextActionId = _liftedAction$nextLif.nextActionId;
                stagedActionIds = _liftedAction$nextLif.stagedActionIds;
                skippedActionIds = _liftedAction$nextLif.skippedActionIds;
                committedState = _liftedAction$nextLif.committedState;
                currentStateIndex = _liftedAction$nextLif.currentStateIndex;
                computedStates = _liftedAction$nextLif.computedStates;
    
    
                if (liftedAction.noRecompute) {
                  minInvalidatedStateIndex = Infinity;
                }
              }
    
              break;
            }
          case ActionTypes.LOCK_CHANGES:
            {
              isLocked = liftedAction.status;
              minInvalidatedStateIndex = Infinity;
              break;
            }
          case ActionTypes.PAUSE_RECORDING:
            {
              isPaused = liftedAction.status;
              if (isPaused) {
                return computePausedAction(true);
              }
              // Commit when unpausing
              actionsById = { 0: liftAction(INIT_ACTION) };
              nextActionId = 1;
              stagedActionIds = [0];
              skippedActionIds = [];
              committedState = computedStates[currentStateIndex].state;
              currentStateIndex = 0;
              computedStates = [];
              break;
            }
          case '@@redux/INIT':
            {
              if (options.shouldHotReload === false && liftedState) {
                return liftedState;
              }
    
              // Recompute states on hot reload and init.
              minInvalidatedStateIndex = 0;
    
              if (options.maxAge && stagedActionIds.length > options.maxAge) {
                // States must be recomputed before committing excess.
                computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, options.shouldCatchErrors);
    
                commitExcessActions(stagedActionIds.length - options.maxAge);
    
                // Avoid double computation.
                minInvalidatedStateIndex = Infinity;
              }
    
              break;
            }
          default:
            {
              // If the action is not recognized, it's a monitor action.
              // Optimization: a monitor action can't change history.
              minInvalidatedStateIndex = Infinity;
              break;
            }
        }
    
        computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, options.shouldCatchErrors);
        monitorState = monitorReducer(monitorState, liftedAction);
        return {
          monitorState: monitorState,
          actionsById: actionsById,
          nextActionId: nextActionId,
          stagedActionIds: stagedActionIds,
          skippedActionIds: skippedActionIds,
          committedState: committedState,
          currentStateIndex: currentStateIndex,
          computedStates: computedStates,
          isLocked: isLocked,
          isPaused: isPaused
        };
      };
    }
    
    /**
     * Provides an app's view into the state of the lifted store.
     */
    function unliftState(liftedState) {
      var computedStates = liftedState.computedStates;
      var currentStateIndex = liftedState.currentStateIndex;
      var state = computedStates[currentStateIndex].state;
    
      return state;
    }
    
    /**
     * Provides an app's view into the lifted store.
     */
    function unliftStore(liftedStore, liftReducer) {
      var _extends3;
    
      var lastDefinedState = void 0;
    
      function getState() {
        var state = unliftState(liftedStore.getState());
        if (state !== undefined) {
          lastDefinedState = state;
        }
        return lastDefinedState;
      }
    
      return _extends({}, liftedStore, (_extends3 = {
    
        liftedStore: liftedStore,
    
        dispatch: function dispatch(action) {
          liftedStore.dispatch(liftAction(action));
          return action;
        },
    
    
        getState: getState,
    
        replaceReducer: function replaceReducer(nextReducer) {
          liftedStore.replaceReducer(liftReducer(nextReducer));
        }
      }, _extends3[_symbolObservable2.default] = function () {
        return _extends({}, liftedStore[_symbolObservable2.default](), {
          subscribe: function subscribe(observer) {
            if ((typeof observer === 'undefined' ? 'undefined' : _typeof(observer)) !== 'object') {
              throw new TypeError('Expected the observer to be an object.');
            }
    
            function observeState() {
              if (observer.next) {
                observer.next(getState());
              }
            }
    
            observeState();
            var unsubscribe = liftedStore.subscribe(observeState);
            return { unsubscribe: unsubscribe };
          }
        });
      }, _extends3));
    }
    
    /**
     * Redux instrumentation store enhancer.
     */
    function instrument() {
      var monitorReducer = arguments.length <= 0 || arguments[0] === undefined ? function () {
        return null;
      } : arguments[0];
      var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
    
      /* eslint-disable no-eq-null */
      if (options.maxAge != null && options.maxAge < 2) {
        /* eslint-enable */
        throw new Error('DevTools.instrument({ maxAge }) option, if specified, ' + 'may not be less than 2.');
      }
    
      return function (createStore) {
        return function (reducer, initialState, enhancer) {
    
          function liftReducer(r) {
            if (typeof r !== 'function') {
              if (r && typeof r.default === 'function') {
                throw new Error('Expected the reducer to be a function. ' + 'Instead got an object with a "default" field. ' + 'Did you pass a module instead of the default export? ' + 'Try passing require(...).default instead.');
              }
              throw new Error('Expected the reducer to be a function.');
            }
            return liftReducerWith(r, initialState, monitorReducer, options);
          }
    
          var liftedStore = createStore(liftReducer(reducer), enhancer);
          if (liftedStore.liftedStore) {
            throw new Error('DevTools instrumentation should not be applied more than once. ' + 'Check your store configuration.');
          }
    
          return unliftStore(liftedStore, liftReducer);
        };
      };
    }

/***/ },
/* 525 */
/***/ function(module, exports, __webpack_require__) {

    var baseFlatten = __webpack_require__(401),
        baseRest = __webpack_require__(386),
        baseUniq = __webpack_require__(526),
        isArrayLikeObject = __webpack_require__(403);
    
    /**
     * Creates an array of unique values, in order, from all given arrays using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.union([2], [1, 2]);
     * // => [2, 1]
     */
    var union = baseRest(function(arrays) {
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
    });
    
    module.exports = union;


/***/ },
/* 526 */
/***/ function(module, exports, __webpack_require__) {

    var SetCache = __webpack_require__(310),
        arrayIncludes = __webpack_require__(396),
        arrayIncludesWith = __webpack_require__(400),
        cacheHas = __webpack_require__(314),
        createSet = __webpack_require__(527),
        setToArray = __webpack_require__(318);
    
    /** Used as the size to enable large array optimizations. */
    var LARGE_ARRAY_SIZE = 200;
    
    /**
     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseUniq(array, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          length = array.length,
          isCommon = true,
          result = [],
          seen = result;
    
      if (comparator) {
        isCommon = false;
        includes = arrayIncludesWith;
      }
      else if (length >= LARGE_ARRAY_SIZE) {
        var set = iteratee ? null : createSet(array);
        if (set) {
          return setToArray(set);
        }
        isCommon = false;
        includes = cacheHas;
        seen = new SetCache;
      }
      else {
        seen = iteratee ? [] : result;
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;
    
        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value);
        }
        else if (!includes(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }
    
    module.exports = baseUniq;


/***/ },
/* 527 */
/***/ function(module, exports, __webpack_require__) {

    var Set = __webpack_require__(349),
        noop = __webpack_require__(528),
        setToArray = __webpack_require__(318);
    
    /** Used as references for various `Number` constants. */
    var INFINITY = 1 / 0;
    
    /**
     * Creates a set object of `values`.
     *
     * @private
     * @param {Array} values The values to add to the set.
     * @returns {Object} Returns the new set.
     */
    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
      return new Set(values);
    };
    
    module.exports = createSet;


/***/ },
/* 528 */
/***/ function(module, exports) {

    /**
     * This method returns `undefined`.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Util
     * @example
     *
     * _.times(2, _.noop);
     * // => [undefined, undefined]
     */
    function noop() {
      // No operation performed.
    }
    
    module.exports = noop;


/***/ },
/* 529 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    exports.default = persistState;
    
    var _mapValues = __webpack_require__(530);
    
    var _mapValues2 = _interopRequireDefault(_mapValues);
    
    var _identity = __webpack_require__(370);
    
    var _identity2 = _interopRequireDefault(_identity);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function persistState(sessionId) {
      var deserializeState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _identity2.default;
      var deserializeAction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _identity2.default;
    
      if (!sessionId) {
        return function (next) {
          return function () {
            return next.apply(undefined, arguments);
          };
        };
      }
    
      function deserialize(state) {
        return _extends({}, state, {
          actionsById: (0, _mapValues2.default)(state.actionsById, function (liftedAction) {
            return _extends({}, liftedAction, {
              action: deserializeAction(liftedAction.action)
            });
          }),
          committedState: deserializeState(state.committedState),
          computedStates: state.computedStates.map(function (computedState) {
            return _extends({}, computedState, {
              state: deserializeState(computedState.state)
            });
          })
        });
      }
    
      return function (next) {
        return function (reducer, initialState, enhancer) {
          var key = 'redux-dev-session-' + sessionId;
    
          var finalInitialState = void 0;
          try {
            var json = localStorage.getItem(key);
            if (json) {
              finalInitialState = deserialize(JSON.parse(json)) || initialState;
              next(reducer, initialState);
            }
          } catch (e) {
            console.warn('Could not read debug session from localStorage:', e);
            try {
              localStorage.removeItem(key);
            } finally {
              finalInitialState = undefined;
            }
          }
    
          var store = next(reducer, finalInitialState, enhancer);
    
          return _extends({}, store, {
            dispatch: function dispatch(action) {
              store.dispatch(action);
    
              try {
                localStorage.setItem(key, JSON.stringify(store.getState()));
              } catch (e) {
                console.warn('Could not write debug session to localStorage:', e);
              }
    
              return action;
            }
          });
        };
      };
    }

/***/ },
/* 530 */
/***/ function(module, exports, __webpack_require__) {

    var baseAssignValue = __webpack_require__(382),
        baseForOwn = __webpack_require__(531),
        baseIteratee = __webpack_require__(260);
    
    /**
     * Creates an object with the same keys as `object` and values generated
     * by running each own enumerable string keyed property of `object` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapKeys
     * @example
     *
     * var users = {
     *   'fred':    { 'user': 'fred',    'age': 40 },
     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
     * };
     *
     * _.mapValues(users, function(o) { return o.age; });
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     *
     * // The `_.property` iteratee shorthand.
     * _.mapValues(users, 'age');
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     */
    function mapValues(object, iteratee) {
      var result = {};
      iteratee = baseIteratee(iteratee, 3);
    
      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, key, iteratee(value, key, object));
      });
      return result;
    }
    
    module.exports = mapValues;


/***/ },
/* 531 */
/***/ function(module, exports, __webpack_require__) {

    var baseFor = __webpack_require__(532),
        keys = __webpack_require__(327);
    
    /**
     * The base implementation of `_.forOwn` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwn(object, iteratee) {
      return object && baseFor(object, iteratee, keys);
    }
    
    module.exports = baseForOwn;


/***/ },
/* 532 */
/***/ function(module, exports, __webpack_require__) {

    var createBaseFor = __webpack_require__(533);
    
    /**
     * The base implementation of `baseForOwn` which iterates over `object`
     * properties returned by `keysFunc` and invokes `iteratee` for each property.
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseFor = createBaseFor();
    
    module.exports = baseFor;


/***/ },
/* 533 */
/***/ function(module, exports) {

    /**
     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseFor(fromRight) {
      return function(object, iteratee, keysFunc) {
        var index = -1,
            iterable = Object(object),
            props = keysFunc(object),
            length = props.length;
    
        while (length--) {
          var key = props[fromRight ? length : ++index];
          if (iteratee(iterable[key], key, iterable) === false) {
            break;
          }
        }
        return object;
      };
    }
    
    module.exports = createBaseFor;


/***/ },
/* 534 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    exports.default = createDevTools;
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactRedux = __webpack_require__(408);
    
    var _reduxDevtoolsInstrument = __webpack_require__(524);
    
    var _reduxDevtoolsInstrument2 = _interopRequireDefault(_reduxDevtoolsInstrument);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    function createDevTools(children) {
      var _class, _temp;
    
      var monitorElement = _react.Children.only(children);
      var monitorProps = monitorElement.props;
      var Monitor = monitorElement.type;
      var ConnectedMonitor = (0, _reactRedux.connect)(function (state) {
        return state;
      })(Monitor);
    
      return _temp = _class = function (_Component) {
        _inherits(DevTools, _Component);
    
        function DevTools(props, context) {
          _classCallCheck(this, DevTools);
    
          var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));
    
          if (!props.store && !context.store) {
            console.error('Redux DevTools could not render. You must pass the Redux store ' + 'to <DevTools> either as a "store" prop or by wrapping it in a ' + '<Provider store={store}>.');
            return _possibleConstructorReturn(_this);
          }
    
          if (context.store) {
            _this.liftedStore = context.store.liftedStore;
          } else {
            _this.liftedStore = props.store.liftedStore;
          }
    
          if (!_this.liftedStore) {
            console.error('Redux DevTools could not render. Did you forget to include ' + 'DevTools.instrument() in your store enhancer chain before ' + 'using createStore()?');
          }
          return _this;
        }
    
        DevTools.prototype.render = function render() {
          if (!this.liftedStore) {
            return null;
          }
    
          return _react2.default.createElement(ConnectedMonitor, _extends({}, monitorProps, {
            store: this.liftedStore }));
        };
    
        return DevTools;
      }(_react.Component), _class.contextTypes = {
        store: _react.PropTypes.object
      }, _class.propTypes = {
        store: _react.PropTypes.object
      }, _class.instrument = function (options) {
        return (0, _reduxDevtoolsInstrument2.default)(function (state, action) {
          return Monitor.update(monitorProps, state, action);
        }, options);
      }, _temp;
    }

/***/ },
/* 535 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    exports.default = undefined;
    
    var _LogMonitor = __webpack_require__(536);
    
    var _LogMonitor2 = _interopRequireDefault(_LogMonitor);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = _LogMonitor2.default;

/***/ },
/* 536 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _function = __webpack_require__(537);
    
    var _function2 = _interopRequireDefault(_function);
    
    var _reduxDevtoolsThemes = __webpack_require__(539);
    
    var themes = _interopRequireWildcard(_reduxDevtoolsThemes);
    
    var _reduxDevtools = __webpack_require__(523);
    
    var _actions = __webpack_require__(579);
    
    var _reducers = __webpack_require__(580);
    
    var _reducers2 = _interopRequireDefault(_reducers);
    
    var _LogMonitorButtonBar = __webpack_require__(581);
    
    var _LogMonitorButtonBar2 = _interopRequireDefault(_LogMonitorButtonBar);
    
    var _LogMonitorEntryList = __webpack_require__(584);
    
    var _LogMonitorEntryList2 = _interopRequireDefault(_LogMonitorEntryList);
    
    var _lodash = __webpack_require__(633);
    
    var _lodash2 = _interopRequireDefault(_lodash);
    
    function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var toggleAction = _reduxDevtools.ActionCreators.toggleAction;
    var setActionsActive = _reduxDevtools.ActionCreators.setActionsActive;
    
    
    var styles = {
      container: {
        fontFamily: 'monaco, Consolas, Lucida Console, monospace',
        position: 'relative',
        overflowY: 'hidden',
        width: '100%',
        height: '100%',
        minWidth: 300,
        direction: 'ltr'
      },
      elements: {
        position: 'absolute',
        left: 0,
        right: 0,
        top: 0,
        bottom: 0,
        overflowX: 'hidden',
        overflowY: 'auto'
      }
    };
    
    var LogMonitor = function (_Component) {
      _inherits(LogMonitor, _Component);
    
      function LogMonitor(props) {
        _classCallCheck(this, LogMonitor);
    
        var _this = _possibleConstructorReturn(this, _Component.call(this, props));
    
        _this.shouldComponentUpdate = _function2.default;
        _this.updateScrollTop = (0, _lodash2.default)(function () {
          var node = _this.node;
          _this.props.dispatch((0, _actions.updateScrollTop)(node ? node.scrollTop : 0));
        }, 500);
    
        _this.handleToggleAction = _this.handleToggleAction.bind(_this);
        _this.handleToggleConsecutiveAction = _this.handleToggleConsecutiveAction.bind(_this);
        _this.getRef = _this.getRef.bind(_this);
        return _this;
      }
    
      LogMonitor.prototype.scroll = function scroll() {
        var node = this.node;
        if (!node) {
          return;
        }
        if (this.scrollDown) {
          var offsetHeight = node.offsetHeight;
          var scrollHeight = node.scrollHeight;
    
          node.scrollTop = scrollHeight - offsetHeight;
          this.scrollDown = false;
        }
      };
    
      LogMonitor.prototype.componentDidMount = function componentDidMount() {
        var node = this.node;
        if (!node || !this.props.monitorState) {
          return;
        }
    
        if (this.props.preserveScrollTop) {
          node.scrollTop = this.props.monitorState.initialScrollTop;
          node.addEventListener('scroll', this.updateScrollTop);
        } else {
          this.scrollDown = true;
          this.scroll();
        }
      };
    
      LogMonitor.prototype.componentWillUnmount = function componentWillUnmount() {
        var node = this.node;
        if (node && this.props.preserveScrollTop) {
          node.removeEventListener('scroll', this.updateScrollTop);
        }
      };
    
      LogMonitor.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
        var node = this.node;
        if (!node) {
          this.scrollDown = true;
        } else if (this.props.stagedActionIds.length < nextProps.stagedActionIds.length) {
          var scrollTop = node.scrollTop;
          var offsetHeight = node.offsetHeight;
          var scrollHeight = node.scrollHeight;
    
    
          this.scrollDown = Math.abs(scrollHeight - (scrollTop + offsetHeight)) < 20;
        } else {
          this.scrollDown = false;
        }
      };
    
      LogMonitor.prototype.componentDidUpdate = function componentDidUpdate() {
        this.scroll();
      };
    
      LogMonitor.prototype.handleToggleAction = function handleToggleAction(id) {
        this.props.dispatch(toggleAction(id));
      };
    
      LogMonitor.prototype.handleToggleConsecutiveAction = function handleToggleConsecutiveAction(id) {
        var _props = this.props;
        var monitorState = _props.monitorState;
        var actionsById = _props.actionsById;
        var consecutiveToggleStartId = monitorState.consecutiveToggleStartId;
    
        if (consecutiveToggleStartId && actionsById[consecutiveToggleStartId]) {
          var skippedActionIds = this.props.skippedActionIds;
    
          var start = Math.min(consecutiveToggleStartId, id);
          var end = Math.max(consecutiveToggleStartId, id);
          var active = skippedActionIds.indexOf(consecutiveToggleStartId) > -1;
          this.props.dispatch(setActionsActive(start, end + 1, active));
          this.props.dispatch((0, _actions.startConsecutiveToggle)(null));
        } else if (id > 0) {
          this.props.dispatch((0, _actions.startConsecutiveToggle)(id));
        }
      };
    
      LogMonitor.prototype.getTheme = function getTheme() {
        var theme = this.props.theme;
    
        if (typeof theme !== 'string') {
          return theme;
        }
    
        if (typeof themes[theme] !== 'undefined') {
          return themes[theme];
        }
    
        console.warn('DevTools theme ' + theme + ' not found, defaulting to nicinabox');
        return themes.nicinabox;
      };
    
      LogMonitor.prototype.getRef = function getRef(node) {
        this.node = node;
      };
    
      LogMonitor.prototype.render = function render() {
        var theme = this.getTheme();
        var consecutiveToggleStartId = this.props.monitorState.consecutiveToggleStartId;
        var _props2 = this.props;
        var dispatch = _props2.dispatch;
        var actionsById = _props2.actionsById;
        var skippedActionIds = _props2.skippedActionIds;
        var stagedActionIds = _props2.stagedActionIds;
        var computedStates = _props2.computedStates;
        var currentStateIndex = _props2.currentStateIndex;
        var select = _props2.select;
        var expandActionRoot = _props2.expandActionRoot;
        var expandStateRoot = _props2.expandStateRoot;
        var markStateDiff = _props2.markStateDiff;
    
    
        var entryListProps = {
          theme: theme,
          actionsById: actionsById,
          skippedActionIds: skippedActionIds,
          stagedActionIds: stagedActionIds,
          computedStates: computedStates,
          currentStateIndex: currentStateIndex,
          consecutiveToggleStartId: consecutiveToggleStartId,
          select: select,
          expandActionRoot: expandActionRoot,
          expandStateRoot: expandStateRoot,
          markStateDiff: markStateDiff,
          onActionClick: this.handleToggleAction,
          onActionShiftClick: this.handleToggleConsecutiveAction
        };
    
        return _react2.default.createElement(
          'div',
          { style: _extends({}, styles.container, { backgroundColor: theme.base00 }) },
          !this.props.hideMainButtons && _react2.default.createElement(_LogMonitorButtonBar2.default, {
            theme: theme,
            dispatch: dispatch,
            hasStates: computedStates.length > 1,
            hasSkippedActions: skippedActionIds.length > 0
          }),
          _react2.default.createElement(
            'div',
            {
              style: this.props.hideMainButtons ? styles.elements : _extends({}, styles.elements, { top: 30 }),
              ref: this.getRef
            },
            _react2.default.createElement(_LogMonitorEntryList2.default, entryListProps)
          )
        );
      };
    
      return LogMonitor;
    }(_react.Component);
    
    LogMonitor.update = _reducers2.default;
    LogMonitor.propTypes = {
      dispatch: _react.PropTypes.func,
      computedStates: _react.PropTypes.array,
      actionsById: _react.PropTypes.object,
      stagedActionIds: _react.PropTypes.array,
      skippedActionIds: _react.PropTypes.array,
      monitorState: _react.PropTypes.shape({
        initialScrollTop: _react.PropTypes.number,
        consecutiveToggleStartId: _react.PropTypes.number
      }),
    
      preserveScrollTop: _react.PropTypes.bool,
      select: _react.PropTypes.func,
      theme: _react.PropTypes.oneOfType([_react.PropTypes.object, _react.PropTypes.string]),
      expandActionRoot: _react.PropTypes.bool,
      expandStateRoot: _react.PropTypes.bool,
      markStateDiff: _react.PropTypes.bool,
      hideMainButtons: _react.PropTypes.bool
    };
    LogMonitor.defaultProps = {
      select: function select(state) {
        return state;
      },
      theme: 'nicinabox',
      preserveScrollTop: true,
      expandActionRoot: true,
      expandStateRoot: true,
      markStateDiff: false
    };
    exports.default = LogMonitor;

/***/ },
/* 537 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = shouldPureComponentUpdate;
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    var _shallowEqual = __webpack_require__(538);
    
    var _shallowEqual2 = _interopRequireDefault(_shallowEqual);
    
    function shouldPureComponentUpdate(nextProps, nextState) {
      return !(0, _shallowEqual2['default'])(this.props, nextProps) || !(0, _shallowEqual2['default'])(this.state, nextState);
    }
    
    module.exports = exports['default'];

/***/ },
/* 538 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = shallowEqual;
    
    function shallowEqual(objA, objB) {
      if (objA === objB) {
        return true;
      }
    
      if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
        return false;
      }
    
      var keysA = Object.keys(objA);
      var keysB = Object.keys(objB);
    
      if (keysA.length !== keysB.length) {
        return false;
      }
    
      // Test for A's keys different from B.
      var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
      for (var i = 0; i < keysA.length; i++) {
        if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {
          return false;
        }
      }
    
      return true;
    }
    
    module.exports = exports['default'];

/***/ },
/* 539 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    function _interopRequire(obj) { return obj && obj.__esModule ? obj['default'] : obj; }
    
    function _interopExportWildcard(obj, defaults) { var newObj = defaults({}, obj); delete newObj['default']; return newObj; }
    
    function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
    
    var _base16 = __webpack_require__(540);
    
    _defaults(exports, _interopExportWildcard(_base16, _defaults));
    
    var _nicinabox = __webpack_require__(578);
    
    exports.nicinabox = _interopRequire(_nicinabox);

/***/ },
/* 540 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    function _interopRequire(obj) { return obj && obj.__esModule ? obj['default'] : obj; }
    
    var _threezerotwofour = __webpack_require__(541);
    
    exports.threezerotwofour = _interopRequire(_threezerotwofour);
    
    var _apathy = __webpack_require__(542);
    
    exports.apathy = _interopRequire(_apathy);
    
    var _ashes = __webpack_require__(543);
    
    exports.ashes = _interopRequire(_ashes);
    
    var _atelierDune = __webpack_require__(544);
    
    exports.atelierDune = _interopRequire(_atelierDune);
    
    var _atelierForest = __webpack_require__(545);
    
    exports.atelierForest = _interopRequire(_atelierForest);
    
    var _atelierHeath = __webpack_require__(546);
    
    exports.atelierHeath = _interopRequire(_atelierHeath);
    
    var _atelierLakeside = __webpack_require__(547);
    
    exports.atelierLakeside = _interopRequire(_atelierLakeside);
    
    var _atelierSeaside = __webpack_require__(548);
    
    exports.atelierSeaside = _interopRequire(_atelierSeaside);
    
    var _bespin = __webpack_require__(549);
    
    exports.bespin = _interopRequire(_bespin);
    
    var _brewer = __webpack_require__(550);
    
    exports.brewer = _interopRequire(_brewer);
    
    var _bright = __webpack_require__(551);
    
    exports.bright = _interopRequire(_bright);
    
    var _chalk = __webpack_require__(552);
    
    exports.chalk = _interopRequire(_chalk);
    
    var _codeschool = __webpack_require__(553);
    
    exports.codeschool = _interopRequire(_codeschool);
    
    var _colors = __webpack_require__(554);
    
    exports.colors = _interopRequire(_colors);
    
    var _default = __webpack_require__(555);
    
    exports['default'] = _interopRequire(_default);
    
    var _eighties = __webpack_require__(556);
    
    exports.eighties = _interopRequire(_eighties);
    
    var _embers = __webpack_require__(557);
    
    exports.embers = _interopRequire(_embers);
    
    var _flat = __webpack_require__(558);
    
    exports.flat = _interopRequire(_flat);
    
    var _google = __webpack_require__(559);
    
    exports.google = _interopRequire(_google);
    
    var _grayscale = __webpack_require__(560);
    
    exports.grayscale = _interopRequire(_grayscale);
    
    var _greenscreen = __webpack_require__(561);
    
    exports.greenscreen = _interopRequire(_greenscreen);
    
    var _harmonic = __webpack_require__(562);
    
    exports.harmonic = _interopRequire(_harmonic);
    
    var _hopscotch = __webpack_require__(563);
    
    exports.hopscotch = _interopRequire(_hopscotch);
    
    var _isotope = __webpack_require__(564);
    
    exports.isotope = _interopRequire(_isotope);
    
    var _marrakesh = __webpack_require__(565);
    
    exports.marrakesh = _interopRequire(_marrakesh);
    
    var _mocha = __webpack_require__(566);
    
    exports.mocha = _interopRequire(_mocha);
    
    var _monokai = __webpack_require__(567);
    
    exports.monokai = _interopRequire(_monokai);
    
    var _ocean = __webpack_require__(568);
    
    exports.ocean = _interopRequire(_ocean);
    
    var _paraiso = __webpack_require__(569);
    
    exports.paraiso = _interopRequire(_paraiso);
    
    var _pop = __webpack_require__(570);
    
    exports.pop = _interopRequire(_pop);
    
    var _railscasts = __webpack_require__(571);
    
    exports.railscasts = _interopRequire(_railscasts);
    
    var _shapeshifter = __webpack_require__(572);
    
    exports.shapeshifter = _interopRequire(_shapeshifter);
    
    var _solarized = __webpack_require__(573);
    
    exports.solarized = _interopRequire(_solarized);
    
    var _summerfruit = __webpack_require__(574);
    
    exports.summerfruit = _interopRequire(_summerfruit);
    
    var _tomorrow = __webpack_require__(575);
    
    exports.tomorrow = _interopRequire(_tomorrow);
    
    var _tube = __webpack_require__(576);
    
    exports.tube = _interopRequire(_tube);
    
    var _twilight = __webpack_require__(577);
    
    exports.twilight = _interopRequire(_twilight);

/***/ },
/* 541 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'threezerotwofour',
      author: 'jan t. sott (http://github.com/idleberg)',
      base00: '#090300',
      base01: '#3a3432',
      base02: '#4a4543',
      base03: '#5c5855',
      base04: '#807d7c',
      base05: '#a5a2a2',
      base06: '#d6d5d4',
      base07: '#f7f7f7',
      base08: '#db2d20',
      base09: '#e8bbd0',
      base0A: '#fded02',
      base0B: '#01a252',
      base0C: '#b5e4f4',
      base0D: '#01a0e4',
      base0E: '#a16a94',
      base0F: '#cdab53'
    };
    module.exports = exports['default'];

/***/ },
/* 542 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'apathy',
      author: 'jannik siebert (https://github.com/janniks)',
      base00: '#031A16',
      base01: '#0B342D',
      base02: '#184E45',
      base03: '#2B685E',
      base04: '#5F9C92',
      base05: '#81B5AC',
      base06: '#A7CEC8',
      base07: '#D2E7E4',
      base08: '#3E9688',
      base09: '#3E7996',
      base0A: '#3E4C96',
      base0B: '#883E96',
      base0C: '#963E4C',
      base0D: '#96883E',
      base0E: '#4C963E',
      base0F: '#3E965B'
    };
    module.exports = exports['default'];

/***/ },
/* 543 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'ashes',
      author: 'jannik siebert (https://github.com/janniks)',
      base00: '#1C2023',
      base01: '#393F45',
      base02: '#565E65',
      base03: '#747C84',
      base04: '#ADB3BA',
      base05: '#C7CCD1',
      base06: '#DFE2E5',
      base07: '#F3F4F5',
      base08: '#C7AE95',
      base09: '#C7C795',
      base0A: '#AEC795',
      base0B: '#95C7AE',
      base0C: '#95AEC7',
      base0D: '#AE95C7',
      base0E: '#C795AE',
      base0F: '#C79595'
    };
    module.exports = exports['default'];

/***/ },
/* 544 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'atelier dune',
      author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)',
      base00: '#20201d',
      base01: '#292824',
      base02: '#6e6b5e',
      base03: '#7d7a68',
      base04: '#999580',
      base05: '#a6a28c',
      base06: '#e8e4cf',
      base07: '#fefbec',
      base08: '#d73737',
      base09: '#b65611',
      base0A: '#cfb017',
      base0B: '#60ac39',
      base0C: '#1fad83',
      base0D: '#6684e1',
      base0E: '#b854d4',
      base0F: '#d43552'
    };
    module.exports = exports['default'];

/***/ },
/* 545 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'atelier forest',
      author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest)',
      base00: '#1b1918',
      base01: '#2c2421',
      base02: '#68615e',
      base03: '#766e6b',
      base04: '#9c9491',
      base05: '#a8a19f',
      base06: '#e6e2e0',
      base07: '#f1efee',
      base08: '#f22c40',
      base09: '#df5320',
      base0A: '#d5911a',
      base0B: '#5ab738',
      base0C: '#00ad9c',
      base0D: '#407ee7',
      base0E: '#6666ea',
      base0F: '#c33ff3'
    };
    module.exports = exports['default'];

/***/ },
/* 546 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'atelier heath',
      author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath)',
      base00: '#1b181b',
      base01: '#292329',
      base02: '#695d69',
      base03: '#776977',
      base04: '#9e8f9e',
      base05: '#ab9bab',
      base06: '#d8cad8',
      base07: '#f7f3f7',
      base08: '#ca402b',
      base09: '#a65926',
      base0A: '#bb8a35',
      base0B: '#379a37',
      base0C: '#159393',
      base0D: '#516aec',
      base0E: '#7b59c0',
      base0F: '#cc33cc'
    };
    module.exports = exports['default'];

/***/ },
/* 547 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'atelier lakeside',
      author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/)',
      base00: '#161b1d',
      base01: '#1f292e',
      base02: '#516d7b',
      base03: '#5a7b8c',
      base04: '#7195a8',
      base05: '#7ea2b4',
      base06: '#c1e4f6',
      base07: '#ebf8ff',
      base08: '#d22d72',
      base09: '#935c25',
      base0A: '#8a8a0f',
      base0B: '#568c3b',
      base0C: '#2d8f6f',
      base0D: '#257fad',
      base0E: '#5d5db1',
      base0F: '#b72dd2'
    };
    module.exports = exports['default'];

/***/ },
/* 548 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'atelier seaside',
      author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/)',
      base00: '#131513',
      base01: '#242924',
      base02: '#5e6e5e',
      base03: '#687d68',
      base04: '#809980',
      base05: '#8ca68c',
      base06: '#cfe8cf',
      base07: '#f0fff0',
      base08: '#e6193c',
      base09: '#87711d',
      base0A: '#c3c322',
      base0B: '#29a329',
      base0C: '#1999b3',
      base0D: '#3d62f5',
      base0E: '#ad2bee',
      base0F: '#e619c3'
    };
    module.exports = exports['default'];

/***/ },
/* 549 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'bespin',
      author: 'jan t. sott',
      base00: '#28211c',
      base01: '#36312e',
      base02: '#5e5d5c',
      base03: '#666666',
      base04: '#797977',
      base05: '#8a8986',
      base06: '#9d9b97',
      base07: '#baae9e',
      base08: '#cf6a4c',
      base09: '#cf7d34',
      base0A: '#f9ee98',
      base0B: '#54be0d',
      base0C: '#afc4db',
      base0D: '#5ea6ea',
      base0E: '#9b859d',
      base0F: '#937121'
    };
    module.exports = exports['default'];

/***/ },
/* 550 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'brewer',
      author: 'timothée poisot (http://github.com/tpoisot)',
      base00: '#0c0d0e',
      base01: '#2e2f30',
      base02: '#515253',
      base03: '#737475',
      base04: '#959697',
      base05: '#b7b8b9',
      base06: '#dadbdc',
      base07: '#fcfdfe',
      base08: '#e31a1c',
      base09: '#e6550d',
      base0A: '#dca060',
      base0B: '#31a354',
      base0C: '#80b1d3',
      base0D: '#3182bd',
      base0E: '#756bb1',
      base0F: '#b15928'
    };
    module.exports = exports['default'];

/***/ },
/* 551 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'bright',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#000000',
      base01: '#303030',
      base02: '#505050',
      base03: '#b0b0b0',
      base04: '#d0d0d0',
      base05: '#e0e0e0',
      base06: '#f5f5f5',
      base07: '#ffffff',
      base08: '#fb0120',
      base09: '#fc6d24',
      base0A: '#fda331',
      base0B: '#a1c659',
      base0C: '#76c7b7',
      base0D: '#6fb3d2',
      base0E: '#d381c3',
      base0F: '#be643c'
    };
    module.exports = exports['default'];

/***/ },
/* 552 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'chalk',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#151515',
      base01: '#202020',
      base02: '#303030',
      base03: '#505050',
      base04: '#b0b0b0',
      base05: '#d0d0d0',
      base06: '#e0e0e0',
      base07: '#f5f5f5',
      base08: '#fb9fb1',
      base09: '#eda987',
      base0A: '#ddb26f',
      base0B: '#acc267',
      base0C: '#12cfc0',
      base0D: '#6fc2ef',
      base0E: '#e1a3ee',
      base0F: '#deaf8f'
    };
    module.exports = exports['default'];

/***/ },
/* 553 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'codeschool',
      author: 'brettof86',
      base00: '#232c31',
      base01: '#1c3657',
      base02: '#2a343a',
      base03: '#3f4944',
      base04: '#84898c',
      base05: '#9ea7a6',
      base06: '#a7cfa3',
      base07: '#b5d8f6',
      base08: '#2a5491',
      base09: '#43820d',
      base0A: '#a03b1e',
      base0B: '#237986',
      base0C: '#b02f30',
      base0D: '#484d79',
      base0E: '#c59820',
      base0F: '#c98344'
    };
    module.exports = exports['default'];

/***/ },
/* 554 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'colors',
      author: 'mrmrs (http://clrs.cc)',
      base00: '#111111',
      base01: '#333333',
      base02: '#555555',
      base03: '#777777',
      base04: '#999999',
      base05: '#bbbbbb',
      base06: '#dddddd',
      base07: '#ffffff',
      base08: '#ff4136',
      base09: '#ff851b',
      base0A: '#ffdc00',
      base0B: '#2ecc40',
      base0C: '#7fdbff',
      base0D: '#0074d9',
      base0E: '#b10dc9',
      base0F: '#85144b'
    };
    module.exports = exports['default'];

/***/ },
/* 555 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'default',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#181818',
      base01: '#282828',
      base02: '#383838',
      base03: '#585858',
      base04: '#b8b8b8',
      base05: '#d8d8d8',
      base06: '#e8e8e8',
      base07: '#f8f8f8',
      base08: '#ab4642',
      base09: '#dc9656',
      base0A: '#f7ca88',
      base0B: '#a1b56c',
      base0C: '#86c1b9',
      base0D: '#7cafc2',
      base0E: '#ba8baf',
      base0F: '#a16946'
    };
    module.exports = exports['default'];

/***/ },
/* 556 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'eighties',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#2d2d2d',
      base01: '#393939',
      base02: '#515151',
      base03: '#747369',
      base04: '#a09f93',
      base05: '#d3d0c8',
      base06: '#e8e6df',
      base07: '#f2f0ec',
      base08: '#f2777a',
      base09: '#f99157',
      base0A: '#ffcc66',
      base0B: '#99cc99',
      base0C: '#66cccc',
      base0D: '#6699cc',
      base0E: '#cc99cc',
      base0F: '#d27b53'
    };
    module.exports = exports['default'];

/***/ },
/* 557 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'embers',
      author: 'jannik siebert (https://github.com/janniks)',
      base00: '#16130F',
      base01: '#2C2620',
      base02: '#433B32',
      base03: '#5A5047',
      base04: '#8A8075',
      base05: '#A39A90',
      base06: '#BEB6AE',
      base07: '#DBD6D1',
      base08: '#826D57',
      base09: '#828257',
      base0A: '#6D8257',
      base0B: '#57826D',
      base0C: '#576D82',
      base0D: '#6D5782',
      base0E: '#82576D',
      base0F: '#825757'
    };
    module.exports = exports['default'];

/***/ },
/* 558 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'flat',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#2C3E50',
      base01: '#34495E',
      base02: '#7F8C8D',
      base03: '#95A5A6',
      base04: '#BDC3C7',
      base05: '#e0e0e0',
      base06: '#f5f5f5',
      base07: '#ECF0F1',
      base08: '#E74C3C',
      base09: '#E67E22',
      base0A: '#F1C40F',
      base0B: '#2ECC71',
      base0C: '#1ABC9C',
      base0D: '#3498DB',
      base0E: '#9B59B6',
      base0F: '#be643c'
    };
    module.exports = exports['default'];

/***/ },
/* 559 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'google',
      author: 'seth wright (http://sethawright.com)',
      base00: '#1d1f21',
      base01: '#282a2e',
      base02: '#373b41',
      base03: '#969896',
      base04: '#b4b7b4',
      base05: '#c5c8c6',
      base06: '#e0e0e0',
      base07: '#ffffff',
      base08: '#CC342B',
      base09: '#F96A38',
      base0A: '#FBA922',
      base0B: '#198844',
      base0C: '#3971ED',
      base0D: '#3971ED',
      base0E: '#A36AC7',
      base0F: '#3971ED'
    };
    module.exports = exports['default'];

/***/ },
/* 560 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'grayscale',
      author: 'alexandre gavioli (https://github.com/alexx2/)',
      base00: '#101010',
      base01: '#252525',
      base02: '#464646',
      base03: '#525252',
      base04: '#ababab',
      base05: '#b9b9b9',
      base06: '#e3e3e3',
      base07: '#f7f7f7',
      base08: '#7c7c7c',
      base09: '#999999',
      base0A: '#a0a0a0',
      base0B: '#8e8e8e',
      base0C: '#868686',
      base0D: '#686868',
      base0E: '#747474',
      base0F: '#5e5e5e'
    };
    module.exports = exports['default'];

/***/ },
/* 561 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'green screen',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#001100',
      base01: '#003300',
      base02: '#005500',
      base03: '#007700',
      base04: '#009900',
      base05: '#00bb00',
      base06: '#00dd00',
      base07: '#00ff00',
      base08: '#007700',
      base09: '#009900',
      base0A: '#007700',
      base0B: '#00bb00',
      base0C: '#005500',
      base0D: '#009900',
      base0E: '#00bb00',
      base0F: '#005500'
    };
    module.exports = exports['default'];

/***/ },
/* 562 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'harmonic16',
      author: 'jannik siebert (https://github.com/janniks)',
      base00: '#0b1c2c',
      base01: '#223b54',
      base02: '#405c79',
      base03: '#627e99',
      base04: '#aabcce',
      base05: '#cbd6e2',
      base06: '#e5ebf1',
      base07: '#f7f9fb',
      base08: '#bf8b56',
      base09: '#bfbf56',
      base0A: '#8bbf56',
      base0B: '#56bf8b',
      base0C: '#568bbf',
      base0D: '#8b56bf',
      base0E: '#bf568b',
      base0F: '#bf5656'
    };
    module.exports = exports['default'];

/***/ },
/* 563 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'hopscotch',
      author: 'jan t. sott',
      base00: '#322931',
      base01: '#433b42',
      base02: '#5c545b',
      base03: '#797379',
      base04: '#989498',
      base05: '#b9b5b8',
      base06: '#d5d3d5',
      base07: '#ffffff',
      base08: '#dd464c',
      base09: '#fd8b19',
      base0A: '#fdcc59',
      base0B: '#8fc13e',
      base0C: '#149b93',
      base0D: '#1290bf',
      base0E: '#c85e7c',
      base0F: '#b33508'
    };
    module.exports = exports['default'];

/***/ },
/* 564 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'isotope',
      author: 'jan t. sott',
      base00: '#000000',
      base01: '#404040',
      base02: '#606060',
      base03: '#808080',
      base04: '#c0c0c0',
      base05: '#d0d0d0',
      base06: '#e0e0e0',
      base07: '#ffffff',
      base08: '#ff0000',
      base09: '#ff9900',
      base0A: '#ff0099',
      base0B: '#33ff00',
      base0C: '#00ffff',
      base0D: '#0066ff',
      base0E: '#cc00ff',
      base0F: '#3300ff'
    };
    module.exports = exports['default'];

/***/ },
/* 565 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'marrakesh',
      author: 'alexandre gavioli (http://github.com/alexx2/)',
      base00: '#201602',
      base01: '#302e00',
      base02: '#5f5b17',
      base03: '#6c6823',
      base04: '#86813b',
      base05: '#948e48',
      base06: '#ccc37a',
      base07: '#faf0a5',
      base08: '#c35359',
      base09: '#b36144',
      base0A: '#a88339',
      base0B: '#18974e',
      base0C: '#75a738',
      base0D: '#477ca1',
      base0E: '#8868b3',
      base0F: '#b3588e'
    };
    module.exports = exports['default'];

/***/ },
/* 566 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'mocha',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#3B3228',
      base01: '#534636',
      base02: '#645240',
      base03: '#7e705a',
      base04: '#b8afad',
      base05: '#d0c8c6',
      base06: '#e9e1dd',
      base07: '#f5eeeb',
      base08: '#cb6077',
      base09: '#d28b71',
      base0A: '#f4bc87',
      base0B: '#beb55b',
      base0C: '#7bbda4',
      base0D: '#8ab3b5',
      base0E: '#a89bb9',
      base0F: '#bb9584'
    };
    module.exports = exports['default'];

/***/ },
/* 567 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'monokai',
      author: 'wimer hazenberg (http://www.monokai.nl)',
      base00: '#272822',
      base01: '#383830',
      base02: '#49483e',
      base03: '#75715e',
      base04: '#a59f85',
      base05: '#f8f8f2',
      base06: '#f5f4f1',
      base07: '#f9f8f5',
      base08: '#f92672',
      base09: '#fd971f',
      base0A: '#f4bf75',
      base0B: '#a6e22e',
      base0C: '#a1efe4',
      base0D: '#66d9ef',
      base0E: '#ae81ff',
      base0F: '#cc6633'
    };
    module.exports = exports['default'];

/***/ },
/* 568 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'ocean',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#2b303b',
      base01: '#343d46',
      base02: '#4f5b66',
      base03: '#65737e',
      base04: '#a7adba',
      base05: '#c0c5ce',
      base06: '#dfe1e8',
      base07: '#eff1f5',
      base08: '#bf616a',
      base09: '#d08770',
      base0A: '#ebcb8b',
      base0B: '#a3be8c',
      base0C: '#96b5b4',
      base0D: '#8fa1b3',
      base0E: '#b48ead',
      base0F: '#ab7967'
    };
    module.exports = exports['default'];

/***/ },
/* 569 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'paraiso',
      author: 'jan t. sott',
      base00: '#2f1e2e',
      base01: '#41323f',
      base02: '#4f424c',
      base03: '#776e71',
      base04: '#8d8687',
      base05: '#a39e9b',
      base06: '#b9b6b0',
      base07: '#e7e9db',
      base08: '#ef6155',
      base09: '#f99b15',
      base0A: '#fec418',
      base0B: '#48b685',
      base0C: '#5bc4bf',
      base0D: '#06b6ef',
      base0E: '#815ba4',
      base0F: '#e96ba8'
    };
    module.exports = exports['default'];

/***/ },
/* 570 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'pop',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#000000',
      base01: '#202020',
      base02: '#303030',
      base03: '#505050',
      base04: '#b0b0b0',
      base05: '#d0d0d0',
      base06: '#e0e0e0',
      base07: '#ffffff',
      base08: '#eb008a',
      base09: '#f29333',
      base0A: '#f8ca12',
      base0B: '#37b349',
      base0C: '#00aabb',
      base0D: '#0e5a94',
      base0E: '#b31e8d',
      base0F: '#7a2d00'
    };
    module.exports = exports['default'];

/***/ },
/* 571 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'railscasts',
      author: 'ryan bates (http://railscasts.com)',
      base00: '#2b2b2b',
      base01: '#272935',
      base02: '#3a4055',
      base03: '#5a647e',
      base04: '#d4cfc9',
      base05: '#e6e1dc',
      base06: '#f4f1ed',
      base07: '#f9f7f3',
      base08: '#da4939',
      base09: '#cc7833',
      base0A: '#ffc66d',
      base0B: '#a5c261',
      base0C: '#519f50',
      base0D: '#6d9cbe',
      base0E: '#b6b3eb',
      base0F: '#bc9458'
    };
    module.exports = exports['default'];

/***/ },
/* 572 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'shapeshifter',
      author: 'tyler benziger (http://tybenz.com)',
      base00: '#000000',
      base01: '#040404',
      base02: '#102015',
      base03: '#343434',
      base04: '#555555',
      base05: '#ababab',
      base06: '#e0e0e0',
      base07: '#f9f9f9',
      base08: '#e92f2f',
      base09: '#e09448',
      base0A: '#dddd13',
      base0B: '#0ed839',
      base0C: '#23edda',
      base0D: '#3b48e3',
      base0E: '#f996e2',
      base0F: '#69542d'
    };
    module.exports = exports['default'];

/***/ },
/* 573 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'solarized',
      author: 'ethan schoonover (http://ethanschoonover.com/solarized)',
      base00: '#002b36',
      base01: '#073642',
      base02: '#586e75',
      base03: '#657b83',
      base04: '#839496',
      base05: '#93a1a1',
      base06: '#eee8d5',
      base07: '#fdf6e3',
      base08: '#dc322f',
      base09: '#cb4b16',
      base0A: '#b58900',
      base0B: '#859900',
      base0C: '#2aa198',
      base0D: '#268bd2',
      base0E: '#6c71c4',
      base0F: '#d33682'
    };
    module.exports = exports['default'];

/***/ },
/* 574 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'summerfruit',
      author: 'christopher corley (http://cscorley.github.io/)',
      base00: '#151515',
      base01: '#202020',
      base02: '#303030',
      base03: '#505050',
      base04: '#B0B0B0',
      base05: '#D0D0D0',
      base06: '#E0E0E0',
      base07: '#FFFFFF',
      base08: '#FF0086',
      base09: '#FD8900',
      base0A: '#ABA800',
      base0B: '#00C918',
      base0C: '#1faaaa',
      base0D: '#3777E6',
      base0E: '#AD00A1',
      base0F: '#cc6633'
    };
    module.exports = exports['default'];

/***/ },
/* 575 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'tomorrow',
      author: 'chris kempson (http://chriskempson.com)',
      base00: '#1d1f21',
      base01: '#282a2e',
      base02: '#373b41',
      base03: '#969896',
      base04: '#b4b7b4',
      base05: '#c5c8c6',
      base06: '#e0e0e0',
      base07: '#ffffff',
      base08: '#cc6666',
      base09: '#de935f',
      base0A: '#f0c674',
      base0B: '#b5bd68',
      base0C: '#8abeb7',
      base0D: '#81a2be',
      base0E: '#b294bb',
      base0F: '#a3685a'
    };
    module.exports = exports['default'];

/***/ },
/* 576 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'london tube',
      author: 'jan t. sott',
      base00: '#231f20',
      base01: '#1c3f95',
      base02: '#5a5758',
      base03: '#737171',
      base04: '#959ca1',
      base05: '#d9d8d8',
      base06: '#e7e7e8',
      base07: '#ffffff',
      base08: '#ee2e24',
      base09: '#f386a1',
      base0A: '#ffd204',
      base0B: '#00853e',
      base0C: '#85cebc',
      base0D: '#009ddc',
      base0E: '#98005d',
      base0F: '#b06110'
    };
    module.exports = exports['default'];

/***/ },
/* 577 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'twilight',
      author: 'david hart (http://hart-dev.com)',
      base00: '#1e1e1e',
      base01: '#323537',
      base02: '#464b50',
      base03: '#5f5a60',
      base04: '#838184',
      base05: '#a7a7a7',
      base06: '#c3c3c3',
      base07: '#ffffff',
      base08: '#cf6a4c',
      base09: '#cda869',
      base0A: '#f9ee98',
      base0B: '#8f9d6a',
      base0C: '#afc4db',
      base0D: '#7587a6',
      base0E: '#9b859d',
      base0F: '#9b703f'
    };
    module.exports = exports['default'];

/***/ },
/* 578 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'nicinabox',
      author: 'nicinabox (http://github.com/nicinabox)',
      base00: '#2A2F3A',
      base01: '#3C444F',
      base02: '#4F5A65',
      base03: '#BEBEBE',
      base04: '#b0b0b0', // based on ocean theme
      base05: '#d0d0d0', // based on ocean theme
      base06: '#FFFFFF',
      base07: '#f5f5f5', // based on ocean theme
      base08: '#fb9fb1', // based on ocean theme
      base09: '#FC6D24',
      base0A: '#ddb26f', // based on ocean theme
      base0B: '#A1C659',
      base0C: '#12cfc0', // based on ocean theme
      base0D: '#6FB3D2',
      base0E: '#D381C3',
      base0F: '#deaf8f' // based on ocean theme
    };
    module.exports = exports['default'];

/***/ },
/* 579 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports.updateScrollTop = updateScrollTop;
    exports.startConsecutiveToggle = startConsecutiveToggle;
    var UPDATE_SCROLL_TOP = exports.UPDATE_SCROLL_TOP = '@@redux-devtools-log-monitor/UPDATE_SCROLL_TOP';
    function updateScrollTop(scrollTop) {
      return { type: UPDATE_SCROLL_TOP, scrollTop: scrollTop };
    }
    
    var START_CONSECUTIVE_TOGGLE = exports.START_CONSECUTIVE_TOGGLE = '@@redux-devtools-log-monitor/START_CONSECUTIVE_TOGGLE';
    function startConsecutiveToggle(id) {
      return { type: START_CONSECUTIVE_TOGGLE, id: id };
    }

/***/ },
/* 580 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    exports.default = reducer;
    
    var _actions = __webpack_require__(579);
    
    function initialScrollTop(props) {
      var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
      var action = arguments[2];
    
      if (!props.preserveScrollTop) {
        return 0;
      }
    
      return action.type === _actions.UPDATE_SCROLL_TOP ? action.scrollTop : state;
    }
    
    function startConsecutiveToggle(props, state, action) {
      return action.type === _actions.START_CONSECUTIVE_TOGGLE ? action.id : state;
    }
    
    function reducer(props) {
      var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
      var action = arguments[2];
    
      return {
        initialScrollTop: initialScrollTop(props, state.initialScrollTop, action),
        consecutiveToggleStartId: startConsecutiveToggle(props, state.consecutiveToggleStartId, action)
      };
    }

/***/ },
/* 581 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _function = __webpack_require__(537);
    
    var _function2 = _interopRequireDefault(_function);
    
    var _reduxDevtools = __webpack_require__(523);
    
    var _LogMonitorButton = __webpack_require__(582);
    
    var _LogMonitorButton2 = _interopRequireDefault(_LogMonitorButton);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var reset = _reduxDevtools.ActionCreators.reset;
    var rollback = _reduxDevtools.ActionCreators.rollback;
    var commit = _reduxDevtools.ActionCreators.commit;
    var sweep = _reduxDevtools.ActionCreators.sweep;
    
    
    var style = {
      textAlign: 'center',
      borderBottomWidth: 1,
      borderBottomStyle: 'solid',
      borderColor: 'transparent',
      zIndex: 1,
      display: 'flex',
      flexDirection: 'row'
    };
    
    var LogMonitorButtonBar = function (_Component) {
      _inherits(LogMonitorButtonBar, _Component);
    
      function LogMonitorButtonBar(props) {
        _classCallCheck(this, LogMonitorButtonBar);
    
        var _this = _possibleConstructorReturn(this, _Component.call(this, props));
    
        _this.shouldComponentUpdate = _function2.default;
    
        _this.handleReset = _this.handleReset.bind(_this);
        _this.handleRollback = _this.handleRollback.bind(_this);
        _this.handleSweep = _this.handleSweep.bind(_this);
        _this.handleCommit = _this.handleCommit.bind(_this);
        return _this;
      }
    
      LogMonitorButtonBar.prototype.handleRollback = function handleRollback() {
        this.props.dispatch(rollback());
      };
    
      LogMonitorButtonBar.prototype.handleSweep = function handleSweep() {
        this.props.dispatch(sweep());
      };
    
      LogMonitorButtonBar.prototype.handleCommit = function handleCommit() {
        this.props.dispatch(commit());
      };
    
      LogMonitorButtonBar.prototype.handleReset = function handleReset() {
        this.props.dispatch(reset());
      };
    
      LogMonitorButtonBar.prototype.render = function render() {
        var _props = this.props;
        var theme = _props.theme;
        var hasStates = _props.hasStates;
        var hasSkippedActions = _props.hasSkippedActions;
    
        return _react2.default.createElement(
          'div',
          { style: _extends({}, style, { borderColor: theme.base02 }) },
          _react2.default.createElement(
            _LogMonitorButton2.default,
            {
              theme: theme,
              onClick: this.handleReset,
              enabled: true },
            'Reset'
          ),
          _react2.default.createElement(
            _LogMonitorButton2.default,
            {
              theme: theme,
              onClick: this.handleRollback,
              enabled: hasStates },
            'Revert'
          ),
          _react2.default.createElement(
            _LogMonitorButton2.default,
            {
              theme: theme,
              onClick: this.handleSweep,
              enabled: hasSkippedActions },
            'Sweep'
          ),
          _react2.default.createElement(
            _LogMonitorButton2.default,
            {
              theme: theme,
              onClick: this.handleCommit,
              enabled: hasStates },
            'Commit'
          )
        );
      };
    
      return LogMonitorButtonBar;
    }(_react.Component);
    
    LogMonitorButtonBar.propTypes = {
      dispatch: _react.PropTypes.func,
      theme: _react.PropTypes.object
    };
    exports.default = LogMonitorButtonBar;

/***/ },
/* 582 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _brighten = __webpack_require__(583);
    
    var _brighten2 = _interopRequireDefault(_brighten);
    
    var _function = __webpack_require__(537);
    
    var _function2 = _interopRequireDefault(_function);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var styles = {
      base: {
        cursor: 'pointer',
        fontWeight: 'bold',
        borderRadius: 3,
        padding: 4,
        marginLeft: 3,
        marginRight: 3,
        marginTop: 5,
        marginBottom: 5,
        flexGrow: 1,
        display: 'inline-block',
        fontSize: '0.8em',
        color: 'white',
        textDecoration: 'none'
      }
    };
    
    var LogMonitorButton = function (_React$Component) {
      _inherits(LogMonitorButton, _React$Component);
    
      function LogMonitorButton(props) {
        _classCallCheck(this, LogMonitorButton);
    
        var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));
    
        _this.shouldComponentUpdate = _function2.default;
    
    
        _this.handleMouseEnter = _this.handleMouseEnter.bind(_this);
        _this.handleMouseLeave = _this.handleMouseLeave.bind(_this);
        _this.handleMouseDown = _this.handleMouseDown.bind(_this);
        _this.handleMouseUp = _this.handleMouseUp.bind(_this);
        _this.onClick = _this.onClick.bind(_this);
    
        _this.state = {
          hovered: false,
          active: false
        };
        return _this;
      }
    
      LogMonitorButton.prototype.handleMouseEnter = function handleMouseEnter() {
        this.setState({ hovered: true });
      };
    
      LogMonitorButton.prototype.handleMouseLeave = function handleMouseLeave() {
        this.setState({ hovered: false });
      };
    
      LogMonitorButton.prototype.handleMouseDown = function handleMouseDown() {
        this.setState({ active: true });
      };
    
      LogMonitorButton.prototype.handleMouseUp = function handleMouseUp() {
        this.setState({ active: false });
      };
    
      LogMonitorButton.prototype.onClick = function onClick() {
        if (!this.props.enabled) {
          return;
        }
        if (this.props.onClick) {
          this.props.onClick();
        }
      };
    
      LogMonitorButton.prototype.render = function render() {
        var style = _extends({}, styles.base, {
          backgroundColor: this.props.theme.base02
        });
        if (this.props.enabled && this.state.hovered) {
          style = _extends({}, style, {
            backgroundColor: (0, _brighten2.default)(this.props.theme.base02, 0.2)
          });
        }
        if (!this.props.enabled) {
          style = _extends({}, style, {
            opacity: 0.2,
            cursor: 'text',
            backgroundColor: 'transparent'
          });
        }
        return _react2.default.createElement(
          'a',
          { onMouseEnter: this.handleMouseEnter,
            onMouseLeave: this.handleMouseLeave,
            onMouseDown: this.handleMouseDown,
            onMouseUp: this.handleMouseUp,
            onClick: this.onClick,
            style: style },
          this.props.children
        );
      };
    
      return LogMonitorButton;
    }(_react2.default.Component);
    
    exports.default = LogMonitorButton;

/***/ },
/* 583 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    
    exports.default = function (hexColor, lightness) {
      var hex = String(hexColor).replace(/[^0-9a-f]/gi, '');
      if (hex.length < 6) {
        hex = hex.replace(/(.)/g, '$1$1');
      }
      var lum = lightness || 0;
    
      var rgb = '#';
      var c = void 0;
      for (var i = 0; i < 3; ++i) {
        c = parseInt(hex.substr(i * 2, 2), 16);
        c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);
        rgb += ('00' + c).substr(c.length);
      }
      return rgb;
    };

/***/ },
/* 584 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _LogMonitorEntry = __webpack_require__(585);
    
    var _LogMonitorEntry2 = _interopRequireDefault(_LogMonitorEntry);
    
    var _function = __webpack_require__(537);
    
    var _function2 = _interopRequireDefault(_function);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var LogMonitorEntryList = function (_Component) {
      _inherits(LogMonitorEntryList, _Component);
    
      function LogMonitorEntryList() {
        var _temp, _this, _ret;
    
        _classCallCheck(this, LogMonitorEntryList);
    
        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }
    
        return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.shouldComponentUpdate = _function2.default, _temp), _possibleConstructorReturn(_this, _ret);
      }
    
      LogMonitorEntryList.prototype.render = function render() {
        var elements = [];
        var _props = this.props;
        var theme = _props.theme;
        var actionsById = _props.actionsById;
        var computedStates = _props.computedStates;
        var currentStateIndex = _props.currentStateIndex;
        var consecutiveToggleStartId = _props.consecutiveToggleStartId;
        var select = _props.select;
        var skippedActionIds = _props.skippedActionIds;
        var stagedActionIds = _props.stagedActionIds;
        var expandActionRoot = _props.expandActionRoot;
        var expandStateRoot = _props.expandStateRoot;
        var markStateDiff = _props.markStateDiff;
        var onActionClick = _props.onActionClick;
        var onActionShiftClick = _props.onActionShiftClick;
    
    
        for (var i = 0; i < stagedActionIds.length; i++) {
          var actionId = stagedActionIds[i];
          var action = actionsById[actionId].action;
          var _computedStates$i = computedStates[i];
          var state = _computedStates$i.state;
          var error = _computedStates$i.error;
    
          var previousState = void 0;
          if (i > 0) {
            previousState = computedStates[i - 1].state;
          }
          elements.push(_react2.default.createElement(_LogMonitorEntry2.default, { key: actionId,
            theme: theme,
            select: select,
            action: action,
            actionId: actionId,
            state: state,
            previousState: previousState,
            collapsed: skippedActionIds.indexOf(actionId) > -1,
            inFuture: i > currentStateIndex,
            selected: consecutiveToggleStartId === i,
            error: error,
            expandActionRoot: expandActionRoot,
            expandStateRoot: expandStateRoot,
            markStateDiff: markStateDiff,
            onActionClick: onActionClick,
            onActionShiftClick: onActionShiftClick }));
        }
    
        return _react2.default.createElement(
          'div',
          null,
          elements
        );
      };
    
      return LogMonitorEntryList;
    }(_react.Component);
    
    LogMonitorEntryList.propTypes = {
      actionsById: _react.PropTypes.object,
      computedStates: _react.PropTypes.array,
      stagedActionIds: _react.PropTypes.array,
      skippedActionIds: _react.PropTypes.array,
      currentStateIndex: _react.PropTypes.number,
      consecutiveToggleStartId: _react.PropTypes.number,
    
      select: _react.PropTypes.func.isRequired,
      onActionClick: _react.PropTypes.func.isRequired,
      theme: _react.PropTypes.oneOfType([_react.PropTypes.object, _react.PropTypes.string]),
      expandActionRoot: _react.PropTypes.bool,
      expandStateRoot: _react.PropTypes.bool
    };
    exports.default = LogMonitorEntryList;

/***/ },
/* 585 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactJsonTree = __webpack_require__(586);
    
    var _reactJsonTree2 = _interopRequireDefault(_reactJsonTree);
    
    var _LogMonitorEntryAction = __webpack_require__(632);
    
    var _LogMonitorEntryAction2 = _interopRequireDefault(_LogMonitorEntryAction);
    
    var _function = __webpack_require__(537);
    
    var _function2 = _interopRequireDefault(_function);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var styles = {
      entry: {
        display: 'block',
        WebkitUserSelect: 'none'
      },
    
      root: {
        marginLeft: 0
      },
    
      changedData: {
        backgroundColor: 'rgba(128, 128, 128, 0.3)'
      }
    };
    
    var getDeepItem = function getDeepItem(data, path) {
      return path.reduce(function (obj, key) {
        return obj && obj[key];
      }, data);
    };
    var dataIsEqual = function dataIsEqual(data, previousData, keyPath) {
      var path = [].concat(keyPath).reverse().slice(1);
    
      return getDeepItem(data, path) === getDeepItem(previousData, path);
    };
    
    var LogMonitorEntry = function (_Component) {
      _inherits(LogMonitorEntry, _Component);
    
      function LogMonitorEntry(props) {
        _classCallCheck(this, LogMonitorEntry);
    
        var _this = _possibleConstructorReturn(this, _Component.call(this, props));
    
        _this.shouldComponentUpdate = _function2.default;
    
        _this.handleActionClick = _this.handleActionClick.bind(_this);
        _this.shouldExpandNode = _this.shouldExpandNode.bind(_this);
        return _this;
      }
    
      LogMonitorEntry.prototype.printState = function printState(state, error) {
        var _this2 = this;
    
        var errorText = error;
        if (!errorText) {
          try {
            var _ret = function () {
              var data = _this2.props.select(state);
              var theme = _this2.props.theme;
    
              if (_this2.props.markStateDiff) {
                (function () {
                  var previousData = typeof _this2.props.previousState !== 'undefined' ? _this2.props.select(_this2.props.previousState) : undefined;
                  var getValueStyle = function getValueStyle(_ref, nodeType, keyPath) {
                    var style = _ref.style;
                    return {
                      style: _extends({}, style, dataIsEqual(data, previousData, keyPath) ? {} : styles.changedData)
                    };
                  };
                  var getNestedNodeStyle = function getNestedNodeStyle(_ref2, keyPath) {
                    var style = _ref2.style;
                    return {
                      style: _extends({}, style, keyPath.length > 1 ? {} : styles.root)
                    };
                  };
                  theme = {
                    extend: _this2.props.theme,
                    tree: styles.tree,
                    value: getValueStyle,
                    nestedNode: getNestedNodeStyle
                  };
                })();
              }
    
              return {
                v: _react2.default.createElement(_reactJsonTree2.default, {
                  theme: theme,
                  data: data,
                  invertTheme: false,
                  keyPath: ['state'],
                  shouldExpandNode: _this2.shouldExpandNode })
              };
            }();
    
            if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
          } catch (err) {
            errorText = 'Error selecting state.';
          }
        }
    
        return _react2.default.createElement(
          'div',
          { style: {
              color: this.props.theme.base08,
              paddingTop: 20,
              paddingLeft: 30,
              paddingRight: 30,
              paddingBottom: 35
            } },
          errorText
        );
      };
    
      LogMonitorEntry.prototype.handleActionClick = function handleActionClick(e) {
        var _props = this.props;
        var actionId = _props.actionId;
        var onActionClick = _props.onActionClick;
        var onActionShiftClick = _props.onActionShiftClick;
    
        if (actionId > 0) {
          if (e.shiftKey) {
            onActionShiftClick(actionId);
          } else {
            onActionClick(actionId);
          }
        }
      };
    
      LogMonitorEntry.prototype.shouldExpandNode = function shouldExpandNode(keyName, data, level) {
        return this.props.expandStateRoot && level === 0;
      };
    
      LogMonitorEntry.prototype.render = function render() {
        var _props2 = this.props;
        var actionId = _props2.actionId;
        var error = _props2.error;
        var action = _props2.action;
        var state = _props2.state;
        var collapsed = _props2.collapsed;
        var selected = _props2.selected;
        var inFuture = _props2.inFuture;
    
        var styleEntry = {
          opacity: collapsed ? 0.5 : 1,
          cursor: actionId > 0 ? 'pointer' : 'default'
        };
    
        return _react2.default.createElement(
          'div',
          { style: {
              opacity: selected ? 0.4 : inFuture ? 0.6 : 1, // eslint-disable-line no-nested-ternary
              textDecoration: collapsed ? 'line-through' : 'none',
              color: this.props.theme.base06
            } },
          _react2.default.createElement(_LogMonitorEntryAction2.default, {
            theme: this.props.theme,
            collapsed: collapsed,
            action: action,
            expandActionRoot: this.props.expandActionRoot,
            onClick: this.handleActionClick,
            style: _extends({}, styles.entry, styleEntry) }),
          !collapsed && _react2.default.createElement(
            'div',
            { style: { paddingLeft: 16 } },
            this.printState(state, error)
          )
        );
      };
    
      return LogMonitorEntry;
    }(_react.Component);
    
    LogMonitorEntry.propTypes = {
      state: _react.PropTypes.object.isRequired,
      action: _react.PropTypes.object.isRequired,
      actionId: _react.PropTypes.number.isRequired,
      select: _react.PropTypes.func.isRequired,
      inFuture: _react.PropTypes.bool,
      error: _react.PropTypes.string,
      onActionClick: _react.PropTypes.func.isRequired,
      onActionShiftClick: _react.PropTypes.func.isRequired,
      collapsed: _react.PropTypes.bool,
      selected: _react.PropTypes.bool,
      expandActionRoot: _react.PropTypes.bool,
      expandStateRoot: _react.PropTypes.bool
    };
    exports.default = LogMonitorEntry;

/***/ },
/* 586 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = undefined;
    
    var _objectWithoutProperties2 = __webpack_require__(587);
    
    var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
    
    var _classCallCheck2 = __webpack_require__(187);
    
    var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
    
    var _possibleConstructorReturn2 = __webpack_require__(192);
    
    var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
    
    var _inherits2 = __webpack_require__(239);
    
    var _inherits3 = _interopRequireDefault(_inherits2);
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _keys = __webpack_require__(589);
    
    var _keys2 = _interopRequireDefault(_keys);
    
    var _class, _temp; // ES6 + inline style port of JSONViewer https://bitbucket.org/davevedder/react-json-viewer/
    // all credits and original code to the author
    // Dave Vedder <veddermatic@gmail.com> http://www.eskimospy.com/
    // port by Daniele Zannotti http://www.github.com/dzannotti <dzannotti@me.com>
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _JSONNode = __webpack_require__(592);
    
    var _JSONNode2 = _interopRequireDefault(_JSONNode);
    
    var _createStylingFromTheme = __webpack_require__(614);
    
    var _createStylingFromTheme2 = _interopRequireDefault(_createStylingFromTheme);
    
    var _reactBase16Styling = __webpack_require__(616);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    var identity = function identity(value) {
      return value;
    };
    var expandRootNode = function expandRootNode(keyName, data, level) {
      return level === 0;
    };
    var defaultItemString = function defaultItemString(type, data, itemType, itemString) {
      return _react2['default'].createElement(
        'span',
        null,
        itemType,
        ' ',
        itemString
      );
    };
    var defaultLabelRenderer = function defaultLabelRenderer(_ref) {
      var label = _ref[0];
      return _react2['default'].createElement(
        'span',
        null,
        label,
        ':'
      );
    };
    var noCustomNode = function noCustomNode() {
      return false;
    };
    
    function checkLegacyTheming(theme, props) {
      var deprecatedStylingMethodsMap = {
        getArrowStyle: 'arrow',
        getListStyle: 'nestedNodeChildren',
        getItemStringStyle: 'nestedNodeItemString',
        getLabelStyle: 'label',
        getValueStyle: 'valueText'
      };
    
      var deprecatedStylingMethods = (0, _keys2['default'])(deprecatedStylingMethodsMap).filter(function (name) {
        return props[name];
      });
    
      if (deprecatedStylingMethods.length > 0) {
        if (typeof theme === 'string') {
          theme = {
            extend: theme
          };
        } else {
          theme = (0, _extends3['default'])({}, theme);
        }
    
        deprecatedStylingMethods.forEach(function (name) {
          console.error( // eslint-disable-line no-console
          'Styling method "' + name + '" is deprecated, use "theme" property instead');
    
          theme[deprecatedStylingMethodsMap[name]] = function (_ref2) {
            for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
              args[_key - 1] = arguments[_key];
            }
    
            var style = _ref2.style;
            return {
              style: (0, _extends3['default'])({}, style, props[name].apply(props, args))
            };
          };
        });
      }
    
      return theme;
    }
    
    function getStateFromProps(props) {
      var theme = checkLegacyTheming(props.theme, props);
      if (props.invertTheme) {
        if (typeof theme === 'string') {
          theme = theme + ':inverted';
        } else if (theme && theme.extend) {
          if (typeof theme === 'string') {
            theme = (0, _extends3['default'])({}, theme, { extend: theme.extend + ':inverted' });
          } else {
            theme = (0, _extends3['default'])({}, theme, { extend: (0, _reactBase16Styling.invertTheme)(theme.extend) });
          }
        } else if (theme) {
          theme = (0, _reactBase16Styling.invertTheme)(theme);
        }
      }
      return {
        styling: (0, _createStylingFromTheme2['default'])(theme)
      };
    }
    
    var JSONTree = (_temp = _class = function (_React$Component) {
      (0, _inherits3['default'])(JSONTree, _React$Component);
    
      function JSONTree(props) {
        (0, _classCallCheck3['default'])(this, JSONTree);
    
        var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props));
    
        _this.state = getStateFromProps(props);
        return _this;
      }
    
      JSONTree.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
        var _this2 = this;
    
        if (['theme', 'invertTheme'].find(function (k) {
          return nextProps[k] !== _this2.props[k];
        })) {
          this.setState(getStateFromProps(nextProps));
        }
      };
    
      JSONTree.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {
        var _this3 = this;
    
        return !!(0, _keys2['default'])(nextProps).find(function (k) {
          return k === 'keyPath' ? nextProps[k].join('/') !== _this3.props[k].join('/') : nextProps[k] !== _this3.props[k];
        });
      };
    
      JSONTree.prototype.render = function render() {
        var _props = this.props,
            value = _props.data,
            keyPath = _props.keyPath,
            postprocessValue = _props.postprocessValue,
            hideRoot = _props.hideRoot,
            theme = _props.theme,
            _ = _props.invertTheme,
            rest = (0, _objectWithoutProperties3['default'])(_props, ['data', 'keyPath', 'postprocessValue', 'hideRoot', 'theme', 'invertTheme']);
        var styling = this.state.styling;
    
    
        return _react2['default'].createElement(
          'ul',
          styling('tree'),
          _react2['default'].createElement(_JSONNode2['default'], (0, _extends3['default'])({}, (0, _extends3['default'])({ postprocessValue: postprocessValue, hideRoot: hideRoot, styling: styling }, rest), {
            keyPath: hideRoot ? [] : keyPath,
            value: postprocessValue(value)
          }))
        );
      };
    
      return JSONTree;
    }(_react2['default'].Component), _class.propTypes = {
      data: _react.PropTypes.oneOfType([_react.PropTypes.array, _react.PropTypes.object]).isRequired,
      hideRoot: _react.PropTypes.bool,
      theme: _react.PropTypes.oneOfType([_react.PropTypes.object, _react.PropTypes.string]),
      invertTheme: _react.PropTypes.bool,
      keyPath: _react.PropTypes.arrayOf(_react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.number])),
      postprocessValue: _react.PropTypes.func,
      sortObjectKeys: _react.PropTypes.oneOfType([_react.PropTypes.func, _react.PropTypes.bool])
    }, _class.defaultProps = {
      shouldExpandNode: expandRootNode,
      hideRoot: false,
      keyPath: ['root'],
      getItemString: defaultItemString,
      labelRenderer: defaultLabelRenderer,
      valueRenderer: identity,
      postprocessValue: identity,
      isCustomNode: noCustomNode,
      collectionLimit: 50,
      invertTheme: true
    }, _temp);
    exports['default'] = JSONTree;

/***/ },
/* 587 */
/***/ function(module, exports) {

    "use strict";
    
    exports.__esModule = true;
    
    exports.default = function (obj, keys) {
      var target = {};
    
      for (var i in obj) {
        if (keys.indexOf(i) >= 0) continue;
        if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;
        target[i] = obj[i];
      }
    
      return target;
    };

/***/ },
/* 588 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    exports.__esModule = true;
    
    var _assign = __webpack_require__(514);
    
    var _assign2 = _interopRequireDefault(_assign);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = _assign2.default || function (target) {
      for (var i = 1; i < arguments.length; i++) {
        var source = arguments[i];
    
        for (var key in source) {
          if (Object.prototype.hasOwnProperty.call(source, key)) {
            target[key] = source[key];
          }
        }
      }
    
      return target;
    };

/***/ },
/* 589 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(590), __esModule: true };

/***/ },
/* 590 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(591);
    module.exports = __webpack_require__(174).Object.keys;

/***/ },
/* 591 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.2.14 Object.keys(O)
    var toObject = __webpack_require__(164)
      , $keys    = __webpack_require__(206);
    
    __webpack_require__(172)('keys', function(){
      return function keys(it){
        return $keys(toObject(it));
      };
    });

/***/ },
/* 592 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _objectWithoutProperties2 = __webpack_require__(587);
    
    var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _objType = __webpack_require__(593);
    
    var _objType2 = _interopRequireDefault(_objType);
    
    var _JSONObjectNode = __webpack_require__(594);
    
    var _JSONObjectNode2 = _interopRequireDefault(_JSONObjectNode);
    
    var _JSONArrayNode = __webpack_require__(607);
    
    var _JSONArrayNode2 = _interopRequireDefault(_JSONArrayNode);
    
    var _JSONIterableNode = __webpack_require__(608);
    
    var _JSONIterableNode2 = _interopRequireDefault(_JSONIterableNode);
    
    var _JSONValueNode = __webpack_require__(613);
    
    var _JSONValueNode2 = _interopRequireDefault(_JSONValueNode);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    var JSONNode = function JSONNode(_ref) {
      var getItemString = _ref.getItemString,
          keyPath = _ref.keyPath,
          labelRenderer = _ref.labelRenderer,
          styling = _ref.styling,
          value = _ref.value,
          valueRenderer = _ref.valueRenderer,
          isCustomNode = _ref.isCustomNode,
          rest = (0, _objectWithoutProperties3['default'])(_ref, ['getItemString', 'keyPath', 'labelRenderer', 'styling', 'value', 'valueRenderer', 'isCustomNode']);
    
      var nodeType = isCustomNode(value) ? 'Custom' : (0, _objType2['default'])(value);
    
      var simpleNodeProps = {
        getItemString: getItemString,
        key: keyPath[0],
        keyPath: keyPath,
        labelRenderer: labelRenderer,
        nodeType: nodeType,
        styling: styling,
        value: value,
        valueRenderer: valueRenderer
      };
    
      var nestedNodeProps = (0, _extends3['default'])({}, rest, simpleNodeProps, {
        data: value,
        isCustomNode: isCustomNode
      });
    
      switch (nodeType) {
        case 'Object':
        case 'Error':
        case 'WeakMap':
        case 'WeakSet':
          return _react2['default'].createElement(_JSONObjectNode2['default'], nestedNodeProps);
        case 'Array':
          return _react2['default'].createElement(_JSONArrayNode2['default'], nestedNodeProps);
        case 'Iterable':
        case 'Map':
        case 'Set':
          return _react2['default'].createElement(_JSONIterableNode2['default'], nestedNodeProps);
        case 'String':
          return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) {
              return '"' + raw + '"';
            } }));
        case 'Number':
          return _react2['default'].createElement(_JSONValueNode2['default'], simpleNodeProps);
        case 'Boolean':
          return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) {
              return raw ? 'true' : 'false';
            } }));
        case 'Date':
          return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) {
              return raw.toISOString();
            } }));
        case 'Null':
          return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter() {
              return 'null';
            } }));
        case 'Undefined':
          return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter() {
              return 'undefined';
            } }));
        case 'Function':
        case 'Symbol':
          return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) {
              return raw.toString();
            } }));
        case 'Custom':
          return _react2['default'].createElement(_JSONValueNode2['default'], simpleNodeProps);
        default:
          return null;
      }
    };
    
    JSONNode.propTypes = {
      getItemString: _react.PropTypes.func.isRequired,
      keyPath: _react.PropTypes.arrayOf(_react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.number])).isRequired,
      labelRenderer: _react.PropTypes.func.isRequired,
      styling: _react.PropTypes.func.isRequired,
      value: _react.PropTypes.any,
      valueRenderer: _react.PropTypes.func.isRequired,
      isCustomNode: _react.PropTypes.func.isRequired
    };
    
    exports['default'] = JSONNode;

/***/ },
/* 593 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _iterator = __webpack_require__(194);
    
    var _iterator2 = _interopRequireDefault(_iterator);
    
    exports['default'] = objType;
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    function objType(obj) {
      var type = Object.prototype.toString.call(obj).slice(8, -1);
      if (type === 'Object' && typeof obj[_iterator2['default']] === 'function') {
        return 'Iterable';
      }
    
      return type;
    }

/***/ },
/* 594 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _objectWithoutProperties2 = __webpack_require__(587);
    
    var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
    
    var _getOwnPropertyNames = __webpack_require__(595);
    
    var _getOwnPropertyNames2 = _interopRequireDefault(_getOwnPropertyNames);
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _JSONNestedNode = __webpack_require__(598);
    
    var _JSONNestedNode2 = _interopRequireDefault(_JSONNestedNode);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    // Returns the "n Items" string for this node,
    // generating and caching it if it hasn't been created yet.
    function createItemString(data) {
      var len = (0, _getOwnPropertyNames2['default'])(data).length;
      return len + ' ' + (len !== 1 ? 'keys' : 'key');
    }
    
    // Configures <JSONNestedNode> to render an Object
    var JSONObjectNode = function JSONObjectNode(_ref) {
      var data = _ref.data,
          props = (0, _objectWithoutProperties3['default'])(_ref, ['data']);
      return _react2['default'].createElement(_JSONNestedNode2['default'], (0, _extends3['default'])({}, props, {
        data: data,
        nodeType: 'Object',
        nodeTypeIndicator: props.nodeType === 'Error' ? 'Error()' : '{}',
        createItemString: createItemString,
        expandable: (0, _getOwnPropertyNames2['default'])(data).length > 0
      }));
    };
    
    JSONObjectNode.propTypes = {
      data: _react.PropTypes.object,
      nodeType: _react.PropTypes.string
    };
    
    exports['default'] = JSONObjectNode;

/***/ },
/* 595 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(596), __esModule: true };

/***/ },
/* 596 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(597);
    var $Object = __webpack_require__(174).Object;
    module.exports = function getOwnPropertyNames(it){
      return $Object.getOwnPropertyNames(it);
    };

/***/ },
/* 597 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.2.7 Object.getOwnPropertyNames(O)
    __webpack_require__(172)('getOwnPropertyNames', function(){
      return __webpack_require__(233).f;
    });

/***/ },
/* 598 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = undefined;
    
    var _keys = __webpack_require__(589);
    
    var _keys2 = _interopRequireDefault(_keys);
    
    var _classCallCheck2 = __webpack_require__(187);
    
    var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
    
    var _possibleConstructorReturn2 = __webpack_require__(192);
    
    var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
    
    var _inherits2 = __webpack_require__(239);
    
    var _inherits3 = _interopRequireDefault(_inherits2);
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _class, _temp;
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _JSONArrow = __webpack_require__(599);
    
    var _JSONArrow2 = _interopRequireDefault(_JSONArrow);
    
    var _getCollectionEntries = __webpack_require__(600);
    
    var _getCollectionEntries2 = _interopRequireDefault(_getCollectionEntries);
    
    var _JSONNode = __webpack_require__(592);
    
    var _JSONNode2 = _interopRequireDefault(_JSONNode);
    
    var _ItemRange = __webpack_require__(606);
    
    var _ItemRange2 = _interopRequireDefault(_ItemRange);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    /**
     * Renders nested values (eg. objects, arrays, lists, etc.)
     */
    
    function renderChildNodes(props, from, to) {
      var nodeType = props.nodeType,
          data = props.data,
          collectionLimit = props.collectionLimit,
          circularCache = props.circularCache,
          keyPath = props.keyPath,
          postprocessValue = props.postprocessValue,
          sortObjectKeys = props.sortObjectKeys;
    
      var childNodes = [];
    
      (0, _getCollectionEntries2['default'])(nodeType, data, sortObjectKeys, collectionLimit, from, to).forEach(function (entry) {
        if (entry.to) {
          childNodes.push(_react2['default'].createElement(_ItemRange2['default'], (0, _extends3['default'])({}, props, {
            key: 'ItemRange--' + entry.from + '-' + entry.to,
            from: entry.from,
            to: entry.to,
            renderChildNodes: renderChildNodes
          })));
        } else {
          var key = entry.key,
              value = entry.value;
    
          var isCircular = circularCache.indexOf(value) !== -1;
    
          var node = _react2['default'].createElement(_JSONNode2['default'], (0, _extends3['default'])({}, props, { postprocessValue: postprocessValue, collectionLimit: collectionLimit }, {
            key: 'Node--' + key,
            keyPath: [key].concat(keyPath),
            value: postprocessValue(value),
            circularCache: [].concat(circularCache, [value]),
            isCircular: isCircular,
            hideRoot: false
          }));
    
          if (node !== false) {
            childNodes.push(node);
          }
        }
      });
    
      return childNodes;
    }
    
    function getStateFromProps(props) {
      // calculate individual node expansion if necessary
      var expanded = props.shouldExpandNode && !props.isCircular ? props.shouldExpandNode(props.keyPath, props.data, props.level) : false;
      return {
        expanded: expanded
      };
    }
    
    var JSONNestedNode = (_temp = _class = function (_React$Component) {
      (0, _inherits3['default'])(JSONNestedNode, _React$Component);
    
      function JSONNestedNode(props) {
        (0, _classCallCheck3['default'])(this, JSONNestedNode);
    
        var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props));
    
        _this.handleClick = function () {
          return _this.setState({ expanded: !_this.state.expanded });
        };
    
        _this.state = getStateFromProps(props);
        return _this;
      }
    
      JSONNestedNode.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
        var nextState = getStateFromProps(nextProps);
        if (getStateFromProps(this.props).expanded !== nextState.expanded) {
          this.setState(nextState);
        }
      };
    
      JSONNestedNode.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {
        var _this2 = this;
    
        return !!(0, _keys2['default'])(nextProps).find(function (key) {
          return key !== 'circularCache' && (key === 'keyPath' ? nextProps[key].join('/') !== _this2.props[key].join('/') : nextProps[key] !== _this2.props[key]);
        }) || nextState.expanded !== this.state.expanded;
      };
    
      JSONNestedNode.prototype.render = function render() {
        var _props = this.props,
            getItemString = _props.getItemString,
            nodeTypeIndicator = _props.nodeTypeIndicator,
            nodeType = _props.nodeType,
            data = _props.data,
            hideRoot = _props.hideRoot,
            createItemString = _props.createItemString,
            styling = _props.styling,
            collectionLimit = _props.collectionLimit,
            keyPath = _props.keyPath,
            labelRenderer = _props.labelRenderer,
            expandable = _props.expandable;
        var expanded = this.state.expanded;
    
        var renderedChildren = expanded || hideRoot && this.props.level === 0 ? renderChildNodes((0, _extends3['default'])({}, this.props, { level: this.props.level + 1 })) : null;
    
        var itemType = _react2['default'].createElement(
          'span',
          styling('nestedNodeItemType', expanded),
          nodeTypeIndicator
        );
        var renderedItemString = getItemString(nodeType, data, itemType, createItemString(data, collectionLimit));
        var stylingArgs = [keyPath, nodeType, expanded, expandable];
    
        return hideRoot ? _react2['default'].createElement(
          'li',
          styling.apply(undefined, ['rootNode'].concat(stylingArgs)),
          _react2['default'].createElement(
            'ul',
            styling.apply(undefined, ['rootNodeChildren'].concat(stylingArgs)),
            renderedChildren
          )
        ) : _react2['default'].createElement(
          'li',
          styling.apply(undefined, ['nestedNode'].concat(stylingArgs)),
          expandable && _react2['default'].createElement(_JSONArrow2['default'], {
            styling: styling,
            nodeType: nodeType,
            expanded: expanded,
            onClick: this.handleClick
          }),
          _react2['default'].createElement(
            'label',
            (0, _extends3['default'])({}, styling.apply(undefined, [['label', 'nestedNodeLabel']].concat(stylingArgs)), {
              onClick: expandable && this.handleClick
            }),
            labelRenderer.apply(undefined, stylingArgs)
          ),
          _react2['default'].createElement(
            'span',
            (0, _extends3['default'])({}, styling.apply(undefined, ['nestedNodeItemString'].concat(stylingArgs)), {
              onClick: expandable && this.handleClick
            }),
            renderedItemString
          ),
          _react2['default'].createElement(
            'ul',
            styling.apply(undefined, ['nestedNodeChildren'].concat(stylingArgs)),
            renderedChildren
          )
        );
      };
    
      return JSONNestedNode;
    }(_react2['default'].Component), _class.propTypes = {
      getItemString: _react.PropTypes.func.isRequired,
      nodeTypeIndicator: _react.PropTypes.any,
      nodeType: _react.PropTypes.string.isRequired,
      data: _react.PropTypes.any,
      hideRoot: _react.PropTypes.bool.isRequired,
      createItemString: _react.PropTypes.func.isRequired,
      styling: _react.PropTypes.func.isRequired,
      collectionLimit: _react.PropTypes.number,
      keyPath: _react.PropTypes.arrayOf(_react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.number])).isRequired,
      labelRenderer: _react.PropTypes.func.isRequired,
      shouldExpandNode: _react.PropTypes.func,
      level: _react.PropTypes.number.isRequired,
      sortObjectKeys: _react.PropTypes.oneOfType([_react.PropTypes.func, _react.PropTypes.bool]),
      isCircular: _react.PropTypes.bool,
      expandable: _react.PropTypes.bool
    }, _class.defaultProps = {
      data: [],
      circularCache: [],
      level: 0,
      expandable: true
    }, _temp);
    exports['default'] = JSONNestedNode;

/***/ },
/* 599 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    var JSONArrow = function JSONArrow(_ref) {
      var styling = _ref.styling,
          arrowStyle = _ref.arrowStyle,
          expanded = _ref.expanded,
          nodeType = _ref.nodeType,
          onClick = _ref.onClick;
      return _react2['default'].createElement(
        'div',
        (0, _extends3['default'])({}, styling('arrowContainer', arrowStyle), {
          onClick: onClick
        }),
        _react2['default'].createElement(
          'div',
          styling(['arrow', 'arrowSign'], nodeType, expanded, arrowStyle),
          '\u25B6',
          arrowStyle === 'double' && _react2['default'].createElement(
            'div',
            styling(['arrowSign', 'arrowSignInner']),
            '\u25B6'
          )
        )
      );
    };
    
    JSONArrow.propTypes = {
      styling: _react.PropTypes.func.isRequired,
      arrowStyle: _react.PropTypes.oneOf(['single', 'double']),
      expanded: _react.PropTypes.bool.isRequired,
      nodeType: _react.PropTypes.string.isRequired,
      onClick: _react.PropTypes.func.isRequired
    };
    
    JSONArrow.defaultProps = {
      arrowStyle: 'single'
    };
    
    exports['default'] = JSONArrow;

/***/ },
/* 600 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _getIterator2 = __webpack_require__(601);
    
    var _getIterator3 = _interopRequireDefault(_getIterator2);
    
    var _getOwnPropertyNames = __webpack_require__(595);
    
    var _getOwnPropertyNames2 = _interopRequireDefault(_getOwnPropertyNames);
    
    var _keys = __webpack_require__(589);
    
    var _keys2 = _interopRequireDefault(_keys);
    
    exports['default'] = getCollectionEntries;
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    function getLength(type, collection) {
      if (type === 'Object') {
        return (0, _keys2['default'])(collection).length;
      } else if (type === 'Array') {
        return collection.length;
      }
    
      return Infinity;
    }
    
    function isIterableMap(collection) {
      return typeof collection.set === 'function';
    }
    
    function getEntries(type, collection, sortObjectKeys) {
      var from = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
      var to = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Infinity;
    
      var res = void 0;
    
      if (type === 'Object') {
        var keys = (0, _getOwnPropertyNames2['default'])(collection);
    
        if (typeof sortObjectKeys !== 'undefined') {
          keys.sort(sortObjectKeys);
        }
    
        keys = keys.slice(from, to + 1);
    
        res = {
          entries: keys.map(function (key) {
            return { key: key, value: collection[key] };
          })
        };
      } else if (type === 'Array') {
        res = {
          entries: collection.slice(from, to + 1).map(function (val, idx) {
            return { key: idx + from, value: val };
          })
        };
      } else {
        var idx = 0;
        var entries = [];
        var done = true;
    
        var isMap = isIterableMap(collection);
    
        for (var _iterator = collection, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3['default'])(_iterator);;) {
          var _ref;
    
          if (_isArray) {
            if (_i >= _iterator.length) break;
            _ref = _iterator[_i++];
          } else {
            _i = _iterator.next();
            if (_i.done) break;
            _ref = _i.value;
          }
    
          var item = _ref;
    
          if (idx > to) {
            done = false;
            break;
          }if (from <= idx) {
            if (isMap && Array.isArray(item)) {
              if (typeof item[0] === 'string' || typeof item[0] === 'number') {
                entries.push({ key: item[0], value: item[1] });
              } else {
                entries.push({ key: '[entry ' + idx + ']', value: {
                    '[key]': item[0],
                    '[value]': item[1]
                  } });
              }
            } else {
              entries.push({ key: idx, value: item });
            }
          }
          idx++;
        }
    
        res = {
          hasMore: !done,
          entries: entries
        };
      }
    
      return res;
    }
    
    function getRanges(from, to, limit) {
      var ranges = [];
      while (to - from > limit * limit) {
        limit = limit * limit;
      }
      for (var i = from; i <= to; i += limit) {
        ranges.push({ from: i, to: Math.min(to, i + limit - 1) });
      }
    
      return ranges;
    }
    
    function getCollectionEntries(type, collection, sortObjectKeys, limit) {
      var from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
      var to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : Infinity;
    
      var getEntriesBound = getEntries.bind(null, type, collection, sortObjectKeys);
    
      if (!limit) {
        return getEntriesBound().entries;
      }
    
      var isSubset = to < Infinity;
      var length = Math.min(to - from, getLength(type, collection));
    
      if (type !== 'Iterable') {
        if (length <= limit || limit < 7) {
          return getEntriesBound(from, to).entries;
        }
      } else {
        if (length <= limit && !isSubset) {
          return getEntriesBound(from, to).entries;
        }
      }
    
      var limitedEntries = void 0;
      if (type === 'Iterable') {
        var _getEntriesBound = getEntriesBound(from, from + limit - 1),
            hasMore = _getEntriesBound.hasMore,
            entries = _getEntriesBound.entries;
    
        limitedEntries = hasMore ? [].concat(entries, getRanges(from + limit, from + 2 * limit - 1, limit)) : entries;
      } else {
        limitedEntries = isSubset ? getRanges(from, to, limit) : [].concat(getEntriesBound(0, limit - 5).entries, getRanges(limit - 4, length - 5, limit), getEntriesBound(length - 4, length - 1).entries);
      }
    
      return limitedEntries;
    }

/***/ },
/* 601 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(602), __esModule: true };

/***/ },
/* 602 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(218);
    __webpack_require__(196);
    module.exports = __webpack_require__(603);

/***/ },
/* 603 */
/***/ function(module, exports, __webpack_require__) {

    var anObject = __webpack_require__(179)
      , get      = __webpack_require__(604);
    module.exports = __webpack_require__(174).getIterator = function(it){
      var iterFn = get(it);
      if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');
      return anObject(iterFn.call(it));
    };

/***/ },
/* 604 */
/***/ function(module, exports, __webpack_require__) {

    var classof   = __webpack_require__(605)
      , ITERATOR  = __webpack_require__(217)('iterator')
      , Iterators = __webpack_require__(202);
    module.exports = __webpack_require__(174).getIteratorMethod = function(it){
      if(it != undefined)return it[ITERATOR]
        || it['@@iterator']
        || Iterators[classof(it)];
    };

/***/ },
/* 605 */
/***/ function(module, exports, __webpack_require__) {

    // getting tag from 19.1.3.6 Object.prototype.toString()
    var cof = __webpack_require__(210)
      , TAG = __webpack_require__(217)('toStringTag')
      // ES3 wrong here
      , ARG = cof(function(){ return arguments; }()) == 'Arguments';
    
    // fallback for IE11 Script Access Denied error
    var tryGet = function(it, key){
      try {
        return it[key];
      } catch(e){ /* empty */ }
    };
    
    module.exports = function(it){
      var O, T, B;
      return it === undefined ? 'Undefined' : it === null ? 'Null'
        // @@toStringTag case
        : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
        // builtinTag case
        : ARG ? cof(O)
        // ES3 arguments fallback
        : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
    };

/***/ },
/* 606 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = undefined;
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _classCallCheck2 = __webpack_require__(187);
    
    var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
    
    var _possibleConstructorReturn2 = __webpack_require__(192);
    
    var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
    
    var _inherits2 = __webpack_require__(239);
    
    var _inherits3 = _interopRequireDefault(_inherits2);
    
    var _class, _temp;
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _JSONArrow = __webpack_require__(599);
    
    var _JSONArrow2 = _interopRequireDefault(_JSONArrow);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    var ItemRange = (_temp = _class = function (_React$Component) {
      (0, _inherits3['default'])(ItemRange, _React$Component);
    
      function ItemRange(props) {
        (0, _classCallCheck3['default'])(this, ItemRange);
    
        var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props));
    
        _this.state = { expanded: false };
    
        _this.handleClick = _this.handleClick.bind(_this);
        return _this;
      }
    
      ItemRange.prototype.render = function render() {
        var _props = this.props,
            styling = _props.styling,
            from = _props.from,
            to = _props.to,
            renderChildNodes = _props.renderChildNodes,
            nodeType = _props.nodeType;
    
    
        return this.state.expanded ? _react2['default'].createElement(
          'div',
          styling('itemRange', this.state.expanded),
          renderChildNodes(this.props, from, to)
        ) : _react2['default'].createElement(
          'div',
          (0, _extends3['default'])({}, styling('itemRange', this.state.expanded), {
            onClick: this.handleClick
          }),
          _react2['default'].createElement(_JSONArrow2['default'], {
            nodeType: nodeType,
            styling: styling,
            expanded: false,
            onClick: this.handleClick,
            arrowStyle: 'double'
          }),
          from + ' ... ' + to
        );
      };
    
      ItemRange.prototype.handleClick = function handleClick() {
        this.setState({ expanded: !this.state.expanded });
      };
    
      return ItemRange;
    }(_react2['default'].Component), _class.propTypes = {
      styling: _react.PropTypes.func.isRequired,
      from: _react.PropTypes.number.isRequired,
      to: _react.PropTypes.number.isRequired,
      renderChildNodes: _react.PropTypes.func.isRequired,
      nodeType: _react.PropTypes.string.isRequired
    }, _temp);
    exports['default'] = ItemRange;

/***/ },
/* 607 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _objectWithoutProperties2 = __webpack_require__(587);
    
    var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _JSONNestedNode = __webpack_require__(598);
    
    var _JSONNestedNode2 = _interopRequireDefault(_JSONNestedNode);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    // Returns the "n Items" string for this node,
    // generating and caching it if it hasn't been created yet.
    function createItemString(data) {
      return data.length + ' ' + (data.length !== 1 ? 'items' : 'item');
    }
    
    // Configures <JSONNestedNode> to render an Array
    var JSONArrayNode = function JSONArrayNode(_ref) {
      var data = _ref.data,
          props = (0, _objectWithoutProperties3['default'])(_ref, ['data']);
      return _react2['default'].createElement(_JSONNestedNode2['default'], (0, _extends3['default'])({}, props, {
        data: data,
        nodeType: 'Array',
        nodeTypeIndicator: '[]',
        createItemString: createItemString,
        expandable: data.length > 0
      }));
    };
    
    JSONArrayNode.propTypes = {
      data: _react.PropTypes.array
    };
    
    exports['default'] = JSONArrayNode;

/***/ },
/* 608 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _objectWithoutProperties2 = __webpack_require__(587);
    
    var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
    
    var _getIterator2 = __webpack_require__(601);
    
    var _getIterator3 = _interopRequireDefault(_getIterator2);
    
    var _isSafeInteger = __webpack_require__(609);
    
    var _isSafeInteger2 = _interopRequireDefault(_isSafeInteger);
    
    exports['default'] = JSONIterableNode;
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _JSONNestedNode = __webpack_require__(598);
    
    var _JSONNestedNode2 = _interopRequireDefault(_JSONNestedNode);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    // Returns the "n Items" string for this node,
    // generating and caching it if it hasn't been created yet.
    function createItemString(data, limit) {
      var count = 0;
      var hasMore = false;
      if ((0, _isSafeInteger2['default'])(data.size)) {
        count = data.size;
      } else {
        for (var _iterator = data, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3['default'])(_iterator);;) {
          var _ref;
    
          if (_isArray) {
            if (_i >= _iterator.length) break;
            _ref = _iterator[_i++];
          } else {
            _i = _iterator.next();
            if (_i.done) break;
            _ref = _i.value;
          }
    
          var entry = _ref;
          // eslint-disable-line no-unused-vars
          if (limit && count + 1 > limit) {
            hasMore = true;
            break;
          }
          count += 1;
        }
      }
      return '' + (hasMore ? '>' : '') + count + ' ' + (count !== 1 ? 'entries' : 'entry');
    }
    
    // Configures <JSONNestedNode> to render an iterable
    function JSONIterableNode(_ref2) {
      var props = (0, _objectWithoutProperties3['default'])(_ref2, []);
    
      return _react2['default'].createElement(_JSONNestedNode2['default'], (0, _extends3['default'])({}, props, {
        nodeType: 'Iterable',
        nodeTypeIndicator: '()',
        createItemString: createItemString
      }));
    }

/***/ },
/* 609 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(610), __esModule: true };

/***/ },
/* 610 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(611);
    module.exports = __webpack_require__(174).Number.isSafeInteger;

/***/ },
/* 611 */
/***/ function(module, exports, __webpack_require__) {

    // 20.1.2.5 Number.isSafeInteger(number)
    var $export   = __webpack_require__(173)
      , isInteger = __webpack_require__(612)
      , abs       = Math.abs;
    
    $export($export.S, 'Number', {
      isSafeInteger: function isSafeInteger(number){
        return isInteger(number) && abs(number) <= 0x1fffffffffffff;
      }
    });

/***/ },
/* 612 */
/***/ function(module, exports, __webpack_require__) {

    // 20.1.2.3 Number.isInteger(number)
    var isObject = __webpack_require__(180)
      , floor    = Math.floor;
    module.exports = function isInteger(it){
      return !isObject(it) && isFinite(it) && floor(it) === it;
    };

/***/ },
/* 613 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    /**
     * Renders simple values (eg. strings, numbers, booleans, etc)
     */
    
    var JSONValueNode = function JSONValueNode(_ref) {
      var nodeType = _ref.nodeType,
          styling = _ref.styling,
          labelRenderer = _ref.labelRenderer,
          keyPath = _ref.keyPath,
          valueRenderer = _ref.valueRenderer,
          value = _ref.value,
          valueGetter = _ref.valueGetter;
      return _react2['default'].createElement(
        'li',
        styling('value', nodeType, keyPath),
        _react2['default'].createElement(
          'label',
          styling(['label', 'valueLabel'], nodeType, keyPath),
          labelRenderer(keyPath, nodeType, false, false)
        ),
        _react2['default'].createElement(
          'span',
          styling('valueText', nodeType, keyPath),
          valueRenderer.apply(undefined, [valueGetter(value), value].concat(keyPath))
        )
      );
    };
    
    JSONValueNode.propTypes = {
      nodeType: _react.PropTypes.string.isRequired,
      styling: _react.PropTypes.func.isRequired,
      labelRenderer: _react.PropTypes.func.isRequired,
      keyPath: _react.PropTypes.arrayOf(_react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.number])).isRequired,
      valueRenderer: _react.PropTypes.func.isRequired,
      value: _react.PropTypes.any,
      valueGetter: _react.PropTypes.func
    };
    
    JSONValueNode.defaultProps = {
      valueGetter: function valueGetter(value) {
        return value;
      }
    };
    
    exports['default'] = JSONValueNode;

/***/ },
/* 614 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _solarized = __webpack_require__(615);
    
    var _solarized2 = _interopRequireDefault(_solarized);
    
    var _reactBase16Styling = __webpack_require__(616);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
    
    var colorMap = function colorMap(theme) {
      return {
        BACKGROUND_COLOR: theme.base00,
        TEXT_COLOR: theme.base07,
        STRING_COLOR: theme.base0B,
        DATE_COLOR: theme.base0B,
        NUMBER_COLOR: theme.base09,
        BOOLEAN_COLOR: theme.base09,
        NULL_COLOR: theme.base08,
        UNDEFINED_COLOR: theme.base08,
        FUNCTION_COLOR: theme.base08,
        SYMBOL_COLOR: theme.base08,
        LABEL_COLOR: theme.base0D,
        ARROW_COLOR: theme.base0D,
        ITEM_STRING_COLOR: theme.base0B,
        ITEM_STRING_EXPANDED_COLOR: theme.base03
      };
    };
    
    var valueColorMap = function valueColorMap(colors) {
      return {
        String: colors.STRING_COLOR,
        Date: colors.DATE_COLOR,
        Number: colors.NUMBER_COLOR,
        Boolean: colors.BOOLEAN_COLOR,
        Null: colors.NULL_COLOR,
        Undefined: colors.UNDEFINED_COLOR,
        Function: colors.FUNCTION_COLOR,
        Symbol: colors.SYMBOL_COLOR
      };
    };
    
    var getDefaultThemeStyling = function getDefaultThemeStyling(theme) {
      var colors = colorMap(theme);
    
      return {
        tree: {
          border: 0,
          padding: 0,
          marginTop: '0.5em',
          marginBottom: '0.5em',
          marginLeft: '0.125em',
          marginRight: 0,
          listStyle: 'none',
          MozUserSelect: 'none',
          WebkitUserSelect: 'none',
          backgroundColor: colors.BACKGROUND_COLOR
        },
    
        value: function value(_ref, nodeType, keyPath) {
          var style = _ref.style;
          return {
            style: (0, _extends3['default'])({}, style, {
              paddingTop: '0.25em',
              paddingRight: 0,
              marginLeft: '0.875em',
              WebkitUserSelect: 'text',
              MozUserSelect: 'text',
              wordWrap: 'break-word',
              paddingLeft: keyPath.length > 1 ? '2.125em' : '1.25em',
              textIndent: '-0.5em',
              wordBreak: 'break-all'
            })
          };
        },
    
        label: {
          display: 'inline-block',
          color: colors.LABEL_COLOR
        },
    
        valueLabel: {
          margin: '0 0.5em 0 0'
        },
    
        valueText: function valueText(_ref2, nodeType) {
          var style = _ref2.style;
          return {
            style: (0, _extends3['default'])({}, style, {
              color: valueColorMap(colors)[nodeType]
            })
          };
        },
    
        itemRange: function itemRange(_ref3, expanded) {
          var style = _ref3.style;
          return {
            style: {
              paddingTop: expanded ? 0 : '0.25em',
              cursor: 'pointer',
              color: colors.LABEL_COLOR
            }
          };
        },
    
        arrow: function arrow(_ref4, nodeType, expanded) {
          var style = _ref4.style;
          return {
            style: (0, _extends3['default'])({}, style, {
              marginLeft: 0,
              transition: '150ms',
              WebkitTransition: '150ms',
              MozTransition: '150ms',
              WebkitTransform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)',
              MozTransform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)',
              transform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)',
              transformOrigin: '45% 50%',
              WebkitTransformOrigin: '45% 50%',
              MozTransformOrigin: '45% 50%',
              position: 'relative',
              lineHeight: '1.1em',
              fontSize: '0.75em'
            })
          };
        },
    
        arrowContainer: function arrowContainer(_ref5, arrowStyle) {
          var style = _ref5.style;
          return {
            style: (0, _extends3['default'])({}, style, {
              display: 'inline-block',
              paddingRight: '0.5em',
              paddingLeft: arrowStyle === 'double' ? '1em' : 0,
              cursor: 'pointer'
            })
          };
        },
    
        arrowSign: {
          color: colors.ARROW_COLOR
        },
    
        arrowSignInner: {
          position: 'absolute',
          top: 0,
          left: '-0.4em'
        },
    
        nestedNode: function nestedNode(_ref6, keyPath, nodeType, expanded, expandable) {
          var style = _ref6.style;
          return {
            style: (0, _extends3['default'])({}, style, {
              position: 'relative',
              paddingTop: '0.25em',
              marginLeft: keyPath.length > 1 ? '0.875em' : 0,
              paddingLeft: !expandable ? '1.125em' : 0
            })
          };
        },
    
        rootNode: {
          padding: 0,
          margin: 0
        },
    
        nestedNodeLabel: function nestedNodeLabel(_ref7, keyPath, nodeType, expanded, expandable) {
          var style = _ref7.style;
          return {
            style: (0, _extends3['default'])({}, style, {
              margin: 0,
              padding: 0,
              WebkitUserSelect: expandable ? 'inherit' : 'text',
              MozUserSelect: expandable ? 'inherit' : 'text',
              cursor: expandable ? 'pointer' : 'default'
            })
          };
        },
    
        nestedNodeItemString: function nestedNodeItemString(_ref8, keyPath, nodeType, expanded) {
          var style = _ref8.style;
          return {
            style: (0, _extends3['default'])({}, style, {
              paddingLeft: '0.5em',
              cursor: 'default',
              color: expanded ? colors.ITEM_STRING_EXPANDED_COLOR : colors.ITEM_STRING_COLOR
            })
          };
        },
    
        nestedNodeItemType: {
          marginLeft: '0.3em',
          marginRight: '0.3em'
        },
    
        nestedNodeChildren: function nestedNodeChildren(_ref9, nodeType, expanded) {
          var style = _ref9.style;
          return {
            style: (0, _extends3['default'])({}, style, {
              padding: 0,
              margin: 0,
              listStyle: 'none',
              display: expanded ? 'block' : 'none'
            })
          };
        },
    
        rootNodeChildren: {
          padding: 0,
          margin: 0,
          listStyle: 'none'
        }
      };
    };
    
    exports['default'] = (0, _reactBase16Styling.createStyling)(getDefaultThemeStyling, {
      defaultBase16: _solarized2['default']
    });

/***/ },
/* 615 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports['default'] = {
      scheme: 'solarized',
      author: 'ethan schoonover (http://ethanschoonover.com/solarized)',
      base00: '#002b36',
      base01: '#073642',
      base02: '#586e75',
      base03: '#657b83',
      base04: '#839496',
      base05: '#93a1a1',
      base06: '#eee8d5',
      base07: '#fdf6e3',
      base08: '#dc322f',
      base09: '#cb4b16',
      base0A: '#b58900',
      base0B: '#859900',
      base0C: '#2aa198',
      base0D: '#268bd2',
      base0E: '#6c71c4',
      base0F: '#d33682'
    };

/***/ },
/* 616 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.getBase16Theme = exports.createStyling = exports.invertTheme = undefined;
    
    var _typeof2 = __webpack_require__(193);
    
    var _typeof3 = _interopRequireDefault(_typeof2);
    
    var _extends2 = __webpack_require__(588);
    
    var _extends3 = _interopRequireDefault(_extends2);
    
    var _slicedToArray2 = __webpack_require__(617);
    
    var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
    
    var _keys = __webpack_require__(589);
    
    var _keys2 = _interopRequireDefault(_keys);
    
    var _lodash = __webpack_require__(621);
    
    var _lodash2 = _interopRequireDefault(_lodash);
    
    var _base = __webpack_require__(540);
    
    var base16 = _interopRequireWildcard(_base);
    
    var _rgb2hex = __webpack_require__(622);
    
    var _rgb2hex2 = _interopRequireDefault(_rgb2hex);
    
    var _parse = __webpack_require__(624);
    
    var _parse2 = _interopRequireDefault(_parse);
    
    var _lodash3 = __webpack_require__(630);
    
    var _lodash4 = _interopRequireDefault(_lodash3);
    
    var _colorConverters = __webpack_require__(631);
    
    function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    var DEFAULT_BASE16 = base16.default;
    
    var BASE16_KEYS = (0, _keys2.default)(DEFAULT_BASE16);
    
    // we need a correcting factor, so that a dark, but not black background color
    // converts to bright enough inversed color
    var flip = function flip(x) {
      return x < 0.25 ? 1 : x < 0.5 ? 0.9 - x : 1.1 - x;
    };
    
    var invertColor = (0, _lodash4.default)(_parse2.default, _colorConverters.rgb2yuv, function (_ref) {
      var _ref2 = (0, _slicedToArray3.default)(_ref, 3),
          y = _ref2[0],
          u = _ref2[1],
          v = _ref2[2];
    
      return [flip(y), u, v];
    }, _colorConverters.yuv2rgb, _rgb2hex2.default);
    
    var merger = function merger(styling) {
      return function (prevStyling) {
        return {
          className: [prevStyling.className, styling.className].filter(Boolean).join(' '),
          style: (0, _extends3.default)({}, prevStyling.style || {}, styling.style || {})
        };
      };
    };
    
    var mergeStyling = function mergeStyling(customStyling, defaultStyling) {
      if (customStyling === undefined) {
        return defaultStyling;
      }
      if (defaultStyling === undefined) {
        return customStyling;
      }
    
      var customType = typeof customStyling === 'undefined' ? 'undefined' : (0, _typeof3.default)(customStyling);
      var defaultType = typeof defaultStyling === 'undefined' ? 'undefined' : (0, _typeof3.default)(defaultStyling);
    
      switch (customType) {
        case 'string':
          switch (defaultType) {
            case 'string':
              return [defaultStyling, customStyling].filter(Boolean).join(' ');
            case 'object':
              return merger({ className: customStyling, style: defaultStyling });
            case 'function':
              return function (styling) {
                for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
                  args[_key - 1] = arguments[_key];
                }
    
                return merger({
                  className: customStyling
                })(defaultStyling.apply(undefined, [styling].concat(args)));
              };
          }
        case 'object':
          switch (defaultType) {
            case 'string':
              return merger({ className: defaultStyling, style: customStyling });
            case 'object':
              return (0, _extends3.default)({}, defaultStyling, customStyling);
            case 'function':
              return function (styling) {
                for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
                  args[_key2 - 1] = arguments[_key2];
                }
    
                return merger({
                  style: customStyling
                })(defaultStyling.apply(undefined, [styling].concat(args)));
              };
          }
        case 'function':
          switch (defaultType) {
            case 'string':
              return function (styling) {
                for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
                  args[_key3 - 1] = arguments[_key3];
                }
    
                return customStyling.apply(undefined, [merger(styling)({
                  className: defaultStyling
                })].concat(args));
              };
            case 'object':
              return function (styling) {
                for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
                  args[_key4 - 1] = arguments[_key4];
                }
    
                return customStyling.apply(undefined, [merger(styling)({
                  style: defaultStyling
                })].concat(args));
              };
            case 'function':
              return function (styling) {
                for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
                  args[_key5 - 1] = arguments[_key5];
                }
    
                return customStyling.apply(undefined, [defaultStyling.apply(undefined, [styling].concat(args))].concat(args));
              };
          }
      }
    };
    
    var mergeStylings = function mergeStylings(customStylings, defaultStylings) {
      var keys = (0, _keys2.default)(defaultStylings);
      for (var key in customStylings) {
        if (keys.indexOf(key) === -1) keys.push(key);
      }
    
      return keys.reduce(function (mergedStyling, key) {
        return mergedStyling[key] = mergeStyling(customStylings[key], defaultStylings[key]), mergedStyling;
      }, {});
    };
    
    var getStylingByKeys = function getStylingByKeys(mergedStyling, keys) {
      for (var _len6 = arguments.length, args = Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) {
        args[_key6 - 2] = arguments[_key6];
      }
    
      if (keys === null) {
        return mergedStyling;
      }
    
      if (!Array.isArray(keys)) {
        keys = [keys];
      }
    
      var styles = keys.map(function (key) {
        return mergedStyling[key];
      }).filter(Boolean);
    
      var props = styles.reduce(function (obj, s) {
        if (typeof s === 'string') {
          obj.className = [obj.className, s].filter(Boolean).join(' ');
        } else if ((typeof s === 'undefined' ? 'undefined' : (0, _typeof3.default)(s)) === 'object') {
          obj.style = (0, _extends3.default)({}, obj.style, s);
        } else if (typeof s === 'function') {
          obj = (0, _extends3.default)({}, obj, s.apply(undefined, [obj].concat(args)));
        }
    
        return obj;
      }, { className: '', style: {} });
    
      if (!props.className) {
        delete props.className;
      }
    
      if ((0, _keys2.default)(props.style).length === 0) {
        delete props.style;
      }
    
      return props;
    };
    
    var invertTheme = exports.invertTheme = function invertTheme(theme) {
      return (0, _keys2.default)(theme).reduce(function (t, key) {
        return t[key] = /^base/.test(key) ? invertColor(theme[key]) : key === 'scheme' ? theme[key] + ':inverted' : theme[key], t;
      }, {});
    };
    
    var createStyling = exports.createStyling = (0, _lodash2.default)(function (getStylingFromBase16) {
      for (var _len7 = arguments.length, args = Array(_len7 > 3 ? _len7 - 3 : 0), _key7 = 3; _key7 < _len7; _key7++) {
        args[_key7 - 3] = arguments[_key7];
      }
    
      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
      var themeOrStyling = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
      var _options$defaultBase = options.defaultBase16,
          defaultBase16 = _options$defaultBase === undefined ? DEFAULT_BASE16 : _options$defaultBase,
          _options$base16Themes = options.base16Themes,
          base16Themes = _options$base16Themes === undefined ? null : _options$base16Themes;
    
    
      var base16Theme = getBase16Theme(themeOrStyling, base16Themes);
      if (base16Theme) {
        themeOrStyling = (0, _extends3.default)({}, base16Theme, themeOrStyling);
      }
    
      var theme = BASE16_KEYS.reduce(function (t, key) {
        return t[key] = themeOrStyling[key] || defaultBase16[key], t;
      }, {});
    
      var customStyling = (0, _keys2.default)(themeOrStyling).reduce(function (s, key) {
        return BASE16_KEYS.indexOf(key) === -1 ? (s[key] = themeOrStyling[key], s) : s;
      }, {});
    
      var defaultStyling = getStylingFromBase16(theme);
    
      var mergedStyling = mergeStylings(customStyling, defaultStyling);
    
      return (0, _lodash2.default)(getStylingByKeys, 2).apply(undefined, [mergedStyling].concat(args));
    }, 3);
    
    var getBase16Theme = exports.getBase16Theme = function getBase16Theme(theme, base16Themes) {
      if (theme && theme.extend) {
        theme = theme.extend;
      }
    
      if (typeof theme === 'string') {
        var _theme$split = theme.split(':'),
            _theme$split2 = (0, _slicedToArray3.default)(_theme$split, 2),
            themeName = _theme$split2[0],
            modifier = _theme$split2[1];
    
        theme = (base16Themes || {})[themeName] || base16[themeName];
        if (modifier === 'inverted') {
          theme = invertTheme(theme);
        }
      }
    
      return theme && theme.hasOwnProperty('base00') ? theme : undefined;
    };

/***/ },
/* 617 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    exports.__esModule = true;
    
    var _isIterable2 = __webpack_require__(618);
    
    var _isIterable3 = _interopRequireDefault(_isIterable2);
    
    var _getIterator2 = __webpack_require__(601);
    
    var _getIterator3 = _interopRequireDefault(_getIterator2);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = function () {
      function sliceIterator(arr, i) {
        var _arr = [];
        var _n = true;
        var _d = false;
        var _e = undefined;
    
        try {
          for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {
            _arr.push(_s.value);
    
            if (i && _arr.length === i) break;
          }
        } catch (err) {
          _d = true;
          _e = err;
        } finally {
          try {
            if (!_n && _i["return"]) _i["return"]();
          } finally {
            if (_d) throw _e;
          }
        }
    
        return _arr;
      }
    
      return function (arr, i) {
        if (Array.isArray(arr)) {
          return arr;
        } else if ((0, _isIterable3.default)(Object(arr))) {
          return sliceIterator(arr, i);
        } else {
          throw new TypeError("Invalid attempt to destructure non-iterable instance");
        }
      };
    }();

/***/ },
/* 618 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(619), __esModule: true };

/***/ },
/* 619 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(218);
    __webpack_require__(196);
    module.exports = __webpack_require__(620);

/***/ },
/* 620 */
/***/ function(module, exports, __webpack_require__) {

    var classof   = __webpack_require__(605)
      , ITERATOR  = __webpack_require__(217)('iterator')
      , Iterators = __webpack_require__(202);
    module.exports = __webpack_require__(174).isIterable = function(it){
      var O = Object(it);
      return O[ITERATOR] !== undefined
        || '@@iterator' in O
        || Iterators.hasOwnProperty(classof(O));
    };

/***/ },
/* 621 */
/***/ function(module, exports) {

    /* WEBPACK VAR INJECTION */(function(global) {/**
     * lodash (Custom Build) <https://lodash.com/>
     * Build: `lodash modularize exports="npm" -o ./`
     * Copyright jQuery Foundation and other contributors <https://jquery.org/>
     * Released under MIT license <https://lodash.com/license>
     * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
     * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
     */
    
    /** Used as the `TypeError` message for "Functions" methods. */
    var FUNC_ERROR_TEXT = 'Expected a function';
    
    /** Used as the internal argument placeholder. */
    var PLACEHOLDER = '__lodash_placeholder__';
    
    /** Used to compose bitmasks for function metadata. */
    var BIND_FLAG = 1,
        BIND_KEY_FLAG = 2,
        CURRY_BOUND_FLAG = 4,
        CURRY_FLAG = 8,
        CURRY_RIGHT_FLAG = 16,
        PARTIAL_FLAG = 32,
        PARTIAL_RIGHT_FLAG = 64,
        ARY_FLAG = 128,
        REARG_FLAG = 256,
        FLIP_FLAG = 512;
    
    /** Used as references for various `Number` constants. */
    var INFINITY = 1 / 0,
        MAX_SAFE_INTEGER = 9007199254740991,
        MAX_INTEGER = 1.7976931348623157e+308,
        NAN = 0 / 0;
    
    /** Used to associate wrap methods with their bit flags. */
    var wrapFlags = [
      ['ary', ARY_FLAG],
      ['bind', BIND_FLAG],
      ['bindKey', BIND_KEY_FLAG],
      ['curry', CURRY_FLAG],
      ['curryRight', CURRY_RIGHT_FLAG],
      ['flip', FLIP_FLAG],
      ['partial', PARTIAL_FLAG],
      ['partialRight', PARTIAL_RIGHT_FLAG],
      ['rearg', REARG_FLAG]
    ];
    
    /** `Object#toString` result references. */
    var funcTag = '[object Function]',
        genTag = '[object GeneratorFunction]',
        symbolTag = '[object Symbol]';
    
    /**
     * Used to match `RegExp`
     * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
     */
    var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
    
    /** Used to match leading and trailing whitespace. */
    var reTrim = /^\s+|\s+$/g;
    
    /** Used to match wrap detail comments. */
    var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
        reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
        reSplitDetails = /,? & /;
    
    /** Used to detect bad signed hexadecimal string values. */
    var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
    
    /** Used to detect binary string values. */
    var reIsBinary = /^0b[01]+$/i;
    
    /** Used to detect host constructors (Safari). */
    var reIsHostCtor = /^\[object .+?Constructor\]$/;
    
    /** Used to detect octal string values. */
    var reIsOctal = /^0o[0-7]+$/i;
    
    /** Used to detect unsigned integer values. */
    var reIsUint = /^(?:0|[1-9]\d*)$/;
    
    /** Built-in method references without a dependency on `root`. */
    var freeParseInt = parseInt;
    
    /** Detect free variable `global` from Node.js. */
    var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
    
    /** Detect free variable `self`. */
    var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
    
    /** Used as a reference to the global object. */
    var root = freeGlobal || freeSelf || Function('return this')();
    
    /**
     * A faster alternative to `Function#apply`, this function invokes `func`
     * with the `this` binding of `thisArg` and the arguments of `args`.
     *
     * @private
     * @param {Function} func The function to invoke.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} args The arguments to invoke `func` with.
     * @returns {*} Returns the result of `func`.
     */
    function apply(func, thisArg, args) {
      switch (args.length) {
        case 0: return func.call(thisArg);
        case 1: return func.call(thisArg, args[0]);
        case 2: return func.call(thisArg, args[0], args[1]);
        case 3: return func.call(thisArg, args[0], args[1], args[2]);
      }
      return func.apply(thisArg, args);
    }
    
    /**
     * A specialized version of `_.forEach` for arrays without support for
     * iteratee shorthands.
     *
     * @private
     * @param {Array} [array] The array to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array} Returns `array`.
     */
    function arrayEach(array, iteratee) {
      var index = -1,
          length = array ? array.length : 0;
    
      while (++index < length) {
        if (iteratee(array[index], index, array) === false) {
          break;
        }
      }
      return array;
    }
    
    /**
     * A specialized version of `_.includes` for arrays without support for
     * specifying an index to search from.
     *
     * @private
     * @param {Array} [array] The array to inspect.
     * @param {*} target The value to search for.
     * @returns {boolean} Returns `true` if `target` is found, else `false`.
     */
    function arrayIncludes(array, value) {
      var length = array ? array.length : 0;
      return !!length && baseIndexOf(array, value, 0) > -1;
    }
    
    /**
     * The base implementation of `_.findIndex` and `_.findLastIndex` without
     * support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} predicate The function invoked per iteration.
     * @param {number} fromIndex The index to search from.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function baseFindIndex(array, predicate, fromIndex, fromRight) {
      var length = array.length,
          index = fromIndex + (fromRight ? 1 : -1);
    
      while ((fromRight ? index-- : ++index < length)) {
        if (predicate(array[index], index, array)) {
          return index;
        }
      }
      return -1;
    }
    
    /**
     * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} fromIndex The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function baseIndexOf(array, value, fromIndex) {
      if (value !== value) {
        return baseFindIndex(array, baseIsNaN, fromIndex);
      }
      var index = fromIndex - 1,
          length = array.length;
    
      while (++index < length) {
        if (array[index] === value) {
          return index;
        }
      }
      return -1;
    }
    
    /**
     * The base implementation of `_.isNaN` without support for number objects.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
     */
    function baseIsNaN(value) {
      return value !== value;
    }
    
    /**
     * Gets the number of `placeholder` occurrences in `array`.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} placeholder The placeholder to search for.
     * @returns {number} Returns the placeholder count.
     */
    function countHolders(array, placeholder) {
      var length = array.length,
          result = 0;
    
      while (length--) {
        if (array[length] === placeholder) {
          result++;
        }
      }
      return result;
    }
    
    /**
     * Gets the value at `key` of `object`.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {string} key The key of the property to get.
     * @returns {*} Returns the property value.
     */
    function getValue(object, key) {
      return object == null ? undefined : object[key];
    }
    
    /**
     * Checks if `value` is a host object in IE < 9.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
     */
    function isHostObject(value) {
      // Many host objects are `Object` objects that can coerce to strings
      // despite having improperly defined `toString` methods.
      var result = false;
      if (value != null && typeof value.toString != 'function') {
        try {
          result = !!(value + '');
        } catch (e) {}
      }
      return result;
    }
    
    /**
     * Replaces all `placeholder` elements in `array` with an internal placeholder
     * and returns an array of their indexes.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {*} placeholder The placeholder to replace.
     * @returns {Array} Returns the new array of placeholder indexes.
     */
    function replaceHolders(array, placeholder) {
      var index = -1,
          length = array.length,
          resIndex = 0,
          result = [];
    
      while (++index < length) {
        var value = array[index];
        if (value === placeholder || value === PLACEHOLDER) {
          array[index] = PLACEHOLDER;
          result[resIndex++] = index;
        }
      }
      return result;
    }
    
    /** Used for built-in method references. */
    var funcProto = Function.prototype,
        objectProto = Object.prototype;
    
    /** Used to detect overreaching core-js shims. */
    var coreJsData = root['__core-js_shared__'];
    
    /** Used to detect methods masquerading as native. */
    var maskSrcKey = (function() {
      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
      return uid ? ('Symbol(src)_1.' + uid) : '';
    }());
    
    /** Used to resolve the decompiled source of functions. */
    var funcToString = funcProto.toString;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * Used to resolve the
     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     * of values.
     */
    var objectToString = objectProto.toString;
    
    /** Used to detect if a method is native. */
    var reIsNative = RegExp('^' +
      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
    );
    
    /** Built-in value references. */
    var objectCreate = Object.create;
    
    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeMax = Math.max,
        nativeMin = Math.min;
    
    /* Used to set `toString` methods. */
    var defineProperty = (function() {
      var func = getNative(Object, 'defineProperty'),
          name = getNative.name;
    
      return (name && name.length > 2) ? func : undefined;
    }());
    
    /**
     * The base implementation of `_.create` without support for assigning
     * properties to the created object.
     *
     * @private
     * @param {Object} prototype The object to inherit from.
     * @returns {Object} Returns the new object.
     */
    function baseCreate(proto) {
      return isObject(proto) ? objectCreate(proto) : {};
    }
    
    /**
     * The base implementation of `_.isNative` without bad shim checks.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     */
    function baseIsNative(value) {
      if (!isObject(value) || isMasked(value)) {
        return false;
      }
      var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
      return pattern.test(toSource(value));
    }
    
    /**
     * Creates an array that is the composition of partially applied arguments,
     * placeholders, and provided arguments into a single array of arguments.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to prepend to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgs(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersLength = holders.length,
          leftIndex = -1,
          leftLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(leftLength + rangeLength),
          isUncurried = !isCurried;
    
      while (++leftIndex < leftLength) {
        result[leftIndex] = partials[leftIndex];
      }
      while (++argsIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[holders[argsIndex]] = args[argsIndex];
        }
      }
      while (rangeLength--) {
        result[leftIndex++] = args[argsIndex++];
      }
      return result;
    }
    
    /**
     * This function is like `composeArgs` except that the arguments composition
     * is tailored for `_.partialRight`.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to append to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgsRight(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersIndex = -1,
          holdersLength = holders.length,
          rightIndex = -1,
          rightLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(rangeLength + rightLength),
          isUncurried = !isCurried;
    
      while (++argsIndex < rangeLength) {
        result[argsIndex] = args[argsIndex];
      }
      var offset = argsIndex;
      while (++rightIndex < rightLength) {
        result[offset + rightIndex] = partials[rightIndex];
      }
      while (++holdersIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[offset + holders[holdersIndex]] = args[argsIndex++];
        }
      }
      return result;
    }
    
    /**
     * Copies the values of `source` to `array`.
     *
     * @private
     * @param {Array} source The array to copy values from.
     * @param {Array} [array=[]] The array to copy values to.
     * @returns {Array} Returns `array`.
     */
    function copyArray(source, array) {
      var index = -1,
          length = source.length;
    
      array || (array = Array(length));
      while (++index < length) {
        array[index] = source[index];
      }
      return array;
    }
    
    /**
     * Creates a function that wraps `func` to invoke it with the optional `this`
     * binding of `thisArg`.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createBind(func, bitmask, thisArg) {
      var isBind = bitmask & BIND_FLAG,
          Ctor = createCtor(func);
    
      function wrapper() {
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return fn.apply(isBind ? thisArg : this, arguments);
      }
      return wrapper;
    }
    
    /**
     * Creates a function that produces an instance of `Ctor` regardless of
     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
     *
     * @private
     * @param {Function} Ctor The constructor to wrap.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCtor(Ctor) {
      return function() {
        // Use a `switch` statement to work with class constructors. See
        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
        // for more details.
        var args = arguments;
        switch (args.length) {
          case 0: return new Ctor;
          case 1: return new Ctor(args[0]);
          case 2: return new Ctor(args[0], args[1]);
          case 3: return new Ctor(args[0], args[1], args[2]);
          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
        }
        var thisBinding = baseCreate(Ctor.prototype),
            result = Ctor.apply(thisBinding, args);
    
        // Mimic the constructor's `return` behavior.
        // See https://es5.github.io/#x13.2.2 for more details.
        return isObject(result) ? result : thisBinding;
      };
    }
    
    /**
     * Creates a function that wraps `func` to enable currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {number} arity The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCurry(func, bitmask, arity) {
      var Ctor = createCtor(func);
    
      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length,
            placeholder = getHolder(wrapper);
    
        while (index--) {
          args[index] = arguments[index];
        }
        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
          ? []
          : replaceHolders(args, placeholder);
    
        length -= holders.length;
        if (length < arity) {
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, undefined,
            args, holders, undefined, undefined, arity - length);
        }
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return apply(fn, this, args);
      }
      return wrapper;
    }
    
    /**
     * Creates a function that wraps `func` to invoke it with optional `this`
     * binding of `thisArg`, partial application, and currying.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [partialsRight] The arguments to append to those provided
     *  to the new function.
     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
      var isAry = bitmask & ARY_FLAG,
          isBind = bitmask & BIND_FLAG,
          isBindKey = bitmask & BIND_KEY_FLAG,
          isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),
          isFlip = bitmask & FLIP_FLAG,
          Ctor = isBindKey ? undefined : createCtor(func);
    
      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length;
    
        while (index--) {
          args[index] = arguments[index];
        }
        if (isCurried) {
          var placeholder = getHolder(wrapper),
              holdersCount = countHolders(args, placeholder);
        }
        if (partials) {
          args = composeArgs(args, partials, holders, isCurried);
        }
        if (partialsRight) {
          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
        }
        length -= holdersCount;
        if (isCurried && length < arity) {
          var newHolders = replaceHolders(args, placeholder);
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
            args, newHolders, argPos, ary, arity - length
          );
        }
        var thisBinding = isBind ? thisArg : this,
            fn = isBindKey ? thisBinding[func] : func;
    
        length = args.length;
        if (argPos) {
          args = reorder(args, argPos);
        } else if (isFlip && length > 1) {
          args.reverse();
        }
        if (isAry && ary < length) {
          args.length = ary;
        }
        if (this && this !== root && this instanceof wrapper) {
          fn = Ctor || createCtor(fn);
        }
        return fn.apply(thisBinding, args);
      }
      return wrapper;
    }
    
    /**
     * Creates a function that wraps `func` to invoke it with the `this` binding
     * of `thisArg` and `partials` prepended to the arguments it receives.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} partials The arguments to prepend to those provided to
     *  the new function.
     * @returns {Function} Returns the new wrapped function.
     */
    function createPartial(func, bitmask, thisArg, partials) {
      var isBind = bitmask & BIND_FLAG,
          Ctor = createCtor(func);
    
      function wrapper() {
        var argsIndex = -1,
            argsLength = arguments.length,
            leftIndex = -1,
            leftLength = partials.length,
            args = Array(leftLength + argsLength),
            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
    
        while (++leftIndex < leftLength) {
          args[leftIndex] = partials[leftIndex];
        }
        while (argsLength--) {
          args[leftIndex++] = arguments[++argsIndex];
        }
        return apply(fn, isBind ? thisArg : this, args);
      }
      return wrapper;
    }
    
    /**
     * Creates a function that wraps `func` to continue currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {Function} wrapFunc The function to create the `func` wrapper.
     * @param {*} placeholder The placeholder value.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
      var isCurry = bitmask & CURRY_FLAG,
          newHolders = isCurry ? holders : undefined,
          newHoldersRight = isCurry ? undefined : holders,
          newPartials = isCurry ? partials : undefined,
          newPartialsRight = isCurry ? undefined : partials;
    
      bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
      bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
    
      if (!(bitmask & CURRY_BOUND_FLAG)) {
        bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
      }
    
      var result = wrapFunc(func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity);
      result.placeholder = placeholder;
      return setWrapToString(result, func, bitmask);
    }
    
    /**
     * Creates a function that either curries or invokes `func` with optional
     * `this` binding and partially applied arguments.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags.
     *  The bitmask may be composed of the following flags:
     *     1 - `_.bind`
     *     2 - `_.bindKey`
     *     4 - `_.curry` or `_.curryRight` of a bound function
     *     8 - `_.curry`
     *    16 - `_.curryRight`
     *    32 - `_.partial`
     *    64 - `_.partialRight`
     *   128 - `_.rearg`
     *   256 - `_.ary`
     *   512 - `_.flip`
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to be partially applied.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
      var isBindKey = bitmask & BIND_KEY_FLAG;
      if (!isBindKey && typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var length = partials ? partials.length : 0;
      if (!length) {
        bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
        partials = holders = undefined;
      }
      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
      arity = arity === undefined ? arity : toInteger(arity);
      length -= holders ? holders.length : 0;
    
      if (bitmask & PARTIAL_RIGHT_FLAG) {
        var partialsRight = partials,
            holdersRight = holders;
    
        partials = holders = undefined;
      }
    
      var newData = [
        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
        argPos, ary, arity
      ];
    
      func = newData[0];
      bitmask = newData[1];
      thisArg = newData[2];
      partials = newData[3];
      holders = newData[4];
      arity = newData[9] = newData[9] == null
        ? (isBindKey ? 0 : func.length)
        : nativeMax(newData[9] - length, 0);
    
      if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) {
        bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG);
      }
      if (!bitmask || bitmask == BIND_FLAG) {
        var result = createBind(func, bitmask, thisArg);
      } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) {
        result = createCurry(func, bitmask, arity);
      } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) {
        result = createPartial(func, bitmask, thisArg, partials);
      } else {
        result = createHybrid.apply(undefined, newData);
      }
      return setWrapToString(result, func, bitmask);
    }
    
    /**
     * Gets the argument placeholder value for `func`.
     *
     * @private
     * @param {Function} func The function to inspect.
     * @returns {*} Returns the placeholder value.
     */
    function getHolder(func) {
      var object = func;
      return object.placeholder;
    }
    
    /**
     * Gets the native function at `key` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the method to get.
     * @returns {*} Returns the function if it's native, else `undefined`.
     */
    function getNative(object, key) {
      var value = getValue(object, key);
      return baseIsNative(value) ? value : undefined;
    }
    
    /**
     * Extracts wrapper details from the `source` body comment.
     *
     * @private
     * @param {string} source The source to inspect.
     * @returns {Array} Returns the wrapper details.
     */
    function getWrapDetails(source) {
      var match = source.match(reWrapDetails);
      return match ? match[1].split(reSplitDetails) : [];
    }
    
    /**
     * Inserts wrapper `details` in a comment at the top of the `source` body.
     *
     * @private
     * @param {string} source The source to modify.
     * @returns {Array} details The details to insert.
     * @returns {string} Returns the modified source.
     */
    function insertWrapDetails(source, details) {
      var length = details.length,
          lastIndex = length - 1;
    
      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
      details = details.join(length > 2 ? ', ' : ' ');
      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
    }
    
    /**
     * Checks if `value` is a valid array-like index.
     *
     * @private
     * @param {*} value The value to check.
     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
     */
    function isIndex(value, length) {
      length = length == null ? MAX_SAFE_INTEGER : length;
      return !!length &&
        (typeof value == 'number' || reIsUint.test(value)) &&
        (value > -1 && value % 1 == 0 && value < length);
    }
    
    /**
     * Checks if `func` has its source masked.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
     */
    function isMasked(func) {
      return !!maskSrcKey && (maskSrcKey in func);
    }
    
    /**
     * Reorder `array` according to the specified indexes where the element at
     * the first index is assigned as the first element, the element at
     * the second index is assigned as the second element, and so on.
     *
     * @private
     * @param {Array} array The array to reorder.
     * @param {Array} indexes The arranged array indexes.
     * @returns {Array} Returns `array`.
     */
    function reorder(array, indexes) {
      var arrLength = array.length,
          length = nativeMin(indexes.length, arrLength),
          oldArray = copyArray(array);
    
      while (length--) {
        var index = indexes[length];
        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
      }
      return array;
    }
    
    /**
     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
     * with wrapper details in a comment at the top of the source body.
     *
     * @private
     * @param {Function} wrapper The function to modify.
     * @param {Function} reference The reference function.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Function} Returns `wrapper`.
     */
    var setWrapToString = !defineProperty ? identity : function(wrapper, reference, bitmask) {
      var source = (reference + '');
      return defineProperty(wrapper, 'toString', {
        'configurable': true,
        'enumerable': false,
        'value': constant(insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)))
      });
    };
    
    /**
     * Converts `func` to its source code.
     *
     * @private
     * @param {Function} func The function to process.
     * @returns {string} Returns the source code.
     */
    function toSource(func) {
      if (func != null) {
        try {
          return funcToString.call(func);
        } catch (e) {}
        try {
          return (func + '');
        } catch (e) {}
      }
      return '';
    }
    
    /**
     * Updates wrapper `details` based on `bitmask` flags.
     *
     * @private
     * @returns {Array} details The details to modify.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Array} Returns `details`.
     */
    function updateWrapDetails(details, bitmask) {
      arrayEach(wrapFlags, function(pair) {
        var value = '_.' + pair[0];
        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
          details.push(value);
        }
      });
      return details.sort();
    }
    
    /**
     * Creates a function that accepts arguments of `func` and either invokes
     * `func` returning its result, if at least `arity` number of arguments have
     * been provided, or returns a function that accepts the remaining `func`
     * arguments, and so on. The arity of `func` may be specified if `func.length`
     * is not sufficient.
     *
     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curry(abc);
     *
     * curried(1)(2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(1)(_, 3)(2);
     * // => [1, 2, 3]
     */
    function curry(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curry.placeholder;
      return result;
    }
    
    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in Safari 8-9 which returns 'object' for typed array and other constructors.
      var tag = isObject(value) ? objectToString.call(value) : '';
      return tag == funcTag || tag == genTag;
    }
    
    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return !!value && (type == 'object' || type == 'function');
    }
    
    /**
     * Checks if `value` is object-like. A value is object-like if it's not `null`
     * and has a `typeof` result of "object".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     * @example
     *
     * _.isObjectLike({});
     * // => true
     *
     * _.isObjectLike([1, 2, 3]);
     * // => true
     *
     * _.isObjectLike(_.noop);
     * // => false
     *
     * _.isObjectLike(null);
     * // => false
     */
    function isObjectLike(value) {
      return !!value && typeof value == 'object';
    }
    
    /**
     * Checks if `value` is classified as a `Symbol` primitive or object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     * @example
     *
     * _.isSymbol(Symbol.iterator);
     * // => true
     *
     * _.isSymbol('abc');
     * // => false
     */
    function isSymbol(value) {
      return typeof value == 'symbol' ||
        (isObjectLike(value) && objectToString.call(value) == symbolTag);
    }
    
    /**
     * Converts `value` to a finite number.
     *
     * @static
     * @memberOf _
     * @since 4.12.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted number.
     * @example
     *
     * _.toFinite(3.2);
     * // => 3.2
     *
     * _.toFinite(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toFinite(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toFinite('3.2');
     * // => 3.2
     */
    function toFinite(value) {
      if (!value) {
        return value === 0 ? value : 0;
      }
      value = toNumber(value);
      if (value === INFINITY || value === -INFINITY) {
        var sign = (value < 0 ? -1 : 1);
        return sign * MAX_INTEGER;
      }
      return value === value ? value : 0;
    }
    
    /**
     * Converts `value` to an integer.
     *
     * **Note:** This method is loosely based on
     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toInteger(3.2);
     * // => 3
     *
     * _.toInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toInteger(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toInteger('3.2');
     * // => 3
     */
    function toInteger(value) {
      var result = toFinite(value),
          remainder = result % 1;
    
      return result === result ? (remainder ? result - remainder : result) : 0;
    }
    
    /**
     * Converts `value` to a number.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     * @example
     *
     * _.toNumber(3.2);
     * // => 3.2
     *
     * _.toNumber(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toNumber(Infinity);
     * // => Infinity
     *
     * _.toNumber('3.2');
     * // => 3.2
     */
    function toNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
      }
      if (typeof value != 'string') {
        return value === 0 ? value : +value;
      }
      value = value.replace(reTrim, '');
      var isBinary = reIsBinary.test(value);
      return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
    }
    
    /**
     * Creates a function that returns `value`.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {*} value The value to return from the new function.
     * @returns {Function} Returns the new constant function.
     * @example
     *
     * var objects = _.times(2, _.constant({ 'a': 1 }));
     *
     * console.log(objects);
     * // => [{ 'a': 1 }, { 'a': 1 }]
     *
     * console.log(objects[0] === objects[1]);
     * // => true
     */
    function constant(value) {
      return function() {
        return value;
      };
    }
    
    /**
     * This method returns the first argument it receives.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {*} value Any value.
     * @returns {*} Returns `value`.
     * @example
     *
     * var object = { 'a': 1 };
     *
     * console.log(_.identity(object) === object);
     * // => true
     */
    function identity(value) {
      return value;
    }
    
    // Assign default placeholders.
    curry.placeholder = {};
    
    module.exports = curry;
    
    /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ },
/* 622 */
/***/ function(module, exports, __webpack_require__) {

    var clamp = __webpack_require__(623);
    
    function componentToHex(c) {
      var value = Math.round(clamp(c, 0, 255));
      var hex   = value.toString(16);
    
      return hex.length == 1 ? "0" + hex : hex;
    }
    
    function rgb2hex(rgb) {
      return "#" + componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]);
    }
    
    module.exports = rgb2hex;

/***/ },
/* 623 */
/***/ function(module, exports) {

    function clamp(val, min, max) {
      return Math.min(Math.max(val, min), max);
    }
    
    module.exports = clamp;

/***/ },
/* 624 */
/***/ function(module, exports, __webpack_require__) {

    var hsl = __webpack_require__(625);
    var hex = __webpack_require__(627);
    var rgb = __webpack_require__(628);
    var hsl2rgb = __webpack_require__(629);
    
    function hsl2rgbParse(color) {
      var h = hsl(color);
      var r = hsl2rgb(h);
    
      // handle alpha since hsl2rgb doesn't know (or care!) about it
      if(h.length === 4) {
        r.push(h[3]);
      }
    
      return r;
    }
    
    var space2parser = {
      "#" : hex,
      "hsl" : hsl2rgbParse,
      "rgb" : rgb
    };
    
    function parse(color) {
      for(var scheme in space2parser) {
        if(color.indexOf(scheme) === 0) {
          return space2parser[scheme](color);
        }
      }
    }
    
    parse.rgb = rgb;
    parse.hsl = hsl;
    parse.hex = hex;
    
    module.exports = parse;

/***/ },
/* 625 */
/***/ function(module, exports, __webpack_require__) {

    var extractComponents = __webpack_require__(626);
    var clamp = __webpack_require__(623);
    
    function parseHslComponent(component, i) {
      component = parseFloat(component);
    
      switch(i) {
        case 0:
          return clamp(component, 0, 360);
        case 1:
        case 2:
          return clamp(component, 0, 100);
        case 3:
          return clamp(component, 0, 1);
      }
    }
    
    function hsl(color) {
      return extractComponents(color).map(parseHslComponent);
    }
    
    module.exports = hsl;

/***/ },
/* 626 */
/***/ function(module, exports) {

    var component = /-?\d+(\.\d+)?%?/g;
    function extractComponents(color) {
      return color.match(component);
    }
    
    module.exports = extractComponents;

/***/ },
/* 627 */
/***/ function(module, exports) {

    function hex(hex) {
      if (hex.length === 4) {
        hex = '#' + hex.charAt(1) + hex.charAt(1) +
          hex.charAt(2) + hex.charAt(2) + 
          hex.charAt(3) + hex.charAt(3);
      }
      return [
        parseInt(hex.substring(1,3), 16),
        parseInt(hex.substring(3,5), 16),
        parseInt(hex.substring(5,7), 16)
      ];
    }
    
    module.exports = hex;

/***/ },
/* 628 */
/***/ function(module, exports, __webpack_require__) {

    var extractComponents = __webpack_require__(626);
    var clamp = __webpack_require__(623);
    
    function parseRgbComponent(component, i) {
      if (i < 3) {
        if (component.indexOf('%') != -1) {
          return Math.round(255 * clamp(parseInt(component, 10), 0, 100)/100);
        } else {
          return clamp(parseInt(component, 10), 0, 255);
        }
      } else {
        return clamp(parseFloat(component), 0, 1);
      } 
    }
    
    function rgb(color) {
      return extractComponents(color).map(parseRgbComponent);
    }
    
    module.exports = rgb;

/***/ },
/* 629 */
/***/ function(module, exports) {

    function hsl2rgb(hsl) {
      var h = hsl[0] / 360,
          s = hsl[1] / 100,
          l = hsl[2] / 100,
          t1, t2, t3, rgb, val;
    
      if (s == 0) {
        val = l * 255;
        return [val, val, val];
      }
    
      if (l < 0.5)
        t2 = l * (1 + s);
      else
        t2 = l + s - l * s;
      t1 = 2 * l - t2;
    
      rgb = [0, 0, 0];
      for (var i = 0; i < 3; i++) {
        t3 = h + 1 / 3 * - (i - 1);
        t3 < 0 && t3++;
        t3 > 1 && t3--;
    
        if (6 * t3 < 1)
          val = t1 + (t2 - t1) * 6 * t3;
        else if (2 * t3 < 1)
          val = t2;
        else if (3 * t3 < 2)
          val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
        else
          val = t1;
    
        rgb[i] = val * 255;
      }
    
      return rgb;
    }
    
    module.exports = hsl2rgb;

/***/ },
/* 630 */
/***/ function(module, exports) {

    /* WEBPACK VAR INJECTION */(function(global) {/**
     * lodash (Custom Build) <https://lodash.com/>
     * Build: `lodash modularize exports="npm" -o ./`
     * Copyright jQuery Foundation and other contributors <https://jquery.org/>
     * Released under MIT license <https://lodash.com/license>
     * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
     * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
     */
    
    /** Used as the `TypeError` message for "Functions" methods. */
    var FUNC_ERROR_TEXT = 'Expected a function';
    
    /** Used as references for various `Number` constants. */
    var MAX_SAFE_INTEGER = 9007199254740991;
    
    /** `Object#toString` result references. */
    var argsTag = '[object Arguments]',
        funcTag = '[object Function]',
        genTag = '[object GeneratorFunction]';
    
    /** Detect free variable `global` from Node.js. */
    var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
    
    /** Detect free variable `self`. */
    var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
    
    /** Used as a reference to the global object. */
    var root = freeGlobal || freeSelf || Function('return this')();
    
    /**
     * A faster alternative to `Function#apply`, this function invokes `func`
     * with the `this` binding of `thisArg` and the arguments of `args`.
     *
     * @private
     * @param {Function} func The function to invoke.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} args The arguments to invoke `func` with.
     * @returns {*} Returns the result of `func`.
     */
    function apply(func, thisArg, args) {
      switch (args.length) {
        case 0: return func.call(thisArg);
        case 1: return func.call(thisArg, args[0]);
        case 2: return func.call(thisArg, args[0], args[1]);
        case 3: return func.call(thisArg, args[0], args[1], args[2]);
      }
      return func.apply(thisArg, args);
    }
    
    /**
     * Appends the elements of `values` to `array`.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {Array} values The values to append.
     * @returns {Array} Returns `array`.
     */
    function arrayPush(array, values) {
      var index = -1,
          length = values.length,
          offset = array.length;
    
      while (++index < length) {
        array[offset + index] = values[index];
      }
      return array;
    }
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * Used to resolve the
     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     * of values.
     */
    var objectToString = objectProto.toString;
    
    /** Built-in value references. */
    var Symbol = root.Symbol,
        propertyIsEnumerable = objectProto.propertyIsEnumerable,
        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
    
    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeMax = Math.max;
    
    /**
     * The base implementation of `_.flatten` with support for restricting flattening.
     *
     * @private
     * @param {Array} array The array to flatten.
     * @param {number} depth The maximum recursion depth.
     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
     * @param {Array} [result=[]] The initial result value.
     * @returns {Array} Returns the new flattened array.
     */
    function baseFlatten(array, depth, predicate, isStrict, result) {
      var index = -1,
          length = array.length;
    
      predicate || (predicate = isFlattenable);
      result || (result = []);
    
      while (++index < length) {
        var value = array[index];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) {
            // Recursively flatten arrays (susceptible to call stack limits).
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }
    
    /**
     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     */
    function baseRest(func, start) {
      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
      return function() {
        var args = arguments,
            index = -1,
            length = nativeMax(args.length - start, 0),
            array = Array(length);
    
        while (++index < length) {
          array[index] = args[start + index];
        }
        index = -1;
        var otherArgs = Array(start + 1);
        while (++index < start) {
          otherArgs[index] = args[index];
        }
        otherArgs[start] = array;
        return apply(func, this, otherArgs);
      };
    }
    
    /**
     * Creates a `_.flow` or `_.flowRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new flow function.
     */
    function createFlow(fromRight) {
      return baseRest(function(funcs) {
        funcs = baseFlatten(funcs, 1);
    
        var length = funcs.length,
            index = length;
    
        if (fromRight) {
          funcs.reverse();
        }
        while (index--) {
          if (typeof funcs[index] != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT);
          }
        }
        return function() {
          var index = 0,
              result = length ? funcs[index].apply(this, arguments) : arguments[0];
    
          while (++index < length) {
            result = funcs[index].call(this, result);
          }
          return result;
        };
      });
    }
    
    /**
     * Checks if `value` is a flattenable `arguments` object or array.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
     */
    function isFlattenable(value) {
      return isArray(value) || isArguments(value) ||
        !!(spreadableSymbol && value && value[spreadableSymbol]);
    }
    
    /**
     * Checks if `value` is likely an `arguments` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     *  else `false`.
     * @example
     *
     * _.isArguments(function() { return arguments; }());
     * // => true
     *
     * _.isArguments([1, 2, 3]);
     * // => false
     */
    function isArguments(value) {
      // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
      return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
        (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
    }
    
    /**
     * Checks if `value` is classified as an `Array` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
     * @example
     *
     * _.isArray([1, 2, 3]);
     * // => true
     *
     * _.isArray(document.body.children);
     * // => false
     *
     * _.isArray('abc');
     * // => false
     *
     * _.isArray(_.noop);
     * // => false
     */
    var isArray = Array.isArray;
    
    /**
     * Checks if `value` is array-like. A value is considered array-like if it's
     * not a function and has a `value.length` that's an integer greater than or
     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
     * @example
     *
     * _.isArrayLike([1, 2, 3]);
     * // => true
     *
     * _.isArrayLike(document.body.children);
     * // => true
     *
     * _.isArrayLike('abc');
     * // => true
     *
     * _.isArrayLike(_.noop);
     * // => false
     */
    function isArrayLike(value) {
      return value != null && isLength(value.length) && !isFunction(value);
    }
    
    /**
     * This method is like `_.isArrayLike` except that it also checks if `value`
     * is an object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array-like object,
     *  else `false`.
     * @example
     *
     * _.isArrayLikeObject([1, 2, 3]);
     * // => true
     *
     * _.isArrayLikeObject(document.body.children);
     * // => true
     *
     * _.isArrayLikeObject('abc');
     * // => false
     *
     * _.isArrayLikeObject(_.noop);
     * // => false
     */
    function isArrayLikeObject(value) {
      return isObjectLike(value) && isArrayLike(value);
    }
    
    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in Safari 8-9 which returns 'object' for typed array and other constructors.
      var tag = isObject(value) ? objectToString.call(value) : '';
      return tag == funcTag || tag == genTag;
    }
    
    /**
     * Checks if `value` is a valid array-like length.
     *
     * **Note:** This method is loosely based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
     * @example
     *
     * _.isLength(3);
     * // => true
     *
     * _.isLength(Number.MIN_VALUE);
     * // => false
     *
     * _.isLength(Infinity);
     * // => false
     *
     * _.isLength('3');
     * // => false
     */
    function isLength(value) {
      return typeof value == 'number' &&
        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
    }
    
    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return !!value && (type == 'object' || type == 'function');
    }
    
    /**
     * Checks if `value` is object-like. A value is object-like if it's not `null`
     * and has a `typeof` result of "object".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     * @example
     *
     * _.isObjectLike({});
     * // => true
     *
     * _.isObjectLike([1, 2, 3]);
     * // => true
     *
     * _.isObjectLike(_.noop);
     * // => false
     *
     * _.isObjectLike(null);
     * // => false
     */
    function isObjectLike(value) {
      return !!value && typeof value == 'object';
    }
    
    /**
     * Creates a function that returns the result of invoking the given functions
     * with the `this` binding of the created function, where each successive
     * invocation is supplied the return value of the previous.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flowRight
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flow([_.add, square]);
     * addSquare(1, 2);
     * // => 9
     */
    var flow = createFlow();
    
    module.exports = flow;
    
    /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ },
/* 631 */
/***/ function(module, exports) {

    "use strict";
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.yuv2rgb = yuv2rgb;
    exports.rgb2yuv = rgb2yuv;
    function yuv2rgb(yuv) {
      var y = yuv[0],
          u = yuv[1],
          v = yuv[2],
          r,
          g,
          b;
    
      r = y * 1 + u * 0 + v * 1.13983;
      g = y * 1 + u * -0.39465 + v * -0.58060;
      b = y * 1 + u * 2.02311 + v * 0;
    
      r = Math.min(Math.max(0, r), 1);
      g = Math.min(Math.max(0, g), 1);
      b = Math.min(Math.max(0, b), 1);
    
      return [r * 255, g * 255, b * 255];
    }
    
    function rgb2yuv(rgb) {
      var r = rgb[0] / 255,
          g = rgb[1] / 255,
          b = rgb[2] / 255;
    
      var y = r * 0.299 + g * 0.587 + b * 0.114;
      var u = r * -0.14713 + g * -0.28886 + b * 0.436;
      var v = r * 0.615 + g * -0.51499 + b * -0.10001;
    
      return [y, u, v];
    };

/***/ },
/* 632 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactJsonTree = __webpack_require__(586);
    
    var _reactJsonTree2 = _interopRequireDefault(_reactJsonTree);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var styles = {
      actionBar: {
        paddingTop: 8,
        paddingBottom: 7,
        paddingLeft: 16
      },
      payload: {
        margin: 0,
        paddingLeft: 16,
        overflow: 'auto'
      }
    };
    
    var LogMonitorAction = function (_Component) {
      _inherits(LogMonitorAction, _Component);
    
      function LogMonitorAction(props) {
        _classCallCheck(this, LogMonitorAction);
    
        var _this = _possibleConstructorReturn(this, _Component.call(this, props));
    
        _this.shouldExpandNode = _this.shouldExpandNode.bind(_this);
        return _this;
      }
    
      LogMonitorAction.prototype.renderPayload = function renderPayload(payload) {
        return _react2.default.createElement(
          'div',
          { style: _extends({}, styles.payload, {
              backgroundColor: this.props.theme.base00
            }) },
          Object.keys(payload).length > 0 ? _react2.default.createElement(_reactJsonTree2.default, { theme: this.props.theme,
            invertTheme: false,
            keyPath: ['action'],
            data: payload,
            shouldExpandNode: this.shouldExpandNode }) : ''
        );
      };
    
      LogMonitorAction.prototype.shouldExpandNode = function shouldExpandNode(keyName, data, level) {
        return this.props.expandActionRoot && level === 0;
      };
    
      LogMonitorAction.prototype.render = function render() {
        var _props$action = this.props.action;
        var type = _props$action.type;
    
        var payload = _objectWithoutProperties(_props$action, ['type']);
    
        return _react2.default.createElement(
          'div',
          { style: _extends({
              backgroundColor: this.props.theme.base02,
              color: this.props.theme.base06
            }, this.props.style) },
          _react2.default.createElement(
            'div',
            { style: styles.actionBar,
              onClick: this.props.onClick },
            type !== null && type.toString()
          ),
          !this.props.collapsed ? this.renderPayload(payload) : ''
        );
      };
    
      return LogMonitorAction;
    }(_react.Component);
    
    exports.default = LogMonitorAction;

/***/ },
/* 633 */
/***/ function(module, exports) {

    /* WEBPACK VAR INJECTION */(function(global) {/**
     * lodash (Custom Build) <https://lodash.com/>
     * Build: `lodash modularize exports="npm" -o ./`
     * Copyright jQuery Foundation and other contributors <https://jquery.org/>
     * Released under MIT license <https://lodash.com/license>
     * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
     * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
     */
    
    /** Used as the `TypeError` message for "Functions" methods. */
    var FUNC_ERROR_TEXT = 'Expected a function';
    
    /** Used as references for various `Number` constants. */
    var NAN = 0 / 0;
    
    /** `Object#toString` result references. */
    var symbolTag = '[object Symbol]';
    
    /** Used to match leading and trailing whitespace. */
    var reTrim = /^\s+|\s+$/g;
    
    /** Used to detect bad signed hexadecimal string values. */
    var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
    
    /** Used to detect binary string values. */
    var reIsBinary = /^0b[01]+$/i;
    
    /** Used to detect octal string values. */
    var reIsOctal = /^0o[0-7]+$/i;
    
    /** Built-in method references without a dependency on `root`. */
    var freeParseInt = parseInt;
    
    /** Detect free variable `global` from Node.js. */
    var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
    
    /** Detect free variable `self`. */
    var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
    
    /** Used as a reference to the global object. */
    var root = freeGlobal || freeSelf || Function('return this')();
    
    /** Used for built-in method references. */
    var objectProto = Object.prototype;
    
    /**
     * Used to resolve the
     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     * of values.
     */
    var objectToString = objectProto.toString;
    
    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeMax = Math.max,
        nativeMin = Math.min;
    
    /**
     * Gets the timestamp of the number of milliseconds that have elapsed since
     * the Unix epoch (1 January 1970 00:00:00 UTC).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Date
     * @returns {number} Returns the timestamp.
     * @example
     *
     * _.defer(function(stamp) {
     *   console.log(_.now() - stamp);
     * }, _.now());
     * // => Logs the number of milliseconds it took for the deferred invocation.
     */
    var now = function() {
      return root.Date.now();
    };
    
    /**
     * Creates a debounced function that delays invoking `func` until after `wait`
     * milliseconds have elapsed since the last time the debounced function was
     * invoked. The debounced function comes with a `cancel` method to cancel
     * delayed `func` invocations and a `flush` method to immediately invoke them.
     * Provide `options` to indicate whether `func` should be invoked on the
     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
     * with the last arguments provided to the debounced function. Subsequent
     * calls to the debounced function return the result of the last `func`
     * invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the debounced function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.debounce` and `_.throttle`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to debounce.
     * @param {number} [wait=0] The number of milliseconds to delay.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=false]
     *  Specify invoking on the leading edge of the timeout.
     * @param {number} [options.maxWait]
     *  The maximum time `func` is allowed to be delayed before it's invoked.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new debounced function.
     * @example
     *
     * // Avoid costly calculations while the window size is in flux.
     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
     *
     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
     * jQuery(element).on('click', _.debounce(sendMail, 300, {
     *   'leading': true,
     *   'trailing': false
     * }));
     *
     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
     * var source = new EventSource('/stream');
     * jQuery(source).on('message', debounced);
     *
     * // Cancel the trailing debounced invocation.
     * jQuery(window).on('popstate', debounced.cancel);
     */
    function debounce(func, wait, options) {
      var lastArgs,
          lastThis,
          maxWait,
          result,
          timerId,
          lastCallTime,
          lastInvokeTime = 0,
          leading = false,
          maxing = false,
          trailing = true;
    
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      wait = toNumber(wait) || 0;
      if (isObject(options)) {
        leading = !!options.leading;
        maxing = 'maxWait' in options;
        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }
    
      function invokeFunc(time) {
        var args = lastArgs,
            thisArg = lastThis;
    
        lastArgs = lastThis = undefined;
        lastInvokeTime = time;
        result = func.apply(thisArg, args);
        return result;
      }
    
      function leadingEdge(time) {
        // Reset any `maxWait` timer.
        lastInvokeTime = time;
        // Start the timer for the trailing edge.
        timerId = setTimeout(timerExpired, wait);
        // Invoke the leading edge.
        return leading ? invokeFunc(time) : result;
      }
    
      function remainingWait(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime,
            result = wait - timeSinceLastCall;
    
        return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
      }
    
      function shouldInvoke(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime;
    
        // Either this is the first call, activity has stopped and we're at the
        // trailing edge, the system time has gone backwards and we're treating
        // it as the trailing edge, or we've hit the `maxWait` limit.
        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
      }
    
      function timerExpired() {
        var time = now();
        if (shouldInvoke(time)) {
          return trailingEdge(time);
        }
        // Restart the timer.
        timerId = setTimeout(timerExpired, remainingWait(time));
      }
    
      function trailingEdge(time) {
        timerId = undefined;
    
        // Only invoke if we have `lastArgs` which means `func` has been
        // debounced at least once.
        if (trailing && lastArgs) {
          return invokeFunc(time);
        }
        lastArgs = lastThis = undefined;
        return result;
      }
    
      function cancel() {
        if (timerId !== undefined) {
          clearTimeout(timerId);
        }
        lastInvokeTime = 0;
        lastArgs = lastCallTime = lastThis = timerId = undefined;
      }
    
      function flush() {
        return timerId === undefined ? result : trailingEdge(now());
      }
    
      function debounced() {
        var time = now(),
            isInvoking = shouldInvoke(time);
    
        lastArgs = arguments;
        lastThis = this;
        lastCallTime = time;
    
        if (isInvoking) {
          if (timerId === undefined) {
            return leadingEdge(lastCallTime);
          }
          if (maxing) {
            // Handle invocations in a tight loop.
            timerId = setTimeout(timerExpired, wait);
            return invokeFunc(lastCallTime);
          }
        }
        if (timerId === undefined) {
          timerId = setTimeout(timerExpired, wait);
        }
        return result;
      }
      debounced.cancel = cancel;
      debounced.flush = flush;
      return debounced;
    }
    
    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return !!value && (type == 'object' || type == 'function');
    }
    
    /**
     * Checks if `value` is object-like. A value is object-like if it's not `null`
     * and has a `typeof` result of "object".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     * @example
     *
     * _.isObjectLike({});
     * // => true
     *
     * _.isObjectLike([1, 2, 3]);
     * // => true
     *
     * _.isObjectLike(_.noop);
     * // => false
     *
     * _.isObjectLike(null);
     * // => false
     */
    function isObjectLike(value) {
      return !!value && typeof value == 'object';
    }
    
    /**
     * Checks if `value` is classified as a `Symbol` primitive or object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     * @example
     *
     * _.isSymbol(Symbol.iterator);
     * // => true
     *
     * _.isSymbol('abc');
     * // => false
     */
    function isSymbol(value) {
      return typeof value == 'symbol' ||
        (isObjectLike(value) && objectToString.call(value) == symbolTag);
    }
    
    /**
     * Converts `value` to a number.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     * @example
     *
     * _.toNumber(3.2);
     * // => 3.2
     *
     * _.toNumber(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toNumber(Infinity);
     * // => Infinity
     *
     * _.toNumber('3.2');
     * // => 3.2
     */
    function toNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
      }
      if (typeof value != 'string') {
        return value === 0 ? value : +value;
      }
      value = value.replace(reTrim, '');
      var isBinary = reIsBinary.test(value);
      return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
    }
    
    module.exports = debounce;
    
    /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ },
/* 634 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    exports.default = undefined;
    
    var _DockMonitor = __webpack_require__(635);
    
    var _DockMonitor2 = _interopRequireDefault(_DockMonitor);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = _DockMonitor2.default;

/***/ },
/* 635 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _reactDock = __webpack_require__(636);
    
    var _reactDock2 = _interopRequireDefault(_reactDock);
    
    var _constants = __webpack_require__(658);
    
    var _actions = __webpack_require__(659);
    
    var _reducers = __webpack_require__(660);
    
    var _reducers2 = _interopRequireDefault(_reducers);
    
    var _parseKey = __webpack_require__(661);
    
    var _parseKey2 = _interopRequireDefault(_parseKey);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
    
    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    
    function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
    
    function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
    
    var DockMonitor = function (_Component) {
      _inherits(DockMonitor, _Component);
    
      function DockMonitor(props) {
        _classCallCheck(this, DockMonitor);
    
        var _this = _possibleConstructorReturn(this, _Component.call(this, props));
    
        _this.handleKeyDown = _this.handleKeyDown.bind(_this);
        _this.handleSizeChange = _this.handleSizeChange.bind(_this);
    
        var childrenCount = _react.Children.count(props.children);
        if (childrenCount === 0) {
          console.error('<DockMonitor> requires at least one monitor inside. ' + 'Why don’t you try <LogMonitor>? You can get it at ' + 'https://github.com/gaearon/redux-devtools-log-monitor.');
        } else if (childrenCount > 1 && !props.changeMonitorKey) {
          console.error('You specified multiple monitors inside <DockMonitor> ' + 'but did not provide `changeMonitorKey` prop to change them. ' + 'Try specifying <DockMonitor changeMonitorKey="ctrl-m" /> ' + 'and then press Ctrl-M.');
        }
        return _this;
      }
    
      DockMonitor.prototype.componentDidMount = function componentDidMount() {
        window.addEventListener('keydown', this.handleKeyDown);
      };
    
      DockMonitor.prototype.componentWillUnmount = function componentWillUnmount() {
        window.removeEventListener('keydown', this.handleKeyDown);
      };
    
      DockMonitor.prototype.matchesKey = function matchesKey(key, event) {
        if (!key) {
          return false;
        }
    
        var charCode = event.keyCode || event.which;
        var char = String.fromCharCode(charCode);
        return key.name.toUpperCase() === char.toUpperCase() && key.alt === event.altKey && key.ctrl === event.ctrlKey && key.meta === event.metaKey && key.shift === event.shiftKey;
      };
    
      DockMonitor.prototype.handleKeyDown = function handleKeyDown(e) {
        // Ignore regular keys when focused on a field
        // and no modifiers are active.
        if (!e.ctrlKey && !e.metaKey && !e.altKey && (e.target.tagName === 'INPUT' || e.target.tagName === 'SELECT' || e.target.tagName === 'TEXTAREA' || e.target.isContentEditable)) {
          return;
        }
    
        var visibilityKey = (0, _parseKey2.default)(this.props.toggleVisibilityKey);
        var positionKey = (0, _parseKey2.default)(this.props.changePositionKey);
    
        var monitorKey = void 0;
        if (this.props.changeMonitorKey) {
          monitorKey = (0, _parseKey2.default)(this.props.changeMonitorKey);
        }
    
        if (this.matchesKey(visibilityKey, e)) {
          e.preventDefault();
          this.props.dispatch((0, _actions.toggleVisibility)());
        } else if (this.matchesKey(positionKey, e)) {
          e.preventDefault();
          this.props.dispatch((0, _actions.changePosition)());
        } else if (this.matchesKey(monitorKey, e)) {
          e.preventDefault();
          this.props.dispatch((0, _actions.changeMonitor)());
        }
      };
    
      DockMonitor.prototype.handleSizeChange = function handleSizeChange(requestedSize) {
        this.props.dispatch((0, _actions.changeSize)(requestedSize));
      };
    
      DockMonitor.prototype.renderChild = function renderChild(child, index, otherProps) {
        var monitorState = this.props.monitorState;
        var childMonitorIndex = monitorState.childMonitorIndex;
        var childMonitorStates = monitorState.childMonitorStates;
    
    
        if (index !== childMonitorIndex) {
          return null;
        }
    
        return (0, _react.cloneElement)(child, _extends({
          monitorState: childMonitorStates[index]
        }, otherProps));
      };
    
      DockMonitor.prototype.render = function render() {
        var _this2 = this;
    
        var _props = this.props;
        var monitorState = _props.monitorState;
        var children = _props.children;
        var fluid = _props.fluid;
    
        var rest = _objectWithoutProperties(_props, ['monitorState', 'children', 'fluid']);
    
        var position = monitorState.position;
        var isVisible = monitorState.isVisible;
        var size = monitorState.size;
    
    
        return _react2.default.createElement(
          _reactDock2.default,
          { position: position,
            isVisible: isVisible,
            size: size,
            fluid: fluid,
            onSizeChange: this.handleSizeChange,
            dimMode: 'none' },
          _react.Children.map(children, function (child, index) {
            return _this2.renderChild(child, index, rest);
          })
        );
      };
    
      return DockMonitor;
    }(_react.Component);
    
    DockMonitor.update = _reducers2.default;
    DockMonitor.propTypes = {
      defaultPosition: _react.PropTypes.oneOf(_constants.POSITIONS).isRequired,
      defaultIsVisible: _react.PropTypes.bool.isRequired,
      defaultSize: _react.PropTypes.number.isRequired,
      toggleVisibilityKey: _react.PropTypes.string.isRequired,
      changePositionKey: _react.PropTypes.string.isRequired,
      changeMonitorKey: _react.PropTypes.string,
      fluid: _react.PropTypes.bool,
    
      dispatch: _react.PropTypes.func,
      monitorState: _react.PropTypes.shape({
        position: _react.PropTypes.oneOf(_constants.POSITIONS).isRequired,
        size: _react.PropTypes.number.isRequired,
        isVisible: _react.PropTypes.bool.isRequired,
        childMonitorState: _react.PropTypes.any
      })
    };
    DockMonitor.defaultProps = {
      defaultIsVisible: true,
      defaultPosition: 'right',
      defaultSize: 0.3,
      fluid: true
    };
    exports.default = DockMonitor;

/***/ },
/* 636 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    var _interopRequireDefault = __webpack_require__(637)['default'];
    
    Object.defineProperty(exports, '__esModule', {
      value: true
    });
    
    var _Dock = __webpack_require__(639);
    
    var _Dock2 = _interopRequireDefault(_Dock);
    
    exports['default'] = _Dock2['default'];
    module.exports = exports['default'];

/***/ },
/* 637 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = __webpack_require__(638);

/***/ },
/* 638 */
/***/ function(module, exports) {

    "use strict";
    
    exports.__esModule = true;
    
    exports.default = function (obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    };

/***/ },
/* 639 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    var _get = __webpack_require__(640)['default'];
    
    var _inherits = __webpack_require__(239)['default'];
    
    var _createClass = __webpack_require__(644)['default'];
    
    var _classCallCheck = __webpack_require__(645)['default'];
    
    var _extends = __webpack_require__(588)['default'];
    
    var _toConsumableArray = __webpack_require__(646)['default'];
    
    var _Object$keys = __webpack_require__(589)['default'];
    
    var _interopRequireDefault = __webpack_require__(637)['default'];
    
    Object.defineProperty(exports, '__esModule', {
      value: true
    });
    
    var _react = __webpack_require__(2);
    
    var _react2 = _interopRequireDefault(_react);
    
    var _lodashDebounce = __webpack_require__(655);
    
    var _lodashDebounce2 = _interopRequireDefault(_lodashDebounce);
    
    var _objectAssign = __webpack_require__(251);
    
    var _objectAssign2 = _interopRequireDefault(_objectAssign);
    
    var _autoprefix = __webpack_require__(657);
    
    var _autoprefix2 = _interopRequireDefault(_autoprefix);
    
    function autoprefixes(styles) {
      return _Object$keys(styles).reduce(function (obj, key) {
        return (obj[key] = (0, _autoprefix2['default'])(styles[key]), obj);
      }, {});
    }
    
    var styles = autoprefixes({
      wrapper: {
        position: 'fixed',
        width: 0,
        height: 0,
        top: 0,
        left: 0
      },
    
      dim: {
        position: 'fixed',
        left: 0,
        right: 0,
        top: 0,
        bottom: 0,
        zIndex: 0,
        background: 'rgba(0, 0, 0, 0.2)',
        opacity: 1
      },
    
      dimAppear: {
        opacity: 0
      },
    
      dimTransparent: {
        pointerEvents: 'none'
      },
    
      dimHidden: {
        opacity: 0
      },
    
      dock: {
        position: 'fixed',
        zIndex: 1,
        boxShadow: '0 0 4px rgba(0, 0, 0, 0.3)',
        background: 'white',
        left: 0,
        top: 0,
        width: '100%',
        height: '100%'
      },
    
      dockHidden: {
        opacity: 0
      },
    
      dockResizing: {
        transition: 'none'
      },
    
      dockContent: {
        width: '100%',
        height: '100%',
        overflow: 'auto'
      },
    
      resizer: {
        position: 'absolute',
        zIndex: 2,
        opacity: 0
      }
    });
    
    function getTransitions(duration) {
      return ['left', 'top', 'width', 'height'].map(function (p) {
        return p + ' ' + duration / 1000 + 's ease-out';
      });
    }
    
    function getDockStyles(_ref, _ref2) {
      var fluid = _ref.fluid;
      var dockStyle = _ref.dockStyle;
      var dockHiddenStyle = _ref.dockHiddenStyle;
      var duration = _ref.duration;
      var position = _ref.position;
      var isVisible = _ref.isVisible;
      var size = _ref2.size;
      var isResizing = _ref2.isResizing;
      var fullWidth = _ref2.fullWidth;
      var fullHeight = _ref2.fullHeight;
    
      var posStyle = undefined;
      var absSize = fluid ? size * 100 + '%' : size + 'px';
    
      function getRestSize(fullSize) {
        return fluid ? 100 - size * 100 + '%' : fullSize - size + 'px';
      }
    
      switch (position) {
        case 'left':
          posStyle = {
            width: absSize,
            left: isVisible ? 0 : '-' + absSize
          };
          break;
        case 'right':
          posStyle = {
            left: isVisible ? getRestSize(fullWidth) : fullWidth,
            width: absSize
          };
          break;
        case 'top':
          posStyle = {
            top: isVisible ? 0 : '-' + absSize,
            height: absSize
          };
          break;
        case 'bottom':
          posStyle = {
            top: isVisible ? getRestSize(fullHeight) : fullHeight,
            height: absSize
          };
          break;
      }
    
      var transitions = getTransitions(duration);
    
      return [styles.dock, (0, _autoprefix2['default'])({
        transition: [].concat(_toConsumableArray(transitions), [!isVisible && 'opacity 0.01s linear ' + duration / 1000 + 's']).filter(function (t) {
          return t;
        }).join(',')
      }), dockStyle, (0, _autoprefix2['default'])(posStyle), isResizing && styles.dockResizing, !isVisible && styles.dockHidden, !isVisible && dockHiddenStyle];
    }
    
    function getDimStyles(_ref3, _ref4) {
      var dimMode = _ref3.dimMode;
      var dimStyle = _ref3.dimStyle;
      var duration = _ref3.duration;
      var isVisible = _ref3.isVisible;
      var isTransitionStarted = _ref4.isTransitionStarted;
    
      return [styles.dim, (0, _autoprefix2['default'])({
        transition: 'opacity ' + duration / 1000 + 's ease-out'
      }), dimStyle, dimMode === 'transparent' && styles.dimTransparent, !isVisible && styles.dimHidden, isTransitionStarted && isVisible && styles.dimAppear, isTransitionStarted && !isVisible && styles.dimDisappear];
    }
    
    function getResizerStyles(position) {
      var resizerStyle = undefined;
      var size = 10;
    
      switch (position) {
        case 'left':
          resizerStyle = {
            right: -size / 2,
            width: size,
            top: 0,
            height: '100%',
            cursor: 'col-resize'
          };
          break;
        case 'right':
          resizerStyle = {
            left: -size / 2,
            width: size,
            top: 0,
            height: '100%',
            cursor: 'col-resize'
          };
          break;
        case 'top':
          resizerStyle = {
            bottom: -size / 2,
            height: size,
            left: 0,
            width: '100%',
            cursor: 'row-resize'
          };
          break;
        case 'bottom':
          resizerStyle = {
            top: -size / 2,
            height: size,
            left: 0,
            width: '100%',
            cursor: 'row-resize'
          };
          break;
      }
    
      return [styles.resizer, (0, _autoprefix2['default'])(resizerStyle)];
    }
    
    function getFullSize(position, fullWidth, fullHeight) {
      return position === 'left' || position === 'right' ? fullWidth : fullHeight;
    }
    
    var Dock = (function (_Component) {
      _inherits(Dock, _Component);
    
      function Dock(props) {
        var _this = this;
    
        _classCallCheck(this, Dock);
    
        _get(Object.getPrototypeOf(Dock.prototype), 'constructor', this).call(this, props);
    
        this.transitionEnd = function () {
          _this.setState({ isTransitionStarted: false });
        };
    
        this.hideDim = function () {
          if (!_this.props.isVisible) {
            _this.setState({ isDimHidden: true });
          }
        };
    
        this.handleDimClick = function () {
          if (_this.props.dimMode === 'opaque') {
            _this.props.onVisibleChange && _this.props.onVisibleChange(false);
          }
        };
    
        this.handleResize = function () {
          if (window.requestAnimationFrame) {
            window.requestAnimationFrame(_this.updateWindowSize.bind(_this, true));
          } else {
            _this.updateWindowSize(true);
          }
        };
    
        this.updateWindowSize = function (windowResize) {
          var sizeState = {
            fullWidth: window.innerWidth,
            fullHeight: window.innerHeight
          };
    
          if (windowResize) {
            _this.setState(_extends({}, sizeState, {
              isResizing: true,
              isWindowResizing: windowResize
            }));
    
            _this.debouncedUpdateWindowSizeEnd();
          } else {
            _this.setState(sizeState);
          }
        };
    
        this.updateWindowSizeEnd = function () {
          _this.setState({
            isResizing: false,
            isWindowResizing: false
          });
        };
    
        this.debouncedUpdateWindowSizeEnd = (0, _lodashDebounce2['default'])(this.updateWindowSizeEnd, 30);
    
        this.handleWrapperLeave = function () {
          _this.setState({ isResizing: false });
        };
    
        this.handleMouseDown = function () {
          _this.setState({ isResizing: true });
        };
    
        this.handleMouseUp = function () {
          _this.setState({ isResizing: false });
        };
    
        this.handleMouseMove = function (e) {
          if (!_this.state.isResizing || _this.state.isWindowResizing) return;
          e.preventDefault();
    
          var _props = _this.props;
          var position = _props.position;
          var fluid = _props.fluid;
          var _state = _this.state;
          var fullWidth = _state.fullWidth;
          var fullHeight = _state.fullHeight;
          var isControlled = _state.isControlled;
          var x = e.clientX;
          var y = e.clientY;
    
          var size = undefined;
    
          switch (position) {
            case 'left':
              size = fluid ? x / fullWidth : x;
              break;
            case 'right':
              size = fluid ? (fullWidth - x) / fullWidth : fullWidth - x;
              break;
            case 'top':
              size = fluid ? y / fullHeight : y;
              break;
            case 'bottom':
              size = fluid ? (fullHeight - y) / fullHeight : fullHeight - y;
              break;
          }
    
          _this.props.onSizeChange && _this.props.onSizeChange(size);
    
          if (!isControlled) {
            _this.setState({ size: size });
          }
        };
    
        this.state = {
          isControlled: typeof props.size !== 'undefined',
          size: props.size || props.defaultSize,
          isDimHidden: !props.isVisible,
          fullWidth: typeof window !== 'undefined' && window.innerWidth,
          fullHeight: typeof window !== 'undefined' && window.innerHeight,
          isTransitionStarted: false,
          isWindowResizing: false
        };
      }
    
      _createClass(Dock, [{
        key: 'componentDidMount',
        value: function componentDidMount() {
          window.addEventListener('mouseup', this.handleMouseUp);
          window.addEventListener('mousemove', this.handleMouseMove);
          window.addEventListener('resize', this.handleResize);
    
          if (!window.fullWidth) {
            this.updateWindowSize();
          }
        }
      }, {
        key: 'componentWillUnmount',
        value: function componentWillUnmount() {
          window.removeEventListener('mouseup', this.handleMouseUp);
          window.removeEventListener('mousemove', this.handleMouseMove);
          window.removeEventListener('resize', this.handleResize);
        }
      }, {
        key: 'componentWillReceiveProps',
        value: function componentWillReceiveProps(nextProps) {
          var isControlled = typeof nextProps.size !== 'undefined';
    
          this.setState({ isControlled: isControlled });
    
          if (isControlled && this.props.size !== nextProps.size) {
            this.setState({ size: nextProps.size });
          } else if (this.props.fluid !== nextProps.fluid) {
            this.updateSize(nextProps);
          }
    
          if (this.props.isVisible !== nextProps.isVisible) {
            this.setState({
              isTransitionStarted: true
            });
          }
        }
      }, {
        key: 'updateSize',
        value: function updateSize(props) {
          var _state2 = this.state;
          var fullWidth = _state2.fullWidth;
          var fullHeight = _state2.fullHeight;
    
          this.setState({
            size: props.fluid ? this.state.size / getFullSize(props.position, fullWidth, fullHeight) : getFullSize(props.position, fullWidth, fullHeight) * this.state.size
          });
        }
      }, {
        key: 'componentDidUpdate',
        value: function componentDidUpdate(prevProps) {
          var _this2 = this;
    
          if (this.props.isVisible !== prevProps.isVisible) {
            if (!this.props.isVisible) {
              window.setTimeout(function () {
                return _this2.hideDim();
              }, this.props.duration);
            } else {
              this.setState({ isDimHidden: false });
            }
    
            window.setTimeout(function () {
              return _this2.setState({ isTransitionStarted: false });
            }, 0);
          }
        }
      }, {
        key: 'render',
        value: function render() {
          var _props2 = this.props;
          var children = _props2.children;
          var zIndex = _props2.zIndex;
          var dimMode = _props2.dimMode;
          var position = _props2.position;
          var isVisible = _props2.isVisible;
          var _state3 = this.state;
          var isResizing = _state3.isResizing;
          var size = _state3.size;
          var isDimHidden = _state3.isDimHidden;
    
          var dimStyles = _objectAssign2['default'].apply(undefined, [{}].concat(_toConsumableArray(getDimStyles(this.props, this.state))));
          var dockStyles = _objectAssign2['default'].apply(undefined, [{}].concat(_toConsumableArray(getDockStyles(this.props, this.state))));
          var resizerStyles = _objectAssign2['default'].apply(undefined, [{}].concat(_toConsumableArray(getResizerStyles(position))));
    
          return _react2['default'].createElement(
            'div',
            { style: (0, _objectAssign2['default'])({}, styles.wrapper, { zIndex: zIndex }) },
            dimMode !== 'none' && !isDimHidden && _react2['default'].createElement('div', { style: dimStyles, onClick: this.handleDimClick }),
            _react2['default'].createElement(
              'div',
              { style: dockStyles },
              _react2['default'].createElement('div', { style: resizerStyles,
                onMouseDown: this.handleMouseDown }),
              _react2['default'].createElement(
                'div',
                { style: styles.dockContent },
                typeof children === 'function' ? children({
                  position: position,
                  isResizing: isResizing,
                  size: size,
                  isVisible: isVisible
                }) : children
              )
            )
          );
        }
      }], [{
        key: 'propTypes',
        value: {
          position: _react.PropTypes.oneOf(['left', 'right', 'top', 'bottom']),
          zIndex: _react.PropTypes.number,
          fluid: _react.PropTypes.bool,
          size: _react.PropTypes.number,
          defaultSize: _react.PropTypes.number,
          dimMode: _react.PropTypes.oneOf(['none', 'transparent', 'opaque']),
          isVisible: _react.PropTypes.bool,
          onVisibleChange: _react.PropTypes.func,
          onSizeChange: _react.PropTypes.func,
          dimStyle: _react.PropTypes.object,
          dockStyle: _react.PropTypes.object,
          duration: _react.PropTypes.number
        },
        enumerable: true
      }, {
        key: 'defaultProps',
        value: {
          position: 'left',
          zIndex: 99999999,
          fluid: true,
          defaultSize: 0.3,
          dimMode: 'opaque',
          duration: 200
        },
        enumerable: true
      }]);
    
      return Dock;
    })(_react.Component);
    
    exports['default'] = Dock;
    module.exports = exports['default'];

/***/ },
/* 640 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    exports.__esModule = true;
    
    var _getPrototypeOf = __webpack_require__(161);
    
    var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
    
    var _getOwnPropertyDescriptor = __webpack_require__(641);
    
    var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = function get(object, property, receiver) {
      if (object === null) object = Function.prototype;
      var desc = (0, _getOwnPropertyDescriptor2.default)(object, property);
    
      if (desc === undefined) {
        var parent = (0, _getPrototypeOf2.default)(object);
    
        if (parent === null) {
          return undefined;
        } else {
          return get(parent, property, receiver);
        }
      } else if ("value" in desc) {
        return desc.value;
      } else {
        var getter = desc.get;
    
        if (getter === undefined) {
          return undefined;
        }
    
        return getter.call(receiver);
      }
    };

/***/ },
/* 641 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(642), __esModule: true };

/***/ },
/* 642 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(643);
    var $Object = __webpack_require__(174).Object;
    module.exports = function getOwnPropertyDescriptor(it, key){
      return $Object.getOwnPropertyDescriptor(it, key);
    };

/***/ },
/* 643 */
/***/ function(module, exports, __webpack_require__) {

    // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
    var toIObject                 = __webpack_require__(208)
      , $getOwnPropertyDescriptor = __webpack_require__(235).f;
    
    __webpack_require__(172)('getOwnPropertyDescriptor', function(){
      return function getOwnPropertyDescriptor(it, key){
        return $getOwnPropertyDescriptor(toIObject(it), key);
      };
    });

/***/ },
/* 644 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = __webpack_require__(188);

/***/ },
/* 645 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = __webpack_require__(187);

/***/ },
/* 646 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = __webpack_require__(647);

/***/ },
/* 647 */
/***/ function(module, exports, __webpack_require__) {

    "use strict";
    
    exports.__esModule = true;
    
    var _from = __webpack_require__(648);
    
    var _from2 = _interopRequireDefault(_from);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = function (arr) {
      if (Array.isArray(arr)) {
        for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
          arr2[i] = arr[i];
        }
    
        return arr2;
      } else {
        return (0, _from2.default)(arr);
      }
    };

/***/ },
/* 648 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = { "default": __webpack_require__(649), __esModule: true };

/***/ },
/* 649 */
/***/ function(module, exports, __webpack_require__) {

    __webpack_require__(196);
    __webpack_require__(650);
    module.exports = __webpack_require__(174).Array.from;

/***/ },
/* 650 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    var ctx            = __webpack_require__(175)
      , $export        = __webpack_require__(173)
      , toObject       = __webpack_require__(164)
      , call           = __webpack_require__(651)
      , isArrayIter    = __webpack_require__(652)
      , toLength       = __webpack_require__(212)
      , createProperty = __webpack_require__(653)
      , getIterFn      = __webpack_require__(604);
    
    $export($export.S + $export.F * !__webpack_require__(654)(function(iter){ Array.from(iter); }), 'Array', {
      // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
      from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){
        var O       = toObject(arrayLike)
          , C       = typeof this == 'function' ? this : Array
          , aLen    = arguments.length
          , mapfn   = aLen > 1 ? arguments[1] : undefined
          , mapping = mapfn !== undefined
          , index   = 0
          , iterFn  = getIterFn(O)
          , length, result, step, iterator;
        if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
        // if object isn't iterable or it's array with default iterator - use simple case
        if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){
          for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){
            createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
          }
        } else {
          length = toLength(O.length);
          for(result = new C(length); length > index; index++){
            createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
          }
        }
        result.length = index;
        return result;
      }
    });


/***/ },
/* 651 */
/***/ function(module, exports, __webpack_require__) {

    // call something on iterator step with safe closing on error
    var anObject = __webpack_require__(179);
    module.exports = function(iterator, fn, value, entries){
      try {
        return entries ? fn(anObject(value)[0], value[1]) : fn(value);
      // 7.4.6 IteratorClose(iterator, completion)
      } catch(e){
        var ret = iterator['return'];
        if(ret !== undefined)anObject(ret.call(iterator));
        throw e;
      }
    };

/***/ },
/* 652 */
/***/ function(module, exports, __webpack_require__) {

    // check on default Array iterator
    var Iterators  = __webpack_require__(202)
      , ITERATOR   = __webpack_require__(217)('iterator')
      , ArrayProto = Array.prototype;
    
    module.exports = function(it){
      return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
    };

/***/ },
/* 653 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    var $defineProperty = __webpack_require__(178)
      , createDesc      = __webpack_require__(186);
    
    module.exports = function(object, index, value){
      if(index in object)$defineProperty.f(object, index, createDesc(0, value));
      else object[index] = value;
    };

/***/ },
/* 654 */
/***/ function(module, exports, __webpack_require__) {

    var ITERATOR     = __webpack_require__(217)('iterator')
      , SAFE_CLOSING = false;
    
    try {
      var riter = [7][ITERATOR]();
      riter['return'] = function(){ SAFE_CLOSING = true; };
      Array.from(riter, function(){ throw 2; });
    } catch(e){ /* empty */ }
    
    module.exports = function(exec, skipClosing){
      if(!skipClosing && !SAFE_CLOSING)return false;
      var safe = false;
      try {
        var arr  = [7]
          , iter = arr[ITERATOR]();
        iter.next = function(){ return {done: safe = true}; };
        arr[ITERATOR] = function(){ return iter; };
        exec(arr);
      } catch(e){ /* empty */ }
      return safe;
    };

/***/ },
/* 655 */
/***/ function(module, exports, __webpack_require__) {

    /**
     * lodash 3.1.1 (Custom Build) <https://lodash.com/>
     * Build: `lodash modern modularize exports="npm" -o ./`
     * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
     * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
     * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
     * Available under MIT license <https://lodash.com/license>
     */
    var getNative = __webpack_require__(656);
    
    /** Used as the `TypeError` message for "Functions" methods. */
    var FUNC_ERROR_TEXT = 'Expected a function';
    
    /* Native method references for those with the same name as other `lodash` methods. */
    var nativeMax = Math.max,
        nativeNow = getNative(Date, 'now');
    
    /**
     * Gets the number of milliseconds that have elapsed since the Unix epoch
     * (1 January 1970 00:00:00 UTC).
     *
     * @static
     * @memberOf _
     * @category Date
     * @example
     *
     * _.defer(function(stamp) {
     *   console.log(_.now() - stamp);
     * }, _.now());
     * // => logs the number of milliseconds it took for the deferred function to be invoked
     */
    var now = nativeNow || function() {
      return new Date().getTime();
    };
    
    /**
     * Creates a debounced function that delays invoking `func` until after `wait`
     * milliseconds have elapsed since the last time the debounced function was
     * invoked. The debounced function comes with a `cancel` method to cancel
     * delayed invocations. Provide an options object to indicate that `func`
     * should be invoked on the leading and/or trailing edge of the `wait` timeout.
     * Subsequent calls to the debounced function return the result of the last
     * `func` invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
     * on the trailing edge of the timeout only if the the debounced function is
     * invoked more than once during the `wait` timeout.
     *
     * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
     * for details over the differences between `_.debounce` and `_.throttle`.
     *
     * @static
     * @memberOf _
     * @category Function
     * @param {Function} func The function to debounce.
     * @param {number} [wait=0] The number of milliseconds to delay.
     * @param {Object} [options] The options object.
     * @param {boolean} [options.leading=false] Specify invoking on the leading
     *  edge of the timeout.
     * @param {number} [options.maxWait] The maximum time `func` is allowed to be
     *  delayed before it is invoked.
     * @param {boolean} [options.trailing=true] Specify invoking on the trailing
     *  edge of the timeout.
     * @returns {Function} Returns the new debounced function.
     * @example
     *
     * // avoid costly calculations while the window size is in flux
     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
     *
     * // invoke `sendMail` when the click event is fired, debouncing subsequent calls
     * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
     *   'leading': true,
     *   'trailing': false
     * }));
     *
     * // ensure `batchLog` is invoked once after 1 second of debounced calls
     * var source = new EventSource('/stream');
     * jQuery(source).on('message', _.debounce(batchLog, 250, {
     *   'maxWait': 1000
     * }));
     *
     * // cancel a debounced call
     * var todoChanges = _.debounce(batchLog, 1000);
     * Object.observe(models.todo, todoChanges);
     *
     * Object.observe(models, function(changes) {
     *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {
     *     todoChanges.cancel();
     *   }
     * }, ['delete']);
     *
     * // ...at some point `models.todo` is changed
     * models.todo.completed = true;
     *
     * // ...before 1 second has passed `models.todo` is deleted
     * // which cancels the debounced `todoChanges` call
     * delete models.todo;
     */
    function debounce(func, wait, options) {
      var args,
          maxTimeoutId,
          result,
          stamp,
          thisArg,
          timeoutId,
          trailingCall,
          lastCalled = 0,
          maxWait = false,
          trailing = true;
    
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      wait = wait < 0 ? 0 : (+wait || 0);
      if (options === true) {
        var leading = true;
        trailing = false;
      } else if (isObject(options)) {
        leading = !!options.leading;
        maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }
    
      function cancel() {
        if (timeoutId) {
          clearTimeout(timeoutId);
        }
        if (maxTimeoutId) {
          clearTimeout(maxTimeoutId);
        }
        lastCalled = 0;
        maxTimeoutId = timeoutId = trailingCall = undefined;
      }
    
      function complete(isCalled, id) {
        if (id) {
          clearTimeout(id);
        }
        maxTimeoutId = timeoutId = trailingCall = undefined;
        if (isCalled) {
          lastCalled = now();
          result = func.apply(thisArg, args);
          if (!timeoutId && !maxTimeoutId) {
            args = thisArg = undefined;
          }
        }
      }
    
      function delayed() {
        var remaining = wait - (now() - stamp);
        if (remaining <= 0 || remaining > wait) {
          complete(trailingCall, maxTimeoutId);
        } else {
          timeoutId = setTimeout(delayed, remaining);
        }
      }
    
      function maxDelayed() {
        complete(trailing, timeoutId);
      }
    
      function debounced() {
        args = arguments;
        stamp = now();
        thisArg = this;
        trailingCall = trailing && (timeoutId || !leading);
    
        if (maxWait === false) {
          var leadingCall = leading && !timeoutId;
        } else {
          if (!maxTimeoutId && !leading) {
            lastCalled = stamp;
          }
          var remaining = maxWait - (stamp - lastCalled),
              isCalled = remaining <= 0 || remaining > maxWait;
    
          if (isCalled) {
            if (maxTimeoutId) {
              maxTimeoutId = clearTimeout(maxTimeoutId);
            }
            lastCalled = stamp;
            result = func.apply(thisArg, args);
          }
          else if (!maxTimeoutId) {
            maxTimeoutId = setTimeout(maxDelayed, remaining);
          }
        }
        if (isCalled && timeoutId) {
          timeoutId = clearTimeout(timeoutId);
        }
        else if (!timeoutId && wait !== maxWait) {
          timeoutId = setTimeout(delayed, wait);
        }
        if (leadingCall) {
          isCalled = true;
          result = func.apply(thisArg, args);
        }
        if (isCalled && !timeoutId && !maxTimeoutId) {
          args = thisArg = undefined;
        }
        return result;
      }
      debounced.cancel = cancel;
      return debounced;
    }
    
    /**
     * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
     * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(1);
     * // => false
     */
    function isObject(value) {
      // Avoid a V8 JIT bug in Chrome 19-20.
      // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
      var type = typeof value;
      return !!value && (type == 'object' || type == 'function');
    }
    
    module.exports = debounce;


/***/ },
/* 656 */
/***/ function(module, exports) {

    /**
     * lodash 3.9.1 (Custom Build) <https://lodash.com/>
     * Build: `lodash modern modularize exports="npm" -o ./`
     * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
     * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
     * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
     * Available under MIT license <https://lodash.com/license>
     */
    
    /** `Object#toString` result references. */
    var funcTag = '[object Function]';
    
    /** Used to detect host constructors (Safari > 5). */
    var reIsHostCtor = /^\[object .+?Constructor\]$/;
    
    /**
     * Checks if `value` is object-like.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     */
    function isObjectLike(value) {
      return !!value && typeof value == 'object';
    }
    
    /** Used for native method references. */
    var objectProto = Object.prototype;
    
    /** Used to resolve the decompiled source of functions. */
    var fnToString = Function.prototype.toString;
    
    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;
    
    /**
     * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
     * of values.
     */
    var objToString = objectProto.toString;
    
    /** Used to detect if a method is native. */
    var reIsNative = RegExp('^' +
      fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
    );
    
    /**
     * Gets the native function at `key` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the method to get.
     * @returns {*} Returns the function if it's native, else `undefined`.
     */
    function getNative(object, key) {
      var value = object == null ? undefined : object[key];
      return isNative(value) ? value : undefined;
    }
    
    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in older versions of Chrome and Safari which return 'function' for regexes
      // and Safari 8 equivalents which return 'object' for typed array constructors.
      return isObject(value) && objToString.call(value) == funcTag;
    }
    
    /**
     * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
     * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(1);
     * // => false
     */
    function isObject(value) {
      // Avoid a V8 JIT bug in Chrome 19-20.
      // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
      var type = typeof value;
      return !!value && (type == 'object' || type == 'function');
    }
    
    /**
     * Checks if `value` is a native function.
     *
     * @static
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
     * @example
     *
     * _.isNative(Array.prototype.push);
     * // => true
     *
     * _.isNative(_);
     * // => false
     */
    function isNative(value) {
      if (value == null) {
        return false;
      }
      if (isFunction(value)) {
        return reIsNative.test(fnToString.call(value));
      }
      return isObjectLike(value) && reIsHostCtor.test(value);
    }
    
    module.exports = getNative;


/***/ },
/* 657 */
/***/ function(module, exports, __webpack_require__) {

    // Same as https://github.com/SimenB/react-vendor-prefixes/blob/master/src/index.js,
    // but dumber
    
    'use strict';
    
    var _extends = __webpack_require__(588)['default'];
    
    var _Object$keys = __webpack_require__(589)['default'];
    
    Object.defineProperty(exports, '__esModule', {
      value: true
    });
    exports['default'] = autoprefix;
    var vendorSpecificProperties = ['animation', 'animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction', 'appearance', 'backfaceVisibility', 'backgroundClip', 'borderImage', 'borderImageSlice', 'boxSizing', 'boxShadow', 'contentColumns', 'transform', 'transformOrigin', 'transformStyle', 'transition', 'transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction', 'perspective', 'perspectiveOrigin', 'userSelect'];
    
    var prefixes = ['Moz', 'Webkit', 'ms', 'O'];
    
    function prefixProp(key, value) {
      return prefixes.reduce(function (obj, pre) {
        return (obj[pre + key[0].toUpperCase() + key.substr(1)] = value, obj);
      }, {});
    }
    
    function autoprefix(style) {
      return _Object$keys(style).reduce(function (obj, key) {
        return vendorSpecificProperties.indexOf(key) !== -1 ? _extends({}, obj, prefixProp(key, style[key])) : obj;
      }, style);
    }
    
    module.exports = exports['default'];

/***/ },
/* 658 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    var POSITIONS = exports.POSITIONS = ['left', 'top', 'right', 'bottom'];

/***/ },
/* 659 */
/***/ function(module, exports) {

    'use strict';
    
    exports.__esModule = true;
    exports.toggleVisibility = toggleVisibility;
    exports.changePosition = changePosition;
    exports.changeSize = changeSize;
    exports.changeMonitor = changeMonitor;
    var TOGGLE_VISIBILITY = exports.TOGGLE_VISIBILITY = '@@redux-devtools-log-monitor/TOGGLE_VISIBILITY';
    function toggleVisibility() {
      return { type: TOGGLE_VISIBILITY };
    }
    
    var CHANGE_POSITION = exports.CHANGE_POSITION = '@@redux-devtools-log-monitor/CHANGE_POSITION';
    function changePosition() {
      return { type: CHANGE_POSITION };
    }
    
    var CHANGE_SIZE = exports.CHANGE_SIZE = '@@redux-devtools-log-monitor/CHANGE_SIZE';
    function changeSize(size) {
      return { type: CHANGE_SIZE, size: size };
    }
    
    var CHANGE_MONITOR = exports.CHANGE_MONITOR = '@@redux-devtools-log-monitor/CHANGE_MONITOR';
    function changeMonitor() {
      return { type: CHANGE_MONITOR };
    }

/***/ },
/* 660 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.__esModule = true;
    exports.default = reducer;
    
    var _actions = __webpack_require__(659);
    
    var _constants = __webpack_require__(658);
    
    var _react = __webpack_require__(2);
    
    function position(props) {
      var state = arguments.length <= 1 || arguments[1] === undefined ? props.defaultPosition : arguments[1];
      var action = arguments[2];
    
      return action.type === _actions.CHANGE_POSITION ? _constants.POSITIONS[(_constants.POSITIONS.indexOf(state) + 1) % _constants.POSITIONS.length] : state;
    }
    
    function size(props) {
      var state = arguments.length <= 1 || arguments[1] === undefined ? props.defaultSize : arguments[1];
      var action = arguments[2];
    
      return action.type === _actions.CHANGE_SIZE ? action.size : state;
    }
    
    function isVisible(props) {
      var state = arguments.length <= 1 || arguments[1] === undefined ? props.defaultIsVisible : arguments[1];
      var action = arguments[2];
    
      return action.type === _actions.TOGGLE_VISIBILITY ? !state : state;
    }
    
    function childMonitorStates(props) {
      var state = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];
      var action = arguments[2];
    
      return _react.Children.map(props.children, function (child, index) {
        return child.type.update(child.props, state[index], action);
      });
    }
    
    function childMonitorIndex(props) {
      var state = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
      var action = arguments[2];
    
      switch (action.type) {
        case _actions.CHANGE_MONITOR:
          return (state + 1) % _react.Children.count(props.children);
        default:
          return state;
      }
    }
    
    function reducer(props) {
      var state = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
      var action = arguments[2];
    
      if (!state.childMonitorStates) {
        _react.Children.forEach(props.children, function (child, index) {
          if (typeof child.type.update !== 'function') {
            console.error('Child of <DockMonitor> with the index ' + index + ' ' + ('(' + (child.type.displayName || child.type.name || child.type) + ') ') + 'does not appear to be a valid Redux DevTools monitor.');
          }
        });
      }
    
      return {
        position: position(props, state.position, action),
        isVisible: isVisible(props, state.isVisible, action),
        size: size(props, state.size, action),
        childMonitorIndex: childMonitorIndex(props, state.childMonitorIndex, action),
        childMonitorStates: childMonitorStates(props, state.childMonitorStates, action)
      };
    }

/***/ },
/* 661 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    var keycodes = __webpack_require__(662);
    
    function assertKeyString(s) {
      if (!/^(ctrl-|shift-|alt-|meta-){0,4}\w+$/.test(s))
        throw new Error('The string to parse needs to be of the format "c", "ctrl-c", "shift-ctrl-c".');
    }
    
    module.exports = function parse(s) {
      var keyString = s.trim().toLowerCase();
    
      assertKeyString(keyString);
    
      var key = {
          name     :  undefined
        , ctrl     :  false
        , meta     :  false
        , shift    :  false
        , alt      :  false
        , sequence :  undefined
      }
      , parts = keyString.split('-')
      , c;
    
      key.name = parts.pop();
      while((c = parts.pop())) key[c] = true;
      key.sequence = key.ctrl 
        ? keycodes.ctrl[key.name] || key.name
        : keycodes.nomod[key.name] || key.name;
    
      // uppercase sequence for single chars when shift was pressed
      if (key.shift && key.sequence && key.sequence.length === 1)
        key.sequence = key.sequence.toUpperCase();
    
      return key;
    };


/***/ },
/* 662 */
/***/ function(module, exports) {

    // Most of these are according to this table: http://www.ssicom.org/js/x171166.htm
    // However where nodejs readline diverges, they are adjusted to conform to it
    module.exports = {
      nomod: {
          escape: '\u001b'
        , space: ' ' // actually '\u0020'
        }
      , ctrl: {
            ' ': '\u0000'
          , 'a': '\u0001'
          , 'b': '\u0002'
          , 'c': '\u0003'
          , 'd': '\u0004'
          , 'e': '\u0005'
          , 'f': '\u0006'
          , 'g': '\u0007'
          , 'h': '\u0008'
          , 'i': '\u0009'
          , 'j': '\u000a'
          , 'k': '\u000b'
          , 'm': '\u000c'
          , 'n': '\u000d'
          , 'l': '\u000e'
          , 'o': '\u000f'
          , 'p': '\u0010'
          , 'q': '\u0011'
          , 'r': '\u0012'
          , 's': '\u0013'
          , 't': '\u0014'
          , 'u': '\u0015'
          , 'v': '\u0016'
          , 'w': '\u0017'
          , 'x': '\u0018'
          , 'y': '\u0019'
          , 'z': '\u001a'
          , '[': '\u001b'
          , '\\':'\u001c'
          , ']': '\u001d'
          , '^': '\u001e'
          , '_': '\u001f'
    
          , 'space': '\u0000'
        }
    };


/***/ },
/* 663 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = configureStore;
    
    var _redux = __webpack_require__(415);
    
    var _reduxThunk = __webpack_require__(664);
    
    var _reduxThunk2 = _interopRequireDefault(_reduxThunk);
    
    var _rootReducer = __webpack_require__(665);
    
    var _rootReducer2 = _interopRequireDefault(_rootReducer);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    function configureStore() {
      var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      var history = arguments[1];
    
      // Compose final middleware and use devtools in debug environment
      var middleware = (0, _redux.applyMiddleware)(_reduxThunk2.default);
      if (true) {
        var devTools = window.devToolsExtension ? window.devToolsExtension() : __webpack_require__(522).default.instrument();
        middleware = (0, _redux.compose)(middleware, devTools);
      }
    
      // Create final store and subscribe router in debug env ie. for devtools
      var store = middleware(_redux.createStore)(_rootReducer2.default, initialState);
    
      if (true) {
        module.hot.accept(665, function () {
          var nextRootReducer = __webpack_require__(665).default;
    
          store.replaceReducer(nextRootReducer);
        });
      }
      return store;
    }

/***/ },
/* 664 */
/***/ function(module, exports) {

    'use strict';
    
    function thunkMiddleware(_ref) {
      var dispatch = _ref.dispatch;
      var getState = _ref.getState;
    
      return function (next) {
        return function (action) {
          return typeof action === 'function' ? action(dispatch, getState) : next(action);
        };
      };
    }
    
    module.exports = thunkMiddleware;

/***/ },
/* 665 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    
    var _redux = __webpack_require__(415);
    
    var _geojson = __webpack_require__(513);
    
    var _geojson2 = _interopRequireDefault(_geojson);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    
    exports.default = (0, _redux.combineReducers)({
      geojson: _geojson2.default
    });

/***/ },
/* 666 */
/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(__resourceQuery, module) {/*eslint-env browser*/
    /*global __resourceQuery __webpack_public_path__*/
    
    var options = {
      path: "/__webpack_hmr",
      timeout: 20 * 1000,
      overlay: true,
      reload: false,
      log: true,
      warn: true,
      name: ''
    };
    if (true) {
      var querystring = __webpack_require__(667);
      var overrides = querystring.parse(__resourceQuery.slice(1));
      if (overrides.path) options.path = overrides.path;
      if (overrides.timeout) options.timeout = overrides.timeout;
      if (overrides.overlay) options.overlay = overrides.overlay !== 'false';
      if (overrides.reload) options.reload = overrides.reload !== 'false';
      if (overrides.noInfo && overrides.noInfo !== 'false') {
        options.log = false;
      }
      if (overrides.name) {
        options.name = overrides.name;
      }
      if (overrides.quiet && overrides.quiet !== 'false') {
        options.log = false;
        options.warn = false;
      }
      if (overrides.dynamicPublicPath) {
        options.path = __webpack_require__.p + options.path;
      }
    }
    
    if (typeof window === 'undefined') {
      // do nothing
    } else if (typeof window.EventSource === 'undefined') {
      console.warn(
        "webpack-hot-middleware's client requires EventSource to work. " +
        "You should include a polyfill if you want to support this browser: " +
        "https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events#Tools"
      );
    } else {
      connect();
    }
    
    function EventSourceWrapper() {
      var source;
      var lastActivity = new Date();
      var listeners = [];
    
      init();
      var timer = setInterval(function() {
        if ((new Date() - lastActivity) > options.timeout) {
          handleDisconnect();
        }
      }, options.timeout / 2);
    
      function init() {
        source = new window.EventSource(options.path);
        source.onopen = handleOnline;
        source.onerror = handleDisconnect;
        source.onmessage = handleMessage;
      }
    
      function handleOnline() {
        if (options.log) console.log("[HMR] connected");
        lastActivity = new Date();
      }
    
      function handleMessage(event) {
        lastActivity = new Date();
        for (var i = 0; i < listeners.length; i++) {
          listeners[i](event);
        }
      }
    
      function handleDisconnect() {
        clearInterval(timer);
        source.close();
        setTimeout(init, options.timeout);
      }
    
      return {
        addMessageListener: function(fn) {
          listeners.push(fn);
        }
      };
    }
    
    function getEventSourceWrapper() {
      if (!window.__whmEventSourceWrapper) {
        window.__whmEventSourceWrapper = {};
      }
      if (!window.__whmEventSourceWrapper[options.path]) {
        // cache the wrapper for other entries loaded on
        // the same page with the same options.path
        window.__whmEventSourceWrapper[options.path] = EventSourceWrapper();
      }
      return window.__whmEventSourceWrapper[options.path];
    }
    
    function connect() {
      getEventSourceWrapper().addMessageListener(handleMessage);
    
      function handleMessage(event) {
        if (event.data == "\uD83D\uDC93") {
          return;
        }
        try {
          processMessage(JSON.parse(event.data));
        } catch (ex) {
          if (options.warn) {
            console.warn("Invalid HMR message: " + event.data + "\n" + ex);
          }
        }
      }
    }
    
    // the reporter needs to be a singleton on the page
    // in case the client is being used by multiple bundles
    // we only want to report once.
    // all the errors will go to all clients
    var singletonKey = '__webpack_hot_middleware_reporter__';
    var reporter;
    if (typeof window !== 'undefined') {
      if (!window[singletonKey]) {
        window[singletonKey] = createReporter();
      }
      reporter = window[singletonKey];
    }
    
    function createReporter() {
      var strip = __webpack_require__(670);
    
      var overlay;
      if (typeof document !== 'undefined' && options.overlay) {
        overlay = __webpack_require__(672);
      }
    
      var styles = {
        errors: "color: #ff0000;",
        warnings: "color: #5c3b00;"
      };
      var previousProblems = null;
      function log(type, obj) {
        var newProblems = obj[type].map(function(msg) { return strip(msg); }).join('\n');
        if (previousProblems == newProblems) {
          return;
        } else {
          previousProblems = newProblems;
        }
    
        var style = styles[type];
        var name = obj.name ? "'" + obj.name + "' " : "";
        var title = "[HMR] bundle " + name + "has " + obj[type].length + " " + type;
        // NOTE: console.warn or console.error will print the stack trace
        // which isn't helpful here, so using console.log to escape it.
        if (console.group && console.groupEnd) {
          console.group("%c" + title, style);
          console.log("%c" + newProblems, style);
          console.groupEnd();
        } else {
          console.log(
            "%c" + title + "\n\t%c" + newProblems.replace(/\n/g, "\n\t"),
            style + "font-weight: bold;",
            style + "font-weight: normal;"
          );
        }
      }
    
      return {
        cleanProblemsCache: function () {
          previousProblems = null;
        },
        problems: function(type, obj) {
          if (options.warn) {
            log(type, obj);
          }
          if (overlay && type !== 'warnings') overlay.showProblems(type, obj[type]);
        },
        success: function() {
          if (overlay) overlay.clear();
        },
        useCustomOverlay: function(customOverlay) {
          overlay = customOverlay;
        }
      };
    }
    
    var processUpdate = __webpack_require__(678);
    
    var customHandler;
    var subscribeAllHandler;
    function processMessage(obj) {
      switch(obj.action) {
        case "building":
          if (options.log) {
            console.log(
              "[HMR] bundle " + (obj.name ? "'" + obj.name + "' " : "") +
              "rebuilding"
            );
          }
          break;
        case "built":
          if (options.log) {
            console.log(
              "[HMR] bundle " + (obj.name ? "'" + obj.name + "' " : "") +
              "rebuilt in " + obj.time + "ms"
            );
          }
          // fall through
        case "sync":
          if (obj.name && options.name && obj.name !== options.name) {
            return;
          }
          if (obj.errors.length > 0) {
            if (reporter) reporter.problems('errors', obj);
          } else {
            if (reporter) {
              if (obj.warnings.length > 0) {
                reporter.problems('warnings', obj);
              } else {
                reporter.cleanProblemsCache();
              }
              reporter.success();
            }
            processUpdate(obj.hash, obj.modules, options);
          }
          break;
        default:
          if (customHandler) {
            customHandler(obj);
          }
      }
    
      if (subscribeAllHandler) {
        subscribeAllHandler(obj);
      }
    }
    
    if (module) {
      module.exports = {
        subscribeAll: function subscribeAll(handler) {
          subscribeAllHandler = handler;
        },
        subscribe: function subscribe(handler) {
          customHandler = handler;
        },
        useCustomOverlay: function useCustomOverlay(customOverlay) {
          if (reporter) reporter.useCustomOverlay(customOverlay);
        }
      };
    }
    
    /* WEBPACK VAR INJECTION */}.call(exports, "?path=http://localhost:3000/__webpack_hmr", __webpack_require__(160)(module)))

/***/ },
/* 667 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    
    exports.decode = exports.parse = __webpack_require__(668);
    exports.encode = exports.stringify = __webpack_require__(669);


/***/ },
/* 668 */
/***/ function(module, exports) {

    // Copyright Joyent, Inc. and other Node contributors.
    //
    // Permission is hereby granted, free of charge, to any person obtaining a
    // copy of this software and associated documentation files (the
    // "Software"), to deal in the Software without restriction, including
    // without limitation the rights to use, copy, modify, merge, publish,
    // distribute, sublicense, and/or sell copies of the Software, and to permit
    // persons to whom the Software is furnished to do so, subject to the
    // following conditions:
    //
    // The above copyright notice and this permission notice shall be included
    // in all copies or substantial portions of the Software.
    //
    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
    // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
    // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
    // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
    // USE OR OTHER DEALINGS IN THE SOFTWARE.
    
    'use strict';
    
    // If obj.hasOwnProperty has been overridden, then calling
    // obj.hasOwnProperty(prop) will break.
    // See: https://github.com/joyent/node/issues/1707
    function hasOwnProperty(obj, prop) {
      return Object.prototype.hasOwnProperty.call(obj, prop);
    }
    
    module.exports = function(qs, sep, eq, options) {
      sep = sep || '&';
      eq = eq || '=';
      var obj = {};
    
      if (typeof qs !== 'string' || qs.length === 0) {
        return obj;
      }
    
      var regexp = /\+/g;
      qs = qs.split(sep);
    
      var maxKeys = 1000;
      if (options && typeof options.maxKeys === 'number') {
        maxKeys = options.maxKeys;
      }
    
      var len = qs.length;
      // maxKeys <= 0 means that we should not limit keys count
      if (maxKeys > 0 && len > maxKeys) {
        len = maxKeys;
      }
    
      for (var i = 0; i < len; ++i) {
        var x = qs[i].replace(regexp, '%20'),
            idx = x.indexOf(eq),
            kstr, vstr, k, v;
    
        if (idx >= 0) {
          kstr = x.substr(0, idx);
          vstr = x.substr(idx + 1);
        } else {
          kstr = x;
          vstr = '';
        }
    
        k = decodeURIComponent(kstr);
        v = decodeURIComponent(vstr);
    
        if (!hasOwnProperty(obj, k)) {
          obj[k] = v;
        } else if (Array.isArray(obj[k])) {
          obj[k].push(v);
        } else {
          obj[k] = [obj[k], v];
        }
      }
    
      return obj;
    };


/***/ },
/* 669 */
/***/ function(module, exports) {

    // Copyright Joyent, Inc. and other Node contributors.
    //
    // Permission is hereby granted, free of charge, to any person obtaining a
    // copy of this software and associated documentation files (the
    // "Software"), to deal in the Software without restriction, including
    // without limitation the rights to use, copy, modify, merge, publish,
    // distribute, sublicense, and/or sell copies of the Software, and to permit
    // persons to whom the Software is furnished to do so, subject to the
    // following conditions:
    //
    // The above copyright notice and this permission notice shall be included
    // in all copies or substantial portions of the Software.
    //
    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
    // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
    // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
    // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
    // USE OR OTHER DEALINGS IN THE SOFTWARE.
    
    'use strict';
    
    var stringifyPrimitive = function(v) {
      switch (typeof v) {
        case 'string':
          return v;
    
        case 'boolean':
          return v ? 'true' : 'false';
    
        case 'number':
          return isFinite(v) ? v : '';
    
        default:
          return '';
      }
    };
    
    module.exports = function(obj, sep, eq, name) {
      sep = sep || '&';
      eq = eq || '=';
      if (obj === null) {
        obj = undefined;
      }
    
      if (typeof obj === 'object') {
        return Object.keys(obj).map(function(k) {
          var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
          if (Array.isArray(obj[k])) {
            return obj[k].map(function(v) {
              return ks + encodeURIComponent(stringifyPrimitive(v));
            }).join(sep);
          } else {
            return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
          }
        }).join(sep);
    
      }
    
      if (!name) return '';
      return encodeURIComponent(stringifyPrimitive(name)) + eq +
             encodeURIComponent(stringifyPrimitive(obj));
    };


/***/ },
/* 670 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';
    var ansiRegex = __webpack_require__(671)();
    
    module.exports = function (str) {
        return typeof str === 'string' ? str.replace(ansiRegex, '') : str;
    };


/***/ },
/* 671 */
/***/ function(module, exports) {

    'use strict';
    module.exports = function () {
        return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
    };


/***/ },
/* 672 */
/***/ function(module, exports, __webpack_require__) {

    /*eslint-env browser*/
    
    var clientOverlay = document.createElement('div');
    clientOverlay.id = 'webpack-hot-middleware-clientOverlay';
    var styles = {
      background: 'rgba(0,0,0,0.85)',
      color: '#E8E8E8',
      lineHeight: '1.2',
      whiteSpace: 'pre',
      fontFamily: 'Menlo, Consolas, monospace',
      fontSize: '13px',
      position: 'fixed',
      zIndex: 9999,
      padding: '10px',
      left: 0,
      right: 0,
      top: 0,
      bottom: 0,
      overflow: 'auto',
      dir: 'ltr',
      textAlign: 'left'
    };
    for (var key in styles) {
      clientOverlay.style[key] = styles[key];
    }
    
    var ansiHTML = __webpack_require__(673);
    var colors = {
      reset: ['transparent', 'transparent'],
      black: '181818',
      red: 'E36049',
      green: 'B3CB74',
      yellow: 'FFD080',
      blue: '7CAFC2',
      magenta: '7FACCA',
      cyan: 'C3C2EF',
      lightgrey: 'EBE7E3',
      darkgrey: '6D7891'
    };
    ansiHTML.setColors(colors);
    
    var Entities = __webpack_require__(674).AllHtmlEntities;
    var entities = new Entities();
    
    exports.showProblems =
    function showProblems(type, lines) {
      clientOverlay.innerHTML = '';
      lines.forEach(function(msg) {
        msg = ansiHTML(entities.encode(msg));
        var div = document.createElement('div');
        div.style.marginBottom = '26px';
        div.innerHTML = problemType(type) + ' in ' + msg;
        clientOverlay.appendChild(div);
      });
      if (document.body) {
        document.body.appendChild(clientOverlay);
      }
    };
    
    exports.clear =
    function clear() {
      if (document.body && clientOverlay.parentNode) {
        document.body.removeChild(clientOverlay);
      }
    };
    
    var problemColors = {
      errors: colors.red,
      warnings: colors.yellow
    };
    
    function problemType (type) {
      var color = problemColors[type] || colors.red;
      return (
        '<span style="background-color:#' + color + '; color:#fff; padding:2px 4px; border-radius: 2px">' +
          type.slice(0, -1).toUpperCase() +
        '</span>'
      );
    }


/***/ },
/* 673 */
/***/ function(module, exports) {

    'use strict'
    
    module.exports = ansiHTML
    
    // Reference to https://github.com/sindresorhus/ansi-regex
    var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/
    
    var _defColors = {
      reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]
      black: '000',
      red: 'ff0000',
      green: '209805',
      yellow: 'e8bf03',
      blue: '0000ff',
      magenta: 'ff00ff',
      cyan: '00ffee',
      lightgrey: 'f0f0f0',
      darkgrey: '888'
    }
    var _styles = {
      30: 'black',
      31: 'red',
      32: 'green',
      33: 'yellow',
      34: 'blue',
      35: 'magenta',
      36: 'cyan',
      37: 'lightgrey'
    }
    var _openTags = {
      '1': 'font-weight:bold', // bold
      '2': 'opacity:0.5', // dim
      '3': '<i>', // italic
      '4': '<u>', // underscore
      '8': 'display:none', // hidden
      '9': '<del>' // delete
    }
    var _closeTags = {
      '23': '</i>', // reset italic
      '24': '</u>', // reset underscore
      '29': '</del>' // reset delete
    }
    
    ;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {
      _closeTags[n] = '</span>'
    })
    
    /**
     * Converts text with ANSI color codes to HTML markup.
     * @param {String} text
     * @returns {*}
     */
    function ansiHTML (text) {
      // Returns the text if the string has no ANSI escape code.
      if (!_regANSI.test(text)) {
        return text
      }
    
      // Cache opened sequence.
      var ansiCodes = []
      // Replace with markup.
      var ret = text.replace(/\033\[(\d+)*m/g, function (match, seq) {
        var ot = _openTags[seq]
        if (ot) {
          // If current sequence has been opened, close it.
          if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast
            ansiCodes.pop()
            return '</span>'
          }
          // Open tag.
          ansiCodes.push(seq)
          return ot[0] === '<' ? ot : '<span style="' + ot + ';">'
        }
    
        var ct = _closeTags[seq]
        if (ct) {
          // Pop sequence
          ansiCodes.pop()
          return ct
        }
        return ''
      })
    
      // Make sure tags are closed.
      var l = ansiCodes.length
      ;(l > 0) && (ret += Array(l + 1).join('</span>'))
    
      return ret
    }
    
    /**
     * Customize colors.
     * @param {Object} colors reference to _defColors
     */
    ansiHTML.setColors = function (colors) {
      if (typeof colors !== 'object') {
        throw new Error('`colors` parameter must be an Object.')
      }
    
      var _finalColors = {}
      for (var key in _defColors) {
        var hex = colors.hasOwnProperty(key) ? colors[key] : null
        if (!hex) {
          _finalColors[key] = _defColors[key]
          continue
        }
        if ('reset' === key) {
          if (typeof hex === 'string') {
            hex = [hex]
          }
          if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {
            return typeof h !== 'string'
          })) {
            throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')
          }
          var defHexColor = _defColors[key]
          if (!hex[0]) {
            hex[0] = defHexColor[0]
          }
          if (hex.length === 1 || !hex[1]) {
            hex = [hex[0]]
            hex.push(defHexColor[1])
          }
    
          hex = hex.slice(0, 2)
        } else if (typeof hex !== 'string') {
          throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')
        }
        _finalColors[key] = hex
      }
      _setTags(_finalColors)
    }
    
    /**
     * Reset colors.
     */
    ansiHTML.reset = function () {
      _setTags(_defColors)
    }
    
    /**
     * Expose tags, including open and close.
     * @type {Object}
     */
    ansiHTML.tags = {}
    
    if (Object.defineProperty) {
      Object.defineProperty(ansiHTML.tags, 'open', {
        get: function () { return _openTags }
      })
      Object.defineProperty(ansiHTML.tags, 'close', {
        get: function () { return _closeTags }
      })
    } else {
      ansiHTML.tags.open = _openTags
      ansiHTML.tags.close = _closeTags
    }
    
    function _setTags (colors) {
      // reset all
      _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]
      // inverse
      _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]
      // dark grey
      _openTags['90'] = 'color:#' + colors.darkgrey
    
      for (var code in _styles) {
        var color = _styles[code]
        var oriColor = colors[color] || '000'
        _openTags[code] = 'color:#' + oriColor
        code = parseInt(code)
        _openTags[(code + 10).toString()] = 'background:#' + oriColor
      }
    }
    
    ansiHTML.reset()


/***/ },
/* 674 */
/***/ function(module, exports, __webpack_require__) {

    module.exports = {
      XmlEntities: __webpack_require__(675),
      Html4Entities: __webpack_require__(676),
      Html5Entities: __webpack_require__(677),
      AllHtmlEntities: __webpack_require__(677)
    };


/***/ },
/* 675 */
/***/ function(module, exports) {

    var ALPHA_INDEX = {
        '&lt': '<',
        '&gt': '>',
        '&quot': '"',
        '&apos': '\'',
        '&amp': '&',
        '&lt;': '<',
        '&gt;': '>',
        '&quot;': '"',
        '&apos;': '\'',
        '&amp;': '&'
    };
    
    var CHAR_INDEX = {
        60: 'lt',
        62: 'gt',
        34: 'quot',
        39: 'apos',
        38: 'amp'
    };
    
    var CHAR_S_INDEX = {
        '<': '&lt;',
        '>': '&gt;',
        '"': '&quot;',
        '\'': '&apos;',
        '&': '&amp;'
    };
    
    /**
     * @constructor
     */
    function XmlEntities() {}
    
    /**
     * @param {String} str
     * @returns {String}
     */
    XmlEntities.prototype.encode = function(str) {
        if (str.length === 0) {
            return '';
        }
        return str.replace(/<|>|"|'|&/g, function(s) {
            return CHAR_S_INDEX[s];
        });
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
     XmlEntities.encode = function(str) {
        return new XmlEntities().encode(str);
     };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    XmlEntities.prototype.decode = function(str) {
        if (str.length === 0) {
            return '';
        }
        return str.replace(/&#?[0-9a-zA-Z]+;?/g, function(s) {
            if (s.charAt(1) === '#') {
                var code = s.charAt(2).toLowerCase() === 'x' ?
                    parseInt(s.substr(3), 16) :
                    parseInt(s.substr(2));
    
                if (isNaN(code) || code < -32768 || code > 65535) {
                    return '';
                }
                return String.fromCharCode(code);
            }
            return ALPHA_INDEX[s] || s;
        });
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
     XmlEntities.decode = function(str) {
        return new XmlEntities().decode(str);
     };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    XmlEntities.prototype.encodeNonUTF = function(str) {
        var strLength = str.length;
        if (strLength === 0) {
            return '';
        }
        var result = '';
        var i = 0;
        while (i < strLength) {
            var c = str.charCodeAt(i);
            var alpha = CHAR_INDEX[c];
            if (alpha) {
                result += "&" + alpha + ";";
                i++;
                continue;
            }
            if (c < 32 || c > 126) {
                result += '&#' + c + ';';
            } else {
                result += str.charAt(i);
            }
            i++;
        }
        return result;
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
     XmlEntities.encodeNonUTF = function(str) {
        return new XmlEntities().encodeNonUTF(str);
     };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    XmlEntities.prototype.encodeNonASCII = function(str) {
        var strLenght = str.length;
        if (strLenght === 0) {
            return '';
        }
        var result = '';
        var i = 0;
        while (i < strLenght) {
            var c = str.charCodeAt(i);
            if (c <= 255) {
                result += str[i++];
                continue;
            }
            result += '&#' + c + ';';
            i++;
        }
        return result;
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
     XmlEntities.encodeNonASCII = function(str) {
        return new XmlEntities().encodeNonASCII(str);
     };
    
    module.exports = XmlEntities;


/***/ },
/* 676 */
/***/ function(module, exports) {

    var HTML_ALPHA = ['apos', 'nbsp', 'iexcl', 'cent', 'pound', 'curren', 'yen', 'brvbar', 'sect', 'uml', 'copy', 'ordf', 'laquo', 'not', 'shy', 'reg', 'macr', 'deg', 'plusmn', 'sup2', 'sup3', 'acute', 'micro', 'para', 'middot', 'cedil', 'sup1', 'ordm', 'raquo', 'frac14', 'frac12', 'frac34', 'iquest', 'Agrave', 'Aacute', 'Acirc', 'Atilde', 'Auml', 'Aring', 'Aelig', 'Ccedil', 'Egrave', 'Eacute', 'Ecirc', 'Euml', 'Igrave', 'Iacute', 'Icirc', 'Iuml', 'ETH', 'Ntilde', 'Ograve', 'Oacute', 'Ocirc', 'Otilde', 'Ouml', 'times', 'Oslash', 'Ugrave', 'Uacute', 'Ucirc', 'Uuml', 'Yacute', 'THORN', 'szlig', 'agrave', 'aacute', 'acirc', 'atilde', 'auml', 'aring', 'aelig', 'ccedil', 'egrave', 'eacute', 'ecirc', 'euml', 'igrave', 'iacute', 'icirc', 'iuml', 'eth', 'ntilde', 'ograve', 'oacute', 'ocirc', 'otilde', 'ouml', 'divide', 'Oslash', 'ugrave', 'uacute', 'ucirc', 'uuml', 'yacute', 'thorn', 'yuml', 'quot', 'amp', 'lt', 'gt', 'oelig', 'oelig', 'scaron', 'scaron', 'yuml', 'circ', 'tilde', 'ensp', 'emsp', 'thinsp', 'zwnj', 'zwj', 'lrm', 'rlm', 'ndash', 'mdash', 'lsquo', 'rsquo', 'sbquo', 'ldquo', 'rdquo', 'bdquo', 'dagger', 'dagger', 'permil', 'lsaquo', 'rsaquo', 'euro', 'fnof', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lambda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigma', 'tau', 'upsilon', 'phi', 'chi', 'psi', 'omega', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lambda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigmaf', 'sigma', 'tau', 'upsilon', 'phi', 'chi', 'psi', 'omega', 'thetasym', 'upsih', 'piv', 'bull', 'hellip', 'prime', 'prime', 'oline', 'frasl', 'weierp', 'image', 'real', 'trade', 'alefsym', 'larr', 'uarr', 'rarr', 'darr', 'harr', 'crarr', 'larr', 'uarr', 'rarr', 'darr', 'harr', 'forall', 'part', 'exist', 'empty', 'nabla', 'isin', 'notin', 'ni', 'prod', 'sum', 'minus', 'lowast', 'radic', 'prop', 'infin', 'ang', 'and', 'or', 'cap', 'cup', 'int', 'there4', 'sim', 'cong', 'asymp', 'ne', 'equiv', 'le', 'ge', 'sub', 'sup', 'nsub', 'sube', 'supe', 'oplus', 'otimes', 'perp', 'sdot', 'lceil', 'rceil', 'lfloor', 'rfloor', 'lang', 'rang', 'loz', 'spades', 'clubs', 'hearts', 'diams'];
    var HTML_CODES = [39, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 34, 38, 60, 62, 338, 339, 352, 353, 376, 710, 732, 8194, 8195, 8201, 8204, 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, 8240, 8249, 8250, 8364, 402, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8226, 8230, 8242, 8243, 8254, 8260, 8472, 8465, 8476, 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, 8969, 8970, 8971, 9001, 9002, 9674, 9824, 9827, 9829, 9830];
    
    var alphaIndex = {};
    var numIndex = {};
    
    var i = 0;
    var length = HTML_ALPHA.length;
    while (i < length) {
        var a = HTML_ALPHA[i];
        var c = HTML_CODES[i];
        alphaIndex[a] = String.fromCharCode(c);
        numIndex[c] = a;
        i++;
    }
    
    /**
     * @constructor
     */
    function Html4Entities() {}
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html4Entities.prototype.decode = function(str) {
        if (str.length === 0) {
            return '';
        }
        return str.replace(/&(#?[\w\d]+);?/g, function(s, entity) {
            var chr;
            if (entity.charAt(0) === "#") {
                var code = entity.charAt(1).toLowerCase() === 'x' ?
                    parseInt(entity.substr(2), 16) :
                    parseInt(entity.substr(1));
    
                if (!(isNaN(code) || code < -32768 || code > 65535)) {
                    chr = String.fromCharCode(code);
                }
            } else {
                chr = alphaIndex[entity];
            }
            return chr || s;
        });
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html4Entities.decode = function(str) {
        return new Html4Entities().decode(str);
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html4Entities.prototype.encode = function(str) {
        var strLength = str.length;
        if (strLength === 0) {
            return '';
        }
        var result = '';
        var i = 0;
        while (i < strLength) {
            var alpha = numIndex[str.charCodeAt(i)];
            result += alpha ? "&" + alpha + ";" : str.charAt(i);
            i++;
        }
        return result;
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html4Entities.encode = function(str) {
        return new Html4Entities().encode(str);
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html4Entities.prototype.encodeNonUTF = function(str) {
        var strLength = str.length;
        if (strLength === 0) {
            return '';
        }
        var result = '';
        var i = 0;
        while (i < strLength) {
            var cc = str.charCodeAt(i);
            var alpha = numIndex[cc];
            if (alpha) {
                result += "&" + alpha + ";";
            } else if (cc < 32 || cc > 126) {
                result += "&#" + cc + ";";
            } else {
                result += str.charAt(i);
            }
            i++;
        }
        return result;
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html4Entities.encodeNonUTF = function(str) {
        return new Html4Entities().encodeNonUTF(str);
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html4Entities.prototype.encodeNonASCII = function(str) {
        var strLength = str.length;
        if (strLength === 0) {
            return '';
        }
        var result = '';
        var i = 0;
        while (i < strLength) {
            var c = str.charCodeAt(i);
            if (c <= 255) {
                result += str[i++];
                continue;
            }
            result += '&#' + c + ';';
            i++;
        }
        return result;
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html4Entities.encodeNonASCII = function(str) {
        return new Html4Entities().encodeNonASCII(str);
    };
    
    module.exports = Html4Entities;


/***/ },
/* 677 */
/***/ function(module, exports) {

    var ENTITIES = [['Aacute', [193]], ['aacute', [225]], ['Abreve', [258]], ['abreve', [259]], ['ac', [8766]], ['acd', [8767]], ['acE', [8766, 819]], ['Acirc', [194]], ['acirc', [226]], ['acute', [180]], ['Acy', [1040]], ['acy', [1072]], ['AElig', [198]], ['aelig', [230]], ['af', [8289]], ['Afr', [120068]], ['afr', [120094]], ['Agrave', [192]], ['agrave', [224]], ['alefsym', [8501]], ['aleph', [8501]], ['Alpha', [913]], ['alpha', [945]], ['Amacr', [256]], ['amacr', [257]], ['amalg', [10815]], ['amp', [38]], ['AMP', [38]], ['andand', [10837]], ['And', [10835]], ['and', [8743]], ['andd', [10844]], ['andslope', [10840]], ['andv', [10842]], ['ang', [8736]], ['ange', [10660]], ['angle', [8736]], ['angmsdaa', [10664]], ['angmsdab', [10665]], ['angmsdac', [10666]], ['angmsdad', [10667]], ['angmsdae', [10668]], ['angmsdaf', [10669]], ['angmsdag', [10670]], ['angmsdah', [10671]], ['angmsd', [8737]], ['angrt', [8735]], ['angrtvb', [8894]], ['angrtvbd', [10653]], ['angsph', [8738]], ['angst', [197]], ['angzarr', [9084]], ['Aogon', [260]], ['aogon', [261]], ['Aopf', [120120]], ['aopf', [120146]], ['apacir', [10863]], ['ap', [8776]], ['apE', [10864]], ['ape', [8778]], ['apid', [8779]], ['apos', [39]], ['ApplyFunction', [8289]], ['approx', [8776]], ['approxeq', [8778]], ['Aring', [197]], ['aring', [229]], ['Ascr', [119964]], ['ascr', [119990]], ['Assign', [8788]], ['ast', [42]], ['asymp', [8776]], ['asympeq', [8781]], ['Atilde', [195]], ['atilde', [227]], ['Auml', [196]], ['auml', [228]], ['awconint', [8755]], ['awint', [10769]], ['backcong', [8780]], ['backepsilon', [1014]], ['backprime', [8245]], ['backsim', [8765]], ['backsimeq', [8909]], ['Backslash', [8726]], ['Barv', [10983]], ['barvee', [8893]], ['barwed', [8965]], ['Barwed', [8966]], ['barwedge', [8965]], ['bbrk', [9141]], ['bbrktbrk', [9142]], ['bcong', [8780]], ['Bcy', [1041]], ['bcy', [1073]], ['bdquo', [8222]], ['becaus', [8757]], ['because', [8757]], ['Because', [8757]], ['bemptyv', [10672]], ['bepsi', [1014]], ['bernou', [8492]], ['Bernoullis', [8492]], ['Beta', [914]], ['beta', [946]], ['beth', [8502]], ['between', [8812]], ['Bfr', [120069]], ['bfr', [120095]], ['bigcap', [8898]], ['bigcirc', [9711]], ['bigcup', [8899]], ['bigodot', [10752]], ['bigoplus', [10753]], ['bigotimes', [10754]], ['bigsqcup', [10758]], ['bigstar', [9733]], ['bigtriangledown', [9661]], ['bigtriangleup', [9651]], ['biguplus', [10756]], ['bigvee', [8897]], ['bigwedge', [8896]], ['bkarow', [10509]], ['blacklozenge', [10731]], ['blacksquare', [9642]], ['blacktriangle', [9652]], ['blacktriangledown', [9662]], ['blacktriangleleft', [9666]], ['blacktriangleright', [9656]], ['blank', [9251]], ['blk12', [9618]], ['blk14', [9617]], ['blk34', [9619]], ['block', [9608]], ['bne', [61, 8421]], ['bnequiv', [8801, 8421]], ['bNot', [10989]], ['bnot', [8976]], ['Bopf', [120121]], ['bopf', [120147]], ['bot', [8869]], ['bottom', [8869]], ['bowtie', [8904]], ['boxbox', [10697]], ['boxdl', [9488]], ['boxdL', [9557]], ['boxDl', [9558]], ['boxDL', [9559]], ['boxdr', [9484]], ['boxdR', [9554]], ['boxDr', [9555]], ['boxDR', [9556]], ['boxh', [9472]], ['boxH', [9552]], ['boxhd', [9516]], ['boxHd', [9572]], ['boxhD', [9573]], ['boxHD', [9574]], ['boxhu', [9524]], ['boxHu', [9575]], ['boxhU', [9576]], ['boxHU', [9577]], ['boxminus', [8863]], ['boxplus', [8862]], ['boxtimes', [8864]], ['boxul', [9496]], ['boxuL', [9563]], ['boxUl', [9564]], ['boxUL', [9565]], ['boxur', [9492]], ['boxuR', [9560]], ['boxUr', [9561]], ['boxUR', [9562]], ['boxv', [9474]], ['boxV', [9553]], ['boxvh', [9532]], ['boxvH', [9578]], ['boxVh', [9579]], ['boxVH', [9580]], ['boxvl', [9508]], ['boxvL', [9569]], ['boxVl', [9570]], ['boxVL', [9571]], ['boxvr', [9500]], ['boxvR', [9566]], ['boxVr', [9567]], ['boxVR', [9568]], ['bprime', [8245]], ['breve', [728]], ['Breve', [728]], ['brvbar', [166]], ['bscr', [119991]], ['Bscr', [8492]], ['bsemi', [8271]], ['bsim', [8765]], ['bsime', [8909]], ['bsolb', [10693]], ['bsol', [92]], ['bsolhsub', [10184]], ['bull', [8226]], ['bullet', [8226]], ['bump', [8782]], ['bumpE', [10926]], ['bumpe', [8783]], ['Bumpeq', [8782]], ['bumpeq', [8783]], ['Cacute', [262]], ['cacute', [263]], ['capand', [10820]], ['capbrcup', [10825]], ['capcap', [10827]], ['cap', [8745]], ['Cap', [8914]], ['capcup', [10823]], ['capdot', [10816]], ['CapitalDifferentialD', [8517]], ['caps', [8745, 65024]], ['caret', [8257]], ['caron', [711]], ['Cayleys', [8493]], ['ccaps', [10829]], ['Ccaron', [268]], ['ccaron', [269]], ['Ccedil', [199]], ['ccedil', [231]], ['Ccirc', [264]], ['ccirc', [265]], ['Cconint', [8752]], ['ccups', [10828]], ['ccupssm', [10832]], ['Cdot', [266]], ['cdot', [267]], ['cedil', [184]], ['Cedilla', [184]], ['cemptyv', [10674]], ['cent', [162]], ['centerdot', [183]], ['CenterDot', [183]], ['cfr', [120096]], ['Cfr', [8493]], ['CHcy', [1063]], ['chcy', [1095]], ['check', [10003]], ['checkmark', [10003]], ['Chi', [935]], ['chi', [967]], ['circ', [710]], ['circeq', [8791]], ['circlearrowleft', [8634]], ['circlearrowright', [8635]], ['circledast', [8859]], ['circledcirc', [8858]], ['circleddash', [8861]], ['CircleDot', [8857]], ['circledR', [174]], ['circledS', [9416]], ['CircleMinus', [8854]], ['CirclePlus', [8853]], ['CircleTimes', [8855]], ['cir', [9675]], ['cirE', [10691]], ['cire', [8791]], ['cirfnint', [10768]], ['cirmid', [10991]], ['cirscir', [10690]], ['ClockwiseContourIntegral', [8754]], ['CloseCurlyDoubleQuote', [8221]], ['CloseCurlyQuote', [8217]], ['clubs', [9827]], ['clubsuit', [9827]], ['colon', [58]], ['Colon', [8759]], ['Colone', [10868]], ['colone', [8788]], ['coloneq', [8788]], ['comma', [44]], ['commat', [64]], ['comp', [8705]], ['compfn', [8728]], ['complement', [8705]], ['complexes', [8450]], ['cong', [8773]], ['congdot', [10861]], ['Congruent', [8801]], ['conint', [8750]], ['Conint', [8751]], ['ContourIntegral', [8750]], ['copf', [120148]], ['Copf', [8450]], ['coprod', [8720]], ['Coproduct', [8720]], ['copy', [169]], ['COPY', [169]], ['copysr', [8471]], ['CounterClockwiseContourIntegral', [8755]], ['crarr', [8629]], ['cross', [10007]], ['Cross', [10799]], ['Cscr', [119966]], ['cscr', [119992]], ['csub', [10959]], ['csube', [10961]], ['csup', [10960]], ['csupe', [10962]], ['ctdot', [8943]], ['cudarrl', [10552]], ['cudarrr', [10549]], ['cuepr', [8926]], ['cuesc', [8927]], ['cularr', [8630]], ['cularrp', [10557]], ['cupbrcap', [10824]], ['cupcap', [10822]], ['CupCap', [8781]], ['cup', [8746]], ['Cup', [8915]], ['cupcup', [10826]], ['cupdot', [8845]], ['cupor', [10821]], ['cups', [8746, 65024]], ['curarr', [8631]], ['curarrm', [10556]], ['curlyeqprec', [8926]], ['curlyeqsucc', [8927]], ['curlyvee', [8910]], ['curlywedge', [8911]], ['curren', [164]], ['curvearrowleft', [8630]], ['curvearrowright', [8631]], ['cuvee', [8910]], ['cuwed', [8911]], ['cwconint', [8754]], ['cwint', [8753]], ['cylcty', [9005]], ['dagger', [8224]], ['Dagger', [8225]], ['daleth', [8504]], ['darr', [8595]], ['Darr', [8609]], ['dArr', [8659]], ['dash', [8208]], ['Dashv', [10980]], ['dashv', [8867]], ['dbkarow', [10511]], ['dblac', [733]], ['Dcaron', [270]], ['dcaron', [271]], ['Dcy', [1044]], ['dcy', [1076]], ['ddagger', [8225]], ['ddarr', [8650]], ['DD', [8517]], ['dd', [8518]], ['DDotrahd', [10513]], ['ddotseq', [10871]], ['deg', [176]], ['Del', [8711]], ['Delta', [916]], ['delta', [948]], ['demptyv', [10673]], ['dfisht', [10623]], ['Dfr', [120071]], ['dfr', [120097]], ['dHar', [10597]], ['dharl', [8643]], ['dharr', [8642]], ['DiacriticalAcute', [180]], ['DiacriticalDot', [729]], ['DiacriticalDoubleAcute', [733]], ['DiacriticalGrave', [96]], ['DiacriticalTilde', [732]], ['diam', [8900]], ['diamond', [8900]], ['Diamond', [8900]], ['diamondsuit', [9830]], ['diams', [9830]], ['die', [168]], ['DifferentialD', [8518]], ['digamma', [989]], ['disin', [8946]], ['div', [247]], ['divide', [247]], ['divideontimes', [8903]], ['divonx', [8903]], ['DJcy', [1026]], ['djcy', [1106]], ['dlcorn', [8990]], ['dlcrop', [8973]], ['dollar', [36]], ['Dopf', [120123]], ['dopf', [120149]], ['Dot', [168]], ['dot', [729]], ['DotDot', [8412]], ['doteq', [8784]], ['doteqdot', [8785]], ['DotEqual', [8784]], ['dotminus', [8760]], ['dotplus', [8724]], ['dotsquare', [8865]], ['doublebarwedge', [8966]], ['DoubleContourIntegral', [8751]], ['DoubleDot', [168]], ['DoubleDownArrow', [8659]], ['DoubleLeftArrow', [8656]], ['DoubleLeftRightArrow', [8660]], ['DoubleLeftTee', [10980]], ['DoubleLongLeftArrow', [10232]], ['DoubleLongLeftRightArrow', [10234]], ['DoubleLongRightArrow', [10233]], ['DoubleRightArrow', [8658]], ['DoubleRightTee', [8872]], ['DoubleUpArrow', [8657]], ['DoubleUpDownArrow', [8661]], ['DoubleVerticalBar', [8741]], ['DownArrowBar', [10515]], ['downarrow', [8595]], ['DownArrow', [8595]], ['Downarrow', [8659]], ['DownArrowUpArrow', [8693]], ['DownBreve', [785]], ['downdownarrows', [8650]], ['downharpoonleft', [8643]], ['downharpoonright', [8642]], ['DownLeftRightVector', [10576]], ['DownLeftTeeVector', [10590]], ['DownLeftVectorBar', [10582]], ['DownLeftVector', [8637]], ['DownRightTeeVector', [10591]], ['DownRightVectorBar', [10583]], ['DownRightVector', [8641]], ['DownTeeArrow', [8615]], ['DownTee', [8868]], ['drbkarow', [10512]], ['drcorn', [8991]], ['drcrop', [8972]], ['Dscr', [119967]], ['dscr', [119993]], ['DScy', [1029]], ['dscy', [1109]], ['dsol', [10742]], ['Dstrok', [272]], ['dstrok', [273]], ['dtdot', [8945]], ['dtri', [9663]], ['dtrif', [9662]], ['duarr', [8693]], ['duhar', [10607]], ['dwangle', [10662]], ['DZcy', [1039]], ['dzcy', [1119]], ['dzigrarr', [10239]], ['Eacute', [201]], ['eacute', [233]], ['easter', [10862]], ['Ecaron', [282]], ['ecaron', [283]], ['Ecirc', [202]], ['ecirc', [234]], ['ecir', [8790]], ['ecolon', [8789]], ['Ecy', [1069]], ['ecy', [1101]], ['eDDot', [10871]], ['Edot', [278]], ['edot', [279]], ['eDot', [8785]], ['ee', [8519]], ['efDot', [8786]], ['Efr', [120072]], ['efr', [120098]], ['eg', [10906]], ['Egrave', [200]], ['egrave', [232]], ['egs', [10902]], ['egsdot', [10904]], ['el', [10905]], ['Element', [8712]], ['elinters', [9191]], ['ell', [8467]], ['els', [10901]], ['elsdot', [10903]], ['Emacr', [274]], ['emacr', [275]], ['empty', [8709]], ['emptyset', [8709]], ['EmptySmallSquare', [9723]], ['emptyv', [8709]], ['EmptyVerySmallSquare', [9643]], ['emsp13', [8196]], ['emsp14', [8197]], ['emsp', [8195]], ['ENG', [330]], ['eng', [331]], ['ensp', [8194]], ['Eogon', [280]], ['eogon', [281]], ['Eopf', [120124]], ['eopf', [120150]], ['epar', [8917]], ['eparsl', [10723]], ['eplus', [10865]], ['epsi', [949]], ['Epsilon', [917]], ['epsilon', [949]], ['epsiv', [1013]], ['eqcirc', [8790]], ['eqcolon', [8789]], ['eqsim', [8770]], ['eqslantgtr', [10902]], ['eqslantless', [10901]], ['Equal', [10869]], ['equals', [61]], ['EqualTilde', [8770]], ['equest', [8799]], ['Equilibrium', [8652]], ['equiv', [8801]], ['equivDD', [10872]], ['eqvparsl', [10725]], ['erarr', [10609]], ['erDot', [8787]], ['escr', [8495]], ['Escr', [8496]], ['esdot', [8784]], ['Esim', [10867]], ['esim', [8770]], ['Eta', [919]], ['eta', [951]], ['ETH', [208]], ['eth', [240]], ['Euml', [203]], ['euml', [235]], ['euro', [8364]], ['excl', [33]], ['exist', [8707]], ['Exists', [8707]], ['expectation', [8496]], ['exponentiale', [8519]], ['ExponentialE', [8519]], ['fallingdotseq', [8786]], ['Fcy', [1060]], ['fcy', [1092]], ['female', [9792]], ['ffilig', [64259]], ['fflig', [64256]], ['ffllig', [64260]], ['Ffr', [120073]], ['ffr', [120099]], ['filig', [64257]], ['FilledSmallSquare', [9724]], ['FilledVerySmallSquare', [9642]], ['fjlig', [102, 106]], ['flat', [9837]], ['fllig', [64258]], ['fltns', [9649]], ['fnof', [402]], ['Fopf', [120125]], ['fopf', [120151]], ['forall', [8704]], ['ForAll', [8704]], ['fork', [8916]], ['forkv', [10969]], ['Fouriertrf', [8497]], ['fpartint', [10765]], ['frac12', [189]], ['frac13', [8531]], ['frac14', [188]], ['frac15', [8533]], ['frac16', [8537]], ['frac18', [8539]], ['frac23', [8532]], ['frac25', [8534]], ['frac34', [190]], ['frac35', [8535]], ['frac38', [8540]], ['frac45', [8536]], ['frac56', [8538]], ['frac58', [8541]], ['frac78', [8542]], ['frasl', [8260]], ['frown', [8994]], ['fscr', [119995]], ['Fscr', [8497]], ['gacute', [501]], ['Gamma', [915]], ['gamma', [947]], ['Gammad', [988]], ['gammad', [989]], ['gap', [10886]], ['Gbreve', [286]], ['gbreve', [287]], ['Gcedil', [290]], ['Gcirc', [284]], ['gcirc', [285]], ['Gcy', [1043]], ['gcy', [1075]], ['Gdot', [288]], ['gdot', [289]], ['ge', [8805]], ['gE', [8807]], ['gEl', [10892]], ['gel', [8923]], ['geq', [8805]], ['geqq', [8807]], ['geqslant', [10878]], ['gescc', [10921]], ['ges', [10878]], ['gesdot', [10880]], ['gesdoto', [10882]], ['gesdotol', [10884]], ['gesl', [8923, 65024]], ['gesles', [10900]], ['Gfr', [120074]], ['gfr', [120100]], ['gg', [8811]], ['Gg', [8921]], ['ggg', [8921]], ['gimel', [8503]], ['GJcy', [1027]], ['gjcy', [1107]], ['gla', [10917]], ['gl', [8823]], ['glE', [10898]], ['glj', [10916]], ['gnap', [10890]], ['gnapprox', [10890]], ['gne', [10888]], ['gnE', [8809]], ['gneq', [10888]], ['gneqq', [8809]], ['gnsim', [8935]], ['Gopf', [120126]], ['gopf', [120152]], ['grave', [96]], ['GreaterEqual', [8805]], ['GreaterEqualLess', [8923]], ['GreaterFullEqual', [8807]], ['GreaterGreater', [10914]], ['GreaterLess', [8823]], ['GreaterSlantEqual', [10878]], ['GreaterTilde', [8819]], ['Gscr', [119970]], ['gscr', [8458]], ['gsim', [8819]], ['gsime', [10894]], ['gsiml', [10896]], ['gtcc', [10919]], ['gtcir', [10874]], ['gt', [62]], ['GT', [62]], ['Gt', [8811]], ['gtdot', [8919]], ['gtlPar', [10645]], ['gtquest', [10876]], ['gtrapprox', [10886]], ['gtrarr', [10616]], ['gtrdot', [8919]], ['gtreqless', [8923]], ['gtreqqless', [10892]], ['gtrless', [8823]], ['gtrsim', [8819]], ['gvertneqq', [8809, 65024]], ['gvnE', [8809, 65024]], ['Hacek', [711]], ['hairsp', [8202]], ['half', [189]], ['hamilt', [8459]], ['HARDcy', [1066]], ['hardcy', [1098]], ['harrcir', [10568]], ['harr', [8596]], ['hArr', [8660]], ['harrw', [8621]], ['Hat', [94]], ['hbar', [8463]], ['Hcirc', [292]], ['hcirc', [293]], ['hearts', [9829]], ['heartsuit', [9829]], ['hellip', [8230]], ['hercon', [8889]], ['hfr', [120101]], ['Hfr', [8460]], ['HilbertSpace', [8459]], ['hksearow', [10533]], ['hkswarow', [10534]], ['hoarr', [8703]], ['homtht', [8763]], ['hookleftarrow', [8617]], ['hookrightarrow', [8618]], ['hopf', [120153]], ['Hopf', [8461]], ['horbar', [8213]], ['HorizontalLine', [9472]], ['hscr', [119997]], ['Hscr', [8459]], ['hslash', [8463]], ['Hstrok', [294]], ['hstrok', [295]], ['HumpDownHump', [8782]], ['HumpEqual', [8783]], ['hybull', [8259]], ['hyphen', [8208]], ['Iacute', [205]], ['iacute', [237]], ['ic', [8291]], ['Icirc', [206]], ['icirc', [238]], ['Icy', [1048]], ['icy', [1080]], ['Idot', [304]], ['IEcy', [1045]], ['iecy', [1077]], ['iexcl', [161]], ['iff', [8660]], ['ifr', [120102]], ['Ifr', [8465]], ['Igrave', [204]], ['igrave', [236]], ['ii', [8520]], ['iiiint', [10764]], ['iiint', [8749]], ['iinfin', [10716]], ['iiota', [8489]], ['IJlig', [306]], ['ijlig', [307]], ['Imacr', [298]], ['imacr', [299]], ['image', [8465]], ['ImaginaryI', [8520]], ['imagline', [8464]], ['imagpart', [8465]], ['imath', [305]], ['Im', [8465]], ['imof', [8887]], ['imped', [437]], ['Implies', [8658]], ['incare', [8453]], ['in', [8712]], ['infin', [8734]], ['infintie', [10717]], ['inodot', [305]], ['intcal', [8890]], ['int', [8747]], ['Int', [8748]], ['integers', [8484]], ['Integral', [8747]], ['intercal', [8890]], ['Intersection', [8898]], ['intlarhk', [10775]], ['intprod', [10812]], ['InvisibleComma', [8291]], ['InvisibleTimes', [8290]], ['IOcy', [1025]], ['iocy', [1105]], ['Iogon', [302]], ['iogon', [303]], ['Iopf', [120128]], ['iopf', [120154]], ['Iota', [921]], ['iota', [953]], ['iprod', [10812]], ['iquest', [191]], ['iscr', [119998]], ['Iscr', [8464]], ['isin', [8712]], ['isindot', [8949]], ['isinE', [8953]], ['isins', [8948]], ['isinsv', [8947]], ['isinv', [8712]], ['it', [8290]], ['Itilde', [296]], ['itilde', [297]], ['Iukcy', [1030]], ['iukcy', [1110]], ['Iuml', [207]], ['iuml', [239]], ['Jcirc', [308]], ['jcirc', [309]], ['Jcy', [1049]], ['jcy', [1081]], ['Jfr', [120077]], ['jfr', [120103]], ['jmath', [567]], ['Jopf', [120129]], ['jopf', [120155]], ['Jscr', [119973]], ['jscr', [119999]], ['Jsercy', [1032]], ['jsercy', [1112]], ['Jukcy', [1028]], ['jukcy', [1108]], ['Kappa', [922]], ['kappa', [954]], ['kappav', [1008]], ['Kcedil', [310]], ['kcedil', [311]], ['Kcy', [1050]], ['kcy', [1082]], ['Kfr', [120078]], ['kfr', [120104]], ['kgreen', [312]], ['KHcy', [1061]], ['khcy', [1093]], ['KJcy', [1036]], ['kjcy', [1116]], ['Kopf', [120130]], ['kopf', [120156]], ['Kscr', [119974]], ['kscr', [120000]], ['lAarr', [8666]], ['Lacute', [313]], ['lacute', [314]], ['laemptyv', [10676]], ['lagran', [8466]], ['Lambda', [923]], ['lambda', [955]], ['lang', [10216]], ['Lang', [10218]], ['langd', [10641]], ['langle', [10216]], ['lap', [10885]], ['Laplacetrf', [8466]], ['laquo', [171]], ['larrb', [8676]], ['larrbfs', [10527]], ['larr', [8592]], ['Larr', [8606]], ['lArr', [8656]], ['larrfs', [10525]], ['larrhk', [8617]], ['larrlp', [8619]], ['larrpl', [10553]], ['larrsim', [10611]], ['larrtl', [8610]], ['latail', [10521]], ['lAtail', [10523]], ['lat', [10923]], ['late', [10925]], ['lates', [10925, 65024]], ['lbarr', [10508]], ['lBarr', [10510]], ['lbbrk', [10098]], ['lbrace', [123]], ['lbrack', [91]], ['lbrke', [10635]], ['lbrksld', [10639]], ['lbrkslu', [10637]], ['Lcaron', [317]], ['lcaron', [318]], ['Lcedil', [315]], ['lcedil', [316]], ['lceil', [8968]], ['lcub', [123]], ['Lcy', [1051]], ['lcy', [1083]], ['ldca', [10550]], ['ldquo', [8220]], ['ldquor', [8222]], ['ldrdhar', [10599]], ['ldrushar', [10571]], ['ldsh', [8626]], ['le', [8804]], ['lE', [8806]], ['LeftAngleBracket', [10216]], ['LeftArrowBar', [8676]], ['leftarrow', [8592]], ['LeftArrow', [8592]], ['Leftarrow', [8656]], ['LeftArrowRightArrow', [8646]], ['leftarrowtail', [8610]], ['LeftCeiling', [8968]], ['LeftDoubleBracket', [10214]], ['LeftDownTeeVector', [10593]], ['LeftDownVectorBar', [10585]], ['LeftDownVector', [8643]], ['LeftFloor', [8970]], ['leftharpoondown', [8637]], ['leftharpoonup', [8636]], ['leftleftarrows', [8647]], ['leftrightarrow', [8596]], ['LeftRightArrow', [8596]], ['Leftrightarrow', [8660]], ['leftrightarrows', [8646]], ['leftrightharpoons', [8651]], ['leftrightsquigarrow', [8621]], ['LeftRightVector', [10574]], ['LeftTeeArrow', [8612]], ['LeftTee', [8867]], ['LeftTeeVector', [10586]], ['leftthreetimes', [8907]], ['LeftTriangleBar', [10703]], ['LeftTriangle', [8882]], ['LeftTriangleEqual', [8884]], ['LeftUpDownVector', [10577]], ['LeftUpTeeVector', [10592]], ['LeftUpVectorBar', [10584]], ['LeftUpVector', [8639]], ['LeftVectorBar', [10578]], ['LeftVector', [8636]], ['lEg', [10891]], ['leg', [8922]], ['leq', [8804]], ['leqq', [8806]], ['leqslant', [10877]], ['lescc', [10920]], ['les', [10877]], ['lesdot', [10879]], ['lesdoto', [10881]], ['lesdotor', [10883]], ['lesg', [8922, 65024]], ['lesges', [10899]], ['lessapprox', [10885]], ['lessdot', [8918]], ['lesseqgtr', [8922]], ['lesseqqgtr', [10891]], ['LessEqualGreater', [8922]], ['LessFullEqual', [8806]], ['LessGreater', [8822]], ['lessgtr', [8822]], ['LessLess', [10913]], ['lesssim', [8818]], ['LessSlantEqual', [10877]], ['LessTilde', [8818]], ['lfisht', [10620]], ['lfloor', [8970]], ['Lfr', [120079]], ['lfr', [120105]], ['lg', [8822]], ['lgE', [10897]], ['lHar', [10594]], ['lhard', [8637]], ['lharu', [8636]], ['lharul', [10602]], ['lhblk', [9604]], ['LJcy', [1033]], ['ljcy', [1113]], ['llarr', [8647]], ['ll', [8810]], ['Ll', [8920]], ['llcorner', [8990]], ['Lleftarrow', [8666]], ['llhard', [10603]], ['lltri', [9722]], ['Lmidot', [319]], ['lmidot', [320]], ['lmoustache', [9136]], ['lmoust', [9136]], ['lnap', [10889]], ['lnapprox', [10889]], ['lne', [10887]], ['lnE', [8808]], ['lneq', [10887]], ['lneqq', [8808]], ['lnsim', [8934]], ['loang', [10220]], ['loarr', [8701]], ['lobrk', [10214]], ['longleftarrow', [10229]], ['LongLeftArrow', [10229]], ['Longleftarrow', [10232]], ['longleftrightarrow', [10231]], ['LongLeftRightArrow', [10231]], ['Longleftrightarrow', [10234]], ['longmapsto', [10236]], ['longrightarrow', [10230]], ['LongRightArrow', [10230]], ['Longrightarrow', [10233]], ['looparrowleft', [8619]], ['looparrowright', [8620]], ['lopar', [10629]], ['Lopf', [120131]], ['lopf', [120157]], ['loplus', [10797]], ['lotimes', [10804]], ['lowast', [8727]], ['lowbar', [95]], ['LowerLeftArrow', [8601]], ['LowerRightArrow', [8600]], ['loz', [9674]], ['lozenge', [9674]], ['lozf', [10731]], ['lpar', [40]], ['lparlt', [10643]], ['lrarr', [8646]], ['lrcorner', [8991]], ['lrhar', [8651]], ['lrhard', [10605]], ['lrm', [8206]], ['lrtri', [8895]], ['lsaquo', [8249]], ['lscr', [120001]], ['Lscr', [8466]], ['lsh', [8624]], ['Lsh', [8624]], ['lsim', [8818]], ['lsime', [10893]], ['lsimg', [10895]], ['lsqb', [91]], ['lsquo', [8216]], ['lsquor', [8218]], ['Lstrok', [321]], ['lstrok', [322]], ['ltcc', [10918]], ['ltcir', [10873]], ['lt', [60]], ['LT', [60]], ['Lt', [8810]], ['ltdot', [8918]], ['lthree', [8907]], ['ltimes', [8905]], ['ltlarr', [10614]], ['ltquest', [10875]], ['ltri', [9667]], ['ltrie', [8884]], ['ltrif', [9666]], ['ltrPar', [10646]], ['lurdshar', [10570]], ['luruhar', [10598]], ['lvertneqq', [8808, 65024]], ['lvnE', [8808, 65024]], ['macr', [175]], ['male', [9794]], ['malt', [10016]], ['maltese', [10016]], ['Map', [10501]], ['map', [8614]], ['mapsto', [8614]], ['mapstodown', [8615]], ['mapstoleft', [8612]], ['mapstoup', [8613]], ['marker', [9646]], ['mcomma', [10793]], ['Mcy', [1052]], ['mcy', [1084]], ['mdash', [8212]], ['mDDot', [8762]], ['measuredangle', [8737]], ['MediumSpace', [8287]], ['Mellintrf', [8499]], ['Mfr', [120080]], ['mfr', [120106]], ['mho', [8487]], ['micro', [181]], ['midast', [42]], ['midcir', [10992]], ['mid', [8739]], ['middot', [183]], ['minusb', [8863]], ['minus', [8722]], ['minusd', [8760]], ['minusdu', [10794]], ['MinusPlus', [8723]], ['mlcp', [10971]], ['mldr', [8230]], ['mnplus', [8723]], ['models', [8871]], ['Mopf', [120132]], ['mopf', [120158]], ['mp', [8723]], ['mscr', [120002]], ['Mscr', [8499]], ['mstpos', [8766]], ['Mu', [924]], ['mu', [956]], ['multimap', [8888]], ['mumap', [8888]], ['nabla', [8711]], ['Nacute', [323]], ['nacute', [324]], ['nang', [8736, 8402]], ['nap', [8777]], ['napE', [10864, 824]], ['napid', [8779, 824]], ['napos', [329]], ['napprox', [8777]], ['natural', [9838]], ['naturals', [8469]], ['natur', [9838]], ['nbsp', [160]], ['nbump', [8782, 824]], ['nbumpe', [8783, 824]], ['ncap', [10819]], ['Ncaron', [327]], ['ncaron', [328]], ['Ncedil', [325]], ['ncedil', [326]], ['ncong', [8775]], ['ncongdot', [10861, 824]], ['ncup', [10818]], ['Ncy', [1053]], ['ncy', [1085]], ['ndash', [8211]], ['nearhk', [10532]], ['nearr', [8599]], ['neArr', [8663]], ['nearrow', [8599]], ['ne', [8800]], ['nedot', [8784, 824]], ['NegativeMediumSpace', [8203]], ['NegativeThickSpace', [8203]], ['NegativeThinSpace', [8203]], ['NegativeVeryThinSpace', [8203]], ['nequiv', [8802]], ['nesear', [10536]], ['nesim', [8770, 824]], ['NestedGreaterGreater', [8811]], ['NestedLessLess', [8810]], ['nexist', [8708]], ['nexists', [8708]], ['Nfr', [120081]], ['nfr', [120107]], ['ngE', [8807, 824]], ['nge', [8817]], ['ngeq', [8817]], ['ngeqq', [8807, 824]], ['ngeqslant', [10878, 824]], ['nges', [10878, 824]], ['nGg', [8921, 824]], ['ngsim', [8821]], ['nGt', [8811, 8402]], ['ngt', [8815]], ['ngtr', [8815]], ['nGtv', [8811, 824]], ['nharr', [8622]], ['nhArr', [8654]], ['nhpar', [10994]], ['ni', [8715]], ['nis', [8956]], ['nisd', [8954]], ['niv', [8715]], ['NJcy', [1034]], ['njcy', [1114]], ['nlarr', [8602]], ['nlArr', [8653]], ['nldr', [8229]], ['nlE', [8806, 824]], ['nle', [8816]], ['nleftarrow', [8602]], ['nLeftarrow', [8653]], ['nleftrightarrow', [8622]], ['nLeftrightarrow', [8654]], ['nleq', [8816]], ['nleqq', [8806, 824]], ['nleqslant', [10877, 824]], ['nles', [10877, 824]], ['nless', [8814]], ['nLl', [8920, 824]], ['nlsim', [8820]], ['nLt', [8810, 8402]], ['nlt', [8814]], ['nltri', [8938]], ['nltrie', [8940]], ['nLtv', [8810, 824]], ['nmid', [8740]], ['NoBreak', [8288]], ['NonBreakingSpace', [160]], ['nopf', [120159]], ['Nopf', [8469]], ['Not', [10988]], ['not', [172]], ['NotCongruent', [8802]], ['NotCupCap', [8813]], ['NotDoubleVerticalBar', [8742]], ['NotElement', [8713]], ['NotEqual', [8800]], ['NotEqualTilde', [8770, 824]], ['NotExists', [8708]], ['NotGreater', [8815]], ['NotGreaterEqual', [8817]], ['NotGreaterFullEqual', [8807, 824]], ['NotGreaterGreater', [8811, 824]], ['NotGreaterLess', [8825]], ['NotGreaterSlantEqual', [10878, 824]], ['NotGreaterTilde', [8821]], ['NotHumpDownHump', [8782, 824]], ['NotHumpEqual', [8783, 824]], ['notin', [8713]], ['notindot', [8949, 824]], ['notinE', [8953, 824]], ['notinva', [8713]], ['notinvb', [8951]], ['notinvc', [8950]], ['NotLeftTriangleBar', [10703, 824]], ['NotLeftTriangle', [8938]], ['NotLeftTriangleEqual', [8940]], ['NotLess', [8814]], ['NotLessEqual', [8816]], ['NotLessGreater', [8824]], ['NotLessLess', [8810, 824]], ['NotLessSlantEqual', [10877, 824]], ['NotLessTilde', [8820]], ['NotNestedGreaterGreater', [10914, 824]], ['NotNestedLessLess', [10913, 824]], ['notni', [8716]], ['notniva', [8716]], ['notnivb', [8958]], ['notnivc', [8957]], ['NotPrecedes', [8832]], ['NotPrecedesEqual', [10927, 824]], ['NotPrecedesSlantEqual', [8928]], ['NotReverseElement', [8716]], ['NotRightTriangleBar', [10704, 824]], ['NotRightTriangle', [8939]], ['NotRightTriangleEqual', [8941]], ['NotSquareSubset', [8847, 824]], ['NotSquareSubsetEqual', [8930]], ['NotSquareSuperset', [8848, 824]], ['NotSquareSupersetEqual', [8931]], ['NotSubset', [8834, 8402]], ['NotSubsetEqual', [8840]], ['NotSucceeds', [8833]], ['NotSucceedsEqual', [10928, 824]], ['NotSucceedsSlantEqual', [8929]], ['NotSucceedsTilde', [8831, 824]], ['NotSuperset', [8835, 8402]], ['NotSupersetEqual', [8841]], ['NotTilde', [8769]], ['NotTildeEqual', [8772]], ['NotTildeFullEqual', [8775]], ['NotTildeTilde', [8777]], ['NotVerticalBar', [8740]], ['nparallel', [8742]], ['npar', [8742]], ['nparsl', [11005, 8421]], ['npart', [8706, 824]], ['npolint', [10772]], ['npr', [8832]], ['nprcue', [8928]], ['nprec', [8832]], ['npreceq', [10927, 824]], ['npre', [10927, 824]], ['nrarrc', [10547, 824]], ['nrarr', [8603]], ['nrArr', [8655]], ['nrarrw', [8605, 824]], ['nrightarrow', [8603]], ['nRightarrow', [8655]], ['nrtri', [8939]], ['nrtrie', [8941]], ['nsc', [8833]], ['nsccue', [8929]], ['nsce', [10928, 824]], ['Nscr', [119977]], ['nscr', [120003]], ['nshortmid', [8740]], ['nshortparallel', [8742]], ['nsim', [8769]], ['nsime', [8772]], ['nsimeq', [8772]], ['nsmid', [8740]], ['nspar', [8742]], ['nsqsube', [8930]], ['nsqsupe', [8931]], ['nsub', [8836]], ['nsubE', [10949, 824]], ['nsube', [8840]], ['nsubset', [8834, 8402]], ['nsubseteq', [8840]], ['nsubseteqq', [10949, 824]], ['nsucc', [8833]], ['nsucceq', [10928, 824]], ['nsup', [8837]], ['nsupE', [10950, 824]], ['nsupe', [8841]], ['nsupset', [8835, 8402]], ['nsupseteq', [8841]], ['nsupseteqq', [10950, 824]], ['ntgl', [8825]], ['Ntilde', [209]], ['ntilde', [241]], ['ntlg', [8824]], ['ntriangleleft', [8938]], ['ntrianglelefteq', [8940]], ['ntriangleright', [8939]], ['ntrianglerighteq', [8941]], ['Nu', [925]], ['nu', [957]], ['num', [35]], ['numero', [8470]], ['numsp', [8199]], ['nvap', [8781, 8402]], ['nvdash', [8876]], ['nvDash', [8877]], ['nVdash', [8878]], ['nVDash', [8879]], ['nvge', [8805, 8402]], ['nvgt', [62, 8402]], ['nvHarr', [10500]], ['nvinfin', [10718]], ['nvlArr', [10498]], ['nvle', [8804, 8402]], ['nvlt', [60, 8402]], ['nvltrie', [8884, 8402]], ['nvrArr', [10499]], ['nvrtrie', [8885, 8402]], ['nvsim', [8764, 8402]], ['nwarhk', [10531]], ['nwarr', [8598]], ['nwArr', [8662]], ['nwarrow', [8598]], ['nwnear', [10535]], ['Oacute', [211]], ['oacute', [243]], ['oast', [8859]], ['Ocirc', [212]], ['ocirc', [244]], ['ocir', [8858]], ['Ocy', [1054]], ['ocy', [1086]], ['odash', [8861]], ['Odblac', [336]], ['odblac', [337]], ['odiv', [10808]], ['odot', [8857]], ['odsold', [10684]], ['OElig', [338]], ['oelig', [339]], ['ofcir', [10687]], ['Ofr', [120082]], ['ofr', [120108]], ['ogon', [731]], ['Ograve', [210]], ['ograve', [242]], ['ogt', [10689]], ['ohbar', [10677]], ['ohm', [937]], ['oint', [8750]], ['olarr', [8634]], ['olcir', [10686]], ['olcross', [10683]], ['oline', [8254]], ['olt', [10688]], ['Omacr', [332]], ['omacr', [333]], ['Omega', [937]], ['omega', [969]], ['Omicron', [927]], ['omicron', [959]], ['omid', [10678]], ['ominus', [8854]], ['Oopf', [120134]], ['oopf', [120160]], ['opar', [10679]], ['OpenCurlyDoubleQuote', [8220]], ['OpenCurlyQuote', [8216]], ['operp', [10681]], ['oplus', [8853]], ['orarr', [8635]], ['Or', [10836]], ['or', [8744]], ['ord', [10845]], ['order', [8500]], ['orderof', [8500]], ['ordf', [170]], ['ordm', [186]], ['origof', [8886]], ['oror', [10838]], ['orslope', [10839]], ['orv', [10843]], ['oS', [9416]], ['Oscr', [119978]], ['oscr', [8500]], ['Oslash', [216]], ['oslash', [248]], ['osol', [8856]], ['Otilde', [213]], ['otilde', [245]], ['otimesas', [10806]], ['Otimes', [10807]], ['otimes', [8855]], ['Ouml', [214]], ['ouml', [246]], ['ovbar', [9021]], ['OverBar', [8254]], ['OverBrace', [9182]], ['OverBracket', [9140]], ['OverParenthesis', [9180]], ['para', [182]], ['parallel', [8741]], ['par', [8741]], ['parsim', [10995]], ['parsl', [11005]], ['part', [8706]], ['PartialD', [8706]], ['Pcy', [1055]], ['pcy', [1087]], ['percnt', [37]], ['period', [46]], ['permil', [8240]], ['perp', [8869]], ['pertenk', [8241]], ['Pfr', [120083]], ['pfr', [120109]], ['Phi', [934]], ['phi', [966]], ['phiv', [981]], ['phmmat', [8499]], ['phone', [9742]], ['Pi', [928]], ['pi', [960]], ['pitchfork', [8916]], ['piv', [982]], ['planck', [8463]], ['planckh', [8462]], ['plankv', [8463]], ['plusacir', [10787]], ['plusb', [8862]], ['pluscir', [10786]], ['plus', [43]], ['plusdo', [8724]], ['plusdu', [10789]], ['pluse', [10866]], ['PlusMinus', [177]], ['plusmn', [177]], ['plussim', [10790]], ['plustwo', [10791]], ['pm', [177]], ['Poincareplane', [8460]], ['pointint', [10773]], ['popf', [120161]], ['Popf', [8473]], ['pound', [163]], ['prap', [10935]], ['Pr', [10939]], ['pr', [8826]], ['prcue', [8828]], ['precapprox', [10935]], ['prec', [8826]], ['preccurlyeq', [8828]], ['Precedes', [8826]], ['PrecedesEqual', [10927]], ['PrecedesSlantEqual', [8828]], ['PrecedesTilde', [8830]], ['preceq', [10927]], ['precnapprox', [10937]], ['precneqq', [10933]], ['precnsim', [8936]], ['pre', [10927]], ['prE', [10931]], ['precsim', [8830]], ['prime', [8242]], ['Prime', [8243]], ['primes', [8473]], ['prnap', [10937]], ['prnE', [10933]], ['prnsim', [8936]], ['prod', [8719]], ['Product', [8719]], ['profalar', [9006]], ['profline', [8978]], ['profsurf', [8979]], ['prop', [8733]], ['Proportional', [8733]], ['Proportion', [8759]], ['propto', [8733]], ['prsim', [8830]], ['prurel', [8880]], ['Pscr', [119979]], ['pscr', [120005]], ['Psi', [936]], ['psi', [968]], ['puncsp', [8200]], ['Qfr', [120084]], ['qfr', [120110]], ['qint', [10764]], ['qopf', [120162]], ['Qopf', [8474]], ['qprime', [8279]], ['Qscr', [119980]], ['qscr', [120006]], ['quaternions', [8461]], ['quatint', [10774]], ['quest', [63]], ['questeq', [8799]], ['quot', [34]], ['QUOT', [34]], ['rAarr', [8667]], ['race', [8765, 817]], ['Racute', [340]], ['racute', [341]], ['radic', [8730]], ['raemptyv', [10675]], ['rang', [10217]], ['Rang', [10219]], ['rangd', [10642]], ['range', [10661]], ['rangle', [10217]], ['raquo', [187]], ['rarrap', [10613]], ['rarrb', [8677]], ['rarrbfs', [10528]], ['rarrc', [10547]], ['rarr', [8594]], ['Rarr', [8608]], ['rArr', [8658]], ['rarrfs', [10526]], ['rarrhk', [8618]], ['rarrlp', [8620]], ['rarrpl', [10565]], ['rarrsim', [10612]], ['Rarrtl', [10518]], ['rarrtl', [8611]], ['rarrw', [8605]], ['ratail', [10522]], ['rAtail', [10524]], ['ratio', [8758]], ['rationals', [8474]], ['rbarr', [10509]], ['rBarr', [10511]], ['RBarr', [10512]], ['rbbrk', [10099]], ['rbrace', [125]], ['rbrack', [93]], ['rbrke', [10636]], ['rbrksld', [10638]], ['rbrkslu', [10640]], ['Rcaron', [344]], ['rcaron', [345]], ['Rcedil', [342]], ['rcedil', [343]], ['rceil', [8969]], ['rcub', [125]], ['Rcy', [1056]], ['rcy', [1088]], ['rdca', [10551]], ['rdldhar', [10601]], ['rdquo', [8221]], ['rdquor', [8221]], ['rdsh', [8627]], ['real', [8476]], ['realine', [8475]], ['realpart', [8476]], ['reals', [8477]], ['Re', [8476]], ['rect', [9645]], ['reg', [174]], ['REG', [174]], ['ReverseElement', [8715]], ['ReverseEquilibrium', [8651]], ['ReverseUpEquilibrium', [10607]], ['rfisht', [10621]], ['rfloor', [8971]], ['rfr', [120111]], ['Rfr', [8476]], ['rHar', [10596]], ['rhard', [8641]], ['rharu', [8640]], ['rharul', [10604]], ['Rho', [929]], ['rho', [961]], ['rhov', [1009]], ['RightAngleBracket', [10217]], ['RightArrowBar', [8677]], ['rightarrow', [8594]], ['RightArrow', [8594]], ['Rightarrow', [8658]], ['RightArrowLeftArrow', [8644]], ['rightarrowtail', [8611]], ['RightCeiling', [8969]], ['RightDoubleBracket', [10215]], ['RightDownTeeVector', [10589]], ['RightDownVectorBar', [10581]], ['RightDownVector', [8642]], ['RightFloor', [8971]], ['rightharpoondown', [8641]], ['rightharpoonup', [8640]], ['rightleftarrows', [8644]], ['rightleftharpoons', [8652]], ['rightrightarrows', [8649]], ['rightsquigarrow', [8605]], ['RightTeeArrow', [8614]], ['RightTee', [8866]], ['RightTeeVector', [10587]], ['rightthreetimes', [8908]], ['RightTriangleBar', [10704]], ['RightTriangle', [8883]], ['RightTriangleEqual', [8885]], ['RightUpDownVector', [10575]], ['RightUpTeeVector', [10588]], ['RightUpVectorBar', [10580]], ['RightUpVector', [8638]], ['RightVectorBar', [10579]], ['RightVector', [8640]], ['ring', [730]], ['risingdotseq', [8787]], ['rlarr', [8644]], ['rlhar', [8652]], ['rlm', [8207]], ['rmoustache', [9137]], ['rmoust', [9137]], ['rnmid', [10990]], ['roang', [10221]], ['roarr', [8702]], ['robrk', [10215]], ['ropar', [10630]], ['ropf', [120163]], ['Ropf', [8477]], ['roplus', [10798]], ['rotimes', [10805]], ['RoundImplies', [10608]], ['rpar', [41]], ['rpargt', [10644]], ['rppolint', [10770]], ['rrarr', [8649]], ['Rrightarrow', [8667]], ['rsaquo', [8250]], ['rscr', [120007]], ['Rscr', [8475]], ['rsh', [8625]], ['Rsh', [8625]], ['rsqb', [93]], ['rsquo', [8217]], ['rsquor', [8217]], ['rthree', [8908]], ['rtimes', [8906]], ['rtri', [9657]], ['rtrie', [8885]], ['rtrif', [9656]], ['rtriltri', [10702]], ['RuleDelayed', [10740]], ['ruluhar', [10600]], ['rx', [8478]], ['Sacute', [346]], ['sacute', [347]], ['sbquo', [8218]], ['scap', [10936]], ['Scaron', [352]], ['scaron', [353]], ['Sc', [10940]], ['sc', [8827]], ['sccue', [8829]], ['sce', [10928]], ['scE', [10932]], ['Scedil', [350]], ['scedil', [351]], ['Scirc', [348]], ['scirc', [349]], ['scnap', [10938]], ['scnE', [10934]], ['scnsim', [8937]], ['scpolint', [10771]], ['scsim', [8831]], ['Scy', [1057]], ['scy', [1089]], ['sdotb', [8865]], ['sdot', [8901]], ['sdote', [10854]], ['searhk', [10533]], ['searr', [8600]], ['seArr', [8664]], ['searrow', [8600]], ['sect', [167]], ['semi', [59]], ['seswar', [10537]], ['setminus', [8726]], ['setmn', [8726]], ['sext', [10038]], ['Sfr', [120086]], ['sfr', [120112]], ['sfrown', [8994]], ['sharp', [9839]], ['SHCHcy', [1065]], ['shchcy', [1097]], ['SHcy', [1064]], ['shcy', [1096]], ['ShortDownArrow', [8595]], ['ShortLeftArrow', [8592]], ['shortmid', [8739]], ['shortparallel', [8741]], ['ShortRightArrow', [8594]], ['ShortUpArrow', [8593]], ['shy', [173]], ['Sigma', [931]], ['sigma', [963]], ['sigmaf', [962]], ['sigmav', [962]], ['sim', [8764]], ['simdot', [10858]], ['sime', [8771]], ['simeq', [8771]], ['simg', [10910]], ['simgE', [10912]], ['siml', [10909]], ['simlE', [10911]], ['simne', [8774]], ['simplus', [10788]], ['simrarr', [10610]], ['slarr', [8592]], ['SmallCircle', [8728]], ['smallsetminus', [8726]], ['smashp', [10803]], ['smeparsl', [10724]], ['smid', [8739]], ['smile', [8995]], ['smt', [10922]], ['smte', [10924]], ['smtes', [10924, 65024]], ['SOFTcy', [1068]], ['softcy', [1100]], ['solbar', [9023]], ['solb', [10692]], ['sol', [47]], ['Sopf', [120138]], ['sopf', [120164]], ['spades', [9824]], ['spadesuit', [9824]], ['spar', [8741]], ['sqcap', [8851]], ['sqcaps', [8851, 65024]], ['sqcup', [8852]], ['sqcups', [8852, 65024]], ['Sqrt', [8730]], ['sqsub', [8847]], ['sqsube', [8849]], ['sqsubset', [8847]], ['sqsubseteq', [8849]], ['sqsup', [8848]], ['sqsupe', [8850]], ['sqsupset', [8848]], ['sqsupseteq', [8850]], ['square', [9633]], ['Square', [9633]], ['SquareIntersection', [8851]], ['SquareSubset', [8847]], ['SquareSubsetEqual', [8849]], ['SquareSuperset', [8848]], ['SquareSupersetEqual', [8850]], ['SquareUnion', [8852]], ['squarf', [9642]], ['squ', [9633]], ['squf', [9642]], ['srarr', [8594]], ['Sscr', [119982]], ['sscr', [120008]], ['ssetmn', [8726]], ['ssmile', [8995]], ['sstarf', [8902]], ['Star', [8902]], ['star', [9734]], ['starf', [9733]], ['straightepsilon', [1013]], ['straightphi', [981]], ['strns', [175]], ['sub', [8834]], ['Sub', [8912]], ['subdot', [10941]], ['subE', [10949]], ['sube', [8838]], ['subedot', [10947]], ['submult', [10945]], ['subnE', [10955]], ['subne', [8842]], ['subplus', [10943]], ['subrarr', [10617]], ['subset', [8834]], ['Subset', [8912]], ['subseteq', [8838]], ['subseteqq', [10949]], ['SubsetEqual', [8838]], ['subsetneq', [8842]], ['subsetneqq', [10955]], ['subsim', [10951]], ['subsub', [10965]], ['subsup', [10963]], ['succapprox', [10936]], ['succ', [8827]], ['succcurlyeq', [8829]], ['Succeeds', [8827]], ['SucceedsEqual', [10928]], ['SucceedsSlantEqual', [8829]], ['SucceedsTilde', [8831]], ['succeq', [10928]], ['succnapprox', [10938]], ['succneqq', [10934]], ['succnsim', [8937]], ['succsim', [8831]], ['SuchThat', [8715]], ['sum', [8721]], ['Sum', [8721]], ['sung', [9834]], ['sup1', [185]], ['sup2', [178]], ['sup3', [179]], ['sup', [8835]], ['Sup', [8913]], ['supdot', [10942]], ['supdsub', [10968]], ['supE', [10950]], ['supe', [8839]], ['supedot', [10948]], ['Superset', [8835]], ['SupersetEqual', [8839]], ['suphsol', [10185]], ['suphsub', [10967]], ['suplarr', [10619]], ['supmult', [10946]], ['supnE', [10956]], ['supne', [8843]], ['supplus', [10944]], ['supset', [8835]], ['Supset', [8913]], ['supseteq', [8839]], ['supseteqq', [10950]], ['supsetneq', [8843]], ['supsetneqq', [10956]], ['supsim', [10952]], ['supsub', [10964]], ['supsup', [10966]], ['swarhk', [10534]], ['swarr', [8601]], ['swArr', [8665]], ['swarrow', [8601]], ['swnwar', [10538]], ['szlig', [223]], ['Tab', [9]], ['target', [8982]], ['Tau', [932]], ['tau', [964]], ['tbrk', [9140]], ['Tcaron', [356]], ['tcaron', [357]], ['Tcedil', [354]], ['tcedil', [355]], ['Tcy', [1058]], ['tcy', [1090]], ['tdot', [8411]], ['telrec', [8981]], ['Tfr', [120087]], ['tfr', [120113]], ['there4', [8756]], ['therefore', [8756]], ['Therefore', [8756]], ['Theta', [920]], ['theta', [952]], ['thetasym', [977]], ['thetav', [977]], ['thickapprox', [8776]], ['thicksim', [8764]], ['ThickSpace', [8287, 8202]], ['ThinSpace', [8201]], ['thinsp', [8201]], ['thkap', [8776]], ['thksim', [8764]], ['THORN', [222]], ['thorn', [254]], ['tilde', [732]], ['Tilde', [8764]], ['TildeEqual', [8771]], ['TildeFullEqual', [8773]], ['TildeTilde', [8776]], ['timesbar', [10801]], ['timesb', [8864]], ['times', [215]], ['timesd', [10800]], ['tint', [8749]], ['toea', [10536]], ['topbot', [9014]], ['topcir', [10993]], ['top', [8868]], ['Topf', [120139]], ['topf', [120165]], ['topfork', [10970]], ['tosa', [10537]], ['tprime', [8244]], ['trade', [8482]], ['TRADE', [8482]], ['triangle', [9653]], ['triangledown', [9663]], ['triangleleft', [9667]], ['trianglelefteq', [8884]], ['triangleq', [8796]], ['triangleright', [9657]], ['trianglerighteq', [8885]], ['tridot', [9708]], ['trie', [8796]], ['triminus', [10810]], ['TripleDot', [8411]], ['triplus', [10809]], ['trisb', [10701]], ['tritime', [10811]], ['trpezium', [9186]], ['Tscr', [119983]], ['tscr', [120009]], ['TScy', [1062]], ['tscy', [1094]], ['TSHcy', [1035]], ['tshcy', [1115]], ['Tstrok', [358]], ['tstrok', [359]], ['twixt', [8812]], ['twoheadleftarrow', [8606]], ['twoheadrightarrow', [8608]], ['Uacute', [218]], ['uacute', [250]], ['uarr', [8593]], ['Uarr', [8607]], ['uArr', [8657]], ['Uarrocir', [10569]], ['Ubrcy', [1038]], ['ubrcy', [1118]], ['Ubreve', [364]], ['ubreve', [365]], ['Ucirc', [219]], ['ucirc', [251]], ['Ucy', [1059]], ['ucy', [1091]], ['udarr', [8645]], ['Udblac', [368]], ['udblac', [369]], ['udhar', [10606]], ['ufisht', [10622]], ['Ufr', [120088]], ['ufr', [120114]], ['Ugrave', [217]], ['ugrave', [249]], ['uHar', [10595]], ['uharl', [8639]], ['uharr', [8638]], ['uhblk', [9600]], ['ulcorn', [8988]], ['ulcorner', [8988]], ['ulcrop', [8975]], ['ultri', [9720]], ['Umacr', [362]], ['umacr', [363]], ['uml', [168]], ['UnderBar', [95]], ['UnderBrace', [9183]], ['UnderBracket', [9141]], ['UnderParenthesis', [9181]], ['Union', [8899]], ['UnionPlus', [8846]], ['Uogon', [370]], ['uogon', [371]], ['Uopf', [120140]], ['uopf', [120166]], ['UpArrowBar', [10514]], ['uparrow', [8593]], ['UpArrow', [8593]], ['Uparrow', [8657]], ['UpArrowDownArrow', [8645]], ['updownarrow', [8597]], ['UpDownArrow', [8597]], ['Updownarrow', [8661]], ['UpEquilibrium', [10606]], ['upharpoonleft', [8639]], ['upharpoonright', [8638]], ['uplus', [8846]], ['UpperLeftArrow', [8598]], ['UpperRightArrow', [8599]], ['upsi', [965]], ['Upsi', [978]], ['upsih', [978]], ['Upsilon', [933]], ['upsilon', [965]], ['UpTeeArrow', [8613]], ['UpTee', [8869]], ['upuparrows', [8648]], ['urcorn', [8989]], ['urcorner', [8989]], ['urcrop', [8974]], ['Uring', [366]], ['uring', [367]], ['urtri', [9721]], ['Uscr', [119984]], ['uscr', [120010]], ['utdot', [8944]], ['Utilde', [360]], ['utilde', [361]], ['utri', [9653]], ['utrif', [9652]], ['uuarr', [8648]], ['Uuml', [220]], ['uuml', [252]], ['uwangle', [10663]], ['vangrt', [10652]], ['varepsilon', [1013]], ['varkappa', [1008]], ['varnothing', [8709]], ['varphi', [981]], ['varpi', [982]], ['varpropto', [8733]], ['varr', [8597]], ['vArr', [8661]], ['varrho', [1009]], ['varsigma', [962]], ['varsubsetneq', [8842, 65024]], ['varsubsetneqq', [10955, 65024]], ['varsupsetneq', [8843, 65024]], ['varsupsetneqq', [10956, 65024]], ['vartheta', [977]], ['vartriangleleft', [8882]], ['vartriangleright', [8883]], ['vBar', [10984]], ['Vbar', [10987]], ['vBarv', [10985]], ['Vcy', [1042]], ['vcy', [1074]], ['vdash', [8866]], ['vDash', [8872]], ['Vdash', [8873]], ['VDash', [8875]], ['Vdashl', [10982]], ['veebar', [8891]], ['vee', [8744]], ['Vee', [8897]], ['veeeq', [8794]], ['vellip', [8942]], ['verbar', [124]], ['Verbar', [8214]], ['vert', [124]], ['Vert', [8214]], ['VerticalBar', [8739]], ['VerticalLine', [124]], ['VerticalSeparator', [10072]], ['VerticalTilde', [8768]], ['VeryThinSpace', [8202]], ['Vfr', [120089]], ['vfr', [120115]], ['vltri', [8882]], ['vnsub', [8834, 8402]], ['vnsup', [8835, 8402]], ['Vopf', [120141]], ['vopf', [120167]], ['vprop', [8733]], ['vrtri', [8883]], ['Vscr', [119985]], ['vscr', [120011]], ['vsubnE', [10955, 65024]], ['vsubne', [8842, 65024]], ['vsupnE', [10956, 65024]], ['vsupne', [8843, 65024]], ['Vvdash', [8874]], ['vzigzag', [10650]], ['Wcirc', [372]], ['wcirc', [373]], ['wedbar', [10847]], ['wedge', [8743]], ['Wedge', [8896]], ['wedgeq', [8793]], ['weierp', [8472]], ['Wfr', [120090]], ['wfr', [120116]], ['Wopf', [120142]], ['wopf', [120168]], ['wp', [8472]], ['wr', [8768]], ['wreath', [8768]], ['Wscr', [119986]], ['wscr', [120012]], ['xcap', [8898]], ['xcirc', [9711]], ['xcup', [8899]], ['xdtri', [9661]], ['Xfr', [120091]], ['xfr', [120117]], ['xharr', [10231]], ['xhArr', [10234]], ['Xi', [926]], ['xi', [958]], ['xlarr', [10229]], ['xlArr', [10232]], ['xmap', [10236]], ['xnis', [8955]], ['xodot', [10752]], ['Xopf', [120143]], ['xopf', [120169]], ['xoplus', [10753]], ['xotime', [10754]], ['xrarr', [10230]], ['xrArr', [10233]], ['Xscr', [119987]], ['xscr', [120013]], ['xsqcup', [10758]], ['xuplus', [10756]], ['xutri', [9651]], ['xvee', [8897]], ['xwedge', [8896]], ['Yacute', [221]], ['yacute', [253]], ['YAcy', [1071]], ['yacy', [1103]], ['Ycirc', [374]], ['ycirc', [375]], ['Ycy', [1067]], ['ycy', [1099]], ['yen', [165]], ['Yfr', [120092]], ['yfr', [120118]], ['YIcy', [1031]], ['yicy', [1111]], ['Yopf', [120144]], ['yopf', [120170]], ['Yscr', [119988]], ['yscr', [120014]], ['YUcy', [1070]], ['yucy', [1102]], ['yuml', [255]], ['Yuml', [376]], ['Zacute', [377]], ['zacute', [378]], ['Zcaron', [381]], ['zcaron', [382]], ['Zcy', [1047]], ['zcy', [1079]], ['Zdot', [379]], ['zdot', [380]], ['zeetrf', [8488]], ['ZeroWidthSpace', [8203]], ['Zeta', [918]], ['zeta', [950]], ['zfr', [120119]], ['Zfr', [8488]], ['ZHcy', [1046]], ['zhcy', [1078]], ['zigrarr', [8669]], ['zopf', [120171]], ['Zopf', [8484]], ['Zscr', [119989]], ['zscr', [120015]], ['zwj', [8205]], ['zwnj', [8204]]];
    
    var alphaIndex = {};
    var charIndex = {};
    
    createIndexes(alphaIndex, charIndex);
    
    /**
     * @constructor
     */
    function Html5Entities() {}
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html5Entities.prototype.decode = function(str) {
        if (str.length === 0) {
            return '';
        }
        return str.replace(/&(#?[\w\d]+);?/g, function(s, entity) {
            var chr;
            if (entity.charAt(0) === "#") {
                var code = entity.charAt(1) === 'x' ?
                    parseInt(entity.substr(2).toLowerCase(), 16) :
                    parseInt(entity.substr(1));
    
                if (!(isNaN(code) || code < -32768 || code > 65535)) {
                    chr = String.fromCharCode(code);
                }
            } else {
                chr = alphaIndex[entity];
            }
            return chr || s;
        });
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
     Html5Entities.decode = function(str) {
        return new Html5Entities().decode(str);
     };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html5Entities.prototype.encode = function(str) {
        var strLength = str.length;
        if (strLength === 0) {
            return '';
        }
        var result = '';
        var i = 0;
        while (i < strLength) {
            var charInfo = charIndex[str.charCodeAt(i)];
            if (charInfo) {
                var alpha = charInfo[str.charCodeAt(i + 1)];
                if (alpha) {
                    i++;
                } else {
                    alpha = charInfo[''];
                }
                if (alpha) {
                    result += "&" + alpha + ";";
                    i++;
                    continue;
                }
            }
            result += str.charAt(i);
            i++;
        }
        return result;
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
     Html5Entities.encode = function(str) {
        return new Html5Entities().encode(str);
     };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html5Entities.prototype.encodeNonUTF = function(str) {
        var strLength = str.length;
        if (strLength === 0) {
            return '';
        }
        var result = '';
        var i = 0;
        while (i < strLength) {
            var c = str.charCodeAt(i);
            var charInfo = charIndex[c];
            if (charInfo) {
                var alpha = charInfo[str.charCodeAt(i + 1)];
                if (alpha) {
                    i++;
                } else {
                    alpha = charInfo[''];
                }
                if (alpha) {
                    result += "&" + alpha + ";";
                    i++;
                    continue;
                }
            }
            if (c < 32 || c > 126) {
                result += '&#' + c + ';';
            } else {
                result += str.charAt(i);
            }
            i++;
        }
        return result;
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
     Html5Entities.encodeNonUTF = function(str) {
        return new Html5Entities().encodeNonUTF(str);
     };
    
    /**
     * @param {String} str
     * @returns {String}
     */
    Html5Entities.prototype.encodeNonASCII = function(str) {
        var strLength = str.length;
        if (strLength === 0) {
            return '';
        }
        var result = '';
        var i = 0;
        while (i < strLength) {
            var c = str.charCodeAt(i);
            if (c <= 255) {
                result += str[i++];
                continue;
            }
            result += '&#' + c + ';';
            i++
        }
        return result;
    };
    
    /**
     * @param {String} str
     * @returns {String}
     */
     Html5Entities.encodeNonASCII = function(str) {
        return new Html5Entities().encodeNonASCII(str);
     };
    
    /**
     * @param {Object} alphaIndex Passed by reference.
     * @param {Object} charIndex Passed by reference.
     */
    function createIndexes(alphaIndex, charIndex) {
        var i = ENTITIES.length;
        var _results = [];
        while (i--) {
            var e = ENTITIES[i];
            var alpha = e[0];
            var chars = e[1];
            var chr = chars[0];
            var addChar = (chr < 32 || chr > 126) || chr === 62 || chr === 60 || chr === 38 || chr === 34 || chr === 39;
            var charInfo;
            if (addChar) {
                charInfo = charIndex[chr] = charIndex[chr] || {};
            }
            if (chars[1]) {
                var chr2 = chars[1];
                alphaIndex[alpha] = String.fromCharCode(chr) + String.fromCharCode(chr2);
                _results.push(addChar && (charInfo[chr2] = alpha));
            } else {
                alphaIndex[alpha] = String.fromCharCode(chr);
                _results.push(addChar && (charInfo[''] = alpha));
            }
        }
    }
    
    module.exports = Html5Entities;


/***/ },
/* 678 */
/***/ function(module, exports, __webpack_require__) {

    /**
     * Based heavily on https://github.com/webpack/webpack/blob/
     *  c0afdf9c6abc1dd70707c594e473802a566f7b6e/hot/only-dev-server.js
     * Original copyright Tobias Koppers @sokra (MIT license)
     */
    
    /* global window __webpack_hash__ */
    
    if (false) {
      throw new Error("[HMR] Hot Module Replacement is disabled.");
    }
    
    var hmrDocsUrl = "http://webpack.github.io/docs/hot-module-replacement-with-webpack.html"; // eslint-disable-line max-len
    
    var lastHash;
    var failureStatuses = { abort: 1, fail: 1 };
    var applyOptions = { ignoreUnaccepted: true };
    
    function upToDate(hash) {
      if (hash) lastHash = hash;
      return lastHash == __webpack_require__.h();
    }
    
    module.exports = function(hash, moduleMap, options) {
      var reload = options.reload;
      if (!upToDate(hash) && module.hot.status() == "idle") {
        if (options.log) console.log("[HMR] Checking for updates on the server...");
        check();
      }
    
      function check() {
        var cb = function(err, updatedModules) {
          if (err) return handleError(err);
    
          if(!updatedModules) {
            if (options.warn) {
              console.warn("[HMR] Cannot find update (Full reload needed)");
              console.warn("[HMR] (Probably because of restarting the server)");
            }
            performReload();
            return null;
          }
    
          var applyCallback = function(applyErr, renewedModules) {
            if (applyErr) return handleError(applyErr);
    
            if (!upToDate()) check();
    
            logUpdates(updatedModules, renewedModules);
          };
    
          var applyResult = module.hot.apply(applyOptions, applyCallback);
          // webpack 2 promise
          if (applyResult && applyResult.then) {
            // HotModuleReplacement.runtime.js refers to the result as `outdatedModules`
            applyResult.then(function(outdatedModules) {
              applyCallback(null, outdatedModules);
            });
            applyResult.catch(applyCallback);
          }
    
        };
    
        var result = module.hot.check(false, cb);
        // webpack 2 promise
        if (result && result.then) {
            result.then(function(updatedModules) {
                cb(null, updatedModules);
            });
            result.catch(cb);
        }
      }
    
      function logUpdates(updatedModules, renewedModules) {
        var unacceptedModules = updatedModules.filter(function(moduleId) {
          return renewedModules && renewedModules.indexOf(moduleId) < 0;
        });
    
        if(unacceptedModules.length > 0) {
          if (options.warn) {
            console.warn(
              "[HMR] The following modules couldn't be hot updated: " +
              "(Full reload needed)\n" +
              "This is usually because the modules which have changed " +
              "(and their parents) do not know how to hot reload themselves. " +
              "See " + hmrDocsUrl + " for more details."
            );
            unacceptedModules.forEach(function(moduleId) {
              console.warn("[HMR]  - " + moduleMap[moduleId]);
            });
          }
          performReload();
          return;
        }
    
        if (options.log) {
          if(!renewedModules || renewedModules.length === 0) {
            console.log("[HMR] Nothing hot updated.");
          } else {
            console.log("[HMR] Updated modules:");
            renewedModules.forEach(function(moduleId) {
              console.log("[HMR]  - " + moduleMap[moduleId]);
            });
          }
    
          if (upToDate()) {
            console.log("[HMR] App is up to date.");
          }
        }
      }
    
      function handleError(err) {
        if (module.hot.status() in failureStatuses) {
          if (options.warn) {
            console.warn("[HMR] Cannot check for update (Full reload needed)");
            console.warn("[HMR] " + err.stack || err.message);
          }
          performReload();
          return;
        }
        if (options.warn) {
          console.warn("[HMR] Update check failed: " + err.stack || err.message);
        }
      }
    
      function performReload() {
        if (reload) {
          if (options.warn) console.warn("[HMR] Reloading page");
          window.location.reload();
        }
      }
    };


/***/ }
]);
//# sourceMappingURL=app.6404a24e0a2d0fafb9d5.js.map