NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/data-set/build/data-set.js.map
2023-09-14 14:47:11 +08:00

1 line
1.5 MiB
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"data-set.js","sources":["webpack://DataSet/webpack/universalModuleDefinition","webpack://DataSet/webpack/bootstrap","webpack://DataSet/./node_modules/_@antv_hierarchy@0.6.2@@antv/hierarchy/build/hierarchy.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/augment.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/cache.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/clamp.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/clear-animation-frame.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/clone.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/contains.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/debounce.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/deep-mix.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/difference.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/each.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/ends-with.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/every.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/extend.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/filter.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/find-index.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/find.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/first-value.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/fixed-base.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/flatten-deep.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/flatten.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/for-in.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/get-range.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/get-type.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/get-wrap-behavior.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/get.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/group-by.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/group-to-map.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/group.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/has-key.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/has-value.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/has.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/head.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/identity.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/index-of.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/index.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-arguments.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-array-like.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-array.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-boolean.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-date.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-decimal.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-element.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-empty.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-equal-with.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-equal.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-error.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-even.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-finite.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-function.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-integer.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-match.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-negative.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-nil.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-null.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-number-equal.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-number.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-object-like.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-object.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-odd.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-plain-object.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-positive.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-prototype.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-reg-exp.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-string.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-type.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/is-undefined.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/keys.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/last.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/lower-case.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/lower-first.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/map-values.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/map.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/max-by.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/memoize.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/min-by.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/mix.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/mod.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/noop.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/number2color.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/parse-radius.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/pick.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/pull-at.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/pull.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/reduce.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/remove.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/request-animation-frame.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/set.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/size.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/some.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/sort-by.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/starts-with.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/substitute.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/throttle.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/to-array.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/to-degree.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/to-integer.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/to-radian.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/to-string.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/union.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/uniq.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/unique-id.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/upper-case.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/upper-first.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/values-of-key.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/values.js","webpack://DataSet/./node_modules/_@antv_util@2.0.7@@antv/util/lib/wrap-behavior.js","webpack://DataSet/./node_modules/_abs-svg-path@0.1.1@abs-svg-path/index.js","webpack://DataSet/./node_modules/_d3-array@1.2.4@d3-array/dist/d3-array.js","webpack://DataSet/./node_modules/_d3-collection@1.0.7@d3-collection/dist/d3-collection.js","webpack://DataSet/./node_modules/_d3-composite-projections@1.3.2@d3-composite-projections/d3-composite-projections.js","webpack://DataSet/./node_modules/_d3-dsv@1.2.0@d3-dsv/dist/d3-dsv.js","webpack://DataSet/./node_modules/_d3-geo-projection@2.1.2@d3-geo-projection/build/d3-geo-projection.js","webpack://DataSet/./node_modules/_d3-geo@1.11.9@d3-geo/dist/d3-geo.js","webpack://DataSet/./node_modules/_d3-geo@1.6.4@d3-geo/build/d3-geo.js","webpack://DataSet/./node_modules/_d3-hexjson@1.1.0@d3-hexjson/build/d3-hexjson.js","webpack://DataSet/./node_modules/_d3-hierarchy@1.1.9@d3-hierarchy/dist/d3-hierarchy.js","webpack://DataSet/./node_modules/_d3-path@1.0.9@d3-path/dist/d3-path.js","webpack://DataSet/./node_modules/_d3-sankey@0.9.1@d3-sankey/dist/d3-sankey.js","webpack://DataSet/./node_modules/_d3-shape@1.3.7@d3-shape/dist/d3-shape.js","webpack://DataSet/./node_modules/_d3-voronoi@1.1.4@d3-voronoi/dist/d3-voronoi.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/index.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/acyclic.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/add-border-segments.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/coordinate-system.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/data/list.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/debug.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/graphlib.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/greedy-fas.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/layout.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/lodash.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/nesting-graph.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/normalize.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/order/add-subgraph-constraints.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/order/barycenter.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/order/build-layer-graph.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/order/cross-count.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/order/index.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/order/init-order.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/order/resolve-conflicts.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/order/sort-subgraph.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/order/sort.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/parent-dummy-chains.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/position/bk.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/position/index.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/rank/feasible-tree.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/rank/index.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/rank/network-simplex.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/rank/util.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/util.js","webpack://DataSet/./node_modules/_dagre@0.8.5@dagre/lib/version.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/index.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/components.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/dfs.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/dijkstra-all.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/dijkstra.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/find-cycles.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/floyd-warshall.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/index.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/is-acyclic.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/postorder.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/preorder.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/prim.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/tarjan.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/alg/topsort.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/data/priority-queue.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/graph.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/index.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/json.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/lodash.js","webpack://DataSet/./node_modules/_graphlib@2.1.8@graphlib/lib/version.js","webpack://DataSet/./node_modules/_isarray@0.0.1@isarray/index.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_DataView.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_Hash.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_ListCache.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_Map.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_MapCache.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_Promise.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_Set.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_SetCache.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_Stack.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_Symbol.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_Uint8Array.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_WeakMap.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_apply.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_arrayEach.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_arrayFilter.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_arrayIncludes.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_arrayIncludesWith.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_arrayLikeKeys.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_arrayMap.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_arrayPush.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_arrayReduce.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_arraySome.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_asciiSize.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_assignMergeValue.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_assignValue.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_assocIndexOf.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseAssign.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseAssignIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseAssignValue.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseClone.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseCreate.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseEach.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseExtremum.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseFilter.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseFindIndex.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseFlatten.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseFor.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseForOwn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseGet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseGetAllKeys.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseGetTag.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseGt.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseHas.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseHasIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIndexOf.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIsArguments.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIsEqual.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIsEqualDeep.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIsMap.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIsMatch.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIsNaN.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIsNative.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIsSet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIsTypedArray.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseIteratee.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseKeys.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseKeysIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseLt.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseMap.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseMatches.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseMatchesProperty.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseMerge.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseMergeDeep.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseOrderBy.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_basePick.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_basePickBy.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseProperty.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_basePropertyDeep.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseRange.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseReduce.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseRest.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseSet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseSetToString.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseSortBy.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseTimes.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseToString.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseUnary.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseUniq.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseValues.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_baseZipObject.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_cacheHas.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_castFunction.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_castPath.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_cloneArrayBuffer.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_cloneBuffer.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_cloneDataView.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_cloneRegExp.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_cloneSymbol.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_cloneTypedArray.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_compareAscending.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_compareMultiple.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_copyArray.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_copyObject.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_copySymbols.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_copySymbolsIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_coreJsData.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_createAssigner.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_createBaseEach.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_createBaseFor.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_createFind.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_createRange.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_createSet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_defineProperty.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_equalArrays.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_equalByTag.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_equalObjects.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_flatRest.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_freeGlobal.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getAllKeys.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getAllKeysIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getMapData.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getMatchData.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getNative.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getPrototype.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getRawTag.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getSymbols.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getSymbolsIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getTag.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_getValue.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_hasPath.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_hasUnicode.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_hashClear.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_hashDelete.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_hashGet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_hashHas.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_hashSet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_initCloneArray.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_initCloneByTag.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_initCloneObject.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_isFlattenable.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_isIndex.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_isIterateeCall.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_isKey.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_isKeyable.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_isMasked.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_isPrototype.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_isStrictComparable.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_listCacheClear.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_listCacheDelete.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_listCacheGet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_listCacheHas.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_listCacheSet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_mapCacheClear.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_mapCacheDelete.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_mapCacheGet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_mapCacheHas.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_mapCacheSet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_mapToArray.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_matchesStrictComparable.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_memoizeCapped.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_nativeCreate.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_nativeKeys.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_nativeKeysIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_nodeUtil.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_objectToString.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_overArg.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_overRest.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_root.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_safeGet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_setCacheAdd.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_setCacheHas.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_setToArray.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_setToString.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_shortOut.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_stackClear.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_stackDelete.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_stackGet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_stackHas.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_stackSet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_strictIndexOf.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_stringSize.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_stringToPath.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_toKey.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_toSource.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/_unicodeSize.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/clone.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/cloneDeep.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/constant.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/defaults.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/each.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/eq.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/filter.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/find.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/findIndex.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/flatten.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/forEach.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/forIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/get.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/has.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/hasIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/identity.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isArguments.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isArray.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isArrayLike.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isArrayLikeObject.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isBuffer.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isEmpty.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isFunction.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isLength.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isMap.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isObject.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isObjectLike.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isPlainObject.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isSet.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isString.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isSymbol.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isTypedArray.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/isUndefined.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/keys.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/keysIn.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/last.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/map.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/mapValues.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/max.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/memoize.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/merge.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/min.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/minBy.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/noop.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/now.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/pick.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/property.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/range.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/reduce.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/size.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/sortBy.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/stubArray.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/stubFalse.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/toFinite.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/toInteger.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/toNumber.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/toPlainObject.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/toString.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/transform.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/union.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/uniqueId.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/values.js","webpack://DataSet/./node_modules/_lodash@4.17.15@lodash/zipObject.js","webpack://DataSet/./node_modules/_parse-svg-path@0.1.2@parse-svg-path/index.js","webpack://DataSet/./node_modules/_point-at-length@1.1.0@point-at-length/index.js","webpack://DataSet/./node_modules/_regression@2.0.1@regression/dist/regression.js","webpack://DataSet/./node_modules/_simple-statistics@6.1.1@simple-statistics/dist/simple-statistics.min.js","webpack://DataSet/./node_modules/_topojson-client@3.1.0@topojson-client/dist/topojson-client.js","webpack://DataSet/./node_modules/_tslib@1.11.1@tslib/tslib.js","webpack://DataSet/(webpack)/buildin/global.js","webpack://DataSet/(webpack)/buildin/module.js","webpack://DataSet/./node_modules/_wolfy87-eventemitter@5.2.9@wolfy87-eventemitter/EventEmitter.js","webpack://DataSet/./src/api/geo.ts","webpack://DataSet/./src/api/hierarchy.ts","webpack://DataSet/./src/api/partition.ts","webpack://DataSet/./src/api/statistics.ts","webpack://DataSet/./src/connector/default.ts","webpack://DataSet/./src/connector/dsv.ts","webpack://DataSet/./src/connector/geo-graticule.ts","webpack://DataSet/./src/connector/geojson.ts","webpack://DataSet/./src/connector/graph.ts","webpack://DataSet/./src/connector/hexjson.ts","webpack://DataSet/./src/connector/hierarchy.ts","webpack://DataSet/./src/connector/topojson.ts","webpack://DataSet/./src/constants.ts","webpack://DataSet/./src/data-set.ts","webpack://DataSet/./src/index.ts","webpack://DataSet/./src/transform/aggregate.ts","webpack://DataSet/./src/transform/bin/hexagon.ts","webpack://DataSet/./src/transform/bin/histogram.ts","webpack://DataSet/./src/transform/bin/quantile.ts","webpack://DataSet/./src/transform/bin/rectangle.ts","webpack://DataSet/./src/transform/default.ts","webpack://DataSet/./src/transform/diagram/arc.ts","webpack://DataSet/./src/transform/diagram/dagre.ts","webpack://DataSet/./src/transform/diagram/sankey.ts","webpack://DataSet/./src/transform/diagram/voronoi.ts","webpack://DataSet/./src/transform/fill-rows.ts","webpack://DataSet/./src/transform/filter.ts","webpack://DataSet/./src/transform/fold.ts","webpack://DataSet/./src/transform/geo/centroid.ts","webpack://DataSet/./src/transform/geo/projection.ts","webpack://DataSet/./src/transform/geo/region.ts","webpack://DataSet/./src/transform/hierarchy/cluster.ts","webpack://DataSet/./src/transform/hierarchy/compact-box.ts","webpack://DataSet/./src/transform/hierarchy/dendrogram.ts","webpack://DataSet/./src/transform/hierarchy/indented.ts","webpack://DataSet/./src/transform/hierarchy/pack.ts","webpack://DataSet/./src/transform/hierarchy/partition.ts","webpack://DataSet/./src/transform/hierarchy/tree.ts","webpack://DataSet/./src/transform/hierarchy/treemap.ts","webpack://DataSet/./src/transform/impute.ts","webpack://DataSet/./src/transform/kde.ts","webpack://DataSet/./src/transform/kernel-smooth/density.ts","webpack://DataSet/./src/transform/kernel-smooth/regression.ts","webpack://DataSet/./src/transform/map.ts","webpack://DataSet/./src/transform/partition.ts","webpack://DataSet/./src/transform/percent.ts","webpack://DataSet/./src/transform/pick.ts","webpack://DataSet/./src/transform/proportion.ts","webpack://DataSet/./src/transform/regression.ts","webpack://DataSet/./src/transform/rename.ts","webpack://DataSet/./src/transform/reverse.ts","webpack://DataSet/./src/transform/sort-by.ts","webpack://DataSet/./src/transform/sort.ts","webpack://DataSet/./src/transform/subset.ts","webpack://DataSet/./src/transform/tag-cloud.ts","webpack://DataSet/./src/transform/waffle.ts","webpack://DataSet/./src/util/bandwidth.ts","webpack://DataSet/./src/util/get-geo-projection.ts","webpack://DataSet/./src/util/get-series-values.ts","webpack://DataSet/./src/util/kernel.ts","webpack://DataSet/./src/util/option-parser.ts","webpack://DataSet/./src/util/p-by-fraction.ts","webpack://DataSet/./src/util/partition.ts","webpack://DataSet/./src/util/simple-sort-by.ts","webpack://DataSet/./src/util/tag-cloud.ts","webpack://DataSet/./src/view.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataSet\"] = factory();\n\telse\n\t\troot[\"DataSet\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Hierarchy\"] = factory();\n\telse\n\t\troot[\"Hierarchy\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 5);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar assign = __webpack_require__(7);\n\nmodule.exports = {\n assign: assign\n};\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar hierarchy = __webpack_require__(3);\n\nvar Layout = /*#__PURE__*/function () {\n function Layout(root, options) {\n if (options === void 0) {\n options = {};\n }\n\n var me = this;\n me.options = options;\n me.rootNode = hierarchy(root, options);\n }\n\n var _proto = Layout.prototype;\n\n _proto.execute = function execute() {\n throw new Error('please override this method');\n };\n\n return Layout;\n}();\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar separateTree = __webpack_require__(4);\n\nvar VALID_DIRECTIONS = ['LR', // left to right\n'RL', // right to left\n'TB', // top to bottom\n'BT', // bottom to top\n'H', // horizontal\n'V' // vertical\n];\nvar HORIZONTAL_DIRECTIONS = ['LR', 'RL', 'H'];\n\nvar isHorizontal = function isHorizontal(direction) {\n return HORIZONTAL_DIRECTIONS.indexOf(direction) > -1;\n};\n\nvar DEFAULT_DIRECTION = VALID_DIRECTIONS[0];\n\nmodule.exports = function (root, options, layoutAlgrithm) {\n var direction = options.direction || DEFAULT_DIRECTION;\n options.isHorizontal = isHorizontal(direction);\n\n if (direction && VALID_DIRECTIONS.indexOf(direction) === -1) {\n throw new TypeError(\"Invalid direction: \" + direction);\n }\n\n if (direction === VALID_DIRECTIONS[0]) {\n // LR\n layoutAlgrithm(root, options);\n } else if (direction === VALID_DIRECTIONS[1]) {\n // RL\n layoutAlgrithm(root, options);\n root.right2left();\n } else if (direction === VALID_DIRECTIONS[2]) {\n // TB\n layoutAlgrithm(root, options);\n } else if (direction === VALID_DIRECTIONS[3]) {\n // BT\n layoutAlgrithm(root, options);\n root.bottom2top();\n } else if (direction === VALID_DIRECTIONS[4] || direction === VALID_DIRECTIONS[5]) {\n // H or V\n // separate into left and right trees\n var _separateTree = separateTree(root, options),\n left = _separateTree.left,\n right = _separateTree.right; // do layout for left and right trees\n\n\n layoutAlgrithm(left, options);\n layoutAlgrithm(right, options);\n options.isHorizontal ? left.right2left() : left.bottom2top(); // combine left and right trees\n\n right.translate(left.x - right.x, left.y - right.y); // translate root\n\n root.x = left.x;\n root.y = right.y;\n var bb = root.getBoundingBox();\n\n if (options.isHorizontal) {\n if (bb.top < 0) {\n root.translate(0, -bb.top);\n }\n } else {\n if (bb.left < 0) {\n root.translate(-bb.left, 0);\n }\n }\n } // fixed root position, default value is true\n\n\n var fixedRoot = options.fixedRoot;\n if (fixedRoot === undefined) fixedRoot = true;\n\n if (fixedRoot) {\n root.translate(-(root.x + root.width / 2 + root.hgap), -(root.y + root.height / 2 + root.vgap));\n }\n\n return root;\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-disable no-cond-assign */\nvar util = __webpack_require__(0);\n\nvar PEM = 18;\nvar DEFAULT_HEIGHT = PEM * 2;\nvar DEFAULT_GAP = PEM;\nvar DEFAULT_OPTIONS = {\n getId: function getId(d) {\n return d.id || d.name;\n },\n getHGap: function getHGap(d) {\n return d.hgap || DEFAULT_GAP;\n },\n getVGap: function getVGap(d) {\n return d.vgap || DEFAULT_GAP;\n },\n getChildren: function getChildren(d) {\n return d.children;\n },\n getHeight: function getHeight(d) {\n return d.height || DEFAULT_HEIGHT;\n },\n getWidth: function getWidth(d) {\n var name = d.name || ' ';\n return d.width || name.split('').length * PEM; // FIXME DO NOT get width like this\n }\n};\n\nfunction Node(data, options) {\n var me = this;\n me.vgap = me.hgap = 0;\n if (data instanceof Node) return data;\n me.data = data;\n /*\n * Gaps: filling space between nodes\n * (x, y) ----------------------\n * | vgap |\n * | -------------------- h\n * | h | | e\n * | g | | i\n * | a | | g\n * | p | | h\n * | --------------------- t\n * | |\n * -----------width------------\n */\n\n var hgap = options.getHGap(data);\n var vgap = options.getVGap(data);\n me.width = options.getWidth(data);\n me.height = options.getHeight(data);\n me.id = options.getId(data);\n me.x = me.y = 0;\n me.depth = 0;\n\n if (!me.children) {\n me.children = [];\n }\n\n me.addGap(hgap, vgap);\n return me;\n}\n\nutil.assign(Node.prototype, {\n isRoot: function isRoot() {\n return this.depth === 0;\n },\n isLeaf: function isLeaf() {\n return this.children.length === 0;\n },\n addGap: function addGap(hgap, vgap) {\n var me = this;\n me.hgap += hgap;\n me.vgap += vgap;\n me.width += 2 * hgap;\n me.height += 2 * vgap;\n },\n eachNode: function eachNode(callback) {\n // Depth First traverse\n var me = this;\n var nodes = [me];\n var current;\n\n while (current = nodes.pop()) {\n callback(current);\n nodes = nodes.concat(current.children);\n }\n },\n DFTraverse: function DFTraverse(callback) {\n // Depth First traverse\n this.eachNode(callback);\n },\n BFTraverse: function BFTraverse(callback) {\n // Breadth First traverse\n var me = this;\n var nodes = [me];\n var current;\n\n while (current = nodes.shift()) {\n callback(current);\n nodes = nodes.concat(current.children);\n }\n },\n getBoundingBox: function getBoundingBox() {\n // BBox for just one tree node\n var bb = {\n left: Number.MAX_VALUE,\n top: Number.MAX_VALUE,\n width: 0,\n height: 0\n };\n this.eachNode(function (node) {\n bb.left = Math.min(bb.left, node.x);\n bb.top = Math.min(bb.top, node.y);\n bb.width = Math.max(bb.width, node.x + node.width);\n bb.height = Math.max(bb.height, node.y + node.height);\n });\n return bb;\n },\n // translate\n translate: function translate(tx, ty) {\n if (tx === void 0) {\n tx = 0;\n }\n\n if (ty === void 0) {\n ty = 0;\n }\n\n this.eachNode(function (node) {\n node.x += tx;\n node.y += ty;\n });\n },\n right2left: function right2left() {\n var me = this;\n var bb = me.getBoundingBox();\n me.eachNode(function (node) {\n node.x = node.x - (node.x - bb.left) * 2 - node.width; // node.x = - node.x;\n });\n me.translate(bb.width, 0);\n },\n bottom2top: function bottom2top() {\n var me = this;\n var bb = me.getBoundingBox();\n me.eachNode(function (node) {\n node.y = node.y - (node.y - bb.top) * 2 - node.height; // node.y = - node.y;\n });\n me.translate(0, bb.height);\n }\n});\n\nfunction hierarchy(data, options, isolated) {\n if (options === void 0) {\n options = {};\n }\n\n options = util.assign({}, DEFAULT_OPTIONS, options);\n var root = new Node(data, options);\n var nodes = [root];\n var node;\n\n if (!isolated && !data.collapsed) {\n while (node = nodes.pop()) {\n if (!node.data.collapsed) {\n var children = options.getChildren(node.data);\n var length = children ? children.length : 0;\n node.children = new Array(length);\n\n if (children && length) {\n for (var i = 0; i < length; i++) {\n var child = new Node(children[i], options);\n node.children[i] = child;\n nodes.push(child);\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n }\n }\n\n return root;\n}\n\nmodule.exports = hierarchy;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar hierarchy = __webpack_require__(3);\n\nmodule.exports = function (root, options) {\n // separate into left and right trees\n var left = hierarchy(root.data, options, true); // root only\n\n var right = hierarchy(root.data, options, true); // root only\n // automatically\n\n var treeSize = root.children.length;\n var rightTreeSize = Math.round(treeSize / 2); // separate left and right tree by meta data\n\n var getSide = options.getSide || function (child, index) {\n if (index < rightTreeSize) {\n return 'right';\n }\n\n return 'left';\n };\n\n for (var i = 0; i < treeSize; i++) {\n var child = root.children[i];\n var side = getSide(child, i);\n\n if (side === 'right') {\n right.children.push(child);\n } else {\n left.children.push(child);\n }\n }\n\n left.eachNode(function (node) {\n if (!node.isRoot()) {\n node.side = 'left';\n }\n });\n right.eachNode(function (node) {\n if (!node.isRoot()) {\n node.side = 'right';\n }\n });\n return {\n left: left,\n right: right\n };\n};\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar hierarchy = {\n compactBox: __webpack_require__(6),\n dendrogram: __webpack_require__(9),\n indented: __webpack_require__(11),\n mindmap: __webpack_require__(13)\n};\nmodule.exports = hierarchy;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar TreeLayout = __webpack_require__(1);\n\nvar nonLayeredTidyTree = __webpack_require__(8);\n\nvar doTreeLayout = __webpack_require__(2);\n\nvar util = __webpack_require__(0);\n\nvar CompactBoxTreeLayout = /*#__PURE__*/function (_TreeLayout) {\n _inheritsLoose(CompactBoxTreeLayout, _TreeLayout);\n\n function CompactBoxTreeLayout() {\n return _TreeLayout.apply(this, arguments) || this;\n }\n\n var _proto = CompactBoxTreeLayout.prototype;\n\n _proto.execute = function execute() {\n var me = this;\n return doTreeLayout(me.rootNode, me.options, nonLayeredTidyTree);\n };\n\n return CompactBoxTreeLayout;\n}(TreeLayout);\n\nvar DEFAULT_OPTIONS = {};\n\nfunction compactBoxLayout(root, options) {\n options = util.assign({}, DEFAULT_OPTIONS, options);\n return new CompactBoxTreeLayout(root, options).execute();\n}\n\nmodule.exports = compactBoxLayout;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nfunction _mix(dist, obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n dist[key] = obj[key];\n }\n }\n}\n\nvar mix = function mix(dist, src1, src2, src3) {\n if (src1) _mix(dist, src1);\n if (src2) _mix(dist, src2);\n if (src3) _mix(dist, src3);\n return dist;\n};\n\nmodule.exports = mix;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n// wrap tree node\nfunction WrappedTree(w, h, y, c) {\n if (c === void 0) {\n c = [];\n }\n\n var me = this; // size\n\n me.w = w || 0;\n me.h = h || 0; // position\n\n me.y = y || 0;\n me.x = 0; // children\n\n me.c = c || [];\n me.cs = c.length; // modified\n\n me.prelim = 0;\n me.mod = 0;\n me.shift = 0;\n me.change = 0; // left/right tree\n\n me.tl = null;\n me.tr = null; // extreme left/right tree\n\n me.el = null;\n me.er = null; // modified left/right tree\n\n me.msel = 0;\n me.mser = 0;\n}\n\nWrappedTree.fromNode = function (root, isHorizontal) {\n if (!root) return null;\n var children = [];\n root.children.forEach(function (child) {\n children.push(WrappedTree.fromNode(child, isHorizontal));\n });\n if (isHorizontal) return new WrappedTree(root.height, root.width, root.x, children);\n return new WrappedTree(root.width, root.height, root.y, children);\n}; // node utils\n\n\nfunction moveRight(node, move, isHorizontal) {\n if (isHorizontal) {\n node.y += move;\n } else {\n node.x += move;\n }\n\n node.children.forEach(function (child) {\n moveRight(child, move, isHorizontal);\n });\n}\n\nfunction getMin(node, isHorizontal) {\n var res = isHorizontal ? node.y : node.x;\n node.children.forEach(function (child) {\n res = Math.min(getMin(child, isHorizontal), res);\n });\n return res;\n}\n\nfunction normalize(node, isHorizontal) {\n var min = getMin(node, isHorizontal);\n moveRight(node, -min, isHorizontal);\n}\n\nfunction convertBack(converted\n/* WrappedTree */\n, root\n/* TreeNode */\n, isHorizontal) {\n if (isHorizontal) {\n root.y = converted.x;\n } else {\n root.x = converted.x;\n }\n\n converted.c.forEach(function (child, i) {\n convertBack(child, root.children[i], isHorizontal);\n });\n}\n\nfunction layer(node, isHorizontal, d) {\n if (d === void 0) {\n d = 0;\n }\n\n if (isHorizontal) {\n node.x = d;\n d += node.width;\n } else {\n node.y = d;\n d += node.height;\n }\n\n node.children.forEach(function (child) {\n layer(child, isHorizontal, d);\n });\n}\n\nmodule.exports = function (root, options) {\n if (options === void 0) {\n options = {};\n }\n\n var isHorizontal = options.isHorizontal;\n\n function firstWalk(t) {\n if (t.cs === 0) {\n setExtremes(t);\n return;\n }\n\n firstWalk(t.c[0]);\n var ih = updateIYL(bottom(t.c[0].el), 0, null);\n\n for (var i = 1; i < t.cs; ++i) {\n firstWalk(t.c[i]);\n var min = bottom(t.c[i].er);\n separate(t, i, ih);\n ih = updateIYL(min, i, ih);\n }\n\n positionRoot(t);\n setExtremes(t);\n }\n\n function setExtremes(t) {\n if (t.cs === 0) {\n t.el = t;\n t.er = t;\n t.msel = t.mser = 0;\n } else {\n t.el = t.c[0].el;\n t.msel = t.c[0].msel;\n t.er = t.c[t.cs - 1].er;\n t.mser = t.c[t.cs - 1].mser;\n }\n }\n\n function separate(t, i, ih) {\n var sr = t.c[i - 1];\n var mssr = sr.mod;\n var cl = t.c[i];\n var mscl = cl.mod;\n\n while (sr !== null && cl !== null) {\n if (bottom(sr) > ih.low) ih = ih.nxt;\n var dist = mssr + sr.prelim + sr.w - (mscl + cl.prelim);\n\n if (dist > 0) {\n mscl += dist;\n moveSubtree(t, i, ih.index, dist);\n }\n\n var sy = bottom(sr);\n var cy = bottom(cl);\n\n if (sy <= cy) {\n sr = nextRightContour(sr);\n if (sr !== null) mssr += sr.mod;\n }\n\n if (sy >= cy) {\n cl = nextLeftContour(cl);\n if (cl !== null) mscl += cl.mod;\n }\n }\n\n if (!sr && !!cl) {\n setLeftThread(t, i, cl, mscl);\n } else if (!!sr && !cl) {\n setRightThread(t, i, sr, mssr);\n }\n }\n\n function moveSubtree(t, i, si, dist) {\n t.c[i].mod += dist;\n t.c[i].msel += dist;\n t.c[i].mser += dist;\n distributeExtra(t, i, si, dist);\n }\n\n function nextLeftContour(t) {\n return t.cs === 0 ? t.tl : t.c[0];\n }\n\n function nextRightContour(t) {\n return t.cs === 0 ? t.tr : t.c[t.cs - 1];\n }\n\n function bottom(t) {\n return t.y + t.h;\n }\n\n function setLeftThread(t, i, cl, modsumcl) {\n var li = t.c[0].el;\n li.tl = cl;\n var diff = modsumcl - cl.mod - t.c[0].msel;\n li.mod += diff;\n li.prelim -= diff;\n t.c[0].el = t.c[i].el;\n t.c[0].msel = t.c[i].msel;\n }\n\n function setRightThread(t, i, sr, modsumsr) {\n var ri = t.c[i].er;\n ri.tr = sr;\n var diff = modsumsr - sr.mod - t.c[i].mser;\n ri.mod += diff;\n ri.prelim -= diff;\n t.c[i].er = t.c[i - 1].er;\n t.c[i].mser = t.c[i - 1].mser;\n }\n\n function positionRoot(t) {\n t.prelim = (t.c[0].prelim + t.c[0].mod + t.c[t.cs - 1].mod + t.c[t.cs - 1].prelim + t.c[t.cs - 1].w) / 2 - t.w / 2;\n }\n\n function secondWalk(t, modsum) {\n modsum += t.mod;\n t.x = t.prelim + modsum;\n addChildSpacing(t);\n\n for (var i = 0; i < t.cs; i++) {\n secondWalk(t.c[i], modsum);\n }\n }\n\n function distributeExtra(t, i, si, dist) {\n if (si !== i - 1) {\n var nr = i - si;\n t.c[si + 1].shift += dist / nr;\n t.c[i].shift -= dist / nr;\n t.c[i].change -= dist - dist / nr;\n }\n }\n\n function addChildSpacing(t) {\n var d = 0;\n var modsumdelta = 0;\n\n for (var i = 0; i < t.cs; i++) {\n d += t.c[i].shift;\n modsumdelta += d + t.c[i].change;\n t.c[i].mod += modsumdelta;\n }\n }\n\n function updateIYL(low, index, ih) {\n while (ih !== null && low >= ih.low) {\n ih = ih.nxt;\n }\n\n return {\n low: low,\n index: index,\n nxt: ih\n };\n } // do layout\n\n\n layer(root, isHorizontal);\n var wt = WrappedTree.fromNode(root, isHorizontal);\n firstWalk(wt);\n secondWalk(wt, 0);\n convertBack(wt, root, isHorizontal);\n normalize(root, isHorizontal);\n return root;\n};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar TreeLayout = __webpack_require__(1);\n\nvar dendrogram = __webpack_require__(10);\n\nvar doTreeLayout = __webpack_require__(2);\n\nvar util = __webpack_require__(0);\n\nvar DendrogramLayout = /*#__PURE__*/function (_TreeLayout) {\n _inheritsLoose(DendrogramLayout, _TreeLayout);\n\n function DendrogramLayout() {\n return _TreeLayout.apply(this, arguments) || this;\n }\n\n var _proto = DendrogramLayout.prototype;\n\n _proto.execute = function execute() {\n var me = this;\n me.rootNode.width = 0;\n return doTreeLayout(me.rootNode, me.options, dendrogram);\n };\n\n return DendrogramLayout;\n}(TreeLayout);\n\nvar DEFAULT_OPTIONS = {};\n\nfunction dendrogramLayout(root, options) {\n options = util.assign({}, DEFAULT_OPTIONS, options);\n return new DendrogramLayout(root, options).execute();\n}\n\nmodule.exports = dendrogramLayout;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// wrap tree node\n// TODO considering size\nvar util = __webpack_require__(0);\n\nfunction WrappedTree(height, children) {\n if (height === void 0) {\n height = 0;\n }\n\n if (children === void 0) {\n children = [];\n }\n\n var me = this;\n me.x = me.y = 0;\n me.leftChild = me.rightChild = null;\n me.height = 0;\n me.children = children;\n}\n\nvar DEFAULT_OPTIONS = {\n isHorizontal: true,\n nodeSep: 20,\n nodeSize: 20,\n rankSep: 200,\n subTreeSep: 10\n};\n\nfunction convertBack(converted\n/* WrappedTree */\n, root\n/* TreeNode */\n, isHorizontal) {\n if (isHorizontal) {\n root.x = converted.x;\n root.y = converted.y;\n } else {\n root.x = converted.y;\n root.y = converted.x;\n }\n\n converted.children.forEach(function (child, i) {\n convertBack(child, root.children[i], isHorizontal);\n });\n}\n\nmodule.exports = function (root, options) {\n if (options === void 0) {\n options = {};\n }\n\n options = util.assign({}, DEFAULT_OPTIONS, options);\n var maxDepth = 0;\n\n function wrappedTreeFromNode(n) {\n if (!n) return null;\n n.width = 0;\n\n if (n.depth && n.depth > maxDepth) {\n maxDepth = n.depth; // get the max depth\n }\n\n var children = n.children;\n var childrenCount = children.length;\n var t = new WrappedTree(n.height, []);\n children.forEach(function (child, i) {\n var childWT = wrappedTreeFromNode(child);\n t.children.push(childWT);\n\n if (i === 0) {\n // t.leftChild = childWT.leftChild ? childWT.leftChild : childWT\n t.leftChild = childWT;\n }\n\n if (i === childrenCount - 1) {\n // t.rightChild = childWT.rightChild ? childWT.rightChild : childWT\n t.rightChild = childWT;\n }\n });\n t.originNode = n;\n t.isLeaf = n.isLeaf();\n return t;\n }\n\n function getDrawingDepth(t) {\n if (t.isLeaf || t.children.length === 0) {\n t.drawingDepth = maxDepth;\n } else {\n var depths = t.children.map(function (child) {\n return getDrawingDepth(child);\n });\n var minChildDepth = Math.min.apply(null, depths);\n t.drawingDepth = minChildDepth - 1;\n }\n\n return t.drawingDepth;\n }\n\n var prevLeaf;\n\n function position(t) {\n t.x = t.drawingDepth * options.rankSep;\n\n if (t.isLeaf) {\n t.y = 0;\n\n if (prevLeaf) {\n t.y = prevLeaf.y + prevLeaf.height + options.nodeSep;\n\n if (t.originNode.parent !== prevLeaf.originNode.parent) {\n t.y += options.subTreeSep;\n }\n }\n\n prevLeaf = t;\n } else {\n t.children.forEach(function (child) {\n position(child);\n });\n t.y = (t.leftChild.y + t.rightChild.y) / 2;\n }\n } // wrap node\n\n\n var wt = wrappedTreeFromNode(root); // get depth for drawing\n\n getDrawingDepth(wt); // get position\n\n position(wt); // get x, y\n\n convertBack(wt, root, options.isHorizontal);\n return root;\n};\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar TreeLayout = __webpack_require__(1);\n\nvar indentedTree = __webpack_require__(12);\n\nvar separateTree = __webpack_require__(4);\n\nvar util = __webpack_require__(0);\n\nvar VALID_DIRECTIONS = ['LR', // left to right\n'RL', // right to left\n'H' // horizontal\n];\nvar DEFAULT_DIRECTION = VALID_DIRECTIONS[0];\n\nvar IndentedLayout = /*#__PURE__*/function (_TreeLayout) {\n _inheritsLoose(IndentedLayout, _TreeLayout);\n\n function IndentedLayout() {\n return _TreeLayout.apply(this, arguments) || this;\n }\n\n var _proto = IndentedLayout.prototype;\n\n _proto.execute = function execute() {\n var me = this;\n var options = me.options;\n var root = me.rootNode;\n options.isHorizontal = true;\n var indent = options.indent;\n var direction = options.direction || DEFAULT_DIRECTION;\n\n if (direction && VALID_DIRECTIONS.indexOf(direction) === -1) {\n throw new TypeError(\"Invalid direction: \" + direction);\n }\n\n if (direction === VALID_DIRECTIONS[0]) {\n // LR\n indentedTree(root, indent);\n } else if (direction === VALID_DIRECTIONS[1]) {\n // RL\n indentedTree(root, indent);\n root.right2left();\n } else if (direction === VALID_DIRECTIONS[2]) {\n // H\n // separate into left and right trees\n var _separateTree = separateTree(root, options),\n left = _separateTree.left,\n right = _separateTree.right;\n\n indentedTree(left, indent);\n left.right2left();\n indentedTree(right, indent);\n var bbox = left.getBoundingBox();\n right.translate(bbox.width, 0);\n root.x = right.x - root.width / 2;\n }\n\n return root;\n };\n\n return IndentedLayout;\n}(TreeLayout);\n\nvar DEFAULT_OPTIONS = {};\n\nfunction indentedLayout(root, options) {\n options = util.assign({}, DEFAULT_OPTIONS, options);\n return new IndentedLayout(root, options).execute();\n}\n\nmodule.exports = indentedLayout;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nvar DEFAULT_INDENT = 20;\n\nfunction positionNode(node, previousNode, dx) {\n node.x += dx * node.depth;\n node.y = previousNode ? previousNode.y + previousNode.height : 0;\n}\n\nmodule.exports = function (root, indent) {\n if (indent === void 0) {\n indent = DEFAULT_INDENT;\n }\n\n var previousNode = null;\n root.eachNode(function (node) {\n positionNode(node, previousNode, indent);\n previousNode = node;\n });\n};\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar TreeLayout = __webpack_require__(1);\n\nvar mindmap = __webpack_require__(14);\n\nvar doTreeLayout = __webpack_require__(2);\n\nvar util = __webpack_require__(0);\n\nvar MindmapLayout = /*#__PURE__*/function (_TreeLayout) {\n _inheritsLoose(MindmapLayout, _TreeLayout);\n\n function MindmapLayout() {\n return _TreeLayout.apply(this, arguments) || this;\n }\n\n var _proto = MindmapLayout.prototype;\n\n _proto.execute = function execute() {\n var me = this;\n return doTreeLayout(me.rootNode, me.options, mindmap);\n };\n\n return MindmapLayout;\n}(TreeLayout);\n\nvar DEFAULT_OPTIONS = {};\n\nfunction mindmapLayout(root, options) {\n options = util.assign({}, DEFAULT_OPTIONS, options);\n return new MindmapLayout(root, options).execute();\n}\n\nmodule.exports = mindmapLayout;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar util = __webpack_require__(0);\n\nfunction secondWalk(node, options) {\n var totalHeight = 0;\n\n if (!node.children.length) {\n totalHeight = node.height;\n } else {\n node.children.forEach(function (c) {\n totalHeight += secondWalk(c, options);\n });\n }\n\n node._subTreeSep = options.getSubTreeSep(node.data);\n node.totalHeight = Math.max(node.height, totalHeight) + 2 * node._subTreeSep;\n return node.totalHeight;\n}\n\nfunction thirdWalk(node) {\n var children = node.children;\n var len = children.length;\n\n if (len) {\n children.forEach(function (c) {\n thirdWalk(c);\n });\n var first = children[0];\n var last = children[len - 1];\n var childrenHeight = last.y - first.y + last.height;\n var childrenTotalHeight = 0;\n children.forEach(function (child) {\n childrenTotalHeight += child.totalHeight;\n });\n\n if (childrenHeight > node.height) {\n // 当子节点总高度大于父节点高度\n node.y = first.y + childrenHeight / 2 - node.height / 2;\n } else if (children.length !== 1 || node.height > childrenTotalHeight) {\n // 多于一个子节点或者父节点大于所有子节点的总高度\n var offset = node.y + (node.height - childrenHeight) / 2 - first.y;\n children.forEach(function (c) {\n c.translate(0, offset);\n });\n } else {\n // 只有一个子节点\n node.y = (first.y + first.height / 2 + last.y + last.height / 2) / 2 - node.height / 2;\n }\n }\n}\n\nvar DEFAULT_OPTIONS = {\n getSubTreeSep: function getSubTreeSep() {\n return 0;\n }\n};\n\nmodule.exports = function (root, options) {\n if (options === void 0) {\n options = {};\n }\n\n options = util.assign({}, DEFAULT_OPTIONS, options);\n root.parent = {\n x: 0,\n width: 0,\n height: 0,\n y: 0\n }; // first walk\n\n root.BFTraverse(function (node) {\n node.x = node.parent.x + node.parent.width; // simply get x\n });\n root.parent = null; // second walk\n\n secondWalk(root, options); // assign sub tree totalHeight\n // adjusting\n // separating nodes\n\n root.startY = 0;\n root.y = root.totalHeight / 2 - root.height / 2;\n root.eachNode(function (node) {\n var children = node.children;\n var len = children.length;\n\n if (len) {\n var first = children[0];\n first.startY = node.startY + node._subTreeSep;\n\n if (len === 1) {\n first.y = node.y + node.height / 2 - first.height / 2;\n } else {\n first.y = first.startY + first.totalHeight / 2 - first.height / 2;\n\n for (var i = 1; i < len; i++) {\n var c = children[i];\n c.startY = children[i - 1].startY + children[i - 1].totalHeight;\n c.y = c.startY + c.totalHeight / 2 - c.height / 2;\n }\n }\n }\n }); // third walk\n\n thirdWalk(root);\n};\n\n/***/ })\n/******/ ]);\n});\n//# sourceMappingURL=hierarchy.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar mix_1 = require(\"./mix\");\nvar is_function_1 = require(\"./is-function\");\nvar augment = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var c = args[0];\n for (var i = 1; i < args.length; i++) {\n var obj = args[i];\n if (is_function_1.default(obj)) {\n obj = obj.prototype;\n }\n mix_1.default(c.prototype, obj);\n }\n};\nexports.default = augment;\n//# sourceMappingURL=augment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * k-v 存储\n */\nvar default_1 = /** @class */ (function () {\n function default_1() {\n this.map = {};\n }\n default_1.prototype.has = function (key) {\n return this.map[key] !== undefined;\n };\n default_1.prototype.get = function (key, def) {\n var v = this.map[key];\n return v === undefined ? def : v;\n };\n default_1.prototype.set = function (key, value) {\n this.map[key] = value;\n };\n default_1.prototype.clear = function () {\n this.map = {};\n };\n default_1.prototype.delete = function (key) {\n delete this.map[key];\n };\n default_1.prototype.size = function () {\n return Object.keys(this.map).length;\n };\n return default_1;\n}());\nexports.default = default_1;\n//# sourceMappingURL=cache.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar clamp = function (a, min, max) {\n if (a < min) {\n return min;\n }\n else if (a > max) {\n return max;\n }\n return a;\n};\nexports.default = clamp;\n//# sourceMappingURL=clamp.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction cancelAnimationFrame(handler) {\n var method = window.cancelAnimationFrame ||\n window.webkitCancelAnimationFrame ||\n // @ts-ignore\n window.mozCancelAnimationFrame ||\n // @ts-ignore\n window.msCancelAnimationFrame ||\n clearTimeout;\n method(handler);\n}\nexports.default = cancelAnimationFrame;\n;\n//# sourceMappingURL=clear-animation-frame.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\nvar clone = function (obj) {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n var rst;\n if (is_array_1.default(obj)) {\n rst = [];\n for (var i = 0, l = obj.length; i < l; i++) {\n if (typeof obj[i] === 'object' && obj[i] != null) {\n rst[i] = clone(obj[i]);\n }\n else {\n rst[i] = obj[i];\n }\n }\n }\n else {\n rst = {};\n for (var k in obj) {\n if (typeof obj[k] === 'object' && obj[k] != null) {\n rst[k] = clone(obj[k]);\n }\n else {\n rst[k] = obj[k];\n }\n }\n }\n return rst;\n};\nexports.default = clone;\n//# sourceMappingURL=clone.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_like_1 = require(\"./is-array-like\");\nvar contains = function (arr, value) {\n if (!is_array_like_1.default(arr)) {\n return false;\n }\n return arr.indexOf(value) > -1;\n};\nexports.default = contains;\n//# sourceMappingURL=contains.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this, args = arguments;\n var later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n}\nexports.default = debounce;\n//# sourceMappingURL=debounce.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\nvar is_plain_object_1 = require(\"./is-plain-object\");\nvar MAX_MIX_LEVEL = 5;\nfunction _deepMix(dist, src, level, maxLevel) {\n level = level || 0;\n maxLevel = maxLevel || MAX_MIX_LEVEL;\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n var value = src[key];\n if (value !== null && is_plain_object_1.default(value)) {\n if (!is_plain_object_1.default(dist[key])) {\n dist[key] = {};\n }\n if (level < maxLevel) {\n _deepMix(dist[key], value, level + 1, maxLevel);\n }\n else {\n dist[key] = src[key];\n }\n }\n else if (is_array_1.default(value)) {\n dist[key] = [];\n dist[key] = dist[key].concat(value);\n }\n else if (value !== undefined) {\n dist[key] = value;\n }\n }\n }\n}\n// todo 重写\nvar deepMix = function (rst) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < args.length; i += 1) {\n _deepMix(rst, args[i]);\n }\n return rst;\n};\nexports.default = deepMix;\n//# sourceMappingURL=deep-mix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar filter_1 = require(\"./filter\");\nvar contains_1 = require(\"./contains\");\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to inspect.\n * @param {Array} values The values to exclude.\n * @return {Array} Returns the new array of filtered values.\n * @example\n * difference([2, 1], [2, 3]); // => [1]\n */\nvar difference = function (arr, values) {\n if (values === void 0) { values = []; }\n return filter_1.default(arr, function (value) { return !contains_1.default(values, value); });\n};\nexports.default = difference;\n//# sourceMappingURL=difference.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\nvar is_object_1 = require(\"./is-object\");\nfunction each(elements, func) {\n if (!elements) {\n return;\n }\n var rst;\n if (is_array_1.default(elements)) {\n for (var i = 0, len = elements.length; i < len; i++) {\n rst = func(elements[i], i);\n if (rst === false) {\n break;\n }\n }\n }\n else if (is_object_1.default(elements)) {\n for (var k in elements) {\n if (elements.hasOwnProperty(k)) {\n rst = func(elements[k], k);\n if (rst === false) {\n break;\n }\n }\n }\n }\n}\nexports.default = each;\n//# sourceMappingURL=each.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\nvar is_string_1 = require(\"./is-string\");\nfunction endsWith(arr, e) {\n return (is_array_1.default(arr) || is_string_1.default(arr)) ? arr[arr.length - 1] === e : false;\n}\nexports.default = endsWith;\n//# sourceMappingURL=ends-with.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 只要有一个不满足条件就返回 false\n * @param arr\n * @param func\n */\nvar every = function (arr, func) {\n for (var i = 0; i < arr.length; i++) {\n if (!func(arr[i], i))\n return false;\n }\n return true;\n};\nexports.default = every;\n//# sourceMappingURL=every.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar mix_1 = require(\"./mix\");\nvar is_function_1 = require(\"./is-function\");\nvar extend = function (subclass, superclass, overrides, staticOverrides) {\n // 如果只提供父类构造函数,则自动生成子类构造函数\n if (!is_function_1.default(superclass)) {\n overrides = superclass;\n superclass = subclass;\n subclass = function () { };\n }\n var create = Object.create ?\n function (proto, c) {\n return Object.create(proto, {\n constructor: {\n value: c\n }\n });\n } :\n function (proto, c) {\n function Tmp() { }\n Tmp.prototype = proto;\n var o = new Tmp();\n o.constructor = c;\n return o;\n };\n var superObj = create(superclass.prototype, subclass); // new superclass(),//实例化父类作为子类的prototype\n subclass.prototype = mix_1.default(superObj, subclass.prototype); // 指定子类的prototype\n subclass.superclass = create(superclass.prototype, superclass);\n mix_1.default(superObj, overrides);\n mix_1.default(subclass, staticOverrides);\n return subclass;\n};\nexports.default = extend;\n//# sourceMappingURL=extend.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_array_like_1 = require(\"./is-array-like\");\nvar filter = function (arr, func) {\n if (!is_array_like_1.default(arr)) {\n return arr;\n }\n var result = [];\n each_1.default(arr, function (value, index) {\n if (func(value, index)) {\n result.push(value);\n }\n });\n return result;\n};\nexports.default = filter;\n//# sourceMappingURL=filter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction findIndex(arr, predicate, fromIndex) {\n if (fromIndex === void 0) { fromIndex = 0; }\n for (var i = fromIndex; i < arr.length; i++) {\n if (predicate(arr[i], i)) {\n // 找到终止循环\n return i;\n }\n }\n return -1;\n}\nexports.default = findIndex;\n//# sourceMappingURL=find-index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_function_1 = require(\"./is-function\");\nvar is_match_1 = require(\"./is-match\");\nvar is_array_1 = require(\"./is-array\");\nvar is_plain_object_1 = require(\"./is-plain-object\");\nfunction find(arr, predicate) {\n if (!is_array_1.default(arr))\n return null;\n var _predicate;\n if (is_function_1.default(predicate)) {\n _predicate = predicate;\n }\n if (is_plain_object_1.default(predicate)) {\n _predicate = function (a) { return is_match_1.default(a, predicate); };\n }\n if (_predicate) {\n for (var i = 0; i < arr.length; i += 1) {\n if (_predicate(arr[i])) {\n return arr[i];\n }\n }\n }\n return null;\n}\nexports.default = find;\n//# sourceMappingURL=find.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_nil_1 = require(\"./is-nil\");\nvar is_array_1 = require(\"./is-array\");\nvar firstValue = function (data, name) {\n var rst = null;\n for (var i = 0; i < data.length; i++) {\n var obj = data[i];\n var value = obj[name];\n if (!is_nil_1.default(value)) {\n if (is_array_1.default(value)) {\n rst = value[0]; // todo 这里是否应该使用递归,调用 firstValue @绝云\n }\n else {\n rst = value;\n }\n break;\n }\n }\n return rst;\n};\nexports.default = firstValue;\n//# sourceMappingURL=first-value.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar fixedBase = function (v, base) {\n var str = base.toString();\n var index = str.indexOf('.');\n if (index === -1) {\n return Math.round(v);\n }\n var length = str.substr(index + 1).length;\n if (length > 20) {\n length = 20;\n }\n return parseFloat(v.toFixed(length));\n};\nexports.default = fixedBase;\n//# sourceMappingURL=fixed-base.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @param {Array} result The array to return.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * flattenDeep([1, [2, [3, [4]], 5]]); // => [1, 2, 3, 4, 5]\n */\nvar flattenDeep = function (arr, result) {\n if (result === void 0) { result = []; }\n if (!is_array_1.default(arr)) {\n result.push(arr);\n }\n else {\n for (var i = 0; i < arr.length; i += 1) {\n flattenDeep(arr[i], result);\n }\n }\n return result;\n};\nexports.default = flattenDeep;\n//# sourceMappingURL=flatten-deep.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * flatten([1, [2, [3, [4]], 5]]); // => [1, 2, [3, [4]], 5]\n */\nvar flatten = function (arr) {\n if (!is_array_1.default(arr)) {\n return [];\n }\n var rst = [];\n for (var i = 0; i < arr.length; i++) {\n rst = rst.concat(arr[i]);\n }\n return rst;\n};\nexports.default = flatten;\n//# sourceMappingURL=flatten.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nexports.default = each_1.default;\n//# sourceMappingURL=for-in.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\nvar filter_1 = require(\"./filter\");\nvar getRange = function (values) {\n // 存在 NaN 时min,max 判定会出问题\n values = filter_1.default(values, function (v) {\n return !isNaN(v);\n });\n if (!values.length) { // 如果没有数值则直接返回0\n return {\n min: 0,\n max: 0\n };\n }\n if (is_array_1.default(values[0])) {\n var tmp = [];\n for (var i = 0; i < values.length; i++) {\n tmp = tmp.concat(values[i]);\n }\n values = tmp;\n }\n var max = Math.max.apply(null, values);\n var min = Math.min.apply(null, values);\n return {\n min: min,\n max: max\n };\n};\nexports.default = getRange;\n//# sourceMappingURL=get-range.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar toString = {}.toString;\nvar getType = function (value) {\n return toString.call(value).replace(/^\\[object /, '').replace(/]$/, '');\n};\nexports.default = getType;\n//# sourceMappingURL=get-type.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 获取封装的事件\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\nfunction getWrapBehavior(obj, action) {\n return obj['_wrap_' + action];\n}\nexports.default = getWrapBehavior;\n//# sourceMappingURL=get-wrap-behavior.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_string_1 = require(\"./is-string\");\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param key\n * @param defaultValue\n */\nexports.default = (function (obj, key, defaultValue) {\n var p = 0;\n var keyArr = is_string_1.default(key) ? key.split('.') : key;\n while (obj && p < keyArr.length) {\n obj = obj[keyArr[p++]];\n }\n return (obj === undefined || p < keyArr.length) ? defaultValue : obj;\n});\n//# sourceMappingURL=get.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_array_1 = require(\"./is-array\");\nvar is_function_1 = require(\"./is-function\");\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction groupBy(data, condition) {\n if (!condition || !is_array_1.default(data)) {\n return {};\n }\n var result = {};\n // 兼容方法和 字符串的写法\n var predicate = is_function_1.default(condition) ? condition : function (item) { return item[condition]; };\n var key;\n each_1.default(data, function (item) {\n key = predicate(item);\n if (hasOwnProperty.call(result, key)) {\n result[key].push(item);\n }\n else {\n result[key] = [item];\n }\n });\n return result;\n}\nexports.default = groupBy;\n//# sourceMappingURL=group-by.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\nvar is_function_1 = require(\"./is-function\");\nvar group_by_1 = require(\"./group-by\");\nvar groupToMap = function (data, condition) {\n if (!condition) {\n return {\n 0: data\n };\n }\n if (!is_function_1.default(condition)) {\n var paramsCondition_1 = is_array_1.default(condition) ? condition : condition.replace(/\\s+/g, '').split('*');\n condition = function (row) {\n var unique = '_'; // 避免出现数字作为Key的情况会进行按照数字的排序\n for (var i = 0, l = paramsCondition_1.length; i < l; i++) {\n unique += row[paramsCondition_1[i]] && row[paramsCondition_1[i]].toString();\n }\n return unique;\n };\n }\n var groups = group_by_1.default(data, condition);\n return groups;\n};\nexports.default = groupToMap;\n//# sourceMappingURL=group-to-map.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar group_to_map_1 = require(\"./group-to-map\");\nexports.default = (function (data, condition) {\n if (!condition) {\n // 没有条件,则自身改成数组\n return [data];\n }\n var groups = group_to_map_1.default(data, condition);\n var array = [];\n for (var i in groups) {\n array.push(groups[i]);\n }\n return array;\n});\n//# sourceMappingURL=group.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar has_1 = require(\"./has\");\nexports.default = has_1.default;\n//# sourceMappingURL=has-key.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contains_1 = require(\"./contains\");\nvar values_1 = require(\"./values\");\nexports.default = (function (obj, value) { return contains_1.default(values_1.default(obj), value); });\n//# sourceMappingURL=has-value.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (function (obj, key) { return obj.hasOwnProperty(key); });\n//# sourceMappingURL=has.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_like_1 = require(\"./is-array-like\");\nfunction head(o) {\n if (is_array_like_1.default(o)) {\n return o[0];\n }\n return undefined;\n}\nexports.default = head;\n//# sourceMappingURL=head.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (function (v) { return v; });\n//# sourceMappingURL=identity.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_like_1 = require(\"./is-array-like\");\nvar indexOf = function (arr, obj) {\n if (!is_array_like_1.default(arr)) {\n return -1;\n }\n var m = Array.prototype.indexOf;\n if (m) {\n return m.call(arr, obj);\n }\n var index = -1;\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === obj) {\n index = i;\n break;\n }\n }\n return index;\n};\nexports.default = indexOf;\n//# sourceMappingURL=index-of.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// array\nvar contains_1 = require(\"./contains\");\nexports.contains = contains_1.default;\nexports.includes = contains_1.default;\nvar difference_1 = require(\"./difference\");\nexports.difference = difference_1.default;\nvar find_1 = require(\"./find\");\nexports.find = find_1.default;\nvar find_index_1 = require(\"./find-index\");\nexports.findIndex = find_index_1.default;\nvar first_value_1 = require(\"./first-value\");\nexports.firstValue = first_value_1.default;\nvar flatten_1 = require(\"./flatten\");\nexports.flatten = flatten_1.default;\nvar flatten_deep_1 = require(\"./flatten-deep\");\nexports.flattenDeep = flatten_deep_1.default;\nvar get_range_1 = require(\"./get-range\");\nexports.getRange = get_range_1.default;\nvar pull_1 = require(\"./pull\");\nexports.pull = pull_1.default;\nvar pull_at_1 = require(\"./pull-at\");\nexports.pullAt = pull_at_1.default;\nvar reduce_1 = require(\"./reduce\");\nexports.reduce = reduce_1.default;\nvar remove_1 = require(\"./remove\");\nexports.remove = remove_1.default;\nvar sort_by_1 = require(\"./sort-by\");\nexports.sortBy = sort_by_1.default;\nvar union_1 = require(\"./union\");\nexports.union = union_1.default;\nvar uniq_1 = require(\"./uniq\");\nexports.uniq = uniq_1.default;\nvar values_of_key_1 = require(\"./values-of-key\");\nexports.valuesOfKey = values_of_key_1.default;\nvar head_1 = require(\"./head\");\nexports.head = head_1.default;\nvar last_1 = require(\"./last\");\nexports.last = last_1.default;\nvar starts_with_1 = require(\"./starts-with\");\nexports.startsWith = starts_with_1.default;\nvar ends_with_1 = require(\"./ends-with\");\nexports.endsWith = ends_with_1.default;\nvar filter_1 = require(\"./filter\");\nexports.filter = filter_1.default;\nvar every_1 = require(\"./every\");\nexports.every = every_1.default;\nvar some_1 = require(\"./some\");\nexports.some = some_1.default;\nvar group_1 = require(\"./group\");\nexports.group = group_1.default;\nvar group_by_1 = require(\"./group-by\");\nexports.groupBy = group_by_1.default;\nvar group_to_map_1 = require(\"./group-to-map\");\nexports.groupToMap = group_to_map_1.default;\n// event\nvar get_wrap_behavior_1 = require(\"./get-wrap-behavior\");\nexports.getWrapBehavior = get_wrap_behavior_1.default;\nvar wrap_behavior_1 = require(\"./wrap-behavior\");\nexports.wrapBehavior = wrap_behavior_1.default;\n// format\nvar number2color_1 = require(\"./number2color\");\nexports.number2color = number2color_1.default;\nvar parse_radius_1 = require(\"./parse-radius\");\nexports.parseRadius = parse_radius_1.default;\n// math\nvar clamp_1 = require(\"./clamp\");\nexports.clamp = clamp_1.default;\nvar fixed_base_1 = require(\"./fixed-base\");\nexports.fixedBase = fixed_base_1.default;\nvar is_decimal_1 = require(\"./is-decimal\");\nexports.isDecimal = is_decimal_1.default;\nvar is_even_1 = require(\"./is-even\");\nexports.isEven = is_even_1.default;\nvar is_integer_1 = require(\"./is-integer\");\nexports.isInteger = is_integer_1.default;\nvar is_negative_1 = require(\"./is-negative\");\nexports.isNegative = is_negative_1.default;\nvar is_number_equal_1 = require(\"./is-number-equal\");\nexports.isNumberEqual = is_number_equal_1.default;\nvar is_odd_1 = require(\"./is-odd\");\nexports.isOdd = is_odd_1.default;\nvar is_positive_1 = require(\"./is-positive\");\nexports.isPositive = is_positive_1.default;\nvar max_by_1 = require(\"./max-by\");\nexports.maxBy = max_by_1.default;\nvar min_by_1 = require(\"./min-by\");\nexports.minBy = min_by_1.default;\nvar mod_1 = require(\"./mod\");\nexports.mod = mod_1.default;\nvar to_degree_1 = require(\"./to-degree\");\nexports.toDegree = to_degree_1.default;\nvar to_integer_1 = require(\"./to-integer\");\nexports.toInteger = to_integer_1.default;\nvar to_radian_1 = require(\"./to-radian\");\nexports.toRadian = to_radian_1.default;\n// object\nvar for_in_1 = require(\"./for-in\");\nexports.forIn = for_in_1.default;\nvar has_1 = require(\"./has\");\nexports.has = has_1.default;\nvar has_key_1 = require(\"./has-key\");\nexports.hasKey = has_key_1.default;\nvar has_value_1 = require(\"./has-value\");\nexports.hasValue = has_value_1.default;\nvar keys_1 = require(\"./keys\");\nexports.keys = keys_1.default;\nvar is_match_1 = require(\"./is-match\");\nexports.isMatch = is_match_1.default;\nvar values_1 = require(\"./values\");\nexports.values = values_1.default;\n// string\nvar lower_case_1 = require(\"./lower-case\");\nexports.lowerCase = lower_case_1.default;\nvar lower_first_1 = require(\"./lower-first\");\nexports.lowerFirst = lower_first_1.default;\nvar substitute_1 = require(\"./substitute\");\nexports.substitute = substitute_1.default;\nvar upper_case_1 = require(\"./upper-case\");\nexports.upperCase = upper_case_1.default;\nvar upper_first_1 = require(\"./upper-first\");\nexports.upperFirst = upper_first_1.default;\n// type\nvar get_type_1 = require(\"./get-type\");\nexports.getType = get_type_1.default;\nvar is_arguments_1 = require(\"./is-arguments\");\nexports.isArguments = is_arguments_1.default;\nvar is_array_1 = require(\"./is-array\");\nexports.isArray = is_array_1.default;\nvar is_array_like_1 = require(\"./is-array-like\");\nexports.isArrayLike = is_array_like_1.default;\nvar is_boolean_1 = require(\"./is-boolean\");\nexports.isBoolean = is_boolean_1.default;\nvar is_date_1 = require(\"./is-date\");\nexports.isDate = is_date_1.default;\nvar is_error_1 = require(\"./is-error\");\nexports.isError = is_error_1.default;\nvar is_function_1 = require(\"./is-function\");\nexports.isFunction = is_function_1.default;\nvar is_finite_1 = require(\"./is-finite\");\nexports.isFinite = is_finite_1.default;\nvar is_nil_1 = require(\"./is-nil\");\nexports.isNil = is_nil_1.default;\nvar is_null_1 = require(\"./is-null\");\nexports.isNull = is_null_1.default;\nvar is_number_1 = require(\"./is-number\");\nexports.isNumber = is_number_1.default;\nvar is_object_1 = require(\"./is-object\");\nexports.isObject = is_object_1.default;\nvar is_object_like_1 = require(\"./is-object-like\");\nexports.isObjectLike = is_object_like_1.default;\nvar is_plain_object_1 = require(\"./is-plain-object\");\nexports.isPlainObject = is_plain_object_1.default;\nvar is_prototype_1 = require(\"./is-prototype\");\nexports.isPrototype = is_prototype_1.default;\nvar is_reg_exp_1 = require(\"./is-reg-exp\");\nexports.isRegExp = is_reg_exp_1.default;\nvar is_string_1 = require(\"./is-string\");\nexports.isString = is_string_1.default;\nvar is_type_1 = require(\"./is-type\");\nexports.isType = is_type_1.default;\nvar is_undefined_1 = require(\"./is-undefined\");\nexports.isUndefined = is_undefined_1.default;\nvar is_element_1 = require(\"./is-element\");\nexports.isElement = is_element_1.default;\nvar request_animation_frame_1 = require(\"./request-animation-frame\");\nexports.requestAnimationFrame = request_animation_frame_1.default;\nvar clear_animation_frame_1 = require(\"./clear-animation-frame\");\nexports.clearAnimationFrame = clear_animation_frame_1.default;\n// other\nvar augment_1 = require(\"./augment\");\nexports.augment = augment_1.default;\nvar clone_1 = require(\"./clone\");\nexports.clone = clone_1.default;\nvar debounce_1 = require(\"./debounce\");\nexports.debounce = debounce_1.default;\nvar memoize_1 = require(\"./memoize\");\nexports.memoize = memoize_1.default;\nvar deep_mix_1 = require(\"./deep-mix\");\nexports.deepMix = deep_mix_1.default;\nvar each_1 = require(\"./each\");\nexports.each = each_1.default;\nvar extend_1 = require(\"./extend\");\nexports.extend = extend_1.default;\nvar index_of_1 = require(\"./index-of\");\nexports.indexOf = index_of_1.default;\nvar is_empty_1 = require(\"./is-empty\");\nexports.isEmpty = is_empty_1.default;\nvar is_equal_1 = require(\"./is-equal\");\nexports.isEqual = is_equal_1.default;\nvar is_equal_with_1 = require(\"./is-equal-with\");\nexports.isEqualWith = is_equal_with_1.default;\nvar map_1 = require(\"./map\");\nexports.map = map_1.default;\nvar map_values_1 = require(\"./map-values\");\nexports.mapValues = map_values_1.default;\nvar mix_1 = require(\"./mix\");\nexports.mix = mix_1.default;\nexports.assign = mix_1.default;\nvar get_1 = require(\"./get\");\nexports.get = get_1.default;\nvar set_1 = require(\"./set\");\nexports.set = set_1.default;\nvar pick_1 = require(\"./pick\");\nexports.pick = pick_1.default;\nvar throttle_1 = require(\"./throttle\");\nexports.throttle = throttle_1.default;\nvar to_array_1 = require(\"./to-array\");\nexports.toArray = to_array_1.default;\nvar to_string_1 = require(\"./to-string\");\nexports.toString = to_string_1.default;\nvar unique_id_1 = require(\"./unique-id\");\nexports.uniqueId = unique_id_1.default;\nvar noop_1 = require(\"./noop\");\nexports.noop = noop_1.default;\nvar identity_1 = require(\"./identity\");\nexports.identity = identity_1.default;\nvar size_1 = require(\"./size\");\nexports.size = size_1.default;\n// 不知道为什么,需要把这个 export不然 ts 会报类型错误\nvar cache_1 = require(\"./cache\");\nexports.Cache = cache_1.default;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 是否是参数类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nvar is_type_1 = require(\"./is-type\");\nvar isArguments = function (value) {\n return is_type_1.default(value, 'Arguments');\n};\nexports.default = isArguments;\n//# sourceMappingURL=is-arguments.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isArrayLike = function (value) {\n /**\n * isArrayLike([1, 2, 3]) => true\n * isArrayLike(document.body.children) => true\n * isArrayLike('abc') => true\n * isArrayLike(Function) => false\n */\n return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\nexports.default = isArrayLike;\n//# sourceMappingURL=is-array-like.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_type_1 = require(\"./is-type\");\nexports.default = (function (value) {\n return Array.isArray ?\n Array.isArray(value) :\n is_type_1.default(value, 'Array');\n});\n//# sourceMappingURL=is-array.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 是否是布尔类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nvar is_type_1 = require(\"./is-type\");\nvar isBoolean = function (value) {\n return is_type_1.default(value, 'Boolean');\n};\nexports.default = isBoolean;\n//# sourceMappingURL=is-boolean.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_type_1 = require(\"./is-type\");\nvar isDate = function (value) {\n return is_type_1.default(value, 'Date');\n};\nexports.default = isDate;\n//# sourceMappingURL=is-date.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_number_1 = require(\"./is-number\");\nvar isDecimal = function (num) {\n return is_number_1.default(num) && num % 1 !== 0;\n};\nexports.default = isDecimal;\n//# sourceMappingURL=is-decimal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 判断是否HTML元素\n * @return {Boolean} 是否HTML元素\n */\nvar isElement = function (o) {\n return o instanceof Element || o instanceof HTMLDocument;\n};\nexports.default = isElement;\n//# sourceMappingURL=is-element.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_nil_1 = require(\"./is-nil\");\nvar is_array_like_1 = require(\"./is-array-like\");\nvar get_type_1 = require(\"./get-type\");\nvar is_prototype_1 = require(\"./is-prototype\");\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction isEmpty(value) {\n /**\n * isEmpty(null) => true\n * isEmpty() => true\n * isEmpty(true) => true\n * isEmpty(1) => true\n * isEmpty([1, 2, 3]) => false\n * isEmpty('abc') => false\n * isEmpty({ a: 1 }) => false\n */\n if (is_nil_1.default(value)) {\n return true;\n }\n if (is_array_like_1.default(value)) {\n return !value.length;\n }\n var type = get_type_1.default(value);\n if (type === 'Map' || type === 'Set') {\n return !value.size;\n }\n if (is_prototype_1.default(value)) {\n return !Object.keys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\nexports.default = isEmpty;\n//# sourceMappingURL=is-empty.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_function_1 = require(\"./is-function\");\nvar is_equal_1 = require(\"./is-equal\");\n/**\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [fn] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * isEqualWith(array, other, customizer); // => true\n */\nexports.default = (function (value, other, fn) {\n if (!is_function_1.default(fn)) {\n return is_equal_1.default(value, other);\n }\n return !!fn(value, other);\n});\n//# sourceMappingURL=is-equal-with.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_object_like_1 = require(\"./is-object-like\");\nvar is_array_like_1 = require(\"./is-array-like\");\nvar is_string_1 = require(\"./is-string\");\nvar isEqual = function (value, other) {\n if (value === other) {\n return true;\n }\n if (!value || !other) {\n return false;\n }\n if (is_string_1.default(value) || is_string_1.default(other)) {\n return false;\n }\n if (is_array_like_1.default(value) || is_array_like_1.default(other)) {\n if (value.length !== other.length) {\n return false;\n }\n var rst = true;\n for (var i = 0; i < value.length; i++) {\n rst = isEqual(value[i], other[i]);\n if (!rst) {\n break;\n }\n }\n return rst;\n }\n if (is_object_like_1.default(value) || is_object_like_1.default(other)) {\n var valueKeys = Object.keys(value);\n var otherKeys = Object.keys(other);\n if (valueKeys.length !== otherKeys.length) {\n return false;\n }\n var rst = true;\n for (var i = 0; i < valueKeys.length; i++) {\n rst = isEqual(value[valueKeys[i]], other[valueKeys[i]]);\n if (!rst) {\n break;\n }\n }\n return rst;\n }\n return false;\n};\nexports.default = isEqual;\n//# sourceMappingURL=is-equal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 是否是参数类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nvar is_type_1 = require(\"./is-type\");\nvar isError = function (value) {\n return is_type_1.default(value, 'Error');\n};\nexports.default = isError;\n//# sourceMappingURL=is-error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_number_1 = require(\"./is-number\");\nvar isEven = function (num) {\n return is_number_1.default(num) && num % 2 === 0;\n};\nexports.default = isEven;\n//# sourceMappingURL=is-even.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 判断是否为有限数\n * @return {Boolean}\n */\nvar is_number_1 = require(\"./is-number\");\nfunction default_1(value) {\n return is_number_1.default(value) && isFinite(value);\n}\nexports.default = default_1;\n//# sourceMappingURL=is-finite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 是否为函数\n * @param {*} fn 对象\n * @return {Boolean} 是否函数\n */\nvar is_type_1 = require(\"./is-type\");\nexports.default = (function (value) {\n return is_type_1.default(value, 'Function');\n});\n//# sourceMappingURL=is-function.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_number_1 = require(\"./is-number\");\nvar isInteger = Number.isInteger ? Number.isInteger : function (num) {\n return is_number_1.default(num) && num % 1 === 0;\n};\nexports.default = isInteger;\n//# sourceMappingURL=is-integer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_nil_1 = require(\"./is-nil\");\nvar keys_1 = require(\"./keys\");\nfunction isMatch(obj, attrs) {\n var _keys = keys_1.default(attrs);\n var length = _keys.length;\n if (is_nil_1.default(obj))\n return !length;\n for (var i = 0; i < length; i += 1) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) {\n return false;\n }\n }\n return true;\n}\nexports.default = isMatch;\n//# sourceMappingURL=is-match.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_number_1 = require(\"./is-number\");\nvar isNegative = function (num) {\n return is_number_1.default(num) && num < 0;\n};\nexports.default = isNegative;\n//# sourceMappingURL=is-negative.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// isFinite,\nvar isNil = function (value) {\n /**\n * isNil(null) => true\n * isNil() => true\n */\n return value === null || value === undefined;\n};\nexports.default = isNil;\n//# sourceMappingURL=is-nil.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isNull = function (value) {\n return value === null;\n};\nexports.default = isNull;\n//# sourceMappingURL=is-null.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar PRECISION = 0.00001; // numbers less than this is considered as 0\nfunction isNumberEqual(a, b, precision) {\n if (precision === void 0) { precision = PRECISION; }\n return Math.abs((a - b)) < precision;\n}\nexports.default = isNumberEqual;\n;\n//# sourceMappingURL=is-number-equal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 判断是否数字\n * @return {Boolean} 是否数字\n */\nvar is_type_1 = require(\"./is-type\");\nvar isNumber = function (value) {\n return is_type_1.default(value, 'Number');\n};\nexports.default = isNumber;\n//# sourceMappingURL=is-number.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isObjectLike = function (value) {\n /**\n * isObjectLike({}) => true\n * isObjectLike([1, 2, 3]) => true\n * isObjectLike(Function) => false\n * isObjectLike(null) => false\n */\n return typeof value === 'object' && value !== null;\n};\nexports.default = isObjectLike;\n//# sourceMappingURL=is-object-like.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (function (value) {\n /**\n * isObject({}) => true\n * isObject([1, 2, 3]) => true\n * isObject(Function) => true\n * isObject(null) => false\n */\n var type = typeof value;\n return value !== null && type === 'object' || type === 'function';\n});\n//# sourceMappingURL=is-object.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_number_1 = require(\"./is-number\");\nvar isOdd = function (num) {\n return is_number_1.default(num) && num % 2 !== 0;\n};\nexports.default = isOdd;\n//# sourceMappingURL=is-odd.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_object_like_1 = require(\"./is-object-like\");\nvar is_type_1 = require(\"./is-type\");\nvar isPlainObject = function (value) {\n /**\n * isObjectLike(new Foo) => false\n * isObjectLike([1, 2, 3]) => false\n * isObjectLike({ x: 0, y: 0 }) => true\n * isObjectLike(Object.create(null)) => true\n */\n if (!is_object_like_1.default(value) || !is_type_1.default(value, 'Object')) {\n return false;\n }\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n var proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n};\nexports.default = isPlainObject;\n//# sourceMappingURL=is-plain-object.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_number_1 = require(\"./is-number\");\nvar isPositive = function (num) {\n return is_number_1.default(num) && num > 0;\n};\nexports.default = isPositive;\n//# sourceMappingURL=is-positive.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar objectProto = Object.prototype;\nvar isPrototype = function (value) {\n var Ctor = value && value.constructor;\n var proto = (typeof Ctor === 'function' && Ctor.prototype) || objectProto;\n return value === proto;\n};\nexports.default = isPrototype;\n//# sourceMappingURL=is-prototype.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_type_1 = require(\"./is-type\");\nvar isRegExp = function (str) {\n return is_type_1.default(str, 'RegExp');\n};\nexports.default = isRegExp;\n//# sourceMappingURL=is-reg-exp.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_type_1 = require(\"./is-type\");\nexports.default = (function (str) {\n return is_type_1.default(str, 'String');\n});\n//# sourceMappingURL=is-string.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nexports.default = isType;\n//# sourceMappingURL=is-type.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isUndefined = function (value) {\n return value === undefined;\n};\nexports.default = isUndefined;\n//# sourceMappingURL=is-undefined.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_function_1 = require(\"./is-function\");\nvar keys = Object.keys ? function (obj) { return Object.keys(obj); } : function (obj) {\n var result = [];\n each_1.default(obj, function (value, key) {\n if (!(is_function_1.default(obj) && key === 'prototype')) {\n result.push(key);\n }\n });\n return result;\n};\nexports.default = keys;\n//# sourceMappingURL=keys.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_like_1 = require(\"./is-array-like\");\nfunction last(o) {\n if (is_array_like_1.default(o)) {\n var arr = o;\n return arr[arr.length - 1];\n }\n return undefined;\n}\nexports.default = last;\n//# sourceMappingURL=last.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar to_string_1 = require(\"./to-string\");\nvar lowerCase = function (str) {\n return to_string_1.default(str).toLowerCase();\n};\nexports.default = lowerCase;\n//# sourceMappingURL=lower-case.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar to_string_1 = require(\"./to-string\");\nvar lowerFirst = function (value) {\n var str = to_string_1.default(value);\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\nexports.default = lowerFirst;\n//# sourceMappingURL=lower-first.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_nil_1 = require(\"./is-nil\");\nvar is_object_1 = require(\"./is-object\");\nvar identity = function (v) { return v; };\nexports.default = (function (object, func) {\n if (func === void 0) { func = identity; }\n var r = {};\n if (is_object_1.default(object) && !is_nil_1.default(object)) {\n Object.keys(object).forEach(function (key) {\n // @ts-ignore\n r[key] = func(object[key], key);\n });\n }\n return r;\n});\n//# sourceMappingURL=map-values.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_array_like_1 = require(\"./is-array-like\");\nvar map = function (arr, func) {\n if (!is_array_like_1.default(arr)) {\n // @ts-ignore\n return arr;\n }\n var result = [];\n each_1.default(arr, function (value, index) {\n result.push(func(value, index));\n });\n return result;\n};\nexports.default = map;\n//# sourceMappingURL=map.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_array_1 = require(\"./is-array\");\nvar is_function_1 = require(\"./is-function\");\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nexports.default = (function (arr, fn) {\n if (!is_array_1.default(arr)) {\n return undefined;\n }\n var max = arr[0];\n var maxData;\n if (is_function_1.default(fn)) {\n maxData = fn(arr[0]);\n }\n else {\n maxData = arr[0][fn];\n }\n var data;\n each_1.default(arr, function (val) {\n if (is_function_1.default(fn)) {\n data = fn(val);\n }\n else {\n data = val[fn];\n }\n if (data > maxData) {\n max = val;\n maxData = data;\n }\n });\n return max;\n});\n//# sourceMappingURL=max-by.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_function_1 = require(\"./is-function\");\n/**\n * _.memoize(calColor);\n * _.memoize(calColor, (...args) => args[0]);\n * @param f\n * @param resolver\n */\nexports.default = (function (f, resolver) {\n if (!is_function_1.default(f)) {\n throw new TypeError('Expected a function');\n }\n var memoized = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // 使用方法构造 key如果不存在 resolver则直接取第一个参数作为 key\n var key = resolver ? resolver.apply(this, args) : args[0];\n var cache = memoized.cache;\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = f.apply(this, args);\n // 缓存起来\n cache.set(key, result);\n return result;\n };\n memoized.cache = new Map();\n return memoized;\n});\n//# sourceMappingURL=memoize.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_array_1 = require(\"./is-array\");\nvar is_function_1 = require(\"./is-function\");\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nexports.default = (function (arr, fn) {\n if (!is_array_1.default(arr)) {\n return undefined;\n }\n var min = arr[0];\n var minData;\n if (is_function_1.default(fn)) {\n minData = fn(arr[0]);\n }\n else {\n minData = arr[0][fn];\n }\n var data;\n each_1.default(arr, function (val) {\n if (is_function_1.default(fn)) {\n data = fn(val);\n }\n else {\n data = val[fn];\n }\n if (data < minData) {\n min = val;\n minData = data;\n }\n });\n return min;\n});\n//# sourceMappingURL=min-by.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// FIXME: Mutable param should be forbidden in static lang.\nfunction _mix(dist, obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n dist[key] = obj[key];\n }\n }\n}\nfunction mix(dist, src1, src2, src3) {\n if (src1)\n _mix(dist, src1);\n if (src2)\n _mix(dist, src2);\n if (src3)\n _mix(dist, src3);\n return dist;\n}\nexports.default = mix;\n//# sourceMappingURL=mix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar mod = function (n, m) {\n return ((n % m) + m) % m;\n};\nexports.default = mod;\n//# sourceMappingURL=mod.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (function () { });\n//# sourceMappingURL=noop.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar numColorCache = {};\nfunction numberToColor(num) {\n // 增加缓存\n var color = numColorCache[num];\n if (!color) {\n var str = num.toString(16);\n for (var i = str.length; i < 6; i++) {\n str = '0' + str;\n }\n color = '#' + str;\n numColorCache[num] = color;\n }\n return color;\n}\nexports.default = numberToColor;\n//# sourceMappingURL=number2color.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\nfunction parseRadius(radius) {\n var r1 = 0, r2 = 0, r3 = 0, r4 = 0;\n if (is_array_1.default(radius)) {\n if (radius.length === 1) {\n r1 = r2 = r3 = r4 = radius[0];\n }\n else if (radius.length === 2) {\n r1 = r3 = radius[0];\n r2 = r4 = radius[1];\n }\n else if (radius.length === 3) {\n r1 = radius[0];\n r2 = r4 = radius[1];\n r3 = radius[2];\n }\n else {\n r1 = radius[0];\n r2 = radius[1];\n r3 = radius[2];\n r4 = radius[3];\n }\n }\n else {\n r1 = r2 = r3 = r4 = radius;\n }\n return {\n r1: r1,\n r2: r2,\n r3: r3,\n r4: r4\n };\n}\nexports.default = parseRadius;\n//# sourceMappingURL=parse-radius.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_plain_object_1 = require(\"./is-plain-object\");\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nexports.default = (function (object, keys) {\n if (object === null || !is_plain_object_1.default(object)) {\n return {};\n }\n var result = {};\n each_1.default(keys, function (key) {\n if (hasOwnProperty.call(object, key)) {\n result[key] = object[key];\n }\n });\n return result;\n});\n//# sourceMappingURL=pick.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_like_1 = require(\"./is-array-like\");\nvar splice = Array.prototype.splice;\nvar pullAt = function pullAt(arr, indexes) {\n if (!is_array_like_1.default(arr)) {\n return [];\n }\n var length = arr ? indexes.length : 0;\n var last = length - 1;\n while (length--) {\n var previous = void 0;\n var index = indexes[length];\n if (length === last || index !== previous) {\n previous = index;\n splice.call(arr, index, 1);\n }\n }\n return arr;\n};\nexports.default = pullAt;\n//# sourceMappingURL=pull-at.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar arrPrototype = Array.prototype;\nvar splice = arrPrototype.splice;\nvar indexOf = arrPrototype.indexOf;\nvar pull = function (arr) {\n var values = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n var fromIndex = -1;\n while ((fromIndex = indexOf.call(arr, value)) > -1) {\n splice.call(arr, fromIndex, 1);\n }\n }\n return arr;\n};\nexports.default = pull;\n//# sourceMappingURL=pull.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_array_1 = require(\"./is-array\");\nvar is_plain_object_1 = require(\"./is-plain-object\");\nvar reduce = function (arr, fn, init) {\n if (!is_array_1.default(arr) && !is_plain_object_1.default(arr)) {\n return arr;\n }\n var result = init;\n each_1.default(arr, function (data, i) {\n result = fn(result, data, i);\n });\n return result;\n};\nexports.default = reduce;\n//# sourceMappingURL=reduce.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_like_1 = require(\"./is-array-like\");\nvar pull_at_1 = require(\"./pull-at\");\nvar remove = function (arr, predicate) {\n /**\n * const arr = [1, 2, 3, 4]\n * const evens = remove(arr, n => n % 2 == 0)\n * console.log(arr) // => [1, 3]\n * console.log(evens) // => [2, 4]\n */\n var result = [];\n if (!is_array_like_1.default(arr)) {\n return result;\n }\n var i = -1;\n var indexes = [];\n var length = arr.length;\n while (++i < length) {\n var value = arr[i];\n if (predicate(value, i, arr)) {\n result.push(value);\n indexes.push(i);\n }\n }\n pull_at_1.default(arr, indexes);\n return result;\n};\nexports.default = remove;\n//# sourceMappingURL=remove.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction requestAnimationFrame(fn) {\n var method = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n // @ts-ignore\n window.mozRequestAnimationFrame ||\n // @ts-ignore\n window.msRequestAnimationFrame ||\n function (f) {\n return setTimeout(f, 16);\n };\n return method(fn);\n}\nexports.default = requestAnimationFrame;\n;\n//# sourceMappingURL=request-animation-frame.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_object_1 = require(\"./is-object\");\nvar is_string_1 = require(\"./is-string\");\nvar is_number_1 = require(\"./is-number\");\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param path\n * @param value\n */\nexports.default = (function (obj, path, value) {\n var o = obj;\n var keyArr = is_string_1.default(path) ? path.split('.') : path;\n keyArr.forEach(function (key, idx) {\n // 不是最后一个\n if (idx < keyArr.length - 1) {\n if (!is_object_1.default(o[key])) {\n o[key] = is_number_1.default(keyArr[idx + 1]) ? [] : {};\n }\n o = o[key];\n }\n else {\n o[key] = value;\n }\n });\n return obj;\n});\n//# sourceMappingURL=set.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_nil_1 = require(\"./is-nil\");\nvar is_array_like_1 = require(\"./is-array-like\");\nfunction size(o) {\n if (is_nil_1.default(o)) {\n return 0;\n }\n if (is_array_like_1.default(o)) {\n return o.length;\n }\n return Object.keys(o).length;\n}\nexports.default = size;\n//# sourceMappingURL=size.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 只要有一个满足条件就返回 true\n * @param arr\n * @param func\n */\nvar some = function (arr, func) {\n for (var i = 0; i < arr.length; i++) {\n if (func(arr[i], i))\n return true;\n }\n return false;\n};\nexports.default = some;\n//# sourceMappingURL=some.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\nvar is_string_1 = require(\"./is-string\");\nvar is_function_1 = require(\"./is-function\");\nfunction sortBy(arr, key) {\n var comparer;\n if (is_function_1.default(key)) {\n comparer = function (a, b) { return key(a) - key(b); };\n }\n else {\n var keys_1 = [];\n if (is_string_1.default(key)) {\n keys_1.push(key);\n }\n else if (is_array_1.default(key)) {\n keys_1 = key;\n }\n comparer = function (a, b) {\n for (var i = 0; i < keys_1.length; i += 1) {\n var prop = keys_1[i];\n if (a[prop] > b[prop]) {\n return 1;\n }\n if (a[prop] < b[prop]) {\n return -1;\n }\n }\n return 0;\n };\n }\n arr.sort(comparer);\n return arr;\n}\nexports.default = sortBy;\n//# sourceMappingURL=sort-by.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_1 = require(\"./is-array\");\nvar is_string_1 = require(\"./is-string\");\nfunction startsWith(arr, e) {\n return (is_array_1.default(arr) || is_string_1.default(arr)) ? arr[0] === e : false;\n}\nexports.default = startsWith;\n//# sourceMappingURL=starts-with.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction substitute(str, o) {\n if (!str || !o) {\n return str;\n }\n return str.replace(/\\\\?\\{([^{}]+)\\}/g, function (match, name) {\n if (match.charAt(0) === '\\\\') {\n return match.slice(1);\n }\n return (o[name] === undefined) ? '' : o[name];\n });\n}\nexports.default = substitute;\n//# sourceMappingURL=substitute.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (function (func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options)\n options = {};\n var later = function () {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout)\n context = args = null;\n };\n var throttled = function () {\n var now = Date.now();\n if (!previous && options.leading === false)\n previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout)\n context = args = null;\n }\n else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n return throttled;\n});\n//# sourceMappingURL=throttle.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_array_like_1 = require(\"./is-array-like\");\nexports.default = (function (value) {\n return is_array_like_1.default(value) ? Array.prototype.slice.call(value) : [];\n});\n//# sourceMappingURL=to-array.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DEGREE = 180 / Math.PI;\nvar toDegree = function (radian) {\n return DEGREE * radian;\n};\nexports.default = toDegree;\n//# sourceMappingURL=to-degree.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = parseInt;\n//# sourceMappingURL=to-integer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar RADIAN = Math.PI / 180;\nvar toRadian = function (degree) {\n return RADIAN * degree;\n};\nexports.default = toRadian;\n//# sourceMappingURL=to-radian.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_nil_1 = require(\"./is-nil\");\nexports.default = (function (value) {\n if (is_nil_1.default(value))\n return '';\n return value.toString();\n});\n//# sourceMappingURL=to-string.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar uniq_1 = require(\"./uniq\");\nvar union = function () {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n return uniq_1.default([].concat.apply([], sources));\n};\nexports.default = union;\n//# sourceMappingURL=union.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contains_1 = require(\"./contains\");\nvar each_1 = require(\"./each\");\nvar uniq = function (arr) {\n var resultArr = [];\n each_1.default(arr, function (item) {\n if (!contains_1.default(resultArr, item)) {\n resultArr.push(item);\n }\n });\n return resultArr;\n};\nexports.default = uniq;\n//# sourceMappingURL=uniq.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar map = {};\nexports.default = (function (prefix) {\n prefix = prefix || 'g';\n if (!map[prefix]) {\n map[prefix] = 1;\n }\n else {\n map[prefix] += 1;\n }\n return prefix + map[prefix];\n});\n//# sourceMappingURL=unique-id.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar to_string_1 = require(\"./to-string\");\nvar upperCase = function (str) {\n return to_string_1.default(str).toUpperCase();\n};\nexports.default = upperCase;\n//# sourceMappingURL=upper-case.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar to_string_1 = require(\"./to-string\");\nvar upperFirst = function (value) {\n var str = to_string_1.default(value);\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\nexports.default = upperFirst;\n//# sourceMappingURL=upper-first.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_array_1 = require(\"./is-array\");\nvar is_nil_1 = require(\"./is-nil\");\nexports.default = (function (data, name) {\n var rst = [];\n var tmpMap = {};\n data.forEach(function (obj) {\n var value = obj[name];\n if (!is_nil_1.default(value)) {\n // flatten\n if (!is_array_1.default(value)) {\n value = [value];\n }\n each_1.default(value, function (val) {\n // unique\n if (!tmpMap[val]) {\n rst.push(val);\n tmpMap[val] = true;\n }\n });\n }\n });\n return rst;\n});\n//# sourceMappingURL=values-of-key.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar each_1 = require(\"./each\");\nvar is_function_1 = require(\"./is-function\");\n// @ts-ignore\nvar values = Object.values ? function (obj) { return Object.values(obj); } : function (obj) {\n var result = [];\n each_1.default(obj, function (value, key) {\n if (!(is_function_1.default(obj) && key === 'prototype')) {\n result.push(value);\n }\n });\n return result;\n};\nexports.default = values;\n//# sourceMappingURL=values.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * 封装事件便于使用上下文this,和便于解除事件时使用\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\nfunction wrapBehavior(obj, action) {\n if (obj['_wrap_' + action]) {\n return obj['_wrap_' + action];\n }\n var method = function (e) {\n obj[action](e);\n };\n obj['_wrap_' + action] = method;\n return method;\n}\nexports.default = wrapBehavior;\n//# sourceMappingURL=wrap-behavior.js.map","\nmodule.exports = absolutize\n\n/**\n * redefine `path` with absolute coordinates\n *\n * @param {Array} path\n * @return {Array}\n */\n\nfunction absolutize(path){\n\tvar startX = 0\n\tvar startY = 0\n\tvar x = 0\n\tvar y = 0\n\n\treturn path.map(function(seg){\n\t\tseg = seg.slice()\n\t\tvar type = seg[0]\n\t\tvar command = type.toUpperCase()\n\n\t\t// is relative\n\t\tif (type != command) {\n\t\t\tseg[0] = command\n\t\t\tswitch (type) {\n\t\t\t\tcase 'a':\n\t\t\t\t\tseg[6] += x\n\t\t\t\t\tseg[7] += y\n\t\t\t\t\tbreak\n\t\t\t\tcase 'v':\n\t\t\t\t\tseg[1] += y\n\t\t\t\t\tbreak\n\t\t\t\tcase 'h':\n\t\t\t\t\tseg[1] += x\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tfor (var i = 1; i < seg.length;) {\n\t\t\t\t\t\tseg[i++] += x\n\t\t\t\t\t\tseg[i++] += y\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// update cursor state\n\t\tswitch (command) {\n\t\t\tcase 'Z':\n\t\t\t\tx = startX\n\t\t\t\ty = startY\n\t\t\t\tbreak\n\t\t\tcase 'H':\n\t\t\t\tx = seg[1]\n\t\t\t\tbreak\n\t\t\tcase 'V':\n\t\t\t\ty = seg[1]\n\t\t\t\tbreak\n\t\t\tcase 'M':\n\t\t\t\tx = startX = seg[1]\n\t\t\t\ty = startY = seg[2]\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tx = seg[seg.length - 2]\n\t\t\t\ty = seg[seg.length - 1]\n\t\t}\n\n\t\treturn seg\n\t})\n}\n","// https://d3js.org/d3-array/ v1.2.4 Copyright 2018 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) {\n 'use strict';\n function ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n function bisector(compare) {\n if (compare.length === 1)\n compare = ascendingComparator(compare);\n return {\n left: function (a, x, lo, hi) {\n if (lo == null)\n lo = 0;\n if (hi == null)\n hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0)\n lo = mid + 1;\n else\n hi = mid;\n }\n return lo;\n },\n right: function (a, x, lo, hi) {\n if (lo == null)\n lo = 0;\n if (hi == null)\n hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0)\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo;\n }\n };\n }\n function ascendingComparator(f) {\n return function (d, x) {\n return ascending(f(d), x);\n };\n }\n var ascendingBisect = bisector(ascending);\n var bisectRight = ascendingBisect.right;\n var bisectLeft = ascendingBisect.left;\n function pairs(array, f) {\n if (f == null)\n f = pair;\n var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n)\n pairs[i] = f(p, p = array[++i]);\n return pairs;\n }\n function pair(a, b) {\n return [a, b];\n }\n function cross(values0, values1, reduce) {\n var n0 = values0.length, n1 = values1.length, values = new Array(n0 * n1), i0, i1, i, value0;\n if (reduce == null)\n reduce = pair;\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n return values;\n }\n function descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n }\n function number(x) {\n return x === null ? NaN : +x;\n }\n function variance(values, valueof) {\n var n = values.length, m = 0, i = -1, mean = 0, value, delta, sum = 0;\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n if (m > 1)\n return sum / (m - 1);\n }\n function deviation(array, f) {\n var v = variance(array, f);\n return v ? Math.sqrt(v) : v;\n }\n function extent(values, valueof) {\n var n = values.length, i = -1, value, min, max;\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value)\n min = value;\n if (max < value)\n max = value;\n }\n }\n }\n }\n }\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value)\n min = value;\n if (max < value)\n max = value;\n }\n }\n }\n }\n }\n return [min, max];\n }\n var array = Array.prototype;\n var slice = array.slice;\n var map = array.map;\n function constant(x) {\n return function () {\n return x;\n };\n }\n function identity(x) {\n return x;\n }\n function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n var i = -1, n = Math.max(0, Math.ceil((stop - start) / step)) | 0, range = new Array(n);\n while (++i < n) {\n range[i] = start + i * step;\n }\n return range;\n }\n var e10 = Math.sqrt(50), e5 = Math.sqrt(10), e2 = Math.sqrt(2);\n function ticks(start, stop, count) {\n var reverse, i = -1, n, ticks, step;\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0)\n return [start];\n if (reverse = stop < start)\n n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step))\n return [];\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n)\n ticks[i] = (start + i) * step;\n }\n else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n)\n ticks[i] = (start - i) / step;\n }\n if (reverse)\n ticks.reverse();\n return ticks;\n }\n function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count), power = Math.floor(Math.log(step) / Math.LN10), error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n }\n function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count), step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), error = step0 / step1;\n if (error >= e10)\n step1 *= 10;\n else if (error >= e5)\n step1 *= 5;\n else if (error >= e2)\n step1 *= 2;\n return stop < start ? -step1 : step1;\n }\n function sturges(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n }\n function histogram() {\n var value = identity, domain = extent, threshold = sturges;\n function histogram(data) {\n var i, n = data.length, x, values = new Array(n);\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n var xz = domain(values), x0 = xz[0], x1 = xz[1], tz = threshold(values, x0, x1);\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n tz = tickStep(x0, x1, tz);\n tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n }\n // Remove any thresholds outside the domain.\n var m = tz.length;\n while (tz[0] <= x0)\n tz.shift(), --m;\n while (tz[m - 1] > x1)\n tz.pop(), --m;\n var bins = new Array(m + 1), bin;\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n // Assign data to bins by value, ignoring any outside the domain.\n for (i = 0; i < n; ++i) {\n x = values[i];\n if (x0 <= x && x <= x1) {\n bins[bisectRight(tz, x, 0, m)].push(data[i]);\n }\n }\n return bins;\n }\n histogram.value = function (_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n histogram.domain = function (_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n histogram.thresholds = function (_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n };\n return histogram;\n }\n function quantile(values, p, valueof) {\n if (valueof == null)\n valueof = number;\n if (!(n = values.length))\n return;\n if ((p = +p) <= 0 || n < 2)\n return +valueof(values[0], 0, values);\n if (p >= 1)\n return +valueof(values[n - 1], n - 1, values);\n var n, i = (n - 1) * p, i0 = Math.floor(i), value0 = +valueof(values[i0], i0, values), value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n }\n function freedmanDiaconis(values, min, max) {\n values = map.call(values, number).sort(ascending);\n return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n }\n function scott(values, min, max) {\n return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n }\n function max(values, valueof) {\n var n = values.length, i = -1, value, max;\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n return max;\n }\n function mean(values, valueof) {\n var n = values.length, m = n, i = -1, value, sum = 0;\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i])))\n sum += value;\n else\n --m;\n }\n }\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values))))\n sum += value;\n else\n --m;\n }\n }\n if (m)\n return sum / m;\n }\n function median(values, valueof) {\n var n = values.length, i = -1, value, numbers = [];\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) {\n numbers.push(value);\n }\n }\n }\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) {\n numbers.push(value);\n }\n }\n }\n return quantile(numbers.sort(ascending), 0.5);\n }\n function merge(arrays) {\n var n = arrays.length, m, i = -1, j = 0, merged, array;\n while (++i < n)\n j += arrays[i].length;\n merged = new Array(j);\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n return merged;\n }\n function min(values, valueof) {\n var n = values.length, i = -1, value, min;\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n return min;\n }\n function permute(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--)\n permutes[i] = array[indexes[i]];\n return permutes;\n }\n function scan(values, compare) {\n if (!(n = values.length))\n return;\n var n, i = 0, j = 0, xi, xj = values[j];\n if (compare == null)\n compare = ascending;\n while (++i < n) {\n if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n xj = xi, j = i;\n }\n }\n if (compare(xj, xj) === 0)\n return j;\n }\n function shuffle(array, i0, i1) {\n var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), t, i;\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n return array;\n }\n function sum(values, valueof) {\n var n = values.length, i = -1, value, sum = 0;\n if (valueof == null) {\n while (++i < n) {\n if (value = +values[i])\n sum += value; // Note: zero and null are equivalent.\n }\n }\n else {\n while (++i < n) {\n if (value = +valueof(values[i], i, values))\n sum += value;\n }\n }\n return sum;\n }\n function transpose(matrix) {\n if (!(n = matrix.length))\n return [];\n for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n }\n function length(d) {\n return d.length;\n }\n function zip() {\n return transpose(arguments);\n }\n exports.bisect = bisectRight;\n exports.bisectRight = bisectRight;\n exports.bisectLeft = bisectLeft;\n exports.ascending = ascending;\n exports.bisector = bisector;\n exports.cross = cross;\n exports.descending = descending;\n exports.deviation = deviation;\n exports.extent = extent;\n exports.histogram = histogram;\n exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n exports.thresholdScott = scott;\n exports.thresholdSturges = sturges;\n exports.max = max;\n exports.mean = mean;\n exports.median = median;\n exports.merge = merge;\n exports.min = min;\n exports.pairs = pairs;\n exports.permute = permute;\n exports.quantile = quantile;\n exports.range = range;\n exports.scan = scan;\n exports.shuffle = shuffle;\n exports.sum = sum;\n exports.ticks = ticks;\n exports.tickIncrement = tickIncrement;\n exports.tickStep = tickStep;\n exports.transpose = transpose;\n exports.variance = variance;\n exports.zip = zip;\n Object.defineProperty(exports, '__esModule', { value: true });\n})));\n","// https://d3js.org/d3-collection/ v1.0.7 Copyright 2018 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) {\n 'use strict';\n var prefix = \"$\";\n function Map() { }\n Map.prototype = map.prototype = {\n constructor: Map,\n has: function (key) {\n return (prefix + key) in this;\n },\n get: function (key) {\n return this[prefix + key];\n },\n set: function (key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function (key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function () {\n for (var property in this)\n if (property[0] === prefix)\n delete this[property];\n },\n keys: function () {\n var keys = [];\n for (var property in this)\n if (property[0] === prefix)\n keys.push(property.slice(1));\n return keys;\n },\n values: function () {\n var values = [];\n for (var property in this)\n if (property[0] === prefix)\n values.push(this[property]);\n return values;\n },\n entries: function () {\n var entries = [];\n for (var property in this)\n if (property[0] === prefix)\n entries.push({ key: property.slice(1), value: this[property] });\n return entries;\n },\n size: function () {\n var size = 0;\n for (var property in this)\n if (property[0] === prefix)\n ++size;\n return size;\n },\n empty: function () {\n for (var property in this)\n if (property[0] === prefix)\n return false;\n return true;\n },\n each: function (f) {\n for (var property in this)\n if (property[0] === prefix)\n f(this[property], property.slice(1), this);\n }\n };\n function map(object, f) {\n var map = new Map;\n // Copy constructor.\n if (object instanceof Map)\n object.each(function (value, key) { map.set(key, value); });\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1, n = object.length, o;\n if (f == null)\n while (++i < n)\n map.set(i, object[i]);\n else\n while (++i < n)\n map.set(f(o = object[i], i, object), o);\n }\n // Convert object to map.\n else if (object)\n for (var key in object)\n map.set(key, object[key]);\n return map;\n }\n function nest() {\n var keys = [], sortKeys = [], sortValues, rollup, nest;\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null)\n array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n var i = -1, n = array.length, key = keys[depth++], keyValue, value, valuesByKey = map(), values, result = createResult();\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n }\n else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n valuesByKey.each(function (values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n return result;\n }\n function entries(map$$1, depth) {\n if (++depth > keys.length)\n return map$$1;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length)\n array = map$$1.entries();\n else\n array = [], map$$1.each(function (v, k) { array.push({ key: k, values: entries(v, depth) }); });\n return sortKey != null ? array.sort(function (a, b) { return sortKey(a.key, b.key); }) : array;\n }\n return nest = {\n object: function (array) { return apply(array, 0, createObject, setObject); },\n map: function (array) { return apply(array, 0, createMap, setMap); },\n entries: function (array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function (d) { keys.push(d); return nest; },\n sortKeys: function (order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function (order) { sortValues = order; return nest; },\n rollup: function (f) { rollup = f; return nest; }\n };\n }\n function createObject() {\n return {};\n }\n function setObject(object, key, value) {\n object[key] = value;\n }\n function createMap() {\n return map();\n }\n function setMap(map$$1, key, value) {\n map$$1.set(key, value);\n }\n function Set() { }\n var proto = map.prototype;\n Set.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function (value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n };\n function set(object, f) {\n var set = new Set;\n // Copy constructor.\n if (object instanceof Set)\n object.each(function (value) { set.add(value); });\n // Otherwise, assume its an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null)\n while (++i < n)\n set.add(object[i]);\n else\n while (++i < n)\n set.add(f(object[i], i, object));\n }\n return set;\n }\n function keys(map) {\n var keys = [];\n for (var key in map)\n keys.push(key);\n return keys;\n }\n function values(map) {\n var values = [];\n for (var key in map)\n values.push(map[key]);\n return values;\n }\n function entries(map) {\n var entries = [];\n for (var key in map)\n entries.push({ key: key, value: map[key] });\n return entries;\n }\n exports.nest = nest;\n exports.set = set;\n exports.map = map;\n exports.keys = keys;\n exports.values = values;\n exports.entries = entries;\n Object.defineProperty(exports, '__esModule', { value: true });\n})));\n","// http://geoexamples.com/d3-composite-projections/ v1.3.2 Copyright 2019 Roger Veciana i Rovira\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-geo'), require('d3-path')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-geo', 'd3-path'], factory) :\n (global = global || self, factory(global.d3 = global.d3 || {}, global.d3, global.d3));\n}(this, (function (exports, d3Geo, d3Path) {\n 'use strict';\n var epsilon = 1e-6;\n function noop() { }\n var x0 = Infinity, y0 = x0, x1 = -x0, y1 = x1;\n var boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function () {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n };\n function boundsPoint(x, y) {\n if (x < x0)\n x0 = x;\n if (x > x1)\n x1 = x;\n if (y < y0)\n y0 = y;\n if (y > y1)\n y1 = y;\n }\n function fitExtent(projection, extent, object) {\n var w = extent[1][0] - extent[0][0], h = extent[1][1] - extent[0][1], clip = projection.clipExtent && projection.clipExtent();\n projection\n .scale(150)\n .translate([0, 0]);\n if (clip != null)\n projection.clipExtent(null);\n d3Geo.geoStream(object, projection.stream(boundsStream));\n var b = boundsStream.result(), k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n if (clip != null)\n projection.clipExtent(clip);\n return projection\n .scale(k * 150)\n .translate([x, y]);\n }\n function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n)\n streams[i].point(x, y); },\n sphere: function () { var i = -1; while (++i < n)\n streams[i].sphere(); },\n lineStart: function () { var i = -1; while (++i < n)\n streams[i].lineStart(); },\n lineEnd: function () { var i = -1; while (++i < n)\n streams[i].lineEnd(); },\n polygonStart: function () { var i = -1; while (++i < n)\n streams[i].polygonStart(); },\n polygonEnd: function () { var i = -1; while (++i < n)\n streams[i].polygonEnd(); }\n };\n }\n // A composite projection for the United States, configured by default for\n // 960×500. The projection also works quite well at 960×600 if you change the\n // scale to 1285 and adjust the translate accordingly. The set of standard\n // parallels for each region comes from USGS, which is published here:\n // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\n function albersUsa() {\n var cache, cacheStream, lower48 = d3Geo.geoAlbers(), lower48Point, alaska = d3Geo.geoConicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = d3Geo.geoConicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = { point: function (x, y) { point = [x, y]; } };\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n albersUsa.invert = function (coordinates) {\n var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n albersUsa.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n albersUsa.precision = function (_) {\n if (!arguments.length)\n return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n albersUsa.scale = function (_) {\n if (!arguments.length)\n return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n albersUsa.translate = function (_) {\n if (!arguments.length)\n return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n albersUsa.fitExtent = function (extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n albersUsa.fitSize = function (size, object) {\n return fitSize(albersUsa, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n albersUsa.drawCompositionBorders = function (context) {\n var hawaii1 = lower48([-102.91, 26.3]);\n var hawaii2 = lower48([-104.0, 27.5]);\n var hawaii3 = lower48([-108.0, 29.1]);\n var hawaii4 = lower48([-110.0, 29.1]);\n var alaska1 = lower48([-110.0, 26.7]);\n var alaska2 = lower48([-112.8, 27.6]);\n var alaska3 = lower48([-114.3, 30.6]);\n var alaska4 = lower48([-119.3, 30.1]);\n context.moveTo(hawaii1[0], hawaii1[1]);\n context.lineTo(hawaii2[0], hawaii2[1]);\n context.lineTo(hawaii3[0], hawaii3[1]);\n context.lineTo(hawaii4[0], hawaii4[1]);\n context.moveTo(alaska1[0], alaska1[1]);\n context.lineTo(alaska2[0], alaska2[1]);\n context.lineTo(alaska3[0], alaska3[1]);\n context.lineTo(alaska4[0], alaska4[1]);\n };\n albersUsa.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return albersUsa.scale(1070);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$1(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n)\n streams[i].point(x, y); },\n sphere: function () { var i = -1; while (++i < n)\n streams[i].sphere(); },\n lineStart: function () { var i = -1; while (++i < n)\n streams[i].lineStart(); },\n lineEnd: function () { var i = -1; while (++i < n)\n streams[i].lineEnd(); },\n polygonStart: function () { var i = -1; while (++i < n)\n streams[i].polygonStart(); },\n polygonEnd: function () { var i = -1; while (++i < n)\n streams[i].polygonEnd(); }\n };\n }\n // A composite projection for the United States, configured by default for\n // 960×500. Also works quite well at 960×600 with scale 1285. The set of\n // standard parallels for each region comes from USGS, which is published here:\n // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\n function albersUsaTerritories() {\n var cache, cacheStream, lower48 = d3Geo.geoAlbers(), lower48Point, alaska = d3Geo.geoConicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = d3Geo.geoConicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n puertoRico = d3Geo.geoConicEqualArea().rotate([66, 0]).center([0, 18]).parallels([8, 18]), puertoRicoPoint, //Taken from https://bl.ocks.org/mbostock/5629120\n samoa = d3Geo.geoEquirectangular().rotate([173, 14]), samoaPoint, // EPSG:4169\n guam = d3Geo.geoEquirectangular().rotate([-145, -16.8]), guamPoint, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n /*\n var puertoRicoBbox = [[-68.3, 19], [-63.9, 17]];\n var samoaBbox = [[-171, -14], [-168, -14.8]];\n var guamBbox = [[144, 20.8], [146.5, 12.7]];\n */\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point) ||\n (alaskaPoint.point(x, y), point) ||\n (hawaiiPoint.point(x, y), point) ||\n (puertoRicoPoint.point(x, y), point) ||\n (samoaPoint.point(x, y), point) ||\n (guamPoint.point(x, y), point);\n }\n albersUsa.invert = function (coordinates) {\n var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n /*\n //How are the return values calculated:\n console.info(\"******\");\n var c0 = puertoRico(puertoRicoBbox[0]);\n var x0 = (c0[0] - t[0]) / k;\n var y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 puertoRico\", x0 + ' - ' + y0);\n \n var c1 = puertoRico(puertoRicoBbox[1]);\n var x1 = (c1[0] - t[0]) / k;\n var y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 puertoRico\", x1 + ' - ' + y1);\n \n c0 = samoa(samoaBbox[0]);\n x0 = (c0[0] - t[0]) / k;\n y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 samoa\", x0 + ' - ' + y0);\n \n c1 = samoa(samoaBbox[1]);\n x1 = (c1[0] - t[0]) / k;\n y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 samoa\", x1 + ' - ' + y1);\n \n c0 = guam(guamBbox[0]);\n x0 = (c0[0] - t[0]) / k;\n y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 guam\", x0 + ' - ' + y0);\n \n c1 = guam(guamBbox[1]);\n x1 = (c1[0] - t[0]) / k;\n y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 guam\", x1 + ' - ' + y1);\n */\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : y >= 0.2064 && y < 0.2413 && x >= 0.312 && x < 0.385 ? puertoRico\n : y >= 0.09 && y < 0.1197 && x >= -0.4243 && x < -0.3232 ? samoa\n : y >= -0.0518 && y < 0.0895 && x >= -0.4243 && x < -0.3824 ? guam\n : lower48).invert(coordinates);\n };\n albersUsa.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$1([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream), puertoRico.stream(stream), samoa.stream(stream), guam.stream(stream)]);\n };\n albersUsa.precision = function (_) {\n if (!arguments.length) {\n return lower48.precision();\n }\n lower48.precision(_);\n alaska.precision(_);\n hawaii.precision(_);\n puertoRico.precision(_);\n samoa.precision(_);\n guam.precision(_);\n return reset();\n };\n albersUsa.scale = function (_) {\n if (!arguments.length) {\n return lower48.scale();\n }\n lower48.scale(_);\n alaska.scale(_ * 0.35);\n hawaii.scale(_);\n puertoRico.scale(_);\n samoa.scale(_ * 2);\n guam.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n albersUsa.translate = function (_) {\n if (!arguments.length) {\n return lower48.translate();\n }\n var k = lower48.scale(), x = +_[0], y = +_[1];\n /*\n var c0 = puertoRico.translate([x + 0.350 * k, y + 0.224 * k])(puertoRicoBbox[0]);\n var x0 = (x - c0[0]) / k;\n var y0 = (y - c0[1]) / k;\n \n var c1 = puertoRico.translate([x + 0.350 * k, y + 0.224 * k])(puertoRicoBbox[1]);\n var x1 = (x - c1[0]) / k;\n var y1 = (y - c1[1]) / k;\n \n console.info('puertoRico: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n \n c0 = samoa.translate([x - 0.492 * k, y + 0.09 * k])(samoaBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = samoa.translate([x - 0.492 * k, y + 0.09 * k])(samoaBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('samoa: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n \n c0 = guam.translate([x - 0.408 * k, y + 0.018 * k])(guamBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = guam.translate([x - 0.408 * k, y + 0.018 * k])(guamBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('guam: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n */\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.233 * k - epsilon]])\n .stream(pointStream);\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.233 * k - epsilon]])\n .stream(pointStream);\n puertoRicoPoint = puertoRico\n .translate([x + 0.350 * k, y + 0.224 * k])\n .clipExtent([[x + 0.312 * k + epsilon, y + 0.2064 * k + epsilon], [x + 0.385 * k - epsilon, y + 0.233 * k - epsilon]])\n .stream(pointStream);\n samoaPoint = samoa\n .translate([x - 0.492 * k, y + 0.09 * k])\n .clipExtent([[x - 0.4243 * k + epsilon, y + 0.0903 * k + epsilon], [x - 0.3233 * k - epsilon, y + 0.1197 * k - epsilon]])\n .stream(pointStream);\n guamPoint = guam\n .translate([x - 0.408 * k, y + 0.018 * k])\n .clipExtent([[x - 0.4244 * k + epsilon, y - 0.0519 * k + epsilon], [x - 0.3824 * k - epsilon, y + 0.0895 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n albersUsa.fitExtent = function (extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n albersUsa.fitSize = function (size, object) {\n return fitSize(albersUsa, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n albersUsa.drawCompositionBorders = function (context) {\n /*\n console.info(\"CLIP EXTENT hawaii: \", hawaii.clipExtent());\n console.info(\"UL BBOX:\", lower48.invert([hawaii.clipExtent()[0][0], hawaii.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", lower48.invert([hawaii.clipExtent()[1][0], hawaii.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", lower48.invert([hawaii.clipExtent()[1][0], hawaii.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", lower48.invert([hawaii.clipExtent()[0][0], hawaii.clipExtent()[1][1]]));\n \n console.info(\"CLIP EXTENT alaska: \", alaska.clipExtent());\n console.info(\"UL BBOX:\", lower48.invert([alaska.clipExtent()[0][0], alaska.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", lower48.invert([alaska.clipExtent()[1][0], alaska.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", lower48.invert([alaska.clipExtent()[1][0], alaska.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", lower48.invert([alaska.clipExtent()[0][0], alaska.clipExtent()[1][1]]));\n \n console.info(\"CLIP EXTENT puertoRico: \", puertoRico.clipExtent());\n console.info(\"UL BBOX:\", lower48.invert([puertoRico.clipExtent()[0][0], puertoRico.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", lower48.invert([puertoRico.clipExtent()[1][0], puertoRico.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", lower48.invert([puertoRico.clipExtent()[1][0], puertoRico.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", lower48.invert([puertoRico.clipExtent()[0][0], puertoRico.clipExtent()[1][1]]));\n \n console.info(\"CLIP EXTENT samoa: \", samoa.clipExtent());\n console.info(\"UL BBOX:\", lower48.invert([samoa.clipExtent()[0][0], samoa.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", lower48.invert([samoa.clipExtent()[1][0], samoa.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", lower48.invert([samoa.clipExtent()[1][0], samoa.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", lower48.invert([samoa.clipExtent()[0][0], samoa.clipExtent()[1][1]]));\n \n \n console.info(\"CLIP EXTENT guam: \", guam.clipExtent());\n console.info(\"UL BBOX:\", lower48.invert([guam.clipExtent()[0][0], guam.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", lower48.invert([guam.clipExtent()[1][0], guam.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", lower48.invert([guam.clipExtent()[1][0], guam.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", lower48.invert([guam.clipExtent()[0][0], guam.clipExtent()[1][1]]));\n */\n var ulhawaii = lower48([-110.4641, 28.2805]);\n var urhawaii = lower48([-104.0597, 28.9528]);\n var ldhawaii = lower48([-103.7049, 25.1031]);\n var llhawaii = lower48([-109.8337, 24.4531]);\n var ulalaska = lower48([-124.4745, 28.1407]);\n var uralaska = lower48([-110.931, 30.8844]);\n var ldalaska = lower48([-109.8337, 24.4531]);\n var llalaska = lower48([-122.4628, 21.8562]);\n var ulpuertoRico = lower48([-76.8579, 25.1544]);\n var urpuertoRico = lower48([-72.429, 24.2097]);\n var ldpuertoRico = lower48([-72.8265, 22.7056]);\n var llpuertoRico = lower48([-77.1852, 23.6392]);\n var ulsamoa = lower48([-125.0093, 29.7791]);\n var ursamoa = lower48([-118.5193, 31.3262]);\n var ldsamoa = lower48([-118.064, 29.6912]);\n var llsamoa = lower48([-124.4369, 28.169]);\n var ulguam = lower48([-128.1314, 37.4582]);\n var urguam = lower48([-125.2132, 38.214]);\n var ldguam = lower48([-122.3616, 30.5115]);\n var llguam = lower48([-125.0315, 29.8211]);\n context.moveTo(ulhawaii[0], ulhawaii[1]);\n context.lineTo(urhawaii[0], urhawaii[1]);\n context.lineTo(ldhawaii[0], ldhawaii[1]);\n context.lineTo(ldhawaii[0], ldhawaii[1]);\n context.lineTo(llhawaii[0], llhawaii[1]);\n context.closePath();\n context.moveTo(ulalaska[0], ulalaska[1]);\n context.lineTo(uralaska[0], uralaska[1]);\n context.lineTo(ldalaska[0], ldalaska[1]);\n context.lineTo(ldalaska[0], ldalaska[1]);\n context.lineTo(llalaska[0], llalaska[1]);\n context.closePath();\n context.moveTo(ulpuertoRico[0], ulpuertoRico[1]);\n context.lineTo(urpuertoRico[0], urpuertoRico[1]);\n context.lineTo(ldpuertoRico[0], ldpuertoRico[1]);\n context.lineTo(ldpuertoRico[0], ldpuertoRico[1]);\n context.lineTo(llpuertoRico[0], llpuertoRico[1]);\n context.closePath();\n context.moveTo(ulsamoa[0], ulsamoa[1]);\n context.lineTo(ursamoa[0], ursamoa[1]);\n context.lineTo(ldsamoa[0], ldsamoa[1]);\n context.lineTo(ldsamoa[0], ldsamoa[1]);\n context.lineTo(llsamoa[0], llsamoa[1]);\n context.closePath();\n context.moveTo(ulguam[0], ulguam[1]);\n context.lineTo(urguam[0], urguam[1]);\n context.lineTo(ldguam[0], ldguam[1]);\n context.lineTo(ldguam[0], ldguam[1]);\n context.lineTo(llguam[0], llguam[1]);\n context.closePath();\n };\n albersUsa.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return albersUsa.scale(1070);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$2(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n) {\n streams[i].point(x, y);\n } },\n sphere: function () { var i = -1; while (++i < n) {\n streams[i].sphere();\n } },\n lineStart: function () { var i = -1; while (++i < n) {\n streams[i].lineStart();\n } },\n lineEnd: function () { var i = -1; while (++i < n) {\n streams[i].lineEnd();\n } },\n polygonStart: function () { var i = -1; while (++i < n) {\n streams[i].polygonStart();\n } },\n polygonEnd: function () { var i = -1; while (++i < n) {\n streams[i].polygonEnd();\n } }\n };\n }\n // A composite projection for Spain, configured by default for 960×500.\n function conicConformalSpain() {\n var cache, cacheStream, iberianPeninsule = d3Geo.geoConicConformal().rotate([5, -38.6]).parallels([0, 60]), iberianPeninsulePoint, canaryIslands = d3Geo.geoConicConformal().rotate([5, -38.6]).parallels([0, 60]), canaryIslandsPoint, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n /*\n var iberianPeninsuleBbox = [[-11, 46], [4, 35]];\n var canaryIslandsBbox = [[-19.0, 28.85], [-12.7, 28.1]];\n */\n function conicConformalSpain(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (iberianPeninsulePoint.point(x, y), point) ||\n (canaryIslandsPoint.point(x, y), point);\n }\n conicConformalSpain.invert = function (coordinates) {\n var k = iberianPeninsule.scale(), t = iberianPeninsule.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= 0.05346 && y < 0.0897 && x >= -0.13388 && x < -0.0322 ? canaryIslands\n : iberianPeninsule).invert(coordinates);\n };\n conicConformalSpain.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$2([iberianPeninsule.stream(cacheStream = stream), canaryIslands.stream(stream)]);\n };\n conicConformalSpain.precision = function (_) {\n if (!arguments.length) {\n return iberianPeninsule.precision();\n }\n iberianPeninsule.precision(_);\n canaryIslands.precision(_);\n return reset();\n };\n conicConformalSpain.scale = function (_) {\n if (!arguments.length) {\n return iberianPeninsule.scale();\n }\n iberianPeninsule.scale(_);\n canaryIslands.scale(_);\n return conicConformalSpain.translate(iberianPeninsule.translate());\n };\n conicConformalSpain.translate = function (_) {\n if (!arguments.length) {\n return iberianPeninsule.translate();\n }\n var k = iberianPeninsule.scale(), x = +_[0], y = +_[1];\n /*\n var c0 = iberianPeninsule(iberianPeninsuleBbox[0]);\n var x0 = (x - c0[0]) / k;\n var y0 = (y - c0[1]) / k;\n \n var c1 = iberianPeninsule(iberianPeninsuleBbox[1]);\n var x1 = (x - c1[0]) / k;\n var y1 = (y - c1[1]) / k;\n \n console.info('Iberian Peninsula: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n \n c0 = canaryIslands.translate([x + 0.1 * k, y - 0.094 * k])(canaryIslandsBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = canaryIslands.translate([x + 0.1 * k, y - 0.094 * k])(canaryIslandsBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('Canry Islands: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n */\n iberianPeninsulePoint = iberianPeninsule\n .translate(_)\n .clipExtent([[x - 0.06857 * k, y - 0.1288 * k], [x + 0.13249 * k, y + 0.06 * k]])\n .stream(pointStream);\n canaryIslandsPoint = canaryIslands\n .translate([x + 0.1 * k, y - 0.094 * k])\n .clipExtent([[x - 0.1331 * k + epsilon, y + 0.053457 * k + epsilon], [x - 0.0354 * k - epsilon, y + 0.08969 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n conicConformalSpain.fitExtent = function (extent, object) {\n return fitExtent(conicConformalSpain, extent, object);\n };\n conicConformalSpain.fitSize = function (size, object) {\n return fitSize(conicConformalSpain, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return conicConformalSpain;\n }\n conicConformalSpain.drawCompositionBorders = function (context) {\n /*\n console.info(\"CLIP EXTENT: \", canaryIslands.clipExtent());\n console.info(\"UL BBOX:\", iberianPeninsule.invert([canaryIslands.clipExtent()[0][0], canaryIslands.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", iberianPeninsule.invert([canaryIslands.clipExtent()[1][0], canaryIslands.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", iberianPeninsule.invert([canaryIslands.clipExtent()[1][0], canaryIslands.clipExtent()[1][1]]));\n */\n var ulCanaryIslands = iberianPeninsule([-14.0346750, 34.965007]);\n var urCanaryIslands = iberianPeninsule([-7.4208899, 35.536988]);\n var ldCanaryIslands = iberianPeninsule([-7.3148275, 33.54359]);\n context.moveTo(ulCanaryIslands[0], ulCanaryIslands[1]);\n context.lineTo(urCanaryIslands[0], urCanaryIslands[1]);\n context.lineTo(ldCanaryIslands[0], ldCanaryIslands[1]);\n };\n conicConformalSpain.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return conicConformalSpain.scale(2700);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$3(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n) {\n streams[i].point(x, y);\n } },\n sphere: function () { var i = -1; while (++i < n) {\n streams[i].sphere();\n } },\n lineStart: function () { var i = -1; while (++i < n) {\n streams[i].lineStart();\n } },\n lineEnd: function () { var i = -1; while (++i < n) {\n streams[i].lineEnd();\n } },\n polygonStart: function () { var i = -1; while (++i < n) {\n streams[i].polygonStart();\n } },\n polygonEnd: function () { var i = -1; while (++i < n) {\n streams[i].polygonEnd();\n } }\n };\n }\n // A composite projection for Portugal, configured by default for 960×500.\n function conicConformalPortugal() {\n var cache, cacheStream, iberianPeninsule = d3Geo.geoConicConformal().rotate([10, -39.3]).parallels([0, 60]), iberianPeninsulePoint, madeira = d3Geo.geoConicConformal().rotate([17, -32.7]).parallels([0, 60]), madeiraPoint, azores = d3Geo.geoConicConformal().rotate([27.8, -38.6]).parallels([0, 60]), azoresPoint, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n /*\n var iberianPeninsuleBbox = [[-11, 46], [4, 34]];\n var madeiraBbox = [[-17.85, 33.6], [-16, 32.02]];\n var azoresBbox = [[-32, 40.529], [-23.98, 35.75]];\n */\n function conicConformalPortugal(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (iberianPeninsulePoint.point(x, y), point) ||\n (madeiraPoint.point(x, y), point) ||\n (azoresPoint.point(x, y), point);\n }\n conicConformalPortugal.invert = function (coordinates) {\n var k = iberianPeninsule.scale(), t = iberianPeninsule.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n /*\n //How are the return values calculated:\n console.info(\"******\");\n var c0 = madeira(madeiraBbox[0]);\n var x0 = (c0[0] - t[0]) / k;\n var y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 madeira\", x0 + ' - ' + y0);\n \n var c1 = madeira(madeiraBbox[1]);\n var x1 = (c1[0] - t[0]) / k;\n var y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 madeira\", x1 + ' - ' + y1);\n \n c0 = azores(azoresBbox[0]);\n x0 = (c0[0] - t[0]) / k;\n y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 azores\", x0 + ' - ' + y0);\n \n c1 = azores(azoresBbox[1]);\n x1 = (c1[0] - t[0]) / k;\n y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 azores\", x1 + ' - ' + y1);\n */\n return (y >= 0.0093 && y < 0.03678 && x >= -0.03875 && x < -0.0116 ? madeira\n : y >= -0.0412 && y < 0.0091 && x >= -0.07782 && x < -0.01166 ? azores\n : iberianPeninsule).invert(coordinates);\n };\n conicConformalPortugal.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$3([iberianPeninsule.stream(cacheStream = stream), madeira.stream(stream), azores.stream(stream)]);\n };\n conicConformalPortugal.precision = function (_) {\n if (!arguments.length) {\n return iberianPeninsule.precision();\n }\n iberianPeninsule.precision(_);\n madeira.precision(_);\n azores.precision(_);\n return reset();\n };\n conicConformalPortugal.scale = function (_) {\n if (!arguments.length) {\n return iberianPeninsule.scale();\n }\n iberianPeninsule.scale(_);\n madeira.scale(_);\n azores.scale(_ * 0.6);\n return conicConformalPortugal.translate(iberianPeninsule.translate());\n };\n conicConformalPortugal.translate = function (_) {\n if (!arguments.length) {\n return iberianPeninsule.translate();\n }\n var k = iberianPeninsule.scale(), x = +_[0], y = +_[1];\n /*\n var c0 = iberianPeninsule(iberianPeninsuleBbox[0]);\n var x0 = (x - c0[0]) / k;\n var y0 = (y - c0[1]) / k;\n \n var c1 = iberianPeninsule(iberianPeninsuleBbox[1]);\n var x1 = (x - c1[0]) / k;\n var y1 = (y - c1[1]) / k;\n \n console.info('Iberian Peninsula: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k]])');\n \n c0 = madeira.translate([x - 0.0265 * k, y + 0.025 * k])(madeiraBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = madeira.translate([x - 0.0265 * k, y + 0.025 * k])(madeiraBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('Madeira: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n \n c0 = azores.translate([x - 0.045 * k, y + -0.02 * k])(azoresBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = azores.translate([x - 0.045 * k, y + -0.02 * k])(azoresBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('Azores: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n */\n iberianPeninsulePoint = iberianPeninsule\n .translate(_)\n .clipExtent([[x - 0.0115 * k, y - 0.1138 * k], [x + 0.2105 * k, y + 0.0673 * k]])\n .stream(pointStream);\n madeiraPoint = madeira\n .translate([x - 0.0265 * k, y + 0.025 * k])\n .clipExtent([[x - 0.0388 * k + epsilon, y + 0.0093 * k + epsilon], [x - 0.0116 * k - epsilon, y + 0.0368 * k - epsilon]])\n .stream(pointStream);\n azoresPoint = azores\n .translate([x - 0.045 * k, y + -0.02 * k])\n .clipExtent([[x - 0.0778 * k + epsilon, y - 0.0413 * k + epsilon], [x - 0.0117 * k - epsilon, y + 0.0091 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n conicConformalPortugal.fitExtent = function (extent, object) {\n return fitExtent(conicConformalPortugal, extent, object);\n };\n conicConformalPortugal.fitSize = function (size, object) {\n return fitSize(conicConformalPortugal, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return conicConformalPortugal;\n }\n conicConformalPortugal.drawCompositionBorders = function (context) {\n /*\n console.info(\"CLIP EXTENT MADEIRA: \", madeira.clipExtent());\n console.info(\"UL BBOX:\", iberianPeninsule.invert([madeira.clipExtent()[0][0], madeira.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", iberianPeninsule.invert([madeira.clipExtent()[1][0], madeira.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", iberianPeninsule.invert([madeira.clipExtent()[1][0], madeira.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", iberianPeninsule.invert([madeira.clipExtent()[0][0], madeira.clipExtent()[1][1]]));\n \n console.info(\"CLIP EXTENT AZORES: \", azores.clipExtent());\n console.info(\"UL BBOX:\", iberianPeninsule.invert([azores.clipExtent()[0][0], azores.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", iberianPeninsule.invert([azores.clipExtent()[1][0], azores.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", iberianPeninsule.invert([azores.clipExtent()[1][0], azores.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", iberianPeninsule.invert([azores.clipExtent()[0][0], azores.clipExtent()[1][1]]));\n */\n var ulmadeira = iberianPeninsule([-12.8351, 38.7113]);\n var urmadeira = iberianPeninsule([-10.8482, 38.7633]);\n var ldmadeira = iberianPeninsule([-10.8181, 37.2072]);\n var llmadeira = iberianPeninsule([-12.7345, 37.1573]);\n var ulazores = iberianPeninsule([-16.0753, 41.4436]);\n var urazores = iberianPeninsule([-10.9168, 41.6861]);\n var ldazores = iberianPeninsule([-10.8557, 38.7747]);\n var llazores = iberianPeninsule([-15.6728, 38.5505]);\n context.moveTo(ulmadeira[0], ulmadeira[1]);\n context.lineTo(urmadeira[0], urmadeira[1]);\n context.lineTo(ldmadeira[0], ldmadeira[1]);\n context.lineTo(ldmadeira[0], ldmadeira[1]);\n context.lineTo(llmadeira[0], llmadeira[1]);\n context.closePath();\n context.moveTo(ulazores[0], ulazores[1]);\n context.lineTo(urazores[0], urazores[1]);\n context.lineTo(ldazores[0], ldazores[1]);\n context.lineTo(ldazores[0], ldazores[1]);\n context.lineTo(llazores[0], llazores[1]);\n context.closePath();\n };\n conicConformalPortugal.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return conicConformalPortugal.scale(4200);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$4(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n) {\n streams[i].point(x, y);\n } },\n sphere: function () { var i = -1; while (++i < n) {\n streams[i].sphere();\n } },\n lineStart: function () { var i = -1; while (++i < n) {\n streams[i].lineStart();\n } },\n lineEnd: function () { var i = -1; while (++i < n) {\n streams[i].lineEnd();\n } },\n polygonStart: function () { var i = -1; while (++i < n) {\n streams[i].polygonStart();\n } },\n polygonEnd: function () { var i = -1; while (++i < n) {\n streams[i].polygonEnd();\n } }\n };\n }\n // A composite projection for Ecuador, configured by default for 960×500.\n function mercatorEcuador() {\n var cache, cacheStream, mainland = d3Geo.geoMercator().rotate([80, 1.5]), mainlandPoint, galapagos = d3Geo.geoMercator().rotate([90.73, 1]), galapagosPoint, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n /*\n var mainlandBbox = [[-81.5, 2.7], [-70.0, -6.0]];\n var galapagosBbox = [[-92.2, 0.58], [-88.8, -1.8]];\n */\n function mercatorEcuador(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (mainlandPoint.point(x, y), point) ||\n (galapagosPoint.point(x, y), point);\n }\n mercatorEcuador.invert = function (coordinates) {\n var k = mainland.scale(), t = mainland.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n /*\n //How are the return values calculated:\n var c0 = galapagos(galapagosBbox[0]);\n var x0 = (c0[0] - t[0]) / k;\n var y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 galapagos\", x0 + ' - ' + y0);\n \n \n var c1 = galapagos(galapagosBbox[1]);\n var x1 = (c1[0] - t[0]) / k;\n var y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 galapagos\", x1 + ' - ' + y1);\n */\n return (y >= -0.0676 && y < -0.026 && x >= -0.0857 && x < -0.0263 ? galapagos\n : mainland).invert(coordinates);\n };\n mercatorEcuador.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$4([mainland.stream(cacheStream = stream), galapagos.stream(stream)]);\n };\n mercatorEcuador.precision = function (_) {\n if (!arguments.length) {\n return mainland.precision();\n }\n mainland.precision(_);\n galapagos.precision(_);\n return reset();\n };\n mercatorEcuador.scale = function (_) {\n if (!arguments.length) {\n return mainland.scale();\n }\n mainland.scale(_);\n galapagos.scale(_);\n return mercatorEcuador.translate(mainland.translate());\n };\n mercatorEcuador.translate = function (_) {\n if (!arguments.length) {\n return mainland.translate();\n }\n var k = mainland.scale(), x = +_[0], y = +_[1];\n /*\n var c0 = mainland(mainlandBbox[0]);\n var x0 = (x - c0[0]) / k;\n var y0 = (y - c0[1]) / k;\n \n var c1 = mainland(mainlandBbox[1]);\n var x1 = (x - c1[0]) / k;\n var y1 = (y - c1[1]) / k;\n \n console.info('mainland: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k]])');\n \n c0 = galapagos.translate([x - 0.06 * k, y - 0.04 * k])(galapagosBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = galapagos.translate([x - 0.06 * k, y - 0.04 * k])(galapagosBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('galapagos: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');*/\n mainlandPoint = mainland\n .translate(_)\n .clipExtent([[x - 0.0262 * k, y - 0.0734 * k], [x + 0.1741 * k, y + 0.079 * k]])\n .stream(pointStream);\n galapagosPoint = galapagos\n .translate([x - 0.06 * k, y - 0.04 * k])\n .clipExtent([[x - 0.0857 * k + epsilon, y - 0.0676 * k + epsilon], [x - 0.0263 * k - epsilon, y - 0.026 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n mercatorEcuador.fitExtent = function (extent, object) {\n return fitExtent(mercatorEcuador, extent, object);\n };\n mercatorEcuador.fitSize = function (size, object) {\n return fitSize(mercatorEcuador, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return mercatorEcuador;\n }\n mercatorEcuador.drawCompositionBorders = function (context) {\n /*\n console.info(\"CLIP EXTENT: \", galapagos.clipExtent());\n console.info(\"UL BBOX:\", mainland.invert([galapagos.clipExtent()[0][0], galapagos.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", mainland.invert([galapagos.clipExtent()[1][0], galapagos.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", mainland.invert([galapagos.clipExtent()[1][0], galapagos.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", mainland.invert([galapagos.clipExtent()[0][0], galapagos.clipExtent()[1][1]]));\n */\n var ulgalapagos = mainland([-84.9032, 2.3757]);\n var urgalapagos = mainland([-81.5047, 2.3708]);\n var ldgalapagos = mainland([-81.5063, -0.01]);\n var llgalapagos = mainland([-84.9086, -0.005]);\n context.moveTo(ulgalapagos[0], ulgalapagos[1]);\n context.lineTo(urgalapagos[0], urgalapagos[1]);\n context.lineTo(ldgalapagos[0], ldgalapagos[1]);\n context.lineTo(llgalapagos[0], llgalapagos[1]);\n context.closePath();\n };\n mercatorEcuador.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return mercatorEcuador.scale(3500);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$5(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n) {\n streams[i].point(x, y);\n } },\n sphere: function () { var i = -1; while (++i < n) {\n streams[i].sphere();\n } },\n lineStart: function () { var i = -1; while (++i < n) {\n streams[i].lineStart();\n } },\n lineEnd: function () { var i = -1; while (++i < n) {\n streams[i].lineEnd();\n } },\n polygonStart: function () { var i = -1; while (++i < n) {\n streams[i].polygonStart();\n } },\n polygonEnd: function () { var i = -1; while (++i < n) {\n streams[i].polygonEnd();\n } }\n };\n }\n // A composite projection for Chile, configured by default for 960×500.\n function transverseMercatorChile() {\n var cache, cacheStream, mainland = d3Geo.geoTransverseMercator().rotate([72, 37]), mainlandPoint, antarctic = d3Geo.geoStereographic().rotate([72, 0]), antarcticPoint, juanFernandez = d3Geo.geoMercator().rotate([80, 33.5]), juanFernandezPoint, pascua = d3Geo.geoMercator().rotate([110, 25]), pascuaPoint, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n /*\n var mainlandBbox = [[-75.5, -15.0], [-32, -49.0]];\n var antarcticBbox = [[-91.0, -60.0], [-43.0, -90.0]];\n var juanFernandezBbox = [[-81.0, -33.0], [-78.5, -34.0]];\n var pascuaBbox = [[-110, -26.6], [-108.7, -27.5]];\n */\n function transverseMercatorChile(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (mainlandPoint.point(x, y), point) ||\n (antarcticPoint.point(x, y), point) ||\n (juanFernandezPoint.point(x, y), point) ||\n (pascuaPoint.point(x, y), point);\n }\n transverseMercatorChile.invert = function (coordinates) {\n var k = mainland.scale(), t = mainland.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n /*\n //How are the return values calculated:\n console.info(\"******\");\n var c0 = antarctic(antarcticBbox[0]);\n var x0 = (c0[0] - t[0]) / k;\n var y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 antarctic\", x0 + ' - ' + y0);\n \n var c1 = antarctic(antarcticBbox[1]);\n var x1 = (c1[0] - t[0]) / k;\n var y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 antarctic\", x1 + ' - ' + y1);\n \n c0 = juanFernandez(juanFernandezBbox[0]);\n x0 = (c0[0] - t[0]) / k;\n y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 juanFernandez\", x0 + ' - ' + y0);\n \n c1 = juanFernandez(juanFernandezBbox[1]);\n x1 = (c1[0] - t[0]) / k;\n y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 juanFernandez\", x1 + ' - ' + y1);\n \n c0 = pascua(pascuaBbox[0]);\n x0 = (c0[0] - t[0]) / k;\n y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 pascua\", x0 + ' - ' + y0);\n \n c1 = pascua(pascuaBbox[1]);\n x1 = (c1[0] - t[0]) / k;\n y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 pascua\", x1 + ' - ' + y1);\n */\n return (y >= 0.2582 && y < 0.32 && x >= -0.1036 && x < -0.087 ? antarctic\n : y >= -0.01298 && y < 0.0133 && x >= -0.11396 && x < -0.05944 ? juanFernandez\n : y >= 0.01539 && y < 0.03911 && x >= -0.089 && x < -0.0588 ? pascua\n : mainland).invert(coordinates);\n };\n transverseMercatorChile.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$5([mainland.stream(cacheStream = stream), antarctic.stream(stream), juanFernandez.stream(stream), pascua.stream(stream)]);\n };\n transverseMercatorChile.precision = function (_) {\n if (!arguments.length) {\n return mainland.precision();\n }\n mainland.precision(_);\n antarctic.precision(_);\n juanFernandez.precision(_);\n pascua.precision(_);\n return reset();\n };\n transverseMercatorChile.scale = function (_) {\n if (!arguments.length) {\n return mainland.scale();\n }\n mainland.scale(_);\n antarctic.scale(_ * 0.15);\n juanFernandez.scale(_ * 1.5);\n pascua.scale(_ * 1.5);\n return transverseMercatorChile.translate(mainland.translate());\n };\n transverseMercatorChile.translate = function (_) {\n if (!arguments.length) {\n return mainland.translate();\n }\n var k = mainland.scale(), x = +_[0], y = +_[1];\n /*\n var c0 = mainland(mainlandBbox[0]);\n var x0 = (x - c0[0]) / k;\n var y0 = (y - c0[1]) / k;\n \n var c1 = mainland(mainlandBbox[1]);\n var x1 = (x - c1[0]) / k;\n var y1 = (y - c1[1]) / k;\n \n console.info('Mainland: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k]])');\n \n c0 = antarctic.translate([x - 0.1 * k, y + 0.17 * k])(antarcticBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = antarctic.translate([x - 0.1 * k, y + 0.17 * k])(antarcticBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('antarctic: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('Doesn t work due to -90 latitude!' + '.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n \n c0 = juanFernandez.translate([x - 0.092 * k, y -0 * k])(juanFernandezBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = juanFernandez.translate([x - 0.092 * k, y -0 * k])(juanFernandezBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('juanFernandez: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n \n c0 = pascua.translate([x - 0.089 * k, y -0.0265 * k])(pascuaBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = pascua.translate([x - 0.089 * k, y -0.0265 * k])(pascuaBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('pascua: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n */\n mainlandPoint = mainland\n .translate(_)\n .clipExtent([[x - 0.059 * k, y - 0.3835 * k], [x + 0.4498 * k, y + 0.3375 * k]])\n .stream(pointStream);\n antarcticPoint = antarctic\n .translate([x - 0.087 * k, y + 0.17 * k])\n .clipExtent([[x - 0.1166 * k + epsilon, y + 0.2582 * k + epsilon], [x - 0.06 * k - epsilon, y + 0.32 * k - epsilon]])\n .stream(pointStream);\n juanFernandezPoint = juanFernandez\n .translate([x - 0.092 * k, y - 0 * k])\n .clipExtent([[x - 0.114 * k + epsilon, y - 0.013 * k + epsilon], [x - 0.0594 * k - epsilon, y + 0.0133 * k - epsilon]])\n .stream(pointStream);\n pascuaPoint = pascua\n .translate([x - 0.089 * k, y - 0.0265 * k])\n .clipExtent([[x - 0.089 * k + epsilon, y + 0.0154 * k + epsilon], [x - 0.0588 * k - epsilon, y + 0.0391 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n transverseMercatorChile.fitExtent = function (extent, object) {\n return fitExtent(transverseMercatorChile, extent, object);\n };\n transverseMercatorChile.fitSize = function (size, object) {\n return fitSize(transverseMercatorChile, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return transverseMercatorChile;\n }\n transverseMercatorChile.drawCompositionBorders = function (context) {\n /*\n console.info(\"CLIP EXTENT antarctic: \", antarctic.clipExtent());\n console.info(\"UL BBOX:\", mainland.invert([antarctic.clipExtent()[0][0], antarctic.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", mainland.invert([antarctic.clipExtent()[1][0], antarctic.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", mainland.invert([antarctic.clipExtent()[1][0], antarctic.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", mainland.invert([antarctic.clipExtent()[0][0], antarctic.clipExtent()[1][1]]));\n \n console.info(\"CLIP EXTENT juanFernandez: \", juanFernandez.clipExtent());\n console.info(\"UL BBOX:\", mainland.invert([juanFernandez.clipExtent()[0][0], juanFernandez.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", mainland.invert([juanFernandez.clipExtent()[1][0], juanFernandez.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", mainland.invert([juanFernandez.clipExtent()[1][0], juanFernandez.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", mainland.invert([juanFernandez.clipExtent()[0][0], juanFernandez.clipExtent()[1][1]]));\n \n console.info(\"CLIP EXTENT pascua: \", pascua.clipExtent());\n console.info(\"UL BBOX:\", mainland.invert([pascua.clipExtent()[0][0], pascua.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", mainland.invert([pascua.clipExtent()[1][0], pascua.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", mainland.invert([pascua.clipExtent()[1][0], pascua.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", mainland.invert([pascua.clipExtent()[0][0], pascua.clipExtent()[1][1]]));\n */\n var ulantarctic = mainland([-82.6999, -51.3043]);\n var urantarctic = mainland([-77.5442, -51.6631]);\n var ldantarctic = mainland([-78.0254, -55.1860]);\n var llantarctic = mainland([-83.6106, -54.7785]);\n var uljuanFernandez = mainland([-80.0638, -35.9840]);\n var urjuanFernandez = mainland([-76.2153, -36.1811]);\n var ldjuanFernandez = mainland([-76.2994, -37.6839]);\n var lljuanFernandez = mainland([-80.2231, -37.4757]);\n var ulpascua = mainland([-78.442, -37.706]);\n var urpascua = mainland([-76.263, -37.8054]);\n var ldpascua = mainland([-76.344, -39.1595]);\n var llpascua = mainland([-78.5638, -39.0559]);\n context.moveTo(ulantarctic[0], ulantarctic[1]);\n context.lineTo(urantarctic[0], urantarctic[1]);\n context.lineTo(ldantarctic[0], ldantarctic[1]);\n context.lineTo(ldantarctic[0], ldantarctic[1]);\n context.lineTo(llantarctic[0], llantarctic[1]);\n context.closePath();\n context.moveTo(uljuanFernandez[0], uljuanFernandez[1]);\n context.lineTo(urjuanFernandez[0], urjuanFernandez[1]);\n context.lineTo(ldjuanFernandez[0], ldjuanFernandez[1]);\n context.lineTo(ldjuanFernandez[0], ldjuanFernandez[1]);\n context.lineTo(lljuanFernandez[0], lljuanFernandez[1]);\n context.closePath();\n context.moveTo(ulpascua[0], ulpascua[1]);\n context.lineTo(urpascua[0], urpascua[1]);\n context.lineTo(ldpascua[0], ldpascua[1]);\n context.lineTo(ldpascua[0], ldpascua[1]);\n context.lineTo(llpascua[0], llpascua[1]);\n context.closePath();\n };\n transverseMercatorChile.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return transverseMercatorChile.scale(700);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$6(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n) {\n streams[i].point(x, y);\n } },\n sphere: function () { var i = -1; while (++i < n) {\n streams[i].sphere();\n } },\n lineStart: function () { var i = -1; while (++i < n) {\n streams[i].lineStart();\n } },\n lineEnd: function () { var i = -1; while (++i < n) {\n streams[i].lineEnd();\n } },\n polygonStart: function () { var i = -1; while (++i < n) {\n streams[i].polygonStart();\n } },\n polygonEnd: function () { var i = -1; while (++i < n) {\n streams[i].polygonEnd();\n } }\n };\n }\n // A composite projection for Portugal, configured by default for 960×500.\n function conicEquidistantJapan() {\n var cache, cacheStream, mainland = d3Geo.geoConicEquidistant().rotate([-136, -22]).parallels([40, 34]), mainlandPoint, //gis.stackexchange.com/a/73135\n hokkaido = d3Geo.geoConicEquidistant().rotate([-146, -26]).parallels([40, 34]), hokkaidoPoint, okinawa = d3Geo.geoConicEquidistant().rotate([-126, -19]).parallels([40, 34]), okinawaPoint, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n /*\n var mainlandBbox = [[126.0, 41.606], [142.97, 29.97]];\n var hokkaidoBbox = [[138.7, 45.61], [146.2, 41.2]];\n var okinawaBbox = [[122.6, 29.0], [130, 23.7]];\n */\n function conicEquidistantJapan(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (mainlandPoint.point(x, y), point) ||\n (hokkaidoPoint.point(x, y), point) ||\n (okinawaPoint.point(x, y), point);\n }\n conicEquidistantJapan.invert = function (coordinates) {\n var k = mainland.scale(), t = mainland.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n /*\n //How are the return values calculated:\n console.info(\"******\");\n var c0 = hokkaido(hokkaidoBbox[0]);\n var x0 = (c0[0] - t[0]) / k;\n var y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 hokkaido\", x0 + ' - ' + y0);\n \n var c1 = hokkaido(hokkaidoBbox[1]);\n var x1 = (c1[0] - t[0]) / k;\n var y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 hokkaido\", x1 + ' - ' + y1);\n \n c0 = okinawa(okinawaBbox[0]);\n x0 = (c0[0] - t[0]) / k;\n y0 = (c0[1] - t[1]) / k;\n \n console.info(\"p0 okinawa\", x0 + ' - ' + y0);\n \n c1 = okinawa(okinawaBbox[1]);\n x1 = (c1[0] - t[0]) / k;\n y1 = (c1[1] - t[1]) / k;\n \n console.info(\"p1 okinawa\", x1 + ' - ' + y1);\n */\n return (y >= -0.10925 && y < -0.02701 && x >= -0.135 && x < -0.0397 ? hokkaido\n : y >= 0.04713 && y < 0.11138 && x >= -0.03986 && x < 0.051 ? okinawa\n : mainland).invert(coordinates);\n };\n conicEquidistantJapan.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$6([mainland.stream(cacheStream = stream), hokkaido.stream(stream), okinawa.stream(stream)]);\n };\n conicEquidistantJapan.precision = function (_) {\n if (!arguments.length) {\n return mainland.precision();\n }\n mainland.precision(_);\n hokkaido.precision(_);\n okinawa.precision(_);\n return reset();\n };\n conicEquidistantJapan.scale = function (_) {\n if (!arguments.length) {\n return mainland.scale();\n }\n mainland.scale(_);\n hokkaido.scale(_);\n okinawa.scale(_ * 0.7);\n return conicEquidistantJapan.translate(mainland.translate());\n };\n conicEquidistantJapan.translate = function (_) {\n if (!arguments.length) {\n return mainland.translate();\n }\n var k = mainland.scale(), x = +_[0], y = +_[1];\n /*\n var c0 = mainland(mainlandBbox[0]);\n var x0 = (x - c0[0]) / k;\n var y0 = (y - c0[1]) / k;\n \n var c1 = mainland(mainlandBbox[1]);\n var x1 = (x - c1[0]) / k;\n var y1 = (y - c1[1]) / k;\n \n console.info('Main: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k]])');\n \n c0 = hokkaido.translate([x - 0.0425 * k, y - 0.005 * k])(hokkaidoBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = hokkaido.translate([x - 0.0425 * k, y - 0.005 * k])(hokkaidoBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('hokkaido: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n \n c0 = okinawa.translate([x - 0 * k, y + 0 * k])(okinawaBbox[0]);\n x0 = (x - c0[0]) / k;\n y0 = (y - c0[1]) / k;\n \n c1 = okinawa.translate([x - 0 * k, y + 0 * k])(okinawaBbox[1]);\n x1 = (x - c1[0]) / k;\n y1 = (y - c1[1]) / k;\n \n console.info('okinawa: p0: ' + x0 + ', ' + y0 + ' , p1: ' + x1 + ' - ' + y1);\n console.info('.clipExtent([[x '+\n (x0<0?'+ ':'- ') + Math.abs(x0.toFixed(4))+\n ' * k + epsilon, y '+\n (y0<0?'+ ':'- ') + Math.abs(y0.toFixed(4))+\n ' * k + epsilon],[x '+\n (x1<0?'+ ':'- ') + Math.abs(x1.toFixed(4))+\n ' * k - epsilon, y '+\n (y1<0?'+ ':'- ') + Math.abs(y1.toFixed(4))+\n ' * k - epsilon]])');\n */\n mainlandPoint = mainland\n .translate(_)\n .clipExtent([[x - 0.1352 * k, y - 0.1091 * k], [x + 0.117 * k, y + 0.098 * k]])\n .stream(pointStream);\n hokkaidoPoint = hokkaido\n .translate([x - 0.0425 * k, y - 0.005 * k])\n .clipExtent([[x - 0.135 * k + epsilon, y - 0.1093 * k + epsilon], [x - 0.0397 * k - epsilon, y - 0.027 * k - epsilon]])\n .stream(pointStream);\n okinawaPoint = okinawa\n .translate(_)\n .clipExtent([[x - 0.0399 * k + epsilon, y + 0.0471 * k + epsilon], [x + 0.051 * k - epsilon, y + 0.1114 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n conicEquidistantJapan.fitExtent = function (extent, object) {\n return fitExtent(conicEquidistantJapan, extent, object);\n };\n conicEquidistantJapan.fitSize = function (size, object) {\n return fitSize(conicEquidistantJapan, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return conicEquidistantJapan;\n }\n conicEquidistantJapan.drawCompositionBorders = function (context) {\n /*\n console.info(\"CLIP EXTENT hokkaido: \", hokkaido.clipExtent());\n console.info(\"UL BBOX:\", mainland.invert([hokkaido.clipExtent()[0][0], hokkaido.clipExtent()[0][1]]));\n console.info(\"UR BBOX:\", mainland.invert([hokkaido.clipExtent()[1][0], hokkaido.clipExtent()[0][1]]));\n console.info(\"LD BBOX:\", mainland.invert([hokkaido.clipExtent()[1][0], hokkaido.clipExtent()[1][1]]));\n console.info(\"LL BBOX:\", mainland.invert([hokkaido.clipExtent()[0][0], hokkaido.clipExtent()[1][1]]));\n */\n var ulhokkaido = mainland([126.01320483689143, 41.621090310215585]);\n var urhokkaido = mainland([133.04304387025903, 42.15087523707186]);\n var ldhokkaido = mainland([133.3021766080688, 37.43975444725098]);\n var llhokkaido = mainland([126.87889168628224, 36.95488945159779]);\n var llokinawa = mainland([132.9, 29.8]);\n var lmokinawa = mainland([134, 33]);\n var lrokinawa = mainland([139.3, 33.2]);\n var llrokinawa = mainland([139.16, 30.5]);\n context.moveTo(ulhokkaido[0], ulhokkaido[1]);\n context.lineTo(urhokkaido[0], urhokkaido[1]);\n context.lineTo(ldhokkaido[0], ldhokkaido[1]);\n context.lineTo(llhokkaido[0], llhokkaido[1]);\n context.closePath();\n context.moveTo(llokinawa[0], llokinawa[1]);\n context.lineTo(lmokinawa[0], lmokinawa[1]);\n context.lineTo(lrokinawa[0], lrokinawa[1]);\n context.lineTo(llrokinawa[0], llrokinawa[1]);\n };\n conicEquidistantJapan.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return conicEquidistantJapan.scale(2200);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$7(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n) {\n streams[i].point(x, y);\n } },\n sphere: function () { var i = -1; while (++i < n) {\n streams[i].sphere();\n } },\n lineStart: function () { var i = -1; while (++i < n) {\n streams[i].lineStart();\n } },\n lineEnd: function () { var i = -1; while (++i < n) {\n streams[i].lineEnd();\n } },\n polygonStart: function () { var i = -1; while (++i < n) {\n streams[i].polygonStart();\n } },\n polygonEnd: function () { var i = -1; while (++i < n) {\n streams[i].polygonEnd();\n } }\n };\n }\n // A composite projection for France, configured by default for 960×500.\n function conicConformalFrance() {\n var cache, cacheStream, europe = d3Geo.geoConicConformal().rotate([-3, -46.2]).parallels([0, 60]), europePoint, guyane = d3Geo.geoMercator().center([-53.2, 3.9]), guyanePoint, martinique = d3Geo.geoMercator().center([-61.03, 14.67]), martiniquePoint, guadeloupe = d3Geo.geoMercator().center([-61.46, 16.14]), guadeloupePoint, saintBarthelemy = d3Geo.geoMercator().center([-62.85, 17.92]), saintBarthelemyPoint, stPierreMiquelon = d3Geo.geoMercator().center([-56.23, 46.93]), stPierreMiquelonPoint, mayotte = d3Geo.geoMercator().center([45.16, -12.8]), mayottePoint, reunion = d3Geo.geoMercator().center([55.52, -21.13]), reunionPoint, nouvelleCaledonie = d3Geo.geoMercator().center([165.8, -21.07]), nouvelleCaledoniePoint, wallisFutuna = d3Geo.geoMercator().center([-178.1, -14.3]), wallisFutunaPoint, polynesie = d3Geo.geoMercator().center([-150.55, -17.11]), polynesiePoint, polynesie2 = d3Geo.geoMercator().center([-150.55, -17.11]), polynesie2Point, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n /*\n var europeBbox = [[-6.5, 51], [10, 41]];\n var guyaneBbox = [[-54.5, 6.29], [-50.9, 1.48]];\n */\n function conicConformalFrance(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (europePoint.point(x, y), point) ||\n (guyanePoint.point(x, y), point) ||\n (martiniquePoint.point(x, y), point) ||\n (guadeloupePoint.point(x, y), point) ||\n (saintBarthelemyPoint.point(x, y), point) ||\n (stPierreMiquelonPoint.point(x, y), point) ||\n (mayottePoint.point(x, y), point) ||\n (reunionPoint.point(x, y), point) ||\n (nouvelleCaledoniePoint.point(x, y), point) ||\n (wallisFutunaPoint.point(x, y), point) ||\n (polynesiePoint.point(x, y), point) ||\n (polynesie2Point.point(x, y), point);\n }\n conicConformalFrance.invert = function (coordinates) {\n var k = europe.scale(), t = europe.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= 0.029 && y < 0.0864 && x >= -0.14 && x < -0.0996 ? guyane\n : y >= 0 && y < 0.029 && x >= -0.14 && x < -0.0996 ? martinique\n : y >= -0.032 && y < 0 && x >= -0.14 && x < -0.0996 ? guadeloupe\n : y >= -0.052 && y < -0.032 && x >= -0.14 && x < -0.0996 ? saintBarthelemy\n : y >= -0.076 && y < 0.052 && x >= -0.14 && x < -0.0996 ? stPierreMiquelon\n : y >= -0.076 && y < -0.052 && x >= 0.0967 && x < 0.1371 ? mayotte\n : y >= -0.052 && y < -0.02 && x >= 0.0967 && x < 0.1371 ? reunion\n : y >= -0.02 && y < 0.012 && x >= 0.0967 && x < 0.1371 ? nouvelleCaledonie\n : y >= 0.012 && y < 0.033 && x >= 0.0967 && x < 0.1371 ? wallisFutuna\n : y >= 0.033 && y < 0.0864 && x >= 0.0967 && x < 0.1371 ? polynesie\n : europe).invert(coordinates);\n };\n conicConformalFrance.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$7([europe.stream(cacheStream = stream), guyane.stream(stream), martinique.stream(stream), guadeloupe.stream(stream), saintBarthelemy.stream(stream), stPierreMiquelon.stream(stream), mayotte.stream(stream), reunion.stream(stream), nouvelleCaledonie.stream(stream), wallisFutuna.stream(stream), polynesie.stream(stream), polynesie2.stream(stream)]);\n };\n conicConformalFrance.precision = function (_) {\n if (!arguments.length) {\n return europe.precision();\n }\n europe.precision(_);\n guyane.precision(_);\n martinique.precision(_);\n guadeloupe.precision(_);\n saintBarthelemy.precision(_);\n stPierreMiquelon.precision(_);\n mayotte.precision(_);\n reunion.precision(_);\n nouvelleCaledonie.precision(_);\n wallisFutuna.precision(_);\n polynesie.precision(_);\n polynesie2.precision(_);\n return reset();\n };\n conicConformalFrance.scale = function (_) {\n if (!arguments.length) {\n return europe.scale();\n }\n europe.scale(_);\n guyane.scale(_ * 0.6);\n martinique.scale(_ * 1.6);\n guadeloupe.scale(_ * 1.4);\n saintBarthelemy.scale(_ * 5);\n stPierreMiquelon.scale(_ * 1.3);\n mayotte.scale(_ * 1.6);\n reunion.scale(_ * 1.2);\n nouvelleCaledonie.scale(_ * 0.3);\n wallisFutuna.scale(_ * 2.7);\n polynesie.scale(_ * 0.5);\n polynesie2.scale(_ * 0.06);\n return conicConformalFrance.translate(europe.translate());\n };\n conicConformalFrance.translate = function (_) {\n if (!arguments.length) {\n return europe.translate();\n }\n var k = europe.scale(), x = +_[0], y = +_[1];\n europePoint = europe\n .translate(_)\n .clipExtent([[x - 0.0996 * k, y - 0.0908 * k], [x + 0.0967 * k, y + 0.0864 * k]])\n .stream(pointStream);\n guyanePoint = guyane\n .translate([x - 0.12 * k, y + 0.0575 * k])\n .clipExtent([[x - 0.14 * k + epsilon, y + 0.029 * k + epsilon], [x - 0.0996 * k - epsilon, y + 0.0864 * k - epsilon]])\n .stream(pointStream);\n martiniquePoint = martinique\n .translate([x - 0.12 * k, y + 0.013 * k])\n .clipExtent([[x - 0.14 * k + epsilon, y + 0 * k + epsilon], [x - 0.0996 * k - epsilon, y + 0.029 * k - epsilon]])\n .stream(pointStream);\n guadeloupePoint = guadeloupe\n .translate([x - 0.12 * k, y - 0.014 * k])\n .clipExtent([[x - 0.14 * k + epsilon, y - 0.032 * k + epsilon], [x - 0.0996 * k - epsilon, y + 0 * k - epsilon]])\n .stream(pointStream);\n saintBarthelemyPoint = saintBarthelemy\n .translate([x - 0.12 * k, y - 0.044 * k])\n .clipExtent([[x - 0.14 * k + epsilon, y - 0.052 * k + epsilon], [x - 0.0996 * k - epsilon, y - 0.032 * k - epsilon]])\n .stream(pointStream);\n stPierreMiquelonPoint = stPierreMiquelon\n .translate([x - 0.12 * k, y - 0.065 * k])\n .clipExtent([[x - 0.14 * k + epsilon, y - 0.076 * k + epsilon], [x - 0.0996 * k - epsilon, y - 0.052 * k - epsilon]])\n .stream(pointStream);\n mayottePoint = mayotte\n .translate([x + 0.117 * k, y - 0.064 * k])\n .clipExtent([[x + 0.0967 * k + epsilon, y - 0.076 * k + epsilon], [x + 0.1371 * k - epsilon, y - 0.052 * k - epsilon]])\n .stream(pointStream);\n reunionPoint = reunion\n .translate([x + 0.116 * k, y - 0.0355 * k])\n .clipExtent([[x + 0.0967 * k + epsilon, y - 0.052 * k + epsilon], [x + 0.1371 * k - epsilon, y - 0.02 * k - epsilon]])\n .stream(pointStream);\n nouvelleCaledoniePoint = nouvelleCaledonie\n .translate([x + 0.116 * k, y - 0.0048 * k])\n .clipExtent([[x + 0.0967 * k + epsilon, y - 0.02 * k + epsilon], [x + 0.1371 * k - epsilon, y + 0.012 * k - epsilon]])\n .stream(pointStream);\n wallisFutunaPoint = wallisFutuna\n .translate([x + 0.116 * k, y + 0.022 * k])\n .clipExtent([[x + 0.0967 * k + epsilon, y + 0.012 * k + epsilon], [x + 0.1371 * k - epsilon, y + 0.033 * k - epsilon]])\n .stream(pointStream);\n polynesie2Point = polynesie2\n .translate([x + 0.11 * k, y + 0.045 * k])\n .clipExtent([[x + 0.0967 * k + epsilon, y + 0.033 * k + epsilon], [x + 0.1371 * k - epsilon, y + 0.06 * k - epsilon]])\n .stream(pointStream);\n polynesiePoint = polynesie\n .translate([x + 0.115 * k, y + 0.075 * k])\n .clipExtent([[x + 0.0967 * k + epsilon, y + 0.06 * k + epsilon], [x + 0.1371 * k - epsilon, y + 0.0864 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n conicConformalFrance.fitExtent = function (extent, object) {\n return fitExtent(conicConformalFrance, extent, object);\n };\n conicConformalFrance.fitSize = function (size, object) {\n return fitSize(conicConformalFrance, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return conicConformalFrance;\n }\n conicConformalFrance.drawCompositionBorders = function (context) {\n /*\n console.log(\"var ul, ur, ld, ll;\");\n var projs = [guyane, martinique, guadeloupe, saintBarthelemy, stPierreMiquelon, mayotte, reunion, nouvelleCaledonie, wallisFutuna, polynesie, polynesie2];\n for (var i in projs){\n var ul = europe.invert([projs[i].clipExtent()[0][0], projs[i].clipExtent()[0][1]]);\n var ur = europe.invert([projs[i].clipExtent()[1][0], projs[i].clipExtent()[0][1]]);\n var ld = europe.invert([projs[i].clipExtent()[1][0], projs[i].clipExtent()[1][1]]);\n var ll = europe.invert([projs[i].clipExtent()[0][0], projs[i].clipExtent()[1][1]]);\n \n console.log(\"ul = europe([\"+ul+\"]);\");\n console.log(\"ur = europe([\"+ur+\"]);\");\n console.log(\"ld = europe([\"+ld+\"]);\");\n console.log(\"ll = europe([\"+ll+\"]);\");\n \n console.log(\"context.moveTo(ul[0], ul[1]);\");\n console.log(\"context.lineTo(ur[0], ur[1]);\");\n console.log(\"context.lineTo(ld[0], ld[1]);\");\n console.log(\"context.lineTo(ll[0], ll[1]);\");\n console.log(\"context.closePath();\");\n \n }*/\n var ul, ur, ld, ll;\n ul = europe([-7.938886725111036, 43.7219460918835]);\n ur = europe([-4.832080896458295, 44.12930268549372]);\n ld = europe([-4.205299743793263, 40.98096346967365]);\n ll = europe([-7.071796453126152, 40.610037319181444]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([-8.42751373617692, 45.32889452553031]);\n ur = europe([-5.18599305777107, 45.7566442062976]);\n ld = europe([-4.832080905154431, 44.129302726751426]);\n ll = europe([-7.938886737126192, 43.72194613263854]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([-9.012656899657046, 47.127733821030176]);\n ur = europe([-5.6105244772793155, 47.579777861410626]);\n ld = europe([-5.185993067168585, 45.756644248170346]);\n ll = europe([-8.427513749141811, 45.32889456686326]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([-9.405747558985553, 48.26506375557457]);\n ur = europe([-5.896175018439575, 48.733352850851624]);\n ld = europe([-5.610524487556043, 47.57977790393761]);\n ll = europe([-9.012656913808351, 47.127733862971255]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([-9.908436061346974, 49.642448789505856]);\n ur = europe([-6.262026716233124, 50.131426841787174]);\n ld = europe([-5.896175029331232, 48.73335289377258]);\n ll = europe([-9.40574757396393, 48.26506379787767]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([11.996907706504462, 50.16039028163579]);\n ur = europe([15.649907879773343, 49.68279246765253]);\n ld = europe([15.156712840526632, 48.30371557625831]);\n ll = europe([11.64122661754411, 48.761078240546816]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([11.641226606955788, 48.7610781975889]);\n ur = europe([15.156712825832164, 48.30371553390465]);\n ld = europe([14.549932166241172, 46.4866532486199]);\n ll = europe([11.204443787952183, 46.91899233914248]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([11.204443778297161, 46.918992296823646]);\n ur = europe([14.549932152815039, 46.486653206856396]);\n ld = europe([13.994409796764009, 44.695833444323256]);\n ll = europe([10.805306599253848, 45.105133870684924]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([10.805306590412085, 45.10513382903308]);\n ur = europe([13.99440978444733, 44.695833403183606]);\n ld = europe([13.654633799024392, 43.53552468558152]);\n ll = europe([10.561516803980956, 43.930671459798624]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([10.561516795617383, 43.93067141859757]);\n ur = europe([13.654633787361952, 43.5355246448671]);\n ld = europe([12.867691604239901, 40.640701985019405]);\n ll = europe([9.997809515987688, 41.00288343254471]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([10.8, 42.4]);\n ur = europe([12.8, 42.13]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n };\n conicConformalFrance.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return conicConformalFrance.scale(2700);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$8(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n) {\n streams[i].point(x, y);\n } },\n sphere: function () { var i = -1; while (++i < n) {\n streams[i].sphere();\n } },\n lineStart: function () { var i = -1; while (++i < n) {\n streams[i].lineStart();\n } },\n lineEnd: function () { var i = -1; while (++i < n) {\n streams[i].lineEnd();\n } },\n polygonStart: function () { var i = -1; while (++i < n) {\n streams[i].polygonStart();\n } },\n polygonEnd: function () { var i = -1; while (++i < n) {\n streams[i].polygonEnd();\n } }\n };\n }\n // A composite projection for Portugal, configured by default for 960×500.\n function conicConformalEurope() {\n var cache, cacheStream, europe = d3Geo.geoConicConformal().rotate([-10, -53]).parallels([0, 60]), europePoint, guadeloupe = d3Geo.geoMercator().center([-61.46, 16.14]), guadeloupePoint, guyane = d3Geo.geoMercator().center([-53.2, 3.9]), guyanePoint, azores = d3Geo.geoConicConformal().rotate([27.8, -38.9]).parallels([0, 60]), azoresPoint, azores2 = d3Geo.geoConicConformal().rotate([25.43, -37.398]).parallels([0, 60]), azores2Point, azores3 = d3Geo.geoConicConformal().rotate([31.17, -39.539]).parallels([0, 60]), azores3Point, madeira = d3Geo.geoConicConformal().rotate([17, -32.7]).parallels([0, 60]), madeiraPoint, canaryIslands = d3Geo.geoConicConformal().rotate([16, -28.5]).parallels([0, 60]), canaryIslandsPoint, martinique = d3Geo.geoMercator().center([-61.03, 14.67]), martiniquePoint, mayotte = d3Geo.geoMercator().center([45.16, -12.8]), mayottePoint, reunion = d3Geo.geoMercator().center([55.52, -21.13]), reunionPoint, malta = d3Geo.geoConicConformal().rotate([-14.4, -35.95]).parallels([0, 60]), maltaPoint, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n /*\n var europeBbox = [[-6.5, 51], [10, 41]];\n var guyaneBbox = [[-54.5, 6.29], [-50.9, 1.48]];\n */\n function conicConformalEurope(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (europePoint.point(x, y), point) ||\n (guyanePoint.point(x, y), point) ||\n (martiniquePoint.point(x, y), point) ||\n (guadeloupePoint.point(x, y), point) ||\n (canaryIslandsPoint.point(x, y), point) ||\n (madeiraPoint.point(x, y), point) ||\n (mayottePoint.point(x, y), point) ||\n (reunionPoint.point(x, y), point) ||\n (maltaPoint.point(x, y), point) ||\n (azoresPoint.point(x, y), point) ||\n (azores2Point.point(x, y), point) ||\n (azores3Point.point(x, y), point);\n }\n conicConformalEurope.invert = function (coordinates) {\n var k = europe.scale(), t = europe.translate(), x = (coordinates[0] - (t[0] + 0.08 * k)) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= -0.31 && y < -0.24 && x >= 0.14 && x < 0.24 ? guadeloupe\n : y >= -0.24 && y < -0.17 && x >= 0.14 && x < 0.24 ? guyane\n : y >= -0.17 && y < -0.12 && x >= 0.21 && x < 0.24 ? azores2\n : y >= -0.17 && y < -0.14 && x >= 0.14 && x < 0.165 ? azores3\n : y >= -0.17 && y < -0.1 && x >= 0.14 && x < 0.24 ? azores\n : y >= -0.1 && y < -0.03 && x >= 0.14 && x < 0.24 ? madeira\n : y >= -0.03 && y < 0.04 && x >= 0.14 && x < 0.24 ? canaryIslands\n : y >= -0.31 && y < -0.24 && x >= 0.24 && x < 0.34 ? martinique\n : y >= -0.24 && y < -0.17 && x >= 0.24 && x < 0.34 ? mayotte\n : y >= -0.17 && y < -0.1 && x >= 0.24 && x < 0.34 ? reunion\n : y >= -0.1 && y < -0.03 && x >= 0.24 && x < 0.34 ? malta\n : europe).invert(coordinates);\n };\n conicConformalEurope.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$8([europe.stream(cacheStream = stream), guyane.stream(stream), martinique.stream(stream), guadeloupe.stream(stream), canaryIslands.stream(stream), madeira.stream(stream), mayotte.stream(stream), reunion.stream(stream), malta.stream(stream), azores.stream(stream), azores2.stream(stream), azores3.stream(stream)]);\n };\n conicConformalEurope.precision = function (_) {\n if (!arguments.length) {\n return europe.precision();\n }\n europe.precision(_);\n guyane.precision(_);\n martinique.precision(_);\n guadeloupe.precision(_);\n canaryIslands.precision(_);\n madeira.precision(_);\n mayotte.precision(_);\n reunion.precision(_);\n malta.precision(_);\n azores.precision(_);\n azores2.precision(_);\n azores3.precision(_);\n return reset();\n };\n conicConformalEurope.scale = function (_) {\n if (!arguments.length) {\n return europe.scale();\n }\n europe.scale(_);\n guadeloupe.scale(_ * 3);\n guyane.scale(_ * 0.8);\n martinique.scale(_ * 3.5);\n reunion.scale(_ * 2.7);\n azores.scale(_ * 2);\n azores2.scale(_ * 2);\n azores3.scale(_ * 2);\n madeira.scale(_ * 3);\n canaryIslands.scale(_);\n mayotte.scale(_ * 5.5);\n malta.scale(_ * 6);\n return conicConformalEurope.translate(europe.translate());\n };\n conicConformalEurope.translate = function (_) {\n if (!arguments.length) {\n return europe.translate();\n }\n var k = europe.scale(), x = +_[0], y = +_[1];\n europePoint = europe\n .translate([x - 0.08 * k, y])\n .clipExtent([[x - 0.51 * k, y - 0.33 * k], [x + 0.5 * k, y + 0.33 * k]])\n .stream(pointStream);\n guadeloupePoint = guadeloupe\n .translate([x + 0.19 * k, y - 0.275 * k])\n .clipExtent([[x + 0.14 * k + epsilon, y - 0.31 * k + epsilon], [x + 0.24 * k - epsilon, y - 0.24 * k - epsilon]])\n .stream(pointStream);\n guyanePoint = guyane\n .translate([x + 0.19 * k, y - 0.205 * k])\n .clipExtent([[x + 0.14 * k + epsilon, y - 0.24 * k + epsilon], [x + 0.24 * k - epsilon, y - 0.17 * k - epsilon]])\n .stream(pointStream);\n azoresPoint = azores\n .translate([x + 0.19 * k, y - 0.135 * k])\n .clipExtent([[x + 0.14 * k + epsilon, y - 0.17 * k + epsilon], [x + 0.24 * k - epsilon, y - 0.1 * k - epsilon]])\n .stream(pointStream);\n azores2Point = azores2\n .translate([x + 0.225 * k, y - 0.147 * k])\n .clipExtent([[x + 0.21 * k + epsilon, y - 0.17 * k + epsilon], [x + 0.24 * k - epsilon, y - 0.12 * k - epsilon]])\n .stream(pointStream);\n azores3Point = azores3\n .translate([x + 0.153 * k, y - 0.15 * k])\n .clipExtent([[x + 0.14 * k + epsilon, y - 0.17 * k + epsilon], [x + 0.165 * k - epsilon, y - 0.14 * k - epsilon]])\n .stream(pointStream);\n madeiraPoint = madeira\n .translate([x + 0.19 * k, y - 0.065 * k])\n .clipExtent([[x + 0.14 * k + epsilon, y - 0.1 * k + epsilon], [x + 0.24 * k - epsilon, y - 0.03 * k - epsilon]])\n .stream(pointStream);\n canaryIslandsPoint = canaryIslands\n .translate([x + 0.19 * k, y + 0.005 * k])\n .clipExtent([[x + 0.14 * k + epsilon, y - 0.03 * k + epsilon], [x + 0.24 * k - epsilon, y + 0.04 * k - epsilon]])\n .stream(pointStream);\n martiniquePoint = martinique\n .translate([x + 0.29 * k, y - 0.275 * k])\n .clipExtent([[x + 0.24 * k + epsilon, y - 0.31 * k + epsilon], [x + 0.34 * k - epsilon, y - 0.24 * k - epsilon]])\n .stream(pointStream);\n mayottePoint = mayotte\n .translate([x + 0.29 * k, y - 0.205 * k])\n .clipExtent([[x + 0.24 * k + epsilon, y - 0.24 * k + epsilon], [x + 0.34 * k - epsilon, y - 0.17 * k - epsilon]])\n .stream(pointStream);\n reunionPoint = reunion\n .translate([x + 0.29 * k, y - 0.135 * k])\n .clipExtent([[x + 0.24 * k + epsilon, y - 0.17 * k + epsilon], [x + 0.34 * k - epsilon, y - 0.1 * k - epsilon]])\n .stream(pointStream);\n maltaPoint = malta\n .translate([x + 0.29 * k, y - 0.065 * k])\n .clipExtent([[x + 0.24 * k + epsilon, y - 0.1 * k + epsilon], [x + 0.34 * k - epsilon, y - 0.03 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n conicConformalEurope.fitExtent = function (extent, object) {\n return fitExtent(conicConformalEurope, extent, object);\n };\n conicConformalEurope.fitSize = function (size, object) {\n return fitSize(conicConformalEurope, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return conicConformalEurope;\n }\n conicConformalEurope.drawCompositionBorders = function (context) {\n /*\n console.log(\"var ul, ur, ld, ll;\");\n var projs = [guyane, martinique, guadeloupe, canaryIslands, madeira, mayotte, reunion, malta, azores, azores2, azores3];\n for (var i in projs){\n var ul = europe.invert([projs[i].clipExtent()[0][0], projs[i].clipExtent()[0][1]]);\n var ur = europe.invert([projs[i].clipExtent()[1][0], projs[i].clipExtent()[0][1]]);\n var ld = europe.invert([projs[i].clipExtent()[1][0], projs[i].clipExtent()[1][1]]);\n var ll = europe.invert([projs[i].clipExtent()[0][0], projs[i].clipExtent()[1][1]]);\n \n console.log(\"ul = europe([\"+ul+\"]);\");\n console.log(\"ur = europe([\"+ur+\"]);\");\n console.log(\"ld = europe([\"+ld+\"]);\");\n console.log(\"ll = europe([\"+ll+\"]);\");\n \n console.log(\"context.moveTo(ul[0], ul[1]);\");\n console.log(\"context.lineTo(ur[0], ur[1]);\");\n console.log(\"context.lineTo(ld[0], ld[1]);\");\n console.log(\"context.lineTo(ll[0], ll[1]);\");\n console.log(\"context.closePath();\");\n \n }*/\n var ul, ur, ld, ll;\n ul = europe([42.45755610828648, 63.343658547914934]);\n ur = europe([52.65837266667029, 59.35045080290929]);\n ld = europe([47.19754502247785, 56.12653496548117]);\n ll = europe([37.673034273363044, 59.61638268506111]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([59.41110754003403, 62.35069727399336]);\n ur = europe([66.75050228640794, 57.11797303636038]);\n ld = europe([60.236065725110436, 54.63331433818992]);\n ll = europe([52.65837313153311, 59.350450804599355]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([48.81091130080243, 66.93353402634641]);\n ur = europe([59.41110730654679, 62.35069740653086]);\n ld = europe([52.6583728974441, 59.3504509222445]);\n ll = europe([42.45755631675751, 63.34365868805821]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([31.054198418446475, 52.1080673766184]);\n ur = europe([39.09869284884117, 49.400700047190554]);\n ld = europe([36.0580811499175, 46.02944174908498]);\n ll = europe([28.690508588835726, 48.433126979386415]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([33.977877745912025, 55.849945501331]);\n ur = europe([42.75328432167726, 52.78455122462353]);\n ld = europe([39.09869297540224, 49.400700176148625]);\n ll = europe([31.05419851807008, 52.10806751810923]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([52.658372900759296, 59.35045068526415]);\n ur = europe([60.23606549583304, 54.63331423800264]);\n ld = europe([54.6756370953122, 51.892298789399455]);\n ll = europe([47.19754524788189, 56.126534861222794]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([47.19754506082455, 56.126534735591456]);\n ur = europe([54.675636900123514, 51.892298681337095]);\n ld = europe([49.94448648951486, 48.98775484983285]);\n ll = europe([42.75328468716108, 52.78455126060818]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([42.75328453416769, 52.78455113209101]);\n ur = europe([49.94448632339758, 48.98775473706457]);\n ld = europe([45.912339990394315, 45.99361784987003]);\n ll = europe([39.09869317356607, 49.40070009378711]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([37.673034114296634, 59.61638254183119]);\n ur = europe([47.197544835420544, 56.126534839849846]);\n ld = europe([42.75328447467064, 52.78455135314068]);\n ll = europe([33.977877870363905, 55.849945644671145]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([44.56748486446032, 57.26489367845818]);\n ld = europe([43.9335791193588, 53.746540942601726]);\n ll = europe([43, 56]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = europe([37.673034114296634, 59.61638254183119]);\n ur = europe([40.25902691953466, 58.83002044222639]);\n ld = europe([38.458270492742024, 57.26232178028002]);\n ll = europe([35.97754948030156, 58.00266637992386]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n };\n conicConformalEurope.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return conicConformalEurope.scale(750);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$9(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n) {\n streams[i].point(x, y);\n } },\n sphere: function () { var i = -1; while (++i < n) {\n streams[i].sphere();\n } },\n lineStart: function () { var i = -1; while (++i < n) {\n streams[i].lineStart();\n } },\n lineEnd: function () { var i = -1; while (++i < n) {\n streams[i].lineEnd();\n } },\n polygonStart: function () { var i = -1; while (++i < n) {\n streams[i].polygonStart();\n } },\n polygonEnd: function () { var i = -1; while (++i < n) {\n streams[i].polygonEnd();\n } }\n };\n }\n // A composite projection for Malaysia, configured by default for 960×500.\n function mercatorMalaysia() {\n var cache, cacheStream, peninsular = d3Geo.geoMercator().center([105.25, 4.00]), peninsularPoint, borneo = d3Geo.geoMercator().center([118.65, 2.86]), borneoPoint, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n function mercatorMalaysia(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (peninsularPoint.point(x, y), point) ||\n (borneoPoint.point(x, y), point);\n }\n mercatorMalaysia.invert = function (coordinates) {\n var k = peninsular.scale(), t = peninsular.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= -0.0521 && y < 0.0229 && x >= -0.0111 && x < 0.1000 ? borneo\n : peninsular).invert(coordinates);\n };\n mercatorMalaysia.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$9([peninsular.stream(cacheStream = stream), borneo.stream(stream)]);\n };\n mercatorMalaysia.precision = function (_) {\n if (!arguments.length) {\n return peninsular.precision();\n }\n peninsular.precision(_);\n borneo.precision(_);\n return reset();\n };\n mercatorMalaysia.scale = function (_) {\n if (!arguments.length) {\n return peninsular.scale();\n }\n peninsular.scale(_);\n borneo.scale(_ * 0.615);\n return mercatorMalaysia.translate(peninsular.translate());\n };\n mercatorMalaysia.translate = function (_) {\n if (!arguments.length) {\n return peninsular.translate();\n }\n var k = peninsular.scale(), x = +_[0], y = +_[1];\n peninsularPoint = peninsular\n .translate(_)\n .clipExtent([[x - 0.1100 * k, y - 0.0521 * k], [x - 0.0111 * k, y + 0.0521 * k]])\n .stream(pointStream);\n borneoPoint = borneo\n .translate([x + 0.09000 * k, y - 0.00 * k])\n .clipExtent([[x - 0.0111 * k + epsilon, y - 0.0521 * k + epsilon], [x + 0.1000 * k - epsilon, y + 0.024 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n mercatorMalaysia.fitExtent = function (extent, object) {\n return fitExtent(mercatorMalaysia, extent, object);\n };\n mercatorMalaysia.fitSize = function (size, object) {\n return fitSize(mercatorMalaysia, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return mercatorMalaysia;\n }\n mercatorMalaysia.drawCompositionBorders = function (context) {\n var llbor = peninsular([106.3214, 2.0228]);\n var lmbor = peninsular([105.1843, 2.3761]);\n var lrbor = peninsular([104.2151, 3.3618]);\n var llrbor = peninsular([104.2150, 4.5651]);\n context.moveTo(llbor[0], llbor[1]);\n context.lineTo(lmbor[0], lmbor[1]);\n context.lineTo(lrbor[0], lrbor[1]);\n context.lineTo(llrbor[0], llrbor[1]);\n };\n mercatorMalaysia.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return mercatorMalaysia.scale(4800);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex$a(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n) {\n streams[i].point(x, y);\n } },\n sphere: function () { var i = -1; while (++i < n) {\n streams[i].sphere();\n } },\n lineStart: function () { var i = -1; while (++i < n) {\n streams[i].lineStart();\n } },\n lineEnd: function () { var i = -1; while (++i < n) {\n streams[i].lineEnd();\n } },\n polygonStart: function () { var i = -1; while (++i < n) {\n streams[i].polygonStart();\n } },\n polygonEnd: function () { var i = -1; while (++i < n) {\n streams[i].polygonEnd();\n } }\n };\n }\n // A composite projection for Equatorial Guinea, configured by default for 960×500.\n function mercatorEquatorialGuinea() {\n var cache, cacheStream, continent = d3Geo.geoMercator().rotate([-9.5, -1.5]), continentPoint, bioko = d3Geo.geoMercator().rotate([-8.6, -3.5]), biokoPoint, annobon = d3Geo.geoMercator().rotate([-5.6, 1.45]), annobonPoint, point, pointStream = { point: function (x, y) { point = [x, y]; } };\n function mercatorEquatorialGuinea(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (continentPoint.point(x, y), point) ||\n (biokoPoint.point(x, y), point) ||\n (annobonPoint.point(x, y), point);\n }\n mercatorEquatorialGuinea.invert = function (coordinates) {\n var k = continent.scale(), t = continent.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= -0.02 && y < 0 && x >= -0.038 && x < -0.005 ? bioko\n : y >= 0 && y < 0.02 && x >= -0.038 && x < -0.005 ? annobon\n : continent).invert(coordinates);\n };\n mercatorEquatorialGuinea.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex$a([continent.stream(cacheStream = stream), bioko.stream(stream), annobon.stream(stream)]);\n };\n mercatorEquatorialGuinea.precision = function (_) {\n if (!arguments.length) {\n return continent.precision();\n }\n continent.precision(_);\n bioko.precision(_);\n annobon.precision(_);\n return reset();\n };\n mercatorEquatorialGuinea.scale = function (_) {\n if (!arguments.length) {\n return continent.scale();\n }\n continent.scale(_);\n bioko.scale(_ * 1.5);\n annobon.scale(_ * 4);\n return mercatorEquatorialGuinea.translate(continent.translate());\n };\n mercatorEquatorialGuinea.translate = function (_) {\n if (!arguments.length) {\n return continent.translate();\n }\n var k = continent.scale(), x = +_[0], y = +_[1];\n continentPoint = continent\n .translate(_)\n .clipExtent([[x - 0.005 * k, y - 0.02 * k], [x + 0.038 * k, y + 0.02 * k]])\n .stream(pointStream);\n biokoPoint = bioko\n .translate([x - 0.025 * k, y - 0.01 * k])\n .clipExtent([[x - 0.038 * k + epsilon, y - 0.02 * k + epsilon], [x - 0.005 * k - epsilon, y + 0 * k - epsilon]])\n .stream(pointStream);\n annobonPoint = annobon\n .translate([x - 0.025 * k, y + 0.01 * k])\n .clipExtent([[x - 0.038 * k + epsilon, y - 0 * k + epsilon], [x - 0.005 * k - epsilon, y + 0.02 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n mercatorEquatorialGuinea.fitExtent = function (extent, object) {\n return fitExtent(mercatorEquatorialGuinea, extent, object);\n };\n mercatorEquatorialGuinea.fitSize = function (size, object) {\n return fitSize(mercatorEquatorialGuinea, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return mercatorEquatorialGuinea;\n }\n mercatorEquatorialGuinea.drawCompositionBorders = function (context) {\n /*\n console.log(\"var ul, ur, ld, ll;\");\n var projs = [continent, bioko, annobon];\n for (var i in projs){\n var ul = continent.invert([projs[i].clipExtent()[0][0], projs[i].clipExtent()[0][1]]);\n var ur = continent.invert([projs[i].clipExtent()[1][0], projs[i].clipExtent()[0][1]]);\n var ld = continent.invert([projs[i].clipExtent()[1][0], projs[i].clipExtent()[1][1]]);\n var ll = continent.invert([projs[i].clipExtent()[0][0], projs[i].clipExtent()[1][1]]);\n \n console.log(\"ul = continent([\"+ul+\"]);\");\n console.log(\"ur = continent([\"+ur+\"]);\");\n console.log(\"ld = continent([\"+ld+\"]);\");\n console.log(\"ll = continent([\"+ll+\"]);\");\n \n console.log(\"context.moveTo(ul[0], ul[1]);\");\n console.log(\"context.lineTo(ur[0], ur[1]);\");\n console.log(\"context.lineTo(ld[0], ld[1]);\");\n console.log(\"context.lineTo(ll[0], ll[1]);\");\n console.log(\"context.closePath();\");\n \n }*/\n var ul, ur, ld, ll;\n ul = continent([9.21327272751682, 2.645820439454123]);\n ur = continent([11.679126293239872, 2.644755519268689]);\n ld = continent([11.676845389029227, 0.35307824637606433]);\n ll = continent([9.213572917774014, 0.35414205204417754]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = continent([7.320873711543669, 2.64475551449975]);\n ur = continent([9.213272722738658, 2.645820434679803]);\n ld = continent([9.213422896480349, 1.4999812505283054]);\n ll = continent([7.322014760520787, 1.4989168878985566]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n ul = continent([7.3220147605302905, 1.4989168783492766]);\n ur = continent([9.213422896481598, 1.499981240979021]);\n ld = continent([9.213572912999604, 0.354142056817247]);\n ll = continent([7.323154615739809, 0.353078251154504]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n };\n mercatorEquatorialGuinea.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return mercatorEquatorialGuinea.scale(12000);\n }\n function multiplex$b(streams) {\n var n = streams.length;\n return {\n point: function (x, y) {\n var i = -1;\n while (++i < n)\n streams[i].point(x, y);\n },\n sphere: function () {\n var i = -1;\n while (++i < n)\n streams[i].sphere();\n },\n lineStart: function () {\n var i = -1;\n while (++i < n)\n streams[i].lineStart();\n },\n lineEnd: function () {\n var i = -1;\n while (++i < n)\n streams[i].lineEnd();\n },\n polygonStart: function () {\n var i = -1;\n while (++i < n)\n streams[i].polygonStart();\n },\n polygonEnd: function () {\n var i = -1;\n while (++i < n)\n streams[i].polygonEnd();\n }\n };\n }\n function albersUk() {\n var cache, cacheStream, main = d3Geo.geoAlbers()\n .rotate([4.4, 0.8])\n .center([0, 55.4])\n .parallels([50, 60]), mainPoint, shetland = d3Geo.geoAlbers()\n .rotate([4.4, 0.8])\n .center([0, 55.4])\n .parallels([50, 60]), shetlandPoint, point, pointStream = {\n point: function (x, y) {\n point = [x, y];\n }\n };\n function albersUk(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return ((point = null),\n (mainPoint.point(x, y), point) || (shetlandPoint.point(x, y), point));\n }\n albersUk.invert = function (coordinates) {\n var k = main.scale(), t = main.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= -0.089 && y < 0.06 && x >= 0.029 && x < 0.046\n ? shetland\n : main).invert(coordinates);\n };\n albersUk.stream = function (stream) {\n return cache && cacheStream === stream\n ? cache\n : (cache = multiplex$b([\n main.stream((cacheStream = stream)),\n shetland.stream(stream)\n ]));\n };\n albersUk.precision = function (_) {\n if (!arguments.length)\n return main.precision();\n main.precision(_), shetland.precision(_);\n return reset();\n };\n albersUk.scale = function (_) {\n if (!arguments.length)\n return main.scale();\n main.scale(_), shetland.scale(_);\n return albersUk.translate(main.translate());\n };\n albersUk.translate = function (_) {\n if (!arguments.length)\n return main.translate();\n var k = main.scale(), x = +_[0], y = +_[1];\n mainPoint = main\n .translate(_)\n .clipExtent([\n [x - 0.065 * k, y - 0.089 * k],\n [x + 0.075 * k, y + 0.089 * k]\n ])\n .stream(pointStream);\n shetlandPoint = shetland\n .translate([x + 0.01 * k, y + 0.025 * k])\n .clipExtent([\n [x + 0.029 * k + epsilon, y - 0.089 * k + epsilon],\n [x + 0.046 * k - epsilon, y - 0.06 * k - epsilon]\n ])\n .stream(pointStream);\n return reset();\n };\n albersUk.fitExtent = function (extent, object) {\n return fitExtent(albersUk, extent, object);\n };\n albersUk.fitSize = function (size, object) {\n return fitSize(albersUk, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return albersUk;\n }\n albersUk.drawCompositionBorders = function (context) {\n /*var ul = main.invert([\n shetland.clipExtent()[0][0],\n shetland.clipExtent()[0][1]\n ]);\n var ur = main.invert([\n shetland.clipExtent()[1][0],\n shetland.clipExtent()[0][1]\n ]);\n var ld = main.invert([\n shetland.clipExtent()[1][0],\n shetland.clipExtent()[1][1]\n ]);\n var ll = main.invert([\n shetland.clipExtent()[0][0],\n shetland.clipExtent()[1][1]\n ]);\n \n console.log(\"ul = main([\" + ul + \"]);\");\n console.log(\"ur = main([\" + ur + \"]);\");\n console.log(\"ld = main([\" + ld + \"]);\");\n console.log(\"ll = main([\" + ll + \"]);\");\n \n console.log(\"context.moveTo(ul[0], ul[1]);\");\n console.log(\"context.lineTo(ur[0], ur[1]);\");\n console.log(\"context.lineTo(ld[0], ld[1]);\");\n console.log(\"context.lineTo(ll[0], ll[1]);\");\n console.log(\"context.closePath();\");*/\n var ul, ur, ld, ll;\n ul = main([-1.113205870242365, 59.64920050773357]);\n ur = main([0.807899092399606, 59.59085836472269]);\n ld = main([0.5778611961420386, 57.93467822832577]);\n ll = main([-1.25867782078448, 57.99029450085142]);\n context.moveTo(ul[0], ul[1]);\n context.lineTo(ur[0], ur[1]);\n context.lineTo(ld[0], ld[1]);\n context.lineTo(ll[0], ll[1]);\n context.closePath();\n };\n albersUk.getCompositionBorders = function () {\n var context = d3Path.path();\n this.drawCompositionBorders(context);\n return context.toString();\n };\n return albersUk.scale(2800);\n }\n exports.geoAlbersUk = albersUk;\n exports.geoAlbersUsa = albersUsa;\n exports.geoAlbersUsaTerritories = albersUsaTerritories;\n exports.geoConicConformalEurope = conicConformalEurope;\n exports.geoConicConformalFrance = conicConformalFrance;\n exports.geoConicConformalPortugal = conicConformalPortugal;\n exports.geoConicConformalSpain = conicConformalSpain;\n exports.geoConicEquidistantJapan = conicEquidistantJapan;\n exports.geoMercatorEcuador = mercatorEcuador;\n exports.geoMercatorEquatorialGuinea = mercatorEquatorialGuinea;\n exports.geoMercatorMalaysia = mercatorMalaysia;\n exports.geoTransverseMercatorChile = transverseMercatorChile;\n Object.defineProperty(exports, '__esModule', { value: true });\n})));\n","// https://d3js.org/d3-dsv/ v1.2.0 Copyright 2019 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = global || self, factory(global.d3 = global.d3 || {}));\n}(this, function (exports) {\n 'use strict';\n var EOL = {}, EOF = {}, QUOTE = 34, NEWLINE = 10, RETURN = 13;\n function objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function (name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n }\n function customConverter(columns, f) {\n var object = objectConverter(columns);\n return function (row, i) {\n return f(object(row), i, columns);\n };\n }\n // Compute unique columns in order of discovery.\n function inferColumns(rows) {\n var columnSet = Object.create(null), columns = [];\n rows.forEach(function (row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n return columns;\n }\n function pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n }\n function formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n }\n function formatDate(date) {\n var hours = date.getUTCHours(), minutes = date.getUTCMinutes(), seconds = date.getUTCSeconds(), milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear()) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n }\n function dsv(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"), DELIMITER = delimiter.charCodeAt(0);\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function (row, i) {\n if (convert)\n return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length, I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE)\n --N;\n if (text.charCodeAt(N - 1) === RETURN)\n --N;\n function token() {\n if (eof)\n return EOF;\n if (eol)\n return eol = false, EOL;\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE)\n ;\n if ((i = I) >= N)\n eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE)\n eol = true;\n else if (c === RETURN) {\n eol = true;\n if (text.charCodeAt(I) === NEWLINE)\n ++I;\n }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE)\n eol = true;\n else if (c === RETURN) {\n eol = true;\n if (text.charCodeAt(I) === NEWLINE)\n ++I;\n }\n else if (c !== DELIMITER)\n continue;\n return text.slice(j, i);\n }\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF)\n row.push(t), t = token();\n if (f && (row = f(row, n++)) == null)\n continue;\n rows.push(row);\n }\n return rows;\n }\n function preformatBody(rows, columns) {\n return rows.map(function (row) {\n return columns.map(function (column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n function format(rows, columns) {\n if (columns == null)\n columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n function formatBody(rows, columns) {\n if (columns == null)\n columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n }\n var csv = dsv(\",\");\n var csvParse = csv.parse;\n var csvParseRows = csv.parseRows;\n var csvFormat = csv.format;\n var csvFormatBody = csv.formatBody;\n var csvFormatRows = csv.formatRows;\n var csvFormatRow = csv.formatRow;\n var csvFormatValue = csv.formatValue;\n var tsv = dsv(\"\\t\");\n var tsvParse = tsv.parse;\n var tsvParseRows = tsv.parseRows;\n var tsvFormat = tsv.format;\n var tsvFormatBody = tsv.formatBody;\n var tsvFormatRows = tsv.formatRows;\n var tsvFormatRow = tsv.formatRow;\n var tsvFormatValue = tsv.formatValue;\n function autoType(object) {\n for (var key in object) {\n var value = object[key].trim(), number, m;\n if (!value)\n value = null;\n else if (value === \"true\")\n value = true;\n else if (value === \"false\")\n value = false;\n else if (value === \"NaN\")\n value = NaN;\n else if (!isNaN(number = +value))\n value = number;\n else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n if (fixtz && !!m[4] && !m[7])\n value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n value = new Date(value);\n }\n else\n continue;\n object[key] = value;\n }\n return object;\n }\n // https://github.com/d3/d3-dsv/issues/45\n var fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();\n exports.autoType = autoType;\n exports.csvFormat = csvFormat;\n exports.csvFormatBody = csvFormatBody;\n exports.csvFormatRow = csvFormatRow;\n exports.csvFormatRows = csvFormatRows;\n exports.csvFormatValue = csvFormatValue;\n exports.csvParse = csvParse;\n exports.csvParseRows = csvParseRows;\n exports.dsvFormat = dsv;\n exports.tsvFormat = tsvFormat;\n exports.tsvFormatBody = tsvFormatBody;\n exports.tsvFormatRow = tsvFormatRow;\n exports.tsvFormatRows = tsvFormatRows;\n exports.tsvFormatValue = tsvFormatValue;\n exports.tsvParse = tsvParse;\n exports.tsvParseRows = tsvParseRows;\n Object.defineProperty(exports, '__esModule', { value: true });\n}));\n","// https://d3js.org/d3-geo-projection/ Version 2.1.2. Copyright 2017 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-geo'), require('d3-array')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-geo', 'd3-array'], factory) :\n (factory((global.d3 = global.d3 || {}), global.d3, global.d3));\n}(this, (function (exports, d3Geo, d3Array) {\n 'use strict';\n var abs = Math.abs;\n var atan = Math.atan;\n var atan2 = Math.atan2;\n var cos = Math.cos;\n var exp = Math.exp;\n var floor = Math.floor;\n var log = Math.log;\n var max = Math.max;\n var min = Math.min;\n var pow = Math.pow;\n var round = Math.round;\n var sign = Math.sign || function (x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\n var sin = Math.sin;\n var tan = Math.tan;\n var epsilon = 1e-6;\n var epsilon2 = 1e-12;\n var pi = Math.PI;\n var halfPi = pi / 2;\n var quarterPi = pi / 4;\n var sqrt1_2 = Math.SQRT1_2;\n var sqrt2 = sqrt(2);\n var sqrtPi = sqrt(pi);\n var tau = pi * 2;\n var degrees = 180 / pi;\n var radians = pi / 180;\n function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n }\n function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n }\n function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n }\n function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n }\n function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n }\n function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n }\n function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n }\n function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n }\n function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n }\n function airyRaw(beta) {\n var tanBeta_2 = tan(beta / 2), b = 2 * log(cos(beta / 2)) / (tanBeta_2 * tanBeta_2);\n function forward(x, y) {\n var cosx = cos(x), cosy = cos(y), siny = sin(y), cosz = cosy * cosx, k = -((1 - cosz ? log((1 + cosz) / 2) / (1 - cosz) : -0.5) + b / (1 + cosz));\n return [k * cosy * sin(x), k * siny];\n }\n forward.invert = function (x, y) {\n var r = sqrt(x * x + y * y), z = -beta / 2, i = 50, delta;\n if (!r)\n return [0, 0];\n do {\n var z_2 = z / 2, cosz_2 = cos(z_2), sinz_2 = sin(z_2), tanz_2 = tan(z_2), lnsecz_2 = log(1 / cosz_2);\n z -= delta = (2 / tanz_2 * lnsecz_2 - b * tanz_2 - r) / (-lnsecz_2 / (sinz_2 * sinz_2) + 1 - b / (2 * cosz_2 * cosz_2));\n } while (abs(delta) > epsilon && --i > 0);\n var sinz = sin(z);\n return [atan2(x * sinz, r * cos(z)), asin(y * sinz / r)];\n };\n return forward;\n }\n var airy = function () {\n var beta = halfPi, m = d3Geo.geoProjectionMutator(airyRaw), p = m(beta);\n p.radius = function (_) {\n return arguments.length ? m(beta = _ * radians) : beta * degrees;\n };\n return p\n .scale(179.976)\n .clipAngle(147);\n };\n function aitoffRaw(x, y) {\n var cosy = cos(y), sincia = sinci(acos(cosy * cos(x /= 2)));\n return [2 * cosy * sin(x) * sincia, sin(y) * sincia];\n }\n // Abort if [x, y] is not within an ellipse centered at [0, 0] with\n // semi-major axis pi and semi-minor axis pi/2.\n aitoffRaw.invert = function (x, y) {\n if (x * x + 4 * y * y > pi * pi + epsilon)\n return;\n var x1 = x, y1 = y, i = 25;\n do {\n var sinx = sin(x1), sinx_2 = sin(x1 / 2), cosx_2 = cos(x1 / 2), siny = sin(y1), cosy = cos(y1), sin_2y = sin(2 * y1), sin2y = siny * siny, cos2y = cosy * cosy, sin2x_2 = sinx_2 * sinx_2, c = 1 - cos2y * cosx_2 * cosx_2, e = c ? acos(cosy * cosx_2) * sqrt(f = 1 / c) : f = 0, f, fx = 2 * e * cosy * sinx_2 - x, fy = e * siny - y, dxdx = f * (cos2y * sin2x_2 + e * cosy * cosx_2 * sin2y), dxdy = f * (0.5 * sinx * sin_2y - e * 2 * siny * sinx_2), dydx = f * 0.25 * (sin_2y * sinx_2 - e * siny * cos2y * sinx), dydy = f * (sin2y * cosx_2 + e * sin2x_2 * cosy), z = dxdy * dydx - dydy * dxdx;\n if (!z)\n break;\n var dx = (fy * dxdy - fx * dydy) / z, dy = (fx * dydx - fy * dxdx) / z;\n x1 -= dx, y1 -= dy;\n } while ((abs(dx) > epsilon || abs(dy) > epsilon) && --i > 0);\n return [x1, y1];\n };\n var aitoff = function () {\n return d3Geo.geoProjection(aitoffRaw)\n .scale(152.63);\n };\n function armadilloRaw(phi0) {\n var sinPhi0 = sin(phi0), cosPhi0 = cos(phi0), sPhi0 = phi0 >= 0 ? 1 : -1, tanPhi0 = tan(sPhi0 * phi0), k = (1 + sinPhi0 - cosPhi0) / 2;\n function forward(lambda, phi) {\n var cosPhi = cos(phi), cosLambda = cos(lambda /= 2);\n return [\n (1 + cosPhi) * sin(lambda),\n (sPhi0 * phi > -atan2(cosLambda, tanPhi0) - 1e-3 ? 0 : -sPhi0 * 10) + k + sin(phi) * cosPhi0 - (1 + cosPhi) * sinPhi0 * cosLambda // TODO D3 core should allow null or [NaN, NaN] to be returned.\n ];\n }\n forward.invert = function (x, y) {\n var lambda = 0, phi = 0, i = 50;\n do {\n var cosLambda = cos(lambda), sinLambda = sin(lambda), cosPhi = cos(phi), sinPhi = sin(phi), A = 1 + cosPhi, fx = A * sinLambda - x, fy = k + sinPhi * cosPhi0 - A * sinPhi0 * cosLambda - y, dxdLambda = A * cosLambda / 2, dxdPhi = -sinLambda * sinPhi, dydLambda = sinPhi0 * A * sinLambda / 2, dydPhi = cosPhi0 * cosPhi + sinPhi0 * cosLambda * sinPhi, denominator = dxdPhi * dydLambda - dydPhi * dxdLambda, dLambda = (fy * dxdPhi - fx * dydPhi) / denominator / 2, dPhi = (fx * dydLambda - fy * dxdLambda) / denominator;\n lambda -= dLambda, phi -= dPhi;\n } while ((abs(dLambda) > epsilon || abs(dPhi) > epsilon) && --i > 0);\n return sPhi0 * phi > -atan2(cos(lambda), tanPhi0) - 1e-3 ? [lambda * 2, phi] : null;\n };\n return forward;\n }\n var armadillo = function () {\n var phi0 = 20 * radians, sPhi0 = phi0 >= 0 ? 1 : -1, tanPhi0 = tan(sPhi0 * phi0), m = d3Geo.geoProjectionMutator(armadilloRaw), p = m(phi0), stream_ = p.stream;\n p.parallel = function (_) {\n if (!arguments.length)\n return phi0 * degrees;\n tanPhi0 = tan((sPhi0 = (phi0 = _ * radians) >= 0 ? 1 : -1) * phi0);\n return m(phi0);\n };\n p.stream = function (stream) {\n var rotate = p.rotate(), rotateStream = stream_(stream), sphereStream = (p.rotate([0, 0]), stream_(stream));\n p.rotate(rotate);\n rotateStream.sphere = function () {\n sphereStream.polygonStart(), sphereStream.lineStart();\n for (var lambda = sPhi0 * -180; sPhi0 * lambda < 180; lambda += sPhi0 * 90)\n sphereStream.point(lambda, sPhi0 * 90);\n while (sPhi0 * (lambda -= phi0) >= -180) { // TODO precision?\n sphereStream.point(lambda, sPhi0 * -atan2(cos(lambda * radians / 2), tanPhi0) * degrees);\n }\n sphereStream.lineEnd(), sphereStream.polygonEnd();\n };\n return rotateStream;\n };\n return p\n .scale(218.695)\n .center([0, 28.0974]);\n };\n function augustRaw(lambda, phi) {\n var tanPhi = tan(phi / 2), k = sqrt(1 - tanPhi * tanPhi), c = 1 + k * cos(lambda /= 2), x = sin(lambda) * k / c, y = tanPhi / c, x2 = x * x, y2 = y * y;\n return [\n 4 / 3 * x * (3 + x2 - 3 * y2),\n 4 / 3 * y * (3 + 3 * x2 - y2)\n ];\n }\n augustRaw.invert = function (x, y) {\n x *= 3 / 8, y *= 3 / 8;\n if (!x && abs(y) > 1)\n return null;\n var x2 = x * x, y2 = y * y, s = 1 + x2 + y2, sin3Eta = sqrt((s - sqrt(s * s - 4 * y * y)) / 2), eta = asin(sin3Eta) / 3, xi = sin3Eta ? arcosh(abs(y / sin3Eta)) / 3 : arsinh(abs(x)) / 3, cosEta = cos(eta), coshXi = cosh(xi), d = coshXi * coshXi - cosEta * cosEta;\n return [\n sign(x) * 2 * atan2(sinh(xi) * cosEta, 0.25 - d),\n sign(y) * 2 * atan2(coshXi * sin(eta), 0.25 + d)\n ];\n };\n var august = function () {\n return d3Geo.geoProjection(augustRaw)\n .scale(66.1603);\n };\n var sqrt8 = sqrt(8);\n var phi0 = log(1 + sqrt2);\n function bakerRaw(lambda, phi) {\n var phi0 = abs(phi);\n return phi0 < quarterPi\n ? [lambda, log(tan(quarterPi + phi / 2))]\n : [lambda * cos(phi0) * (2 * sqrt2 - 1 / sin(phi0)), sign(phi) * (2 * sqrt2 * (phi0 - quarterPi) - log(tan(phi0 / 2)))];\n }\n bakerRaw.invert = function (x, y) {\n if ((y0 = abs(y)) < phi0)\n return [x, 2 * atan(exp(y)) - halfPi];\n var phi = quarterPi, i = 25, delta, y0;\n do {\n var cosPhi_2 = cos(phi / 2), tanPhi_2 = tan(phi / 2);\n phi -= delta = (sqrt8 * (phi - quarterPi) - log(tanPhi_2) - y0) / (sqrt8 - cosPhi_2 * cosPhi_2 / (2 * tanPhi_2));\n } while (abs(delta) > epsilon2 && --i > 0);\n return [x / (cos(phi) * (sqrt8 - 1 / sin(phi))), sign(y) * phi];\n };\n var baker = function () {\n return d3Geo.geoProjection(bakerRaw)\n .scale(112.314);\n };\n function berghausRaw(lobes) {\n var k = 2 * pi / lobes;\n function forward(lambda, phi) {\n var p = d3Geo.geoAzimuthalEquidistantRaw(lambda, phi);\n if (abs(lambda) > halfPi) { // back hemisphere\n var theta = atan2(p[1], p[0]), r = sqrt(p[0] * p[0] + p[1] * p[1]), theta0 = k * round((theta - halfPi) / k) + halfPi, alpha = atan2(sin(theta -= theta0), 2 - cos(theta)); // angle relative to lobe end\n theta = theta0 + asin(pi / r * sin(alpha)) - alpha;\n p[0] = r * cos(theta);\n p[1] = r * sin(theta);\n }\n return p;\n }\n forward.invert = function (x, y) {\n var r = sqrt(x * x + y * y);\n if (r > halfPi) {\n var theta = atan2(y, x), theta0 = k * round((theta - halfPi) / k) + halfPi, s = theta > theta0 ? -1 : 1, A = r * cos(theta0 - theta), cotAlpha = 1 / tan(s * acos((A - pi) / sqrt(pi * (pi - 2 * A) + r * r)));\n theta = theta0 + 2 * atan((cotAlpha + s * sqrt(cotAlpha * cotAlpha - 3)) / 3);\n x = r * cos(theta), y = r * sin(theta);\n }\n return d3Geo.geoAzimuthalEquidistantRaw.invert(x, y);\n };\n return forward;\n }\n var berghaus = function () {\n var lobes = 5, m = d3Geo.geoProjectionMutator(berghausRaw), p = m(lobes), projectionStream = p.stream, epsilon$$1 = 1e-2, cr = -cos(epsilon$$1 * radians), sr = sin(epsilon$$1 * radians);\n p.lobes = function (_) {\n return arguments.length ? m(lobes = +_) : lobes;\n };\n p.stream = function (stream) {\n var rotate = p.rotate(), rotateStream = projectionStream(stream), sphereStream = (p.rotate([0, 0]), projectionStream(stream));\n p.rotate(rotate);\n rotateStream.sphere = function () {\n sphereStream.polygonStart(), sphereStream.lineStart();\n for (var i = 0, delta = 360 / lobes, delta0 = 2 * pi / lobes, phi = 90 - 180 / lobes, phi0 = halfPi; i < lobes; ++i, phi -= delta, phi0 -= delta0) {\n sphereStream.point(atan2(sr * cos(phi0), cr) * degrees, asin(sr * sin(phi0)) * degrees);\n if (phi < -90) {\n sphereStream.point(-90, -180 - phi - epsilon$$1);\n sphereStream.point(-90, -180 - phi + epsilon$$1);\n }\n else {\n sphereStream.point(90, phi + epsilon$$1);\n sphereStream.point(90, phi - epsilon$$1);\n }\n }\n sphereStream.lineEnd(), sphereStream.polygonEnd();\n };\n return rotateStream;\n };\n return p\n .scale(87.8076)\n .center([0, 17.1875])\n .clipAngle(180 - 1e-3);\n };\n function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do\n phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n }\n function mollweideBromleyRaw(cx, cy, cp) {\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n forward.invert = function (x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n return forward;\n }\n var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n var mollweide = function () {\n return d3Geo.geoProjection(mollweideRaw)\n .scale(169.529);\n };\n var k = 2.00276;\n var w = 1.11072;\n function boggsRaw(lambda, phi) {\n var theta = mollweideBromleyTheta(pi, phi);\n return [k * lambda / (1 / cos(phi) + w / cos(theta)), (phi + sqrt2 * sin(theta)) / k];\n }\n boggsRaw.invert = function (x, y) {\n var ky = k * y, theta = y < 0 ? -quarterPi : quarterPi, i = 25, delta, phi;\n do {\n phi = ky - sqrt2 * sin(theta);\n theta -= delta = (sin(2 * theta) + 2 * theta - pi * sin(phi)) / (2 * cos(2 * theta) + 2 + pi * cos(phi) * sqrt2 * cos(theta));\n } while (abs(delta) > epsilon && --i > 0);\n phi = ky - sqrt2 * sin(theta);\n return [x * (1 / cos(phi) + w / cos(theta)) / k, phi];\n };\n var boggs = function () {\n return d3Geo.geoProjection(boggsRaw)\n .scale(160.857);\n };\n var parallel1 = function (projectAt) {\n var phi0 = 0, m = d3Geo.geoProjectionMutator(projectAt), p = m(phi0);\n p.parallel = function (_) {\n return arguments.length ? m(phi0 = _ * radians) : phi0 * degrees;\n };\n return p;\n };\n function sinusoidalRaw(lambda, phi) {\n return [lambda * cos(phi), phi];\n }\n sinusoidalRaw.invert = function (x, y) {\n return [x / cos(y), y];\n };\n var sinusoidal = function () {\n return d3Geo.geoProjection(sinusoidalRaw)\n .scale(152.63);\n };\n function bonneRaw(phi0) {\n if (!phi0)\n return sinusoidalRaw;\n var cotPhi0 = 1 / tan(phi0);\n function forward(lambda, phi) {\n var rho = cotPhi0 + phi0 - phi, e = rho ? lambda * cos(phi) / rho : rho;\n return [rho * sin(e), cotPhi0 - rho * cos(e)];\n }\n forward.invert = function (x, y) {\n var rho = sqrt(x * x + (y = cotPhi0 - y) * y), phi = cotPhi0 + phi0 - rho;\n return [rho / cos(phi) * atan2(x, y), phi];\n };\n return forward;\n }\n var bonne = function () {\n return parallel1(bonneRaw)\n .scale(123.082)\n .center([0, 26.1441])\n .parallel(45);\n };\n function bottomleyRaw(sinPsi) {\n function forward(lambda, phi) {\n var rho = halfPi - phi, eta = rho ? lambda * sinPsi * sin(rho) / rho : rho;\n return [rho * sin(eta) / sinPsi, halfPi - rho * cos(eta)];\n }\n forward.invert = function (x, y) {\n var x1 = x * sinPsi, y1 = halfPi - y, rho = sqrt(x1 * x1 + y1 * y1), eta = atan2(x1, y1);\n return [(rho ? rho / sin(rho) : 1) * eta / sinPsi, halfPi - rho];\n };\n return forward;\n }\n var bottomley = function () {\n var sinPsi = 0.5, m = d3Geo.geoProjectionMutator(bottomleyRaw), p = m(sinPsi);\n p.fraction = function (_) {\n return arguments.length ? m(sinPsi = +_) : sinPsi;\n };\n return p\n .scale(158.837);\n };\n var bromleyRaw = mollweideBromleyRaw(1, 4 / pi, pi);\n var bromley = function () {\n return d3Geo.geoProjection(bromleyRaw)\n .scale(152.63);\n };\n // Azimuthal distance.\n function distance(dPhi, c1, s1, c2, s2, dLambda) {\n var cosdLambda = cos(dLambda), r;\n if (abs(dPhi) > 1 || abs(dLambda) > 1) {\n r = acos(s1 * s2 + c1 * c2 * cosdLambda);\n }\n else {\n var sindPhi = sin(dPhi / 2), sindLambda = sin(dLambda / 2);\n r = 2 * asin(sqrt(sindPhi * sindPhi + c1 * c2 * sindLambda * sindLambda));\n }\n return abs(r) > epsilon ? [r, atan2(c2 * sin(dLambda), c1 * s2 - s1 * c2 * cosdLambda)] : [0, 0];\n }\n // Angle opposite a, and contained between sides of lengths b and c.\n function angle(b, c, a) {\n return acos((b * b + c * c - a * a) / (2 * b * c));\n }\n // Normalize longitude.\n function longitude(lambda) {\n return lambda - 2 * pi * floor((lambda + pi) / (2 * pi));\n }\n function chamberlinRaw(p0, p1, p2) {\n var points = [\n [p0[0], p0[1], sin(p0[1]), cos(p0[1])],\n [p1[0], p1[1], sin(p1[1]), cos(p1[1])],\n [p2[0], p2[1], sin(p2[1]), cos(p2[1])]\n ];\n for (var a = points[2], b, i = 0; i < 3; ++i, a = b) {\n b = points[i];\n a.v = distance(b[1] - a[1], a[3], a[2], b[3], b[2], b[0] - a[0]);\n a.point = [0, 0];\n }\n var beta0 = angle(points[0].v[0], points[2].v[0], points[1].v[0]), beta1 = angle(points[0].v[0], points[1].v[0], points[2].v[0]), beta2 = pi - beta0;\n points[2].point[1] = 0;\n points[0].point[0] = -(points[1].point[0] = points[0].v[0] / 2);\n var mean = [\n points[2].point[0] = points[0].point[0] + points[2].v[0] * cos(beta0),\n 2 * (points[0].point[1] = points[1].point[1] = points[2].v[0] * sin(beta0))\n ];\n function forward(lambda, phi) {\n var sinPhi = sin(phi), cosPhi = cos(phi), v = new Array(3), i;\n // Compute distance and azimuth from control points.\n for (i = 0; i < 3; ++i) {\n var p = points[i];\n v[i] = distance(phi - p[1], p[3], p[2], cosPhi, sinPhi, lambda - p[0]);\n if (!v[i][0])\n return p.point;\n v[i][1] = longitude(v[i][1] - p.v[1]);\n }\n // Arithmetic mean of interception points.\n var point = mean.slice();\n for (i = 0; i < 3; ++i) {\n var j = i == 2 ? 0 : i + 1;\n var a = angle(points[i].v[0], v[i][0], v[j][0]);\n if (v[i][1] < 0)\n a = -a;\n if (!i) {\n point[0] += v[i][0] * cos(a);\n point[1] -= v[i][0] * sin(a);\n }\n else if (i == 1) {\n a = beta1 - a;\n point[0] -= v[i][0] * cos(a);\n point[1] -= v[i][0] * sin(a);\n }\n else {\n a = beta2 - a;\n point[0] += v[i][0] * cos(a);\n point[1] += v[i][0] * sin(a);\n }\n }\n point[0] /= 3, point[1] /= 3;\n return point;\n }\n return forward;\n }\n function pointRadians(p) {\n return p[0] *= radians, p[1] *= radians, p;\n }\n function chamberlinAfrica() {\n return chamberlin([0, 22], [45, 22], [22.5, -22])\n .scale(380)\n .center([22.5, 2]);\n }\n function chamberlin(p0, p1, p2) {\n var c = d3Geo.geoCentroid({ type: \"MultiPoint\", coordinates: [p0, p1, p2] }), R = [-c[0], -c[1]], r = d3Geo.geoRotation(R), p = d3Geo.geoProjection(chamberlinRaw(pointRadians(r(p0)), pointRadians(r(p1)), pointRadians(r(p2)))).rotate(R), center = p.center;\n delete p.rotate;\n p.center = function (_) {\n return arguments.length ? center(r(_)) : r.invert(center());\n };\n return p\n .clipAngle(90);\n }\n function collignonRaw(lambda, phi) {\n var alpha = sqrt(1 - sin(phi));\n return [(2 / sqrtPi) * lambda * alpha, sqrtPi * (1 - alpha)];\n }\n collignonRaw.invert = function (x, y) {\n var lambda = (lambda = y / sqrtPi - 1) * lambda;\n return [lambda > 0 ? x * sqrt(pi / lambda) / 2 : 0, asin(1 - lambda)];\n };\n var collignon = function () {\n return d3Geo.geoProjection(collignonRaw)\n .scale(95.6464)\n .center([0, 30]);\n };\n function craigRaw(phi0) {\n var tanPhi0 = tan(phi0);\n function forward(lambda, phi) {\n return [lambda, (lambda ? lambda / sin(lambda) : 1) * (sin(phi) * cos(lambda) - tanPhi0 * cos(phi))];\n }\n forward.invert = tanPhi0 ? function (x, y) {\n if (x)\n y *= sin(x) / x;\n var cosLambda = cos(x);\n return [x, 2 * atan2(sqrt(cosLambda * cosLambda + tanPhi0 * tanPhi0 - y * y) - cosLambda, tanPhi0 - y)];\n } : function (x, y) {\n return [x, asin(x ? y * tan(x) / x : y)];\n };\n return forward;\n }\n var craig = function () {\n return parallel1(craigRaw)\n .scale(249.828)\n .clipAngle(90);\n };\n var sqrt3 = sqrt(3);\n function crasterRaw(lambda, phi) {\n return [sqrt3 * lambda * (2 * cos(2 * phi / 3) - 1) / sqrtPi, sqrt3 * sqrtPi * sin(phi / 3)];\n }\n crasterRaw.invert = function (x, y) {\n var phi = 3 * asin(y / (sqrt3 * sqrtPi));\n return [sqrtPi * x / (sqrt3 * (2 * cos(2 * phi / 3) - 1)), phi];\n };\n var craster = function () {\n return d3Geo.geoProjection(crasterRaw)\n .scale(156.19);\n };\n function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n forward.invert = function (x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n return forward;\n }\n var cylindricalEqualArea = function () {\n return parallel1(cylindricalEqualAreaRaw)\n .parallel(38.58) // acos(sqrt(width / height / pi)) * radians\n .scale(195.044); // width / (sqrt(width / height / pi) * 2 * pi)\n };\n function cylindricalStereographicRaw(phi0) {\n var cosPhi0 = cos(phi0);\n function forward(lambda, phi) {\n return [lambda * cosPhi0, (1 + cosPhi0) * tan(phi / 2)];\n }\n forward.invert = function (x, y) {\n return [x / cosPhi0, atan(y / (1 + cosPhi0)) * 2];\n };\n return forward;\n }\n var cylindricalStereographic = function () {\n return parallel1(cylindricalStereographicRaw)\n .scale(124.75);\n };\n function eckert1Raw(lambda, phi) {\n var alpha = sqrt(8 / (3 * pi));\n return [\n alpha * lambda * (1 - abs(phi) / pi),\n alpha * phi\n ];\n }\n eckert1Raw.invert = function (x, y) {\n var alpha = sqrt(8 / (3 * pi)), phi = y / alpha;\n return [\n x / (alpha * (1 - abs(phi) / pi)),\n phi\n ];\n };\n var eckert1 = function () {\n return d3Geo.geoProjection(eckert1Raw)\n .scale(165.664);\n };\n function eckert2Raw(lambda, phi) {\n var alpha = sqrt(4 - 3 * sin(abs(phi)));\n return [\n 2 / sqrt(6 * pi) * lambda * alpha,\n sign(phi) * sqrt(2 * pi / 3) * (2 - alpha)\n ];\n }\n eckert2Raw.invert = function (x, y) {\n var alpha = 2 - abs(y) / sqrt(2 * pi / 3);\n return [\n x * sqrt(6 * pi) / (2 * alpha),\n sign(y) * asin((4 - alpha * alpha) / 3)\n ];\n };\n var eckert2 = function () {\n return d3Geo.geoProjection(eckert2Raw)\n .scale(165.664);\n };\n function eckert3Raw(lambda, phi) {\n var k = sqrt(pi * (4 + pi));\n return [\n 2 / k * lambda * (1 + sqrt(1 - 4 * phi * phi / (pi * pi))),\n 4 / k * phi\n ];\n }\n eckert3Raw.invert = function (x, y) {\n var k = sqrt(pi * (4 + pi)) / 2;\n return [\n x * k / (1 + sqrt(1 - y * y * (4 + pi) / (4 * pi))),\n y * k / 2\n ];\n };\n var eckert3 = function () {\n return d3Geo.geoProjection(eckert3Raw)\n .scale(180.739);\n };\n function eckert4Raw(lambda, phi) {\n var k = (2 + halfPi) * sin(phi);\n phi /= 2;\n for (var i = 0, delta = Infinity; i < 10 && abs(delta) > epsilon; i++) {\n var cosPhi = cos(phi);\n phi -= delta = (phi + sin(phi) * (cosPhi + 2) - k) / (2 * cosPhi * (1 + cosPhi));\n }\n return [\n 2 / sqrt(pi * (4 + pi)) * lambda * (1 + cos(phi)),\n 2 * sqrt(pi / (4 + pi)) * sin(phi)\n ];\n }\n eckert4Raw.invert = function (x, y) {\n var A = y * sqrt((4 + pi) / pi) / 2, k = asin(A), c = cos(k);\n return [\n x / (2 / sqrt(pi * (4 + pi)) * (1 + c)),\n asin((k + A * (c + 2)) / (2 + halfPi))\n ];\n };\n var eckert4 = function () {\n return d3Geo.geoProjection(eckert4Raw)\n .scale(180.739);\n };\n function eckert5Raw(lambda, phi) {\n return [\n lambda * (1 + cos(phi)) / sqrt(2 + pi),\n 2 * phi / sqrt(2 + pi)\n ];\n }\n eckert5Raw.invert = function (x, y) {\n var k = sqrt(2 + pi), phi = y * k / 2;\n return [\n k * x / (1 + cos(phi)),\n phi\n ];\n };\n var eckert5 = function () {\n return d3Geo.geoProjection(eckert5Raw)\n .scale(173.044);\n };\n function eckert6Raw(lambda, phi) {\n var k = (1 + halfPi) * sin(phi);\n for (var i = 0, delta = Infinity; i < 10 && abs(delta) > epsilon; i++) {\n phi -= delta = (phi + sin(phi) - k) / (1 + cos(phi));\n }\n k = sqrt(2 + pi);\n return [\n lambda * (1 + cos(phi)) / k,\n 2 * phi / k\n ];\n }\n eckert6Raw.invert = function (x, y) {\n var j = 1 + halfPi, k = sqrt(j / 2);\n return [\n x * 2 * k / (1 + cos(y *= k)),\n asin((y + sin(y)) / j)\n ];\n };\n var eckert6 = function () {\n return d3Geo.geoProjection(eckert6Raw)\n .scale(173.044);\n };\n var eisenlohrK = 3 + 2 * sqrt2;\n function eisenlohrRaw(lambda, phi) {\n var s0 = sin(lambda /= 2), c0 = cos(lambda), k = sqrt(cos(phi)), c1 = cos(phi /= 2), t = sin(phi) / (c1 + sqrt2 * c0 * k), c = sqrt(2 / (1 + t * t)), v = sqrt((sqrt2 * c1 + (c0 + s0) * k) / (sqrt2 * c1 + (c0 - s0) * k));\n return [\n eisenlohrK * (c * (v - 1 / v) - 2 * log(v)),\n eisenlohrK * (c * t * (v + 1 / v) - 2 * atan(t))\n ];\n }\n eisenlohrRaw.invert = function (x, y) {\n if (!(p = augustRaw.invert(x / 1.2, y * 1.065)))\n return null;\n var lambda = p[0], phi = p[1], i = 20, p;\n x /= eisenlohrK, y /= eisenlohrK;\n do {\n var _0 = lambda / 2, _1 = phi / 2, s0 = sin(_0), c0 = cos(_0), s1 = sin(_1), c1 = cos(_1), cos1 = cos(phi), k = sqrt(cos1), t = s1 / (c1 + sqrt2 * c0 * k), t2 = t * t, c = sqrt(2 / (1 + t2)), v0 = (sqrt2 * c1 + (c0 + s0) * k), v1 = (sqrt2 * c1 + (c0 - s0) * k), v2 = v0 / v1, v = sqrt(v2), vm1v = v - 1 / v, vp1v = v + 1 / v, fx = c * vm1v - 2 * log(v) - x, fy = c * t * vp1v - 2 * atan(t) - y, deltatDeltaLambda = s1 && sqrt1_2 * k * s0 * t2 / s1, deltatDeltaPhi = (sqrt2 * c0 * c1 + k) / (2 * (c1 + sqrt2 * c0 * k) * (c1 + sqrt2 * c0 * k) * k), deltacDeltat = -0.5 * t * c * c * c, deltacDeltaLambda = deltacDeltat * deltatDeltaLambda, deltacDeltaPhi = deltacDeltat * deltatDeltaPhi, A = (A = 2 * c1 + sqrt2 * k * (c0 - s0)) * A * v, deltavDeltaLambda = (sqrt2 * c0 * c1 * k + cos1) / A, deltavDeltaPhi = -(sqrt2 * s0 * s1) / (k * A), deltaxDeltaLambda = vm1v * deltacDeltaLambda - 2 * deltavDeltaLambda / v + c * (deltavDeltaLambda + deltavDeltaLambda / v2), deltaxDeltaPhi = vm1v * deltacDeltaPhi - 2 * deltavDeltaPhi / v + c * (deltavDeltaPhi + deltavDeltaPhi / v2), deltayDeltaLambda = t * vp1v * deltacDeltaLambda - 2 * deltatDeltaLambda / (1 + t2) + c * vp1v * deltatDeltaLambda + c * t * (deltavDeltaLambda - deltavDeltaLambda / v2), deltayDeltaPhi = t * vp1v * deltacDeltaPhi - 2 * deltatDeltaPhi / (1 + t2) + c * vp1v * deltatDeltaPhi + c * t * (deltavDeltaPhi - deltavDeltaPhi / v2), denominator = deltaxDeltaPhi * deltayDeltaLambda - deltayDeltaPhi * deltaxDeltaLambda;\n if (!denominator)\n break;\n var deltaLambda = (fy * deltaxDeltaPhi - fx * deltayDeltaPhi) / denominator, deltaPhi = (fx * deltayDeltaLambda - fy * deltaxDeltaLambda) / denominator;\n lambda -= deltaLambda;\n phi = max(-halfPi, min(halfPi, phi - deltaPhi));\n } while ((abs(deltaLambda) > epsilon || abs(deltaPhi) > epsilon) && --i > 0);\n return abs(abs(phi) - halfPi) < epsilon ? [0, phi] : i && [lambda, phi];\n };\n var eisenlohr = function () {\n return d3Geo.geoProjection(eisenlohrRaw)\n .scale(62.5271);\n };\n var faheyK = cos(35 * radians);\n function faheyRaw(lambda, phi) {\n var t = tan(phi / 2);\n return [lambda * faheyK * sqrt(1 - t * t), (1 + faheyK) * t];\n }\n faheyRaw.invert = function (x, y) {\n var t = y / (1 + faheyK);\n return [x && x / (faheyK * sqrt(1 - t * t)), 2 * atan(t)];\n };\n var fahey = function () {\n return d3Geo.geoProjection(faheyRaw)\n .scale(137.152);\n };\n function foucautRaw(lambda, phi) {\n var k = phi / 2, cosk = cos(k);\n return [2 * lambda / sqrtPi * cos(phi) * cosk * cosk, sqrtPi * tan(k)];\n }\n foucautRaw.invert = function (x, y) {\n var k = atan(y / sqrtPi), cosk = cos(k), phi = 2 * k;\n return [x * sqrtPi / 2 / (cos(phi) * cosk * cosk), phi];\n };\n var foucaut = function () {\n return d3Geo.geoProjection(foucautRaw)\n .scale(135.264);\n };\n function gilbertForward(point) {\n return [point[0] / 2, asin(tan(point[1] / 2 * radians)) * degrees];\n }\n function gilbertInvert(point) {\n return [point[0] * 2, 2 * atan(sin(point[1] * radians)) * degrees];\n }\n var gilbert = function (projectionType) {\n if (projectionType == null)\n projectionType = d3Geo.geoOrthographic;\n var projection = projectionType(), equirectangular = d3Geo.geoEquirectangular().scale(degrees).precision(0).clipAngle(null).translate([0, 0]); // antimeridian cutting\n function gilbert(point) {\n return projection(gilbertForward(point));\n }\n if (projection.invert)\n gilbert.invert = function (point) {\n return gilbertInvert(projection.invert(point));\n };\n gilbert.stream = function (stream) {\n var s1 = projection.stream(stream), s0 = equirectangular.stream({\n point: function (lambda, phi) { s1.point(lambda / 2, asin(tan(-phi / 2 * radians)) * degrees); },\n lineStart: function () { s1.lineStart(); },\n lineEnd: function () { s1.lineEnd(); },\n polygonStart: function () { s1.polygonStart(); },\n polygonEnd: function () { s1.polygonEnd(); }\n });\n s0.sphere = s1.sphere;\n return s0;\n };\n function property(name) {\n gilbert[name] = function (_) {\n return arguments.length ? (projection[name](_), gilbert) : projection[name]();\n };\n }\n gilbert.rotate = function (_) {\n return arguments.length ? (equirectangular.rotate(_), gilbert) : equirectangular.rotate();\n };\n gilbert.center = function (_) {\n return arguments.length ? (projection.center(gilbertForward(_)), gilbert) : gilbertInvert(projection.center());\n };\n property(\"clipAngle\");\n property(\"clipExtent\");\n property(\"scale\");\n property(\"translate\");\n property(\"precision\");\n return gilbert\n .scale(249.5);\n };\n function gingeryRaw(rho, n) {\n var k = 2 * pi / n, rho2 = rho * rho;\n function forward(lambda, phi) {\n var p = d3Geo.geoAzimuthalEquidistantRaw(lambda, phi), x = p[0], y = p[1], r2 = x * x + y * y;\n if (r2 > rho2) {\n var r = sqrt(r2), theta = atan2(y, x), theta0 = k * round(theta / k), alpha = theta - theta0, rhoCosAlpha = rho * cos(alpha), k_ = (rho * sin(alpha) - alpha * sin(rhoCosAlpha)) / (halfPi - rhoCosAlpha), s_ = gingeryLength(alpha, k_), e = (pi - rho) / gingeryIntegrate(s_, rhoCosAlpha, pi);\n x = r;\n var i = 50, delta;\n do {\n x -= delta = (rho + gingeryIntegrate(s_, rhoCosAlpha, x) * e - r) / (s_(x) * e);\n } while (abs(delta) > epsilon && --i > 0);\n y = alpha * sin(x);\n if (x < halfPi)\n y -= k_ * (x - halfPi);\n var s = sin(theta0), c = cos(theta0);\n p[0] = x * c - y * s;\n p[1] = x * s + y * c;\n }\n return p;\n }\n forward.invert = function (x, y) {\n var r2 = x * x + y * y;\n if (r2 > rho2) {\n var r = sqrt(r2), theta = atan2(y, x), theta0 = k * round(theta / k), dTheta = theta - theta0;\n x = r * cos(dTheta);\n y = r * sin(dTheta);\n var x_halfPi = x - halfPi, sinx = sin(x), alpha = y / sinx, delta = x < halfPi ? Infinity : 0, i = 10;\n while (true) {\n var rhosinAlpha = rho * sin(alpha), rhoCosAlpha = rho * cos(alpha), sinRhoCosAlpha = sin(rhoCosAlpha), halfPi_RhoCosAlpha = halfPi - rhoCosAlpha, k_ = (rhosinAlpha - alpha * sinRhoCosAlpha) / halfPi_RhoCosAlpha, s_ = gingeryLength(alpha, k_);\n if (abs(delta) < epsilon2 || !--i)\n break;\n alpha -= delta = (alpha * sinx - k_ * x_halfPi - y) / (sinx - x_halfPi * 2 * (halfPi_RhoCosAlpha * (rhoCosAlpha + alpha * rhosinAlpha * cos(rhoCosAlpha) - sinRhoCosAlpha) -\n rhosinAlpha * (rhosinAlpha - alpha * sinRhoCosAlpha)) / (halfPi_RhoCosAlpha * halfPi_RhoCosAlpha));\n }\n r = rho + gingeryIntegrate(s_, rhoCosAlpha, x) * (pi - rho) / gingeryIntegrate(s_, rhoCosAlpha, pi);\n theta = theta0 + alpha;\n x = r * cos(theta);\n y = r * sin(theta);\n }\n return d3Geo.geoAzimuthalEquidistantRaw.invert(x, y);\n };\n return forward;\n }\n function gingeryLength(alpha, k) {\n return function (x) {\n var y_ = alpha * cos(x);\n if (x < halfPi)\n y_ -= k;\n return sqrt(1 + y_ * y_);\n };\n }\n // Numerical integration: trapezoidal rule.\n function gingeryIntegrate(f, a, b) {\n var n = 50, h = (b - a) / n, s = f(a) + f(b);\n for (var i = 1, x = a; i < n; ++i)\n s += 2 * f(x += h);\n return s * 0.5 * h;\n }\n var gingery = function () {\n var n = 6, rho = 30 * radians, cRho = cos(rho), sRho = sin(rho), m = d3Geo.geoProjectionMutator(gingeryRaw), p = m(rho, n), stream_ = p.stream, epsilon$$1 = 1e-2, cr = -cos(epsilon$$1 * radians), sr = sin(epsilon$$1 * radians);\n p.radius = function (_) {\n if (!arguments.length)\n return rho * degrees;\n cRho = cos(rho = _ * radians);\n sRho = sin(rho);\n return m(rho, n);\n };\n p.lobes = function (_) {\n if (!arguments.length)\n return n;\n return m(rho, n = +_);\n };\n p.stream = function (stream) {\n var rotate = p.rotate(), rotateStream = stream_(stream), sphereStream = (p.rotate([0, 0]), stream_(stream));\n p.rotate(rotate);\n rotateStream.sphere = function () {\n sphereStream.polygonStart(), sphereStream.lineStart();\n for (var i = 0, delta = 2 * pi / n, phi = 0; i < n; ++i, phi -= delta) {\n sphereStream.point(atan2(sr * cos(phi), cr) * degrees, asin(sr * sin(phi)) * degrees);\n sphereStream.point(atan2(sRho * cos(phi - delta / 2), cRho) * degrees, asin(sRho * sin(phi - delta / 2)) * degrees);\n }\n sphereStream.lineEnd(), sphereStream.polygonEnd();\n };\n return rotateStream;\n };\n return p\n .rotate([90, -40])\n .scale(91.7095)\n .clipAngle(180 - 1e-3);\n };\n var ginzburgPolyconicRaw = function (a, b, c, d, e, f, g, h) {\n if (arguments.length < 8)\n h = 0;\n function forward(lambda, phi) {\n if (!phi)\n return [a * lambda / pi, 0];\n var phi2 = phi * phi, xB = a + phi2 * (b + phi2 * (c + phi2 * d)), yB = phi * (e - 1 + phi2 * (f - h + phi2 * g)), m = (xB * xB + yB * yB) / (2 * yB), alpha = lambda * asin(xB / m) / pi;\n return [m * sin(alpha), phi * (1 + phi2 * h) + m * (1 - cos(alpha))];\n }\n forward.invert = function (x, y) {\n var lambda = pi * x / a, phi = y, deltaLambda, deltaPhi, i = 50;\n do {\n var phi2 = phi * phi, xB = a + phi2 * (b + phi2 * (c + phi2 * d)), yB = phi * (e - 1 + phi2 * (f - h + phi2 * g)), p = xB * xB + yB * yB, q = 2 * yB, m = p / q, m2 = m * m, dAlphadLambda = asin(xB / m) / pi, alpha = lambda * dAlphadLambda, xB2 = xB * xB, dxBdPhi = (2 * b + phi2 * (4 * c + phi2 * 6 * d)) * phi, dyBdPhi = e + phi2 * (3 * f + phi2 * 5 * g), dpdPhi = 2 * (xB * dxBdPhi + yB * (dyBdPhi - 1)), dqdPhi = 2 * (dyBdPhi - 1), dmdPhi = (dpdPhi * q - p * dqdPhi) / (q * q), cosAlpha = cos(alpha), sinAlpha = sin(alpha), mcosAlpha = m * cosAlpha, msinAlpha = m * sinAlpha, dAlphadPhi = ((lambda / pi) * (1 / sqrt(1 - xB2 / m2)) * (dxBdPhi * m - xB * dmdPhi)) / m2, fx = msinAlpha - x, fy = phi * (1 + phi2 * h) + m - mcosAlpha - y, deltaxDeltaPhi = dmdPhi * sinAlpha + mcosAlpha * dAlphadPhi, deltaxDeltaLambda = mcosAlpha * dAlphadLambda, deltayDeltaPhi = 1 + dmdPhi - (dmdPhi * cosAlpha - msinAlpha * dAlphadPhi), deltayDeltaLambda = msinAlpha * dAlphadLambda, denominator = deltaxDeltaPhi * deltayDeltaLambda - deltayDeltaPhi * deltaxDeltaLambda;\n if (!denominator)\n break;\n lambda -= deltaLambda = (fy * deltaxDeltaPhi - fx * deltayDeltaPhi) / denominator;\n phi -= deltaPhi = (fx * deltayDeltaLambda - fy * deltaxDeltaLambda) / denominator;\n } while ((abs(deltaLambda) > epsilon || abs(deltaPhi) > epsilon) && --i > 0);\n return [lambda, phi];\n };\n return forward;\n };\n var ginzburg4Raw = ginzburgPolyconicRaw(2.8284, -1.6988, 0.75432, -0.18071, 1.76003, -0.38914, 0.042555);\n var ginzburg4 = function () {\n return d3Geo.geoProjection(ginzburg4Raw)\n .scale(149.995);\n };\n var ginzburg5Raw = ginzburgPolyconicRaw(2.583819, -0.835827, 0.170354, -0.038094, 1.543313, -0.411435, 0.082742);\n var ginzburg5 = function () {\n return d3Geo.geoProjection(ginzburg5Raw)\n .scale(153.93);\n };\n var ginzburg6Raw = ginzburgPolyconicRaw(5 / 6 * pi, -0.62636, -0.0344, 0, 1.3493, -0.05524, 0, 0.045);\n var ginzburg6 = function () {\n return d3Geo.geoProjection(ginzburg6Raw)\n .scale(130.945);\n };\n function ginzburg8Raw(lambda, phi) {\n var lambda2 = lambda * lambda, phi2 = phi * phi;\n return [\n lambda * (1 - 0.162388 * phi2) * (0.87 - 0.000952426 * lambda2 * lambda2),\n phi * (1 + phi2 / 12)\n ];\n }\n ginzburg8Raw.invert = function (x, y) {\n var lambda = x, phi = y, i = 50, delta;\n do {\n var phi2 = phi * phi;\n phi -= delta = (phi * (1 + phi2 / 12) - y) / (1 + phi2 / 4);\n } while (abs(delta) > epsilon && --i > 0);\n i = 50;\n x /= 1 - 0.162388 * phi2;\n do {\n var lambda4 = (lambda4 = lambda * lambda) * lambda4;\n lambda -= delta = (lambda * (0.87 - 0.000952426 * lambda4) - x) / (0.87 - 0.00476213 * lambda4);\n } while (abs(delta) > epsilon && --i > 0);\n return [lambda, phi];\n };\n var ginzburg8 = function () {\n return d3Geo.geoProjection(ginzburg8Raw)\n .scale(131.747);\n };\n var ginzburg9Raw = ginzburgPolyconicRaw(2.6516, -0.76534, 0.19123, -0.047094, 1.36289, -0.13965, 0.031762);\n var ginzburg9 = function () {\n return d3Geo.geoProjection(ginzburg9Raw)\n .scale(131.087);\n };\n var squareRaw = function (project) {\n var dx = project(halfPi, 0)[0] - project(-halfPi, 0)[0];\n function projectSquare(lambda, phi) {\n var s = lambda > 0 ? -0.5 : 0.5, point = project(lambda + s * pi, phi);\n point[0] -= s * dx;\n return point;\n }\n if (project.invert)\n projectSquare.invert = function (x, y) {\n var s = x > 0 ? -0.5 : 0.5, location = project.invert(x + s * dx, y), lambda = location[0] - s * pi;\n if (lambda < -pi)\n lambda += 2 * pi;\n else if (lambda > pi)\n lambda -= 2 * pi;\n location[0] = lambda;\n return location;\n };\n return projectSquare;\n };\n function gringortenRaw(lambda, phi) {\n var sLambda = sign(lambda), sPhi = sign(phi), cosPhi = cos(phi), x = cos(lambda) * cosPhi, y = sin(lambda) * cosPhi, z = sin(sPhi * phi);\n lambda = abs(atan2(y, z));\n phi = asin(x);\n if (abs(lambda - halfPi) > epsilon)\n lambda %= halfPi;\n var point = gringortenHexadecant(lambda > pi / 4 ? halfPi - lambda : lambda, phi);\n if (lambda > pi / 4)\n z = point[0], point[0] = -point[1], point[1] = -z;\n return (point[0] *= sLambda, point[1] *= -sPhi, point);\n }\n gringortenRaw.invert = function (x, y) {\n if (abs(x) > 1)\n x = sign(x) * 2 - x;\n if (abs(y) > 1)\n y = sign(y) * 2 - y;\n var sx = sign(x), sy = sign(y), x0 = -sx * x, y0 = -sy * y, t = y0 / x0 < 1, p = gringortenHexadecantInvert(t ? y0 : x0, t ? x0 : y0), lambda = p[0], phi = p[1], cosPhi = cos(phi);\n if (t)\n lambda = -halfPi - lambda;\n return [sx * (atan2(sin(lambda) * cosPhi, -sin(phi)) + pi), sy * asin(cos(lambda) * cosPhi)];\n };\n function gringortenHexadecant(lambda, phi) {\n if (phi === halfPi)\n return [0, 0];\n var sinPhi = sin(phi), r = sinPhi * sinPhi, r2 = r * r, j = 1 + r2, k = 1 + 3 * r2, q = 1 - r2, z = asin(1 / sqrt(j)), v = q + r * j * z, p2 = (1 - sinPhi) / v, p = sqrt(p2), a2 = p2 * j, a = sqrt(a2), h = p * q, x, i;\n if (lambda === 0)\n return [0, -(h + r * a)];\n var cosPhi = cos(phi), secPhi = 1 / cosPhi, drdPhi = 2 * sinPhi * cosPhi, dvdPhi = (-3 * r + z * k) * drdPhi, dp2dPhi = (-v * cosPhi - (1 - sinPhi) * dvdPhi) / (v * v), dpdPhi = (0.5 * dp2dPhi) / p, dhdPhi = q * dpdPhi - 2 * r * p * drdPhi, dra2dPhi = r * j * dp2dPhi + p2 * k * drdPhi, mu = -secPhi * drdPhi, nu = -secPhi * dra2dPhi, zeta = -2 * secPhi * dhdPhi, lambda1 = 4 * lambda / pi, delta;\n // Slower but accurate bisection method.\n if (lambda > 0.222 * pi || phi < pi / 4 && lambda > 0.175 * pi) {\n x = (h + r * sqrt(a2 * (1 + r2) - h * h)) / (1 + r2);\n if (lambda > pi / 4)\n return [x, x];\n var x1 = x, x0 = 0.5 * x;\n x = 0.5 * (x0 + x1), i = 50;\n do {\n var g = sqrt(a2 - x * x), f = (x * (zeta + mu * g) + nu * asin(x / a)) - lambda1;\n if (!f)\n break;\n if (f < 0)\n x0 = x;\n else\n x1 = x;\n x = 0.5 * (x0 + x1);\n } while (abs(x1 - x0) > epsilon && --i > 0);\n }\n // Newton-Raphson.\n else {\n x = epsilon, i = 25;\n do {\n var x2 = x * x, g2 = sqrt(a2 - x2), zetaMug = zeta + mu * g2, f2 = x * zetaMug + nu * asin(x / a) - lambda1, df = zetaMug + (nu - mu * x2) / g2;\n x -= delta = g2 ? f2 / df : 0;\n } while (abs(delta) > epsilon && --i > 0);\n }\n return [x, -h - r * sqrt(a2 - x * x)];\n }\n function gringortenHexadecantInvert(x, y) {\n var x0 = 0, x1 = 1, r = 0.5, i = 50;\n while (true) {\n var r2 = r * r, sinPhi = sqrt(r), z = asin(1 / sqrt(1 + r2)), v = (1 - r2) + r * (1 + r2) * z, p2 = (1 - sinPhi) / v, p = sqrt(p2), a2 = p2 * (1 + r2), h = p * (1 - r2), g2 = a2 - x * x, g = sqrt(g2), y0 = y + h + r * g;\n if (abs(x1 - x0) < epsilon2 || --i === 0 || y0 === 0)\n break;\n if (y0 > 0)\n x0 = r;\n else\n x1 = r;\n r = 0.5 * (x0 + x1);\n }\n if (!i)\n return null;\n var phi = asin(sinPhi), cosPhi = cos(phi), secPhi = 1 / cosPhi, drdPhi = 2 * sinPhi * cosPhi, dvdPhi = (-3 * r + z * (1 + 3 * r2)) * drdPhi, dp2dPhi = (-v * cosPhi - (1 - sinPhi) * dvdPhi) / (v * v), dpdPhi = 0.5 * dp2dPhi / p, dhdPhi = (1 - r2) * dpdPhi - 2 * r * p * drdPhi, zeta = -2 * secPhi * dhdPhi, mu = -secPhi * drdPhi, nu = -secPhi * (r * (1 + r2) * dp2dPhi + p2 * (1 + 3 * r2) * drdPhi);\n return [pi / 4 * (x * (zeta + mu * g) + nu * asin(x / sqrt(a2))), phi];\n }\n var gringorten = function () {\n return d3Geo.geoProjection(squareRaw(gringortenRaw))\n .scale(239.75);\n };\n // Returns [sn, cn, dn](u + iv|m).\n function ellipticJi(u, v, m) {\n var a, b, c;\n if (!u) {\n b = ellipticJ(v, 1 - m);\n return [\n [0, b[0] / b[1]],\n [1 / b[1], 0],\n [b[2] / b[1], 0]\n ];\n }\n a = ellipticJ(u, m);\n if (!v)\n return [[a[0], 0], [a[1], 0], [a[2], 0]];\n b = ellipticJ(v, 1 - m);\n c = b[1] * b[1] + m * a[0] * a[0] * b[0] * b[0];\n return [\n [a[0] * b[2] / c, a[1] * a[2] * b[0] * b[1] / c],\n [a[1] * b[1] / c, -a[0] * a[2] * b[0] * b[2] / c],\n [a[2] * b[1] * b[2] / c, -m * a[0] * a[1] * b[0] / c]\n ];\n }\n // Returns [sn, cn, dn, ph](u|m).\n function ellipticJ(u, m) {\n var ai, b, phi, t, twon;\n if (m < epsilon) {\n t = sin(u);\n b = cos(u);\n ai = m * (u - t * b) / 4;\n return [\n t - ai * b,\n b + ai * t,\n 1 - m * t * t / 2,\n u - ai\n ];\n }\n if (m >= 1 - epsilon) {\n ai = (1 - m) / 4;\n b = cosh(u);\n t = tanh(u);\n phi = 1 / b;\n twon = b * sinh(u);\n return [\n t + ai * (twon - u) / (b * b),\n phi - ai * t * phi * (twon - u),\n phi + ai * t * phi * (twon + u),\n 2 * atan(exp(u)) - halfPi + ai * (twon - u) / b\n ];\n }\n var a = [1, 0, 0, 0, 0, 0, 0, 0, 0], c = [sqrt(m), 0, 0, 0, 0, 0, 0, 0, 0], i = 0;\n b = sqrt(1 - m);\n twon = 1;\n while (abs(c[i] / a[i]) > epsilon && i < 8) {\n ai = a[i++];\n c[i] = (ai - b) / 2;\n a[i] = (ai + b) / 2;\n b = sqrt(ai * b);\n twon *= 2;\n }\n phi = twon * a[i] * u;\n do {\n t = c[i] * sin(b = phi) / a[i];\n phi = (asin(t) + phi) / 2;\n } while (--i);\n return [sin(phi), t = cos(phi), t / cos(phi - b), phi];\n }\n // Calculate F(phi+iPsi|m).\n // See Abramowitz and Stegun, 17.4.11.\n function ellipticFi(phi, psi, m) {\n var r = abs(phi), i = abs(psi), sinhPsi = sinh(i);\n if (r) {\n var cscPhi = 1 / sin(r), cotPhi2 = 1 / (tan(r) * tan(r)), b = -(cotPhi2 + m * (sinhPsi * sinhPsi * cscPhi * cscPhi) - 1 + m), c = (m - 1) * cotPhi2, cotLambda2 = (-b + sqrt(b * b - 4 * c)) / 2;\n return [\n ellipticF(atan(1 / sqrt(cotLambda2)), m) * sign(phi),\n ellipticF(atan(sqrt((cotLambda2 / cotPhi2 - 1) / m)), 1 - m) * sign(psi)\n ];\n }\n return [\n 0,\n ellipticF(atan(sinhPsi), 1 - m) * sign(psi)\n ];\n }\n // Calculate F(phi|m) where m = k² = sin²α.\n // See Abramowitz and Stegun, 17.6.7.\n function ellipticF(phi, m) {\n if (!m)\n return phi;\n if (m === 1)\n return log(tan(phi / 2 + quarterPi));\n var a = 1, b = sqrt(1 - m), c = sqrt(m);\n for (var i = 0; abs(c) > epsilon; i++) {\n if (phi % pi) {\n var dPhi = atan(b * tan(phi) / a);\n if (dPhi < 0)\n dPhi += pi;\n phi += dPhi + ~~(phi / pi) * pi;\n }\n else\n phi += phi;\n c = (a + b) / 2;\n b = sqrt(a * b);\n c = ((a = c) - b) / 2;\n }\n return phi / (pow(2, i) * a);\n }\n function guyouRaw(lambda, phi) {\n var k_ = (sqrt2 - 1) / (sqrt2 + 1), k = sqrt(1 - k_ * k_), K = ellipticF(halfPi, k * k), f = -1, psi = log(tan(pi / 4 + abs(phi) / 2)), r = exp(f * psi) / sqrt(k_), at = guyouComplexAtan(r * cos(f * lambda), r * sin(f * lambda)), t = ellipticFi(at[0], at[1], k * k);\n return [-t[1], (phi >= 0 ? 1 : -1) * (0.5 * K - t[0])];\n }\n function guyouComplexAtan(x, y) {\n var x2 = x * x, y_1 = y + 1, t = 1 - x2 - y * y;\n return [\n 0.5 * ((x >= 0 ? halfPi : -halfPi) - atan2(t, 2 * x)),\n -0.25 * log(t * t + 4 * x2) + 0.5 * log(y_1 * y_1 + x2)\n ];\n }\n function guyouComplexDivide(a, b) {\n var denominator = b[0] * b[0] + b[1] * b[1];\n return [\n (a[0] * b[0] + a[1] * b[1]) / denominator,\n (a[1] * b[0] - a[0] * b[1]) / denominator\n ];\n }\n guyouRaw.invert = function (x, y) {\n var k_ = (sqrt2 - 1) / (sqrt2 + 1), k = sqrt(1 - k_ * k_), K = ellipticF(halfPi, k * k), f = -1, j = ellipticJi(0.5 * K - y, -x, k * k), tn = guyouComplexDivide(j[0], j[1]), lambda = atan2(tn[1], tn[0]) / f;\n return [\n lambda,\n 2 * atan(exp(0.5 / f * log(k_ * tn[0] * tn[0] + k_ * tn[1] * tn[1]))) - halfPi\n ];\n };\n var guyou = function () {\n return d3Geo.geoProjection(squareRaw(guyouRaw))\n .scale(151.496);\n };\n function hammerRaw(A, B) {\n if (arguments.length < 2)\n B = A;\n if (B === 1)\n return d3Geo.geoAzimuthalEqualAreaRaw;\n if (B === Infinity)\n return hammerQuarticAuthalicRaw;\n function forward(lambda, phi) {\n var coordinates = d3Geo.geoAzimuthalEqualAreaRaw(lambda / B, phi);\n coordinates[0] *= A;\n return coordinates;\n }\n forward.invert = function (x, y) {\n var coordinates = d3Geo.geoAzimuthalEqualAreaRaw.invert(x / A, y);\n coordinates[0] *= B;\n return coordinates;\n };\n return forward;\n }\n function hammerQuarticAuthalicRaw(lambda, phi) {\n return [\n lambda * cos(phi) / cos(phi /= 2),\n 2 * sin(phi)\n ];\n }\n hammerQuarticAuthalicRaw.invert = function (x, y) {\n var phi = 2 * asin(y / 2);\n return [\n x * cos(phi / 2) / cos(phi),\n phi\n ];\n };\n var hammer = function () {\n var B = 2, m = d3Geo.geoProjectionMutator(hammerRaw), p = m(B);\n p.coefficient = function (_) {\n if (!arguments.length)\n return B;\n return m(B = +_);\n };\n return p\n .scale(169.529);\n };\n function hammerRetroazimuthalRaw(phi0) {\n var sinPhi0 = sin(phi0), cosPhi0 = cos(phi0), rotate = hammerRetroazimuthalRotation(phi0);\n rotate.invert = hammerRetroazimuthalRotation(-phi0);\n function forward(lambda, phi) {\n var p = rotate(lambda, phi);\n lambda = p[0], phi = p[1];\n var sinPhi = sin(phi), cosPhi = cos(phi), cosLambda = cos(lambda), z = acos(sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosLambda), sinz = sin(z), K = abs(sinz) > epsilon ? z / sinz : 1;\n return [\n K * cosPhi0 * sin(lambda),\n (abs(lambda) > halfPi ? K : -K) // rotate for back hemisphere\n * (sinPhi0 * cosPhi - cosPhi0 * sinPhi * cosLambda)\n ];\n }\n forward.invert = function (x, y) {\n var rho = sqrt(x * x + y * y), sinz = -sin(rho), cosz = cos(rho), a = rho * cosz, b = -y * sinz, c = rho * sinPhi0, d = sqrt(a * a + b * b - c * c), phi = atan2(a * c + b * d, b * c - a * d), lambda = (rho > halfPi ? -1 : 1) * atan2(x * sinz, rho * cos(phi) * cosz + y * sin(phi) * sinz);\n return rotate.invert(lambda, phi);\n };\n return forward;\n }\n // Latitudinal rotation by phi0.\n // Temporary hack until D3 supports arbitrary small-circle clipping origins.\n function hammerRetroazimuthalRotation(phi0) {\n var sinPhi0 = sin(phi0), cosPhi0 = cos(phi0);\n return function (lambda, phi) {\n var cosPhi = cos(phi), x = cos(lambda) * cosPhi, y = sin(lambda) * cosPhi, z = sin(phi);\n return [\n atan2(y, x * cosPhi0 - z * sinPhi0),\n asin(z * cosPhi0 + x * sinPhi0)\n ];\n };\n }\n var hammerRetroazimuthal = function () {\n var phi0 = 0, m = d3Geo.geoProjectionMutator(hammerRetroazimuthalRaw), p = m(phi0), rotate_ = p.rotate, stream_ = p.stream, circle = d3Geo.geoCircle();\n p.parallel = function (_) {\n if (!arguments.length)\n return phi0 * degrees;\n var r = p.rotate();\n return m(phi0 = _ * radians).rotate(r);\n };\n // Temporary hack; see hammerRetroazimuthalRotation.\n p.rotate = function (_) {\n if (!arguments.length)\n return (_ = rotate_.call(p), _[1] += phi0 * degrees, _);\n rotate_.call(p, [_[0], _[1] - phi0 * degrees]);\n circle.center([-_[0], -_[1]]);\n return p;\n };\n p.stream = function (stream) {\n stream = stream_(stream);\n stream.sphere = function () {\n stream.polygonStart();\n var epsilon$$1 = 1e-2, ring = circle.radius(90 - epsilon$$1)().coordinates[0], n = ring.length - 1, i = -1, p;\n stream.lineStart();\n while (++i < n)\n stream.point((p = ring[i])[0], p[1]);\n stream.lineEnd();\n ring = circle.radius(90 + epsilon$$1)().coordinates[0];\n n = ring.length - 1;\n stream.lineStart();\n while (--i >= 0)\n stream.point((p = ring[i])[0], p[1]);\n stream.lineEnd();\n stream.polygonEnd();\n };\n return stream;\n };\n return p\n .scale(79.4187)\n .parallel(45)\n .clipAngle(180 - 1e-3);\n };\n var healpixParallel = 41 + 48 / 36 + 37 / 3600;\n var healpixLambert = cylindricalEqualAreaRaw(0);\n function healpixRaw(H) {\n var phi0 = healpixParallel * radians, dx = collignonRaw(pi, phi0)[0] - collignonRaw(-pi, phi0)[0], y0 = healpixLambert(0, phi0)[1], y1 = collignonRaw(0, phi0)[1], dy1 = sqrtPi - y1, k = tau / H, w = 4 / tau, h = y0 + (dy1 * dy1 * 4) / tau;\n function forward(lambda, phi) {\n var point, phi2 = abs(phi);\n if (phi2 > phi0) {\n var i = min(H - 1, max(0, floor((lambda + pi) / k)));\n lambda += pi * (H - 1) / H - i * k;\n point = collignonRaw(lambda, phi2);\n point[0] = point[0] * tau / dx - tau * (H - 1) / (2 * H) + i * tau / H;\n point[1] = y0 + (point[1] - y1) * 4 * dy1 / tau;\n if (phi < 0)\n point[1] = -point[1];\n }\n else {\n point = healpixLambert(lambda, phi);\n }\n point[0] *= w, point[1] /= h;\n return point;\n }\n forward.invert = function (x, y) {\n x /= w, y *= h;\n var y2 = abs(y);\n if (y2 > y0) {\n var i = min(H - 1, max(0, floor((x + pi) / k)));\n x = (x + pi * (H - 1) / H - i * k) * dx / tau;\n var point = collignonRaw.invert(x, 0.25 * (y2 - y0) * tau / dy1 + y1);\n point[0] -= pi * (H - 1) / H - i * k;\n if (y < 0)\n point[1] = -point[1];\n return point;\n }\n return healpixLambert.invert(x, y);\n };\n return forward;\n }\n function sphere(step) {\n return {\n type: \"Polygon\",\n coordinates: [\n d3Array.range(-180, 180 + step / 2, step).map(function (x, i) { return [x, i & 1 ? 90 - 1e-6 : healpixParallel]; })\n .concat(d3Array.range(180, -180 - step / 2, -step).map(function (x, i) { return [x, i & 1 ? -90 + 1e-6 : -healpixParallel]; }))\n ]\n };\n }\n var healpix = function () {\n var H = 4, m = d3Geo.geoProjectionMutator(healpixRaw), p = m(H), stream_ = p.stream;\n p.lobes = function (_) {\n return arguments.length ? m(H = +_) : H;\n };\n p.stream = function (stream) {\n var rotate = p.rotate(), rotateStream = stream_(stream), sphereStream = (p.rotate([0, 0]), stream_(stream));\n p.rotate(rotate);\n rotateStream.sphere = function () { d3Geo.geoStream(sphere(180 / H), sphereStream); };\n return rotateStream;\n };\n return p\n .scale(239.75);\n };\n function hillRaw(K) {\n var L = 1 + K, sinBt = sin(1 / L), Bt = asin(sinBt), A = 2 * sqrt(pi / (B = pi + 4 * Bt * L)), B, rho0 = 0.5 * A * (L + sqrt(K * (2 + K))), K2 = K * K, L2 = L * L;\n function forward(lambda, phi) {\n var t = 1 - sin(phi), rho, omega;\n if (t && t < 2) {\n var theta = halfPi - phi, i = 25, delta;\n do {\n var sinTheta = sin(theta), cosTheta = cos(theta), Bt_Bt1 = Bt + atan2(sinTheta, L - cosTheta), C = 1 + L2 - 2 * L * cosTheta;\n theta -= delta = (theta - K2 * Bt - L * sinTheta + C * Bt_Bt1 - 0.5 * t * B) / (2 * L * sinTheta * Bt_Bt1);\n } while (abs(delta) > epsilon2 && --i > 0);\n rho = A * sqrt(C);\n omega = lambda * Bt_Bt1 / pi;\n }\n else {\n rho = A * (K + t);\n omega = lambda * Bt / pi;\n }\n return [\n rho * sin(omega),\n rho0 - rho * cos(omega)\n ];\n }\n forward.invert = function (x, y) {\n var rho2 = x * x + (y -= rho0) * y, cosTheta = (1 + L2 - rho2 / (A * A)) / (2 * L), theta = acos(cosTheta), sinTheta = sin(theta), Bt_Bt1 = Bt + atan2(sinTheta, L - cosTheta);\n return [\n asin(x / sqrt(rho2)) * pi / Bt_Bt1,\n asin(1 - 2 * (theta - K2 * Bt - L * sinTheta + (1 + L2 - 2 * L * cosTheta) * Bt_Bt1) / B)\n ];\n };\n return forward;\n }\n var hill = function () {\n var K = 1, m = d3Geo.geoProjectionMutator(hillRaw), p = m(K);\n p.ratio = function (_) {\n return arguments.length ? m(K = +_) : K;\n };\n return p\n .scale(167.774)\n .center([0, 18.67]);\n };\n var sinuMollweidePhi = 0.7109889596207567;\n var sinuMollweideY = 0.0528035274542;\n function sinuMollweideRaw(lambda, phi) {\n return phi > -sinuMollweidePhi\n ? (lambda = mollweideRaw(lambda, phi), lambda[1] += sinuMollweideY, lambda)\n : sinusoidalRaw(lambda, phi);\n }\n sinuMollweideRaw.invert = function (x, y) {\n return y > -sinuMollweidePhi\n ? mollweideRaw.invert(x, y - sinuMollweideY)\n : sinusoidalRaw.invert(x, y);\n };\n var sinuMollweide = function () {\n return d3Geo.geoProjection(sinuMollweideRaw)\n .rotate([-20, -55])\n .scale(164.263)\n .center([0, -5.4036]);\n };\n function homolosineRaw(lambda, phi) {\n return abs(phi) > sinuMollweidePhi\n ? (lambda = mollweideRaw(lambda, phi), lambda[1] -= phi > 0 ? sinuMollweideY : -sinuMollweideY, lambda)\n : sinusoidalRaw(lambda, phi);\n }\n homolosineRaw.invert = function (x, y) {\n return abs(y) > sinuMollweidePhi\n ? mollweideRaw.invert(x, y + (y > 0 ? sinuMollweideY : -sinuMollweideY))\n : sinusoidalRaw.invert(x, y);\n };\n var homolosine = function () {\n return d3Geo.geoProjection(homolosineRaw)\n .scale(152.63);\n };\n function pointEqual(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n }\n function interpolateLine(coordinates, m) {\n var i = -1, n = coordinates.length, p0 = coordinates[0], p1, dx, dy, resampled = [];\n while (++i < n) {\n p1 = coordinates[i];\n dx = (p1[0] - p0[0]) / m;\n dy = (p1[1] - p0[1]) / m;\n for (var j = 0; j < m; ++j)\n resampled.push([p0[0] + j * dx, p0[1] + j * dy]);\n p0 = p1;\n }\n resampled.push(p1);\n return resampled;\n }\n function interpolateSphere(lobes) {\n var coordinates = [], lobe, lambda0, phi0, phi1, lambda2, phi2, i, n = lobes[0].length;\n // Northern Hemisphere\n for (i = 0; i < n; ++i) {\n lobe = lobes[0][i];\n lambda0 = lobe[0][0], phi0 = lobe[0][1], phi1 = lobe[1][1];\n lambda2 = lobe[2][0], phi2 = lobe[2][1];\n coordinates.push(interpolateLine([\n [lambda0 + epsilon, phi0 + epsilon],\n [lambda0 + epsilon, phi1 - epsilon],\n [lambda2 - epsilon, phi1 - epsilon],\n [lambda2 - epsilon, phi2 + epsilon]\n ], 30));\n }\n // Southern Hemisphere\n for (i = lobes[1].length - 1; i >= 0; --i) {\n lobe = lobes[1][i];\n lambda0 = lobe[0][0], phi0 = lobe[0][1], phi1 = lobe[1][1];\n lambda2 = lobe[2][0], phi2 = lobe[2][1];\n coordinates.push(interpolateLine([\n [lambda2 - epsilon, phi2 - epsilon],\n [lambda2 - epsilon, phi1 + epsilon],\n [lambda0 + epsilon, phi1 + epsilon],\n [lambda0 + epsilon, phi0 - epsilon]\n ], 30));\n }\n return {\n type: \"Polygon\",\n coordinates: [d3Array.merge(coordinates)]\n };\n }\n var interrupt = function (project, lobes) {\n var sphere = interpolateSphere(lobes);\n lobes = lobes.map(function (lobe) {\n return lobe.map(function (l) {\n return [\n [l[0][0] * radians, l[0][1] * radians],\n [l[1][0] * radians, l[1][1] * radians],\n [l[2][0] * radians, l[2][1] * radians]\n ];\n });\n });\n var bounds = lobes.map(function (lobe) {\n return lobe.map(function (l) {\n var x0 = project(l[0][0], l[0][1])[0], x1 = project(l[2][0], l[2][1])[0], y0 = project(l[1][0], l[0][1])[1], y1 = project(l[1][0], l[1][1])[1], t;\n if (y0 > y1)\n t = y0, y0 = y1, y1 = t;\n return [[x0, y0], [x1, y1]];\n });\n });\n function forward(lambda, phi) {\n var sign$$1 = phi < 0 ? -1 : +1, lobe = lobes[+(phi < 0)];\n for (var i = 0, n = lobe.length - 1; i < n && lambda > lobe[i][2][0]; ++i)\n ;\n var p = project(lambda - lobe[i][1][0], phi);\n p[0] += project(lobe[i][1][0], sign$$1 * phi > sign$$1 * lobe[i][0][1] ? lobe[i][0][1] : phi)[0];\n return p;\n }\n // Assumes mutually exclusive bounding boxes for lobes.\n if (project.invert)\n forward.invert = function (x, y) {\n var bound = bounds[+(y < 0)], lobe = lobes[+(y < 0)];\n for (var i = 0, n = bound.length; i < n; ++i) {\n var b = bound[i];\n if (b[0][0] <= x && x < b[1][0] && b[0][1] <= y && y < b[1][1]) {\n var p = project.invert(x - project(lobe[i][1][0], 0)[0], y);\n p[0] += lobe[i][1][0];\n return pointEqual(forward(p[0], p[1]), [x, y]) ? p : null;\n }\n }\n };\n var p = d3Geo.geoProjection(forward), stream_ = p.stream;\n p.stream = function (stream) {\n var rotate = p.rotate(), rotateStream = stream_(stream), sphereStream = (p.rotate([0, 0]), stream_(stream));\n p.rotate(rotate);\n rotateStream.sphere = function () { d3Geo.geoStream(sphere, sphereStream); };\n return rotateStream;\n };\n return p;\n };\n var lobes = [[\n [[-180, 0], [-100, 90], [-40, 0]],\n [[-40, 0], [30, 90], [180, 0]]\n ], [\n [[-180, 0], [-160, -90], [-100, 0]],\n [[-100, 0], [-60, -90], [-20, 0]],\n [[-20, 0], [20, -90], [80, 0]],\n [[80, 0], [140, -90], [180, 0]]\n ]];\n var boggs$1 = function () {\n return interrupt(boggsRaw, lobes)\n .scale(160.857);\n };\n var lobes$1 = [[\n [[-180, 0], [-100, 90], [-40, 0]],\n [[-40, 0], [30, 90], [180, 0]]\n ], [\n [[-180, 0], [-160, -90], [-100, 0]],\n [[-100, 0], [-60, -90], [-20, 0]],\n [[-20, 0], [20, -90], [80, 0]],\n [[80, 0], [140, -90], [180, 0]]\n ]];\n var homolosine$1 = function () {\n return interrupt(homolosineRaw, lobes$1)\n .scale(152.63);\n };\n var lobes$2 = [[\n [[-180, 0], [-100, 90], [-40, 0]],\n [[-40, 0], [30, 90], [180, 0]]\n ], [\n [[-180, 0], [-160, -90], [-100, 0]],\n [[-100, 0], [-60, -90], [-20, 0]],\n [[-20, 0], [20, -90], [80, 0]],\n [[80, 0], [140, -90], [180, 0]]\n ]];\n var mollweide$1 = function () {\n return interrupt(mollweideRaw, lobes$2)\n .scale(169.529);\n };\n var lobes$3 = [[\n [[-180, 0], [-90, 90], [0, 0]],\n [[0, 0], [90, 90], [180, 0]]\n ], [\n [[-180, 0], [-90, -90], [0, 0]],\n [[0, 0], [90, -90], [180, 0]]\n ]];\n var mollweideHemispheres = function () {\n return interrupt(mollweideRaw, lobes$3)\n .scale(169.529)\n .rotate([20, 0]);\n };\n var lobes$4 = [[\n [[-180, 35], [-30, 90], [0, 35]],\n [[0, 35], [30, 90], [180, 35]]\n ], [\n [[-180, -10], [-102, -90], [-65, -10]],\n [[-65, -10], [5, -90], [77, -10]],\n [[77, -10], [103, -90], [180, -10]]\n ]];\n var sinuMollweide$1 = function () {\n return interrupt(sinuMollweideRaw, lobes$4)\n .rotate([-20, -55])\n .scale(164.263)\n .center([0, -5.4036]);\n };\n var lobes$5 = [[\n [[-180, 0], [-110, 90], [-40, 0]],\n [[-40, 0], [0, 90], [40, 0]],\n [[40, 0], [110, 90], [180, 0]]\n ], [\n [[-180, 0], [-110, -90], [-40, 0]],\n [[-40, 0], [0, -90], [40, 0]],\n [[40, 0], [110, -90], [180, 0]]\n ]];\n var sinusoidal$1 = function () {\n return interrupt(sinusoidalRaw, lobes$5)\n .scale(152.63)\n .rotate([-20, 0]);\n };\n function kavrayskiy7Raw(lambda, phi) {\n return [3 / tau * lambda * sqrt(pi * pi / 3 - phi * phi), phi];\n }\n kavrayskiy7Raw.invert = function (x, y) {\n return [tau / 3 * x / sqrt(pi * pi / 3 - y * y), y];\n };\n var kavrayskiy7 = function () {\n return d3Geo.geoProjection(kavrayskiy7Raw)\n .scale(158.837);\n };\n function lagrangeRaw(n) {\n function forward(lambda, phi) {\n if (abs(abs(phi) - halfPi) < epsilon)\n return [0, phi < 0 ? -2 : 2];\n var sinPhi = sin(phi), v = pow((1 + sinPhi) / (1 - sinPhi), n / 2), c = 0.5 * (v + 1 / v) + cos(lambda *= n);\n return [\n 2 * sin(lambda) / c,\n (v - 1 / v) / c\n ];\n }\n forward.invert = function (x, y) {\n var y0 = abs(y);\n if (abs(y0 - 2) < epsilon)\n return x ? null : [0, sign(y) * halfPi];\n if (y0 > 2)\n return null;\n x /= 2, y /= 2;\n var x2 = x * x, y2 = y * y, t = 2 * y / (1 + x2 + y2); // tanh(nPhi)\n t = pow((1 + t) / (1 - t), 1 / n);\n return [\n atan2(2 * x, 1 - x2 - y2) / n,\n asin((t - 1) / (t + 1))\n ];\n };\n return forward;\n }\n var lagrange = function () {\n var n = 0.5, m = d3Geo.geoProjectionMutator(lagrangeRaw), p = m(n);\n p.spacing = function (_) {\n return arguments.length ? m(n = +_) : n;\n };\n return p\n .scale(124.75);\n };\n var pi_sqrt2 = pi / sqrt2;\n function larriveeRaw(lambda, phi) {\n return [\n lambda * (1 + sqrt(cos(phi))) / 2,\n phi / (cos(phi / 2) * cos(lambda / 6))\n ];\n }\n larriveeRaw.invert = function (x, y) {\n var x0 = abs(x), y0 = abs(y), lambda = epsilon, phi = halfPi;\n if (y0 < pi_sqrt2)\n phi *= y0 / pi_sqrt2;\n else\n lambda += 6 * acos(pi_sqrt2 / y0);\n for (var i = 0; i < 25; i++) {\n var sinPhi = sin(phi), sqrtcosPhi = sqrt(cos(phi)), sinPhi_2 = sin(phi / 2), cosPhi_2 = cos(phi / 2), sinLambda_6 = sin(lambda / 6), cosLambda_6 = cos(lambda / 6), f0 = 0.5 * lambda * (1 + sqrtcosPhi) - x0, f1 = phi / (cosPhi_2 * cosLambda_6) - y0, df0dPhi = sqrtcosPhi ? -0.25 * lambda * sinPhi / sqrtcosPhi : 0, df0dLambda = 0.5 * (1 + sqrtcosPhi), df1dPhi = (1 + 0.5 * phi * sinPhi_2 / cosPhi_2) / (cosPhi_2 * cosLambda_6), df1dLambda = (phi / cosPhi_2) * (sinLambda_6 / 6) / (cosLambda_6 * cosLambda_6), denom = df0dPhi * df1dLambda - df1dPhi * df0dLambda, dPhi = (f0 * df1dLambda - f1 * df0dLambda) / denom, dLambda = (f1 * df0dPhi - f0 * df1dPhi) / denom;\n phi -= dPhi;\n lambda -= dLambda;\n if (abs(dPhi) < epsilon && abs(dLambda) < epsilon)\n break;\n }\n return [x < 0 ? -lambda : lambda, y < 0 ? -phi : phi];\n };\n var larrivee = function () {\n return d3Geo.geoProjection(larriveeRaw)\n .scale(97.2672);\n };\n function laskowskiRaw(lambda, phi) {\n var lambda2 = lambda * lambda, phi2 = phi * phi;\n return [\n lambda * (0.975534 + phi2 * (-0.119161 + lambda2 * -0.0143059 + phi2 * -0.0547009)),\n phi * (1.00384 + lambda2 * (0.0802894 + phi2 * -0.02855 + lambda2 * 0.000199025) + phi2 * (0.0998909 + phi2 * -0.0491032))\n ];\n }\n laskowskiRaw.invert = function (x, y) {\n var lambda = sign(x) * pi, phi = y / 2, i = 50;\n do {\n var lambda2 = lambda * lambda, phi2 = phi * phi, lambdaPhi = lambda * phi, fx = lambda * (0.975534 + phi2 * (-0.119161 + lambda2 * -0.0143059 + phi2 * -0.0547009)) - x, fy = phi * (1.00384 + lambda2 * (0.0802894 + phi2 * -0.02855 + lambda2 * 0.000199025) + phi2 * (0.0998909 + phi2 * -0.0491032)) - y, deltaxDeltaLambda = 0.975534 - phi2 * (0.119161 + 3 * lambda2 * 0.0143059 + phi2 * 0.0547009), deltaxDeltaPhi = -lambdaPhi * (2 * 0.119161 + 4 * 0.0547009 * phi2 + 2 * 0.0143059 * lambda2), deltayDeltaLambda = lambdaPhi * (2 * 0.0802894 + 4 * 0.000199025 * lambda2 + 2 * -0.02855 * phi2), deltayDeltaPhi = 1.00384 + lambda2 * (0.0802894 + 0.000199025 * lambda2) + phi2 * (3 * (0.0998909 - 0.02855 * lambda2) - 5 * 0.0491032 * phi2), denominator = deltaxDeltaPhi * deltayDeltaLambda - deltayDeltaPhi * deltaxDeltaLambda, deltaLambda = (fy * deltaxDeltaPhi - fx * deltayDeltaPhi) / denominator, deltaPhi = (fx * deltayDeltaLambda - fy * deltaxDeltaLambda) / denominator;\n lambda -= deltaLambda, phi -= deltaPhi;\n } while ((abs(deltaLambda) > epsilon || abs(deltaPhi) > epsilon) && --i > 0);\n return i && [lambda, phi];\n };\n var laskowski = function () {\n return d3Geo.geoProjection(laskowskiRaw)\n .scale(139.98);\n };\n function littrowRaw(lambda, phi) {\n return [\n sin(lambda) / cos(phi),\n tan(phi) * cos(lambda)\n ];\n }\n littrowRaw.invert = function (x, y) {\n var x2 = x * x, y2 = y * y, y2_1 = y2 + 1, cosPhi = x\n ? sqrt1_2 * sqrt((y2_1 - sqrt(x2 * x2 + 2 * x2 * (y2 - 1) + y2_1 * y2_1)) / x2 + 1)\n : 1 / sqrt(y2_1);\n return [\n asin(x * cosPhi),\n sign(y) * acos(cosPhi)\n ];\n };\n var littrow = function () {\n return d3Geo.geoProjection(littrowRaw)\n .scale(144.049)\n .clipAngle(90 - 1e-3);\n };\n function loximuthalRaw(phi0) {\n var cosPhi0 = cos(phi0), tanPhi0 = tan(quarterPi + phi0 / 2);\n function forward(lambda, phi) {\n var y = phi - phi0, x = abs(y) < epsilon ? lambda * cosPhi0\n : abs(x = quarterPi + phi / 2) < epsilon || abs(abs(x) - halfPi) < epsilon\n ? 0 : lambda * y / log(tan(x) / tanPhi0);\n return [x, y];\n }\n forward.invert = function (x, y) {\n var lambda, phi = y + phi0;\n return [\n abs(y) < epsilon ? x / cosPhi0\n : (abs(lambda = quarterPi + phi / 2) < epsilon || abs(abs(lambda) - halfPi) < epsilon) ? 0\n : x * log(tan(lambda) / tanPhi0) / y,\n phi\n ];\n };\n return forward;\n }\n var loximuthal = function () {\n return parallel1(loximuthalRaw)\n .parallel(40)\n .scale(158.837);\n };\n function millerRaw(lambda, phi) {\n return [lambda, 1.25 * log(tan(quarterPi + 0.4 * phi))];\n }\n millerRaw.invert = function (x, y) {\n return [x, 2.5 * atan(exp(0.8 * y)) - 0.625 * pi];\n };\n var miller = function () {\n return d3Geo.geoProjection(millerRaw)\n .scale(108.318);\n };\n function modifiedStereographicRaw(C) {\n var m = C.length - 1;\n function forward(lambda, phi) {\n var cosPhi = cos(phi), k = 2 / (1 + cosPhi * cos(lambda)), zr = k * cosPhi * sin(lambda), zi = k * sin(phi), i = m, w = C[i], ar = w[0], ai = w[1], t;\n while (--i >= 0) {\n w = C[i];\n ar = w[0] + zr * (t = ar) - zi * ai;\n ai = w[1] + zr * ai + zi * t;\n }\n ar = zr * (t = ar) - zi * ai;\n ai = zr * ai + zi * t;\n return [ar, ai];\n }\n forward.invert = function (x, y) {\n var i = 20, zr = x, zi = y;\n do {\n var j = m, w = C[j], ar = w[0], ai = w[1], br = 0, bi = 0, t;\n while (--j >= 0) {\n w = C[j];\n br = ar + zr * (t = br) - zi * bi;\n bi = ai + zr * bi + zi * t;\n ar = w[0] + zr * (t = ar) - zi * ai;\n ai = w[1] + zr * ai + zi * t;\n }\n br = ar + zr * (t = br) - zi * bi;\n bi = ai + zr * bi + zi * t;\n ar = zr * (t = ar) - zi * ai - x;\n ai = zr * ai + zi * t - y;\n var denominator = br * br + bi * bi, deltar, deltai;\n zr -= deltar = (ar * br + ai * bi) / denominator;\n zi -= deltai = (ai * br - ar * bi) / denominator;\n } while (abs(deltar) + abs(deltai) > epsilon * epsilon && --i > 0);\n if (i) {\n var rho = sqrt(zr * zr + zi * zi), c = 2 * atan(rho * 0.5), sinc = sin(c);\n return [atan2(zr * sinc, rho * cos(c)), rho ? asin(zi * sinc / rho) : 0];\n }\n };\n return forward;\n }\n var alaska = [[0.9972523, 0], [0.0052513, -0.0041175], [0.0074606, 0.0048125], [-0.0153783, -0.1968253], [0.0636871, -0.1408027], [0.3660976, -0.2937382]];\n var gs48 = [[0.98879, 0], [0, 0], [-0.050909, 0], [0, 0], [0.075528, 0]];\n var gs50 = [[0.9842990, 0], [0.0211642, 0.0037608], [-0.1036018, -0.0575102], [-0.0329095, -0.0320119], [0.0499471, 0.1223335], [0.0260460, 0.0899805], [0.0007388, -0.1435792], [0.0075848, -0.1334108], [-0.0216473, 0.0776645], [-0.0225161, 0.0853673]];\n var miller$1 = [[0.9245, 0], [0, 0], [0.01943, 0]];\n var lee = [[0.721316, 0], [0, 0], [-0.00881625, -0.00617325]];\n function modifiedStereographicAlaska() {\n return modifiedStereographic(alaska, [152, -64])\n .scale(1500)\n .center([-160.908, 62.4864])\n .clipAngle(25);\n }\n function modifiedStereographicGs48() {\n return modifiedStereographic(gs48, [95, -38])\n .scale(1000)\n .clipAngle(55)\n .center([-96.5563, 38.8675]);\n }\n function modifiedStereographicGs50() {\n return modifiedStereographic(gs50, [120, -45])\n .scale(359.513)\n .clipAngle(55)\n .center([-117.474, 53.0628]);\n }\n function modifiedStereographicMiller() {\n return modifiedStereographic(miller$1, [-20, -18])\n .scale(209.091)\n .center([20, 16.7214])\n .clipAngle(82);\n }\n function modifiedStereographicLee() {\n return modifiedStereographic(lee, [165, 10])\n .scale(250)\n .clipAngle(130)\n .center([-165, -10]);\n }\n function modifiedStereographic(coefficients, rotate) {\n var p = d3Geo.geoProjection(modifiedStereographicRaw(coefficients)).rotate(rotate).clipAngle(90), r = d3Geo.geoRotation(rotate), center = p.center;\n delete p.rotate;\n p.center = function (_) {\n return arguments.length ? center(r(_)) : r.invert(center());\n };\n return p;\n }\n var sqrt6 = sqrt(6);\n var sqrt7 = sqrt(7);\n function mtFlatPolarParabolicRaw(lambda, phi) {\n var theta = asin(7 * sin(phi) / (3 * sqrt6));\n return [\n sqrt6 * lambda * (2 * cos(2 * theta / 3) - 1) / sqrt7,\n 9 * sin(theta / 3) / sqrt7\n ];\n }\n mtFlatPolarParabolicRaw.invert = function (x, y) {\n var theta = 3 * asin(y * sqrt7 / 9);\n return [\n x * sqrt7 / (sqrt6 * (2 * cos(2 * theta / 3) - 1)),\n asin(sin(theta) * 3 * sqrt6 / 7)\n ];\n };\n var mtFlatPolarParabolic = function () {\n return d3Geo.geoProjection(mtFlatPolarParabolicRaw)\n .scale(164.859);\n };\n function mtFlatPolarQuarticRaw(lambda, phi) {\n var k = (1 + sqrt1_2) * sin(phi), theta = phi;\n for (var i = 0, delta; i < 25; i++) {\n theta -= delta = (sin(theta / 2) + sin(theta) - k) / (0.5 * cos(theta / 2) + cos(theta));\n if (abs(delta) < epsilon)\n break;\n }\n return [\n lambda * (1 + 2 * cos(theta) / cos(theta / 2)) / (3 * sqrt2),\n 2 * sqrt(3) * sin(theta / 2) / sqrt(2 + sqrt2)\n ];\n }\n mtFlatPolarQuarticRaw.invert = function (x, y) {\n var sinTheta_2 = y * sqrt(2 + sqrt2) / (2 * sqrt(3)), theta = 2 * asin(sinTheta_2);\n return [\n 3 * sqrt2 * x / (1 + 2 * cos(theta) / cos(theta / 2)),\n asin((sinTheta_2 + sin(theta)) / (1 + sqrt1_2))\n ];\n };\n var mtFlatPolarQuartic = function () {\n return d3Geo.geoProjection(mtFlatPolarQuarticRaw)\n .scale(188.209);\n };\n function mtFlatPolarSinusoidalRaw(lambda, phi) {\n var A = sqrt(6 / (4 + pi)), k = (1 + pi / 4) * sin(phi), theta = phi / 2;\n for (var i = 0, delta; i < 25; i++) {\n theta -= delta = (theta / 2 + sin(theta) - k) / (0.5 + cos(theta));\n if (abs(delta) < epsilon)\n break;\n }\n return [\n A * (0.5 + cos(theta)) * lambda / 1.5,\n A * theta\n ];\n }\n mtFlatPolarSinusoidalRaw.invert = function (x, y) {\n var A = sqrt(6 / (4 + pi)), theta = y / A;\n if (abs(abs(theta) - halfPi) < epsilon)\n theta = theta < 0 ? -halfPi : halfPi;\n return [\n 1.5 * x / (A * (0.5 + cos(theta))),\n asin((theta / 2 + sin(theta)) / (1 + pi / 4))\n ];\n };\n var mtFlatPolarSinusoidal = function () {\n return d3Geo.geoProjection(mtFlatPolarSinusoidalRaw)\n .scale(166.518);\n };\n function naturalEarthRaw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n }\n naturalEarthRaw.invert = function (x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n };\n var naturalEarth = function () {\n return d3Geo.geoProjection(naturalEarthRaw)\n .scale(175.295);\n };\n function naturalEarth2Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2, phi6 = phi2 * phi4;\n return [\n lambda * (0.84719 - 0.13063 * phi2 + phi6 * phi6 * (-0.04515 + 0.05494 * phi2 - 0.02326 * phi4 + 0.00331 * phi6)),\n phi * (1.01183 + phi4 * phi4 * (-0.02625 + 0.01926 * phi2 - 0.00396 * phi4))\n ];\n }\n naturalEarth2Raw.invert = function (x, y) {\n var phi = y, i = 25, delta, phi2, phi4, phi6;\n do {\n phi2 = phi * phi;\n phi4 = phi2 * phi2;\n phi -= delta = ((phi * (1.01183 + phi4 * phi4 * (-0.02625 + 0.01926 * phi2 - 0.00396 * phi4))) - y) /\n (1.01183 + phi4 * phi4 * ((9 * -0.02625) + (11 * 0.01926) * phi2 + (13 * -0.00396) * phi4));\n } while (abs(delta) > epsilon2 && --i > 0);\n phi2 = phi * phi;\n phi4 = phi2 * phi2;\n phi6 = phi2 * phi4;\n return [\n x / (0.84719 - 0.13063 * phi2 + phi6 * phi6 * (-0.04515 + 0.05494 * phi2 - 0.02326 * phi4 + 0.00331 * phi6)),\n phi\n ];\n };\n var naturalEarth2 = function () {\n return d3Geo.geoProjection(naturalEarth2Raw)\n .scale(175.295);\n };\n function nellHammerRaw(lambda, phi) {\n return [\n lambda * (1 + cos(phi)) / 2,\n 2 * (phi - tan(phi / 2))\n ];\n }\n nellHammerRaw.invert = function (x, y) {\n var p = y / 2;\n for (var i = 0, delta = Infinity; i < 10 && abs(delta) > epsilon; ++i) {\n var c = cos(y / 2);\n y -= delta = (y - tan(y / 2) - p) / (1 - 0.5 / (c * c));\n }\n return [\n 2 * x / (1 + cos(y)),\n y\n ];\n };\n var nellHammer = function () {\n return d3Geo.geoProjection(nellHammerRaw)\n .scale(152.63);\n };\n // Based on Java implementation by Bojan Savric.\n // https://github.com/OSUCartography/JMapProjLib/blob/master/src/com/jhlabs/map/proj/PattersonProjection.java\n var pattersonK1 = 1.0148;\n var pattersonK2 = 0.23185;\n var pattersonK3 = -0.14499;\n var pattersonK4 = 0.02406;\n var pattersonC1 = pattersonK1;\n var pattersonC2 = 5 * pattersonK2;\n var pattersonC3 = 7 * pattersonK3;\n var pattersonC4 = 9 * pattersonK4;\n var pattersonYmax = 1.790857183;\n function pattersonRaw(lambda, phi) {\n var phi2 = phi * phi;\n return [\n lambda,\n phi * (pattersonK1 + phi2 * phi2 * (pattersonK2 + phi2 * (pattersonK3 + pattersonK4 * phi2)))\n ];\n }\n pattersonRaw.invert = function (x, y) {\n if (y > pattersonYmax)\n y = pattersonYmax;\n else if (y < -pattersonYmax)\n y = -pattersonYmax;\n var yc = y, delta;\n do { // Newton-Raphson\n var y2 = yc * yc;\n yc -= delta = ((yc * (pattersonK1 + y2 * y2 * (pattersonK2 + y2 * (pattersonK3 + pattersonK4 * y2)))) - y) / (pattersonC1 + y2 * y2 * (pattersonC2 + y2 * (pattersonC3 + pattersonC4 * y2)));\n } while (abs(delta) > epsilon);\n return [x, yc];\n };\n var patterson = function () {\n return d3Geo.geoProjection(pattersonRaw)\n .scale(139.319);\n };\n function polyconicRaw(lambda, phi) {\n if (abs(phi) < epsilon)\n return [lambda, 0];\n var tanPhi = tan(phi), k = lambda * sin(phi);\n return [\n sin(k) / tanPhi,\n phi + (1 - cos(k)) / tanPhi\n ];\n }\n polyconicRaw.invert = function (x, y) {\n if (abs(y) < epsilon)\n return [x, 0];\n var k = x * x + y * y, phi = y * 0.5, i = 10, delta;\n do {\n var tanPhi = tan(phi), secPhi = 1 / cos(phi), j = k - 2 * y * phi + phi * phi;\n phi -= delta = (tanPhi * j + 2 * (phi - y)) / (2 + j * secPhi * secPhi + 2 * (phi - y) * tanPhi);\n } while (abs(delta) > epsilon && --i > 0);\n tanPhi = tan(phi);\n return [\n (abs(y) < abs(phi + 1 / tanPhi) ? asin(x * tanPhi) : sign(x) * (acos(abs(x * tanPhi)) + halfPi)) / sin(phi),\n phi\n ];\n };\n var polyconic = function () {\n return d3Geo.geoProjection(polyconicRaw)\n .scale(103.74);\n };\n // Note: 6-element arrays are used to denote the 3x3 affine transform matrix:\n // [a, b, c,\n // d, e, f,\n // 0, 0, 1] - this redundant row is left out.\n // Transform matrix for [a0, a1] -> [b0, b1].\n var matrix = function (a, b) {\n var u = subtract(a[1], a[0]), v = subtract(b[1], b[0]), phi = angle$1(u, v), s = length(u) / length(v);\n return multiply([\n 1, 0, a[0][0],\n 0, 1, a[0][1]\n ], multiply([\n s, 0, 0,\n 0, s, 0\n ], multiply([\n cos(phi), sin(phi), 0,\n -sin(phi), cos(phi), 0\n ], [\n 1, 0, -b[0][0],\n 0, 1, -b[0][1]\n ])));\n };\n // Inverts a transform matrix.\n function inverse(m) {\n var k = 1 / (m[0] * m[4] - m[1] * m[3]);\n return [\n k * m[4], -k * m[1], k * (m[1] * m[5] - m[2] * m[4]),\n -k * m[3], k * m[0], k * (m[2] * m[3] - m[0] * m[5])\n ];\n }\n // Multiplies two 3x2 matrices.\n function multiply(a, b) {\n return [\n a[0] * b[0] + a[1] * b[3],\n a[0] * b[1] + a[1] * b[4],\n a[0] * b[2] + a[1] * b[5] + a[2],\n a[3] * b[0] + a[4] * b[3],\n a[3] * b[1] + a[4] * b[4],\n a[3] * b[2] + a[4] * b[5] + a[5]\n ];\n }\n // Subtracts 2D vectors.\n function subtract(a, b) {\n return [a[0] - b[0], a[1] - b[1]];\n }\n // Magnitude of a 2D vector.\n function length(v) {\n return sqrt(v[0] * v[0] + v[1] * v[1]);\n }\n // Angle between two 2D vectors.\n function angle$1(a, b) {\n return atan2(a[0] * b[1] - a[1] * b[0], a[0] * b[0] + a[1] * b[1]);\n }\n // Creates a polyhedral projection.\n // * root: a spanning tree of polygon faces. Nodes are automatically\n // augmented with a transform matrix.\n // * face: a function that returns the appropriate node for a given {lambda, phi}\n // point (radians).\n // * r: rotation angle for final polyhedral net. Defaults to -pi / 6 (for\n // butterflies).\n var polyhedral = function (root, face, r) {\n r = r == null ? -pi / 6 : r; // TODO automate\n recurse(root, { transform: [\n cos(r), sin(r), 0,\n -sin(r), cos(r), 0\n ] });\n function recurse(node, parent) {\n node.edges = faceEdges(node.face);\n // Find shared edge.\n if (parent.face) {\n var shared = node.shared = sharedEdge(node.face, parent.face), m = matrix(shared.map(parent.project), shared.map(node.project));\n node.transform = parent.transform ? multiply(parent.transform, m) : m;\n // Replace shared edge in parent edges array.\n var edges = parent.edges;\n for (var i = 0, n = edges.length; i < n; ++i) {\n if (pointEqual$1(shared[0], edges[i][1]) && pointEqual$1(shared[1], edges[i][0]))\n edges[i] = node;\n if (pointEqual$1(shared[0], edges[i][0]) && pointEqual$1(shared[1], edges[i][1]))\n edges[i] = node;\n }\n edges = node.edges;\n for (i = 0, n = edges.length; i < n; ++i) {\n if (pointEqual$1(shared[0], edges[i][0]) && pointEqual$1(shared[1], edges[i][1]))\n edges[i] = parent;\n if (pointEqual$1(shared[0], edges[i][1]) && pointEqual$1(shared[1], edges[i][0]))\n edges[i] = parent;\n }\n }\n else {\n node.transform = parent.transform;\n }\n if (node.children) {\n node.children.forEach(function (child) {\n recurse(child, node);\n });\n }\n return node;\n }\n function forward(lambda, phi) {\n var node = face(lambda, phi), point = node.project([lambda * degrees, phi * degrees]), t;\n if (t = node.transform) {\n return [\n t[0] * point[0] + t[1] * point[1] + t[2],\n -(t[3] * point[0] + t[4] * point[1] + t[5])\n ];\n }\n point[1] = -point[1];\n return point;\n }\n // Naive inverse! A faster solution would use bounding boxes, or even a\n // polygonal quadtree.\n if (hasInverse(root))\n forward.invert = function (x, y) {\n var coordinates = faceInvert(root, [x, -y]);\n return coordinates && (coordinates[0] *= radians, coordinates[1] *= radians, coordinates);\n };\n function faceInvert(node, coordinates) {\n var invert = node.project.invert, t = node.transform, point = coordinates;\n if (t) {\n t = inverse(t);\n point = [\n t[0] * point[0] + t[1] * point[1] + t[2],\n (t[3] * point[0] + t[4] * point[1] + t[5])\n ];\n }\n if (invert && node === faceDegrees(p = invert(point)))\n return p;\n var p, children = node.children;\n for (var i = 0, n = children && children.length; i < n; ++i) {\n if (p = faceInvert(children[i], coordinates))\n return p;\n }\n }\n function faceDegrees(coordinates) {\n return face(coordinates[0] * radians, coordinates[1] * radians);\n }\n var proj = d3Geo.geoProjection(forward), stream_ = proj.stream;\n proj.stream = function (stream) {\n var rotate = proj.rotate(), rotateStream = stream_(stream), sphereStream = (proj.rotate([0, 0]), stream_(stream));\n proj.rotate(rotate);\n rotateStream.sphere = function () {\n sphereStream.polygonStart();\n sphereStream.lineStart();\n outline(sphereStream, root);\n sphereStream.lineEnd();\n sphereStream.polygonEnd();\n };\n return rotateStream;\n };\n return proj;\n };\n function outline(stream, node, parent) {\n var point, edges = node.edges, n = edges.length, edge, multiPoint = { type: \"MultiPoint\", coordinates: node.face }, notPoles = node.face.filter(function (d) { return abs(d[1]) !== 90; }), b = d3Geo.geoBounds({ type: \"MultiPoint\", coordinates: notPoles }), inside = false, j = -1, dx = b[1][0] - b[0][0];\n // TODO\n var c = dx === 180 || dx === 360\n ? [(b[0][0] + b[1][0]) / 2, (b[0][1] + b[1][1]) / 2]\n : d3Geo.geoCentroid(multiPoint);\n // First find the shared edge…\n if (parent)\n while (++j < n) {\n if (edges[j] === parent)\n break;\n }\n ++j;\n for (var i = 0; i < n; ++i) {\n edge = edges[(i + j) % n];\n if (Array.isArray(edge)) {\n if (!inside) {\n stream.point((point = d3Geo.geoInterpolate(edge[0], c)(epsilon))[0], point[1]);\n inside = true;\n }\n stream.point((point = d3Geo.geoInterpolate(edge[1], c)(epsilon))[0], point[1]);\n }\n else {\n inside = false;\n if (edge !== parent)\n outline(stream, edge, node);\n }\n }\n }\n // Tests equality of two spherical points.\n function pointEqual$1(a, b) {\n return a && b && a[0] === b[0] && a[1] === b[1];\n }\n // Finds a shared edge given two clockwise polygons.\n function sharedEdge(a, b) {\n var x, y, n = a.length, found = null;\n for (var i = 0; i < n; ++i) {\n x = a[i];\n for (var j = b.length; --j >= 0;) {\n y = b[j];\n if (x[0] === y[0] && x[1] === y[1]) {\n if (found)\n return [found, x];\n found = x;\n }\n }\n }\n }\n // Converts an array of n face vertices to an array of n + 1 edges.\n function faceEdges(face) {\n var n = face.length, edges = [];\n for (var a = face[n - 1], i = 0; i < n; ++i)\n edges.push([a, a = face[i]]);\n return edges;\n }\n function hasInverse(node) {\n return node.project.invert || node.children && node.children.some(hasInverse);\n }\n // TODO generate on-the-fly to avoid external modification.\n var octahedron = [\n [0, 90],\n [-90, 0], [0, 0], [90, 0], [180, 0],\n [0, -90]\n ];\n var octahedron$1 = [\n [0, 2, 1],\n [0, 3, 2],\n [5, 1, 2],\n [5, 2, 3],\n [0, 1, 4],\n [0, 4, 3],\n [5, 4, 1],\n [5, 3, 4]\n ].map(function (face) {\n return face.map(function (i) {\n return octahedron[i];\n });\n });\n var butterfly = function (faceProjection) {\n faceProjection = faceProjection || function (face) {\n var c = d3Geo.geoCentroid({ type: \"MultiPoint\", coordinates: face });\n return d3Geo.geoGnomonic().scale(1).translate([0, 0]).rotate([-c[0], -c[1]]);\n };\n var faces = octahedron$1.map(function (face) {\n return { face: face, project: faceProjection(face) };\n });\n [-1, 0, 0, 1, 0, 1, 4, 5].forEach(function (d, i) {\n var node = faces[d];\n node && (node.children || (node.children = [])).push(faces[i]);\n });\n return polyhedral(faces[0], function (lambda, phi) {\n return faces[lambda < -pi / 2 ? phi < 0 ? 6 : 4\n : lambda < 0 ? phi < 0 ? 2 : 0\n : lambda < pi / 2 ? phi < 0 ? 3 : 1\n : phi < 0 ? 7 : 5];\n })\n .scale(101.858)\n .center([0, 45]);\n };\n var kx = 2 / sqrt(3);\n function collignonK(a, b) {\n var p = collignonRaw(a, b);\n return [p[0] * kx, p[1]];\n }\n collignonK.invert = function (x, y) {\n return collignonRaw.invert(x / kx, y);\n };\n var collignon$1 = function (faceProjection) {\n faceProjection = faceProjection || function (face) {\n var c = d3Geo.geoCentroid({ type: \"MultiPoint\", coordinates: face });\n return d3Geo.geoProjection(collignonK).translate([0, 0]).scale(1).rotate(c[1] > 0 ? [-c[0], 0] : [180 - c[0], 180]);\n };\n var faces = octahedron$1.map(function (face) {\n return { face: face, project: faceProjection(face) };\n });\n [-1, 0, 0, 1, 0, 1, 4, 5].forEach(function (d, i) {\n var node = faces[d];\n node && (node.children || (node.children = [])).push(faces[i]);\n });\n return polyhedral(faces[0], function (lambda, phi) {\n return faces[lambda < -pi / 2 ? phi < 0 ? 6 : 4\n : lambda < 0 ? phi < 0 ? 2 : 0\n : lambda < pi / 2 ? phi < 0 ? 3 : 1\n : phi < 0 ? 7 : 5];\n })\n .scale(121.906)\n .center([0, 48.5904]);\n };\n var waterman = function (faceProjection) {\n faceProjection = faceProjection || function (face) {\n var c = face.length === 6 ? d3Geo.geoCentroid({ type: \"MultiPoint\", coordinates: face }) : face[0];\n return d3Geo.geoGnomonic().scale(1).translate([0, 0]).rotate([-c[0], -c[1]]);\n };\n var w5 = octahedron$1.map(function (face) {\n var xyz = face.map(cartesian), n = xyz.length, a = xyz[n - 1], b, hexagon = [];\n for (var i = 0; i < n; ++i) {\n b = xyz[i];\n hexagon.push(spherical([\n a[0] * 0.9486832980505138 + b[0] * 0.31622776601683794,\n a[1] * 0.9486832980505138 + b[1] * 0.31622776601683794,\n a[2] * 0.9486832980505138 + b[2] * 0.31622776601683794\n ]), spherical([\n b[0] * 0.9486832980505138 + a[0] * 0.31622776601683794,\n b[1] * 0.9486832980505138 + a[1] * 0.31622776601683794,\n b[2] * 0.9486832980505138 + a[2] * 0.31622776601683794\n ]));\n a = b;\n }\n return hexagon;\n });\n var cornerNormals = [];\n var parents = [-1, 0, 0, 1, 0, 1, 4, 5];\n w5.forEach(function (hexagon, j) {\n var face = octahedron$1[j], n = face.length, normals = cornerNormals[j] = [];\n for (var i = 0; i < n; ++i) {\n w5.push([\n face[i],\n hexagon[(i * 2 + 2) % (2 * n)],\n hexagon[(i * 2 + 1) % (2 * n)]\n ]);\n parents.push(j);\n normals.push(cross(cartesian(hexagon[(i * 2 + 2) % (2 * n)]), cartesian(hexagon[(i * 2 + 1) % (2 * n)])));\n }\n });\n var faces = w5.map(function (face) {\n return {\n project: faceProjection(face),\n face: face\n };\n });\n parents.forEach(function (d, i) {\n var parent = faces[d];\n parent && (parent.children || (parent.children = [])).push(faces[i]);\n });\n function face(lambda, phi) {\n var cosphi = cos(phi), p = [cosphi * cos(lambda), cosphi * sin(lambda), sin(phi)];\n var hexagon = lambda < -pi / 2 ? phi < 0 ? 6 : 4\n : lambda < 0 ? phi < 0 ? 2 : 0\n : lambda < pi / 2 ? phi < 0 ? 3 : 1\n : phi < 0 ? 7 : 5;\n var n = cornerNormals[hexagon];\n return faces[dot(n[0], p) < 0 ? 8 + 3 * hexagon\n : dot(n[1], p) < 0 ? 8 + 3 * hexagon + 1\n : dot(n[2], p) < 0 ? 8 + 3 * hexagon + 2\n : hexagon];\n }\n return polyhedral(faces[0], face)\n .scale(110.625)\n .center([0, 45]);\n };\n function dot(a, b) {\n for (var i = 0, n = a.length, s = 0; i < n; ++i)\n s += a[i] * b[i];\n return s;\n }\n function cross(a, b) {\n return [\n a[1] * b[2] - a[2] * b[1],\n a[2] * b[0] - a[0] * b[2],\n a[0] * b[1] - a[1] * b[0]\n ];\n }\n // Converts 3D Cartesian to spherical coordinates (degrees).\n function spherical(cartesian) {\n return [\n atan2(cartesian[1], cartesian[0]) * degrees,\n asin(max(-1, min(1, cartesian[2]))) * degrees\n ];\n }\n // Converts spherical coordinates (degrees) to 3D Cartesian.\n function cartesian(coordinates) {\n var lambda = coordinates[0] * radians, phi = coordinates[1] * radians, cosphi = cos(phi);\n return [\n cosphi * cos(lambda),\n cosphi * sin(lambda),\n sin(phi)\n ];\n }\n var noop = function () { };\n var clockwise = function (ring) {\n if ((n = ring.length) < 4)\n return false;\n var i = 0, n, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n)\n area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area <= 0;\n };\n var contains = function (ring, point) {\n var x = point[0], y = point[1], contains = false;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (((yi > y) ^ (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi))\n contains = !contains;\n }\n return contains;\n };\n var index = function (object, projection) {\n var stream = projection.stream, project;\n if (!stream)\n throw new Error(\"invalid projection\");\n switch (object && object.type) {\n case \"Feature\":\n project = projectFeature;\n break;\n case \"FeatureCollection\":\n project = projectFeatureCollection;\n break;\n default:\n project = projectGeometry;\n break;\n }\n return project(object, stream);\n };\n function projectFeatureCollection(o, stream) {\n return {\n type: \"FeatureCollection\",\n features: o.features.map(function (f) {\n return projectFeature(f, stream);\n })\n };\n }\n function projectFeature(o, stream) {\n return {\n type: \"Feature\",\n id: o.id,\n properties: o.properties,\n geometry: projectGeometry(o.geometry, stream)\n };\n }\n function projectGeometryCollection(o, stream) {\n return {\n type: \"GeometryCollection\",\n geometries: o.geometries.map(function (o) {\n return projectGeometry(o, stream);\n })\n };\n }\n function projectGeometry(o, stream) {\n if (!o)\n return null;\n if (o.type === \"GeometryCollection\")\n return projectGeometryCollection(o, stream);\n var sink;\n switch (o.type) {\n case \"Point\":\n sink = sinkPoint;\n break;\n case \"MultiPoint\":\n sink = sinkPoint;\n break;\n case \"LineString\":\n sink = sinkLine;\n break;\n case \"MultiLineString\":\n sink = sinkLine;\n break;\n case \"Polygon\":\n sink = sinkPolygon;\n break;\n case \"MultiPolygon\":\n sink = sinkPolygon;\n break;\n case \"Sphere\":\n sink = sinkPolygon;\n break;\n default: return null;\n }\n d3Geo.geoStream(o, stream(sink));\n return sink.result();\n }\n var points = [];\n var lines = [];\n var sinkPoint = {\n point: function (x, y) {\n points.push([x, y]);\n },\n result: function () {\n var result = !points.length ? null\n : points.length < 2 ? { type: \"Point\", coordinates: points[0] }\n : { type: \"MultiPoint\", coordinates: points };\n points = [];\n return result;\n }\n };\n var sinkLine = {\n lineStart: noop,\n point: function (x, y) {\n points.push([x, y]);\n },\n lineEnd: function () {\n if (points.length)\n lines.push(points), points = [];\n },\n result: function () {\n var result = !lines.length ? null\n : lines.length < 2 ? { type: \"LineString\", coordinates: lines[0] }\n : { type: \"MultiLineString\", coordinates: lines };\n lines = [];\n return result;\n }\n };\n var sinkPolygon = {\n polygonStart: noop,\n lineStart: noop,\n point: function (x, y) {\n points.push([x, y]);\n },\n lineEnd: function () {\n var n = points.length;\n if (n) {\n do\n points.push(points[0].slice());\n while (++n < 4);\n lines.push(points), points = [];\n }\n },\n polygonEnd: noop,\n result: function () {\n if (!lines.length)\n return null;\n var polygons = [], holes = [];\n // https://github.com/d3/d3/issues/1558\n lines.forEach(function (ring) {\n if (clockwise(ring))\n polygons.push([ring]);\n else\n holes.push(ring);\n });\n holes.forEach(function (hole) {\n var point = hole[0];\n polygons.some(function (polygon) {\n if (contains(polygon[0], point)) {\n polygon.push(hole);\n return true;\n }\n }) || polygons.push([hole]);\n });\n lines = [];\n return !polygons.length ? null\n : polygons.length > 1 ? { type: \"MultiPolygon\", coordinates: polygons }\n : { type: \"Polygon\", coordinates: polygons[0] };\n }\n };\n var quincuncial = function (project) {\n var dx = project(halfPi, 0)[0] - project(-halfPi, 0)[0];\n function projectQuincuncial(lambda, phi) {\n var t = abs(lambda) < halfPi, p = project(t ? lambda : lambda > 0 ? lambda - pi : lambda + pi, phi), x = (p[0] - p[1]) * sqrt1_2, y = (p[0] + p[1]) * sqrt1_2;\n if (t)\n return [x, y];\n var d = dx * sqrt1_2, s = x > 0 ^ y > 0 ? -1 : 1;\n return [s * x - sign(y) * d, s * y - sign(x) * d];\n }\n if (project.invert)\n projectQuincuncial.invert = function (x0, y0) {\n var x = (x0 + y0) * sqrt1_2, y = (y0 - x0) * sqrt1_2, t = abs(x) < 0.5 * dx && abs(y) < 0.5 * dx;\n if (!t) {\n var d = dx * sqrt1_2, s = x > 0 ^ y > 0 ? -1 : 1, x1 = -s * x0 + (y > 0 ? 1 : -1) * d, y1 = -s * y0 + (x > 0 ? 1 : -1) * d;\n x = (-x1 - y1) * sqrt1_2;\n y = (x1 - y1) * sqrt1_2;\n }\n var p = project.invert(x, y);\n if (!t)\n p[0] += x > 0 ? pi : -pi;\n return p;\n };\n return d3Geo.geoProjection(projectQuincuncial)\n .rotate([-90, -90, 45])\n .clipAngle(180 - 1e-3);\n };\n var gringorten$1 = function () {\n return quincuncial(gringortenRaw)\n .scale(176.423);\n };\n var peirce = function () {\n return quincuncial(guyouRaw)\n .scale(111.48);\n };\n var quantize = function (input, digits) {\n if (!(0 <= (digits = +digits) && digits <= 20))\n throw new Error(\"invalid digits\");\n function quantizePoint(input) {\n var n = input.length, i = 2, output = new Array(n);\n output[0] = +input[0].toFixed(digits);\n output[1] = +input[1].toFixed(digits);\n while (i < n)\n output[i] = input[i], ++i;\n return output;\n }\n function quantizePoints(input) {\n return input.map(quantizePoint);\n }\n function quantizePolygon(input) {\n return input.map(quantizePoints);\n }\n function quantizeGeometry(input) {\n if (input == null)\n return input;\n var output;\n switch (input.type) {\n case \"GeometryCollection\":\n output = { type: \"GeometryCollection\", geometries: input.geometries.map(quantizeGeometry) };\n break;\n case \"Point\":\n output = { type: \"Point\", coordinates: quantizePoint(input.coordinates) };\n break;\n case \"MultiPoint\":\n case \"LineString\":\n output = { type: input.type, coordinates: quantizePoints(input.coordinates) };\n break;\n case \"MultiLineString\":\n case \"Polygon\":\n output = { type: input.type, coordinates: quantizePolygon(input.coordinates) };\n break;\n case \"MultiPolygon\":\n output = { type: \"MultiPolygon\", coordinates: input.coordinates.map(quantizePolygon) };\n break;\n default: return input;\n }\n if (input.bbox != null)\n output.bbox = input.bbox;\n return output;\n }\n function quantizeFeature(input) {\n var output = { type: \"Feature\", properties: input.properties, geometry: quantizeGeometry(input.geometry) };\n if (input.id != null)\n output.id = input.id;\n if (input.bbox != null)\n output.bbox = input.bbox;\n return output;\n }\n if (input != null)\n switch (input.type) {\n case \"Feature\": return quantizeFeature(input);\n case \"FeatureCollection\": {\n var output = { type: \"FeatureCollection\", features: input.features.map(quantizeFeature) };\n if (input.bbox != null)\n output.bbox = input.bbox;\n return output;\n }\n default: return quantizeGeometry(input);\n }\n return input;\n };\n function rectangularPolyconicRaw(phi0) {\n var sinPhi0 = sin(phi0);\n function forward(lambda, phi) {\n var A = sinPhi0 ? tan(lambda * sinPhi0 / 2) / sinPhi0 : lambda / 2;\n if (!phi)\n return [2 * A, -phi0];\n var E = 2 * atan(A * sin(phi)), cotPhi = 1 / tan(phi);\n return [\n sin(E) * cotPhi,\n phi + (1 - cos(E)) * cotPhi - phi0\n ];\n }\n // TODO return null for points outside outline.\n forward.invert = function (x, y) {\n if (abs(y += phi0) < epsilon)\n return [sinPhi0 ? 2 * atan(sinPhi0 * x / 2) / sinPhi0 : x, 0];\n var k = x * x + y * y, phi = 0, i = 10, delta;\n do {\n var tanPhi = tan(phi), secPhi = 1 / cos(phi), j = k - 2 * y * phi + phi * phi;\n phi -= delta = (tanPhi * j + 2 * (phi - y)) / (2 + j * secPhi * secPhi + 2 * (phi - y) * tanPhi);\n } while (abs(delta) > epsilon && --i > 0);\n var E = x * (tanPhi = tan(phi)), A = tan(abs(y) < abs(phi + 1 / tanPhi) ? asin(E) * 0.5 : acos(E) * 0.5 + pi / 4) / sin(phi);\n return [\n sinPhi0 ? 2 * atan(sinPhi0 * A) / sinPhi0 : 2 * A,\n phi\n ];\n };\n return forward;\n }\n var rectangularPolyconic = function () {\n return parallel1(rectangularPolyconicRaw)\n .scale(131.215);\n };\n var K = [\n [0.9986, -0.062],\n [1.0000, 0.0000],\n [0.9986, 0.0620],\n [0.9954, 0.1240],\n [0.9900, 0.1860],\n [0.9822, 0.2480],\n [0.9730, 0.3100],\n [0.9600, 0.3720],\n [0.9427, 0.4340],\n [0.9216, 0.4958],\n [0.8962, 0.5571],\n [0.8679, 0.6176],\n [0.8350, 0.6769],\n [0.7986, 0.7346],\n [0.7597, 0.7903],\n [0.7186, 0.8435],\n [0.6732, 0.8936],\n [0.6213, 0.9394],\n [0.5722, 0.9761],\n [0.5322, 1.0000]\n ];\n K.forEach(function (d) {\n d[1] *= 1.0144;\n });\n function robinsonRaw(lambda, phi) {\n var i = min(18, abs(phi) * 36 / pi), i0 = floor(i), di = i - i0, ax = (k = K[i0])[0], ay = k[1], bx = (k = K[++i0])[0], by = k[1], cx = (k = K[min(19, ++i0)])[0], cy = k[1], k;\n return [\n lambda * (bx + di * (cx - ax) / 2 + di * di * (cx - 2 * bx + ax) / 2),\n (phi > 0 ? halfPi : -halfPi) * (by + di * (cy - ay) / 2 + di * di * (cy - 2 * by + ay) / 2)\n ];\n }\n robinsonRaw.invert = function (x, y) {\n var yy = y / halfPi, phi = yy * 90, i = min(18, abs(phi / 5)), i0 = max(0, floor(i));\n do {\n var ay = K[i0][1], by = K[i0 + 1][1], cy = K[min(19, i0 + 2)][1], u = cy - ay, v = cy - 2 * by + ay, t = 2 * (abs(yy) - by) / u, c = v / u, di = t * (1 - c * t * (1 - 2 * c * t));\n if (di >= 0 || i0 === 1) {\n phi = (y >= 0 ? 5 : -5) * (di + i);\n var j = 50, delta;\n do {\n i = min(18, abs(phi) / 5);\n i0 = floor(i);\n di = i - i0;\n ay = K[i0][1];\n by = K[i0 + 1][1];\n cy = K[min(19, i0 + 2)][1];\n phi -= (delta = (y >= 0 ? halfPi : -halfPi) * (by + di * (cy - ay) / 2 + di * di * (cy - 2 * by + ay) / 2) - y) * degrees;\n } while (abs(delta) > epsilon2 && --j > 0);\n break;\n }\n } while (--i0 >= 0);\n var ax = K[i0][0], bx = K[i0 + 1][0], cx = K[min(19, i0 + 2)][0];\n return [\n x / (bx + di * (cx - ax) / 2 + di * di * (cx - 2 * bx + ax) / 2),\n phi * radians\n ];\n };\n var robinson = function () {\n return d3Geo.geoProjection(robinsonRaw)\n .scale(152.63);\n };\n function satelliteVerticalRaw(P) {\n function forward(lambda, phi) {\n var cosPhi = cos(phi), k = (P - 1) / (P - cosPhi * cos(lambda));\n return [\n k * cosPhi * sin(lambda),\n k * sin(phi)\n ];\n }\n forward.invert = function (x, y) {\n var rho2 = x * x + y * y, rho = sqrt(rho2), sinc = (P - sqrt(1 - rho2 * (P + 1) / (P - 1))) / ((P - 1) / rho + rho / (P - 1));\n return [\n atan2(x * sinc, rho * sqrt(1 - sinc * sinc)),\n rho ? asin(y * sinc / rho) : 0\n ];\n };\n return forward;\n }\n function satelliteRaw(P, omega) {\n var vertical = satelliteVerticalRaw(P);\n if (!omega)\n return vertical;\n var cosOmega = cos(omega), sinOmega = sin(omega);\n function forward(lambda, phi) {\n var coordinates = vertical(lambda, phi), y = coordinates[1], A = y * sinOmega / (P - 1) + cosOmega;\n return [\n coordinates[0] * cosOmega / A,\n y / A\n ];\n }\n forward.invert = function (x, y) {\n var k = (P - 1) / (P - 1 - y * sinOmega);\n return vertical.invert(k * x, k * y * cosOmega);\n };\n return forward;\n }\n var satellite = function () {\n var distance = 2, omega = 0, m = d3Geo.geoProjectionMutator(satelliteRaw), p = m(distance, omega);\n // As a multiple of radius.\n p.distance = function (_) {\n if (!arguments.length)\n return distance;\n return m(distance = +_, omega);\n };\n p.tilt = function (_) {\n if (!arguments.length)\n return omega * degrees;\n return m(distance, omega = _ * radians);\n };\n return p\n .scale(432.147)\n .clipAngle(acos(1 / distance) * degrees - 1e-6);\n };\n var epsilon$1 = 1e-4;\n var epsilonInverse = 1e4;\n var x0 = -180;\n var x0e = x0 + epsilon$1;\n var x1 = 180;\n var x1e = x1 - epsilon$1;\n var y0 = -90;\n var y0e = y0 + epsilon$1;\n var y1 = 90;\n var y1e = y1 - epsilon$1;\n function nonempty(coordinates) {\n return coordinates.length > 0;\n }\n function quantize$1(x) {\n return Math.floor(x * epsilonInverse) / epsilonInverse;\n }\n function normalizePoint(y) {\n return y === y0 || y === y1 ? [0, y] : [x0, quantize$1(y)]; // pole or antimeridian?\n }\n function clampPoint(p) {\n var x = p[0], y = p[1], clamped = false;\n if (x <= x0e)\n x = x0, clamped = true;\n else if (x >= x1e)\n x = x1, clamped = true;\n if (y <= y0e)\n y = y0, clamped = true;\n else if (y >= y1e)\n y = y1, clamped = true;\n return clamped ? [x, y] : p;\n }\n function clampPoints(points) {\n return points.map(clampPoint);\n }\n // For each ring, detect where it crosses the antimeridian or pole.\n function extractFragments(rings, polygon, fragments) {\n for (var j = 0, m = rings.length; j < m; ++j) {\n var ring = rings[j].slice();\n // By default, assume that this ring doesnt need any stitching.\n fragments.push({ index: -1, polygon: polygon, ring: ring });\n for (var i = 0, n = ring.length; i < n; ++i) {\n var point = ring[i], x = point[0], y = point[1];\n // If this is an antimeridian or polar point…\n if (x <= x0e || x >= x1e || y <= y0e || y >= y1e) {\n ring[i] = clampPoint(point);\n // Advance through any antimeridian or polar points…\n for (var k = i + 1; k < n; ++k) {\n var pointk = ring[k], xk = pointk[0], yk = pointk[1];\n if (xk > x0e && xk < x1e && yk > y0e && yk < y1e)\n break;\n }\n // If this was just a single antimeridian or polar point,\n // we dont need to cut this ring into a fragment;\n // we can just leave it as-is.\n if (k === i + 1)\n continue;\n // Otherwise, if this is not the first point in the ring,\n // cut the current fragment so that it ends at the current point.\n // The current point is also normalized for later joining.\n if (i) {\n var fragmentBefore = { index: -1, polygon: polygon, ring: ring.slice(0, i + 1) };\n fragmentBefore.ring[fragmentBefore.ring.length - 1] = normalizePoint(y);\n fragments[fragments.length - 1] = fragmentBefore;\n }\n // If the ring started with an antimeridian fragment,\n // we can ignore that fragment entirely.\n else\n fragments.pop();\n // If the remainder of the ring is an antimeridian fragment,\n // move on to the next ring.\n if (k >= n)\n break;\n // Otherwise, add the remaining ring fragment and continue.\n fragments.push({ index: -1, polygon: polygon, ring: ring = ring.slice(k - 1) });\n ring[0] = normalizePoint(ring[0][1]);\n i = -1;\n n = ring.length;\n }\n }\n }\n }\n // Now stitch the fragments back together into rings.\n function stitchFragments(fragments) {\n var i, n = fragments.length;\n // To connect the fragments start-to-end, create a simple index by end.\n var fragmentByStart = {}, fragmentByEnd = {}, fragment, start, startFragment, end, endFragment;\n // For each fragment…\n for (i = 0; i < n; ++i) {\n fragment = fragments[i];\n start = fragment.ring[0];\n end = fragment.ring[fragment.ring.length - 1];\n // If this fragment is closed, add it as a standalone ring.\n if (start[0] === end[0] && start[1] === end[1]) {\n fragment.polygon.push(fragment.ring);\n fragments[i] = null;\n continue;\n }\n fragment.index = i;\n fragmentByStart[start] = fragmentByEnd[end] = fragment;\n }\n // For each open fragment…\n for (i = 0; i < n; ++i) {\n fragment = fragments[i];\n if (fragment) {\n start = fragment.ring[0];\n end = fragment.ring[fragment.ring.length - 1];\n startFragment = fragmentByEnd[start];\n endFragment = fragmentByStart[end];\n delete fragmentByStart[start];\n delete fragmentByEnd[end];\n // If this fragment is closed, add it as a standalone ring.\n if (start[0] === end[0] && start[1] === end[1]) {\n fragment.polygon.push(fragment.ring);\n continue;\n }\n if (startFragment) {\n delete fragmentByEnd[start];\n delete fragmentByStart[startFragment.ring[0]];\n startFragment.ring.pop(); // drop the shared coordinate\n fragments[startFragment.index] = null;\n fragment = { index: -1, polygon: startFragment.polygon, ring: startFragment.ring.concat(fragment.ring) };\n if (startFragment === endFragment) {\n // Connect both ends to this single fragment to create a ring.\n fragment.polygon.push(fragment.ring);\n }\n else {\n fragment.index = n++;\n fragments.push(fragmentByStart[fragment.ring[0]] = fragmentByEnd[fragment.ring[fragment.ring.length - 1]] = fragment);\n }\n }\n else if (endFragment) {\n delete fragmentByStart[end];\n delete fragmentByEnd[endFragment.ring[endFragment.ring.length - 1]];\n fragment.ring.pop(); // drop the shared coordinate\n fragment = { index: n++, polygon: endFragment.polygon, ring: fragment.ring.concat(endFragment.ring) };\n fragments[endFragment.index] = null;\n fragments.push(fragmentByStart[fragment.ring[0]] = fragmentByEnd[fragment.ring[fragment.ring.length - 1]] = fragment);\n }\n else {\n fragment.ring.push(fragment.ring[0]); // close ring\n fragment.polygon.push(fragment.ring);\n }\n }\n }\n }\n function stitchFeature(input) {\n var output = { type: \"Feature\", geometry: stitchGeometry(input.geometry) };\n if (input.id != null)\n output.id = input.id;\n if (input.bbox != null)\n output.bbox = input.bbox;\n if (input.properties != null)\n output.properties = input.properties;\n return output;\n }\n function stitchGeometry(input) {\n if (input == null)\n return input;\n var output, fragments, i, n;\n switch (input.type) {\n case \"GeometryCollection\":\n output = { type: \"GeometryCollection\", geometries: input.geometries.map(stitchGeometry) };\n break;\n case \"Point\":\n output = { type: \"Point\", coordinates: clampPoint(input.coordinates) };\n break;\n case \"MultiPoint\":\n case \"LineString\":\n output = { type: input.type, coordinates: clampPoints(input.coordinates) };\n break;\n case \"MultiLineString\":\n output = { type: \"MultiLineString\", coordinates: input.coordinates.map(clampPoints) };\n break;\n case \"Polygon\": {\n var polygon = [];\n extractFragments(input.coordinates, polygon, fragments = []);\n stitchFragments(fragments);\n output = { type: \"Polygon\", coordinates: polygon };\n break;\n }\n case \"MultiPolygon\": {\n fragments = [], i = -1, n = input.coordinates.length;\n var polygons = new Array(n);\n while (++i < n)\n extractFragments(input.coordinates[i], polygons[i] = [], fragments);\n stitchFragments(fragments);\n output = { type: \"MultiPolygon\", coordinates: polygons.filter(nonempty) };\n break;\n }\n default: return input;\n }\n if (input.bbox != null)\n output.bbox = input.bbox;\n return output;\n }\n var stitch = function (input) {\n if (input == null)\n return input;\n switch (input.type) {\n case \"Feature\": return stitchFeature(input);\n case \"FeatureCollection\": {\n var output = { type: \"FeatureCollection\", features: input.features.map(stitchFeature) };\n if (input.bbox != null)\n output.bbox = input.bbox;\n return output;\n }\n default: return stitchGeometry(input);\n }\n };\n function timesRaw(lambda, phi) {\n var t = tan(phi / 2), s = sin(quarterPi * t);\n return [\n lambda * (0.74482 - 0.34588 * s * s),\n 1.70711 * t\n ];\n }\n timesRaw.invert = function (x, y) {\n var t = y / 1.70711, s = sin(quarterPi * t);\n return [\n x / (0.74482 - 0.34588 * s * s),\n 2 * atan(t)\n ];\n };\n var times = function () {\n return d3Geo.geoProjection(timesRaw)\n .scale(146.153);\n };\n // Compute the origin as the midpoint of the two reference points.\n // Rotate one of the reference points by the origin.\n // Apply the spherical law of sines to compute gamma rotation.\n var twoPoint = function (raw, p0, p1) {\n var i = d3Geo.geoInterpolate(p0, p1), o = i(0.5), a = d3Geo.geoRotation([-o[0], -o[1]])(p0), b = i.distance / 2, y = -asin(sin(a[1] * radians) / sin(b)), R = [-o[0], -o[1], -(a[0] > 0 ? pi - y : y) * degrees], p = d3Geo.geoProjection(raw(b)).rotate(R), r = d3Geo.geoRotation(R), center = p.center;\n delete p.rotate;\n p.center = function (_) {\n return arguments.length ? center(r(_)) : r.invert(center());\n };\n return p\n .clipAngle(90);\n };\n function twoPointAzimuthalRaw(d) {\n var cosd = cos(d);\n function forward(lambda, phi) {\n var coordinates = d3Geo.geoGnomonicRaw(lambda, phi);\n coordinates[0] *= cosd;\n return coordinates;\n }\n forward.invert = function (x, y) {\n return d3Geo.geoGnomonicRaw.invert(x / cosd, y);\n };\n return forward;\n }\n function twoPointAzimuthalUsa() {\n return twoPointAzimuthal([-158, 21.5], [-77, 39])\n .clipAngle(60)\n .scale(400);\n }\n function twoPointAzimuthal(p0, p1) {\n return twoPoint(twoPointAzimuthalRaw, p0, p1);\n }\n // TODO clip to ellipse\n function twoPointEquidistantRaw(z0) {\n if (!(z0 *= 2))\n return d3Geo.geoAzimuthalEquidistantRaw;\n var lambdaa = -z0 / 2, lambdab = -lambdaa, z02 = z0 * z0, tanLambda0 = tan(lambdab), S = 0.5 / sin(lambdab);\n function forward(lambda, phi) {\n var za = acos(cos(phi) * cos(lambda - lambdaa)), zb = acos(cos(phi) * cos(lambda - lambdab)), ys = phi < 0 ? -1 : 1;\n za *= za, zb *= zb;\n return [\n (za - zb) / (2 * z0),\n ys * sqrt(4 * z02 * zb - (z02 - za + zb) * (z02 - za + zb)) / (2 * z0)\n ];\n }\n forward.invert = function (x, y) {\n var y2 = y * y, cosza = cos(sqrt(y2 + (t = x + lambdaa) * t)), coszb = cos(sqrt(y2 + (t = x + lambdab) * t)), t, d;\n return [\n atan2(d = cosza - coszb, t = (cosza + coszb) * tanLambda0),\n (y < 0 ? -1 : 1) * acos(sqrt(t * t + d * d) * S)\n ];\n };\n return forward;\n }\n function twoPointEquidistantUsa() {\n return twoPointEquidistant([-158, 21.5], [-77, 39])\n .clipAngle(130)\n .scale(122.571);\n }\n function twoPointEquidistant(p0, p1) {\n return twoPoint(twoPointEquidistantRaw, p0, p1);\n }\n function vanDerGrintenRaw(lambda, phi) {\n if (abs(phi) < epsilon)\n return [lambda, 0];\n var sinTheta = abs(phi / halfPi), theta = asin(sinTheta);\n if (abs(lambda) < epsilon || abs(abs(phi) - halfPi) < epsilon)\n return [0, sign(phi) * pi * tan(theta / 2)];\n var cosTheta = cos(theta), A = abs(pi / lambda - lambda / pi) / 2, A2 = A * A, G = cosTheta / (sinTheta + cosTheta - 1), P = G * (2 / sinTheta - 1), P2 = P * P, P2_A2 = P2 + A2, G_P2 = G - P2, Q = A2 + G;\n return [\n sign(lambda) * pi * (A * G_P2 + sqrt(A2 * G_P2 * G_P2 - P2_A2 * (G * G - P2))) / P2_A2,\n sign(phi) * pi * (P * Q - A * sqrt((A2 + 1) * P2_A2 - Q * Q)) / P2_A2\n ];\n }\n vanDerGrintenRaw.invert = function (x, y) {\n if (abs(y) < epsilon)\n return [x, 0];\n if (abs(x) < epsilon)\n return [0, halfPi * sin(2 * atan(y / pi))];\n var x2 = (x /= pi) * x, y2 = (y /= pi) * y, x2_y2 = x2 + y2, z = x2_y2 * x2_y2, c1 = -abs(y) * (1 + x2_y2), c2 = c1 - 2 * y2 + x2, c3 = -2 * c1 + 1 + 2 * y2 + z, d = y2 / c3 + (2 * c2 * c2 * c2 / (c3 * c3 * c3) - 9 * c1 * c2 / (c3 * c3)) / 27, a1 = (c1 - c2 * c2 / (3 * c3)) / c3, m1 = 2 * sqrt(-a1 / 3), theta1 = acos(3 * d / (a1 * m1)) / 3;\n return [\n pi * (x2_y2 - 1 + sqrt(1 + 2 * (x2 - y2) + z)) / (2 * x),\n sign(y) * pi * (-m1 * cos(theta1 + pi / 3) - c2 / (3 * c3))\n ];\n };\n var vanDerGrinten = function () {\n return d3Geo.geoProjection(vanDerGrintenRaw)\n .scale(79.4183);\n };\n function vanDerGrinten2Raw(lambda, phi) {\n if (abs(phi) < epsilon)\n return [lambda, 0];\n var sinTheta = abs(phi / halfPi), theta = asin(sinTheta);\n if (abs(lambda) < epsilon || abs(abs(phi) - halfPi) < epsilon)\n return [0, sign(phi) * pi * tan(theta / 2)];\n var cosTheta = cos(theta), A = abs(pi / lambda - lambda / pi) / 2, A2 = A * A, x1 = cosTheta * (sqrt(1 + A2) - A * cosTheta) / (1 + A2 * sinTheta * sinTheta);\n return [\n sign(lambda) * pi * x1,\n sign(phi) * pi * sqrt(1 - x1 * (2 * A + x1))\n ];\n }\n vanDerGrinten2Raw.invert = function (x, y) {\n if (!x)\n return [0, halfPi * sin(2 * atan(y / pi))];\n var x1 = abs(x / pi), A = (1 - x1 * x1 - (y /= pi) * y) / (2 * x1), A2 = A * A, B = sqrt(A2 + 1);\n return [\n sign(x) * pi * (B - A),\n sign(y) * halfPi * sin(2 * atan2(sqrt((1 - 2 * A * x1) * (A + B) - x1), sqrt(B + A + x1)))\n ];\n };\n var vanDerGrinten2 = function () {\n return d3Geo.geoProjection(vanDerGrinten2Raw)\n .scale(79.4183);\n };\n function vanDerGrinten3Raw(lambda, phi) {\n if (abs(phi) < epsilon)\n return [lambda, 0];\n var sinTheta = phi / halfPi, theta = asin(sinTheta);\n if (abs(lambda) < epsilon || abs(abs(phi) - halfPi) < epsilon)\n return [0, pi * tan(theta / 2)];\n var A = (pi / lambda - lambda / pi) / 2, y1 = sinTheta / (1 + cos(theta));\n return [\n pi * (sign(lambda) * sqrt(A * A + 1 - y1 * y1) - A),\n pi * y1\n ];\n }\n vanDerGrinten3Raw.invert = function (x, y) {\n if (!y)\n return [x, 0];\n var y1 = y / pi, A = (pi * pi * (1 - y1 * y1) - x * x) / (2 * pi * x);\n return [\n x ? pi * (sign(x) * sqrt(A * A + 1) - A) : 0,\n halfPi * sin(2 * atan(y1))\n ];\n };\n var vanDerGrinten3 = function () {\n return d3Geo.geoProjection(vanDerGrinten3Raw)\n .scale(79.4183);\n };\n function vanDerGrinten4Raw(lambda, phi) {\n if (!phi)\n return [lambda, 0];\n var phi0 = abs(phi);\n if (!lambda || phi0 === halfPi)\n return [0, phi];\n var B = phi0 / halfPi, B2 = B * B, C = (8 * B - B2 * (B2 + 2) - 5) / (2 * B2 * (B - 1)), C2 = C * C, BC = B * C, B_C2 = B2 + C2 + 2 * BC, B_3C = B + 3 * C, lambda0 = lambda / halfPi, lambda1 = lambda0 + 1 / lambda0, D = sign(abs(lambda) - halfPi) * sqrt(lambda1 * lambda1 - 4), D2 = D * D, F = B_C2 * (B2 + C2 * D2 - 1) + (1 - B2) * (B2 * (B_3C * B_3C + 4 * C2) + 12 * BC * C2 + 4 * C2 * C2), x1 = (D * (B_C2 + C2 - 1) + 2 * sqrt(F)) / (4 * B_C2 + D2);\n return [\n sign(lambda) * halfPi * x1,\n sign(phi) * halfPi * sqrt(1 + D * abs(x1) - x1 * x1)\n ];\n }\n vanDerGrinten4Raw.invert = function (x, y) {\n var delta;\n if (!x || !y)\n return [x, y];\n y /= pi;\n var x1 = sign(x) * x / halfPi, D = (x1 * x1 - 1 + 4 * y * y) / abs(x1), D2 = D * D, B = 2 * y, i = 50;\n do {\n var B2 = B * B, C = (8 * B - B2 * (B2 + 2) - 5) / (2 * B2 * (B - 1)), C_ = (3 * B - B2 * B - 10) / (2 * B2 * B), C2 = C * C, BC = B * C, B_C = B + C, B_C2 = B_C * B_C, B_3C = B + 3 * C, F = B_C2 * (B2 + C2 * D2 - 1) + (1 - B2) * (B2 * (B_3C * B_3C + 4 * C2) + C2 * (12 * BC + 4 * C2)), F_ = -2 * B_C * (4 * BC * C2 + (1 - 4 * B2 + 3 * B2 * B2) * (1 + C_) + C2 * (-6 + 14 * B2 - D2 + (-8 + 8 * B2 - 2 * D2) * C_) + BC * (-8 + 12 * B2 + (-10 + 10 * B2 - D2) * C_)), sqrtF = sqrt(F), f = D * (B_C2 + C2 - 1) + 2 * sqrtF - x1 * (4 * B_C2 + D2), f_ = D * (2 * C * C_ + 2 * B_C * (1 + C_)) + F_ / sqrtF - 8 * B_C * (D * (-1 + C2 + B_C2) + 2 * sqrtF) * (1 + C_) / (D2 + 4 * B_C2);\n B -= delta = f / f_;\n } while (delta > epsilon && --i > 0);\n return [\n sign(x) * (sqrt(D * D + 4) + D) * pi / 4,\n halfPi * B\n ];\n };\n var vanDerGrinten4 = function () {\n return d3Geo.geoProjection(vanDerGrinten4Raw)\n .scale(127.16);\n };\n var A = 4 * pi + 3 * sqrt(3);\n var B = 2 * sqrt(2 * pi * sqrt(3) / A);\n var wagner4Raw = mollweideBromleyRaw(B * sqrt(3) / pi, B, A / 6);\n var wagner4 = function () {\n return d3Geo.geoProjection(wagner4Raw)\n .scale(176.84);\n };\n function wagner6Raw(lambda, phi) {\n return [lambda * sqrt(1 - 3 * phi * phi / (pi * pi)), phi];\n }\n wagner6Raw.invert = function (x, y) {\n return [x / sqrt(1 - 3 * y * y / (pi * pi)), y];\n };\n var wagner6 = function () {\n return d3Geo.geoProjection(wagner6Raw)\n .scale(152.63);\n };\n function wagner7Raw(lambda, phi) {\n var s = 0.90631 * sin(phi), c0 = sqrt(1 - s * s), c1 = sqrt(2 / (1 + c0 * cos(lambda /= 3)));\n return [\n 2.66723 * c0 * c1 * sin(lambda),\n 1.24104 * s * c1\n ];\n }\n wagner7Raw.invert = function (x, y) {\n var t1 = x / 2.66723, t2 = y / 1.24104, p = sqrt(t1 * t1 + t2 * t2), c = 2 * asin(p / 2);\n return [\n 3 * atan2(x * tan(c), 2.66723 * p),\n p && asin(y * sin(c) / (1.24104 * 0.90631 * p))\n ];\n };\n var wagner7 = function () {\n return d3Geo.geoProjection(wagner7Raw)\n .scale(172.632);\n };\n function wiechelRaw(lambda, phi) {\n var cosPhi = cos(phi), sinPhi = cos(lambda) * cosPhi, sin1_Phi = 1 - sinPhi, cosLambda = cos(lambda = atan2(sin(lambda) * cosPhi, -sin(phi))), sinLambda = sin(lambda);\n cosPhi = sqrt(1 - sinPhi * sinPhi);\n return [\n sinLambda * cosPhi - cosLambda * sin1_Phi,\n -cosLambda * cosPhi - sinLambda * sin1_Phi\n ];\n }\n wiechelRaw.invert = function (x, y) {\n var w = (x * x + y * y) / -2, k = sqrt(-w * (2 + w)), b = y * w + x * k, a = x * w - y * k, D = sqrt(a * a + b * b);\n return [\n atan2(k * b, D * (1 + w)),\n D ? -asin(k * a / D) : 0\n ];\n };\n var wiechel = function () {\n return d3Geo.geoProjection(wiechelRaw)\n .rotate([0, -90, 45])\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n };\n function winkel3Raw(lambda, phi) {\n var coordinates = aitoffRaw(lambda, phi);\n return [\n (coordinates[0] + lambda / halfPi) / 2,\n (coordinates[1] + phi) / 2\n ];\n }\n winkel3Raw.invert = function (x, y) {\n var lambda = x, phi = y, i = 25;\n do {\n var cosphi = cos(phi), sinphi = sin(phi), sin_2phi = sin(2 * phi), sin2phi = sinphi * sinphi, cos2phi = cosphi * cosphi, sinlambda = sin(lambda), coslambda_2 = cos(lambda / 2), sinlambda_2 = sin(lambda / 2), sin2lambda_2 = sinlambda_2 * sinlambda_2, C = 1 - cos2phi * coslambda_2 * coslambda_2, E = C ? acos(cosphi * coslambda_2) * sqrt(F = 1 / C) : F = 0, F, fx = 0.5 * (2 * E * cosphi * sinlambda_2 + lambda / halfPi) - x, fy = 0.5 * (E * sinphi + phi) - y, dxdlambda = 0.5 * F * (cos2phi * sin2lambda_2 + E * cosphi * coslambda_2 * sin2phi) + 0.5 / halfPi, dxdphi = F * (sinlambda * sin_2phi / 4 - E * sinphi * sinlambda_2), dydlambda = 0.125 * F * (sin_2phi * sinlambda_2 - E * sinphi * cos2phi * sinlambda), dydphi = 0.5 * F * (sin2phi * coslambda_2 + E * sin2lambda_2 * cosphi) + 0.5, denominator = dxdphi * dydlambda - dydphi * dxdlambda, dlambda = (fy * dxdphi - fx * dydphi) / denominator, dphi = (fx * dydlambda - fy * dxdlambda) / denominator;\n lambda -= dlambda, phi -= dphi;\n } while ((abs(dlambda) > epsilon || abs(dphi) > epsilon) && --i > 0);\n return [lambda, phi];\n };\n var winkel3 = function () {\n return d3Geo.geoProjection(winkel3Raw)\n .scale(158.837);\n };\n exports.geoAiry = airy;\n exports.geoAiryRaw = airyRaw;\n exports.geoAitoff = aitoff;\n exports.geoAitoffRaw = aitoffRaw;\n exports.geoArmadillo = armadillo;\n exports.geoArmadilloRaw = armadilloRaw;\n exports.geoAugust = august;\n exports.geoAugustRaw = augustRaw;\n exports.geoBaker = baker;\n exports.geoBakerRaw = bakerRaw;\n exports.geoBerghaus = berghaus;\n exports.geoBerghausRaw = berghausRaw;\n exports.geoBoggs = boggs;\n exports.geoBoggsRaw = boggsRaw;\n exports.geoBonne = bonne;\n exports.geoBonneRaw = bonneRaw;\n exports.geoBottomley = bottomley;\n exports.geoBottomleyRaw = bottomleyRaw;\n exports.geoBromley = bromley;\n exports.geoBromleyRaw = bromleyRaw;\n exports.geoChamberlin = chamberlin;\n exports.geoChamberlinRaw = chamberlinRaw;\n exports.geoChamberlinAfrica = chamberlinAfrica;\n exports.geoCollignon = collignon;\n exports.geoCollignonRaw = collignonRaw;\n exports.geoCraig = craig;\n exports.geoCraigRaw = craigRaw;\n exports.geoCraster = craster;\n exports.geoCrasterRaw = crasterRaw;\n exports.geoCylindricalEqualArea = cylindricalEqualArea;\n exports.geoCylindricalEqualAreaRaw = cylindricalEqualAreaRaw;\n exports.geoCylindricalStereographic = cylindricalStereographic;\n exports.geoCylindricalStereographicRaw = cylindricalStereographicRaw;\n exports.geoEckert1 = eckert1;\n exports.geoEckert1Raw = eckert1Raw;\n exports.geoEckert2 = eckert2;\n exports.geoEckert2Raw = eckert2Raw;\n exports.geoEckert3 = eckert3;\n exports.geoEckert3Raw = eckert3Raw;\n exports.geoEckert4 = eckert4;\n exports.geoEckert4Raw = eckert4Raw;\n exports.geoEckert5 = eckert5;\n exports.geoEckert5Raw = eckert5Raw;\n exports.geoEckert6 = eckert6;\n exports.geoEckert6Raw = eckert6Raw;\n exports.geoEisenlohr = eisenlohr;\n exports.geoEisenlohrRaw = eisenlohrRaw;\n exports.geoFahey = fahey;\n exports.geoFaheyRaw = faheyRaw;\n exports.geoFoucaut = foucaut;\n exports.geoFoucautRaw = foucautRaw;\n exports.geoGilbert = gilbert;\n exports.geoGingery = gingery;\n exports.geoGingeryRaw = gingeryRaw;\n exports.geoGinzburg4 = ginzburg4;\n exports.geoGinzburg4Raw = ginzburg4Raw;\n exports.geoGinzburg5 = ginzburg5;\n exports.geoGinzburg5Raw = ginzburg5Raw;\n exports.geoGinzburg6 = ginzburg6;\n exports.geoGinzburg6Raw = ginzburg6Raw;\n exports.geoGinzburg8 = ginzburg8;\n exports.geoGinzburg8Raw = ginzburg8Raw;\n exports.geoGinzburg9 = ginzburg9;\n exports.geoGinzburg9Raw = ginzburg9Raw;\n exports.geoGringorten = gringorten;\n exports.geoGringortenRaw = gringortenRaw;\n exports.geoGuyou = guyou;\n exports.geoGuyouRaw = guyouRaw;\n exports.geoHammer = hammer;\n exports.geoHammerRaw = hammerRaw;\n exports.geoHammerRetroazimuthal = hammerRetroazimuthal;\n exports.geoHammerRetroazimuthalRaw = hammerRetroazimuthalRaw;\n exports.geoHealpix = healpix;\n exports.geoHealpixRaw = healpixRaw;\n exports.geoHill = hill;\n exports.geoHillRaw = hillRaw;\n exports.geoHomolosine = homolosine;\n exports.geoHomolosineRaw = homolosineRaw;\n exports.geoInterrupt = interrupt;\n exports.geoInterruptedBoggs = boggs$1;\n exports.geoInterruptedHomolosine = homolosine$1;\n exports.geoInterruptedMollweide = mollweide$1;\n exports.geoInterruptedMollweideHemispheres = mollweideHemispheres;\n exports.geoInterruptedSinuMollweide = sinuMollweide$1;\n exports.geoInterruptedSinusoidal = sinusoidal$1;\n exports.geoKavrayskiy7 = kavrayskiy7;\n exports.geoKavrayskiy7Raw = kavrayskiy7Raw;\n exports.geoLagrange = lagrange;\n exports.geoLagrangeRaw = lagrangeRaw;\n exports.geoLarrivee = larrivee;\n exports.geoLarriveeRaw = larriveeRaw;\n exports.geoLaskowski = laskowski;\n exports.geoLaskowskiRaw = laskowskiRaw;\n exports.geoLittrow = littrow;\n exports.geoLittrowRaw = littrowRaw;\n exports.geoLoximuthal = loximuthal;\n exports.geoLoximuthalRaw = loximuthalRaw;\n exports.geoMiller = miller;\n exports.geoMillerRaw = millerRaw;\n exports.geoModifiedStereographic = modifiedStereographic;\n exports.geoModifiedStereographicRaw = modifiedStereographicRaw;\n exports.geoModifiedStereographicAlaska = modifiedStereographicAlaska;\n exports.geoModifiedStereographicGs48 = modifiedStereographicGs48;\n exports.geoModifiedStereographicGs50 = modifiedStereographicGs50;\n exports.geoModifiedStereographicMiller = modifiedStereographicMiller;\n exports.geoModifiedStereographicLee = modifiedStereographicLee;\n exports.geoMollweide = mollweide;\n exports.geoMollweideRaw = mollweideRaw;\n exports.geoMtFlatPolarParabolic = mtFlatPolarParabolic;\n exports.geoMtFlatPolarParabolicRaw = mtFlatPolarParabolicRaw;\n exports.geoMtFlatPolarQuartic = mtFlatPolarQuartic;\n exports.geoMtFlatPolarQuarticRaw = mtFlatPolarQuarticRaw;\n exports.geoMtFlatPolarSinusoidal = mtFlatPolarSinusoidal;\n exports.geoMtFlatPolarSinusoidalRaw = mtFlatPolarSinusoidalRaw;\n exports.geoNaturalEarth = naturalEarth;\n exports.geoNaturalEarthRaw = naturalEarthRaw;\n exports.geoNaturalEarth2 = naturalEarth2;\n exports.geoNaturalEarth2Raw = naturalEarth2Raw;\n exports.geoNellHammer = nellHammer;\n exports.geoNellHammerRaw = nellHammerRaw;\n exports.geoPatterson = patterson;\n exports.geoPattersonRaw = pattersonRaw;\n exports.geoPolyconic = polyconic;\n exports.geoPolyconicRaw = polyconicRaw;\n exports.geoPolyhedral = polyhedral;\n exports.geoPolyhedralButterfly = butterfly;\n exports.geoPolyhedralCollignon = collignon$1;\n exports.geoPolyhedralWaterman = waterman;\n exports.geoProject = index;\n exports.geoGringortenQuincuncial = gringorten$1;\n exports.geoPeirceQuincuncial = peirce;\n exports.geoPierceQuincuncial = peirce;\n exports.geoQuantize = quantize;\n exports.geoQuincuncial = quincuncial;\n exports.geoRectangularPolyconic = rectangularPolyconic;\n exports.geoRectangularPolyconicRaw = rectangularPolyconicRaw;\n exports.geoRobinson = robinson;\n exports.geoRobinsonRaw = robinsonRaw;\n exports.geoSatellite = satellite;\n exports.geoSatelliteRaw = satelliteRaw;\n exports.geoSinuMollweide = sinuMollweide;\n exports.geoSinuMollweideRaw = sinuMollweideRaw;\n exports.geoSinusoidal = sinusoidal;\n exports.geoSinusoidalRaw = sinusoidalRaw;\n exports.geoStitch = stitch;\n exports.geoTimes = times;\n exports.geoTimesRaw = timesRaw;\n exports.geoTwoPointAzimuthal = twoPointAzimuthal;\n exports.geoTwoPointAzimuthalRaw = twoPointAzimuthalRaw;\n exports.geoTwoPointAzimuthalUsa = twoPointAzimuthalUsa;\n exports.geoTwoPointEquidistant = twoPointEquidistant;\n exports.geoTwoPointEquidistantRaw = twoPointEquidistantRaw;\n exports.geoTwoPointEquidistantUsa = twoPointEquidistantUsa;\n exports.geoVanDerGrinten = vanDerGrinten;\n exports.geoVanDerGrintenRaw = vanDerGrintenRaw;\n exports.geoVanDerGrinten2 = vanDerGrinten2;\n exports.geoVanDerGrinten2Raw = vanDerGrinten2Raw;\n exports.geoVanDerGrinten3 = vanDerGrinten3;\n exports.geoVanDerGrinten3Raw = vanDerGrinten3Raw;\n exports.geoVanDerGrinten4 = vanDerGrinten4;\n exports.geoVanDerGrinten4Raw = vanDerGrinten4Raw;\n exports.geoWagner4 = wagner4;\n exports.geoWagner4Raw = wagner4Raw;\n exports.geoWagner6 = wagner6;\n exports.geoWagner6Raw = wagner6Raw;\n exports.geoWagner7 = wagner7;\n exports.geoWagner7Raw = wagner7Raw;\n exports.geoWiechel = wiechel;\n exports.geoWiechelRaw = wiechelRaw;\n exports.geoWinkel3 = winkel3;\n exports.geoWinkel3Raw = winkel3Raw;\n Object.defineProperty(exports, '__esModule', { value: true });\n})));\n","// https://d3js.org/d3-geo/ v1.11.9 Copyright 2019 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) :\n (global = global || self, factory(global.d3 = global.d3 || {}, global.d3));\n}(this, function (exports, d3Array) {\n 'use strict';\n // Adds floating point numbers with twice the normal precision.\n // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n // 305363 (1997).\n // Code adapted from GeographicLib by Charles F. F. Karney,\n // http://geographiclib.sourceforge.net/\n function adder() {\n return new Adder;\n }\n function Adder() {\n this.reset();\n }\n Adder.prototype = {\n constructor: Adder,\n reset: function () {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function (y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s)\n this.t += temp.t;\n else\n this.s = temp.t;\n },\n valueOf: function () {\n return this.s;\n }\n };\n var temp = new Adder;\n function add(adder, a, b) {\n var x = adder.s = a + b, bv = x - a, av = x - bv;\n adder.t = (a - av) + (b - bv);\n }\n var epsilon = 1e-6;\n var epsilon2 = 1e-12;\n var pi = Math.PI;\n var halfPi = pi / 2;\n var quarterPi = pi / 4;\n var tau = pi * 2;\n var degrees = 180 / pi;\n var radians = pi / 180;\n var abs = Math.abs;\n var atan = Math.atan;\n var atan2 = Math.atan2;\n var cos = Math.cos;\n var ceil = Math.ceil;\n var exp = Math.exp;\n var log = Math.log;\n var pow = Math.pow;\n var sin = Math.sin;\n var sign = Math.sign || function (x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\n var sqrt = Math.sqrt;\n var tan = Math.tan;\n function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n }\n function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n }\n function haversin(x) {\n return (x = sin(x / 2)) * x;\n }\n function noop() { }\n function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n }\n var streamObjectType = {\n Feature: function (object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function (object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n)\n streamGeometry(features[i].geometry, stream);\n }\n };\n var streamGeometryType = {\n Sphere: function (object, stream) {\n stream.sphere();\n },\n Point: function (object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function (object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function (object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function (object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n streamLine(coordinates[i], stream, 0);\n },\n Polygon: function (object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function (object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function (object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n)\n streamGeometry(geometries[i], stream);\n }\n };\n function streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n)\n coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n }\n function streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n)\n streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n }\n function geoStream(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n }\n else {\n streamGeometry(object, stream);\n }\n }\n var areaRingSum = adder();\n var areaSum = adder(), lambda00, phi00, lambda0, cosPhi0, sinPhi0;\n var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function () {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function () {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function () {\n areaSum.add(tau);\n }\n };\n function areaRingStart() {\n areaStream.point = areaPointFirst;\n }\n function areaRingEnd() {\n areaPoint(lambda00, phi00);\n }\n function areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n }\n function areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnolis\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0, sdLambda = dLambda >= 0 ? 1 : -1, adLambda = sdLambda * dLambda, cosPhi = cos(phi), sinPhi = sin(phi), k = sinPhi0 * sinPhi, u = cosPhi0 * cosPhi + k * cos(adLambda), v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n }\n function area(object) {\n areaSum.reset();\n geoStream(object, areaStream);\n return areaSum * 2;\n }\n function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n }\n function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n }\n function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n function cartesianCross(a, b) {\n 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]];\n }\n // TODO return a\n function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n }\n function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n }\n // TODO return d\n function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n }\n var lambda0$1, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00$1, phi00$1, // first point\n p0, // previous 3D point\n deltaSum = adder(), ranges, range;\n var boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function () {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function () {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0)\n lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon)\n phi1 = 90;\n else if (deltaSum < -epsilon)\n phi0 = -90;\n range[0] = lambda0$1, range[1] = lambda1;\n },\n sphere: function () {\n lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n };\n function boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n if (phi < phi0)\n phi0 = phi;\n if (phi > phi1)\n phi1 = phi;\n }\n function linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p), equatorial = [normal[1], -normal[0], 0], inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2, sign = delta > 0 ? 1 : -1, lambdai = inflection[0] * degrees * sign, phii, antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1)\n phi1 = phii;\n }\n else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0)\n phi0 = phii;\n }\n else {\n if (phi < phi0)\n phi0 = phi;\n if (phi > phi1)\n phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1))\n lambda1 = lambda;\n }\n else {\n if (angle(lambda, lambda1) > angle(lambda0$1, lambda1))\n lambda0$1 = lambda;\n }\n }\n else {\n if (lambda1 >= lambda0$1) {\n if (lambda < lambda0$1)\n lambda0$1 = lambda;\n if (lambda > lambda1)\n lambda1 = lambda;\n }\n else {\n if (lambda > lambda2) {\n if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1))\n lambda1 = lambda;\n }\n else {\n if (angle(lambda, lambda1) > angle(lambda0$1, lambda1))\n lambda0$1 = lambda;\n }\n }\n }\n }\n else {\n ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0)\n phi0 = phi;\n if (phi > phi1)\n phi1 = phi;\n p0 = p, lambda2 = lambda;\n }\n function boundsLineStart() {\n boundsStream.point = linePoint;\n }\n function boundsLineEnd() {\n range[0] = lambda0$1, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n }\n function boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n }\n else {\n lambda00$1 = lambda, phi00$1 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n }\n function boundsRingStart() {\n areaStream.lineStart();\n }\n function boundsRingEnd() {\n boundsRingPoint(lambda00$1, phi00$1);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon)\n lambda0$1 = -(lambda1 = 180);\n range[0] = lambda0$1, range[1] = lambda1;\n p0 = null;\n }\n // Finds the left-right distance between two longitudes.\n // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n // the distance between ±180° to be 360°.\n function angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n }\n function rangeCompare(a, b) {\n return a[0] - b[0];\n }\n function rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n }\n function bounds(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n ranges = [];\n geoStream(feature, boundsStream);\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1]))\n a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1]))\n a[0] = b[0];\n }\n else {\n merged.push(a = b);\n }\n }\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax)\n deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n }\n }\n ranges = range = null;\n return lambda0$1 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0$1, phi0], [lambda1, phi1]];\n }\n var W0, W1, X0, Y0, Z0, X1, Y1, Z1, X2, Y2, Z2, lambda00$2, phi00$2, // first point\n x0, y0, z0; // previous point\n var centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function () {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function () {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n };\n // Arithmetic mean of Cartesian vectors.\n function centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n }\n function centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n }\n function centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n }\n function centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n }\n function centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi), x = cosPhi * cos(lambda), y = cosPhi * sin(lambda), z = sin(phi), w = atan2(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);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n }\n function centroidLineEnd() {\n centroidStream.point = centroidPoint;\n }\n // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n // J. Applied Mechanics 42, 239 (1975).\n function centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n }\n function centroidRingEnd() {\n centroidRingPoint(lambda00$2, phi00$2);\n centroidStream.point = centroidPoint;\n }\n function centroidRingPointFirst(lambda, phi) {\n lambda00$2 = lambda, phi00$2 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n }\n function centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi), x = cosPhi * cos(lambda), y = cosPhi * sin(lambda), z = sin(phi), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = sqrt(cx * cx + cy * cy + cz * cz), w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n }\n function centroid(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n geoStream(object, centroidStream);\n var x = X2, y = Y2, z = Z2, m = x * x + y * y + z * z;\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon)\n x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2)\n return [NaN, NaN];\n }\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n }\n function constant(x) {\n return function () {\n return x;\n };\n }\n function compose(a, b) {\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n if (a.invert && b.invert)\n compose.invert = function (x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n return compose;\n }\n function rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n }\n rotationIdentity.invert = rotationIdentity;\n function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n }\n function forwardRotationLambda(deltaLambda) {\n return function (lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n }\n function rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n }\n function rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi), sinDeltaPhi = sin(deltaPhi), cosDeltaGamma = cos(deltaGamma), sinDeltaGamma = sin(deltaGamma);\n function rotation(lambda, phi) {\n var cosPhi = cos(phi), x = cos(lambda) * cosPhi, y = sin(lambda) * cosPhi, z = sin(phi), k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n rotation.invert = function (lambda, phi) {\n var cosPhi = cos(phi), x = cos(lambda) * cosPhi, y = sin(lambda) * cosPhi, z = sin(phi), k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n return rotation;\n }\n function rotation(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n forward.invert = function (coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n return forward;\n }\n // Generates a circle centered at [0°, 0°], with a given radius and precision.\n function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta)\n return;\n var cosRadius = cos(radius), sinRadius = sin(radius), step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n }\n else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1)\n t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n }\n // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\n function circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n }\n function circle() {\n var center = constant([0, 0]), radius = constant(90), precision = constant(6), ring, rotate, stream = { point: point };\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n function circle() {\n var c = center.apply(this, arguments), r = radius.apply(this, arguments) * radians, p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = { type: \"Polygon\", coordinates: [ring] };\n ring = rotate = null;\n return c;\n }\n circle.center = function (_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n circle.radius = function (_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n circle.precision = function (_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n return circle;\n }\n function clipBuffer() {\n var lines = [], line;\n return {\n point: function (x, y) {\n line.push([x, y]);\n },\n lineStart: function () {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function () {\n if (lines.length > 1)\n lines.push(lines.pop().concat(lines.shift()));\n },\n result: function () {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n }\n function pointEqual(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n }\n function Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n }\n // A generalized polygon clipping algorithm: given a polygon that has been cut\n // into its visible line segments, and rejoins the segments by interpolating\n // along the clip edge.\n function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [], clip = [], i, n;\n segments.forEach(function (segment) {\n if ((n = segment.length - 1) <= 0)\n return;\n var n, p0 = segment[0], p1 = segment[n], x;\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i)\n stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n if (!subject.length)\n return;\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n var start = subject[0], points, point;\n while (1) {\n // Find first unvisited intersection.\n var current = start, isSubject = true;\n while (current.v)\n if ((current = current.n) === start)\n return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i)\n stream.point((point = points[i])[0], point[1]);\n }\n else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n }\n else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i)\n stream.point((point = points[i])[0], point[1]);\n }\n else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n }\n function link(array) {\n if (!(n = array.length))\n return;\n var n, i = 0, a = array[0], b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n }\n var sum = adder();\n function longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n }\n function polygonContains(polygon, point) {\n var lambda = longitude(point), phi = point[1], sinPhi = sin(phi), normal = [sin(lambda), -cos(lambda), 0], angle = 0, winding = 0;\n sum.reset();\n if (sinPhi === 1)\n phi = halfPi + epsilon;\n else if (sinPhi === -1)\n phi = -halfPi - epsilon;\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length))\n continue;\n var ring, m, point0 = ring[m - 1], lambda0 = longitude(point0), phi0 = point0[1] / 2 + quarterPi, sinPhi0 = sin(phi0), cosPhi0 = cos(phi0);\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j], lambda1 = longitude(point1), phi1 = point1[1] / 2 + quarterPi, sinPhi1 = sin(phi1), cosPhi1 = cos(phi1), delta = lambda1 - lambda0, sign = delta >= 0 ? 1 : -1, absDelta = sign * delta, antimeridian = absDelta > pi, k = sinPhi0 * sinPhi1;\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n // Are the longitudes either side of the points meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n }\n function clip(pointVisible, clipLine, interpolate, start) {\n return function (sink) {\n var line = clipLine(sink), ringBuffer = clipBuffer(), ringSink = clipLine(ringBuffer), polygonStarted = false, polygon, segments, ring;\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function () {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function () {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = d3Array.merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted)\n sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n }\n else if (startInside) {\n if (!polygonStarted)\n sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted)\n sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function () {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n function point(lambda, phi) {\n if (pointVisible(lambda, phi))\n sink.point(lambda, phi);\n }\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n var clean = ringSink.clean(), ringSegments = ringBuffer.result(), i, n = ringSegments.length, m, segment, point;\n ring.pop();\n polygon.push(ring);\n ring = null;\n if (!n)\n return;\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted)\n sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i)\n sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2)\n ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n segments.push(ringSegments.filter(validSegment));\n }\n return clip;\n };\n }\n function validSegment(segment) {\n return segment.length > 1;\n }\n // Intersections are sorted along the clip edge. For both antimeridian cutting\n // and circle clipping, the same comparison is used.\n function compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n }\n var clipAntimeridian = clip(function () { return true; }, clipAntimeridianLine, clipAntimeridianInterpolate, [-pi, -halfPi]);\n // Takes a line and cuts into visible segments. Return values: 0 - there were\n // intersections or the line was empty; 1 - no intersections; 2 - there were\n // intersections, and the first and last segments should be rejoined.\n function clipAntimeridianLine(stream) {\n var lambda0 = NaN, phi0 = NaN, sign0 = NaN, clean; // no intersections\n return {\n lineStart: function () {\n stream.lineStart();\n clean = 1;\n },\n point: function (lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi, delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n }\n else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon)\n lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon)\n lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function () {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function () {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n }\n function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0, cosPhi1, sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n }\n function clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n }\n else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n }\n else {\n stream.point(to[0], to[1]);\n }\n }\n function clipCircle(radius) {\n var cr = cos(radius), delta = 6 * radians, smallRadius = cr > 0, notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function () {\n v00 = v0 = false;\n clean = 1;\n },\n point: function (lambda, phi) {\n var point1 = [lambda, phi], point2, v = visible(lambda, phi), c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v))\n stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n }\n else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n }\n else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n }\n else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function () {\n if (v0)\n stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function () {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a), pb = cartesian(b);\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb), n2n2 = cartesianDot(n2, n2), n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n // Two polar points.\n if (!determinant)\n return !two && a;\n var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = cartesianCross(n1, n2), A = cartesianScale(n1, c1), B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n // Solve |p(t)|^2 = 1.\n var u = n1xn2, w = cartesianDot(A, u), uu = cartesianDot(u, u), t2 = w * w - uu * (cartesianDot(A, A) - 1);\n if (t2 < 0)\n return;\n var t = sqrt(t2), q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n if (!two)\n return q;\n // Two intersection points.\n var lambda0 = a[0], lambda1 = b[0], phi0 = a[1], phi1 = b[1], z;\n if (lambda1 < lambda0)\n z = lambda0, lambda0 = lambda1, lambda1 = z;\n var delta = lambda1 - lambda0, polar = abs(delta - pi) < epsilon, meridian = polar || delta < epsilon;\n if (!polar && phi1 < phi0)\n z = phi0, phi0 = phi1, phi1 = z;\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius, code = 0;\n if (lambda < -r)\n code |= 1; // left\n else if (lambda > r)\n code |= 2; // right\n if (phi < -r)\n code |= 4; // below\n else if (phi > r)\n code |= 8; // above\n return code;\n }\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n }\n function clipLine(a, b, x0, y0, x1, y1) {\n var ax = a[0], ay = a[1], bx = b[0], by = b[1], t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n r = x0 - ax;\n if (!dx && r > 0)\n return;\n r /= dx;\n if (dx < 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n else if (dx > 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n r = x1 - ax;\n if (!dx && r < 0)\n return;\n r /= dx;\n if (dx < 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n else if (dx > 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n r = y0 - ay;\n if (!dy && r > 0)\n return;\n r /= dy;\n if (dy < 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n else if (dy > 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n r = y1 - ay;\n if (!dy && r < 0)\n return;\n r /= dy;\n if (dy < 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n else if (dy > 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n if (t0 > 0)\n a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1)\n b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n }\n var clipMax = 1e9, clipMin = -clipMax;\n // TODO Use d3-polygons polygonContains here for the ring check?\n // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n function clipRectangle(x0, y0, x1, y1) {\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do\n stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n }\n else {\n stream.point(to[0], to[1]);\n }\n }\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n function comparePoint(a, b) {\n var ca = corner(a, 1), cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n return function (stream) {\n var activeStream = stream, bufferStream = clipBuffer(), segments, polygon, ring, x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first, clean;\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n function point(x, y) {\n if (visible(x, y))\n activeStream.point(x, y);\n }\n function polygonInside() {\n var winding = 0;\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) {\n if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0))\n ++winding;\n }\n else {\n if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0))\n --winding;\n }\n }\n }\n return winding;\n }\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n function polygonEnd() {\n var startInside = polygonInside(), cleanInside = clean && startInside, visible = (segments = d3Array.merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon)\n polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_)\n bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_)\n activeStream.lineEnd();\n }\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon)\n ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n }\n else {\n if (v && v_)\n activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v)\n activeStream.lineEnd();\n clean = false;\n }\n else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n return clipStream;\n };\n }\n function extent() {\n var x0 = 0, y0 = 0, x1 = 960, y1 = 500, cache, cacheStream, clip;\n return clip = {\n stream: function (stream) {\n return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function (_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n }\n var lengthSum = adder(), lambda0$2, sinPhi0$1, cosPhi0$1;\n var lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n };\n function lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n }\n function lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n }\n function lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0$2 = lambda, sinPhi0$1 = sin(phi), cosPhi0$1 = cos(phi);\n lengthStream.point = lengthPoint;\n }\n function lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi), cosPhi = cos(phi), delta = abs(lambda - lambda0$2), cosDelta = cos(delta), sinDelta = sin(delta), x = cosPhi * sinDelta, y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta, z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;\n }\n function length(object) {\n lengthSum.reset();\n geoStream(object, lengthStream);\n return +lengthSum;\n }\n var coordinates = [null, null], object = { type: \"LineString\", coordinates: coordinates };\n function distance(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length(object);\n }\n var containsObjectType = {\n Feature: function (object, point) {\n return containsGeometry(object.geometry, point);\n },\n FeatureCollection: function (object, point) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n)\n if (containsGeometry(features[i].geometry, point))\n return true;\n return false;\n }\n };\n var containsGeometryType = {\n Sphere: function () {\n return true;\n },\n Point: function (object, point) {\n return containsPoint(object.coordinates, point);\n },\n MultiPoint: function (object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n if (containsPoint(coordinates[i], point))\n return true;\n return false;\n },\n LineString: function (object, point) {\n return containsLine(object.coordinates, point);\n },\n MultiLineString: function (object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n if (containsLine(coordinates[i], point))\n return true;\n return false;\n },\n Polygon: function (object, point) {\n return containsPolygon(object.coordinates, point);\n },\n MultiPolygon: function (object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n if (containsPolygon(coordinates[i], point))\n return true;\n return false;\n },\n GeometryCollection: function (object, point) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n)\n if (containsGeometry(geometries[i], point))\n return true;\n return false;\n }\n };\n function containsGeometry(geometry, point) {\n return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n ? containsGeometryType[geometry.type](geometry, point)\n : false;\n }\n function containsPoint(coordinates, point) {\n return distance(coordinates, point) === 0;\n }\n function containsLine(coordinates, point) {\n var ao, bo, ab;\n for (var i = 0, n = coordinates.length; i < n; i++) {\n bo = distance(coordinates[i], point);\n if (bo === 0)\n return true;\n if (i > 0) {\n ab = distance(coordinates[i], coordinates[i - 1]);\n if (ab > 0 &&\n ao <= ab &&\n bo <= ab &&\n (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab)\n return true;\n }\n ao = bo;\n }\n return false;\n }\n function containsPolygon(coordinates, point) {\n return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n }\n function ringRadians(ring) {\n return ring = ring.map(pointRadians), ring.pop(), ring;\n }\n function pointRadians(point) {\n return [point[0] * radians, point[1] * radians];\n }\n function contains(object, point) {\n return (object && containsObjectType.hasOwnProperty(object.type)\n ? containsObjectType[object.type]\n : containsGeometry)(object, point);\n }\n function graticuleX(y0, y1, dy) {\n var y = d3Array.range(y0, y1 - epsilon, dy).concat(y1);\n return function (x) { return y.map(function (y) { return [x, y]; }); };\n }\n function graticuleY(x0, x1, dx) {\n var x = d3Array.range(x0, x1 - epsilon, dx).concat(x1);\n return function (y) { return x.map(function (x) { return [x, y]; }); };\n }\n function graticule() {\n var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n function graticule() {\n return { type: \"MultiLineString\", coordinates: lines() };\n }\n function lines() {\n return d3Array.range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(d3Array.range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(d3Array.range(ceil(x0 / dx) * dx, x1, dx).filter(function (x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(d3Array.range(ceil(y0 / dy) * dy, y1, dy).filter(function (y) { return abs(y % DY) > epsilon; }).map(y));\n }\n graticule.lines = function () {\n return lines().map(function (coordinates) { return { type: \"LineString\", coordinates: coordinates }; });\n };\n graticule.outline = function () {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1))\n ]\n };\n };\n graticule.extent = function (_) {\n if (!arguments.length)\n return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n graticule.extentMajor = function (_) {\n if (!arguments.length)\n return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1)\n _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1)\n _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n graticule.extentMinor = function (_) {\n if (!arguments.length)\n return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1)\n _ = x0, x0 = x1, x1 = _;\n if (y0 > y1)\n _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n graticule.step = function (_) {\n if (!arguments.length)\n return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n graticule.stepMajor = function (_) {\n if (!arguments.length)\n return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n graticule.stepMinor = function (_) {\n if (!arguments.length)\n return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n graticule.precision = function (_) {\n if (!arguments.length)\n return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n }\n function graticule10() {\n return graticule()();\n }\n function interpolate(a, b) {\n var x0 = a[0] * radians, y0 = a[1] * radians, x1 = b[0] * radians, y1 = b[1] * radians, cy0 = cos(y0), sy0 = sin(y0), cy1 = cos(y1), sy1 = sin(y1), kx0 = cy0 * cos(x0), ky0 = cy0 * sin(x0), kx1 = cy1 * cos(x1), ky1 = cy1 * sin(x1), d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))), k = sin(d);\n var interpolate = d ? function (t) {\n var B = sin(t *= d) / k, A = sin(d - t) / k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n return [\n atan2(y, x) * degrees,\n atan2(z, sqrt(x * x + y * y)) * degrees\n ];\n } : function () {\n return [x0 * degrees, y0 * degrees];\n };\n interpolate.distance = d;\n return interpolate;\n }\n function identity(x) {\n return x;\n }\n var areaSum$1 = adder(), areaRingSum$1 = adder(), x00, y00, x0$1, y0$1;\n var areaStream$1 = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function () {\n areaStream$1.lineStart = areaRingStart$1;\n areaStream$1.lineEnd = areaRingEnd$1;\n },\n polygonEnd: function () {\n areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop;\n areaSum$1.add(abs(areaRingSum$1));\n areaRingSum$1.reset();\n },\n result: function () {\n var area = areaSum$1 / 2;\n areaSum$1.reset();\n return area;\n }\n };\n function areaRingStart$1() {\n areaStream$1.point = areaPointFirst$1;\n }\n function areaPointFirst$1(x, y) {\n areaStream$1.point = areaPoint$1;\n x00 = x0$1 = x, y00 = y0$1 = y;\n }\n function areaPoint$1(x, y) {\n areaRingSum$1.add(y0$1 * x - x0$1 * y);\n x0$1 = x, y0$1 = y;\n }\n function areaRingEnd$1() {\n areaPoint$1(x00, y00);\n }\n var x0$2 = Infinity, y0$2 = x0$2, x1 = -x0$2, y1 = x1;\n var boundsStream$1 = {\n point: boundsPoint$1,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function () {\n var bounds = [[x0$2, y0$2], [x1, y1]];\n x1 = y1 = -(y0$2 = x0$2 = Infinity);\n return bounds;\n }\n };\n function boundsPoint$1(x, y) {\n if (x < x0$2)\n x0$2 = x;\n if (x > x1)\n x1 = x;\n if (y < y0$2)\n y0$2 = y;\n if (y > y1)\n y1 = y;\n }\n // TODO Enforce positive area for exterior, negative area for interior?\n var X0$1 = 0, Y0$1 = 0, Z0$1 = 0, X1$1 = 0, Y1$1 = 0, Z1$1 = 0, X2$1 = 0, Y2$1 = 0, Z2$1 = 0, x00$1, y00$1, x0$3, y0$3;\n var centroidStream$1 = {\n point: centroidPoint$1,\n lineStart: centroidLineStart$1,\n lineEnd: centroidLineEnd$1,\n polygonStart: function () {\n centroidStream$1.lineStart = centroidRingStart$1;\n centroidStream$1.lineEnd = centroidRingEnd$1;\n },\n polygonEnd: function () {\n centroidStream$1.point = centroidPoint$1;\n centroidStream$1.lineStart = centroidLineStart$1;\n centroidStream$1.lineEnd = centroidLineEnd$1;\n },\n result: function () {\n var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]\n : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]\n : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]\n : [NaN, NaN];\n X0$1 = Y0$1 = Z0$1 =\n X1$1 = Y1$1 = Z1$1 =\n X2$1 = Y2$1 = Z2$1 = 0;\n return centroid;\n }\n };\n function centroidPoint$1(x, y) {\n X0$1 += x;\n Y0$1 += y;\n ++Z0$1;\n }\n function centroidLineStart$1() {\n centroidStream$1.point = centroidPointFirstLine;\n }\n function centroidPointFirstLine(x, y) {\n centroidStream$1.point = centroidPointLine;\n centroidPoint$1(x0$3 = x, y0$3 = y);\n }\n function centroidPointLine(x, y) {\n var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);\n X1$1 += z * (x0$3 + x) / 2;\n Y1$1 += z * (y0$3 + y) / 2;\n Z1$1 += z;\n centroidPoint$1(x0$3 = x, y0$3 = y);\n }\n function centroidLineEnd$1() {\n centroidStream$1.point = centroidPoint$1;\n }\n function centroidRingStart$1() {\n centroidStream$1.point = centroidPointFirstRing;\n }\n function centroidRingEnd$1() {\n centroidPointRing(x00$1, y00$1);\n }\n function centroidPointFirstRing(x, y) {\n centroidStream$1.point = centroidPointRing;\n centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);\n }\n function centroidPointRing(x, y) {\n var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);\n X1$1 += z * (x0$3 + x) / 2;\n Y1$1 += z * (y0$3 + y) / 2;\n Z1$1 += z;\n z = y0$3 * x - x0$3 * y;\n X2$1 += z * (x0$3 + x);\n Y2$1 += z * (y0$3 + y);\n Z2$1 += z * 3;\n centroidPoint$1(x0$3 = x, y0$3 = y);\n }\n function PathContext(context) {\n this._context = context;\n }\n PathContext.prototype = {\n _radius: 4.5,\n pointRadius: function (_) {\n return this._radius = _, this;\n },\n polygonStart: function () {\n this._line = 0;\n },\n polygonEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._point = 0;\n },\n lineEnd: function () {\n if (this._line === 0)\n this._context.closePath();\n this._point = NaN;\n },\n point: function (x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n };\n var lengthSum$1 = adder(), lengthRing, x00$2, y00$2, x0$4, y0$4;\n var lengthStream$1 = {\n point: noop,\n lineStart: function () {\n lengthStream$1.point = lengthPointFirst$1;\n },\n lineEnd: function () {\n if (lengthRing)\n lengthPoint$1(x00$2, y00$2);\n lengthStream$1.point = noop;\n },\n polygonStart: function () {\n lengthRing = true;\n },\n polygonEnd: function () {\n lengthRing = null;\n },\n result: function () {\n var length = +lengthSum$1;\n lengthSum$1.reset();\n return length;\n }\n };\n function lengthPointFirst$1(x, y) {\n lengthStream$1.point = lengthPoint$1;\n x00$2 = x0$4 = x, y00$2 = y0$4 = y;\n }\n function lengthPoint$1(x, y) {\n x0$4 -= x, y0$4 -= y;\n lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));\n x0$4 = x, y0$4 = y;\n }\n function PathString() {\n this._string = [];\n }\n PathString.prototype = {\n _radius: 4.5,\n _circle: circle$1(4.5),\n pointRadius: function (_) {\n if ((_ = +_) !== this._radius)\n this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function () {\n this._line = 0;\n },\n polygonEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._point = 0;\n },\n lineEnd: function () {\n if (this._line === 0)\n this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function (x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null)\n this._circle = circle$1(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function () {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n }\n else {\n return null;\n }\n }\n };\n function circle$1(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n }\n function index(projection, context) {\n var pointRadius = 4.5, projectionStream, contextStream;\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\")\n contextStream.pointRadius(+pointRadius.apply(this, arguments));\n geoStream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n path.area = function (object) {\n geoStream(object, projectionStream(areaStream$1));\n return areaStream$1.result();\n };\n path.measure = function (object) {\n geoStream(object, projectionStream(lengthStream$1));\n return lengthStream$1.result();\n };\n path.bounds = function (object) {\n geoStream(object, projectionStream(boundsStream$1));\n return boundsStream$1.result();\n };\n path.centroid = function (object) {\n geoStream(object, projectionStream(centroidStream$1));\n return centroidStream$1.result();\n };\n path.projection = function (_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n path.context = function (_) {\n if (!arguments.length)\n return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\")\n contextStream.pointRadius(pointRadius);\n return path;\n };\n path.pointRadius = function (_) {\n if (!arguments.length)\n return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n return path.projection(projection).context(context);\n }\n function transform(methods) {\n return {\n stream: transformer(methods)\n };\n }\n function transformer(methods) {\n return function (stream) {\n var s = new TransformStream;\n for (var key in methods)\n s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n }\n function TransformStream() { }\n TransformStream.prototype = {\n constructor: TransformStream,\n point: function (x, y) { this.stream.point(x, y); },\n sphere: function () { this.stream.sphere(); },\n lineStart: function () { this.stream.lineStart(); },\n lineEnd: function () { this.stream.lineEnd(); },\n polygonStart: function () { this.stream.polygonStart(); },\n polygonEnd: function () { this.stream.polygonEnd(); }\n };\n function fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null)\n projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream$1));\n fitBounds(boundsStream$1.result());\n if (clip != null)\n projection.clipExtent(clip);\n return projection;\n }\n function fitExtent(projection, extent, object) {\n return fit(projection, function (b) {\n var w = extent[1][0] - extent[0][0], h = extent[1][1] - extent[0][1], k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n }\n function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n }\n function fitWidth(projection, width, object) {\n return fit(projection, function (b) {\n var w = +width, k = w / (b[1][0] - b[0][0]), x = (w - k * (b[1][0] + b[0][0])) / 2, y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n }\n function fitHeight(projection, height, object) {\n return fit(projection, function (b) {\n var h = +height, k = h / (b[1][1] - b[0][1]), x = -k * b[0][0], y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n }\n var maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n function resample(project, delta2) {\n return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n }\n function resampleNone(project) {\n return transformer({\n point: function (x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n }\n function resample$1(project, delta2) {\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = sqrt(a * a + b * b + c * c), phi2 = asin(c /= m), lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a), p = project(lambda2, phi2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function (stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function () { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function () { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n return resampleStream;\n };\n }\n var transformRadians = transformer({\n point: function (x, y) {\n this.stream.point(x * radians, y * radians);\n }\n });\n function transformRotate(rotate) {\n return transformer({\n point: function (x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n }\n function scaleTranslate(k, dx, dy) {\n function transform(x, y) {\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function (x, y) {\n return [(x - dx) / k, (dy - y) / k];\n };\n return transform;\n }\n function scaleTranslateRotate(k, dx, dy, alpha) {\n var cosAlpha = cos(alpha), sinAlpha = sin(alpha), a = cosAlpha * k, b = sinAlpha * k, ai = cosAlpha / k, bi = sinAlpha / k, ci = (sinAlpha * dy - cosAlpha * dx) / k, fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function (x, y) {\n return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n };\n return transform;\n }\n function projection(project) {\n return projectionMutator(function () { return project; })();\n }\n function projectionMutator(projectAt) {\n var project, k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample, projectTransform, projectRotateTransform, cache, cacheStream;\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n projection.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n projection.preclip = function (_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n projection.postclip = function (_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipAngle = function (_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n projection.clipExtent = function (_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function (_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n projection.translate = function (_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n projection.center = function (_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n projection.rotate = function (_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n projection.angle = function (_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n projection.precision = function (_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n projection.fitExtent = function (extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function (size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function (width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function (height, object) {\n return fitHeight(projection, height, object);\n };\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)), transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n return function () {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n }\n function conicProjection(projectAt) {\n var phi0 = 0, phi1 = pi / 3, m = projectionMutator(projectAt), p = m(phi0, phi1);\n p.parallels = function (_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n return p;\n }\n function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n forward.invert = function (x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n return forward;\n }\n function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon)\n return cylindricalEqualAreaRaw(y0);\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n project.invert = function (x, y) {\n var r0y = r0 - y;\n return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n return project;\n }\n function conicEqualArea() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n }\n function albers() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n }\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n)\n streams[i].point(x, y); },\n sphere: function () { var i = -1; while (++i < n)\n streams[i].sphere(); },\n lineStart: function () { var i = -1; while (++i < n)\n streams[i].lineStart(); },\n lineEnd: function () { var i = -1; while (++i < n)\n streams[i].lineEnd(); },\n polygonStart: function () { var i = -1; while (++i < n)\n streams[i].polygonStart(); },\n polygonEnd: function () { var i = -1; while (++i < n)\n streams[i].polygonEnd(); }\n };\n }\n // A composite projection for the United States, configured by default for\n // 960×500. The projection also works quite well at 960×600 if you change the\n // scale to 1285 and adjust the translate accordingly. The set of standard\n // parallels for each region comes from USGS, which is published here:\n // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\n function albersUsa() {\n var cache, cacheStream, lower48 = albers(), lower48Point, alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = { point: function (x, y) { point = [x, y]; } };\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n albersUsa.invert = function (coordinates) {\n var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n albersUsa.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n albersUsa.precision = function (_) {\n if (!arguments.length)\n return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n albersUsa.scale = function (_) {\n if (!arguments.length)\n return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n albersUsa.translate = function (_) {\n if (!arguments.length)\n return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n albersUsa.fitExtent = function (extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n albersUsa.fitSize = function (size, object) {\n return fitSize(albersUsa, size, object);\n };\n albersUsa.fitWidth = function (width, object) {\n return fitWidth(albersUsa, width, object);\n };\n albersUsa.fitHeight = function (height, object) {\n return fitHeight(albersUsa, height, object);\n };\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n return albersUsa.scale(1070);\n }\n function azimuthalRaw(scale) {\n return function (x, y) {\n var cx = cos(x), cy = cos(y), k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n };\n }\n function azimuthalInvert(angle) {\n return function (x, y) {\n var z = sqrt(x * x + y * y), c = angle(z), sc = sin(c), cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n };\n }\n var azimuthalEqualAreaRaw = azimuthalRaw(function (cxcy) {\n return sqrt(2 / (1 + cxcy));\n });\n azimuthalEqualAreaRaw.invert = azimuthalInvert(function (z) {\n return 2 * asin(z / 2);\n });\n function azimuthalEqualArea() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n }\n var azimuthalEquidistantRaw = azimuthalRaw(function (c) {\n return (c = acos(c)) && c / sin(c);\n });\n azimuthalEquidistantRaw.invert = azimuthalInvert(function (z) {\n return z;\n });\n function azimuthalEquidistant() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n }\n function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n }\n mercatorRaw.invert = function (x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n };\n function mercator() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n }\n function mercatorProjection(project) {\n var m = projection(project), center = m.center, scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, x0 = null, y0, x1, y1; // clip extent\n m.scale = function (_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n m.translate = function (_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n m.center = function (_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n m.clipExtent = function (_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n function reclip() {\n var k = pi * scale(), t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n return reclip();\n }\n function tany(y) {\n return tan((halfPi + y) / 2);\n }\n function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0), n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)), f = cy0 * pow(tany(y0), n) / n;\n if (!n)\n return mercatorRaw;\n function project(x, y) {\n if (f > 0) {\n if (y < -halfPi + epsilon)\n y = -halfPi + epsilon;\n }\n else {\n if (y > halfPi - epsilon)\n y = halfPi - epsilon;\n }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n project.invert = function (x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n return project;\n }\n function conicConformal() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n }\n function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n }\n equirectangularRaw.invert = equirectangularRaw;\n function equirectangular() {\n return projection(equirectangularRaw)\n .scale(152.63);\n }\n function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0), n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0), g = cy0 / n + y0;\n if (abs(n) < epsilon)\n return equirectangularRaw;\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n project.invert = function (x, y) {\n var gy = g - y;\n return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n };\n return project;\n }\n function conicEquidistant() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n }\n var A1 = 1.340264, A2 = -0.081106, A3 = 0.000893, A4 = 0.003796, M = sqrt(3) / 2, iterations = 12;\n function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n }\n equalEarthRaw.invert = function (x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2)\n break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n };\n function equalEarth() {\n return projection(equalEarthRaw)\n .scale(177.158);\n }\n function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n }\n gnomonicRaw.invert = azimuthalInvert(atan);\n function gnomonic() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n }\n function scaleTranslate$1(kx, ky, tx, ty) {\n return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({\n point: function (x, y) {\n this.stream.point(x * kx + tx, y * ky + ty);\n }\n });\n }\n function identity$1() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity, // scale, translate and reflect\n x0 = null, y0, x1, y1, // clip extent\n postclip = identity, cache, cacheStream, projection;\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n return projection = {\n stream: function (stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n },\n postclip: function (_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n },\n clipExtent: function (_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n },\n scale: function (_) {\n return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n },\n translate: function (_) {\n return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n },\n reflectX: function (_) {\n return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n },\n reflectY: function (_) {\n return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n },\n fitExtent: function (extent, object) {\n return fitExtent(projection, extent, object);\n },\n fitSize: function (size, object) {\n return fitSize(projection, size, object);\n },\n fitWidth: function (width, object) {\n return fitWidth(projection, width, object);\n },\n fitHeight: function (height, object) {\n return fitHeight(projection, height, object);\n }\n };\n }\n function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n }\n naturalEarth1Raw.invert = function (x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n };\n function naturalEarth1() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n }\n function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n }\n orthographicRaw.invert = azimuthalInvert(asin);\n function orthographic() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n }\n function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n }\n stereographicRaw.invert = azimuthalInvert(function (z) {\n return 2 * atan(z);\n });\n function stereographic() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n }\n function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n }\n transverseMercatorRaw.invert = function (x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n };\n function transverseMercator() {\n var m = mercatorProjection(transverseMercatorRaw), center = m.center, rotate = m.rotate;\n m.center = function (_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n m.rotate = function (_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n return rotate([0, 0, 90])\n .scale(159.155);\n }\n exports.geoAlbers = albers;\n exports.geoAlbersUsa = albersUsa;\n exports.geoArea = area;\n exports.geoAzimuthalEqualArea = azimuthalEqualArea;\n exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;\n exports.geoAzimuthalEquidistant = azimuthalEquidistant;\n exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;\n exports.geoBounds = bounds;\n exports.geoCentroid = centroid;\n exports.geoCircle = circle;\n exports.geoClipAntimeridian = clipAntimeridian;\n exports.geoClipCircle = clipCircle;\n exports.geoClipExtent = extent;\n exports.geoClipRectangle = clipRectangle;\n exports.geoConicConformal = conicConformal;\n exports.geoConicConformalRaw = conicConformalRaw;\n exports.geoConicEqualArea = conicEqualArea;\n exports.geoConicEqualAreaRaw = conicEqualAreaRaw;\n exports.geoConicEquidistant = conicEquidistant;\n exports.geoConicEquidistantRaw = conicEquidistantRaw;\n exports.geoContains = contains;\n exports.geoDistance = distance;\n exports.geoEqualEarth = equalEarth;\n exports.geoEqualEarthRaw = equalEarthRaw;\n exports.geoEquirectangular = equirectangular;\n exports.geoEquirectangularRaw = equirectangularRaw;\n exports.geoGnomonic = gnomonic;\n exports.geoGnomonicRaw = gnomonicRaw;\n exports.geoGraticule = graticule;\n exports.geoGraticule10 = graticule10;\n exports.geoIdentity = identity$1;\n exports.geoInterpolate = interpolate;\n exports.geoLength = length;\n exports.geoMercator = mercator;\n exports.geoMercatorRaw = mercatorRaw;\n exports.geoNaturalEarth1 = naturalEarth1;\n exports.geoNaturalEarth1Raw = naturalEarth1Raw;\n exports.geoOrthographic = orthographic;\n exports.geoOrthographicRaw = orthographicRaw;\n exports.geoPath = index;\n exports.geoProjection = projection;\n exports.geoProjectionMutator = projectionMutator;\n exports.geoRotation = rotation;\n exports.geoStereographic = stereographic;\n exports.geoStereographicRaw = stereographicRaw;\n exports.geoStream = geoStream;\n exports.geoTransform = transform;\n exports.geoTransverseMercator = transverseMercator;\n exports.geoTransverseMercatorRaw = transverseMercatorRaw;\n Object.defineProperty(exports, '__esModule', { value: true });\n}));\n","// https://d3js.org/d3-geo/ Version 1.6.4. Copyright 2017 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) :\n (factory((global.d3 = global.d3 || {}), global.d3));\n}(this, (function (exports, d3Array) {\n 'use strict';\n // Adds floating point numbers with twice the normal precision.\n // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n // 305363 (1997).\n // Code adapted from GeographicLib by Charles F. F. Karney,\n // http://geographiclib.sourceforge.net/\n var adder = function () {\n return new Adder;\n };\n function Adder() {\n this.reset();\n }\n Adder.prototype = {\n constructor: Adder,\n reset: function () {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function (y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s)\n this.t += temp.t;\n else\n this.s = temp.t;\n },\n valueOf: function () {\n return this.s;\n }\n };\n var temp = new Adder;\n function add(adder, a, b) {\n var x = adder.s = a + b, bv = x - a, av = x - bv;\n adder.t = (a - av) + (b - bv);\n }\n var epsilon = 1e-6;\n var epsilon2 = 1e-12;\n var pi = Math.PI;\n var halfPi = pi / 2;\n var quarterPi = pi / 4;\n var tau = pi * 2;\n var degrees = 180 / pi;\n var radians = pi / 180;\n var abs = Math.abs;\n var atan = Math.atan;\n var atan2 = Math.atan2;\n var cos = Math.cos;\n var ceil = Math.ceil;\n var exp = Math.exp;\n var log = Math.log;\n var pow = Math.pow;\n var sin = Math.sin;\n var sign = Math.sign || function (x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\n var sqrt = Math.sqrt;\n var tan = Math.tan;\n function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n }\n function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n }\n function haversin(x) {\n return (x = sin(x / 2)) * x;\n }\n function noop() { }\n function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n }\n var streamObjectType = {\n Feature: function (object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function (object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n)\n streamGeometry(features[i].geometry, stream);\n }\n };\n var streamGeometryType = {\n Sphere: function (object, stream) {\n stream.sphere();\n },\n Point: function (object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function (object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function (object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function (object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n streamLine(coordinates[i], stream, 0);\n },\n Polygon: function (object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function (object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function (object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n)\n streamGeometry(geometries[i], stream);\n }\n };\n function streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n)\n coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n }\n function streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n)\n streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n }\n var geoStream = function (object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n }\n else {\n streamGeometry(object, stream);\n }\n };\n var areaRingSum = adder();\n var areaSum = adder();\n var lambda00;\n var phi00;\n var lambda0;\n var cosPhi0;\n var sinPhi0;\n var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function () {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function () {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function () {\n areaSum.add(tau);\n }\n };\n function areaRingStart() {\n areaStream.point = areaPointFirst;\n }\n function areaRingEnd() {\n areaPoint(lambda00, phi00);\n }\n function areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n }\n function areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnolis\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0, sdLambda = dLambda >= 0 ? 1 : -1, adLambda = sdLambda * dLambda, cosPhi = cos(phi), sinPhi = sin(phi), k = sinPhi0 * sinPhi, u = cosPhi0 * cosPhi + k * cos(adLambda), v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n }\n var area = function (object) {\n areaSum.reset();\n geoStream(object, areaStream);\n return areaSum * 2;\n };\n function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n }\n function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n }\n function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n function cartesianCross(a, b) {\n 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]];\n }\n // TODO return a\n function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n }\n function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n }\n // TODO return d\n function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n }\n var lambda0$1;\n var phi0;\n var lambda1;\n var phi1;\n var lambda2;\n var lambda00$1;\n var phi00$1;\n var p0;\n var deltaSum = adder();\n var ranges;\n var range$1;\n var boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function () {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function () {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0)\n lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon)\n phi1 = 90;\n else if (deltaSum < -epsilon)\n phi0 = -90;\n range$1[0] = lambda0$1, range$1[1] = lambda1;\n }\n };\n function boundsPoint(lambda, phi) {\n ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);\n if (phi < phi0)\n phi0 = phi;\n if (phi > phi1)\n phi1 = phi;\n }\n function linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p), equatorial = [normal[1], -normal[0], 0], inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2, sign$$1 = delta > 0 ? 1 : -1, lambdai = inflection[0] * degrees * sign$$1, phii, antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1)\n phi1 = phii;\n }\n else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0)\n phi0 = phii;\n }\n else {\n if (phi < phi0)\n phi0 = phi;\n if (phi > phi1)\n phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1))\n lambda1 = lambda;\n }\n else {\n if (angle(lambda, lambda1) > angle(lambda0$1, lambda1))\n lambda0$1 = lambda;\n }\n }\n else {\n if (lambda1 >= lambda0$1) {\n if (lambda < lambda0$1)\n lambda0$1 = lambda;\n if (lambda > lambda1)\n lambda1 = lambda;\n }\n else {\n if (lambda > lambda2) {\n if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1))\n lambda1 = lambda;\n }\n else {\n if (angle(lambda, lambda1) > angle(lambda0$1, lambda1))\n lambda0$1 = lambda;\n }\n }\n }\n }\n else {\n ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0)\n phi0 = phi;\n if (phi > phi1)\n phi1 = phi;\n p0 = p, lambda2 = lambda;\n }\n function boundsLineStart() {\n boundsStream.point = linePoint;\n }\n function boundsLineEnd() {\n range$1[0] = lambda0$1, range$1[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n }\n function boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n }\n else {\n lambda00$1 = lambda, phi00$1 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n }\n function boundsRingStart() {\n areaStream.lineStart();\n }\n function boundsRingEnd() {\n boundsRingPoint(lambda00$1, phi00$1);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon)\n lambda0$1 = -(lambda1 = 180);\n range$1[0] = lambda0$1, range$1[1] = lambda1;\n p0 = null;\n }\n // Finds the left-right distance between two longitudes.\n // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n // the distance between ±180° to be 360°.\n function angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n }\n function rangeCompare(a, b) {\n return a[0] - b[0];\n }\n function rangeContains(range$$1, x) {\n return range$$1[0] <= range$$1[1] ? range$$1[0] <= x && x <= range$$1[1] : x < range$$1[0] || range$$1[1] < x;\n }\n var bounds = function (feature) {\n var i, n, a, b, merged, deltaMax, delta;\n phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n ranges = [];\n geoStream(feature, boundsStream);\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1]))\n a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1]))\n a[0] = b[0];\n }\n else {\n merged.push(a = b);\n }\n }\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax)\n deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n }\n }\n ranges = range$1 = null;\n return lambda0$1 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0$1, phi0], [lambda1, phi1]];\n };\n var W0;\n var W1;\n var X0;\n var Y0;\n var Z0;\n var X1;\n var Y1;\n var Z1;\n var X2;\n var Y2;\n var Z2;\n var lambda00$2;\n var phi00$2;\n var x0;\n var y0;\n var z0; // previous point\n var centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function () {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function () {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n };\n // Arithmetic mean of Cartesian vectors.\n function centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n }\n function centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n }\n function centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n }\n function centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n }\n function centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi), x = cosPhi * cos(lambda), y = cosPhi * sin(lambda), z = sin(phi), w = atan2(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);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n }\n function centroidLineEnd() {\n centroidStream.point = centroidPoint;\n }\n // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n // J. Applied Mechanics 42, 239 (1975).\n function centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n }\n function centroidRingEnd() {\n centroidRingPoint(lambda00$2, phi00$2);\n centroidStream.point = centroidPoint;\n }\n function centroidRingPointFirst(lambda, phi) {\n lambda00$2 = lambda, phi00$2 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n }\n function centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi), x = cosPhi * cos(lambda), y = cosPhi * sin(lambda), z = sin(phi), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = sqrt(cx * cx + cy * cy + cz * cz), w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n }\n var centroid = function (object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n geoStream(object, centroidStream);\n var x = X2, y = Y2, z = Z2, m = x * x + y * y + z * z;\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon)\n x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2)\n return [NaN, NaN];\n }\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n };\n var constant = function (x) {\n return function () {\n return x;\n };\n };\n var compose = function (a, b) {\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n if (a.invert && b.invert)\n compose.invert = function (x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n return compose;\n };\n function rotationIdentity(lambda, phi) {\n return [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n }\n rotationIdentity.invert = rotationIdentity;\n function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n }\n function forwardRotationLambda(deltaLambda) {\n return function (lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n }\n function rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n }\n function rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi), sinDeltaPhi = sin(deltaPhi), cosDeltaGamma = cos(deltaGamma), sinDeltaGamma = sin(deltaGamma);\n function rotation(lambda, phi) {\n var cosPhi = cos(phi), x = cos(lambda) * cosPhi, y = sin(lambda) * cosPhi, z = sin(phi), k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n rotation.invert = function (lambda, phi) {\n var cosPhi = cos(phi), x = cos(lambda) * cosPhi, y = sin(lambda) * cosPhi, z = sin(phi), k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n return rotation;\n }\n var rotation = function (rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n forward.invert = function (coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n return forward;\n };\n // Generates a circle centered at [0°, 0°], with a given radius and precision.\n function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta)\n return;\n var cosRadius = cos(radius), sinRadius = sin(radius), step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n }\n else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1)\n t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n }\n // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\n function circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n }\n var circle = function () {\n var center = constant([0, 0]), radius = constant(90), precision = constant(6), ring, rotate, stream = { point: point };\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n function circle() {\n var c = center.apply(this, arguments), r = radius.apply(this, arguments) * radians, p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = { type: \"Polygon\", coordinates: [ring] };\n ring = rotate = null;\n return c;\n }\n circle.center = function (_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n circle.radius = function (_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n circle.precision = function (_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n return circle;\n };\n var clipBuffer = function () {\n var lines = [], line;\n return {\n point: function (x, y) {\n line.push([x, y]);\n },\n lineStart: function () {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function () {\n if (lines.length > 1)\n lines.push(lines.pop().concat(lines.shift()));\n },\n result: function () {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n };\n var clipLine = function (a, b, x0, y0, x1, y1) {\n var ax = a[0], ay = a[1], bx = b[0], by = b[1], t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n r = x0 - ax;\n if (!dx && r > 0)\n return;\n r /= dx;\n if (dx < 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n else if (dx > 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n r = x1 - ax;\n if (!dx && r < 0)\n return;\n r /= dx;\n if (dx < 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n else if (dx > 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n r = y0 - ay;\n if (!dy && r > 0)\n return;\n r /= dy;\n if (dy < 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n else if (dy > 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n r = y1 - ay;\n if (!dy && r < 0)\n return;\n r /= dy;\n if (dy < 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n else if (dy > 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n if (t0 > 0)\n a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1)\n b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n };\n var pointEqual = function (a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n };\n function Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n }\n // A generalized polygon clipping algorithm: given a polygon that has been cut\n // into its visible line segments, and rejoins the segments by interpolating\n // along the clip edge.\n var clipPolygon = function (segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [], clip = [], i, n;\n segments.forEach(function (segment) {\n if ((n = segment.length - 1) <= 0)\n return;\n var n, p0 = segment[0], p1 = segment[n], x;\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i)\n stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n if (!subject.length)\n return;\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n var start = subject[0], points, point;\n while (1) {\n // Find first unvisited intersection.\n var current = start, isSubject = true;\n while (current.v)\n if ((current = current.n) === start)\n return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i)\n stream.point((point = points[i])[0], point[1]);\n }\n else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n }\n else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i)\n stream.point((point = points[i])[0], point[1]);\n }\n else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n };\n function link(array) {\n if (!(n = array.length))\n return;\n var n, i = 0, a = array[0], b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n }\n var clipMax = 1e9;\n var clipMin = -clipMax;\n // TODO Use d3-polygons polygonContains here for the ring check?\n // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n function clipExtent(x0, y0, x1, y1) {\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do\n stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n }\n else {\n stream.point(to[0], to[1]);\n }\n }\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n function comparePoint(a, b) {\n var ca = corner(a, 1), cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n return function (stream) {\n var activeStream = stream, bufferStream = clipBuffer(), segments, polygon, ring, x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first, clean;\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n function point(x, y) {\n if (visible(x, y))\n activeStream.point(x, y);\n }\n function polygonInside() {\n var winding = 0;\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) {\n if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0))\n ++winding;\n }\n else {\n if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0))\n --winding;\n }\n }\n }\n return winding;\n }\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n function polygonEnd() {\n var startInside = polygonInside(), cleanInside = clean && startInside, visible = (segments = d3Array.merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipPolygon(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon)\n polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_)\n bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_)\n activeStream.lineEnd();\n }\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon)\n ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n }\n else {\n if (v && v_)\n activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v)\n activeStream.lineEnd();\n clean = false;\n }\n else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n return clipStream;\n };\n }\n var extent = function () {\n var x0 = 0, y0 = 0, x1 = 960, y1 = 500, cache, cacheStream, clip;\n return clip = {\n stream: function (stream) {\n return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function (_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n };\n var sum = adder();\n var polygonContains = function (polygon, point) {\n var lambda = point[0], phi = point[1], normal = [sin(lambda), -cos(lambda), 0], angle = 0, winding = 0;\n sum.reset();\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length))\n continue;\n var ring, m, point0 = ring[m - 1], lambda0 = point0[0], phi0 = point0[1] / 2 + quarterPi, sinPhi0 = sin(phi0), cosPhi0 = cos(phi0);\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j], lambda1 = point1[0], phi1 = point1[1] / 2 + quarterPi, sinPhi1 = sin(phi1), cosPhi1 = cos(phi1), delta = lambda1 - lambda0, sign$$1 = delta >= 0 ? 1 : -1, absDelta = sign$$1 * delta, antimeridian = absDelta > pi, k = sinPhi0 * sinPhi1;\n sum.add(atan2(k * sign$$1 * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign$$1 * tau : delta;\n // Are the longitudes either side of the points meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n };\n var lengthSum = adder();\n var lambda0$2;\n var sinPhi0$1;\n var cosPhi0$1;\n var lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n };\n function lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n }\n function lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n }\n function lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0$2 = lambda, sinPhi0$1 = sin(phi), cosPhi0$1 = cos(phi);\n lengthStream.point = lengthPoint;\n }\n function lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi), cosPhi = cos(phi), delta = abs(lambda - lambda0$2), cosDelta = cos(delta), sinDelta = sin(delta), x = cosPhi * sinDelta, y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta, z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;\n }\n var length = function (object) {\n lengthSum.reset();\n geoStream(object, lengthStream);\n return +lengthSum;\n };\n var coordinates = [null, null];\n var object = { type: \"LineString\", coordinates: coordinates };\n var distance = function (a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length(object);\n };\n var containsObjectType = {\n Feature: function (object, point) {\n return containsGeometry(object.geometry, point);\n },\n FeatureCollection: function (object, point) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n)\n if (containsGeometry(features[i].geometry, point))\n return true;\n return false;\n }\n };\n var containsGeometryType = {\n Sphere: function () {\n return true;\n },\n Point: function (object, point) {\n return containsPoint(object.coordinates, point);\n },\n MultiPoint: function (object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n if (containsPoint(coordinates[i], point))\n return true;\n return false;\n },\n LineString: function (object, point) {\n return containsLine(object.coordinates, point);\n },\n MultiLineString: function (object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n if (containsLine(coordinates[i], point))\n return true;\n return false;\n },\n Polygon: function (object, point) {\n return containsPolygon(object.coordinates, point);\n },\n MultiPolygon: function (object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n)\n if (containsPolygon(coordinates[i], point))\n return true;\n return false;\n },\n GeometryCollection: function (object, point) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n)\n if (containsGeometry(geometries[i], point))\n return true;\n return false;\n }\n };\n function containsGeometry(geometry, point) {\n return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n ? containsGeometryType[geometry.type](geometry, point)\n : false;\n }\n function containsPoint(coordinates, point) {\n return distance(coordinates, point) === 0;\n }\n function containsLine(coordinates, point) {\n var ab = distance(coordinates[0], coordinates[1]), ao = distance(coordinates[0], point), ob = distance(point, coordinates[1]);\n return ao + ob <= ab + epsilon;\n }\n function containsPolygon(coordinates, point) {\n return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n }\n function ringRadians(ring) {\n return ring = ring.map(pointRadians), ring.pop(), ring;\n }\n function pointRadians(point) {\n return [point[0] * radians, point[1] * radians];\n }\n var contains = function (object, point) {\n return (object && containsObjectType.hasOwnProperty(object.type)\n ? containsObjectType[object.type]\n : containsGeometry)(object, point);\n };\n function graticuleX(y0, y1, dy) {\n var y = d3Array.range(y0, y1 - epsilon, dy).concat(y1);\n return function (x) { return y.map(function (y) { return [x, y]; }); };\n }\n function graticuleY(x0, x1, dx) {\n var x = d3Array.range(x0, x1 - epsilon, dx).concat(x1);\n return function (y) { return x.map(function (x) { return [x, y]; }); };\n }\n function graticule() {\n var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n function graticule() {\n return { type: \"MultiLineString\", coordinates: lines() };\n }\n function lines() {\n return d3Array.range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(d3Array.range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(d3Array.range(ceil(x0 / dx) * dx, x1, dx).filter(function (x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(d3Array.range(ceil(y0 / dy) * dy, y1, dy).filter(function (y) { return abs(y % DY) > epsilon; }).map(y));\n }\n graticule.lines = function () {\n return lines().map(function (coordinates) { return { type: \"LineString\", coordinates: coordinates }; });\n };\n graticule.outline = function () {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1))\n ]\n };\n };\n graticule.extent = function (_) {\n if (!arguments.length)\n return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n graticule.extentMajor = function (_) {\n if (!arguments.length)\n return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1)\n _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1)\n _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n graticule.extentMinor = function (_) {\n if (!arguments.length)\n return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1)\n _ = x0, x0 = x1, x1 = _;\n if (y0 > y1)\n _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n graticule.step = function (_) {\n if (!arguments.length)\n return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n graticule.stepMajor = function (_) {\n if (!arguments.length)\n return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n graticule.stepMinor = function (_) {\n if (!arguments.length)\n return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n graticule.precision = function (_) {\n if (!arguments.length)\n return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n }\n function graticule10() {\n return graticule()();\n }\n var interpolate = function (a, b) {\n var x0 = a[0] * radians, y0 = a[1] * radians, x1 = b[0] * radians, y1 = b[1] * radians, cy0 = cos(y0), sy0 = sin(y0), cy1 = cos(y1), sy1 = sin(y1), kx0 = cy0 * cos(x0), ky0 = cy0 * sin(x0), kx1 = cy1 * cos(x1), ky1 = cy1 * sin(x1), d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))), k = sin(d);\n var interpolate = d ? function (t) {\n var B = sin(t *= d) / k, A = sin(d - t) / k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n return [\n atan2(y, x) * degrees,\n atan2(z, sqrt(x * x + y * y)) * degrees\n ];\n } : function () {\n return [x0 * degrees, y0 * degrees];\n };\n interpolate.distance = d;\n return interpolate;\n };\n var identity = function (x) {\n return x;\n };\n var areaSum$1 = adder();\n var areaRingSum$1 = adder();\n var x00;\n var y00;\n var x0$1;\n var y0$1;\n var areaStream$1 = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function () {\n areaStream$1.lineStart = areaRingStart$1;\n areaStream$1.lineEnd = areaRingEnd$1;\n },\n polygonEnd: function () {\n areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop;\n areaSum$1.add(abs(areaRingSum$1));\n areaRingSum$1.reset();\n },\n result: function () {\n var area = areaSum$1 / 2;\n areaSum$1.reset();\n return area;\n }\n };\n function areaRingStart$1() {\n areaStream$1.point = areaPointFirst$1;\n }\n function areaPointFirst$1(x, y) {\n areaStream$1.point = areaPoint$1;\n x00 = x0$1 = x, y00 = y0$1 = y;\n }\n function areaPoint$1(x, y) {\n areaRingSum$1.add(y0$1 * x - x0$1 * y);\n x0$1 = x, y0$1 = y;\n }\n function areaRingEnd$1() {\n areaPoint$1(x00, y00);\n }\n var x0$2 = Infinity;\n var y0$2 = x0$2;\n var x1 = -x0$2;\n var y1 = x1;\n var boundsStream$1 = {\n point: boundsPoint$1,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function () {\n var bounds = [[x0$2, y0$2], [x1, y1]];\n x1 = y1 = -(y0$2 = x0$2 = Infinity);\n return bounds;\n }\n };\n function boundsPoint$1(x, y) {\n if (x < x0$2)\n x0$2 = x;\n if (x > x1)\n x1 = x;\n if (y < y0$2)\n y0$2 = y;\n if (y > y1)\n y1 = y;\n }\n // TODO Enforce positive area for exterior, negative area for interior?\n var X0$1 = 0;\n var Y0$1 = 0;\n var Z0$1 = 0;\n var X1$1 = 0;\n var Y1$1 = 0;\n var Z1$1 = 0;\n var X2$1 = 0;\n var Y2$1 = 0;\n var Z2$1 = 0;\n var x00$1;\n var y00$1;\n var x0$3;\n var y0$3;\n var centroidStream$1 = {\n point: centroidPoint$1,\n lineStart: centroidLineStart$1,\n lineEnd: centroidLineEnd$1,\n polygonStart: function () {\n centroidStream$1.lineStart = centroidRingStart$1;\n centroidStream$1.lineEnd = centroidRingEnd$1;\n },\n polygonEnd: function () {\n centroidStream$1.point = centroidPoint$1;\n centroidStream$1.lineStart = centroidLineStart$1;\n centroidStream$1.lineEnd = centroidLineEnd$1;\n },\n result: function () {\n var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]\n : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]\n : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]\n : [NaN, NaN];\n X0$1 = Y0$1 = Z0$1 =\n X1$1 = Y1$1 = Z1$1 =\n X2$1 = Y2$1 = Z2$1 = 0;\n return centroid;\n }\n };\n function centroidPoint$1(x, y) {\n X0$1 += x;\n Y0$1 += y;\n ++Z0$1;\n }\n function centroidLineStart$1() {\n centroidStream$1.point = centroidPointFirstLine;\n }\n function centroidPointFirstLine(x, y) {\n centroidStream$1.point = centroidPointLine;\n centroidPoint$1(x0$3 = x, y0$3 = y);\n }\n function centroidPointLine(x, y) {\n var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);\n X1$1 += z * (x0$3 + x) / 2;\n Y1$1 += z * (y0$3 + y) / 2;\n Z1$1 += z;\n centroidPoint$1(x0$3 = x, y0$3 = y);\n }\n function centroidLineEnd$1() {\n centroidStream$1.point = centroidPoint$1;\n }\n function centroidRingStart$1() {\n centroidStream$1.point = centroidPointFirstRing;\n }\n function centroidRingEnd$1() {\n centroidPointRing(x00$1, y00$1);\n }\n function centroidPointFirstRing(x, y) {\n centroidStream$1.point = centroidPointRing;\n centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);\n }\n function centroidPointRing(x, y) {\n var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);\n X1$1 += z * (x0$3 + x) / 2;\n Y1$1 += z * (y0$3 + y) / 2;\n Z1$1 += z;\n z = y0$3 * x - x0$3 * y;\n X2$1 += z * (x0$3 + x);\n Y2$1 += z * (y0$3 + y);\n Z2$1 += z * 3;\n centroidPoint$1(x0$3 = x, y0$3 = y);\n }\n function PathContext(context) {\n this._context = context;\n }\n PathContext.prototype = {\n _radius: 4.5,\n pointRadius: function (_) {\n return this._radius = _, this;\n },\n polygonStart: function () {\n this._line = 0;\n },\n polygonEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._point = 0;\n },\n lineEnd: function () {\n if (this._line === 0)\n this._context.closePath();\n this._point = NaN;\n },\n point: function (x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n };\n var lengthSum$1 = adder();\n var lengthRing;\n var x00$2;\n var y00$2;\n var x0$4;\n var y0$4;\n var lengthStream$1 = {\n point: noop,\n lineStart: function () {\n lengthStream$1.point = lengthPointFirst$1;\n },\n lineEnd: function () {\n if (lengthRing)\n lengthPoint$1(x00$2, y00$2);\n lengthStream$1.point = noop;\n },\n polygonStart: function () {\n lengthRing = true;\n },\n polygonEnd: function () {\n lengthRing = null;\n },\n result: function () {\n var length = +lengthSum$1;\n lengthSum$1.reset();\n return length;\n }\n };\n function lengthPointFirst$1(x, y) {\n lengthStream$1.point = lengthPoint$1;\n x00$2 = x0$4 = x, y00$2 = y0$4 = y;\n }\n function lengthPoint$1(x, y) {\n x0$4 -= x, y0$4 -= y;\n lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));\n x0$4 = x, y0$4 = y;\n }\n function PathString() {\n this._string = [];\n }\n PathString.prototype = {\n _radius: 4.5,\n _circle: circle$1(4.5),\n pointRadius: function (_) {\n if ((_ = +_) !== this._radius)\n this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function () {\n this._line = 0;\n },\n polygonEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._point = 0;\n },\n lineEnd: function () {\n if (this._line === 0)\n this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function (x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null)\n this._circle = circle$1(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function () {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n }\n else {\n return null;\n }\n }\n };\n function circle$1(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n }\n var index = function (projection, context) {\n var pointRadius = 4.5, projectionStream, contextStream;\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\")\n contextStream.pointRadius(+pointRadius.apply(this, arguments));\n geoStream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n path.area = function (object) {\n geoStream(object, projectionStream(areaStream$1));\n return areaStream$1.result();\n };\n path.measure = function (object) {\n geoStream(object, projectionStream(lengthStream$1));\n return lengthStream$1.result();\n };\n path.bounds = function (object) {\n geoStream(object, projectionStream(boundsStream$1));\n return boundsStream$1.result();\n };\n path.centroid = function (object) {\n geoStream(object, projectionStream(centroidStream$1));\n return centroidStream$1.result();\n };\n path.projection = function (_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n path.context = function (_) {\n if (!arguments.length)\n return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\")\n contextStream.pointRadius(pointRadius);\n return path;\n };\n path.pointRadius = function (_) {\n if (!arguments.length)\n return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n return path.projection(projection).context(context);\n };\n var clip = function (pointVisible, clipLine, interpolate, start) {\n return function (rotate, sink) {\n var line = clipLine(sink), rotatedStart = rotate.invert(start[0], start[1]), ringBuffer = clipBuffer(), ringSink = clipLine(ringBuffer), polygonStarted = false, polygon, segments, ring;\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function () {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function () {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = d3Array.merge(segments);\n var startInside = polygonContains(polygon, rotatedStart);\n if (segments.length) {\n if (!polygonStarted)\n sink.polygonStart(), polygonStarted = true;\n clipPolygon(segments, compareIntersection, startInside, interpolate, sink);\n }\n else if (startInside) {\n if (!polygonStarted)\n sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted)\n sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function () {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n function point(lambda, phi) {\n var point = rotate(lambda, phi);\n if (pointVisible(lambda = point[0], phi = point[1]))\n sink.point(lambda, phi);\n }\n function pointLine(lambda, phi) {\n var point = rotate(lambda, phi);\n line.point(point[0], point[1]);\n }\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n var point = rotate(lambda, phi);\n ringSink.point(point[0], point[1]);\n }\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n var clean = ringSink.clean(), ringSegments = ringBuffer.result(), i, n = ringSegments.length, m, segment, point;\n ring.pop();\n polygon.push(ring);\n ring = null;\n if (!n)\n return;\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted)\n sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i)\n sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2)\n ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n segments.push(ringSegments.filter(validSegment));\n }\n return clip;\n };\n };\n function validSegment(segment) {\n return segment.length > 1;\n }\n // Intersections are sorted along the clip edge. For both antimeridian cutting\n // and circle clipping, the same comparison is used.\n function compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n }\n var clipAntimeridian = clip(function () { return true; }, clipAntimeridianLine, clipAntimeridianInterpolate, [-pi, -halfPi]);\n // Takes a line and cuts into visible segments. Return values: 0 - there were\n // intersections or the line was empty; 1 - no intersections; 2 - there were\n // intersections, and the first and last segments should be rejoined.\n function clipAntimeridianLine(stream) {\n var lambda0 = NaN, phi0 = NaN, sign0 = NaN, clean; // no intersections\n return {\n lineStart: function () {\n stream.lineStart();\n clean = 1;\n },\n point: function (lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi, delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n }\n else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon)\n lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon)\n lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function () {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function () {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n }\n function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0, cosPhi1, sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n }\n function clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n }\n else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n }\n else {\n stream.point(to[0], to[1]);\n }\n }\n var clipCircle = function (radius, delta) {\n var cr = cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function () {\n v00 = v0 = false;\n clean = 1;\n },\n point: function (lambda, phi) {\n var point1 = [lambda, phi], point2, v = visible(lambda, phi), c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v))\n stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n }\n else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n }\n else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n }\n else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function () {\n if (v0)\n stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function () {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a), pb = cartesian(b);\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb), n2n2 = cartesianDot(n2, n2), n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n // Two polar points.\n if (!determinant)\n return !two && a;\n var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = cartesianCross(n1, n2), A = cartesianScale(n1, c1), B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n // Solve |p(t)|^2 = 1.\n var u = n1xn2, w = cartesianDot(A, u), uu = cartesianDot(u, u), t2 = w * w - uu * (cartesianDot(A, A) - 1);\n if (t2 < 0)\n return;\n var t = sqrt(t2), q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n if (!two)\n return q;\n // Two intersection points.\n var lambda0 = a[0], lambda1 = b[0], phi0 = a[1], phi1 = b[1], z;\n if (lambda1 < lambda0)\n z = lambda0, lambda0 = lambda1, lambda1 = z;\n var delta = lambda1 - lambda0, polar = abs(delta - pi) < epsilon, meridian = polar || delta < epsilon;\n if (!polar && phi1 < phi0)\n z = phi0, phi0 = phi1, phi1 = z;\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius, code = 0;\n if (lambda < -r)\n code |= 1; // left\n else if (lambda > r)\n code |= 2; // right\n if (phi < -r)\n code |= 4; // below\n else if (phi > r)\n code |= 8; // above\n return code;\n }\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n };\n var transform = function (methods) {\n return {\n stream: transformer(methods)\n };\n };\n function transformer(methods) {\n return function (stream) {\n var s = new TransformStream;\n for (var key in methods)\n s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n }\n function TransformStream() { }\n TransformStream.prototype = {\n constructor: TransformStream,\n point: function (x, y) { this.stream.point(x, y); },\n sphere: function () { this.stream.sphere(); },\n lineStart: function () { this.stream.lineStart(); },\n lineEnd: function () { this.stream.lineEnd(); },\n polygonStart: function () { this.stream.polygonStart(); },\n polygonEnd: function () { this.stream.polygonEnd(); }\n };\n function fitExtent(projection, extent, object) {\n var w = extent[1][0] - extent[0][0], h = extent[1][1] - extent[0][1], clip = projection.clipExtent && projection.clipExtent();\n projection\n .scale(150)\n .translate([0, 0]);\n if (clip != null)\n projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream$1));\n var b = boundsStream$1.result(), k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n if (clip != null)\n projection.clipExtent(clip);\n return projection\n .scale(k * 150)\n .translate([x, y]);\n }\n function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n }\n var maxDepth = 16;\n var cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n var resample = function (project, delta2) {\n return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n };\n function resampleNone(project) {\n return transformer({\n point: function (x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n }\n function resample$1(project, delta2) {\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = sqrt(a * a + b * b + c * c), phi2 = asin(c /= m), lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a), p = project(lambda2, phi2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function (stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function () { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function () { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n return resampleStream;\n };\n }\n var transformRadians = transformer({\n point: function (x, y) {\n this.stream.point(x * radians, y * radians);\n }\n });\n function projection(project) {\n return projectionMutator(function () { return project; })();\n }\n function projectionMutator(projectAt) {\n var project, k = 150, // scale\n x = 480, y = 250, // translate\n dx, dy, lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate\n theta = null, preclip = clipAntimeridian, // clip angle\n x0 = null, y0, x1, y1, postclip = identity, // clip extent\n delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision\n cache, cacheStream;\n function projection(point) {\n point = projectRotate(point[0] * radians, point[1] * radians);\n return [point[0] * k + dx, dy - point[1] * k];\n }\n function invert(point) {\n point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n function projectTransform(x, y) {\n return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];\n }\n projection.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));\n };\n projection.clipAngle = function (_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n projection.clipExtent = function (_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function (_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n projection.translate = function (_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n projection.center = function (_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n projection.rotate = function (_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n projection.precision = function (_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n projection.fitExtent = function (extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function (size, object) {\n return fitSize(projection, size, object);\n };\n function recenter() {\n projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);\n var center = project(lambda, phi);\n dx = x - center[0] * k;\n dy = y + center[1] * k;\n return reset();\n }\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n return function () {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n }\n function conicProjection(projectAt) {\n var phi0 = 0, phi1 = pi / 3, m = projectionMutator(projectAt), p = m(phi0, phi1);\n p.parallels = function (_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n return p;\n }\n function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n forward.invert = function (x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n return forward;\n }\n function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon)\n return cylindricalEqualAreaRaw(y0);\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n project.invert = function (x, y) {\n var r0y = r0 - y;\n return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n return project;\n }\n var conicEqualArea = function () {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n };\n var albers = function () {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n };\n // The projections must have mutually exclusive clip regions on the sphere,\n // as this will avoid emitting interleaving lines and polygons.\n function multiplex(streams) {\n var n = streams.length;\n return {\n point: function (x, y) { var i = -1; while (++i < n)\n streams[i].point(x, y); },\n sphere: function () { var i = -1; while (++i < n)\n streams[i].sphere(); },\n lineStart: function () { var i = -1; while (++i < n)\n streams[i].lineStart(); },\n lineEnd: function () { var i = -1; while (++i < n)\n streams[i].lineEnd(); },\n polygonStart: function () { var i = -1; while (++i < n)\n streams[i].polygonStart(); },\n polygonEnd: function () { var i = -1; while (++i < n)\n streams[i].polygonEnd(); }\n };\n }\n // A composite projection for the United States, configured by default for\n // 960×500. The projection also works quite well at 960×600 if you change the\n // scale to 1285 and adjust the translate accordingly. The set of standard\n // parallels for each region comes from USGS, which is published here:\n // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\n var albersUsa = function () {\n var cache, cacheStream, lower48 = albers(), lower48Point, alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = { point: function (x, y) { point = [x, y]; } };\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n albersUsa.invert = function (coordinates) {\n var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n albersUsa.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n albersUsa.precision = function (_) {\n if (!arguments.length)\n return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n albersUsa.scale = function (_) {\n if (!arguments.length)\n return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n albersUsa.translate = function (_) {\n if (!arguments.length)\n return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n return reset();\n };\n albersUsa.fitExtent = function (extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n albersUsa.fitSize = function (size, object) {\n return fitSize(albersUsa, size, object);\n };\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n return albersUsa.scale(1070);\n };\n function azimuthalRaw(scale) {\n return function (x, y) {\n var cx = cos(x), cy = cos(y), k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n };\n }\n function azimuthalInvert(angle) {\n return function (x, y) {\n var z = sqrt(x * x + y * y), c = angle(z), sc = sin(c), cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n };\n }\n var azimuthalEqualAreaRaw = azimuthalRaw(function (cxcy) {\n return sqrt(2 / (1 + cxcy));\n });\n azimuthalEqualAreaRaw.invert = azimuthalInvert(function (z) {\n return 2 * asin(z / 2);\n });\n var azimuthalEqualArea = function () {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n };\n var azimuthalEquidistantRaw = azimuthalRaw(function (c) {\n return (c = acos(c)) && c / sin(c);\n });\n azimuthalEquidistantRaw.invert = azimuthalInvert(function (z) {\n return z;\n });\n var azimuthalEquidistant = function () {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n };\n function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n }\n mercatorRaw.invert = function (x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n };\n var mercator = function () {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n };\n function mercatorProjection(project) {\n var m = projection(project), center = m.center, scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, x0 = null, y0, x1, y1; // clip extent\n m.scale = function (_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n m.translate = function (_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n m.center = function (_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n m.clipExtent = function (_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n function reclip() {\n var k = pi * scale(), t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n return reclip();\n }\n function tany(y) {\n return tan((halfPi + y) / 2);\n }\n function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0), n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)), f = cy0 * pow(tany(y0), n) / n;\n if (!n)\n return mercatorRaw;\n function project(x, y) {\n if (f > 0) {\n if (y < -halfPi + epsilon)\n y = -halfPi + epsilon;\n }\n else {\n if (y > halfPi - epsilon)\n y = halfPi - epsilon;\n }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n project.invert = function (x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n return project;\n }\n var conicConformal = function () {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n };\n function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n }\n equirectangularRaw.invert = equirectangularRaw;\n var equirectangular = function () {\n return projection(equirectangularRaw)\n .scale(152.63);\n };\n function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0), n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0), g = cy0 / n + y0;\n if (abs(n) < epsilon)\n return equirectangularRaw;\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n project.invert = function (x, y) {\n var gy = g - y;\n return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n };\n return project;\n }\n var conicEquidistant = function () {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n };\n function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n }\n gnomonicRaw.invert = azimuthalInvert(atan);\n var gnomonic = function () {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n };\n function scaleTranslate(kx, ky, tx, ty) {\n return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({\n point: function (x, y) {\n this.stream.point(x * kx + tx, y * ky + ty);\n }\n });\n }\n var identity$1 = function () {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity, // scale, translate and reflect\n x0 = null, y0, x1, y1, clip = identity, // clip extent\n cache, cacheStream, projection;\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n return projection = {\n stream: function (stream) {\n return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));\n },\n clipExtent: function (_) {\n return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n },\n scale: function (_) {\n return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n },\n translate: function (_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n },\n reflectX: function (_) {\n return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n },\n reflectY: function (_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n },\n fitExtent: function (extent, object) {\n return fitExtent(projection, extent, object);\n },\n fitSize: function (size, object) {\n return fitSize(projection, size, object);\n }\n };\n };\n function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n }\n orthographicRaw.invert = azimuthalInvert(asin);\n var orthographic = function () {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n };\n function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n }\n stereographicRaw.invert = azimuthalInvert(function (z) {\n return 2 * atan(z);\n });\n var stereographic = function () {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n };\n function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n }\n transverseMercatorRaw.invert = function (x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n };\n var transverseMercator = function () {\n var m = mercatorProjection(transverseMercatorRaw), center = m.center, rotate = m.rotate;\n m.center = function (_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n m.rotate = function (_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n return rotate([0, 0, 90])\n .scale(159.155);\n };\n exports.geoArea = area;\n exports.geoBounds = bounds;\n exports.geoCentroid = centroid;\n exports.geoCircle = circle;\n exports.geoClipExtent = extent;\n exports.geoContains = contains;\n exports.geoDistance = distance;\n exports.geoGraticule = graticule;\n exports.geoGraticule10 = graticule10;\n exports.geoInterpolate = interpolate;\n exports.geoLength = length;\n exports.geoPath = index;\n exports.geoAlbers = albers;\n exports.geoAlbersUsa = albersUsa;\n exports.geoAzimuthalEqualArea = azimuthalEqualArea;\n exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;\n exports.geoAzimuthalEquidistant = azimuthalEquidistant;\n exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;\n exports.geoConicConformal = conicConformal;\n exports.geoConicConformalRaw = conicConformalRaw;\n exports.geoConicEqualArea = conicEqualArea;\n exports.geoConicEqualAreaRaw = conicEqualAreaRaw;\n exports.geoConicEquidistant = conicEquidistant;\n exports.geoConicEquidistantRaw = conicEquidistantRaw;\n exports.geoEquirectangular = equirectangular;\n exports.geoEquirectangularRaw = equirectangularRaw;\n exports.geoGnomonic = gnomonic;\n exports.geoGnomonicRaw = gnomonicRaw;\n exports.geoIdentity = identity$1;\n exports.geoProjection = projection;\n exports.geoProjectionMutator = projectionMutator;\n exports.geoMercator = mercator;\n exports.geoMercatorRaw = mercatorRaw;\n exports.geoOrthographic = orthographic;\n exports.geoOrthographicRaw = orthographicRaw;\n exports.geoStereographic = stereographic;\n exports.geoStereographicRaw = stereographicRaw;\n exports.geoTransverseMercator = transverseMercator;\n exports.geoTransverseMercatorRaw = transverseMercatorRaw;\n exports.geoRotation = rotation;\n exports.geoStream = geoStream;\n exports.geoTransform = transform;\n Object.defineProperty(exports, '__esModule', { value: true });\n})));\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) :\n (factory((global.d3 = global.d3 || {}), global.d3));\n}(this, function (exports, d3Array) {\n 'use strict';\n // Main render method\n function renderHexJSON(hexjson, width, height) {\n // Get the layout\n var layout = hexjson.layout;\n // Get the hex objects as an array\n var hexes = [];\n var hexRadius = 0;\n Object.keys(hexjson.hexes).forEach(function (key) {\n hexjson.hexes[key].key = key;\n hexes.push(hexjson.hexes[key]);\n });\n // Calculate the number of rows and columns\n var qmax = d3Array.max(hexes, function (d) { return +d.q; }), qmin = d3Array.min(hexes, function (d) { return +d.q; }), rmax = d3Array.max(hexes, function (d) { return +d.r; }), rmin = d3Array.min(hexes, function (d) { return +d.r; });\n var qnum = qmax - qmin + 1, rnum = rmax - rmin + 1;\n // Calculate maximum radius the hexagons can have to fit the svg\n if (layout === \"odd-r\" || layout === \"even-r\") {\n hexRadius = d3Array.min([(width) / ((qnum + 0.5) * Math.sqrt(3)),\n height / ((rnum + 1 / 3) * 1.5)]);\n }\n else {\n hexRadius = d3Array.min([(height) / ((rnum + 0.5) * Math.sqrt(3)),\n width / ((qnum + 1 / 3) * 1.5)]);\n }\n // Calculate the hexagon width\n var hexWidth = hexRadius * Math.sqrt(3);\n // Get the vertices and points for this layout\n var vertices = getVertices(layout, hexWidth, hexRadius);\n var points = getPoints(vertices);\n // Calculate the values needed to render each hex and add to hexes\n hexes.forEach(function (hex) {\n // Calculate the absolute co-ordinates of each hex\n hex.qc = hex.q - qmin;\n hex.rc = rmax - hex.r;\n // Calculate the x and y position of each hex for this svg\n hex.x = getX(hex, layout, hexWidth, hexRadius);\n hex.y = getY(hex, layout, hexWidth, hexRadius);\n // Add the vertex positions and points relative to x and y\n hex.vertices = vertices;\n hex.points = points;\n });\n return hexes;\n }\n // Get the x position for a hex\n function getX(hex, layout, hexWidth, hexRadius) {\n var x = 0, xOffset = 0;\n switch (layout) {\n case \"odd-r\":\n xOffset = (hex.rc % 2 === 1) ? hexWidth : (hexWidth / 2);\n x = (hex.qc * hexWidth) + xOffset;\n break;\n case \"even-r\":\n xOffset = (hex.rc % 2 === 0) ? hexWidth : (hexWidth / 2);\n x = (hex.qc * hexWidth) + xOffset;\n break;\n case \"odd-q\":\n case \"even-q\":\n x = (hex.qc * hexRadius * 1.5) + hexRadius;\n break;\n }\n return x;\n }\n // Get the y position for a hex\n function getY(hex, layout, hexWidth, hexRadius) {\n var y = 0, yOffset = 0;\n switch (layout) {\n case \"odd-r\":\n case \"even-r\":\n y = (hex.rc * hexRadius * 1.5) + hexRadius;\n break;\n case \"odd-q\":\n yOffset = (hex.qc % 2 === 1) ? hexWidth : (hexWidth / 2);\n y = (hex.rc * hexWidth) + yOffset;\n break;\n case \"even-q\":\n yOffset = (hex.qc % 2 === 0) ? hexWidth : (hexWidth / 2);\n y = (hex.rc * hexWidth) + yOffset;\n break;\n }\n return y;\n }\n // Get the positions of the vertices for the hex:\n // - Row layouts are ordered from the topmost vertex clockwise\n // - Column layouts are ordered from the leftmost vertex clockwise\n function getVertices(layout, hexWidth, hexRadius) {\n var vertices = [];\n switch (layout) {\n case \"odd-r\":\n case \"even-r\":\n vertices.push({ x: 0, y: (0 - hexRadius) });\n vertices.push({ x: (0 + hexWidth * 0.5), y: (0 - 0.5 * hexRadius) });\n vertices.push({ x: (0 + hexWidth * 0.5), y: (0 + 0.5 * hexRadius) });\n vertices.push({ x: 0, y: (0 + hexRadius) });\n vertices.push({ x: (0 - hexWidth * 0.5), y: (0 + 0.5 * hexRadius) });\n vertices.push({ x: (0 - hexWidth * 0.5), y: (0 - 0.5 * hexRadius) });\n break;\n case \"odd-q\":\n case \"even-q\":\n vertices.push({ x: (0 - hexRadius), y: 0 });\n vertices.push({ x: (0 - 0.5 * hexRadius), y: (0 - hexWidth * 0.5) });\n vertices.push({ x: (0 + 0.5 * hexRadius), y: (0 - hexWidth * 0.5) });\n vertices.push({ x: (0 + hexRadius), y: 0 });\n vertices.push({ x: (0 + 0.5 * hexRadius), y: (0 + hexWidth * 0.5) });\n vertices.push({ x: (0 - 0.5 * hexRadius), y: (0 + hexWidth * 0.5) });\n break;\n }\n return vertices;\n }\n // Get the points attribute for a polygon with these vertices\n function getPoints(vertices) {\n var points = \"\";\n vertices.forEach(function (v) { points += v.x + \",\" + v.y + \" \"; });\n return points.substring(0, points.length - 1);\n }\n // Creates a hexjson grid with the layout and dimensions of the given hexjson\n function getGridForHexJSON(hexjson) {\n // Create a new HexJSON object for the grid\n var grid = {};\n grid.layout = hexjson.layout;\n grid.hexes = {};\n // Get the hex objects from the hexjson as an array\n var hexes = [];\n Object.keys(hexjson.hexes).forEach(function (key) {\n hexes.push(hexjson.hexes[key]);\n });\n // Calculate the number of rows and columns in the grid\n var qmax = d3Array.max(hexes, function (d) { return +d.q; }), qmin = d3Array.min(hexes, function (d) { return +d.q; }), rmax = d3Array.max(hexes, function (d) { return +d.r; }), rmin = d3Array.min(hexes, function (d) { return +d.r; });\n // Create the hexjson grid\n var i, j, fkey;\n for (i = qmin; i <= qmax; i++) {\n for (j = rmin; j <= rmax; j++) {\n fkey = \"Q\" + i + \"R\" + j;\n grid.hexes[fkey] = { q: i, r: j };\n }\n }\n return grid;\n }\n // Creates a list of dots along the boundaries between\n // hexes which have different values of \"field\"\n function getBoundaryDotsForHexJSON(hexjson, width, height, field) {\n // Get the hex objects from the hexjson as an array\n var hexes = [];\n var layout = hexjson.layout;\n Object.keys(hexjson.hexes).forEach(function (key) {\n hexes.push(hexjson.hexes[key]);\n });\n // Calculate the number of rows and columns\n var qmax = d3Array.max(hexes, function (d) { return +d.q; }), qmin = d3Array.min(hexes, function (d) { return +d.q; }), rmax = d3Array.max(hexes, function (d) { return +d.r; }), rmin = d3Array.min(hexes, function (d) { return +d.r; });\n var qnum = qmax - qmin + 1, rnum = rmax - rmin + 1;\n var hexRadius;\n // Calculate maximum radius the hexagons can have to fit the svg\n if (layout === \"odd-r\" || layout === \"even-r\") {\n hexRadius = d3Array.min([(width) / ((qnum + 0.5) * Math.sqrt(3)),\n height / ((rnum + 1 / 3) * 1.5)]);\n }\n else {\n hexRadius = d3Array.min([(height) / ((rnum + 0.5) * Math.sqrt(3)),\n width / ((qnum + 1 / 3) * 1.5)]);\n }\n // Calculate the hexagon width\n var hexWidth = hexRadius * Math.sqrt(3);\n // Create an array into which we will put points along the\n // boundaries between differing hexes.\n // Each edge has five points, equally spaced.\n var lines = [];\n var hexRadiusSquared = hexRadius * hexRadius * 4;\n var maxHex = hexes.length;\n if (maxHex > 1) {\n hexes.forEach(function (hex) {\n hex.qc = hex.q - qmin;\n hex.rc = rmax - hex.r;\n // Calculate the x and y position of each hex for this svg\n hex.x = getX(hex, layout, hexWidth, hexRadius);\n hex.y = getY(hex, layout, hexWidth, hexRadius);\n });\n for (var i = 0; i < maxHex - 1; i++) {\n for (var j = i + 1; j < maxHex; j++) {\n var hex = hexes[i];\n var otherHex = hexes[j];\n if (hex[field] !== otherHex[field]) {\n if (Math.abs(hex.q - otherHex.q) <= 1 &&\n Math.abs(hex.r - otherHex.r) <= 1) {\n if (((hex.x - otherHex.x) * (hex.x - otherHex.x)) +\n ((hex.y - otherHex.y) * (hex.y - otherHex.y)) < hexRadiusSquared) {\n // They're neighbours\n var midpoint = {};\n midpoint.x = otherHex.x + (hex.x - otherHex.x) / 2;\n midpoint.y = otherHex.y + (hex.y - otherHex.y) / 2;\n var perp = {};\n var denom = Math.sqrt(3) * 4;\n perp.dx = (hex.y - otherHex.y) / denom;\n perp.dy = -(hex.x - otherHex.x) / denom;\n lines.push({ x: midpoint.x - 2 * perp.dx, y: midpoint.y - 2 * perp.dy });\n lines.push({ x: midpoint.x - perp.dx, y: midpoint.y - perp.dy });\n lines.push({ x: midpoint.x, y: midpoint.y });\n lines.push({ x: midpoint.x + perp.dx, y: midpoint.y + perp.dy });\n lines.push({ x: midpoint.x + 2 * perp.dx, y: midpoint.y + 2 * perp.dy });\n }\n }\n }\n }\n }\n }\n return lines;\n }\n // Creates a list of line segments along the boundaries\n // between hexes which have different values of \"field\"\n function getBoundarySegmentsForHexJSON(hexjson, width, height, field) {\n // Get the hex objects from the hexjson as an array\n var hexes = [];\n var layout = hexjson.layout;\n Object.keys(hexjson.hexes).forEach(function (key) {\n hexes.push(hexjson.hexes[key]);\n });\n // Calculate the number of rows and columns\n var qmax = d3Array.max(hexes, function (d) { return +d.q; }), qmin = d3Array.min(hexes, function (d) { return +d.q; }), rmax = d3Array.max(hexes, function (d) { return +d.r; }), rmin = d3Array.min(hexes, function (d) { return +d.r; });\n var qnum = qmax - qmin + 1, rnum = rmax - rmin + 1;\n var hexRadius;\n // Calculate maximum radius the hexagons can have to fit the svg\n if (layout === \"odd-r\" || layout === \"even-r\") {\n hexRadius = d3Array.min([(width) / ((qnum + 0.5) * Math.sqrt(3)),\n height / ((rnum + 1 / 3) * 1.5)]);\n }\n else {\n hexRadius = d3Array.min([(height) / ((rnum + 0.5) * Math.sqrt(3)),\n width / ((qnum + 1 / 3) * 1.5)]);\n }\n // Calculate the hexagon width\n var hexWidth = hexRadius * Math.sqrt(3);\n // Create an array into which we will put points along the\n // boundaries between differing hexes.\n // Each segment will be of the form\n // {x: <start point X>, y: <start point Y>, cx: <difference X>, cy: <difference Y> }\n // intended to be used with the simple line drawing functionality of d3\n //\n var segments = [];\n var hexRadiusSquared = hexRadius * hexRadius * 4;\n var maxHex = hexes.length;\n if (maxHex > 1) {\n hexes.forEach(function (hex) {\n hex.qc = hex.q - qmin;\n hex.rc = rmax - hex.r;\n // Calculate the x and y position of each hex for this svg\n hex.x = getX(hex, layout, hexWidth, hexRadius);\n hex.y = getY(hex, layout, hexWidth, hexRadius);\n });\n for (var i = 0; i < maxHex - 1; i++) {\n for (var j = i + 1; j < maxHex; j++) {\n var hex = hexes[i];\n var otherHex = hexes[j];\n if (hex[field] !== otherHex[field]) {\n if (Math.abs(hex.q - otherHex.q) <= 1 &&\n Math.abs(hex.r - otherHex.r) <= 1) {\n if (((hex.x - otherHex.x) * (hex.x - otherHex.x)) +\n ((hex.y - otherHex.y) * (hex.y - otherHex.y)) < hexRadiusSquared) {\n // They're neighbours\n var midpoint = {};\n midpoint.x = otherHex.x + (hex.x - otherHex.x) / 2;\n midpoint.y = otherHex.y + (hex.y - otherHex.y) / 2;\n var perp = {};\n var direction = +1;\n if (hex[field] < otherHex[field]) {\n direction = -1;\n } // otherwise, direction will be +1\n var denom = Math.sqrt(3) * 2 * direction;\n perp.dx = (hex.y - otherHex.y) / denom;\n perp.dy = -(hex.x - otherHex.x) / denom;\n segments.push({\n x1: midpoint.x - perp.dx,\n y1: midpoint.y - perp.dy,\n x2: midpoint.x + perp.dx,\n y2: midpoint.y + perp.dy\n });\n }\n }\n }\n }\n }\n }\n return segments;\n }\n exports.renderHexJSON = renderHexJSON;\n exports.getGridForHexJSON = getGridForHexJSON;\n exports.getBoundaryDotsForHexJSON = getBoundaryDotsForHexJSON;\n exports.getBoundarySegmentsForHexJSON = getBoundarySegmentsForHexJSON;\n Object.defineProperty(exports, '__esModule', { value: true });\n}));\n","// https://d3js.org/d3-hierarchy/ v1.1.9 Copyright 2019 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = global || self, factory(global.d3 = global.d3 || {}));\n}(this, function (exports) {\n 'use strict';\n function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n }\n function meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n }\n function meanXReduce(x, c) {\n return x + c.x;\n }\n function maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n }\n function maxYReduce(y, c) {\n return Math.max(y, c.y);\n }\n function leafLeft(node) {\n var children;\n while (children = node.children)\n node = children[0];\n return node;\n }\n function leafRight(node) {\n var children;\n while (children = node.children)\n node = children[children.length - 1];\n return node;\n }\n function cluster() {\n var separation = defaultSeparation, dx = 1, dy = 1, nodeSize = false;\n function cluster(root) {\n var previousNode, x = 0;\n // First walk, computing the initial x & y values.\n root.eachAfter(function (node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n }\n else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n var left = leafLeft(root), right = leafRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function (node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function (node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n cluster.separation = function (x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n cluster.size = function (x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n cluster.nodeSize = function (x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n return cluster;\n }\n function count(node) {\n var sum = 0, children = node.children, i = children && children.length;\n if (!i)\n sum = 1;\n else\n while (--i >= 0)\n sum += children[i].value;\n node.value = sum;\n }\n function node_count() {\n return this.eachAfter(count);\n }\n function node_each(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children)\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n }\n function node_eachBefore(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children)\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n }\n function node_eachAfter(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children)\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n }\n function node_sum(value) {\n return this.eachAfter(function (node) {\n var sum = +value(node.data) || 0, children = node.children, i = children && children.length;\n while (--i >= 0)\n sum += children[i].value;\n node.value = sum;\n });\n }\n function node_sort(compare) {\n return this.eachBefore(function (node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n }\n function node_path(end) {\n var start = this, ancestor = leastCommonAncestor(start, end), nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n }\n function leastCommonAncestor(a, b) {\n if (a === b)\n return a;\n var aNodes = a.ancestors(), bNodes = b.ancestors(), c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n }\n function node_ancestors() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n }\n function node_descendants() {\n var nodes = [];\n this.each(function (node) {\n nodes.push(node);\n });\n return nodes;\n }\n function node_leaves() {\n var leaves = [];\n this.eachBefore(function (node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n }\n function node_links() {\n var root = this, links = [];\n root.each(function (node) {\n if (node !== root) { // Dont include the roots parent, if any.\n links.push({ source: node.parent, target: node });\n }\n });\n return links;\n }\n function hierarchy(data, children) {\n var root = new Node(data), valued = +data.value && (root.value = data.value), node, nodes = [root], child, childs, i, n;\n if (children == null)\n children = defaultChildren;\n while (node = nodes.pop()) {\n if (valued)\n node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n return root.eachBefore(computeHeight);\n }\n function node_copy() {\n return hierarchy(this).eachBefore(copyData);\n }\n function defaultChildren(d) {\n return d.children;\n }\n function copyData(node) {\n node.data = node.data.data;\n }\n function computeHeight(node) {\n var height = 0;\n do\n node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n }\n function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n }\n Node.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n };\n var slice = Array.prototype.slice;\n function shuffle(array) {\n var m = array.length, t, i;\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n return array;\n }\n function enclose(circles) {\n var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p))\n ++i;\n else\n e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n return e;\n }\n function extendBasis(B, p) {\n var i, j;\n if (enclosesWeakAll(p, B))\n return [p];\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n // If we get here then something is very wrong.\n throw new Error;\n }\n function enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n }\n function enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n }\n function enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n }\n function encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n }\n function encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n }\n function encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r, x2 = b.x, y2 = b.y, r2 = b.r, x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n }\n function encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r, x2 = b.x, y2 = b.y, r2 = b.r, x3 = c.x, y3 = c.y, r3 = c.r, a2 = x1 - x2, a3 = x1 - x3, b2 = y1 - y2, b3 = y1 - y3, c2 = r2 - r1, c3 = r3 - r1, d1 = x1 * x1 + y1 * y1 - r1 * r1, d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, ab = a3 * b2 - a2 * b3, xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, xb = (b3 * c2 - b2 * c3) / ab, ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, yb = (a2 * c3 - a3 * c2) / ab, A = xb * xb + yb * yb - 1, B = 2 * (r1 + xa * xb + ya * yb), C = xa * xa + ya * ya - r1 * r1, r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n }\n function place(b, a, c) {\n var dx = b.x - a.x, x, a2, dy = b.y - a.y, y, b2, d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n }\n else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n }\n else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n }\n function intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n }\n function score(node) {\n var a = node._, b = node.next._, ab = a.r + b.r, dx = (a.x * b.r + b.x * a.r) / ab, dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n }\n function Node$1(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n }\n function packEnclose(circles) {\n if (!(n = circles.length))\n return 0;\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1))\n return a.r;\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2))\n return a.r + b.r;\n // Place the third circle.\n place(b, a, c = circles[2]);\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node$1(c);\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n }\n else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b;\n while ((c = c.next) !== b)\n a.push(c._);\n c = enclose(a);\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i)\n a = circles[i], a.x -= c.x, a.y -= c.y;\n return c.r;\n }\n function siblings(circles) {\n packEnclose(circles);\n return circles;\n }\n function optional(f) {\n return f == null ? null : required(f);\n }\n function required(f) {\n if (typeof f !== \"function\")\n throw new Error;\n return f;\n }\n function constantZero() {\n return 0;\n }\n function constant(x) {\n return function () {\n return x;\n };\n }\n function defaultRadius(d) {\n return Math.sqrt(d.value);\n }\n function index() {\n var radius = null, dx = 1, dy = 1, padding = constantZero;\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n }\n else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n pack.radius = function (x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n pack.size = function (x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n pack.padding = function (x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n return pack;\n }\n function radiusLeaf(radius) {\n return function (node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n }\n function packChildren(padding, k) {\n return function (node) {\n if (children = node.children) {\n var children, i, n = children.length, r = padding(node) * k || 0, e;\n if (r)\n for (i = 0; i < n; ++i)\n children[i].r += r;\n e = packEnclose(children);\n if (r)\n for (i = 0; i < n; ++i)\n children[i].r -= r;\n node.r = e + r;\n }\n };\n }\n function translateChild(k) {\n return function (node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n }\n function roundNode(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n }\n function treemapDice(parent, x0, y0, x1, y1) {\n var nodes = parent.children, node, i = -1, n = nodes.length, k = parent.value && (x1 - x0) / parent.value;\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n }\n function partition() {\n var dx = 1, dy = 1, padding = 0, round = false;\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round)\n root.eachBefore(roundNode);\n return root;\n }\n function positionNode(dy, n) {\n return function (node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0, y0 = node.y0, x1 = node.x1 - padding, y1 = node.y1 - padding;\n if (x1 < x0)\n x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0)\n y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n partition.round = function (x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n partition.size = function (x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n partition.padding = function (x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n return partition;\n }\n var keyPrefix = \"$\", // Protect against keys like “__proto__”.\n preroot = { depth: -1 }, ambiguous = {};\n function defaultId(d) {\n return d.id;\n }\n function defaultParentId(d) {\n return d.parentId;\n }\n function stratify() {\n var id = defaultId, parentId = defaultParentId;\n function stratify(data) {\n var d, i, n = data.length, root, parent, node, nodes = new Array(n), nodeId, nodeKey, nodeByKey = {};\n for (i = 0; i < n; ++i) {\n d = data[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = keyPrefix + (node.id = nodeId);\n nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n }\n }\n for (i = 0; i < n; ++i) {\n node = nodes[i], nodeId = parentId(data[i], i, data);\n if (nodeId == null || !(nodeId += \"\")) {\n if (root)\n throw new Error(\"multiple roots\");\n root = node;\n }\n else {\n parent = nodeByKey[keyPrefix + nodeId];\n if (!parent)\n throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous)\n throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children)\n parent.children.push(node);\n else\n parent.children = [node];\n node.parent = parent;\n }\n }\n if (!root)\n throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function (node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0)\n throw new Error(\"cycle\");\n return root;\n }\n stratify.id = function (x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n stratify.parentId = function (x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n return stratify;\n }\n function defaultSeparation$1(a, b) {\n return a.parent === b.parent ? 1 : 2;\n }\n // function radialSeparation(a, b) {\n // return (a.parent === b.parent ? 1 : 2) / a.depth;\n // }\n // This function is used to traverse the left contour of a subtree (or\n // subforest). It returns the successor of v on this contour. This successor is\n // either given by the leftmost child of v or by the thread of v. The function\n // returns null if and only if v is on the highest level of its subtree.\n function nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n }\n // This function works analogously to nextLeft.\n function nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n }\n // Shifts the current subtree rooted at w+. This is done by increasing\n // prelim(w+) and mod(w+) by shift.\n function moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n }\n // All other shifts, applied to the smaller subtrees between w- and w+, are\n // performed by this function. To prepare the shifts, we have to adjust\n // change(w+), shift(w+), and change(w-).\n function executeShifts(v) {\n var shift = 0, change = 0, children = v.children, i = children.length, w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n }\n // If vi-s ancestor is a sibling of v, returns vi-s ancestor. Otherwise,\n // returns the specified (default) ancestor.\n function nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n }\n function TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n }\n TreeNode.prototype = Object.create(Node.prototype);\n function treeRoot(root) {\n var tree = new TreeNode(root, 0), node, nodes = [tree], child, children, i, n;\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n }\n // Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\n function tree() {\n var separation = defaultSeparation$1, dx = 1, dy = 1, nodeSize = null;\n function tree(root) {\n var t = treeRoot(root);\n // Compute the layout using Buchheim et al.s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n // If a fixed node size is specified, scale x and y.\n if (nodeSize)\n root.eachBefore(sizeNode);\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root, right = root, bottom = root;\n root.eachBefore(function (node) {\n if (node.x < left.x)\n left = node;\n if (node.x > right.x)\n right = node;\n if (node.depth > bottom.depth)\n bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2, tx = s - left.x, kx = dx / (right.x + s + tx), ky = dy / (bottom.depth || 1);\n root.eachBefore(function (node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return root;\n }\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n }\n else {\n v.z = midpoint;\n }\n }\n else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n 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;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n tree.separation = function (x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n tree.size = function (x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n tree.nodeSize = function (x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n return tree;\n }\n function treemapSlice(parent, x0, y0, x1, y1) {\n var nodes = parent.children, node, i = -1, n = nodes.length, k = parent.value && (y1 - y0) / parent.value;\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n }\n var phi = (1 + Math.sqrt(5)) / 2;\n function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [], nodes = parent.children, row, nodeValue, i0 = 0, i1 = 0, n = nodes.length, dx, dy, value = parent.value, sumValue, minValue, maxValue, newRatio, minRatio, alpha, beta;\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n // Find the next non-empty node.\n do\n sumValue = nodes[i1++].value;\n while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue)\n minValue = nodeValue;\n if (nodeValue > maxValue)\n maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) {\n sumValue -= nodeValue;\n break;\n }\n minRatio = newRatio;\n }\n // Position and record the row orientation.\n rows.push(row = { value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1) });\n if (row.dice)\n treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else\n treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n return rows;\n }\n var squarify = (function custom(ratio) {\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n squarify.ratio = function (x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n return squarify;\n })(phi);\n function index$1() {\n var tile = squarify, round = false, dx = 1, dy = 1, paddingStack = [0], paddingInner = constantZero, paddingTop = constantZero, paddingRight = constantZero, paddingBottom = constantZero, paddingLeft = constantZero;\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round)\n root.eachBefore(roundNode);\n return root;\n }\n function positionNode(node) {\n var p = paddingStack[node.depth], x0 = node.x0 + p, y0 = node.y0 + p, x1 = node.x1 - p, y1 = node.y1 - p;\n if (x1 < x0)\n x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0)\n y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0)\n x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0)\n y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n treemap.round = function (x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n treemap.size = function (x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n treemap.tile = function (x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n treemap.padding = function (x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n treemap.paddingInner = function (x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n treemap.paddingOuter = function (x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n treemap.paddingTop = function (x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n treemap.paddingRight = function (x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n treemap.paddingBottom = function (x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n treemap.paddingLeft = function (x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n return treemap;\n }\n function binary(parent, x0, y0, x1, y1) {\n var nodes = parent.children, i, n = nodes.length, sum, sums = new Array(n + 1);\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n partition(0, n, parent.value, x0, y0, x1, y1);\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n var valueOffset = sums[i], valueTarget = (value / 2) + valueOffset, k = i + 1, hi = j - 1;\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget)\n k = mid + 1;\n else\n hi = mid;\n }\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k)\n --k;\n var valueLeft = sums[k] - valueOffset, valueRight = value - valueLeft;\n if ((x1 - x0) > (y1 - y0)) {\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n }\n else {\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n }\n function sliceDice(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);\n }\n var resquarify = (function custom(ratio) {\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows, row, nodes, i, j = -1, n, m = rows.length, value = parent.value;\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i)\n row.value += nodes[i].value;\n if (row.dice)\n treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n else\n treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n value -= row.value;\n }\n }\n else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n resquarify.ratio = function (x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n return resquarify;\n })(phi);\n exports.cluster = cluster;\n exports.hierarchy = hierarchy;\n exports.pack = index;\n exports.packEnclose = enclose;\n exports.packSiblings = siblings;\n exports.partition = partition;\n exports.stratify = stratify;\n exports.tree = tree;\n exports.treemap = index$1;\n exports.treemapBinary = binary;\n exports.treemapDice = treemapDice;\n exports.treemapResquarify = resquarify;\n exports.treemapSlice = treemapSlice;\n exports.treemapSliceDice = sliceDice;\n exports.treemapSquarify = squarify;\n Object.defineProperty(exports, '__esModule', { value: true });\n}));\n","// https://d3js.org/d3-path/ v1.0.9 Copyright 2019 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = global || self, factory(global.d3 = global.d3 || {}));\n}(this, function (exports) {\n 'use strict';\n var pi = Math.PI, tau = 2 * pi, epsilon = 1e-6, tauEpsilon = tau - epsilon;\n function Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n function path() {\n return new Path;\n }\n Path.prototype = path.prototype = {\n constructor: Path,\n moveTo: function (x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function () {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function (x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function (x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function (x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function (x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n 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;\n // Is the radius negative? Error.\n if (r < 0)\n throw new Error(\"negative radius: \" + r);\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon))\n ;\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n // Otherwise, draw an arc!\n else {\n 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;\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function (x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n 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;\n // Is the radius negative? Error.\n if (r < 0)\n throw new Error(\"negative radius: \" + r);\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n // Is this arc empty? Were done.\n if (!r)\n return;\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0)\n da = da % tau + tau;\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function (x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function () {\n return this._;\n }\n };\n exports.path = path;\n Object.defineProperty(exports, '__esModule', { value: true });\n}));\n","var tslib_1 = require(\"tslib\");\n// https://github.com/d3/d3-sankey v0.9.1 Copyright 2019 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array'), require('d3-collection'), require('d3-shape')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-collection', 'd3-shape'], factory) :\n (global = global || self, factory(global.d3 = global.d3 || {}, global.d3, global.d3, global.d3));\n}(this, function (exports, d3Array, d3Collection, d3Shape) {\n 'use strict';\n function targetDepth(d) {\n return d.target.depth;\n }\n function left(node) {\n return node.depth;\n }\n function right(node, n) {\n return n - 1 - node.height;\n }\n function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n }\n function center(node) {\n return node.targetLinks.length ? node.depth\n : node.sourceLinks.length ? d3Array.min(node.sourceLinks, targetDepth) - 1\n : 0;\n }\n function constant(x) {\n return function () {\n return x;\n };\n }\n function ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n }\n function ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n }\n function ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n }\n function value(d) {\n return d.value;\n }\n function defaultId(d) {\n return d.index;\n }\n function defaultNodes(graph) {\n return graph.nodes;\n }\n function defaultLinks(graph) {\n return graph.links;\n }\n function find(nodeById, id) {\n var node = nodeById.get(id);\n if (!node)\n throw new Error(\"missing: \" + id);\n return node;\n }\n function Sankey() {\n var x0 = 0, y0 = 0, x1 = 1, y1 = 1, // extent\n dx = 24, // nodeWidth\n py = 8, // nodePadding\n id = defaultId, align = justify, sort, nodes = defaultNodes, links = defaultLinks, iterations = 6;\n function sankey() {\n var graph = { nodes: nodes.apply(null, arguments), links: links.apply(null, arguments) };\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n sankey.update = function (graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n sankey.nodeId = function (_) {\n return arguments.length ? (id = typeof _ === \"function\" ? _ : constant(_), sankey) : id;\n };\n sankey.nodeAlign = function (_) {\n return arguments.length ? (align = typeof _ === \"function\" ? _ : constant(_), sankey) : align;\n };\n sankey.nodeSort = function (_) {\n return arguments.length ? (sort = _, sankey) : sort;\n };\n sankey.nodeWidth = function (_) {\n return arguments.length ? (dx = +_, sankey) : dx;\n };\n sankey.nodePadding = function (_) {\n return arguments.length ? (py = +_, sankey) : py;\n };\n sankey.nodes = function (_) {\n return arguments.length ? (nodes = typeof _ === \"function\" ? _ : constant(_), sankey) : nodes;\n };\n sankey.links = function (_) {\n return arguments.length ? (links = typeof _ === \"function\" ? _ : constant(_), sankey) : links;\n };\n sankey.size = function (_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0];\n };\n sankey.extent = function (_) {\n return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]];\n };\n sankey.iterations = function (_) {\n return arguments.length ? (iterations = +_, sankey) : iterations;\n };\n // Populate the sourceLinks and targetLinks for each node.\n // Also, if the source and target are not objects, assume they are indices.\n function computeNodeLinks(graph) {\n graph.nodes.forEach(function (node, i) {\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n var nodeById = d3Collection.map(graph.nodes, id);\n graph.links.forEach(function (link, i) {\n link.index = i;\n var source = link.source, target = link.target;\n if (typeof source !== \"object\")\n source = link.source = find(nodeById, source);\n if (typeof target !== \"object\")\n target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n });\n }\n // Compute the value (size) of each node by summing the associated links.\n function computeNodeValues(graph) {\n graph.nodes.forEach(function (node) {\n node.value = Math.max(d3Array.sum(node.sourceLinks, value), d3Array.sum(node.targetLinks, value));\n });\n }\n // Iteratively assign the depth (x-position) for each node.\n // Nodes are assigned the maximum depth of incoming neighbors plus one;\n // nodes with no incoming links are assigned depth zero, while\n // nodes with no outgoing links are assigned the maximum depth.\n function computeNodeDepths(graph) {\n var nodes, next, x, n = graph.nodes.length;\n for (nodes = graph.nodes, next = [], x = 0; nodes.length; ++x, nodes = next, next = []) {\n if (x > n)\n throw new Error(\"circular link\");\n nodes.forEach(function (node) {\n node.depth = x;\n node.sourceLinks.forEach(function (link) {\n if (next.indexOf(link.target) < 0) {\n next.push(link.target);\n }\n });\n });\n }\n for (nodes = graph.nodes, next = [], x = 0; nodes.length; ++x, nodes = next, next = []) {\n if (x > n)\n throw new Error(\"circular link\");\n nodes.forEach(function (node) {\n node.height = x;\n node.targetLinks.forEach(function (link) {\n if (next.indexOf(link.source) < 0) {\n next.push(link.source);\n }\n });\n });\n }\n var kx = (x1 - x0 - dx) / (x - 1);\n graph.nodes.forEach(function (node) {\n node.x1 = (node.x0 = x0 + Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x)))) * kx) + dx;\n });\n }\n function computeNodeBreadths(graph) {\n var columns = d3Collection.nest()\n .key(function (d) { return d.x0; })\n .sortKeys(d3Array.ascending)\n .entries(graph.nodes)\n .map(function (d) { return d.values; });\n //\n initializeNodeBreadth();\n resolveCollisions();\n for (var alpha = 0.9, n = iterations; n > 0; --n, alpha *= 0.9) {\n relaxRightToLeft(alpha);\n resolveCollisions();\n relaxLeftToRight(alpha);\n resolveCollisions();\n }\n function initializeNodeBreadth() {\n var ky = d3Array.min(columns, function (nodes) {\n return (y1 - y0 - (nodes.length - 1) * py) / d3Array.sum(nodes, value);\n });\n columns.forEach(function (nodes) {\n if (sort != null)\n nodes.sort(sort);\n nodes.forEach(function (node, i) {\n node.y1 = (node.y0 = i) + node.value * ky;\n });\n });\n graph.links.forEach(function (link) {\n link.width = link.value * ky;\n });\n }\n function relaxLeftToRight(alpha) {\n columns.forEach(function (nodes) {\n nodes.forEach(function (node) {\n var e_1, _a, e_2, _b;\n var y = node.y0;\n try {\n for (var _c = tslib_1.__values(node.sourceLinks.sort(ascendingTargetBreadth)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var _e = _d.value, target = _e.target, width = _e.width, value_1 = _e.value;\n if (value_1 > 0) {\n var dy = 0;\n try {\n for (var _f = (e_2 = void 0, tslib_1.__values(target.targetLinks)), _g = _f.next(); !_g.done; _g = _f.next()) {\n var _h = _g.value, source = _h.source, width_1 = _h.width;\n if (source === node)\n break;\n dy += width_1 + py / 2;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n }\n finally { if (e_2) throw e_2.error; }\n }\n dy = (y - dy - target.y0) * alpha * (value_1 / Math.min(node.value, target.value));\n target.y0 += dy;\n target.y1 += dy;\n }\n y += width + py / 2;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n });\n });\n }\n function relaxRightToLeft(alpha) {\n columns.slice().reverse().forEach(function (nodes) {\n nodes.forEach(function (node) {\n var e_3, _a, e_4, _b;\n var y = node.y0;\n try {\n for (var _c = tslib_1.__values(node.targetLinks.sort(ascendingSourceBreadth)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var _e = _d.value, source = _e.source, width = _e.width, value_2 = _e.value;\n if (value_2 > 0) {\n var dy = 0;\n try {\n for (var _f = (e_4 = void 0, tslib_1.__values(source.sourceLinks)), _g = _f.next(); !_g.done; _g = _f.next()) {\n var _h = _g.value, target = _h.target, width_2 = _h.width;\n if (target === node)\n break;\n dy += width_2 + py / 2;\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n }\n finally { if (e_4) throw e_4.error; }\n }\n dy = (y - dy - source.y0) * alpha * (value_2 / Math.min(node.value, source.value));\n source.y0 += dy;\n source.y1 += dy;\n }\n y += width + py / 2;\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_3) throw e_3.error; }\n }\n });\n });\n }\n function resolveCollisions() {\n columns.forEach(function (nodes) {\n var node, dy, y = y0, n = nodes.length, i;\n // Push any overlapping nodes down.\n if (sort === undefined)\n nodes.sort(ascendingBreadth);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dy = y - node.y0;\n if (dy > 0)\n node.y0 += dy, node.y1 += dy;\n y = node.y1 + py;\n }\n // If the bottommost node goes outside the bounds, push it back up.\n dy = y - py - y1;\n if (dy > 0) {\n y = (node.y0 -= dy), node.y1 -= dy;\n // Push any overlapping nodes back up.\n for (i = n - 2; i >= 0; --i) {\n node = nodes[i];\n dy = node.y1 + py - y;\n if (dy > 0)\n node.y0 -= dy, node.y1 -= dy;\n y = node.y0;\n }\n }\n });\n }\n }\n function computeLinkBreadths(graph) {\n graph.nodes.forEach(function (node) {\n node.sourceLinks.sort(ascendingTargetBreadth);\n node.targetLinks.sort(ascendingSourceBreadth);\n });\n graph.nodes.forEach(function (node) {\n var y0 = node.y0, y1 = y0;\n node.sourceLinks.forEach(function (link) {\n link.y0 = y0 + link.width / 2, y0 += link.width;\n });\n node.targetLinks.forEach(function (link) {\n link.y1 = y1 + link.width / 2, y1 += link.width;\n });\n });\n }\n return sankey;\n }\n function horizontalSource(d) {\n return [d.source.x1, d.y0];\n }\n function horizontalTarget(d) {\n return [d.target.x0, d.y1];\n }\n function sankeyLinkHorizontal() {\n return d3Shape.linkHorizontal()\n .source(horizontalSource)\n .target(horizontalTarget);\n }\n exports.sankey = Sankey;\n exports.sankeyCenter = center;\n exports.sankeyLeft = left;\n exports.sankeyRight = right;\n exports.sankeyJustify = justify;\n exports.sankeyLinkHorizontal = sankeyLinkHorizontal;\n Object.defineProperty(exports, '__esModule', { value: true });\n}));\n","// https://d3js.org/d3-shape/ v1.3.7 Copyright 2019 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-path')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-path'], factory) :\n (global = global || self, factory(global.d3 = global.d3 || {}, global.d3));\n}(this, function (exports, d3Path) {\n 'use strict';\n function constant(x) {\n return function constant() {\n return x;\n };\n }\n var abs = Math.abs;\n var atan2 = Math.atan2;\n var cos = Math.cos;\n var max = Math.max;\n var min = Math.min;\n var sin = Math.sin;\n var sqrt = Math.sqrt;\n var epsilon = 1e-12;\n var pi = Math.PI;\n var halfPi = pi / 2;\n var tau = 2 * pi;\n function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n }\n function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n }\n function arcInnerRadius(d) {\n return d.innerRadius;\n }\n function arcOuterRadius(d) {\n return d.outerRadius;\n }\n function arcStartAngle(d) {\n return d.startAngle;\n }\n function arcEndAngle(d) {\n return d.endAngle;\n }\n function arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n }\n function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0, x32 = x3 - x2, y32 = y3 - y2, t = y32 * x10 - x32 * y10;\n if (t * t < epsilon)\n return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n }\n // Compute perpendicular offset line of length rc.\n // http://mathworld.wolfram.com/Circle-LineIntersection.html\n function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1, y01 = y0 - y1, lo = (cw ? rc : -rc) / 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) * sqrt(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;\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1)\n cx0 = cx1, cy0 = cy1;\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n }\n function arc() {\n var innerRadius = arcInnerRadius, outerRadius = arcOuterRadius, cornerRadius = constant(0), padRadius = null, startAngle = arcStartAngle, endAngle = arcEndAngle, padAngle = arcPadAngle, context = null;\n function arc() {\n 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 = abs(a1 - a0), cw = a1 > a0;\n if (!context)\n context = buffer = d3Path.path();\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0)\n r = r1, r1 = r0, r0 = r;\n // Is it a point?\n if (!(r1 > epsilon))\n context.moveTo(0, 0);\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n // Or is it a circular or annular sector?\n else {\n 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) : sqrt(r0 * r0 + r1 * r1)), rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), rc0 = rc, rc1 = rc, t0, t1;\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)), p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon)\n p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else\n da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon)\n p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else\n da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n var x01 = r1 * cos(a01), y01 = r1 * sin(a01), x10 = r0 * cos(a10), y10 = r0 * sin(a10);\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11), y11 = r1 * sin(a11), x00 = r0 * cos(a00), y00 = r0 * sin(a00), oc;\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0], ay = y01 - oc[1], bx = x11 - oc[0], by = y11 - oc[1], kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2), lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon))\n context.moveTo(x01, y01);\n // Does the sectors outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n // Have the corners merged?\n if (rc1 < rc)\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n // Or is the outer ring just a circular arc?\n else\n context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n // Is there no inner ring, and its a circular sector?\n // Or perhaps its an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon))\n context.lineTo(x10, y10);\n // Does the sectors inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n // Have the corners merged?\n if (rc0 < rc)\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n // Or is the inner ring just a circular arc?\n else\n context.arc(0, 0, r0, a10, a00, cw);\n }\n context.closePath();\n if (buffer)\n return context = null, buffer + \"\" || null;\n }\n arc.centroid = function () {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n arc.innerRadius = function (_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n arc.outerRadius = function (_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n arc.cornerRadius = function (_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n arc.padRadius = function (_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n arc.startAngle = function (_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n arc.endAngle = function (_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n arc.padAngle = function (_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n arc.context = function (_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n return arc;\n }\n function Linear(context) {\n this._context = context;\n }\n Linear.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._point = 0;\n },\n lineEnd: function () {\n if (this._line || (this._line !== 0 && this._point === 1))\n this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function (x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);\n break;\n case 1: this._point = 2; // proceed\n default:\n this._context.lineTo(x, y);\n break;\n }\n }\n };\n function curveLinear(context) {\n return new Linear(context);\n }\n function x(p) {\n return p[0];\n }\n function y(p) {\n return p[1];\n }\n function line() {\n var x$1 = x, y$1 = y, defined = constant(true), context = null, curve = curveLinear, output = null;\n function line(data) {\n var i, n = data.length, d, defined0 = false, buffer;\n if (context == null)\n output = curve(buffer = d3Path.path());\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0)\n output.lineStart();\n else\n output.lineEnd();\n }\n if (defined0)\n output.point(+x$1(d, i, data), +y$1(d, i, data));\n }\n if (buffer)\n return output = null, buffer + \"\" || null;\n }\n line.x = function (_) {\n return arguments.length ? (x$1 = typeof _ === \"function\" ? _ : constant(+_), line) : x$1;\n };\n line.y = function (_) {\n return arguments.length ? (y$1 = typeof _ === \"function\" ? _ : constant(+_), line) : y$1;\n };\n line.defined = function (_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n line.curve = function (_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n line.context = function (_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n return line;\n }\n function area() {\n var x0 = x, x1 = null, y0 = constant(0), y1 = y, defined = constant(true), context = null, curve = curveLinear, output = null;\n function area(data) {\n var i, j, k, n = data.length, d, defined0 = false, buffer, x0z = new Array(n), y0z = new Array(n);\n if (context == null)\n output = curve(buffer = d3Path.path());\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n }\n else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n if (buffer)\n return output = null, buffer + \"\" || null;\n }\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n area.x = function (_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n area.x0 = function (_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n area.x1 = function (_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n area.y = function (_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n area.y0 = function (_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n area.y1 = function (_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n area.lineX0 =\n area.lineY0 = function () {\n return arealine().x(x0).y(y0);\n };\n area.lineY1 = function () {\n return arealine().x(x0).y(y1);\n };\n area.lineX1 = function () {\n return arealine().x(x1).y(y0);\n };\n area.defined = function (_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n area.curve = function (_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n area.context = function (_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n return area;\n }\n function descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n }\n function identity(d) {\n return d;\n }\n function pie() {\n var value = identity, sortValues = descending, sort = null, startAngle = constant(0), endAngle = constant(tau), padAngle = constant(0);\n function pie(data) {\n 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;\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null)\n index.sort(function (i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null)\n index.sort(function (i, j) { return sort(data[i], data[j]); });\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n return arcs;\n }\n pie.value = function (_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n pie.sortValues = function (_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n pie.sort = function (_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n pie.startAngle = function (_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n pie.endAngle = function (_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n pie.padAngle = function (_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n return pie;\n }\n var curveRadialLinear = curveRadial(curveLinear);\n function Radial(curve) {\n this._curve = curve;\n }\n Radial.prototype = {\n areaStart: function () {\n this._curve.areaStart();\n },\n areaEnd: function () {\n this._curve.areaEnd();\n },\n lineStart: function () {\n this._curve.lineStart();\n },\n lineEnd: function () {\n this._curve.lineEnd();\n },\n point: function (a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n };\n function curveRadial(curve) {\n function radial(context) {\n return new Radial(curve(context));\n }\n radial._curve = curve;\n return radial;\n }\n function lineRadial(l) {\n var c = l.curve;\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n l.curve = function (_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n return l;\n }\n function lineRadial$1() {\n return lineRadial(line().curve(curveRadialLinear));\n }\n function areaRadial() {\n var a = area().curve(curveRadialLinear), c = a.curve, x0 = a.lineX0, x1 = a.lineX1, y0 = a.lineY0, y1 = a.lineY1;\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function () { return lineRadial(x0()); }, delete a.lineX0;\n a.lineEndAngle = function () { return lineRadial(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function () { return lineRadial(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function () { return lineRadial(y1()); }, delete a.lineY1;\n a.curve = function (_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n return a;\n }\n function pointRadial(x, y) {\n return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n }\n var slice = Array.prototype.slice;\n function linkSource(d) {\n return d.source;\n }\n function linkTarget(d) {\n return d.target;\n }\n function link(curve) {\n var source = linkSource, target = linkTarget, x$1 = x, y$1 = y, context = null;\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context)\n context = buffer = d3Path.path();\n curve(context, +x$1.apply(this, (argv[0] = s, argv)), +y$1.apply(this, argv), +x$1.apply(this, (argv[0] = t, argv)), +y$1.apply(this, argv));\n if (buffer)\n return context = null, buffer + \"\" || null;\n }\n link.source = function (_) {\n return arguments.length ? (source = _, link) : source;\n };\n link.target = function (_) {\n return arguments.length ? (target = _, link) : target;\n };\n link.x = function (_) {\n return arguments.length ? (x$1 = typeof _ === \"function\" ? _ : constant(+_), link) : x$1;\n };\n link.y = function (_) {\n return arguments.length ? (y$1 = typeof _ === \"function\" ? _ : constant(+_), link) : y$1;\n };\n link.context = function (_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n return link;\n }\n function curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n }\n function curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n }\n function curveRadial$1(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0), p1 = pointRadial(x0, y0 = (y0 + y1) / 2), p2 = pointRadial(x1, y0), p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n }\n function linkHorizontal() {\n return link(curveHorizontal);\n }\n function linkVertical() {\n return link(curveVertical);\n }\n function linkRadial() {\n var l = link(curveRadial$1);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n }\n var circle = {\n draw: function (context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n };\n var cross = {\n draw: function (context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n };\n var tan30 = Math.sqrt(1 / 3), tan30_2 = tan30 * 2;\n var diamond = {\n draw: function (context, size) {\n var y = Math.sqrt(size / tan30_2), x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n };\n var ka = 0.89081309152928522810, kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10), kx = Math.sin(tau / 10) * kr, ky = -Math.cos(tau / 10) * kr;\n var star = {\n draw: function (context, size) {\n var r = Math.sqrt(size * ka), x = kx * r, y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5, c = Math.cos(a), s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n };\n var square = {\n draw: function (context, size) {\n var w = Math.sqrt(size), x = -w / 2;\n context.rect(x, x, w, w);\n }\n };\n var sqrt3 = Math.sqrt(3);\n var triangle = {\n draw: function (context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n };\n var c = -0.5, s = Math.sqrt(3) / 2, k = 1 / Math.sqrt(12), a = (k / 2 + 1) * 3;\n var wye = {\n draw: function (context, size) {\n var r = Math.sqrt(size / a), x0 = r / 2, y0 = r * k, x1 = x0, y1 = r * k + r, x2 = -x1, y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n };\n var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n ];\n function symbol() {\n var type = constant(circle), size = constant(64), context = null;\n function symbol() {\n var buffer;\n if (!context)\n context = buffer = d3Path.path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer)\n return context = null, buffer + \"\" || null;\n }\n symbol.type = function (_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n symbol.size = function (_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n symbol.context = function (_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n return symbol;\n }\n function noop() { }\n function point(that, x, y) {\n 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);\n }\n function Basis(context) {\n this._context = context;\n }\n Basis.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function () {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2:\n this._context.lineTo(this._x1, this._y1);\n break;\n }\n if (this._line || (this._line !== 0 && this._point === 1))\n this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function (x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);\n break;\n case 1:\n this._point = 2;\n break;\n case 2:\n this._point = 3;\n this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default:\n point(this, x, y);\n break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n };\n function basis(context) {\n return new Basis(context);\n }\n function BasisClosed(context) {\n this._context = context;\n }\n BasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function () {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function () {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function (x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0:\n this._point = 1;\n this._x2 = x, this._y2 = y;\n break;\n case 1:\n this._point = 2;\n this._x3 = x, this._y3 = y;\n break;\n case 2:\n this._point = 3;\n this._x4 = x, this._y4 = y;\n this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6);\n break;\n default:\n point(this, x, y);\n break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n };\n function basisClosed(context) {\n return new BasisClosed(context);\n }\n function BasisOpen(context) {\n this._context = context;\n }\n BasisOpen.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function () {\n if (this._line || (this._line !== 0 && this._point === 3))\n this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function (x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0:\n this._point = 1;\n break;\n case 1:\n this._point = 2;\n break;\n case 2:\n this._point = 3;\n var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6;\n this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0);\n break;\n case 3: this._point = 4; // proceed\n default:\n point(this, x, y);\n break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n };\n function basisOpen(context) {\n return new BasisOpen(context);\n }\n function Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n }\n Bundle.prototype = {\n lineStart: function () {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function () {\n var x = this._x, y = this._y, j = x.length - 1;\n if (j > 0) {\n var x0 = x[0], y0 = y[0], dx = x[j] - x0, dy = y[j] - y0, i = -1, t;\n while (++i <= j) {\n t = i / j;\n this._basis.point(this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), this._beta * y[i] + (1 - this._beta) * (y0 + t * dy));\n }\n }\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function (x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n };\n var bundle = (function custom(beta) {\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n bundle.beta = function (beta) {\n return custom(+beta);\n };\n return bundle;\n })(0.85);\n function point$1(that, x, y) {\n 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);\n }\n function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n }\n Cardinal.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function () {\n switch (this._point) {\n case 2:\n this._context.lineTo(this._x2, this._y2);\n break;\n case 3:\n point$1(this, this._x1, this._y1);\n break;\n }\n if (this._line || (this._line !== 0 && this._point === 1))\n this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function (x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);\n break;\n case 1:\n this._point = 2;\n this._x1 = x, this._y1 = y;\n break;\n case 2: this._point = 3; // proceed\n default:\n point$1(this, x, y);\n break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n };\n var cardinal = (function custom(tension) {\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n cardinal.tension = function (tension) {\n return custom(+tension);\n };\n return cardinal;\n })(0);\n function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n }\n CardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function () {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function () {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function (x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0:\n this._point = 1;\n this._x3 = x, this._y3 = y;\n break;\n case 1:\n this._point = 2;\n this._context.moveTo(this._x4 = x, this._y4 = y);\n break;\n case 2:\n this._point = 3;\n this._x5 = x, this._y5 = y;\n break;\n default:\n point$1(this, x, y);\n break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n };\n var cardinalClosed = (function custom(tension) {\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n cardinal.tension = function (tension) {\n return custom(+tension);\n };\n return cardinal;\n })(0);\n function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n }\n CardinalOpen.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function () {\n if (this._line || (this._line !== 0 && this._point === 3))\n this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function (x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0:\n this._point = 1;\n break;\n case 1:\n this._point = 2;\n break;\n case 2:\n this._point = 3;\n this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2);\n break;\n case 3: this._point = 4; // proceed\n default:\n point$1(this, x, y);\n break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n };\n var cardinalOpen = (function custom(tension) {\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n cardinal.tension = function (tension) {\n return custom(+tension);\n };\n return cardinal;\n })(0);\n function point$2(that, x, y) {\n var x1 = that._x1, y1 = that._y1, x2 = that._x2, y2 = that._y2;\n if (that._l01_a > epsilon) {\n 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);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n if (that._l23_a > epsilon) {\n 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);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n }\n function CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n }\n CatmullRom.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function () {\n switch (this._point) {\n case 2:\n this._context.lineTo(this._x2, this._y2);\n break;\n case 3:\n this.point(this._x2, this._y2);\n break;\n }\n if (this._line || (this._line !== 0 && this._point === 1))\n this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function (x, y) {\n x = +x, y = +y;\n if (this._point) {\n var x23 = this._x2 - x, y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);\n break;\n case 1:\n this._point = 2;\n break;\n case 2: this._point = 3; // proceed\n default:\n point$2(this, x, y);\n break;\n }\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n };\n var catmullRom = (function custom(alpha) {\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n catmullRom.alpha = function (alpha) {\n return custom(+alpha);\n };\n return catmullRom;\n })(0.5);\n function CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n }\n CatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function () {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function () {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function (x, y) {\n x = +x, y = +y;\n if (this._point) {\n var x23 = this._x2 - x, y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n switch (this._point) {\n case 0:\n this._point = 1;\n this._x3 = x, this._y3 = y;\n break;\n case 1:\n this._point = 2;\n this._context.moveTo(this._x4 = x, this._y4 = y);\n break;\n case 2:\n this._point = 3;\n this._x5 = x, this._y5 = y;\n break;\n default:\n point$2(this, x, y);\n break;\n }\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n };\n var catmullRomClosed = (function custom(alpha) {\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n catmullRom.alpha = function (alpha) {\n return custom(+alpha);\n };\n return catmullRom;\n })(0.5);\n function CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n }\n CatmullRomOpen.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function () {\n if (this._line || (this._line !== 0 && this._point === 3))\n this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function (x, y) {\n x = +x, y = +y;\n if (this._point) {\n var x23 = this._x2 - x, y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n switch (this._point) {\n case 0:\n this._point = 1;\n break;\n case 1:\n this._point = 2;\n break;\n case 2:\n this._point = 3;\n this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2);\n break;\n case 3: this._point = 4; // proceed\n default:\n point$2(this, x, y);\n break;\n }\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n };\n var catmullRomOpen = (function custom(alpha) {\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n catmullRom.alpha = function (alpha) {\n return custom(+alpha);\n };\n return catmullRom;\n })(0.5);\n function LinearClosed(context) {\n this._context = context;\n }\n LinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function () {\n this._point = 0;\n },\n lineEnd: function () {\n if (this._point)\n this._context.closePath();\n },\n point: function (x, y) {\n x = +x, y = +y;\n if (this._point)\n this._context.lineTo(x, y);\n else\n this._point = 1, this._context.moveTo(x, y);\n }\n };\n function linearClosed(context) {\n return new LinearClosed(context);\n }\n function sign(x) {\n return x < 0 ? -1 : 1;\n }\n // Calculate the slopes of the tangents (Hermite-type interpolation) based on\n // the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n // NOV(II), P. 443, 1990.\n function slope3(that, x2, y2) {\n 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);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n }\n // Calculate a one-sided slope.\n function slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n }\n // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n // \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\n function point$3(that, t0, t1) {\n var x0 = that._x0, y0 = that._y0, x1 = that._x1, y1 = that._y1, dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n }\n function MonotoneX(context) {\n this._context = context;\n }\n MonotoneX.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function () {\n switch (this._point) {\n case 2:\n this._context.lineTo(this._x1, this._y1);\n break;\n case 3:\n point$3(this, this._t0, slope2(this, this._t0));\n break;\n }\n if (this._line || (this._line !== 0 && this._point === 1))\n this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function (x, y) {\n var t1 = NaN;\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1)\n return; // Ignore coincident points.\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);\n break;\n case 1:\n this._point = 2;\n break;\n case 2:\n this._point = 3;\n point$3(this, slope2(this, t1 = slope3(this, x, y)), t1);\n break;\n default:\n point$3(this, this._t0, t1 = slope3(this, x, y));\n break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n };\n function MonotoneY(context) {\n this._context = new ReflectContext(context);\n }\n (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function (x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n };\n function ReflectContext(context) {\n this._context = context;\n }\n ReflectContext.prototype = {\n moveTo: function (x, y) { this._context.moveTo(y, x); },\n closePath: function () { this._context.closePath(); },\n lineTo: function (x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function (x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n };\n function monotoneX(context) {\n return new MonotoneX(context);\n }\n function monotoneY(context) {\n return new MonotoneY(context);\n }\n function Natural(context) {\n this._context = context;\n }\n Natural.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._x = [];\n this._y = [];\n },\n lineEnd: function () {\n var x = this._x, y = this._y, n = x.length;\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n }\n else {\n var px = controlPoints(x), py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n if (this._line || (this._line !== 0 && n === 1))\n this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function (x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n };\n // See https://www.particleincell.com/2012/bezier-splines/ for derivation.\n function controlPoints(x) {\n var i, n = x.length - 1, m, a = new Array(n), b = new Array(n), r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i)\n a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i)\n m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i)\n a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i)\n b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n }\n function natural(context) {\n return new Natural(context);\n }\n function Step(context, t) {\n this._context = context;\n this._t = t;\n }\n Step.prototype = {\n areaStart: function () {\n this._line = 0;\n },\n areaEnd: function () {\n this._line = NaN;\n },\n lineStart: function () {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function () {\n if (0 < this._t && this._t < 1 && this._point === 2)\n this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1))\n this._context.closePath();\n if (this._line >= 0)\n this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function (x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);\n break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n }\n else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n };\n function step(context) {\n return new Step(context, 0.5);\n }\n function stepBefore(context) {\n return new Step(context, 0);\n }\n function stepAfter(context) {\n return new Step(context, 1);\n }\n function none(series, order) {\n if (!((n = series.length) > 1))\n return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n }\n function none$1(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0)\n o[n] = n;\n return o;\n }\n function stackValue(d, key) {\n return d[key];\n }\n function stack() {\n var keys = constant([]), order = none$1, offset = none, value = stackValue;\n function stack(data) {\n var kz = keys.apply(this, arguments), i, m = data.length, n = kz.length, sz = new Array(n), oz;\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n offset(sz, oz);\n return sz;\n }\n stack.keys = function (_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n stack.value = function (_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n stack.order = function (_) {\n return arguments.length ? (order = _ == null ? none$1 : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n stack.offset = function (_) {\n return arguments.length ? (offset = _ == null ? none : _, stack) : offset;\n };\n return stack;\n }\n function expand(series, order) {\n if (!((n = series.length) > 0))\n return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i)\n y += series[i][j][1] || 0;\n if (y)\n for (i = 0; i < n; ++i)\n series[i][j][1] /= y;\n }\n none(series, order);\n }\n function diverging(series, order) {\n if (!((n = series.length) > 0))\n return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n }\n else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n }\n else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n }\n function silhouette(series, order) {\n if (!((n = series.length) > 0))\n return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i)\n y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none(series, order);\n }\n function wiggle(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0))\n return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]], sij0 = si[j][1] || 0, sij1 = si[j - 1][1] || 0, s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]], skj0 = sk[j][1] || 0, skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1)\n y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n }\n function appearance(series) {\n var peaks = series.map(peak);\n return none$1(series).sort(function (a, b) { return peaks[a] - peaks[b]; });\n }\n function peak(series) {\n var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n while (++i < n)\n if ((vi = +series[i][1]) > vj)\n vj = vi, j = i;\n return j;\n }\n function ascending(series) {\n var sums = series.map(sum);\n return none$1(series).sort(function (a, b) { return sums[a] - sums[b]; });\n }\n function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n)\n if (v = +series[i][1])\n s += v;\n return s;\n }\n function descending$1(series) {\n return ascending(series).reverse();\n }\n function insideOut(series) {\n var n = series.length, i, j, sums = series.map(sum), order = appearance(series), top = 0, bottom = 0, tops = [], bottoms = [];\n for (i = 0; i < n; ++i) {\n j = order[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n }\n else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n return bottoms.reverse().concat(tops);\n }\n function reverse(series) {\n return none$1(series).reverse();\n }\n exports.arc = arc;\n exports.area = area;\n exports.areaRadial = areaRadial;\n exports.curveBasis = basis;\n exports.curveBasisClosed = basisClosed;\n exports.curveBasisOpen = basisOpen;\n exports.curveBundle = bundle;\n exports.curveCardinal = cardinal;\n exports.curveCardinalClosed = cardinalClosed;\n exports.curveCardinalOpen = cardinalOpen;\n exports.curveCatmullRom = catmullRom;\n exports.curveCatmullRomClosed = catmullRomClosed;\n exports.curveCatmullRomOpen = catmullRomOpen;\n exports.curveLinear = curveLinear;\n exports.curveLinearClosed = linearClosed;\n exports.curveMonotoneX = monotoneX;\n exports.curveMonotoneY = monotoneY;\n exports.curveNatural = natural;\n exports.curveStep = step;\n exports.curveStepAfter = stepAfter;\n exports.curveStepBefore = stepBefore;\n exports.line = line;\n exports.lineRadial = lineRadial$1;\n exports.linkHorizontal = linkHorizontal;\n exports.linkRadial = linkRadial;\n exports.linkVertical = linkVertical;\n exports.pie = pie;\n exports.pointRadial = pointRadial;\n exports.radialArea = areaRadial;\n exports.radialLine = lineRadial$1;\n exports.stack = stack;\n exports.stackOffsetDiverging = diverging;\n exports.stackOffsetExpand = expand;\n exports.stackOffsetNone = none;\n exports.stackOffsetSilhouette = silhouette;\n exports.stackOffsetWiggle = wiggle;\n exports.stackOrderAppearance = appearance;\n exports.stackOrderAscending = ascending;\n exports.stackOrderDescending = descending$1;\n exports.stackOrderInsideOut = insideOut;\n exports.stackOrderNone = none$1;\n exports.stackOrderReverse = reverse;\n exports.symbol = symbol;\n exports.symbolCircle = circle;\n exports.symbolCross = cross;\n exports.symbolDiamond = diamond;\n exports.symbolSquare = square;\n exports.symbolStar = star;\n exports.symbolTriangle = triangle;\n exports.symbolWye = wye;\n exports.symbols = symbols;\n Object.defineProperty(exports, '__esModule', { value: true });\n}));\n","// https://d3js.org/d3-voronoi/ v1.1.4 Copyright 2018 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) {\n 'use strict';\n function constant(x) {\n return function () {\n return x;\n };\n }\n function x(d) {\n return d[0];\n }\n function y(d) {\n return d[1];\n }\n function RedBlackTree() {\n this._ = null; // root node\n }\n function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n }\n RedBlackTree.prototype = {\n constructor: RedBlackTree,\n insert: function (after, node) {\n var parent, grandpa, uncle;\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N)\n after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L)\n after = after.L;\n after.L = node;\n }\n else {\n after.R = node;\n }\n parent = after;\n }\n else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n }\n else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n }\n else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n }\n else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n }\n else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n remove: function (node) {\n if (node.N)\n node.N.P = node.P;\n if (node.P)\n node.P.N = node.N;\n node.N = node.P = null;\n var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n if (!left)\n next = right;\n else if (!right)\n next = left;\n else\n next = RedBlackFirst(right);\n if (parent) {\n if (parent.L === node)\n parent.L = next;\n else\n parent.R = next;\n }\n else {\n this._ = next;\n }\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n }\n else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n }\n else {\n red = node.C;\n node = next;\n }\n if (node)\n node.U = parent;\n if (red)\n return;\n if (node && node.C) {\n node.C = false;\n return;\n }\n do {\n if (node === this._)\n break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n }\n else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n if (node)\n node.C = false;\n }\n };\n function RedBlackRotateLeft(tree, node) {\n var p = node, q = node.R, parent = p.U;\n if (parent) {\n if (parent.L === p)\n parent.L = q;\n else\n parent.R = q;\n }\n else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R)\n p.R.U = p;\n q.L = p;\n }\n function RedBlackRotateRight(tree, node) {\n var p = node, q = node.L, parent = p.U;\n if (parent) {\n if (parent.L === p)\n parent.L = q;\n else\n parent.R = q;\n }\n else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L)\n p.L.U = p;\n q.R = p;\n }\n function RedBlackFirst(node) {\n while (node.L)\n node = node.L;\n return node;\n }\n function createEdge(left, right, v0, v1) {\n var edge = [null, null], index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0)\n setEdgeEnd(edge, left, right, v0);\n if (v1)\n setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n }\n function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n }\n function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n }\n else if (edge.left === right) {\n edge[1] = vertex;\n }\n else {\n edge[0] = vertex;\n }\n }\n // LiangBarsky line clipping.\n function clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0], b = edge[1], ax = a[0], ay = a[1], bx = b[0], by = b[1], t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n r = x0 - ax;\n if (!dx && r > 0)\n return;\n r /= dx;\n if (dx < 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n else if (dx > 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n r = x1 - ax;\n if (!dx && r < 0)\n return;\n r /= dx;\n if (dx < 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n else if (dx > 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n r = y0 - ay;\n if (!dy && r > 0)\n return;\n r /= dy;\n if (dy < 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n else if (dy > 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n r = y1 - ay;\n if (!dy && r < 0)\n return;\n r /= dy;\n if (dy < 0) {\n if (r > t1)\n return;\n if (r > t0)\n t0 = r;\n }\n else if (dy > 0) {\n if (r < t0)\n return;\n if (r < t1)\n t1 = r;\n }\n if (!(t0 > 0) && !(t1 < 1))\n return true; // TODO Better check?\n if (t0 > 0)\n edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1)\n edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n }\n function connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1)\n return true;\n var v0 = edge[0], left = edge.left, right = edge.right, lx = left[0], ly = left[1], rx = right[0], ry = right[1], fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n if (ry === ly) {\n if (fx < x0 || fx >= x1)\n return;\n if (lx > rx) {\n if (!v0)\n v0 = [fx, y0];\n else if (v0[1] >= y1)\n return;\n v1 = [fx, y1];\n }\n else {\n if (!v0)\n v0 = [fx, y1];\n else if (v0[1] < y0)\n return;\n v1 = [fx, y0];\n }\n }\n else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0)\n v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1)\n return;\n v1 = [(y1 - fb) / fm, y1];\n }\n else {\n if (!v0)\n v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0)\n return;\n v1 = [(y0 - fb) / fm, y0];\n }\n }\n else {\n if (ly < ry) {\n if (!v0)\n v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1)\n return;\n v1 = [x1, fm * x1 + fb];\n }\n else {\n if (!v0)\n v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0)\n return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n edge[0] = v0;\n edge[1] = v1;\n return true;\n }\n function clipEdges(x0, y0, x1, y1) {\n var i = edges.length, edge;\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n }\n function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n }\n function cellHalfedgeAngle(cell, edge) {\n var site = cell.site, va = edge.left, vb = edge.right;\n if (site === vb)\n vb = va, va = site;\n if (vb)\n return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va)\n va = edge[1], vb = edge[0];\n else\n va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n }\n function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n }\n function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n }\n function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m), array = new Array(m);\n for (j = 0; j < m; ++j)\n index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function (i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j)\n array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j)\n halfedges[j] = array[j];\n }\n }\n }\n function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length, iCell, cell, site, iHalfedge, halfedges, nHalfedges, start, startX, startY, end, endX, endY, cover = true;\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end, Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n if (nHalfedges)\n cover = false;\n }\n }\n // If there werent any edges, have the closest site cover the extent.\n // It doesnt matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc)\n dc = d2, cover = cell;\n }\n }\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1, edges.push(createBorderEdge(site, v01, v11)) - 1, edges.push(createBorderEdge(site, v11, v10)) - 1, edges.push(createBorderEdge(site, v10, v00)) - 1);\n }\n }\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n }\n var circlePool = [];\n var firstCircle;\n function Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n }\n function attachCircle(arc) {\n var lArc = arc.P, rArc = arc.N;\n if (!lArc || !rArc)\n return;\n var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n if (lSite === rSite)\n return;\n var bx = cSite[0], by = cSite[1], ax = lSite[0] - bx, ay = lSite[1] - by, cx = rSite[0] - bx, cy = rSite[1] - by;\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2)\n return;\n var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d;\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n arc.circle = circle;\n var before = null, node = circles._;\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L)\n node = node.L;\n else {\n before = node.P;\n break;\n }\n }\n else {\n if (node.R)\n node = node.R;\n else {\n before = node;\n break;\n }\n }\n }\n circles.insert(before, circle);\n if (!before)\n firstCircle = circle;\n }\n function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P)\n firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n }\n var beachPool = [];\n function Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n }\n function createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n }\n function detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n }\n function removeBeach(beach) {\n var circle = beach.circle, x = circle.x, y = circle.cy, vertex = [x, y], previous = beach.P, next = beach.N, disappearing = [beach];\n detachBeach(beach);\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n disappearing.unshift(lArc);\n detachCircle(lArc);\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n disappearing.push(rArc);\n detachCircle(rArc);\n var nArcs = disappearing.length, iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n }\n function addBeach(site) {\n var x = site[0], directrix = site[1], lArc, rArc, dxl, dxr, node = beaches._;\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon)\n node = node.L;\n else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n }\n else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n }\n else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n }\n else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n if (!lArc && !rArc)\n return;\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n var lSite = lArc.site, ax = lSite[0], ay = lSite[1], bx = site[0] - ax, by = site[1] - ay, rSite = rArc.site, cx = rSite[0] - ax, cy = rSite[1] - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n }\n function leftBreakPoint(arc, directrix) {\n var site = arc.site, rfocx = site[0], rfocy = site[1], pby2 = rfocy - directrix;\n if (!pby2)\n return rfocx;\n var lArc = arc.P;\n if (!lArc)\n return -Infinity;\n site = lArc.site;\n var lfocx = site[0], lfocy = site[1], plby2 = lfocy - directrix;\n if (!plby2)\n return lfocx;\n var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n if (aby2)\n return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n return (rfocx + lfocx) / 2;\n }\n function rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc)\n return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n }\n var epsilon = 1e-6;\n var epsilon2 = 1e-12;\n var beaches;\n var cells;\n var circles;\n var edges;\n function triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n }\n function lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n }\n function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(), x, y, circle;\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n }\n else if (circle) {\n removeBeach(circle.arc);\n }\n else {\n break;\n }\n }\n sortCellHalfedges();\n if (extent) {\n var x0 = +extent[0][0], y0 = +extent[0][1], x1 = +extent[1][0], y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n this.edges = edges;\n this.cells = cells;\n beaches =\n circles =\n edges =\n cells = null;\n }\n Diagram.prototype = {\n constructor: Diagram,\n polygons: function () {\n var edges = this.edges;\n return this.cells.map(function (cell) {\n var polygon = cell.halfedges.map(function (i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n triangles: function () {\n var triangles = [], edges = this.edges;\n this.cells.forEach(function (cell, i) {\n if (!(m = (halfedges = cell.halfedges).length))\n return;\n var site = cell.site, halfedges, j = -1, m, s0, e1 = edges[halfedges[m - 1]], s1 = e1.left === site ? e1.right : e1.left;\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n return triangles;\n },\n links: function () {\n return this.edges.filter(function (edge) {\n return edge.right;\n }).map(function (edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n find: function (x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1]))\n if (++i1 >= n)\n return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function (e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right))\n return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2)\n d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n that._found = i0;\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n };\n function voronoi() {\n var x$$1 = x, y$$1 = y, extent = null;\n function voronoi(data) {\n return new Diagram(data.map(function (d, i) {\n var s = [Math.round(x$$1(d, i, data) / epsilon) * epsilon, Math.round(y$$1(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n voronoi.polygons = function (data) {\n return voronoi(data).polygons();\n };\n voronoi.links = function (data) {\n return voronoi(data).links();\n };\n voronoi.triangles = function (data) {\n return voronoi(data).triangles();\n };\n voronoi.x = function (_) {\n return arguments.length ? (x$$1 = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x$$1;\n };\n voronoi.y = function (_) {\n return arguments.length ? (y$$1 = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y$$1;\n };\n voronoi.extent = function (_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n voronoi.size = function (_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n return voronoi;\n }\n exports.voronoi = voronoi;\n Object.defineProperty(exports, '__esModule', { value: true });\n})));\n","/*\nCopyright (c) 2012-2014 Chris Pettitt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nmodule.exports = {\n graphlib: require(\"./lib/graphlib\"),\n\n layout: require(\"./lib/layout\"),\n debug: require(\"./lib/debug\"),\n util: {\n time: require(\"./lib/util\").time,\n notime: require(\"./lib/util\").notime\n },\n version: require(\"./lib/version\")\n};\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar greedyFAS = require(\"./greedy-fas\");\n\nmodule.exports = {\n run: run,\n undo: undo\n};\n\nfunction run(g) {\n var fas = (g.graph().acyclicer === \"greedy\"\n ? greedyFAS(g, weightFn(g))\n : dfsFAS(g));\n _.forEach(fas, function(e) {\n var label = g.edge(e);\n g.removeEdge(e);\n label.forwardName = e.name;\n label.reversed = true;\n g.setEdge(e.w, e.v, label, _.uniqueId(\"rev\"));\n });\n\n function weightFn(g) {\n return function(e) {\n return g.edge(e).weight;\n };\n }\n}\n\nfunction dfsFAS(g) {\n var fas = [];\n var stack = {};\n var visited = {};\n\n function dfs(v) {\n if (_.has(visited, v)) {\n return;\n }\n visited[v] = true;\n stack[v] = true;\n _.forEach(g.outEdges(v), function(e) {\n if (_.has(stack, e.w)) {\n fas.push(e);\n } else {\n dfs(e.w);\n }\n });\n delete stack[v];\n }\n\n _.forEach(g.nodes(), dfs);\n return fas;\n}\n\nfunction undo(g) {\n _.forEach(g.edges(), function(e) {\n var label = g.edge(e);\n if (label.reversed) {\n g.removeEdge(e);\n\n var forwardName = label.forwardName;\n delete label.reversed;\n delete label.forwardName;\n g.setEdge(e.w, e.v, label, forwardName);\n }\n });\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = addBorderSegments;\n\nfunction addBorderSegments(g) {\n function dfs(v) {\n var children = g.children(v);\n var node = g.node(v);\n if (children.length) {\n _.forEach(children, dfs);\n }\n\n if (_.has(node, \"minRank\")) {\n node.borderLeft = [];\n node.borderRight = [];\n for (var rank = node.minRank, maxRank = node.maxRank + 1;\n rank < maxRank;\n ++rank) {\n addBorderNode(g, \"borderLeft\", \"_bl\", v, node, rank);\n addBorderNode(g, \"borderRight\", \"_br\", v, node, rank);\n }\n }\n }\n\n _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n var label = { width: 0, height: 0, rank: rank, borderType: prop };\n var prev = sgNode[prop][rank - 1];\n var curr = util.addDummyNode(g, \"border\", label, prefix);\n sgNode[prop][rank] = curr;\n g.setParent(curr, sg);\n if (prev) {\n g.setEdge(prev, curr, { weight: 1 });\n }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\n\nmodule.exports = {\n adjust: adjust,\n undo: undo\n};\n\nfunction adjust(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === \"lr\" || rankDir === \"rl\") {\n swapWidthHeight(g);\n }\n}\n\nfunction undo(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === \"bt\" || rankDir === \"rl\") {\n reverseY(g);\n }\n\n if (rankDir === \"lr\" || rankDir === \"rl\") {\n swapXY(g);\n swapWidthHeight(g);\n }\n}\n\nfunction swapWidthHeight(g) {\n _.forEach(g.nodes(), function(v) { swapWidthHeightOne(g.node(v)); });\n _.forEach(g.edges(), function(e) { swapWidthHeightOne(g.edge(e)); });\n}\n\nfunction swapWidthHeightOne(attrs) {\n var w = attrs.width;\n attrs.width = attrs.height;\n attrs.height = w;\n}\n\nfunction reverseY(g) {\n _.forEach(g.nodes(), function(v) { reverseYOne(g.node(v)); });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, reverseYOne);\n if (_.has(edge, \"y\")) {\n reverseYOne(edge);\n }\n });\n}\n\nfunction reverseYOne(attrs) {\n attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n _.forEach(g.nodes(), function(v) { swapXYOne(g.node(v)); });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, swapXYOne);\n if (_.has(edge, \"x\")) {\n swapXYOne(edge);\n }\n });\n}\n\nfunction swapXYOne(attrs) {\n var x = attrs.x;\n attrs.x = attrs.y;\n attrs.y = x;\n}\n","/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nmodule.exports = List;\n\nfunction List() {\n var sentinel = {};\n sentinel._next = sentinel._prev = sentinel;\n this._sentinel = sentinel;\n}\n\nList.prototype.dequeue = function() {\n var sentinel = this._sentinel;\n var entry = sentinel._prev;\n if (entry !== sentinel) {\n unlink(entry);\n return entry;\n }\n};\n\nList.prototype.enqueue = function(entry) {\n var sentinel = this._sentinel;\n if (entry._prev && entry._next) {\n unlink(entry);\n }\n entry._next = sentinel._next;\n sentinel._next._prev = entry;\n sentinel._next = entry;\n entry._prev = sentinel;\n};\n\nList.prototype.toString = function() {\n var strs = [];\n var sentinel = this._sentinel;\n var curr = sentinel._prev;\n while (curr !== sentinel) {\n strs.push(JSON.stringify(curr, filterOutLinks));\n curr = curr._prev;\n }\n return \"[\" + strs.join(\", \") + \"]\";\n};\n\nfunction unlink(entry) {\n entry._prev._next = entry._next;\n entry._next._prev = entry._prev;\n delete entry._next;\n delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n if (k !== \"_next\" && k !== \"_prev\") {\n return v;\n }\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n debugOrdering: debugOrdering\n};\n\n/* istanbul ignore next */\nfunction debugOrdering(g) {\n var layerMatrix = util.buildLayerMatrix(g);\n\n var h = new Graph({ compound: true, multigraph: true }).setGraph({});\n\n _.forEach(g.nodes(), function(v) {\n h.setNode(v, { label: v });\n h.setParent(v, \"layer\" + g.node(v).rank);\n });\n\n _.forEach(g.edges(), function(e) {\n h.setEdge(e.v, e.w, {}, e.name);\n });\n\n _.forEach(layerMatrix, function(layer, i) {\n var layerV = \"layer\" + i;\n h.setNode(layerV, { rank: \"same\" });\n _.reduce(layer, function(u, v) {\n h.setEdge(u, v, { style: \"invis\" });\n return v;\n });\n });\n\n return h;\n}\n","/* global window */\n\nvar graphlib;\n\nif (typeof require === \"function\") {\n try {\n graphlib = require(\"graphlib\");\n } catch (e) {\n // continue regardless of error\n }\n}\n\nif (!graphlib) {\n graphlib = window.graphlib;\n}\n\nmodule.exports = graphlib;\n","var _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\nvar List = require(\"./data/list\");\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nmodule.exports = greedyFAS;\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n if (g.nodeCount() <= 1) {\n return [];\n }\n var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n // Expand multi-edges\n return _.flatten(_.map(results, function(e) {\n return g.outEdges(e.v, e.w);\n }), true);\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n var results = [];\n var sources = buckets[buckets.length - 1];\n var sinks = buckets[0];\n\n var entry;\n while (g.nodeCount()) {\n while ((entry = sinks.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n while ((entry = sources.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n if (g.nodeCount()) {\n for (var i = buckets.length - 2; i > 0; --i) {\n entry = buckets[i].dequeue();\n if (entry) {\n results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n break;\n }\n }\n }\n }\n\n return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n var results = collectPredecessors ? [] : undefined;\n\n _.forEach(g.inEdges(entry.v), function(edge) {\n var weight = g.edge(edge);\n var uEntry = g.node(edge.v);\n\n if (collectPredecessors) {\n results.push({ v: edge.v, w: edge.w });\n }\n\n uEntry.out -= weight;\n assignBucket(buckets, zeroIdx, uEntry);\n });\n\n _.forEach(g.outEdges(entry.v), function(edge) {\n var weight = g.edge(edge);\n var w = edge.w;\n var wEntry = g.node(w);\n wEntry[\"in\"] -= weight;\n assignBucket(buckets, zeroIdx, wEntry);\n });\n\n g.removeNode(entry.v);\n\n return results;\n}\n\nfunction buildState(g, weightFn) {\n var fasGraph = new Graph();\n var maxIn = 0;\n var maxOut = 0;\n\n _.forEach(g.nodes(), function(v) {\n fasGraph.setNode(v, { v: v, \"in\": 0, out: 0 });\n });\n\n // Aggregate weights on nodes, but also sum the weights across multi-edges\n // into a single edge for the fasGraph.\n _.forEach(g.edges(), function(e) {\n var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n var weight = weightFn(e);\n var edgeWeight = prevWeight + weight;\n fasGraph.setEdge(e.v, e.w, edgeWeight);\n maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight);\n maxIn = Math.max(maxIn, fasGraph.node(e.w)[\"in\"] += weight);\n });\n\n var buckets = _.range(maxOut + maxIn + 3).map(function() { return new List(); });\n var zeroIdx = maxIn + 1;\n\n _.forEach(fasGraph.nodes(), function(v) {\n assignBucket(buckets, zeroIdx, fasGraph.node(v));\n });\n\n return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n if (!entry.out) {\n buckets[0].enqueue(entry);\n } else if (!entry[\"in\"]) {\n buckets[buckets.length - 1].enqueue(entry);\n } else {\n buckets[entry.out - entry[\"in\"] + zeroIdx].enqueue(entry);\n }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar acyclic = require(\"./acyclic\");\nvar normalize = require(\"./normalize\");\nvar rank = require(\"./rank\");\nvar normalizeRanks = require(\"./util\").normalizeRanks;\nvar parentDummyChains = require(\"./parent-dummy-chains\");\nvar removeEmptyRanks = require(\"./util\").removeEmptyRanks;\nvar nestingGraph = require(\"./nesting-graph\");\nvar addBorderSegments = require(\"./add-border-segments\");\nvar coordinateSystem = require(\"./coordinate-system\");\nvar order = require(\"./order\");\nvar position = require(\"./position\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = layout;\n\nfunction layout(g, opts) {\n var time = opts && opts.debugTiming ? util.time : util.notime;\n time(\"layout\", function() {\n var layoutGraph = \n time(\" buildLayoutGraph\", function() { return buildLayoutGraph(g); });\n time(\" runLayout\", function() { runLayout(layoutGraph, time); });\n time(\" updateInputGraph\", function() { updateInputGraph(g, layoutGraph); });\n });\n}\n\nfunction runLayout(g, time) {\n time(\" makeSpaceForEdgeLabels\", function() { makeSpaceForEdgeLabels(g); });\n time(\" removeSelfEdges\", function() { removeSelfEdges(g); });\n time(\" acyclic\", function() { acyclic.run(g); });\n time(\" nestingGraph.run\", function() { nestingGraph.run(g); });\n time(\" rank\", function() { rank(util.asNonCompoundGraph(g)); });\n time(\" injectEdgeLabelProxies\", function() { injectEdgeLabelProxies(g); });\n time(\" removeEmptyRanks\", function() { removeEmptyRanks(g); });\n time(\" nestingGraph.cleanup\", function() { nestingGraph.cleanup(g); });\n time(\" normalizeRanks\", function() { normalizeRanks(g); });\n time(\" assignRankMinMax\", function() { assignRankMinMax(g); });\n time(\" removeEdgeLabelProxies\", function() { removeEdgeLabelProxies(g); });\n time(\" normalize.run\", function() { normalize.run(g); });\n time(\" parentDummyChains\", function() { parentDummyChains(g); });\n time(\" addBorderSegments\", function() { addBorderSegments(g); });\n time(\" order\", function() { order(g); });\n time(\" insertSelfEdges\", function() { insertSelfEdges(g); });\n time(\" adjustCoordinateSystem\", function() { coordinateSystem.adjust(g); });\n time(\" position\", function() { position(g); });\n time(\" positionSelfEdges\", function() { positionSelfEdges(g); });\n time(\" removeBorderNodes\", function() { removeBorderNodes(g); });\n time(\" normalize.undo\", function() { normalize.undo(g); });\n time(\" fixupEdgeLabelCoords\", function() { fixupEdgeLabelCoords(g); });\n time(\" undoCoordinateSystem\", function() { coordinateSystem.undo(g); });\n time(\" translateGraph\", function() { translateGraph(g); });\n time(\" assignNodeIntersects\", function() { assignNodeIntersects(g); });\n time(\" reversePoints\", function() { reversePointsForReversedEdges(g); });\n time(\" acyclic.undo\", function() { acyclic.undo(g); });\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n _.forEach(inputGraph.nodes(), function(v) {\n var inputLabel = inputGraph.node(v);\n var layoutLabel = layoutGraph.node(v);\n\n if (inputLabel) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n\n if (layoutGraph.children(v).length) {\n inputLabel.width = layoutLabel.width;\n inputLabel.height = layoutLabel.height;\n }\n }\n });\n\n _.forEach(inputGraph.edges(), function(e) {\n var inputLabel = inputGraph.edge(e);\n var layoutLabel = layoutGraph.edge(e);\n\n inputLabel.points = layoutLabel.points;\n if (_.has(layoutLabel, \"x\")) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n }\n });\n\n inputGraph.graph().width = layoutGraph.graph().width;\n inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = [\"nodesep\", \"edgesep\", \"ranksep\", \"marginx\", \"marginy\"];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: \"tb\" };\nvar graphAttrs = [\"acyclicer\", \"ranker\", \"rankdir\", \"align\"];\nvar nodeNumAttrs = [\"width\", \"height\"];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = [\"minlen\", \"weight\", \"width\", \"height\", \"labeloffset\"];\nvar edgeDefaults = {\n minlen: 1, weight: 1, width: 0, height: 0,\n labeloffset: 10, labelpos: \"r\"\n};\nvar edgeAttrs = [\"labelpos\"];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n var g = new Graph({ multigraph: true, compound: true });\n var graph = canonicalize(inputGraph.graph());\n\n g.setGraph(_.merge({},\n graphDefaults,\n selectNumberAttrs(graph, graphNumAttrs),\n _.pick(graph, graphAttrs)));\n\n _.forEach(inputGraph.nodes(), function(v) {\n var node = canonicalize(inputGraph.node(v));\n g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n g.setParent(v, inputGraph.parent(v));\n });\n\n _.forEach(inputGraph.edges(), function(e) {\n var edge = canonicalize(inputGraph.edge(e));\n g.setEdge(e, _.merge({},\n edgeDefaults,\n selectNumberAttrs(edge, edgeNumAttrs),\n _.pick(edge, edgeAttrs)));\n });\n\n return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n var graph = g.graph();\n graph.ranksep /= 2;\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n edge.minlen *= 2;\n if (edge.labelpos.toLowerCase() !== \"c\") {\n if (graph.rankdir === \"TB\" || graph.rankdir === \"BT\") {\n edge.width += edge.labeloffset;\n } else {\n edge.height += edge.labeloffset;\n }\n }\n });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.width && edge.height) {\n var v = g.node(e.v);\n var w = g.node(e.w);\n var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n util.addDummyNode(g, \"edge-proxy\", label, \"_ep\");\n }\n });\n}\n\nfunction assignRankMinMax(g) {\n var maxRank = 0;\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.borderTop) {\n node.minRank = g.node(node.borderTop).rank;\n node.maxRank = g.node(node.borderBottom).rank;\n maxRank = _.max(maxRank, node.maxRank);\n }\n });\n g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.dummy === \"edge-proxy\") {\n g.edge(node.e).labelRank = node.rank;\n g.removeNode(v);\n }\n });\n}\n\nfunction translateGraph(g) {\n var minX = Number.POSITIVE_INFINITY;\n var maxX = 0;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = 0;\n var graphLabel = g.graph();\n var marginX = graphLabel.marginx || 0;\n var marginY = graphLabel.marginy || 0;\n\n function getExtremes(attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n minX = Math.min(minX, x - w / 2);\n maxX = Math.max(maxX, x + w / 2);\n minY = Math.min(minY, y - h / 2);\n maxY = Math.max(maxY, y + h / 2);\n }\n\n _.forEach(g.nodes(), function(v) { getExtremes(g.node(v)); });\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (_.has(edge, \"x\")) {\n getExtremes(edge);\n }\n });\n\n minX -= marginX;\n minY -= marginY;\n\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n node.x -= minX;\n node.y -= minY;\n });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, function(p) {\n p.x -= minX;\n p.y -= minY;\n });\n if (_.has(edge, \"x\")) { edge.x -= minX; }\n if (_.has(edge, \"y\")) { edge.y -= minY; }\n });\n\n graphLabel.width = maxX - minX + marginX;\n graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n var nodeV = g.node(e.v);\n var nodeW = g.node(e.w);\n var p1, p2;\n if (!edge.points) {\n edge.points = [];\n p1 = nodeW;\n p2 = nodeV;\n } else {\n p1 = edge.points[0];\n p2 = edge.points[edge.points.length - 1];\n }\n edge.points.unshift(util.intersectRect(nodeV, p1));\n edge.points.push(util.intersectRect(nodeW, p2));\n });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (_.has(edge, \"x\")) {\n if (edge.labelpos === \"l\" || edge.labelpos === \"r\") {\n edge.width -= edge.labeloffset;\n }\n switch (edge.labelpos) {\n case \"l\": edge.x -= edge.width / 2 + edge.labeloffset; break;\n case \"r\": edge.x += edge.width / 2 + edge.labeloffset; break;\n }\n }\n });\n}\n\nfunction reversePointsForReversedEdges(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.reversed) {\n edge.points.reverse();\n }\n });\n}\n\nfunction removeBorderNodes(g) {\n _.forEach(g.nodes(), function(v) {\n if (g.children(v).length) {\n var node = g.node(v);\n var t = g.node(node.borderTop);\n var b = g.node(node.borderBottom);\n var l = g.node(_.last(node.borderLeft));\n var r = g.node(_.last(node.borderRight));\n\n node.width = Math.abs(r.x - l.x);\n node.height = Math.abs(b.y - t.y);\n node.x = l.x + node.width / 2;\n node.y = t.y + node.height / 2;\n }\n });\n\n _.forEach(g.nodes(), function(v) {\n if (g.node(v).dummy === \"border\") {\n g.removeNode(v);\n }\n });\n}\n\nfunction removeSelfEdges(g) {\n _.forEach(g.edges(), function(e) {\n if (e.v === e.w) {\n var node = g.node(e.v);\n if (!node.selfEdges) {\n node.selfEdges = [];\n }\n node.selfEdges.push({ e: e, label: g.edge(e) });\n g.removeEdge(e);\n }\n });\n}\n\nfunction insertSelfEdges(g) {\n var layers = util.buildLayerMatrix(g);\n _.forEach(layers, function(layer) {\n var orderShift = 0;\n _.forEach(layer, function(v, i) {\n var node = g.node(v);\n node.order = i + orderShift;\n _.forEach(node.selfEdges, function(selfEdge) {\n util.addDummyNode(g, \"selfedge\", {\n width: selfEdge.label.width,\n height: selfEdge.label.height,\n rank: node.rank,\n order: i + (++orderShift),\n e: selfEdge.e,\n label: selfEdge.label\n }, \"_se\");\n });\n delete node.selfEdges;\n });\n });\n}\n\nfunction positionSelfEdges(g) {\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.dummy === \"selfedge\") {\n var selfNode = g.node(node.e.v);\n var x = selfNode.x + selfNode.width / 2;\n var y = selfNode.y;\n var dx = node.x - x;\n var dy = selfNode.height / 2;\n g.setEdge(node.e, node.label);\n g.removeNode(v);\n node.label.points = [\n { x: x + 2 * dx / 3, y: y - dy },\n { x: x + 5 * dx / 6, y: y - dy },\n { x: x + dx , y: y },\n { x: x + 5 * dx / 6, y: y + dy },\n { x: x + 2 * dx / 3, y: y + dy }\n ];\n node.label.x = node.x;\n node.label.y = node.y;\n }\n });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n var newAttrs = {};\n _.forEach(attrs, function(v, k) {\n newAttrs[k.toLowerCase()] = v;\n });\n return newAttrs;\n}\n","/* global window */\n\nvar lodash;\n\nif (typeof require === \"function\") {\n try {\n lodash = {\n cloneDeep: require(\"lodash/cloneDeep\"),\n constant: require(\"lodash/constant\"),\n defaults: require(\"lodash/defaults\"),\n each: require(\"lodash/each\"),\n filter: require(\"lodash/filter\"),\n find: require(\"lodash/find\"),\n flatten: require(\"lodash/flatten\"),\n forEach: require(\"lodash/forEach\"),\n forIn: require(\"lodash/forIn\"),\n has: require(\"lodash/has\"),\n isUndefined: require(\"lodash/isUndefined\"),\n last: require(\"lodash/last\"),\n map: require(\"lodash/map\"),\n mapValues: require(\"lodash/mapValues\"),\n max: require(\"lodash/max\"),\n merge: require(\"lodash/merge\"),\n min: require(\"lodash/min\"),\n minBy: require(\"lodash/minBy\"),\n now: require(\"lodash/now\"),\n pick: require(\"lodash/pick\"),\n range: require(\"lodash/range\"),\n reduce: require(\"lodash/reduce\"),\n sortBy: require(\"lodash/sortBy\"),\n uniqueId: require(\"lodash/uniqueId\"),\n values: require(\"lodash/values\"),\n zipObject: require(\"lodash/zipObject\"),\n };\n } catch (e) {\n // continue regardless of error\n }\n}\n\nif (!lodash) {\n lodash = window._;\n}\n\nmodule.exports = lodash;\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n run: run,\n cleanup: cleanup\n};\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n * 1. Input graph is a DAG\n * 2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n * 1. Input graph is connected.\n * 2. Dummy nodes are added for the tops and bottoms of subgraphs.\n * 3. The minlen attribute for nodes is adjusted to ensure nodes do not\n * get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n var root = util.addDummyNode(g, \"root\", {}, \"_root\");\n var depths = treeDepths(g);\n var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n var nodeSep = 2 * height + 1;\n\n g.graph().nestingRoot = root;\n\n // Multiply minlen by nodeSep to align nodes on non-border ranks.\n _.forEach(g.edges(), function(e) { g.edge(e).minlen *= nodeSep; });\n\n // Calculate a weight that is sufficient to keep subgraphs vertically compact\n var weight = sumWeights(g) + 1;\n\n // Create border nodes and link them up\n _.forEach(g.children(), function(child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n });\n\n // Save the multiplier for node layers for later removal of empty border\n // layers.\n g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n var children = g.children(v);\n if (!children.length) {\n if (v !== root) {\n g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n }\n return;\n }\n\n var top = util.addBorderNode(g, \"_bt\");\n var bottom = util.addBorderNode(g, \"_bb\");\n var label = g.node(v);\n\n g.setParent(top, v);\n label.borderTop = top;\n g.setParent(bottom, v);\n label.borderBottom = bottom;\n\n _.forEach(children, function(child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n\n var childNode = g.node(child);\n var childTop = childNode.borderTop ? childNode.borderTop : child;\n var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n var thisWeight = childNode.borderTop ? weight : 2 * weight;\n var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n g.setEdge(top, childTop, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true\n });\n\n g.setEdge(childBottom, bottom, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true\n });\n });\n\n if (!g.parent(v)) {\n g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n }\n}\n\nfunction treeDepths(g) {\n var depths = {};\n function dfs(v, depth) {\n var children = g.children(v);\n if (children && children.length) {\n _.forEach(children, function(child) {\n dfs(child, depth + 1);\n });\n }\n depths[v] = depth;\n }\n _.forEach(g.children(), function(v) { dfs(v, 1); });\n return depths;\n}\n\nfunction sumWeights(g) {\n return _.reduce(g.edges(), function(acc, e) {\n return acc + g.edge(e).weight;\n }, 0);\n}\n\nfunction cleanup(g) {\n var graphLabel = g.graph();\n g.removeNode(graphLabel.nestingRoot);\n delete graphLabel.nestingRoot;\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.nestingEdge) {\n g.removeEdge(e);\n }\n });\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n run: run,\n undo: undo\n};\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n * 1. The input graph is a DAG.\n * 2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n * 1. All edges in the graph have a length of 1.\n * 2. Dummy nodes are added where edges have been split into segments.\n * 3. The graph is augmented with a \"dummyChains\" attribute which contains\n * the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n g.graph().dummyChains = [];\n _.forEach(g.edges(), function(edge) { normalizeEdge(g, edge); });\n}\n\nfunction normalizeEdge(g, e) {\n var v = e.v;\n var vRank = g.node(v).rank;\n var w = e.w;\n var wRank = g.node(w).rank;\n var name = e.name;\n var edgeLabel = g.edge(e);\n var labelRank = edgeLabel.labelRank;\n\n if (wRank === vRank + 1) return;\n\n g.removeEdge(e);\n\n var dummy, attrs, i;\n for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n edgeLabel.points = [];\n attrs = {\n width: 0, height: 0,\n edgeLabel: edgeLabel, edgeObj: e,\n rank: vRank\n };\n dummy = util.addDummyNode(g, \"edge\", attrs, \"_d\");\n if (vRank === labelRank) {\n attrs.width = edgeLabel.width;\n attrs.height = edgeLabel.height;\n attrs.dummy = \"edge-label\";\n attrs.labelpos = edgeLabel.labelpos;\n }\n g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n if (i === 0) {\n g.graph().dummyChains.push(dummy);\n }\n v = dummy;\n }\n\n g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n _.forEach(g.graph().dummyChains, function(v) {\n var node = g.node(v);\n var origLabel = node.edgeLabel;\n var w;\n g.setEdge(node.edgeObj, origLabel);\n while (node.dummy) {\n w = g.successors(v)[0];\n g.removeNode(v);\n origLabel.points.push({ x: node.x, y: node.y });\n if (node.dummy === \"edge-label\") {\n origLabel.x = node.x;\n origLabel.y = node.y;\n origLabel.width = node.width;\n origLabel.height = node.height;\n }\n v = w;\n node = g.node(v);\n }\n });\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = addSubgraphConstraints;\n\nfunction addSubgraphConstraints(g, cg, vs) {\n var prev = {},\n rootPrev;\n\n _.forEach(vs, function(v) {\n var child = g.parent(v),\n parent,\n prevChild;\n while (child) {\n parent = g.parent(child);\n if (parent) {\n prevChild = prev[parent];\n prev[parent] = child;\n } else {\n prevChild = rootPrev;\n rootPrev = child;\n }\n if (prevChild && prevChild !== child) {\n cg.setEdge(prevChild, child);\n return;\n }\n child = parent;\n }\n });\n\n /*\n function dfs(v) {\n var children = v ? g.children(v) : g.children();\n if (children.length) {\n var min = Number.POSITIVE_INFINITY,\n subgraphs = [];\n _.each(children, function(child) {\n var childMin = dfs(child);\n if (g.children(child).length) {\n subgraphs.push({ v: child, order: childMin });\n }\n min = Math.min(min, childMin);\n });\n _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n cg.setEdge(prev.v, curr.v);\n return curr;\n });\n return min;\n }\n return g.node(v).order;\n }\n dfs(undefined);\n */\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = barycenter;\n\nfunction barycenter(g, movable) {\n return _.map(movable, function(v) {\n var inV = g.inEdges(v);\n if (!inV.length) {\n return { v: v };\n } else {\n var result = _.reduce(inV, function(acc, e) {\n var edge = g.edge(e),\n nodeU = g.node(e.v);\n return {\n sum: acc.sum + (edge.weight * nodeU.order),\n weight: acc.weight + edge.weight\n };\n }, { sum: 0, weight: 0 });\n\n return {\n v: v,\n barycenter: result.sum / result.weight,\n weight: result.weight\n };\n }\n });\n}\n\n","var _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\n\nmodule.exports = buildLayerGraph;\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG\n * 2. Base nodes in the input graph have a rank attribute\n * 3. Subgraph nodes in the input graph has minRank and maxRank attributes\n * 4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n * 1. Output graph has all nodes in the movable rank with preserved\n * hierarchy.\n * 2. Root nodes in the movable layer are made children of the node\n * indicated by the root attribute of the graph.\n * 3. Non-movable nodes incident on movable nodes, selected by the\n * relationship parameter, are included in the graph (without hierarchy).\n * 4. Edges incident on movable nodes, selected by the relationship\n * parameter, are added to the output graph.\n * 5. The weights for copied edges are aggregated as need, since the output\n * graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n var root = createRootNode(g),\n result = new Graph({ compound: true }).setGraph({ root: root })\n .setDefaultNodeLabel(function(v) { return g.node(v); });\n\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v),\n parent = g.parent(v);\n\n if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) {\n result.setNode(v);\n result.setParent(v, parent || root);\n\n // This assumes we have only short edges!\n _.forEach(g[relationship](v), function(e) {\n var u = e.v === v ? e.w : e.v,\n edge = result.edge(u, v),\n weight = !_.isUndefined(edge) ? edge.weight : 0;\n result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n });\n\n if (_.has(node, \"minRank\")) {\n result.setNode(v, {\n borderLeft: node.borderLeft[rank],\n borderRight: node.borderRight[rank]\n });\n }\n }\n });\n\n return result;\n}\n\nfunction createRootNode(g) {\n var v;\n while (g.hasNode((v = _.uniqueId(\"_root\"))));\n return v;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = crossCount;\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n * 1. Input graph must be simple (not a multigraph), directed, and include\n * only simple edges.\n * 2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n * 1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n var cc = 0;\n for (var i = 1; i < layering.length; ++i) {\n cc += twoLayerCrossCount(g, layering[i-1], layering[i]);\n }\n return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n // Sort all of the edges between the north and south layers by their position\n // in the north layer and then the south. Map these edges to the position of\n // their head in the south layer.\n var southPos = _.zipObject(southLayer,\n _.map(southLayer, function (v, i) { return i; }));\n var southEntries = _.flatten(_.map(northLayer, function(v) {\n return _.sortBy(_.map(g.outEdges(v), function(e) {\n return { pos: southPos[e.w], weight: g.edge(e).weight };\n }), \"pos\");\n }), true);\n\n // Build the accumulator tree\n var firstIndex = 1;\n while (firstIndex < southLayer.length) firstIndex <<= 1;\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = _.map(new Array(treeSize), function() { return 0; });\n\n // Calculate the weighted crossings\n var cc = 0;\n _.forEach(southEntries.forEach(function(entry) {\n var index = entry.pos + firstIndex;\n tree[index] += entry.weight;\n var weightSum = 0;\n while (index > 0) {\n if (index % 2) {\n weightSum += tree[index + 1];\n }\n index = (index - 1) >> 1;\n tree[index] += entry.weight;\n }\n cc += entry.weight * weightSum;\n }));\n\n return cc;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar initOrder = require(\"./init-order\");\nvar crossCount = require(\"./cross-count\");\nvar sortSubgraph = require(\"./sort-subgraph\");\nvar buildLayerGraph = require(\"./build-layer-graph\");\nvar addSubgraphConstraints = require(\"./add-subgraph-constraints\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\nmodule.exports = order;\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n * 1. Graph must be DAG\n * 2. Graph nodes must be objects with a \"rank\" attribute\n * 3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have an \"order\" attribute based on the results of the\n * algorithm.\n */\nfunction order(g) {\n var maxRank = util.maxRank(g),\n downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), \"inEdges\"),\n upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), \"outEdges\");\n\n var layering = initOrder(g);\n assignOrder(g, layering);\n\n var bestCC = Number.POSITIVE_INFINITY,\n best;\n\n for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n layering = util.buildLayerMatrix(g);\n var cc = crossCount(g, layering);\n if (cc < bestCC) {\n lastBest = 0;\n best = _.cloneDeep(layering);\n bestCC = cc;\n }\n }\n\n assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n return _.map(ranks, function(rank) {\n return buildLayerGraph(g, rank, relationship);\n });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n var cg = new Graph();\n _.forEach(layerGraphs, function(lg) {\n var root = lg.graph().root;\n var sorted = sortSubgraph(lg, root, cg, biasRight);\n _.forEach(sorted.vs, function(v, i) {\n lg.node(v).order = i;\n });\n addSubgraphConstraints(lg, cg, sorted.vs);\n });\n}\n\nfunction assignOrder(g, layering) {\n _.forEach(layering, function(layer) {\n _.forEach(layer, function(v, i) {\n g.node(v).order = i;\n });\n });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = initOrder;\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nfunction initOrder(g) {\n var visited = {};\n var simpleNodes = _.filter(g.nodes(), function(v) {\n return !g.children(v).length;\n });\n var maxRank = _.max(_.map(simpleNodes, function(v) { return g.node(v).rank; }));\n var layers = _.map(_.range(maxRank + 1), function() { return []; });\n\n function dfs(v) {\n if (_.has(visited, v)) return;\n visited[v] = true;\n var node = g.node(v);\n layers[node.rank].push(v);\n _.forEach(g.successors(v), dfs);\n }\n\n var orderedVs = _.sortBy(simpleNodes, function(v) { return g.node(v).rank; });\n _.forEach(orderedVs, dfs);\n\n return layers;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = resolveConflicts;\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n * 1. Each entry has the form {v, barycenter, weight}, or if the node has\n * no barycenter, then {v}.\n *\n * Returns:\n *\n * A new list of entries of the form {vs, i, barycenter, weight}. The list\n * `vs` may either be a singleton or it may be an aggregation of nodes\n * ordered such that they do not violate constraints from the constraint\n * graph. The property `i` is the lowest original index of any of the\n * elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n var mappedEntries = {};\n _.forEach(entries, function(entry, i) {\n var tmp = mappedEntries[entry.v] = {\n indegree: 0,\n \"in\": [],\n out: [],\n vs: [entry.v],\n i: i\n };\n if (!_.isUndefined(entry.barycenter)) {\n tmp.barycenter = entry.barycenter;\n tmp.weight = entry.weight;\n }\n });\n\n _.forEach(cg.edges(), function(e) {\n var entryV = mappedEntries[e.v];\n var entryW = mappedEntries[e.w];\n if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n entryW.indegree++;\n entryV.out.push(mappedEntries[e.w]);\n }\n });\n\n var sourceSet = _.filter(mappedEntries, function(entry) {\n return !entry.indegree;\n });\n\n return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n var entries = [];\n\n function handleIn(vEntry) {\n return function(uEntry) {\n if (uEntry.merged) {\n return;\n }\n if (_.isUndefined(uEntry.barycenter) ||\n _.isUndefined(vEntry.barycenter) ||\n uEntry.barycenter >= vEntry.barycenter) {\n mergeEntries(vEntry, uEntry);\n }\n };\n }\n\n function handleOut(vEntry) {\n return function(wEntry) {\n wEntry[\"in\"].push(vEntry);\n if (--wEntry.indegree === 0) {\n sourceSet.push(wEntry);\n }\n };\n }\n\n while (sourceSet.length) {\n var entry = sourceSet.pop();\n entries.push(entry);\n _.forEach(entry[\"in\"].reverse(), handleIn(entry));\n _.forEach(entry.out, handleOut(entry));\n }\n\n return _.map(_.filter(entries, function(entry) { return !entry.merged; }),\n function(entry) {\n return _.pick(entry, [\"vs\", \"i\", \"barycenter\", \"weight\"]);\n });\n\n}\n\nfunction mergeEntries(target, source) {\n var sum = 0;\n var weight = 0;\n\n if (target.weight) {\n sum += target.barycenter * target.weight;\n weight += target.weight;\n }\n\n if (source.weight) {\n sum += source.barycenter * source.weight;\n weight += source.weight;\n }\n\n target.vs = source.vs.concat(target.vs);\n target.barycenter = sum / weight;\n target.weight = weight;\n target.i = Math.min(source.i, target.i);\n source.merged = true;\n}\n","var _ = require(\"../lodash\");\nvar barycenter = require(\"./barycenter\");\nvar resolveConflicts = require(\"./resolve-conflicts\");\nvar sort = require(\"./sort\");\n\nmodule.exports = sortSubgraph;\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n var movable = g.children(v);\n var node = g.node(v);\n var bl = node ? node.borderLeft : undefined;\n var br = node ? node.borderRight: undefined;\n var subgraphs = {};\n\n if (bl) {\n movable = _.filter(movable, function(w) {\n return w !== bl && w !== br;\n });\n }\n\n var barycenters = barycenter(g, movable);\n _.forEach(barycenters, function(entry) {\n if (g.children(entry.v).length) {\n var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n subgraphs[entry.v] = subgraphResult;\n if (_.has(subgraphResult, \"barycenter\")) {\n mergeBarycenters(entry, subgraphResult);\n }\n }\n });\n\n var entries = resolveConflicts(barycenters, cg);\n expandSubgraphs(entries, subgraphs);\n\n var result = sort(entries, biasRight);\n\n if (bl) {\n result.vs = _.flatten([bl, result.vs, br], true);\n if (g.predecessors(bl).length) {\n var blPred = g.node(g.predecessors(bl)[0]),\n brPred = g.node(g.predecessors(br)[0]);\n if (!_.has(result, \"barycenter\")) {\n result.barycenter = 0;\n result.weight = 0;\n }\n result.barycenter = (result.barycenter * result.weight +\n blPred.order + brPred.order) / (result.weight + 2);\n result.weight += 2;\n }\n }\n\n return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n _.forEach(entries, function(entry) {\n entry.vs = _.flatten(entry.vs.map(function(v) {\n if (subgraphs[v]) {\n return subgraphs[v].vs;\n }\n return v;\n }), true);\n });\n}\n\nfunction mergeBarycenters(target, other) {\n if (!_.isUndefined(target.barycenter)) {\n target.barycenter = (target.barycenter * target.weight +\n other.barycenter * other.weight) /\n (target.weight + other.weight);\n target.weight += other.weight;\n } else {\n target.barycenter = other.barycenter;\n target.weight = other.weight;\n }\n}\n","var _ = require(\"../lodash\");\nvar util = require(\"../util\");\n\nmodule.exports = sort;\n\nfunction sort(entries, biasRight) {\n var parts = util.partition(entries, function(entry) {\n return _.has(entry, \"barycenter\");\n });\n var sortable = parts.lhs,\n unsortable = _.sortBy(parts.rhs, function(entry) { return -entry.i; }),\n vs = [],\n sum = 0,\n weight = 0,\n vsIndex = 0;\n\n sortable.sort(compareWithBias(!!biasRight));\n\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n _.forEach(sortable, function (entry) {\n vsIndex += entry.vs.length;\n vs.push(entry.vs);\n sum += entry.barycenter * entry.weight;\n weight += entry.weight;\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n });\n\n var result = { vs: _.flatten(vs, true) };\n if (weight) {\n result.barycenter = sum / weight;\n result.weight = weight;\n }\n return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n var last;\n while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n unsortable.pop();\n vs.push(last.vs);\n index++;\n }\n return index;\n}\n\nfunction compareWithBias(bias) {\n return function(entryV, entryW) {\n if (entryV.barycenter < entryW.barycenter) {\n return -1;\n } else if (entryV.barycenter > entryW.barycenter) {\n return 1;\n }\n\n return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n };\n}\n","var _ = require(\"./lodash\");\n\nmodule.exports = parentDummyChains;\n\nfunction parentDummyChains(g) {\n var postorderNums = postorder(g);\n\n _.forEach(g.graph().dummyChains, function(v) {\n var node = g.node(v);\n var edgeObj = node.edgeObj;\n var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n var path = pathData.path;\n var lca = pathData.lca;\n var pathIdx = 0;\n var pathV = path[pathIdx];\n var ascending = true;\n\n while (v !== edgeObj.w) {\n node = g.node(v);\n\n if (ascending) {\n while ((pathV = path[pathIdx]) !== lca &&\n g.node(pathV).maxRank < node.rank) {\n pathIdx++;\n }\n\n if (pathV === lca) {\n ascending = false;\n }\n }\n\n if (!ascending) {\n while (pathIdx < path.length - 1 &&\n g.node(pathV = path[pathIdx + 1]).minRank <= node.rank) {\n pathIdx++;\n }\n pathV = path[pathIdx];\n }\n\n g.setParent(v, pathV);\n v = g.successors(v)[0];\n }\n });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n var vPath = [];\n var wPath = [];\n var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n var parent;\n var lca;\n\n // Traverse up from v to find the LCA\n parent = v;\n do {\n parent = g.parent(parent);\n vPath.push(parent);\n } while (parent &&\n (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n lca = parent;\n\n // Traverse from w to LCA\n parent = w;\n while ((parent = g.parent(parent)) !== lca) {\n wPath.push(parent);\n }\n\n return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n var result = {};\n var lim = 0;\n\n function dfs(v) {\n var low = lim;\n _.forEach(g.children(v), dfs);\n result[v] = { low: low, lim: lim++ };\n }\n _.forEach(g.children(), dfs);\n\n return result;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nmodule.exports = {\n positionX: positionX,\n findType1Conflicts: findType1Conflicts,\n findType2Conflicts: findType2Conflicts,\n addConflict: addConflict,\n hasConflict: hasConflict,\n verticalAlignment: verticalAlignment,\n horizontalCompaction: horizontalCompaction,\n alignCoordinates: alignCoordinates,\n findSmallestWidthAlignment: findSmallestWidthAlignment,\n balance: balance\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n var conflicts = {};\n\n function visitLayer(prevLayer, layer) {\n var\n // last visited node in the previous layer that is incident on an inner\n // segment.\n k0 = 0,\n // Tracks the last node in this layer scanned for crossings with a type-1\n // segment.\n scanPos = 0,\n prevLayerLength = prevLayer.length,\n lastNode = _.last(layer);\n\n _.forEach(layer, function(v, i) {\n var w = findOtherInnerSegmentNode(g, v),\n k1 = w ? g.node(w).order : prevLayerLength;\n\n if (w || v === lastNode) {\n _.forEach(layer.slice(scanPos, i +1), function(scanNode) {\n _.forEach(g.predecessors(scanNode), function(u) {\n var uLabel = g.node(u),\n uPos = uLabel.order;\n if ((uPos < k0 || k1 < uPos) &&\n !(uLabel.dummy && g.node(scanNode).dummy)) {\n addConflict(conflicts, u, scanNode);\n }\n });\n });\n scanPos = i + 1;\n k0 = k1;\n }\n });\n\n return layer;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n var conflicts = {};\n\n function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n var v;\n _.forEach(_.range(southPos, southEnd), function(i) {\n v = south[i];\n if (g.node(v).dummy) {\n _.forEach(g.predecessors(v), function(u) {\n var uNode = g.node(u);\n if (uNode.dummy &&\n (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n addConflict(conflicts, u, v);\n }\n });\n }\n });\n }\n\n\n function visitLayer(north, south) {\n var prevNorthPos = -1,\n nextNorthPos,\n southPos = 0;\n\n _.forEach(south, function(v, southLookahead) {\n if (g.node(v).dummy === \"border\") {\n var predecessors = g.predecessors(v);\n if (predecessors.length) {\n nextNorthPos = g.node(predecessors[0]).order;\n scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n southPos = southLookahead;\n prevNorthPos = nextNorthPos;\n }\n }\n scan(south, southPos, south.length, nextNorthPos, north.length);\n });\n\n return south;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n if (g.node(v).dummy) {\n return _.find(g.predecessors(v), function(u) {\n return g.node(u).dummy;\n });\n }\n}\n\nfunction addConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n\n var conflictsV = conflicts[v];\n if (!conflictsV) {\n conflicts[v] = conflictsV = {};\n }\n conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return _.has(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n var root = {},\n align = {},\n pos = {};\n\n // We cache the position here based on the layering because the graph and\n // layering may be out of sync. The layering matrix is manipulated to\n // generate different extreme alignments.\n _.forEach(layering, function(layer) {\n _.forEach(layer, function(v, order) {\n root[v] = v;\n align[v] = v;\n pos[v] = order;\n });\n });\n\n _.forEach(layering, function(layer) {\n var prevIdx = -1;\n _.forEach(layer, function(v) {\n var ws = neighborFn(v);\n if (ws.length) {\n ws = _.sortBy(ws, function(w) { return pos[w]; });\n var mp = (ws.length - 1) / 2;\n for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n var w = ws[i];\n if (align[v] === v &&\n prevIdx < pos[w] &&\n !hasConflict(conflicts, v, w)) {\n align[w] = v;\n align[v] = root[v] = root[w];\n prevIdx = pos[w];\n }\n }\n }\n });\n });\n\n return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n // This portion of the algorithm differs from BK due to a number of problems.\n // Instead of their algorithm we construct a new block graph and do two\n // sweeps. The first sweep places blocks with the smallest possible\n // coordinates. The second sweep removes unused space by moving blocks to the\n // greatest coordinates without violating separation.\n var xs = {},\n blockG = buildBlockGraph(g, layering, root, reverseSep),\n borderType = reverseSep ? \"borderLeft\" : \"borderRight\";\n\n function iterate(setXsFunc, nextNodesFunc) {\n var stack = blockG.nodes();\n var elem = stack.pop();\n var visited = {};\n while (elem) {\n if (visited[elem]) {\n setXsFunc(elem);\n } else {\n visited[elem] = true;\n stack.push(elem);\n stack = stack.concat(nextNodesFunc(elem));\n }\n\n elem = stack.pop();\n }\n }\n\n // First pass, assign smallest coordinates\n function pass1(elem) {\n xs[elem] = blockG.inEdges(elem).reduce(function(acc, e) {\n return Math.max(acc, xs[e.v] + blockG.edge(e));\n }, 0);\n }\n\n // Second pass, assign greatest coordinates\n function pass2(elem) {\n var min = blockG.outEdges(elem).reduce(function(acc, e) {\n return Math.min(acc, xs[e.w] - blockG.edge(e));\n }, Number.POSITIVE_INFINITY);\n\n var node = g.node(elem);\n if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n xs[elem] = Math.max(xs[elem], min);\n }\n }\n\n iterate(pass1, blockG.predecessors.bind(blockG));\n iterate(pass2, blockG.successors.bind(blockG));\n\n // Assign x coordinates to all nodes\n _.forEach(align, function(v) {\n xs[v] = xs[root[v]];\n });\n\n return xs;\n}\n\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n var blockGraph = new Graph(),\n graphLabel = g.graph(),\n sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n _.forEach(layering, function(layer) {\n var u;\n _.forEach(layer, function(v) {\n var vRoot = root[v];\n blockGraph.setNode(vRoot);\n if (u) {\n var uRoot = root[u],\n prevMax = blockGraph.edge(uRoot, vRoot);\n blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n }\n u = v;\n });\n });\n\n return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n return _.minBy(_.values(xss), function (xs) {\n var max = Number.NEGATIVE_INFINITY;\n var min = Number.POSITIVE_INFINITY;\n\n _.forIn(xs, function (x, v) {\n var halfWidth = width(g, v) / 2;\n\n max = Math.max(x + halfWidth, max);\n min = Math.min(x - halfWidth, min);\n });\n\n return max - min;\n });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n var alignToVals = _.values(alignTo),\n alignToMin = _.min(alignToVals),\n alignToMax = _.max(alignToVals);\n\n _.forEach([\"u\", \"d\"], function(vert) {\n _.forEach([\"l\", \"r\"], function(horiz) {\n var alignment = vert + horiz,\n xs = xss[alignment],\n delta;\n if (xs === alignTo) return;\n\n var xsVals = _.values(xs);\n delta = horiz === \"l\" ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n if (delta) {\n xss[alignment] = _.mapValues(xs, function(x) { return x + delta; });\n }\n });\n });\n}\n\nfunction balance(xss, align) {\n return _.mapValues(xss.ul, function(ignore, v) {\n if (align) {\n return xss[align.toLowerCase()][v];\n } else {\n var xs = _.sortBy(_.map(xss, v));\n return (xs[1] + xs[2]) / 2;\n }\n });\n}\n\nfunction positionX(g) {\n var layering = util.buildLayerMatrix(g);\n var conflicts = _.merge(\n findType1Conflicts(g, layering),\n findType2Conflicts(g, layering));\n\n var xss = {};\n var adjustedLayering;\n _.forEach([\"u\", \"d\"], function(vert) {\n adjustedLayering = vert === \"u\" ? layering : _.values(layering).reverse();\n _.forEach([\"l\", \"r\"], function(horiz) {\n if (horiz === \"r\") {\n adjustedLayering = _.map(adjustedLayering, function(inner) {\n return _.values(inner).reverse();\n });\n }\n\n var neighborFn = (vert === \"u\" ? g.predecessors : g.successors).bind(g);\n var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n var xs = horizontalCompaction(g, adjustedLayering,\n align.root, align.align, horiz === \"r\");\n if (horiz === \"r\") {\n xs = _.mapValues(xs, function(x) { return -x; });\n }\n xss[vert + horiz] = xs;\n });\n });\n\n var smallestWidth = findSmallestWidthAlignment(g, xss);\n alignCoordinates(xss, smallestWidth);\n return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n return function(g, v, w) {\n var vLabel = g.node(v);\n var wLabel = g.node(w);\n var sum = 0;\n var delta;\n\n sum += vLabel.width / 2;\n if (_.has(vLabel, \"labelpos\")) {\n switch (vLabel.labelpos.toLowerCase()) {\n case \"l\": delta = -vLabel.width / 2; break;\n case \"r\": delta = vLabel.width / 2; break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n sum += wLabel.width / 2;\n if (_.has(wLabel, \"labelpos\")) {\n switch (wLabel.labelpos.toLowerCase()) {\n case \"l\": delta = wLabel.width / 2; break;\n case \"r\": delta = -wLabel.width / 2; break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n return sum;\n };\n}\n\nfunction width(g, v) {\n return g.node(v).width;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar util = require(\"../util\");\nvar positionX = require(\"./bk\").positionX;\n\nmodule.exports = position;\n\nfunction position(g) {\n g = util.asNonCompoundGraph(g);\n\n positionY(g);\n _.forEach(positionX(g), function(x, v) {\n g.node(v).x = x;\n });\n}\n\nfunction positionY(g) {\n var layering = util.buildLayerMatrix(g);\n var rankSep = g.graph().ranksep;\n var prevY = 0;\n _.forEach(layering, function(layer) {\n var maxHeight = _.max(_.map(layer, function(v) { return g.node(v).height; }));\n _.forEach(layer, function(v) {\n g.node(v).y = prevY + maxHeight / 2;\n });\n prevY += maxHeight + rankSep;\n });\n}\n\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar slack = require(\"./util\").slack;\n\nmodule.exports = feasibleTree;\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a DAG.\n * 2. Graph must be connected.\n * 3. Graph must have at least one node.\n * 5. Graph nodes must have been previously assigned a \"rank\" property that\n * respects the \"minlen\" property of incident edges.\n * 6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n * - Graph nodes will have their rank adjusted to ensure that all edges are\n * tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n var t = new Graph({ directed: false });\n\n // Choose arbitrary node from which to start our tree\n var start = g.nodes()[0];\n var size = g.nodeCount();\n t.setNode(start, {});\n\n var edge, delta;\n while (tightTree(t, g) < size) {\n edge = findMinSlackEdge(t, g);\n delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n shiftRanks(t, g, delta);\n }\n\n return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n function dfs(v) {\n _.forEach(g.nodeEdges(v), function(e) {\n var edgeV = e.v,\n w = (v === edgeV) ? e.w : edgeV;\n if (!t.hasNode(w) && !slack(g, e)) {\n t.setNode(w, {});\n t.setEdge(v, w, {});\n dfs(w);\n }\n });\n }\n\n _.forEach(t.nodes(), dfs);\n return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n return _.minBy(g.edges(), function(e) {\n if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n return slack(g, e);\n }\n });\n}\n\nfunction shiftRanks(t, g, delta) {\n _.forEach(t.nodes(), function(v) {\n g.node(v).rank += delta;\n });\n}\n","\"use strict\";\n\nvar rankUtil = require(\"./util\");\nvar longestPath = rankUtil.longestPath;\nvar feasibleTree = require(\"./feasible-tree\");\nvar networkSimplex = require(\"./network-simplex\");\n\nmodule.exports = rank;\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a connected DAG\n * 2. Graph nodes must be objects\n * 3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have a \"rank\" attribute based on the results of the\n * algorithm. Ranks can start at any index (including negative), we'll\n * fix them up later.\n */\nfunction rank(g) {\n switch(g.graph().ranker) {\n case \"network-simplex\": networkSimplexRanker(g); break;\n case \"tight-tree\": tightTreeRanker(g); break;\n case \"longest-path\": longestPathRanker(g); break;\n default: networkSimplexRanker(g);\n }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n longestPath(g);\n feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n networkSimplex(g);\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar feasibleTree = require(\"./feasible-tree\");\nvar slack = require(\"./util\").slack;\nvar initRank = require(\"./util\").longestPath;\nvar preorder = require(\"../graphlib\").alg.preorder;\nvar postorder = require(\"../graphlib\").alg.postorder;\nvar simplify = require(\"../util\").simplify;\n\nmodule.exports = networkSimplex;\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n * 1. The input graph must be a DAG.\n * 2. All nodes in the graph must have an object value.\n * 3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n * 1. All nodes in the graph will have an assigned \"rank\" attribute that has\n * been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n * 1. Assign initial ranks to each node. We use the longest path algorithm,\n * which assigns ranks to the lowest position possible. In general this\n * leads to very wide bottom ranks and unnecessarily long edges.\n * 2. Construct a feasible tight tree. A tight tree is one such that all\n * edges in the tree have no slack (difference between length of edge\n * and minlen for the edge). This by itself greatly improves the assigned\n * rankings by shorting edges.\n * 3. Iteratively find edges that have negative cut values. Generally a\n * negative cut value indicates that the edge could be removed and a new\n * tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n g = simplify(g);\n initRank(g);\n var t = feasibleTree(g);\n initLowLimValues(t);\n initCutValues(t, g);\n\n var e, f;\n while ((e = leaveEdge(t))) {\n f = enterEdge(t, g, e);\n exchangeEdges(t, g, e, f);\n }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n var vs = postorder(t, t.nodes());\n vs = vs.slice(0, vs.length - 1);\n _.forEach(vs, function(v) {\n assignCutValue(t, g, v);\n });\n}\n\nfunction assignCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n // True if the child is on the tail end of the edge in the directed graph\n var childIsTail = true;\n // The graph's view of the tree edge we're inspecting\n var graphEdge = g.edge(child, parent);\n // The accumulated cut value for the edge between this node and its parent\n var cutValue = 0;\n\n if (!graphEdge) {\n childIsTail = false;\n graphEdge = g.edge(parent, child);\n }\n\n cutValue = graphEdge.weight;\n\n _.forEach(g.nodeEdges(child), function(e) {\n var isOutEdge = e.v === child,\n other = isOutEdge ? e.w : e.v;\n\n if (other !== parent) {\n var pointsToHead = isOutEdge === childIsTail,\n otherWeight = g.edge(e).weight;\n\n cutValue += pointsToHead ? otherWeight : -otherWeight;\n if (isTreeEdge(t, child, other)) {\n var otherCutValue = t.edge(child, other).cutvalue;\n cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n }\n }\n });\n\n return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n if (arguments.length < 2) {\n root = tree.nodes()[0];\n }\n dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n var low = nextLim;\n var label = tree.node(v);\n\n visited[v] = true;\n _.forEach(tree.neighbors(v), function(w) {\n if (!_.has(visited, w)) {\n nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n }\n });\n\n label.low = low;\n label.lim = nextLim++;\n if (parent) {\n label.parent = parent;\n } else {\n // TODO should be able to remove this when we incrementally update low lim\n delete label.parent;\n }\n\n return nextLim;\n}\n\nfunction leaveEdge(tree) {\n return _.find(tree.edges(), function(e) {\n return tree.edge(e).cutvalue < 0;\n });\n}\n\nfunction enterEdge(t, g, edge) {\n var v = edge.v;\n var w = edge.w;\n\n // For the rest of this function we assume that v is the tail and w is the\n // head, so if we don't have this edge in the graph we should flip it to\n // match the correct orientation.\n if (!g.hasEdge(v, w)) {\n v = edge.w;\n w = edge.v;\n }\n\n var vLabel = t.node(v);\n var wLabel = t.node(w);\n var tailLabel = vLabel;\n var flip = false;\n\n // If the root is in the tail of the edge then we need to flip the logic that\n // checks for the head and tail nodes in the candidates function below.\n if (vLabel.lim > wLabel.lim) {\n tailLabel = wLabel;\n flip = true;\n }\n\n var candidates = _.filter(g.edges(), function(edge) {\n return flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n flip !== isDescendant(t, t.node(edge.w), tailLabel);\n });\n\n return _.minBy(candidates, function(edge) { return slack(g, edge); });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n var v = e.v;\n var w = e.w;\n t.removeEdge(v, w);\n t.setEdge(f.v, f.w, {});\n initLowLimValues(t);\n initCutValues(t, g);\n updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n var root = _.find(t.nodes(), function(v) { return !g.node(v).parent; });\n var vs = preorder(t, root);\n vs = vs.slice(1);\n _.forEach(vs, function(v) {\n var parent = t.node(v).parent,\n edge = g.edge(v, parent),\n flipped = false;\n\n if (!edge) {\n edge = g.edge(parent, v);\n flipped = true;\n }\n\n g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = {\n longestPath: longestPath,\n slack: slack\n};\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG.\n * 2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n * 1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n var visited = {};\n\n function dfs(v) {\n var label = g.node(v);\n if (_.has(visited, v)) {\n return label.rank;\n }\n visited[v] = true;\n\n var rank = _.min(_.map(g.outEdges(v), function(e) {\n return dfs(e.w) - g.edge(e).minlen;\n }));\n\n if (rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n rank === undefined || // return value of _.map([]) for Lodash 4\n rank === null) { // return value of _.map([null])\n rank = 0;\n }\n\n return (label.rank = rank);\n }\n\n _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n","/* eslint \"no-console\": off */\n\n\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n addDummyNode: addDummyNode,\n simplify: simplify,\n asNonCompoundGraph: asNonCompoundGraph,\n successorWeights: successorWeights,\n predecessorWeights: predecessorWeights,\n intersectRect: intersectRect,\n buildLayerMatrix: buildLayerMatrix,\n normalizeRanks: normalizeRanks,\n removeEmptyRanks: removeEmptyRanks,\n addBorderNode: addBorderNode,\n maxRank: maxRank,\n partition: partition,\n time: time,\n notime: notime\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n var v;\n do {\n v = _.uniqueId(name);\n } while (g.hasNode(v));\n\n attrs.dummy = type;\n g.setNode(v, attrs);\n return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n var simplified = new Graph().setGraph(g.graph());\n _.forEach(g.nodes(), function(v) { simplified.setNode(v, g.node(v)); });\n _.forEach(g.edges(), function(e) {\n var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n var label = g.edge(e);\n simplified.setEdge(e.v, e.w, {\n weight: simpleLabel.weight + label.weight,\n minlen: Math.max(simpleLabel.minlen, label.minlen)\n });\n });\n return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n _.forEach(g.nodes(), function(v) {\n if (!g.children(v).length) {\n simplified.setNode(v, g.node(v));\n }\n });\n _.forEach(g.edges(), function(e) {\n simplified.setEdge(e, g.edge(e));\n });\n return simplified;\n}\n\nfunction successorWeights(g) {\n var weightMap = _.map(g.nodes(), function(v) {\n var sucs = {};\n _.forEach(g.outEdges(v), function(e) {\n sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n });\n return sucs;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n var weightMap = _.map(g.nodes(), function(v) {\n var preds = {};\n _.forEach(g.inEdges(v), function(e) {\n preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n });\n return preds;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n var x = rect.x;\n var y = rect.y;\n\n // Rectangle intersection algorithm from:\n // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = rect.width / 2;\n var h = rect.height / 2;\n\n if (!dx && !dy) {\n throw new Error(\"Not possible to find intersection inside of the rectangle\");\n }\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = h * dx / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = w * dy / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n var layering = _.map(_.range(maxRank(g) + 1), function() { return []; });\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n var rank = node.rank;\n if (!_.isUndefined(rank)) {\n layering[rank][node.order] = v;\n }\n });\n return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n var min = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (_.has(node, \"rank\")) {\n node.rank -= min;\n }\n });\n}\n\nfunction removeEmptyRanks(g) {\n // Ranks may not start at 0, so we need to offset them\n var offset = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n\n var layers = [];\n _.forEach(g.nodes(), function(v) {\n var rank = g.node(v).rank - offset;\n if (!layers[rank]) {\n layers[rank] = [];\n }\n layers[rank].push(v);\n });\n\n var delta = 0;\n var nodeRankFactor = g.graph().nodeRankFactor;\n _.forEach(layers, function(vs, i) {\n if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n --delta;\n } else if (delta) {\n _.forEach(vs, function(v) { g.node(v).rank += delta; });\n }\n });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n var node = {\n width: 0,\n height: 0\n };\n if (arguments.length >= 4) {\n node.rank = rank;\n node.order = order;\n }\n return addDummyNode(g, \"border\", node, prefix);\n}\n\nfunction maxRank(g) {\n return _.max(_.map(g.nodes(), function(v) {\n var rank = g.node(v).rank;\n if (!_.isUndefined(rank)) {\n return rank;\n }\n }));\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n var result = { lhs: [], rhs: [] };\n _.forEach(collection, function(value) {\n if (fn(value)) {\n result.lhs.push(value);\n } else {\n result.rhs.push(value);\n }\n });\n return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n var start = _.now();\n try {\n return fn();\n } finally {\n console.log(name + \" time: \" + (_.now() - start) + \"ms\");\n }\n}\n\nfunction notime(name, fn) {\n return fn();\n}\n","module.exports = \"0.8.5\";\n","/**\n * Copyright (c) 2014, Chris Pettitt\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar lib = require(\"./lib\");\n\nmodule.exports = {\n Graph: lib.Graph,\n json: require(\"./lib/json\"),\n alg: require(\"./lib/alg\"),\n version: lib.version\n};\n","var _ = require(\"../lodash\");\n\nmodule.exports = components;\n\nfunction components(g) {\n var visited = {};\n var cmpts = [];\n var cmpt;\n\n function dfs(v) {\n if (_.has(visited, v)) return;\n visited[v] = true;\n cmpt.push(v);\n _.each(g.successors(v), dfs);\n _.each(g.predecessors(v), dfs);\n }\n\n _.each(g.nodes(), function(v) {\n cmpt = [];\n dfs(v);\n if (cmpt.length) {\n cmpts.push(cmpt);\n }\n });\n\n return cmpts;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = dfs;\n\n/*\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * Order must be one of \"pre\" or \"post\".\n */\nfunction dfs(g, vs, order) {\n if (!_.isArray(vs)) {\n vs = [vs];\n }\n\n var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);\n\n var acc = [];\n var visited = {};\n _.each(vs, function(v) {\n if (!g.hasNode(v)) {\n throw new Error(\"Graph does not have node: \" + v);\n }\n\n doDfs(g, v, order === \"post\", visited, navigation, acc);\n });\n return acc;\n}\n\nfunction doDfs(g, v, postorder, visited, navigation, acc) {\n if (!_.has(visited, v)) {\n visited[v] = true;\n\n if (!postorder) { acc.push(v); }\n _.each(navigation(v), function(w) {\n doDfs(g, w, postorder, visited, navigation, acc);\n });\n if (postorder) { acc.push(v); }\n }\n}\n","var dijkstra = require(\"./dijkstra\");\nvar _ = require(\"../lodash\");\n\nmodule.exports = dijkstraAll;\n\nfunction dijkstraAll(g, weightFunc, edgeFunc) {\n return _.transform(g.nodes(), function(acc, v) {\n acc[v] = dijkstra(g, v, weightFunc, edgeFunc);\n }, {});\n}\n","var _ = require(\"../lodash\");\nvar PriorityQueue = require(\"../data/priority-queue\");\n\nmodule.exports = dijkstra;\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction dijkstra(g, source, weightFn, edgeFn) {\n return runDijkstra(g, String(source),\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn || function(v) { return g.outEdges(v); });\n}\n\nfunction runDijkstra(g, source, weightFn, edgeFn) {\n var results = {};\n var pq = new PriorityQueue();\n var v, vEntry;\n\n var updateNeighbors = function(edge) {\n var w = edge.v !== v ? edge.v : edge.w;\n var wEntry = results[w];\n var weight = weightFn(edge);\n var distance = vEntry.distance + weight;\n\n if (weight < 0) {\n throw new Error(\"dijkstra does not allow negative edge weights. \" +\n \"Bad edge: \" + edge + \" Weight: \" + weight);\n }\n\n if (distance < wEntry.distance) {\n wEntry.distance = distance;\n wEntry.predecessor = v;\n pq.decrease(w, distance);\n }\n };\n\n g.nodes().forEach(function(v) {\n var distance = v === source ? 0 : Number.POSITIVE_INFINITY;\n results[v] = { distance: distance };\n pq.add(v, distance);\n });\n\n while (pq.size() > 0) {\n v = pq.removeMin();\n vEntry = results[v];\n if (vEntry.distance === Number.POSITIVE_INFINITY) {\n break;\n }\n\n edgeFn(v).forEach(updateNeighbors);\n }\n\n return results;\n}\n","var _ = require(\"../lodash\");\nvar tarjan = require(\"./tarjan\");\n\nmodule.exports = findCycles;\n\nfunction findCycles(g) {\n return _.filter(tarjan(g), function(cmpt) {\n return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0]));\n });\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = floydWarshall;\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction floydWarshall(g, weightFn, edgeFn) {\n return runFloydWarshall(g,\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn || function(v) { return g.outEdges(v); });\n}\n\nfunction runFloydWarshall(g, weightFn, edgeFn) {\n var results = {};\n var nodes = g.nodes();\n\n nodes.forEach(function(v) {\n results[v] = {};\n results[v][v] = { distance: 0 };\n nodes.forEach(function(w) {\n if (v !== w) {\n results[v][w] = { distance: Number.POSITIVE_INFINITY };\n }\n });\n edgeFn(v).forEach(function(edge) {\n var w = edge.v === v ? edge.w : edge.v;\n var d = weightFn(edge);\n results[v][w] = { distance: d, predecessor: v };\n });\n });\n\n nodes.forEach(function(k) {\n var rowK = results[k];\n nodes.forEach(function(i) {\n var rowI = results[i];\n nodes.forEach(function(j) {\n var ik = rowI[k];\n var kj = rowK[j];\n var ij = rowI[j];\n var altDistance = ik.distance + kj.distance;\n if (altDistance < ij.distance) {\n ij.distance = altDistance;\n ij.predecessor = kj.predecessor;\n }\n });\n });\n });\n\n return results;\n}\n","module.exports = {\n components: require(\"./components\"),\n dijkstra: require(\"./dijkstra\"),\n dijkstraAll: require(\"./dijkstra-all\"),\n findCycles: require(\"./find-cycles\"),\n floydWarshall: require(\"./floyd-warshall\"),\n isAcyclic: require(\"./is-acyclic\"),\n postorder: require(\"./postorder\"),\n preorder: require(\"./preorder\"),\n prim: require(\"./prim\"),\n tarjan: require(\"./tarjan\"),\n topsort: require(\"./topsort\")\n};\n","var topsort = require(\"./topsort\");\n\nmodule.exports = isAcyclic;\n\nfunction isAcyclic(g) {\n try {\n topsort(g);\n } catch (e) {\n if (e instanceof topsort.CycleException) {\n return false;\n }\n throw e;\n }\n return true;\n}\n","var dfs = require(\"./dfs\");\n\nmodule.exports = postorder;\n\nfunction postorder(g, vs) {\n return dfs(g, vs, \"post\");\n}\n","var dfs = require(\"./dfs\");\n\nmodule.exports = preorder;\n\nfunction preorder(g, vs) {\n return dfs(g, vs, \"pre\");\n}\n","var _ = require(\"../lodash\");\nvar Graph = require(\"../graph\");\nvar PriorityQueue = require(\"../data/priority-queue\");\n\nmodule.exports = prim;\n\nfunction prim(g, weightFunc) {\n var result = new Graph();\n var parents = {};\n var pq = new PriorityQueue();\n var v;\n\n function updateNeighbors(edge) {\n var w = edge.v === v ? edge.w : edge.v;\n var pri = pq.priority(w);\n if (pri !== undefined) {\n var edgeWeight = weightFunc(edge);\n if (edgeWeight < pri) {\n parents[w] = v;\n pq.decrease(w, edgeWeight);\n }\n }\n }\n\n if (g.nodeCount() === 0) {\n return result;\n }\n\n _.each(g.nodes(), function(v) {\n pq.add(v, Number.POSITIVE_INFINITY);\n result.setNode(v);\n });\n\n // Start from an arbitrary node\n pq.decrease(g.nodes()[0], 0);\n\n var init = false;\n while (pq.size() > 0) {\n v = pq.removeMin();\n if (_.has(parents, v)) {\n result.setEdge(v, parents[v]);\n } else if (init) {\n throw new Error(\"Input graph is not connected: \" + g);\n } else {\n init = true;\n }\n\n g.nodeEdges(v).forEach(updateNeighbors);\n }\n\n return result;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = tarjan;\n\nfunction tarjan(g) {\n var index = 0;\n var stack = [];\n var visited = {}; // node id -> { onStack, lowlink, index }\n var results = [];\n\n function dfs(v) {\n var entry = visited[v] = {\n onStack: true,\n lowlink: index,\n index: index++\n };\n stack.push(v);\n\n g.successors(v).forEach(function(w) {\n if (!_.has(visited, w)) {\n dfs(w);\n entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink);\n } else if (visited[w].onStack) {\n entry.lowlink = Math.min(entry.lowlink, visited[w].index);\n }\n });\n\n if (entry.lowlink === entry.index) {\n var cmpt = [];\n var w;\n do {\n w = stack.pop();\n visited[w].onStack = false;\n cmpt.push(w);\n } while (v !== w);\n results.push(cmpt);\n }\n }\n\n g.nodes().forEach(function(v) {\n if (!_.has(visited, v)) {\n dfs(v);\n }\n });\n\n return results;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = topsort;\ntopsort.CycleException = CycleException;\n\nfunction topsort(g) {\n var visited = {};\n var stack = {};\n var results = [];\n\n function visit(node) {\n if (_.has(stack, node)) {\n throw new CycleException();\n }\n\n if (!_.has(visited, node)) {\n stack[node] = true;\n visited[node] = true;\n _.each(g.predecessors(node), visit);\n delete stack[node];\n results.push(node);\n }\n }\n\n _.each(g.sinks(), visit);\n\n if (_.size(visited) !== g.nodeCount()) {\n throw new CycleException();\n }\n\n return results;\n}\n\nfunction CycleException() {}\nCycleException.prototype = new Error(); // must be an instance of Error to pass testing","var _ = require(\"../lodash\");\n\nmodule.exports = PriorityQueue;\n\n/**\n * A min-priority queue data structure. This algorithm is derived from Cormen,\n * et al., \"Introduction to Algorithms\". The basic idea of a min-priority\n * queue is that you can efficiently (in O(1) time) get the smallest key in\n * the queue. Adding and removing elements takes O(log n) time. A key can\n * have its priority decreased in O(log n) time.\n */\nfunction PriorityQueue() {\n this._arr = [];\n this._keyIndices = {};\n}\n\n/**\n * Returns the number of elements in the queue. Takes `O(1)` time.\n */\nPriorityQueue.prototype.size = function() {\n return this._arr.length;\n};\n\n/**\n * Returns the keys that are in the queue. Takes `O(n)` time.\n */\nPriorityQueue.prototype.keys = function() {\n return this._arr.map(function(x) { return x.key; });\n};\n\n/**\n * Returns `true` if **key** is in the queue and `false` if not.\n */\nPriorityQueue.prototype.has = function(key) {\n return _.has(this._keyIndices, key);\n};\n\n/**\n * Returns the priority for **key**. If **key** is not present in the queue\n * then this function returns `undefined`. Takes `O(1)` time.\n *\n * @param {Object} key\n */\nPriorityQueue.prototype.priority = function(key) {\n var index = this._keyIndices[key];\n if (index !== undefined) {\n return this._arr[index].priority;\n }\n};\n\n/**\n * Returns the key for the minimum element in this queue. If the queue is\n * empty this function throws an Error. Takes `O(1)` time.\n */\nPriorityQueue.prototype.min = function() {\n if (this.size() === 0) {\n throw new Error(\"Queue underflow\");\n }\n return this._arr[0].key;\n};\n\n/**\n * Inserts a new key into the priority queue. If the key already exists in\n * the queue this function returns `false`; otherwise it will return `true`.\n * Takes `O(n)` time.\n *\n * @param {Object} key the key to add\n * @param {Number} priority the initial priority for the key\n */\nPriorityQueue.prototype.add = function(key, priority) {\n var keyIndices = this._keyIndices;\n key = String(key);\n if (!_.has(keyIndices, key)) {\n var arr = this._arr;\n var index = arr.length;\n keyIndices[key] = index;\n arr.push({key: key, priority: priority});\n this._decrease(index);\n return true;\n }\n return false;\n};\n\n/**\n * Removes and returns the smallest key in the queue. Takes `O(log n)` time.\n */\nPriorityQueue.prototype.removeMin = function() {\n this._swap(0, this._arr.length - 1);\n var min = this._arr.pop();\n delete this._keyIndices[min.key];\n this._heapify(0);\n return min.key;\n};\n\n/**\n * Decreases the priority for **key** to **priority**. If the new priority is\n * greater than the previous priority, this function will throw an Error.\n *\n * @param {Object} key the key for which to raise priority\n * @param {Number} priority the new priority for the key\n */\nPriorityQueue.prototype.decrease = function(key, priority) {\n var index = this._keyIndices[key];\n if (priority > this._arr[index].priority) {\n throw new Error(\"New priority is greater than current priority. \" +\n \"Key: \" + key + \" Old: \" + this._arr[index].priority + \" New: \" + priority);\n }\n this._arr[index].priority = priority;\n this._decrease(index);\n};\n\nPriorityQueue.prototype._heapify = function(i) {\n var arr = this._arr;\n var l = 2 * i;\n var r = l + 1;\n var largest = i;\n if (l < arr.length) {\n largest = arr[l].priority < arr[largest].priority ? l : largest;\n if (r < arr.length) {\n largest = arr[r].priority < arr[largest].priority ? r : largest;\n }\n if (largest !== i) {\n this._swap(i, largest);\n this._heapify(largest);\n }\n }\n};\n\nPriorityQueue.prototype._decrease = function(index) {\n var arr = this._arr;\n var priority = arr[index].priority;\n var parent;\n while (index !== 0) {\n parent = index >> 1;\n if (arr[parent].priority < priority) {\n break;\n }\n this._swap(index, parent);\n index = parent;\n }\n};\n\nPriorityQueue.prototype._swap = function(i, j) {\n var arr = this._arr;\n var keyIndices = this._keyIndices;\n var origArrI = arr[i];\n var origArrJ = arr[j];\n arr[i] = origArrJ;\n arr[j] = origArrI;\n keyIndices[origArrJ.key] = i;\n keyIndices[origArrI.key] = j;\n};\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\n\nmodule.exports = Graph;\n\nvar DEFAULT_EDGE_NAME = \"\\x00\";\nvar GRAPH_NODE = \"\\x00\";\nvar EDGE_KEY_DELIM = \"\\x01\";\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\nfunction Graph(opts) {\n this._isDirected = _.has(opts, \"directed\") ? opts.directed : true;\n this._isMultigraph = _.has(opts, \"multigraph\") ? opts.multigraph : false;\n this._isCompound = _.has(opts, \"compound\") ? opts.compound : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\n\n/* === Graph functions ========= */\n\nGraph.prototype.isDirected = function() {\n return this._isDirected;\n};\n\nGraph.prototype.isMultigraph = function() {\n return this._isMultigraph;\n};\n\nGraph.prototype.isCompound = function() {\n return this._isCompound;\n};\n\nGraph.prototype.setGraph = function(label) {\n this._label = label;\n return this;\n};\n\nGraph.prototype.graph = function() {\n return this._label;\n};\n\n\n/* === Node functions ========== */\n\nGraph.prototype.setDefaultNodeLabel = function(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n};\n\nGraph.prototype.nodeCount = function() {\n return this._nodeCount;\n};\n\nGraph.prototype.nodes = function() {\n return _.keys(this._nodes);\n};\n\nGraph.prototype.sources = function() {\n var self = this;\n return _.filter(this.nodes(), function(v) {\n return _.isEmpty(self._in[v]);\n });\n};\n\nGraph.prototype.sinks = function() {\n var self = this;\n return _.filter(this.nodes(), function(v) {\n return _.isEmpty(self._out[v]);\n });\n};\n\nGraph.prototype.setNodes = function(vs, value) {\n var args = arguments;\n var self = this;\n _.each(vs, function(v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n};\n\nGraph.prototype.setNode = function(v, value) {\n if (_.has(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n};\n\nGraph.prototype.node = function(v) {\n return this._nodes[v];\n};\n\nGraph.prototype.hasNode = function(v) {\n return _.has(this._nodes, v);\n};\n\nGraph.prototype.removeNode = function(v) {\n var self = this;\n if (_.has(this._nodes, v)) {\n var removeEdge = function(e) { self.removeEdge(self._edgeObjs[e]); };\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n _.each(this.children(v), function(child) {\n self.setParent(child);\n });\n delete this._children[v];\n }\n _.each(_.keys(this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n _.each(_.keys(this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n};\n\nGraph.prototype.setParent = function(v, parent) {\n if (!this._isCompound) {\n throw new Error(\"Cannot set parent in a non-compound graph\");\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += \"\";\n for (var ancestor = parent;\n !_.isUndefined(ancestor);\n ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error(\"Setting \" + parent+ \" as parent of \" + v +\n \" would create a cycle\");\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n};\n\nGraph.prototype._removeFromParentsChildList = function(v) {\n delete this._children[this._parent[v]][v];\n};\n\nGraph.prototype.parent = function(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n};\n\nGraph.prototype.children = function(v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return _.keys(children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n};\n\nGraph.prototype.predecessors = function(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return _.keys(predsV);\n }\n};\n\nGraph.prototype.successors = function(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return _.keys(sucsV);\n }\n};\n\nGraph.prototype.neighbors = function(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return _.union(preds, this.successors(v));\n }\n};\n\nGraph.prototype.isLeaf = function (v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n};\n\nGraph.prototype.filterNodes = function(filter) {\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n _.each(this._nodes, function(value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n _.each(this._edgeObjs, function(e) {\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function(v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n};\n\n/* === Edge functions ========== */\n\nGraph.prototype.setDefaultEdgeLabel = function(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n};\n\nGraph.prototype.edgeCount = function() {\n return this._edgeCount;\n};\n\nGraph.prototype.edges = function() {\n return _.values(this._edgeObjs);\n};\n\nGraph.prototype.setPath = function(vs, value) {\n var self = this;\n var args = arguments;\n _.reduce(vs, function(v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n};\n\n/*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\nGraph.prototype.setEdge = function() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === \"object\" && arg0 !== null && \"v\" in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = \"\" + v;\n w = \"\" + w;\n if (!_.isUndefined(name)) {\n name = \"\" + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (_.has(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error(\"Cannot set a named edge when isMultigraph = false\");\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n};\n\nGraph.prototype.edge = function(v, w, name) {\n var e = (arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name));\n return this._edgeLabels[e];\n};\n\nGraph.prototype.hasEdge = function(v, w, name) {\n var e = (arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name));\n return _.has(this._edgeLabels, e);\n};\n\nGraph.prototype.removeEdge = function(v, w, name) {\n var e = (arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name));\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n};\n\nGraph.prototype.inEdges = function(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = _.values(inV);\n if (!u) {\n return edges;\n }\n return _.filter(edges, function(edge) { return edge.v === u; });\n }\n};\n\nGraph.prototype.outEdges = function(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = _.values(outV);\n if (!w) {\n return edges;\n }\n return _.filter(edges, function(edge) { return edge.w === w; });\n }\n};\n\nGraph.prototype.nodeEdges = function(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n};\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) { delete map[k]; }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = \"\" + v_;\n var w = \"\" + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM +\n (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = \"\" + v_;\n var w = \"\" + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n","// Includes only the \"core\" of graphlib\nmodule.exports = {\n Graph: require(\"./graph\"),\n version: require(\"./version\")\n};\n","var _ = require(\"./lodash\");\nvar Graph = require(\"./graph\");\n\nmodule.exports = {\n write: write,\n read: read\n};\n\nfunction write(g) {\n var json = {\n options: {\n directed: g.isDirected(),\n multigraph: g.isMultigraph(),\n compound: g.isCompound()\n },\n nodes: writeNodes(g),\n edges: writeEdges(g)\n };\n if (!_.isUndefined(g.graph())) {\n json.value = _.clone(g.graph());\n }\n return json;\n}\n\nfunction writeNodes(g) {\n return _.map(g.nodes(), function(v) {\n var nodeValue = g.node(v);\n var parent = g.parent(v);\n var node = { v: v };\n if (!_.isUndefined(nodeValue)) {\n node.value = nodeValue;\n }\n if (!_.isUndefined(parent)) {\n node.parent = parent;\n }\n return node;\n });\n}\n\nfunction writeEdges(g) {\n return _.map(g.edges(), function(e) {\n var edgeValue = g.edge(e);\n var edge = { v: e.v, w: e.w };\n if (!_.isUndefined(e.name)) {\n edge.name = e.name;\n }\n if (!_.isUndefined(edgeValue)) {\n edge.value = edgeValue;\n }\n return edge;\n });\n}\n\nfunction read(json) {\n var g = new Graph(json.options).setGraph(json.value);\n _.each(json.nodes, function(entry) {\n g.setNode(entry.v, entry.value);\n if (entry.parent) {\n g.setParent(entry.v, entry.parent);\n }\n });\n _.each(json.edges, function(entry) {\n g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);\n });\n return g;\n}\n","/* global window */\n\nvar lodash;\n\nif (typeof require === \"function\") {\n try {\n lodash = {\n clone: require(\"lodash/clone\"),\n constant: require(\"lodash/constant\"),\n each: require(\"lodash/each\"),\n filter: require(\"lodash/filter\"),\n has: require(\"lodash/has\"),\n isArray: require(\"lodash/isArray\"),\n isEmpty: require(\"lodash/isEmpty\"),\n isFunction: require(\"lodash/isFunction\"),\n isUndefined: require(\"lodash/isUndefined\"),\n keys: require(\"lodash/keys\"),\n map: require(\"lodash/map\"),\n reduce: require(\"lodash/reduce\"),\n size: require(\"lodash/size\"),\n transform: require(\"lodash/transform\"),\n union: require(\"lodash/union\"),\n values: require(\"lodash/values\")\n };\n } catch (e) {\n // continue regardless of error\n }\n}\n\nif (!lodash) {\n lodash = window._;\n}\n\nmodule.exports = lodash;\n","module.exports = '2.1.8';\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","var baseProperty = require('./_baseProperty');\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nmodule.exports = asciiSize;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseExtremum;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nmodule.exports = baseFilter;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nmodule.exports = baseGt;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nmodule.exports = baseLt;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n baseSortBy = require('./_baseSortBy'),\n baseUnary = require('./_baseUnary'),\n compareMultiple = require('./_compareMultiple'),\n identity = require('./identity');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nmodule.exports = baseOrderBy;\n","var basePickBy = require('./_basePickBy'),\n hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nmodule.exports = basePick;\n","var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\nmodule.exports = baseRange;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nmodule.exports = baseSortBy;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nmodule.exports = baseValues;\n","/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n}\n\nmodule.exports = baseZipObject;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n","var baseRange = require('./_baseRange'),\n isIterateeCall = require('./_isIterateeCall'),\n toFinite = require('./toFinite');\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\nmodule.exports = createRange;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var asciiSize = require('./_asciiSize'),\n hasUnicode = require('./_hasUnicode'),\n unicodeSize = require('./_unicodeSize');\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n}\n\nmodule.exports = stringSize;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\nmodule.exports = unicodeSize;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var baseRest = require('./_baseRest'),\n eq = require('./eq'),\n isIterateeCall = require('./_isIterateeCall'),\n keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nmodule.exports = defaults;\n","module.exports = require('./forEach');\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","var baseFor = require('./_baseFor'),\n castFunction = require('./_castFunction'),\n keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","var baseExtremum = require('./_baseExtremum'),\n baseGt = require('./_baseGt'),\n identity = require('./identity');\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nmodule.exports = max;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","var baseExtremum = require('./_baseExtremum'),\n baseLt = require('./_baseLt'),\n identity = require('./identity');\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nmodule.exports = min;\n","var baseExtremum = require('./_baseExtremum'),\n baseIteratee = require('./_baseIteratee'),\n baseLt = require('./_baseLt');\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n : undefined;\n}\n\nmodule.exports = minBy;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var basePick = require('./_basePick'),\n flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","var arrayReduce = require('./_arrayReduce'),\n baseEach = require('./_baseEach'),\n baseIteratee = require('./_baseIteratee'),\n baseReduce = require('./_baseReduce'),\n isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArrayLike = require('./isArrayLike'),\n isString = require('./isString'),\n stringSize = require('./_stringSize');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n}\n\nmodule.exports = size;\n","var baseFlatten = require('./_baseFlatten'),\n baseOrderBy = require('./_baseOrderBy'),\n baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var arrayEach = require('./_arrayEach'),\n baseCreate = require('./_baseCreate'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee'),\n getPrototype = require('./_getPrototype'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isTypedArray = require('./isTypedArray');\n\n/**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\nfunction transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = baseIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n}\n\nmodule.exports = transform;\n","var baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n baseUniq = require('./_baseUniq'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nmodule.exports = union;\n","var toString = require('./toString');\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nmodule.exports = uniqueId;\n","var baseValues = require('./_baseValues'),\n keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","var assignValue = require('./_assignValue'),\n baseZipObject = require('./_baseZipObject');\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n}\n\nmodule.exports = zipObject;\n","\nmodule.exports = parse\n\n/**\n * expected argument lengths\n * @type {Object}\n */\n\nvar length = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0}\n\n/**\n * segment pattern\n * @type {RegExp}\n */\n\nvar segment = /([astvzqmhlc])([^astvzqmhlc]*)/ig\n\n/**\n * parse an svg path data string. Generates an Array\n * of commands where each command is an Array of the\n * form `[command, arg1, arg2, ...]`\n *\n * @param {String} path\n * @return {Array}\n */\n\nfunction parse(path) {\n\tvar data = []\n\tpath.replace(segment, function(_, command, args){\n\t\tvar type = command.toLowerCase()\n\t\targs = parseValues(args)\n\n\t\t// overloaded moveTo\n\t\tif (type == 'm' && args.length > 2) {\n\t\t\tdata.push([command].concat(args.splice(0, 2)))\n\t\t\ttype = 'l'\n\t\t\tcommand = command == 'm' ? 'l' : 'L'\n\t\t}\n\n\t\twhile (true) {\n\t\t\tif (args.length == length[type]) {\n\t\t\t\targs.unshift(command)\n\t\t\t\treturn data.push(args)\n\t\t\t}\n\t\t\tif (args.length < length[type]) throw new Error('malformed path data')\n\t\t\tdata.push([command].concat(args.splice(0, length[type])))\n\t\t}\n\t})\n\treturn data\n}\n\nvar number = /-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/ig\n\nfunction parseValues(args) {\n\tvar numbers = args.match(number)\n\treturn numbers ? numbers.map(Number) : []\n}\n","var parse = require('parse-svg-path');\r\nvar isarray = require('isarray');\r\nvar abs = require('abs-svg-path');\r\n\r\nmodule.exports = Points;\r\n\r\nfunction Points (path) {\r\n if (!(this instanceof Points)) return new Points(path);\r\n this._path = isarray(path) ? path : parse(path);\r\n this._path = abs(this._path);\r\n this._path = zvhToL(this._path);\r\n this._path = longhand(this._path);\r\n}\r\n\r\nPoints.prototype.at = function (pos, opts) {\r\n return this._walk(pos, opts).pos;\r\n};\r\n\r\nPoints.prototype.length = function () {\r\n return this._walk(null).length;\r\n};\r\n\r\nPoints.prototype._walk = function (pos, opts) {\r\n var cur = [ 0, 0 ];\r\n var prev = [ 0, 0, 0 ];\r\n var p0 = [ 0, 0 ];\r\n var len = 0;\r\n\r\n for (var i = 0; i < this._path.length; i++) {\r\n var p = this._path[i];\r\n if (p[0] === 'M') {\r\n cur[0] = p[1];\r\n cur[1] = p[2];\r\n if (pos === 0) {\r\n return { length: len, pos: cur };\r\n }\r\n }\r\n else if (p[0] === 'C') {\r\n prev[0] = p0[0] = cur[0];\r\n prev[1] = p0[1] = cur[1];\r\n prev[2] = len;\r\n\r\n var n = 100;\r\n for (var j = 0; j <= n; j++) {\r\n var t = j / n;\r\n var x = xof_C(p, t);\r\n var y = yof_C(p, t);\r\n len += dist(cur[0], cur[1], x, y);\r\n\r\n cur[0] = x;\r\n cur[1] = y;\r\n\r\n if (typeof pos === 'number' && len >= pos) {\r\n var dv = (len - pos) / (len - prev[2]);\r\n\r\n var npos = [\r\n cur[0] * (1 - dv) + prev[0] * dv,\r\n cur[1] * (1 - dv) + prev[1] * dv\r\n ];\r\n return { length: len, pos: npos };\r\n }\r\n prev[0] = cur[0];\r\n prev[1] = cur[1];\r\n prev[2] = len;\r\n }\r\n }\r\n else if (p[0] === 'Q') {\r\n prev[0] = p0[0] = cur[0];\r\n prev[1] = p0[1] = cur[1];\r\n prev[2] = len;\r\n\r\n var n = 100;\r\n for (var j = 0; j <= n; j++) {\r\n var t = j / n;\r\n var x = xof_Q(p, t);\r\n var y = yof_Q(p, t);\r\n len += dist(cur[0], cur[1], x, y);\r\n\r\n cur[0] = x;\r\n cur[1] = y;\r\n\r\n if (typeof pos === 'number' && len >= pos) {\r\n var dv = (len - pos) / (len - prev[2]);\r\n\r\n var npos = [\r\n cur[0] * (1 - dv) + prev[0] * dv,\r\n cur[1] * (1 - dv) + prev[1] * dv\r\n ];\r\n return { length: len, pos: npos };\r\n }\r\n prev[0] = cur[0];\r\n prev[1] = cur[1];\r\n prev[2] = len;\r\n }\r\n }\r\n else if (p[0] === 'L') {\r\n prev[0] = cur[0];\r\n prev[1] = cur[1];\r\n prev[2] = len;\r\n\r\n len += dist(cur[0], cur[1], p[1], p[2]);\r\n cur[0] = p[1];\r\n cur[1] = p[2];\r\n\r\n if (typeof pos === 'number' && len >= pos) {\r\n var dv = (len - pos) / (len - prev[2]);\r\n var npos = [\r\n cur[0] * (1 - dv) + prev[0] * dv,\r\n cur[1] * (1 - dv) + prev[1] * dv\r\n ];\r\n return { length: len, pos: npos };\r\n }\r\n prev[0] = cur[0];\r\n prev[1] = cur[1];\r\n prev[2] = len;\r\n }\r\n }\r\n\r\n return { length: len, pos: cur };\r\n function xof_C (p, t) {\r\n return Math.pow((1-t), 3) * p0[0]\r\n + 3 * Math.pow((1-t), 2) * t * p[1]\r\n + 3 * (1-t) * Math.pow(t, 2) * p[3]\r\n + Math.pow(t, 3) * p[5]\r\n ;\r\n }\r\n function yof_C (p, t) {\r\n return Math.pow((1-t), 3) * p0[1]\r\n + 3 * Math.pow((1-t), 2) * t * p[2]\r\n + 3 * (1-t) * Math.pow(t, 2) * p[4]\r\n + Math.pow(t, 3) * p[6]\r\n ;\r\n }\r\n\r\n function xof_Q (p, t) {\r\n return Math.pow((1-t), 2) * p0[0]\r\n + 2 * (1-t) * t * p[1]\r\n + Math.pow(t, 2) * p[3]\r\n ;\r\n }\r\n function yof_Q (p, t) {\r\n return Math.pow((1-t), 2) * p0[1]\r\n + 2 * (1-t) * t * p[2]\r\n + Math.pow(t, 2) * p[4]\r\n ;\r\n }\r\n};\r\n\r\nfunction dist (ax, ay, bx, by) {\r\n var x = ax - bx;\r\n var y = ay - by;\r\n return Math.sqrt(x*x + y*y);\r\n}\r\n\r\n// Expand shorthand curve commands to full versions; mutates the path in place for efficiency\r\n// Requires commands have already been converted to absolute versions\r\nfunction longhand(path){\r\n var prev,x1=0,y1=0;\r\n var conversion = { S:{to:'C',x:3}, T:{to:'Q',x:1} };\r\n for(var i=0, len=path.length; i<len; i++){\r\n var cmd = path[i];\r\n var convert = conversion[cmd[0]];\r\n\r\n if (convert) {\r\n cmd[0] = convert.to;\r\n if (prev) {\r\n if (prev[0] === convert.to) {\r\n x1 = 2*prev[convert.x+2]-prev[convert.x ];\r\n y1 = 2*prev[convert.x+3]-prev[convert.x+1];\r\n } else {\r\n x1 = prev[prev.length-2];\r\n y1 = prev[prev.length-1];\r\n }\r\n }\r\n cmd.splice(1,0,x1,y1);\r\n }\r\n prev=cmd;\r\n }\r\n return path;\r\n}\r\n\r\n// Convert 'Z', 'V' and 'H' segments to 'L' segments\r\nfunction zvhToL(path){\r\n var ret = [];\r\n var startPoint = ['L',0,0];\r\n var last_point;\r\n\r\n for(var i=0, len=path.length; i<len; i++){\r\n var pt = path[i];\r\n switch(pt[0]){\r\n case 'M':\r\n startPoint = ['L', pt[1], pt[2]];\r\n ret.push(pt);\r\n break;\r\n case 'Z':\r\n ret.push(startPoint);\r\n break;\r\n case 'H':\r\n last_point = ret[ret.length - 1] || ['L',0,0];\r\n ret.push( ['L', pt[1], last_point[last_point.length - 1]] );\r\n break;\r\n case 'V':\r\n last_point = ret[ret.length - 1] || ['L',0,0];\r\n ret.push( ['L', last_point[last_point.length - 2], pt[1]] );\r\n break;\r\n default:\r\n ret.push(pt);\r\n }\r\n }\r\n return ret;\r\n}\r\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module);\n } else {\n var mod = {\n exports: {}\n };\n factory(mod);\n global.regression = mod.exports;\n }\n})(this, function (module) {\n 'use strict';\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n function _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n }\n\n var DEFAULT_OPTIONS = { order: 2, precision: 2, period: null };\n\n /**\n * Determine the coefficient of determination (r^2) of a fit from the observations\n * and predictions.\n *\n * @param {Array<Array<number>>} data - Pairs of observed x-y values\n * @param {Array<Array<number>>} results - Pairs of observed predicted x-y values\n *\n * @return {number} - The r^2 value, or NaN if one cannot be calculated.\n */\n function determinationCoefficient(data, results) {\n var predictions = [];\n var observations = [];\n\n data.forEach(function (d, i) {\n if (d[1] !== null) {\n observations.push(d);\n predictions.push(results[i]);\n }\n });\n\n var sum = observations.reduce(function (a, observation) {\n return a + observation[1];\n }, 0);\n var mean = sum / observations.length;\n\n var ssyy = observations.reduce(function (a, observation) {\n var difference = observation[1] - mean;\n return a + difference * difference;\n }, 0);\n\n var sse = observations.reduce(function (accum, observation, index) {\n var prediction = predictions[index];\n var residual = observation[1] - prediction[1];\n return accum + residual * residual;\n }, 0);\n\n return 1 - sse / ssyy;\n }\n\n /**\n * Determine the solution of a system of linear equations A * x = b using\n * Gaussian elimination.\n *\n * @param {Array<Array<number>>} input - A 2-d matrix of data in row-major form [ A | b ]\n * @param {number} order - How many degrees to solve for\n *\n * @return {Array<number>} - Vector of normalized solution coefficients matrix (x)\n */\n function gaussianElimination(input, order) {\n var matrix = input;\n var n = input.length - 1;\n var coefficients = [order];\n\n for (var i = 0; i < n; i++) {\n var maxrow = i;\n for (var j = i + 1; j < n; j++) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][maxrow])) {\n maxrow = j;\n }\n }\n\n for (var k = i; k < n + 1; k++) {\n var tmp = matrix[k][i];\n matrix[k][i] = matrix[k][maxrow];\n matrix[k][maxrow] = tmp;\n }\n\n for (var _j = i + 1; _j < n; _j++) {\n for (var _k = n; _k >= i; _k--) {\n matrix[_k][_j] -= matrix[_k][i] * matrix[i][_j] / matrix[i][i];\n }\n }\n }\n\n for (var _j2 = n - 1; _j2 >= 0; _j2--) {\n var total = 0;\n for (var _k2 = _j2 + 1; _k2 < n; _k2++) {\n total += matrix[_k2][_j2] * coefficients[_k2];\n }\n\n coefficients[_j2] = (matrix[n][_j2] - total) / matrix[_j2][_j2];\n }\n\n return coefficients;\n }\n\n /**\n * Round a number to a precision, specificed in number of decimal places\n *\n * @param {number} number - The number to round\n * @param {number} precision - The number of decimal places to round to:\n * > 0 means decimals, < 0 means powers of 10\n *\n *\n * @return {numbr} - The number, rounded\n */\n function round(number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n }\n\n /**\n * The set of all fitting methods\n *\n * @namespace\n */\n var methods = {\n linear: function linear(data, options) {\n var sum = [0, 0, 0, 0, 0];\n var len = 0;\n\n for (var n = 0; n < data.length; n++) {\n if (data[n][1] !== null) {\n len++;\n sum[0] += data[n][0];\n sum[1] += data[n][1];\n sum[2] += data[n][0] * data[n][0];\n sum[3] += data[n][0] * data[n][1];\n sum[4] += data[n][1] * data[n][1];\n }\n }\n\n var run = len * sum[2] - sum[0] * sum[0];\n var rise = len * sum[3] - sum[0] * sum[1];\n var gradient = run === 0 ? 0 : round(rise / run, options.precision);\n var intercept = round(sum[1] / len - gradient * sum[0] / len, options.precision);\n\n var predict = function predict(x) {\n return [round(x, options.precision), round(gradient * x + intercept, options.precision)];\n };\n\n var points = data.map(function (point) {\n return predict(point[0]);\n });\n\n return {\n points: points,\n predict: predict,\n equation: [gradient, intercept],\n r2: round(determinationCoefficient(data, points), options.precision),\n string: intercept === 0 ? 'y = ' + gradient + 'x' : 'y = ' + gradient + 'x + ' + intercept\n };\n },\n exponential: function exponential(data, options) {\n var sum = [0, 0, 0, 0, 0, 0];\n\n for (var n = 0; n < data.length; n++) {\n if (data[n][1] !== null) {\n sum[0] += data[n][0];\n sum[1] += data[n][1];\n sum[2] += data[n][0] * data[n][0] * data[n][1];\n sum[3] += data[n][1] * Math.log(data[n][1]);\n sum[4] += data[n][0] * data[n][1] * Math.log(data[n][1]);\n sum[5] += data[n][0] * data[n][1];\n }\n }\n\n var denominator = sum[1] * sum[2] - sum[5] * sum[5];\n var a = Math.exp((sum[2] * sum[3] - sum[5] * sum[4]) / denominator);\n var b = (sum[1] * sum[4] - sum[5] * sum[3]) / denominator;\n var coeffA = round(a, options.precision);\n var coeffB = round(b, options.precision);\n var predict = function predict(x) {\n return [round(x, options.precision), round(coeffA * Math.exp(coeffB * x), options.precision)];\n };\n\n var points = data.map(function (point) {\n return predict(point[0]);\n });\n\n return {\n points: points,\n predict: predict,\n equation: [coeffA, coeffB],\n string: 'y = ' + coeffA + 'e^(' + coeffB + 'x)',\n r2: round(determinationCoefficient(data, points), options.precision)\n };\n },\n logarithmic: function logarithmic(data, options) {\n var sum = [0, 0, 0, 0];\n var len = data.length;\n\n for (var n = 0; n < len; n++) {\n if (data[n][1] !== null) {\n sum[0] += Math.log(data[n][0]);\n sum[1] += data[n][1] * Math.log(data[n][0]);\n sum[2] += data[n][1];\n sum[3] += Math.pow(Math.log(data[n][0]), 2);\n }\n }\n\n var a = (len * sum[1] - sum[2] * sum[0]) / (len * sum[3] - sum[0] * sum[0]);\n var coeffB = round(a, options.precision);\n var coeffA = round((sum[2] - coeffB * sum[0]) / len, options.precision);\n\n var predict = function predict(x) {\n return [round(x, options.precision), round(round(coeffA + coeffB * Math.log(x), options.precision), options.precision)];\n };\n\n var points = data.map(function (point) {\n return predict(point[0]);\n });\n\n return {\n points: points,\n predict: predict,\n equation: [coeffA, coeffB],\n string: 'y = ' + coeffA + ' + ' + coeffB + ' ln(x)',\n r2: round(determinationCoefficient(data, points), options.precision)\n };\n },\n power: function power(data, options) {\n var sum = [0, 0, 0, 0, 0];\n var len = data.length;\n\n for (var n = 0; n < len; n++) {\n if (data[n][1] !== null) {\n sum[0] += Math.log(data[n][0]);\n sum[1] += Math.log(data[n][1]) * Math.log(data[n][0]);\n sum[2] += Math.log(data[n][1]);\n sum[3] += Math.pow(Math.log(data[n][0]), 2);\n }\n }\n\n var b = (len * sum[1] - sum[0] * sum[2]) / (len * sum[3] - Math.pow(sum[0], 2));\n var a = (sum[2] - b * sum[0]) / len;\n var coeffA = round(Math.exp(a), options.precision);\n var coeffB = round(b, options.precision);\n\n var predict = function predict(x) {\n return [round(x, options.precision), round(round(coeffA * Math.pow(x, coeffB), options.precision), options.precision)];\n };\n\n var points = data.map(function (point) {\n return predict(point[0]);\n });\n\n return {\n points: points,\n predict: predict,\n equation: [coeffA, coeffB],\n string: 'y = ' + coeffA + 'x^' + coeffB,\n r2: round(determinationCoefficient(data, points), options.precision)\n };\n },\n polynomial: function polynomial(data, options) {\n var lhs = [];\n var rhs = [];\n var a = 0;\n var b = 0;\n var len = data.length;\n var k = options.order + 1;\n\n for (var i = 0; i < k; i++) {\n for (var l = 0; l < len; l++) {\n if (data[l][1] !== null) {\n a += Math.pow(data[l][0], i) * data[l][1];\n }\n }\n\n lhs.push(a);\n a = 0;\n\n var c = [];\n for (var j = 0; j < k; j++) {\n for (var _l = 0; _l < len; _l++) {\n if (data[_l][1] !== null) {\n b += Math.pow(data[_l][0], i + j);\n }\n }\n c.push(b);\n b = 0;\n }\n rhs.push(c);\n }\n rhs.push(lhs);\n\n var coefficients = gaussianElimination(rhs, k).map(function (v) {\n return round(v, options.precision);\n });\n\n var predict = function predict(x) {\n return [round(x, options.precision), round(coefficients.reduce(function (sum, coeff, power) {\n return sum + coeff * Math.pow(x, power);\n }, 0), options.precision)];\n };\n\n var points = data.map(function (point) {\n return predict(point[0]);\n });\n\n var string = 'y = ';\n for (var _i = coefficients.length - 1; _i >= 0; _i--) {\n if (_i > 1) {\n string += coefficients[_i] + 'x^' + _i + ' + ';\n } else if (_i === 1) {\n string += coefficients[_i] + 'x + ';\n } else {\n string += coefficients[_i];\n }\n }\n\n return {\n string: string,\n points: points,\n predict: predict,\n equation: [].concat(_toConsumableArray(coefficients)).reverse(),\n r2: round(determinationCoefficient(data, points), options.precision)\n };\n }\n };\n\n function createWrapper() {\n var reduce = function reduce(accumulator, name) {\n return _extends({\n _round: round\n }, accumulator, _defineProperty({}, name, function (data, supplied) {\n return methods[name](data, _extends({}, DEFAULT_OPTIONS, supplied));\n }));\n };\n\n return Object.keys(methods).reduce(reduce, {});\n }\n\n module.exports = createWrapper();\n});\n","!function(t,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],r):r(t.ss={})}(this,function(t){\"use strict\";function r(t){if(0===t.length)return 0;for(var r,n=t[0],e=0,a=1;a<t.length;a++)r=n+t[a],Math.abs(n)>=Math.abs(t[a])?e+=n-r+t[a]:e+=t[a]-r+n,n=r;return n+e}function g(t){if(0===t.length)throw new Error(\"mean requires at least one data point\");return r(t)/t.length}function n(t,r){var n,e,a=g(t),o=0;if(2===r)for(e=0;e<t.length;e++)o+=(n=t[e]-a)*n;else for(e=0;e<t.length;e++)o+=Math.pow(t[e]-a,r);return o}function e(t){if(0===t.length)throw new Error(\"variance requires at least one data point\");return n(t,2)/t.length}function a(t){if(1===t.length)return 0;var r=e(t);return Math.sqrt(r)}function o(t){if(0===t.length)throw new Error(\"mode requires at least one data point\");if(1===t.length)return t[0];for(var r=t[0],n=NaN,e=0,a=1,o=1;o<t.length+1;o++)t[o]!==r?(e<a&&(e=a,n=r),a=1,r=t[o]):a++;return n}function f(t){return t.slice().sort(function(t,r){return t-r})}function u(t){if(0===t.length)throw new Error(\"min requires at least one data point\");for(var r=t[0],n=1;n<t.length;n++)t[n]<r&&(r=t[n]);return r}function h(t){if(0===t.length)throw new Error(\"max requires at least one data point\");for(var r=t[0],n=1;n<t.length;n++)t[n]>r&&(r=t[n]);return r}function i(t,r){var n=t.length*r;if(0===t.length)throw new Error(\"quantile requires at least one data point.\");if(r<0||1<r)throw new Error(\"quantiles must be between 0 and 1\");return 1===r?t[t.length-1]:0===r?t[0]:n%1!=0?t[Math.ceil(n)-1]:t.length%2==0?(t[n-1]+t[n])/2:t[n]}function c(t,r,n,e){for(n=n||0,e=e||t.length-1;n<e;){if(600<e-n){var a=e-n+1,o=r-n+1,i=Math.log(a),u=.5*Math.exp(2*i/3),h=.5*Math.sqrt(i*u*(a-u)/a);o-a/2<0&&(h*=-1),c(t,r,Math.max(n,Math.floor(r-o*u/a+h)),Math.min(e,Math.floor(r+(a-o)*u/a+h)))}var f=t[r],s=n,l=e;for(p(t,n,r),t[e]>f&&p(t,n,e);s<l;){for(p(t,s,l),s++,l--;t[s]<f;)s++;for(;t[l]>f;)l--}t[n]===f?p(t,n,l):p(t,++l,e),l<=r&&(n=l+1),r<=l&&(e=l-1)}}function p(t,r,n){var e=t[r];t[r]=t[n],t[n]=e}function s(t,r){var n=t.slice();if(Array.isArray(r)){!function(t,r){for(var n=[0],e=0;e<r.length;e++)n.push(w(t.length,r[e]));n.push(t.length-1),n.sort(v);var a=[0,n.length-1];for(;a.length;){var o=Math.ceil(a.pop()),i=Math.floor(a.pop());if(!(o-i<=1)){var u=Math.floor((i+o)/2);l(t,n[u],n[i],n[o]),a.push(i,u,u,o)}}}(n,r);for(var e=[],a=0;a<r.length;a++)e[a]=i(n,r[a]);return e}return l(n,w(n.length,r),0,n.length-1),i(n,r)}function l(t,r,n,e){r%1==0?c(t,r,n,e):(c(t,r=Math.floor(r),n,e),c(t,r+1,r+1,e))}function v(t,r){return t-r}function w(t,r){var n=t*r;return 1===r?t-1:0===r?0:n%1!=0?Math.ceil(n)-1:t%2==0?n-.5:n}function M(t,r){if(r<t[0])return 0;if(r>t[t.length-1])return 1;var n=function(t,r){var n=0,e=0,a=t.length;for(;e<a;)r<=t[n=e+a>>>1]?a=n:e=-~n;return e}(t,r);if(t[n]!==r)return n/t.length;n++;var e=function(t,r){var n=0,e=0,a=t.length;for(;e<a;)r>=t[n=e+a>>>1]?e=-~n:a=n;return e}(t,r);if(e===n)return n/t.length;var a=e-n+1;return a*(e+n)/2/a/t.length}function m(t){var r=s(t,.75),n=s(t,.25);if(\"number\"==typeof r&&\"number\"==typeof n)return r-n}function d(t){return+s(t,.5)}function b(t){for(var r=d(t),n=[],e=0;e<t.length;e++)n.push(Math.abs(t[e]-r));return d(n)}function q(t,r){r=r||Math.random;for(var n,e,a=t.length;0<a;)e=Math.floor(r()*a--),n=t[a],t[a]=t[e],t[e]=n;return t}function E(t,r){return q(t.slice().slice(),r)}function y(t){for(var r,n=0,e=0;e<t.length;e++)0!==e&&t[e]===r||(r=t[e],n++);return n}function S(t,r){for(var n=[],e=0;e<t;e++){for(var a=[],o=0;o<r;o++)a.push(0);n.push(a)}return n}function x(t,r,n,e){var a;if(0<t){var o=(n[r]-n[t-1])/(r-t+1);a=e[r]-e[t-1]-(r-t+1)*o*o}else a=e[r]-n[r]*n[r]/(r+1);return a<0?0:a}function P(t,r,n,e,a,o,i){if(!(r<t)){var u=Math.floor((t+r)/2);e[n][u]=e[n-1][u-1],a[n][u]=u;var h=n;n<t&&(h=Math.max(h,a[n][t-1]||0)),h=Math.max(h,a[n-1][u]||0);var f,s,l,c=u-1;r<e.length-1&&(c=Math.min(c,a[n][r+1]||0));for(var g=c;h<=g&&!((f=x(g,u,o,i))+e[n-1][h-1]>=e[n][u]);--g)(s=x(h,u,o,i)+e[n-1][h-1])<e[n][u]&&(e[n][u]=s,a[n][u]=h),h++,(l=f+e[n-1][g-1])<e[n][u]&&(e[n][u]=l,a[n][u]=g);P(t,u-1,n,e,a,o,i),P(u+1,r,n,e,a,o,i)}}function k(t,r){if(t.length!==r.length)throw new Error(\"sampleCovariance requires samples with equal lengths\");if(t.length<2)throw new Error(\"sampleCovariance requires at least two data points in each sample\");for(var n=g(t),e=g(r),a=0,o=0;o<t.length;o++)a+=(t[o]-n)*(r[o]-e);return a/(t.length-1)}function I(t){if(t.length<2)throw new Error(\"sampleVariance requires at least two data points\");return n(t,2)/(t.length-1)}function D(t){var r=I(t);return Math.sqrt(r)}function C(t,r,n,e){return(t*r+n*e)/(r+e)}function T(t){if(0===t.length)throw new Error(\"rootMeanSquare requires at least one data point\");for(var r=0,n=0;n<t.length;n++)r+=Math.pow(t[n],2);return Math.sqrt(r/t.length)}function _(){this.totalCount=0,this.data={}}function F(){this.weights=[],this.bias=0}_.prototype.train=function(t,r){for(var n in this.data[r]||(this.data[r]={}),t){var e=t[n];void 0===this.data[r][n]&&(this.data[r][n]={}),void 0===this.data[r][n][e]&&(this.data[r][n][e]=0),this.data[r][n][e]++}this.totalCount++},_.prototype.score=function(t){var r,n={};for(var e in t){var a=t[e];for(r in this.data)n[r]={},this.data[r][e]?n[r][e+\"_\"+a]=(this.data[r][e][a]||0)/this.totalCount:n[r][e+\"_\"+a]=0}var o={};for(r in n)for(var i in o[r]=0,n[r])o[r]+=n[r][i];return o},F.prototype.predict=function(t){if(t.length!==this.weights.length)return null;for(var r=0,n=0;n<this.weights.length;n++)r+=this.weights[n]*t[n];return 0<(r+=this.bias)?1:0},F.prototype.train=function(t,r){if(0!==r&&1!==r)return null;t.length!==this.weights.length&&(this.weights=t,this.bias=1);var n=this.predict(t);if(n!==r){for(var e=r-n,a=0;a<this.weights.length;a++)this.weights[a]+=e*t[a];this.bias+=e}return this};var N=1e-4;function R(t){if(t<0)throw new Error(\"factorial requires a non-negative value\");if(Math.floor(t)!==t)throw new Error(\"factorial requires an integer input\");for(var r=1,n=2;n<=t;n++)r*=n;return r}var A=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22],z=Math.log(Math.sqrt(2*Math.PI));var V={1:{.995:0,.99:0,.975:0,.95:0,.9:.02,.5:.45,.1:2.71,.05:3.84,.025:5.02,.01:6.63,.005:7.88},2:{.995:.01,.99:.02,.975:.05,.95:.1,.9:.21,.5:1.39,.1:4.61,.05:5.99,.025:7.38,.01:9.21,.005:10.6},3:{.995:.07,.99:.11,.975:.22,.95:.35,.9:.58,.5:2.37,.1:6.25,.05:7.81,.025:9.35,.01:11.34,.005:12.84},4:{.995:.21,.99:.3,.975:.48,.95:.71,.9:1.06,.5:3.36,.1:7.78,.05:9.49,.025:11.14,.01:13.28,.005:14.86},5:{.995:.41,.99:.55,.975:.83,.95:1.15,.9:1.61,.5:4.35,.1:9.24,.05:11.07,.025:12.83,.01:15.09,.005:16.75},6:{.995:.68,.99:.87,.975:1.24,.95:1.64,.9:2.2,.5:5.35,.1:10.65,.05:12.59,.025:14.45,.01:16.81,.005:18.55},7:{.995:.99,.99:1.25,.975:1.69,.95:2.17,.9:2.83,.5:6.35,.1:12.02,.05:14.07,.025:16.01,.01:18.48,.005:20.28},8:{.995:1.34,.99:1.65,.975:2.18,.95:2.73,.9:3.49,.5:7.34,.1:13.36,.05:15.51,.025:17.53,.01:20.09,.005:21.96},9:{.995:1.73,.99:2.09,.975:2.7,.95:3.33,.9:4.17,.5:8.34,.1:14.68,.05:16.92,.025:19.02,.01:21.67,.005:23.59},10:{.995:2.16,.99:2.56,.975:3.25,.95:3.94,.9:4.87,.5:9.34,.1:15.99,.05:18.31,.025:20.48,.01:23.21,.005:25.19},11:{.995:2.6,.99:3.05,.975:3.82,.95:4.57,.9:5.58,.5:10.34,.1:17.28,.05:19.68,.025:21.92,.01:24.72,.005:26.76},12:{.995:3.07,.99:3.57,.975:4.4,.95:5.23,.9:6.3,.5:11.34,.1:18.55,.05:21.03,.025:23.34,.01:26.22,.005:28.3},13:{.995:3.57,.99:4.11,.975:5.01,.95:5.89,.9:7.04,.5:12.34,.1:19.81,.05:22.36,.025:24.74,.01:27.69,.005:29.82},14:{.995:4.07,.99:4.66,.975:5.63,.95:6.57,.9:7.79,.5:13.34,.1:21.06,.05:23.68,.025:26.12,.01:29.14,.005:31.32},15:{.995:4.6,.99:5.23,.975:6.27,.95:7.26,.9:8.55,.5:14.34,.1:22.31,.05:25,.025:27.49,.01:30.58,.005:32.8},16:{.995:5.14,.99:5.81,.975:6.91,.95:7.96,.9:9.31,.5:15.34,.1:23.54,.05:26.3,.025:28.85,.01:32,.005:34.27},17:{.995:5.7,.99:6.41,.975:7.56,.95:8.67,.9:10.09,.5:16.34,.1:24.77,.05:27.59,.025:30.19,.01:33.41,.005:35.72},18:{.995:6.26,.99:7.01,.975:8.23,.95:9.39,.9:10.87,.5:17.34,.1:25.99,.05:28.87,.025:31.53,.01:34.81,.005:37.16},19:{.995:6.84,.99:7.63,.975:8.91,.95:10.12,.9:11.65,.5:18.34,.1:27.2,.05:30.14,.025:32.85,.01:36.19,.005:38.58},20:{.995:7.43,.99:8.26,.975:9.59,.95:10.85,.9:12.44,.5:19.34,.1:28.41,.05:31.41,.025:34.17,.01:37.57,.005:40},21:{.995:8.03,.99:8.9,.975:10.28,.95:11.59,.9:13.24,.5:20.34,.1:29.62,.05:32.67,.025:35.48,.01:38.93,.005:41.4},22:{.995:8.64,.99:9.54,.975:10.98,.95:12.34,.9:14.04,.5:21.34,.1:30.81,.05:33.92,.025:36.78,.01:40.29,.005:42.8},23:{.995:9.26,.99:10.2,.975:11.69,.95:13.09,.9:14.85,.5:22.34,.1:32.01,.05:35.17,.025:38.08,.01:41.64,.005:44.18},24:{.995:9.89,.99:10.86,.975:12.4,.95:13.85,.9:15.66,.5:23.34,.1:33.2,.05:36.42,.025:39.36,.01:42.98,.005:45.56},25:{.995:10.52,.99:11.52,.975:13.12,.95:14.61,.9:16.47,.5:24.34,.1:34.28,.05:37.65,.025:40.65,.01:44.31,.005:46.93},26:{.995:11.16,.99:12.2,.975:13.84,.95:15.38,.9:17.29,.5:25.34,.1:35.56,.05:38.89,.025:41.92,.01:45.64,.005:48.29},27:{.995:11.81,.99:12.88,.975:14.57,.95:16.15,.9:18.11,.5:26.34,.1:36.74,.05:40.11,.025:43.19,.01:46.96,.005:49.65},28:{.995:12.46,.99:13.57,.975:15.31,.95:16.93,.9:18.94,.5:27.34,.1:37.92,.05:41.34,.025:44.46,.01:48.28,.005:50.99},29:{.995:13.12,.99:14.26,.975:16.05,.95:17.71,.9:19.77,.5:28.34,.1:39.09,.05:42.56,.025:45.72,.01:49.59,.005:52.34},30:{.995:13.79,.99:14.95,.975:16.79,.95:18.49,.9:20.6,.5:29.34,.1:40.26,.05:43.77,.025:46.98,.01:50.89,.005:53.67},40:{.995:20.71,.99:22.16,.975:24.43,.95:26.51,.9:29.05,.5:39.34,.1:51.81,.05:55.76,.025:59.34,.01:63.69,.005:66.77},50:{.995:27.99,.99:29.71,.975:32.36,.95:34.76,.9:37.69,.5:49.33,.1:63.17,.05:67.5,.025:71.42,.01:76.15,.005:79.49},60:{.995:35.53,.99:37.48,.975:40.48,.95:43.19,.9:46.46,.5:59.33,.1:74.4,.05:79.08,.025:83.3,.01:88.38,.005:91.95},70:{.995:43.28,.99:45.44,.975:48.76,.95:51.74,.9:55.33,.5:69.33,.1:85.53,.05:90.53,.025:95.02,.01:100.42,.005:104.22},80:{.995:51.17,.99:53.54,.975:57.15,.95:60.39,.9:64.28,.5:79.33,.1:96.58,.05:101.88,.025:106.63,.01:112.33,.005:116.32},90:{.995:59.2,.99:61.75,.975:65.65,.95:69.13,.9:73.29,.5:89.33,.1:107.57,.05:113.14,.025:118.14,.01:124.12,.005:128.3},100:{.995:67.33,.99:70.06,.975:74.22,.95:77.93,.9:82.36,.5:99.33,.1:118.5,.05:124.34,.025:129.56,.01:135.81,.005:140.17}};var j=Math.sqrt(2*Math.PI),B={gaussian:function(t){return Math.exp(-.5*t*t)/j}},K={nrd:function(t){var r=D(t),n=m(t);return\"number\"==typeof n&&(r=Math.min(r,n/1.34)),1.06*r*Math.pow(t.length,-.2)}};function O(e,t,r){var a,o;if(void 0===t)a=B.gaussian;else if(\"string\"==typeof t){if(!B[t])throw new Error('Unknown kernel \"'+t+'\"');a=B[t]}else a=t;if(void 0===r)o=K.nrd(e);else if(\"string\"==typeof r){if(!K[r])throw new Error('Unknown bandwidth method \"'+r+'\"');o=K[r](e)}else o=r;return function(t){var r=0,n=0;for(r=0;r<e.length;r++)n+=a((t-e[r])/o);return n/o/e.length}}var U=Math.sqrt(2*Math.PI);function G(t){for(var r=t,n=t,e=1;e<15;e++)r+=n*=t*t/(2*e+1);return Math.round(1e4*(.5+r/U*Math.exp(-t*t/2)))/1e4}for(var H=[],L=0;L<=3.09;L+=.01)H.push(G(L));function W(t){var r=1/(1+.5*Math.abs(t)),n=r*Math.exp(-Math.pow(t,2)-1.26551223+1.00002368*r+.37409196*Math.pow(r,2)+.09678418*Math.pow(r,3)-.18628806*Math.pow(r,4)+.27886807*Math.pow(r,5)-1.13520398*Math.pow(r,6)+1.48851587*Math.pow(r,7)-.82215223*Math.pow(r,8)+.17087277*Math.pow(r,9));return 0<=t?1-n:n-1}function J(t){var r=8*(Math.PI-3)/(3*Math.PI*(4-Math.PI)),n=Math.sqrt(Math.sqrt(Math.pow(2/(Math.PI*r)+Math.log(1-t*t)/2,2)-Math.log(1-t*t)/r)-(2/(Math.PI*r)+Math.log(1-t*t)/2));return 0<=t?n:-n}function Q(t){if(\"number\"==typeof t)return t<0?-1:0===t?0:1;throw new TypeError(\"not a number\")}t.linearRegression=function(t){var r,n,e=t.length;if(1===e)n=t[r=0][1];else{for(var a,o,i,u=0,h=0,f=0,s=0,l=0;l<e;l++)u+=o=(a=t[l])[0],h+=i=a[1],f+=o*o,s+=o*i;n=h/e-(r=(e*s-u*h)/(e*f-u*u))*u/e}return{m:r,b:n}},t.linearRegressionLine=function(r){return function(t){return r.b+r.m*t}},t.standardDeviation=a,t.rSquared=function(t,r){if(t.length<2)return 1;for(var n,e=0,a=0;a<t.length;a++)e+=t[a][1];n=e/t.length;for(var o=0,i=0;i<t.length;i++)o+=Math.pow(n-t[i][1],2);for(var u=0,h=0;h<t.length;h++)u+=Math.pow(t[h][1]-r(t[h][0]),2);return 1-u/o},t.mode=function(t){return o(f(t))},t.modeFast=function(t){for(var r,n=new Map,e=0,a=0;a<t.length;a++){var o=n.get(t[a]);void 0===o?o=1:o++,e<o&&(r=t[a],e=o),n.set(t[a],o)}if(0===e)throw new Error(\"mode requires at last one data point\");return r},t.modeSorted=o,t.min=u,t.max=h,t.extent=function(t){if(0===t.length)throw new Error(\"extent requires at least one data point\");for(var r=t[0],n=t[0],e=1;e<t.length;e++)t[e]>n&&(n=t[e]),t[e]<r&&(r=t[e]);return[r,n]},t.minSorted=function(t){return t[0]},t.maxSorted=function(t){return t[t.length-1]},t.extentSorted=function(t){return[t[0],t[t.length-1]]},t.sum=r,t.sumSimple=function(t){for(var r=0,n=0;n<t.length;n++)r+=t[n];return r},t.product=function(t){for(var r=1,n=0;n<t.length;n++)r*=t[n];return r},t.quantile=s,t.quantileSorted=i,t.quantileRank=function(t,r){return M(f(t),r)},t.quantileRankSorted=M,t.interquartileRange=m,t.iqr=m,t.medianAbsoluteDeviation=b,t.mad=b,t.chunk=function(t,r){var n=[];if(r<1)throw new Error(\"chunk size must be a positive number\");if(Math.floor(r)!==r)throw new Error(\"chunk size must be an integer\");for(var e=0;e<t.length;e+=r)n.push(t.slice(e,e+r));return n},t.sampleWithReplacement=function(t,r,n){if(0===t.length)return[];n=n||Math.random;for(var e=t.length,a=[],o=0;o<r;o++){var i=Math.floor(n()*e);a.push(t[i])}return a},t.shuffle=E,t.shuffleInPlace=q,t.sample=function(t,r,n){return E(t,n).slice(0,r)},t.ckmeans=function(t,r){if(r>t.length)throw new Error(\"cannot generate more classes than there are data values\");var n=f(t);if(1===y(n))return[n];var e=S(r,n.length),a=S(r,n.length);!function(t,r,n){for(var e,a=r[0].length,o=t[Math.floor(a/2)],i=[],u=[],h=0;h<a;++h)e=t[h]-o,0===h?(i.push(e),u.push(e*e)):(i.push(i[h-1]+e),u.push(u[h-1]+e*e)),r[0][h]=x(0,h,i,u),n[0][h]=0;for(var f=1;f<r.length;++f)P(f<r.length-1?f:a-1,a-1,f,r,n,i,u)}(n,e,a);for(var o=[],i=a[0].length-1,u=a.length-1;0<=u;u--){var h=a[u][i];o[u]=n.slice(h,i+1),0<u&&(i=h-1)}return o},t.uniqueCountSorted=y,t.sumNthPowerDeviations=n,t.equalIntervalBreaks=function(t,r){if(t.length<2)return t;for(var n=u(t),e=h(t),a=[n],o=(e-n)/r,i=1;i<r;i++)a.push(a[0]+o*i);return a.push(e),a},t.sampleCovariance=k,t.sampleCorrelation=function(t,r){return k(t,r)/D(t)/D(r)},t.sampleVariance=I,t.sampleStandardDeviation=D,t.sampleSkewness=function(t){if(t.length<3)throw new Error(\"sampleSkewness requires at least three data points\");for(var r,n=g(t),e=0,a=0,o=0;o<t.length;o++)e+=(r=t[o]-n)*r,a+=r*r*r;var i=t.length-1,u=Math.sqrt(e/i),h=t.length;return h*a/((h-1)*(h-2)*Math.pow(u,3))},t.sampleKurtosis=function(t){var r=t.length;if(r<4)throw new Error(\"sampleKurtosis requires at least four data points\");for(var n,e=g(t),a=0,o=0,i=0;i<r;i++)a+=(n=t[i]-e)*n,o+=n*n*n*n;return(r-1)/((r-2)*(r-3))*(r*(r+1)*o/(a*a)-3*(r-1))},t.permutationsHeap=function(t){for(var r=new Array(t.length),n=[t.slice()],e=0;e<t.length;e++)r[e]=0;for(e=0;e<t.length;)if(r[e]<e){var a=0;e%2!=0&&(a=r[e]);var o=t[a];t[a]=t[e],t[e]=o,n.push(t.slice()),r[e]++,e=0}else r[e]=0,e++;return n},t.combinations=function t(r,n){var e,a,o,i,u=[];for(e=0;e<r.length;e++)if(1===n)u.push([r[e]]);else for(o=t(r.slice(e+1,r.length),n-1),a=0;a<o.length;a++)(i=o[a]).unshift(r[e]),u.push(i);return u},t.combinationsReplacement=function t(r,n){for(var e=[],a=0;a<r.length;a++)if(1===n)e.push([r[a]]);else for(var o=t(r.slice(a,r.length),n-1),i=0;i<o.length;i++)e.push([r[a]].concat(o[i]));return e},t.addToMean=function(t,r,n){return t+(n-t)/(r+1)},t.combineMeans=C,t.combineVariances=function(t,r,n,e,a,o){var i=C(r,n,a,o);return(n*(t+Math.pow(r-i,2))+o*(e+Math.pow(a-i,2)))/(n+o)},t.geometricMean=function(t){if(0===t.length)throw new Error(\"geometricMean requires at least one data point\");for(var r=1,n=0;n<t.length;n++){if(t[n]<=0)throw new Error(\"geometricMean requires only positive numbers as input\");r*=t[n]}return Math.pow(r,1/t.length)},t.harmonicMean=function(t){if(0===t.length)throw new Error(\"harmonicMean requires at least one data point\");for(var r=0,n=0;n<t.length;n++){if(t[n]<=0)throw new Error(\"harmonicMean requires only positive numbers as input\");r+=1/t[n]}return t.length/r},t.average=g,t.mean=g,t.median=d,t.medianSorted=function(t){return i(t,.5)},t.subtractFromMean=function(t,r,n){return(t*r-n)/(r-1)},t.rootMeanSquare=T,t.rms=T,t.variance=e,t.tTest=function(t,r){return(g(t)-r)/(a(t)/Math.sqrt(t.length))},t.tTestTwoSample=function(t,r,n){var e=t.length,a=r.length;if(!e||!a)return null;n||(n=0);var o=g(t),i=g(r),u=I(t),h=I(r);if(\"number\"==typeof o&&\"number\"==typeof i&&\"number\"==typeof u&&\"number\"==typeof h){var f=((e-1)*u+(a-1)*h)/(e+a-2);return(o-i-n)/Math.sqrt(f*(1/e+1/a))}},t.BayesianClassifier=_,t.bayesian=_,t.PerceptronModel=F,t.perceptron=F,t.epsilon=N,t.factorial=R,t.gamma=function t(r){if(\"number\"==typeof(n=r)&&isFinite(n)&&Math.floor(n)===n)return r<=0?NaN:R(r-1);var n;if(--r<0)return Math.PI/(Math.sin(Math.PI*-r)*t(-r));var e=r+.25;return Math.pow(r/Math.E,r)*Math.sqrt(2*Math.PI*(r+1/6))*(1+1/144/Math.pow(e,2)-1/12960/Math.pow(e,3)-257/207360/Math.pow(e,4)-52/2612736/Math.pow(e,5)+5741173/9405849600/Math.pow(e,6)+37529/18811699200/Math.pow(e,7))},t.gammaln=function(t){if(t<=0)return 1/0;t--;for(var r=A[0],n=1;n<15;n++)r+=A[n]/(t+n);var e=5.2421875+t;return z+Math.log(r)-e+(t+.5)*Math.log(e)},t.bernoulliDistribution=function(t){if(t<0||1<t)throw new Error(\"bernoulliDistribution requires probability to be between 0 and 1 inclusive\");return[1-t,t]},t.binomialDistribution=function(t,r){if(!(r<0||1<r||t<=0||t%1!=0)){for(var n=0,e=0,a=[],o=1;a[n]=o*Math.pow(r,n)*Math.pow(1-r,t-n),e+=a[n],o=o*(t-++n+1)/n,e<1-N;);return a}},t.poissonDistribution=function(t){if(!(t<=0)){for(var r=0,n=0,e=[],a=1;e[r]=Math.exp(-t)*Math.pow(t,r)/a,n+=e[r],a*=++r,n<1-N;);return e}},t.chiSquaredDistributionTable=V,t.chiSquaredGoodnessOfFit=function(t,r,n){for(var e,a,o=0,i=r(g(t)),u=[],h=[],f=0;f<t.length;f++)void 0===u[t[f]]&&(u[t[f]]=0),u[t[f]]++;for(f=0;f<u.length;f++)void 0===u[f]&&(u[f]=0);for(a in i)a in u&&(h[+a]=i[a]*t.length);for(a=h.length-1;0<=a;a--)h[a]<3&&(h[a-1]+=h[a],h.pop(),u[a-1]+=u[a],u.pop());for(a=0;a<u.length;a++)o+=Math.pow(u[a]-h[a],2)/h[a];return e=u.length-1-1,V[e][n]<o},t.kernelDensityEstimation=O,t.kde=O,t.zScore=function(t,r,n){return(t-r)/n},t.cumulativeStdNormalProbability=function(t){var r=Math.abs(t),n=Math.min(Math.round(100*r),H.length-1);return 0<=t?H[n]:+(1-H[n]).toFixed(4)},t.standardNormalTable=H,t.errorFunction=W,t.erf=W,t.inverseErrorFunction=J,t.probit=function(t){return 0===t?t=N:1<=t&&(t=1-N),Math.sqrt(2)*J(2*t-1)},t.permutationTest=function(t,r,n,e){if(void 0===e&&(e=1e4),void 0===n&&(n=\"two_side\"),\"two_side\"!==n&&\"greater\"!==n&&\"less\"!==n)throw new Error(\"`alternative` must be either 'two_side', 'greater', or 'less'\");for(var a=g(t)-g(r),o=new Array(e),i=t.concat(r),u=Math.floor(i.length/2),h=0;h<e;h++){q(i);var f=i.slice(0,u),s=i.slice(u,i.length),l=g(f)-g(s);o[h]=l}var c=0;if(\"two_side\"===n)for(h=0;h<=e;h++)Math.abs(o[h])>=Math.abs(a)&&(c+=1);else if(\"greater\"===n)for(h=0;h<=e;h++)o[h]>=a&&(c+=1);else for(h=0;h<=e;h++)o[h]<=a&&(c+=1);return c/e},t.bisect=function(t,r,n,e,a){if(\"function\"!=typeof t)throw new TypeError(\"func must be a function\");for(var o=0;o<e;o++){var i=(r+n)/2;if(0===t(i)||Math.abs((n-r)/2)<a)return i;Q(t(i))===Q(t(r))?r=i:n=i}throw new Error(\"maximum number of iterations exceeded\")},t.quickselect=c,t.sign=Q,t.numericSort=f,Object.defineProperty(t,\"__esModule\",{value:!0})});\n//# sourceMappingURL=simple-statistics.min.js.map\n","// https://github.com/topojson/topojson-client v3.1.0 Copyright 2019 Mike Bostock\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\ntypeof define === 'function' && define.amd ? define(['exports'], factory) :\n(global = global || self, factory(global.topojson = global.topojson || {}));\n}(this, function (exports) { 'use strict';\n\nfunction identity(x) {\n return x;\n}\n\nfunction transform(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n\nfunction bbox(topology) {\n var t = transform(topology.transform), key,\n x0 = Infinity, y0 = x0, x1 = -x0, y1 = -x0;\n\n function bboxPoint(p) {\n p = t(p);\n if (p[0] < x0) x0 = p[0];\n if (p[0] > x1) x1 = p[0];\n if (p[1] < y0) y0 = p[1];\n if (p[1] > y1) y1 = p[1];\n }\n\n function bboxGeometry(o) {\n switch (o.type) {\n case \"GeometryCollection\": o.geometries.forEach(bboxGeometry); break;\n case \"Point\": bboxPoint(o.coordinates); break;\n case \"MultiPoint\": o.coordinates.forEach(bboxPoint); break;\n }\n }\n\n topology.arcs.forEach(function(arc) {\n var i = -1, n = arc.length, p;\n while (++i < n) {\n p = t(arc[i], i);\n if (p[0] < x0) x0 = p[0];\n if (p[0] > x1) x1 = p[0];\n if (p[1] < y0) y0 = p[1];\n if (p[1] > y1) y1 = p[1];\n }\n });\n\n for (key in topology.objects) {\n bboxGeometry(topology.objects[key]);\n }\n\n return [x0, y0, x1, y1];\n}\n\nfunction reverse(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n\nfunction feature(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature$1(topology, o); })}\n : feature$1(topology, o);\n}\n\nfunction feature$1(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nfunction object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n\nfunction stitch(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n\nfunction mesh(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nfunction meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n\nfunction planarRingArea(ring) {\n var i = -1, n = ring.length, a, b = ring[n - 1], area = 0;\n while (++i < n) a = b, b = ring[i], area += a[0] * b[1] - a[1] * b[0];\n return Math.abs(area); // Note: doubled area!\n}\n\nfunction merge(topology) {\n return object(topology, mergeArcs.apply(this, arguments));\n}\n\nfunction mergeArcs(topology, objects) {\n var polygonsByArc = {},\n polygons = [],\n groups = [];\n\n objects.forEach(geometry);\n\n function geometry(o) {\n switch (o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"Polygon\": extract(o.arcs); break;\n case \"MultiPolygon\": o.arcs.forEach(extract); break;\n }\n }\n\n function extract(polygon) {\n polygon.forEach(function(ring) {\n ring.forEach(function(arc) {\n (polygonsByArc[arc = arc < 0 ? ~arc : arc] || (polygonsByArc[arc] = [])).push(polygon);\n });\n });\n polygons.push(polygon);\n }\n\n function area(ring) {\n return planarRingArea(object(topology, {type: \"Polygon\", arcs: [ring]}).coordinates[0]);\n }\n\n polygons.forEach(function(polygon) {\n if (!polygon._) {\n var group = [],\n neighbors = [polygon];\n polygon._ = 1;\n groups.push(group);\n while (polygon = neighbors.pop()) {\n group.push(polygon);\n polygon.forEach(function(ring) {\n ring.forEach(function(arc) {\n polygonsByArc[arc < 0 ? ~arc : arc].forEach(function(polygon) {\n if (!polygon._) {\n polygon._ = 1;\n neighbors.push(polygon);\n }\n });\n });\n });\n }\n }\n });\n\n polygons.forEach(function(polygon) {\n delete polygon._;\n });\n\n return {\n type: \"MultiPolygon\",\n arcs: groups.map(function(polygons) {\n var arcs = [], n;\n\n // Extract the exterior (unique) arcs.\n polygons.forEach(function(polygon) {\n polygon.forEach(function(ring) {\n ring.forEach(function(arc) {\n if (polygonsByArc[arc < 0 ? ~arc : arc].length < 2) {\n arcs.push(arc);\n }\n });\n });\n });\n\n // Stitch the arcs into one or more rings.\n arcs = stitch(topology, arcs);\n\n // If more than one ring is returned,\n // at most one of these rings can be the exterior;\n // choose the one with the greatest absolute area.\n if ((n = arcs.length) > 1) {\n for (var i = 1, k = area(arcs[0]), ki, t; i < n; ++i) {\n if ((ki = area(arcs[i])) > k) {\n t = arcs[0], arcs[0] = arcs[i], arcs[i] = t, k = ki;\n }\n }\n }\n\n return arcs;\n }).filter(function(arcs) {\n return arcs.length > 0;\n })\n };\n}\n\nfunction bisect(a, x) {\n var lo = 0, hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (a[mid] < x) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\nfunction neighbors(objects) {\n var indexesByArc = {}, // arc index -> array of object indexes\n neighbors = objects.map(function() { return []; });\n\n function line(arcs, i) {\n arcs.forEach(function(a) {\n if (a < 0) a = ~a;\n var o = indexesByArc[a];\n if (o) o.push(i);\n else indexesByArc[a] = [i];\n });\n }\n\n function polygon(arcs, i) {\n arcs.forEach(function(arc) { line(arc, i); });\n }\n\n function geometry(o, i) {\n if (o.type === \"GeometryCollection\") o.geometries.forEach(function(o) { geometry(o, i); });\n else if (o.type in geometryType) geometryType[o.type](o.arcs, i);\n }\n\n var geometryType = {\n LineString: line,\n MultiLineString: polygon,\n Polygon: polygon,\n MultiPolygon: function(arcs, i) { arcs.forEach(function(arc) { polygon(arc, i); }); }\n };\n\n objects.forEach(geometry);\n\n for (var i in indexesByArc) {\n for (var indexes = indexesByArc[i], m = indexes.length, j = 0; j < m; ++j) {\n for (var k = j + 1; k < m; ++k) {\n var ij = indexes[j], ik = indexes[k], n;\n if ((n = neighbors[ij])[i = bisect(n, ik)] !== ik) n.splice(i, 0, ik);\n if ((n = neighbors[ik])[i = bisect(n, ij)] !== ij) n.splice(i, 0, ij);\n }\n }\n }\n\n return neighbors;\n}\n\nfunction untransform(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2,\n n = input.length,\n output = new Array(n),\n x1 = Math.round((input[0] - dx) / kx),\n y1 = Math.round((input[1] - dy) / ky);\n output[0] = x1 - x0, x0 = x1;\n output[1] = y1 - y0, y0 = y1;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n\nfunction quantize(topology, transform) {\n if (topology.transform) throw new Error(\"already quantized\");\n\n if (!transform || !transform.scale) {\n if (!((n = Math.floor(transform)) >= 2)) throw new Error(\"n must be ≥2\");\n box = topology.bbox || bbox(topology);\n var x0 = box[0], y0 = box[1], x1 = box[2], y1 = box[3], n;\n transform = {scale: [x1 - x0 ? (x1 - x0) / (n - 1) : 1, y1 - y0 ? (y1 - y0) / (n - 1) : 1], translate: [x0, y0]};\n } else {\n box = topology.bbox;\n }\n\n var t = untransform(transform), box, key, inputs = topology.objects, outputs = {};\n\n function quantizePoint(point) {\n return t(point);\n }\n\n function quantizeGeometry(input) {\n var output;\n switch (input.type) {\n case \"GeometryCollection\": output = {type: \"GeometryCollection\", geometries: input.geometries.map(quantizeGeometry)}; break;\n case \"Point\": output = {type: \"Point\", coordinates: quantizePoint(input.coordinates)}; break;\n case \"MultiPoint\": output = {type: \"MultiPoint\", coordinates: input.coordinates.map(quantizePoint)}; break;\n default: return input;\n }\n if (input.id != null) output.id = input.id;\n if (input.bbox != null) output.bbox = input.bbox;\n if (input.properties != null) output.properties = input.properties;\n return output;\n }\n\n function quantizeArc(input) {\n var i = 0, j = 1, n = input.length, p, output = new Array(n); // pessimistic\n output[0] = t(input[0], 0);\n while (++i < n) if ((p = t(input[i], i))[0] || p[1]) output[j++] = p; // non-coincident points\n if (j === 1) output[j++] = [0, 0]; // an arc must have at least two points\n output.length = j;\n return output;\n }\n\n for (key in inputs) outputs[key] = quantizeGeometry(inputs[key]);\n\n return {\n type: \"Topology\",\n bbox: box,\n transform: transform,\n objects: outputs,\n arcs: topology.arcs.map(quantizeArc)\n };\n}\n\nexports.bbox = bbox;\nexports.feature = feature;\nexports.merge = merge;\nexports.mergeArcs = mergeArcs;\nexports.mesh = mesh;\nexports.meshArcs = meshArcs;\nexports.neighbors = neighbors;\nexports.quantize = quantize;\nexports.transform = transform;\nexports.untransform = untransform;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n }\r\n else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n factory(createExporter(root, createExporter(module.exports)));\r\n }\r\n else {\r\n factory(createExporter(root));\r\n }\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function (m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n };\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result[\"default\"] = mod;\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n }\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/*!\n * EventEmitter v5.2.9 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - https://oli.me.uk/\n * @preserve\n */\n\n;(function (exports) {\n 'use strict';\n\n /**\n * Class for managing events.\n * Can be extended to provide event functionality in other classes.\n *\n * @class EventEmitter Manages event registering and emitting.\n */\n function EventEmitter() {}\n\n // Shortcuts to improve speed and size\n var proto = EventEmitter.prototype;\n var originalGlobalValue = exports.EventEmitter;\n\n /**\n * Finds the index of the listener for the event in its storage array.\n *\n * @param {Function[]} listeners Array of listeners to search through.\n * @param {Function} listener Method to look for.\n * @return {Number} Index of the specified listener, -1 if not found\n * @api private\n */\n function indexOfListener(listeners, listener) {\n var i = listeners.length;\n while (i--) {\n if (listeners[i].listener === listener) {\n return i;\n }\n }\n\n return -1;\n }\n\n /**\n * Alias a method while keeping the context correct, to allow for overwriting of target method.\n *\n * @param {String} name The name of the target method.\n * @return {Function} The aliased method\n * @api private\n */\n function alias(name) {\n return function aliasClosure() {\n return this[name].apply(this, arguments);\n };\n }\n\n /**\n * Returns the listener array for the specified event.\n * Will initialise the event object and listener arrays if required.\n * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n * Each property in the object response is an array of listener functions.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Function[]|Object} All listener functions for the event.\n */\n proto.getListeners = function getListeners(evt) {\n var events = this._getEvents();\n var response;\n var key;\n\n // Return a concatenated array of all matching events if\n // the selector is a regular expression.\n if (evt instanceof RegExp) {\n response = {};\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n response[key] = events[key];\n }\n }\n }\n else {\n response = events[evt] || (events[evt] = []);\n }\n\n return response;\n };\n\n /**\n * Takes a list of listener objects and flattens it into a list of listener functions.\n *\n * @param {Object[]} listeners Raw listener objects.\n * @return {Function[]} Just the listener functions.\n */\n proto.flattenListeners = function flattenListeners(listeners) {\n var flatListeners = [];\n var i;\n\n for (i = 0; i < listeners.length; i += 1) {\n flatListeners.push(listeners[i].listener);\n }\n\n return flatListeners;\n };\n\n /**\n * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Object} All listener functions for an event in an object.\n */\n proto.getListenersAsObject = function getListenersAsObject(evt) {\n var listeners = this.getListeners(evt);\n var response;\n\n if (listeners instanceof Array) {\n response = {};\n response[evt] = listeners;\n }\n\n return response || listeners;\n };\n\n function isValidListener (listener) {\n if (typeof listener === 'function' || listener instanceof RegExp) {\n return true\n } else if (listener && typeof listener === 'object') {\n return isValidListener(listener.listener)\n } else {\n return false\n }\n }\n\n /**\n * Adds a listener function to the specified event.\n * The listener will not be added if it is a duplicate.\n * If the listener returns true then it will be removed after it is called.\n * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListener = function addListener(evt, listener) {\n if (!isValidListener(listener)) {\n throw new TypeError('listener must be a function');\n }\n\n var listeners = this.getListenersAsObject(evt);\n var listenerIsWrapped = typeof listener === 'object';\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n listeners[key].push(listenerIsWrapped ? listener : {\n listener: listener,\n once: false\n });\n }\n }\n\n return this;\n };\n\n /**\n * Alias of addListener\n */\n proto.on = alias('addListener');\n\n /**\n * Semi-alias of addListener. It will add a listener that will be\n * automatically removed after its first execution.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addOnceListener = function addOnceListener(evt, listener) {\n return this.addListener(evt, {\n listener: listener,\n once: true\n });\n };\n\n /**\n * Alias of addOnceListener.\n */\n proto.once = alias('addOnceListener');\n\n /**\n * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n * You need to tell it what event names should be matched by a regex.\n *\n * @param {String} evt Name of the event to create.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvent = function defineEvent(evt) {\n this.getListeners(evt);\n return this;\n };\n\n /**\n * Uses defineEvent to define multiple events.\n *\n * @param {String[]} evts An array of event names to define.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvents = function defineEvents(evts) {\n for (var i = 0; i < evts.length; i += 1) {\n this.defineEvent(evts[i]);\n }\n return this;\n };\n\n /**\n * Removes a listener function from the specified event.\n * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to remove the listener from.\n * @param {Function} listener Method to remove from the event.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListener = function removeListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var index;\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key)) {\n index = indexOfListener(listeners[key], listener);\n\n if (index !== -1) {\n listeners[key].splice(index, 1);\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of removeListener\n */\n proto.off = alias('removeListener');\n\n /**\n * Adds listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n * You can also pass it a regular expression to add the array of listeners to all events that match it.\n * Yeah, this function does quite a bit. That's probably a bad thing.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListeners = function addListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(false, evt, listeners);\n };\n\n /**\n * Removes listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be removed.\n * You can also pass it a regular expression to remove the listeners from all events that match it.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListeners = function removeListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(true, evt, listeners);\n };\n\n /**\n * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n * The first argument will determine if the listeners are removed (true) or added (false).\n * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added/removed.\n * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n *\n * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n var i;\n var value;\n var single = remove ? this.removeListener : this.addListener;\n var multiple = remove ? this.removeListeners : this.addListeners;\n\n // If evt is an object then pass each of its properties to this method\n if (typeof evt === 'object' && !(evt instanceof RegExp)) {\n for (i in evt) {\n if (evt.hasOwnProperty(i) && (value = evt[i])) {\n // Pass the single listener straight through to the singular method\n if (typeof value === 'function') {\n single.call(this, i, value);\n }\n else {\n // Otherwise pass back to the multiple function\n multiple.call(this, i, value);\n }\n }\n }\n }\n else {\n // So evt must be a string\n // And listeners must be an array of listeners\n // Loop over it and pass each one to the multiple method\n i = listeners.length;\n while (i--) {\n single.call(this, evt, listeners[i]);\n }\n }\n\n return this;\n };\n\n /**\n * Removes all listeners from a specified event.\n * If you do not specify an event then all listeners will be removed.\n * That means every event will be emptied.\n * You can also pass a regex to remove all events that match it.\n *\n * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeEvent = function removeEvent(evt) {\n var type = typeof evt;\n var events = this._getEvents();\n var key;\n\n // Remove different things depending on the state of evt\n if (type === 'string') {\n // Remove all listeners for the specified event\n delete events[evt];\n }\n else if (evt instanceof RegExp) {\n // Remove all events matching the regex.\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n delete events[key];\n }\n }\n }\n else {\n // Remove all listeners in all events\n delete this._events;\n }\n\n return this;\n };\n\n /**\n * Alias of removeEvent.\n *\n * Added to mirror the node API.\n */\n proto.removeAllListeners = alias('removeEvent');\n\n /**\n * Emits an event of your choice.\n * When emitted, every listener attached to that event will be executed.\n * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n * So they will not arrive within the array on the other side, they will be separate.\n * You can also pass a regular expression to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {Array} [args] Optional array of arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emitEvent = function emitEvent(evt, args) {\n var listenersMap = this.getListenersAsObject(evt);\n var listeners;\n var listener;\n var i;\n var key;\n var response;\n\n for (key in listenersMap) {\n if (listenersMap.hasOwnProperty(key)) {\n listeners = listenersMap[key].slice(0);\n\n for (i = 0; i < listeners.length; i++) {\n // If the listener returns true then it shall be removed from the event\n // The function is executed either with a basic call or an apply if there is an args array\n listener = listeners[i];\n\n if (listener.once === true) {\n this.removeListener(evt, listener.listener);\n }\n\n response = listener.listener.apply(this, args || []);\n\n if (response === this._getOnceReturnValue()) {\n this.removeListener(evt, listener.listener);\n }\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of emitEvent\n */\n proto.trigger = alias('emitEvent');\n\n /**\n * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {...*} Optional additional arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emit = function emit(evt) {\n var args = Array.prototype.slice.call(arguments, 1);\n return this.emitEvent(evt, args);\n };\n\n /**\n * Sets the current value to check against when executing listeners. If a\n * listeners return value matches the one set here then it will be removed\n * after execution. This value defaults to true.\n *\n * @param {*} value The new value to check for when executing listeners.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.setOnceReturnValue = function setOnceReturnValue(value) {\n this._onceReturnValue = value;\n return this;\n };\n\n /**\n * Fetches the current value to check against when executing listeners. If\n * the listeners return value matches this one then it should be removed\n * automatically. It will return true by default.\n *\n * @return {*|Boolean} The current value to check for or the default, true.\n * @api private\n */\n proto._getOnceReturnValue = function _getOnceReturnValue() {\n if (this.hasOwnProperty('_onceReturnValue')) {\n return this._onceReturnValue;\n }\n else {\n return true;\n }\n };\n\n /**\n * Fetches the events object and creates one if required.\n *\n * @return {Object} The events storage object.\n * @api private\n */\n proto._getEvents = function _getEvents() {\n return this._events || (this._events = {});\n };\n\n /**\n * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n *\n * @return {Function} Non conflicting EventEmitter class.\n */\n EventEmitter.noConflict = function noConflict() {\n exports.EventEmitter = originalGlobalValue;\n return EventEmitter;\n };\n\n // Expose the class either via AMD, CommonJS or the global object\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return EventEmitter;\n });\n }\n else if (typeof module === 'object' && module.exports){\n module.exports = EventEmitter;\n }\n else {\n exports.EventEmitter = EventEmitter;\n }\n}(typeof window !== 'undefined' ? window : this || {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar d3_geo_1 = require(\"d3-geo\");\nvar d3_geo_projection_1 = require(\"d3-geo-projection\");\nvar view_1 = require(\"../view\");\nvar get_geo_projection_1 = tslib_1.__importDefault(require(\"../util/get-geo-projection\"));\nvar api = {\n // geo maintain\n geoArea: function (feature) {\n return d3_geo_1.geoArea(feature);\n },\n geoAreaByName: function (name) {\n return d3_geo_1.geoArea(this.geoFeatureByName(name));\n },\n geoCentroid: function (feature) {\n return d3_geo_1.geoCentroid(feature);\n },\n geoCentroidByName: function (name) {\n return d3_geo_1.geoCentroid(this.geoFeatureByName(name));\n },\n geoDistance: function (p1, p2) {\n return d3_geo_1.geoDistance(p1, p2);\n },\n geoLength: function (feature) {\n return d3_geo_1.geoLength(feature);\n },\n geoLengthByName: function (name) {\n return d3_geo_1.geoLength(this.geoFeatureByName(name));\n },\n geoContains: function (feature, position /* [longitude, latitude] */) {\n return d3_geo_1.geoContains(feature, position);\n },\n geoFeatureByName: function (name) {\n var rows = this.rows;\n var result;\n rows.some(function (feature) {\n if (feature.name === name) {\n result = feature;\n return true;\n }\n return false;\n });\n return result;\n },\n geoFeatureByPosition: function (position) {\n var rows = this.rows;\n var result;\n rows.some(function (feature) {\n if (d3_geo_1.geoContains(feature, position)) {\n result = feature;\n return true;\n }\n return false;\n });\n return result;\n },\n geoNameByPosition: function (position) {\n var feature = this.geoFeatureByPosition(position);\n if (feature) {\n return feature.name;\n }\n },\n // projection\n // export getGeoProjection for custom used.\n getGeoProjection: get_geo_projection_1.default,\n geoProject: function (feature, projection, exportRaw) {\n projection = get_geo_projection_1.default(projection, exportRaw);\n return d3_geo_projection_1.geoProject(feature, projection);\n },\n geoProjectByName: function (name, projection, exportRaw) {\n projection = get_geo_projection_1.default(projection, exportRaw);\n return d3_geo_projection_1.geoProject(this.geoFeatureByName(name), projection);\n },\n geoProjectPosition: function (position, projection, exportRaw) {\n var func = get_geo_projection_1.default(projection, exportRaw);\n return func(position);\n },\n geoProjectInvert: function (position /* [x, y] */, projection, exportRaw) {\n var func = get_geo_projection_1.default(projection, exportRaw);\n return func.invert(position);\n },\n};\nutil_1.assign(view_1.View.prototype, api);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar view_1 = require(\"../view\");\nutil_1.assign(view_1.View.prototype, {\n getAllNodes: function () {\n var nodes = [];\n var root = this.root;\n if (root && root.each) {\n // d3-hierarchy\n root.each(function (node) {\n nodes.push(node);\n });\n }\n else if (root && root.eachNode) {\n // @antv/hierarchy\n root.eachNode(function (node) {\n nodes.push(node);\n });\n }\n return nodes;\n },\n getAllLinks: function () {\n var links = [];\n var nodes = [this.root];\n var node;\n while ((node = nodes.pop())) {\n var children = node.children;\n if (children) {\n children.forEach(function (child) {\n links.push({\n source: node,\n target: child,\n });\n nodes.push(child);\n });\n }\n }\n return links;\n },\n});\nutil_1.assign(view_1.View.prototype, {\n getAllEdges: view_1.View.prototype.getAllLinks,\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar partition_1 = tslib_1.__importDefault(require(\"../util/partition\"));\nvar view_1 = require(\"../view\");\nutil_1.assign(view_1.View.prototype, {\n partition: function (group_by, order_by) {\n if (order_by === void 0) { order_by = []; }\n return partition_1.default(this.rows, group_by, order_by);\n },\n group: function (group_by, order_by) {\n if (order_by === void 0) { order_by = []; }\n var groups = this.partition(group_by, order_by);\n return util_1.values(groups);\n },\n groups: function (group_by, order_by) {\n if (order_by === void 0) { order_by = []; }\n return this.group(group_by, order_by);\n },\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar simpleStatistics = tslib_1.__importStar(require(\"simple-statistics\"));\nvar util_1 = require(\"@antv/util\");\nvar view_1 = require(\"../view\");\nvar p_by_fraction_1 = tslib_1.__importDefault(require(\"../util/p-by-fraction\"));\nvar constants_1 = tslib_1.__importDefault(require(\"../constants\"));\nvar STATISTICS_METHODS = constants_1.default.STATISTICS_METHODS;\nfunction getColumnValues(view, column) {\n var values = view.getColumn(column);\n if (util_1.isArray(values) && util_1.isArray(values[0])) {\n values = util_1.flattenDeep(values);\n }\n return values;\n}\n// statistics\nSTATISTICS_METHODS.forEach(function (method) {\n // @ts-ignore;\n view_1.View.prototype[method] = function (column) {\n // @ts-ignore\n return simpleStatistics[method](getColumnValues(this, column));\n };\n});\nvar quantile = simpleStatistics.quantile;\nutil_1.assign(view_1.View.prototype, {\n average: view_1.View.prototype.mean,\n quantile: function (column, p) {\n return quantile(getColumnValues(this, column), p);\n },\n quantiles: function (column, pArr) {\n var columnArr = getColumnValues(this, column);\n return pArr.map(function (p) { return quantile(columnArr, p); });\n },\n quantilesByFraction: function (column, fraction) {\n return this.quantiles(column, p_by_fraction_1.default(fraction));\n },\n range: function (column) {\n return [this.min(column), this.max(column)];\n },\n extent: function (column) {\n // alias\n return this.range(column);\n },\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../data-set\");\ndata_set_1.DataSet.registerConnector('default', function (data, dataSet) {\n var view;\n if (util_1.isString(data)) {\n view = dataSet.getView(data);\n }\n else {\n view = data;\n }\n if (!view) {\n throw new TypeError('Invalid dataView');\n }\n return util_1.deepMix([], view.rows);\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar d3_dsv_1 = require(\"d3-dsv\");\nvar data_set_1 = require(\"../data-set\");\ndata_set_1.DataSet.registerConnector('dsv', function (str, options) {\n if (options === void 0) { options = {}; }\n var delimiter = options.delimiter || ',';\n if (!util_1.isString(delimiter)) {\n throw new TypeError('Invalid delimiter: must be a string!');\n }\n return d3_dsv_1.dsvFormat(delimiter).parse(str);\n});\ndata_set_1.DataSet.registerConnector('csv', function (str) {\n return d3_dsv_1.csvParse(str);\n});\ndata_set_1.DataSet.registerConnector('tsv', function (str) {\n return d3_dsv_1.tsvParse(str);\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar d3_geo_1 = require(\"d3-geo\");\nvar data_set_1 = require(\"../data-set\");\nfunction connector(_options, dataView) {\n dataView.dataType = 'geo-graticule';\n var data = d3_geo_1.geoGraticule().lines();\n data.map(function (row, index) {\n row.index = \"\" + index;\n return row;\n });\n dataView.rows = data;\n return data;\n}\nexports.default = connector;\ndata_set_1.DataSet.registerConnector('geo-graticule', connector);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar point_at_length_1 = tslib_1.__importDefault(require(\"point-at-length\"));\nvar util_1 = require(\"@antv/util\");\nvar d3_geo_1 = require(\"d3-geo\");\nvar data_set_1 = require(\"../data-set\");\nvar geoPathGenerator = d3_geo_1.geoPath();\nfunction GeoJSONConnector(data, _options, dataView) {\n dataView.dataType = data_set_1.DataSet.CONSTANTS.GEO;\n var features = util_1.deepMix([], data.features);\n // pre-process\n features.forEach(function (feature) {\n feature.name = feature.properties.name;\n feature.longitude = [];\n feature.latitude = [];\n var pathData = (feature.pathData = geoPathGenerator(feature));\n var points = point_at_length_1.default(pathData);\n points._path.forEach(function (point) {\n feature.longitude.push(point[1]);\n feature.latitude.push(point[2]);\n });\n var centroid = geoPathGenerator.centroid(feature);\n feature.centroidX = centroid[0];\n feature.centroidY = centroid[1];\n });\n // dataView.origin = features;\n return features;\n}\ndata_set_1.DataSet.registerConnector('geo', GeoJSONConnector);\ndata_set_1.DataSet.registerConnector('geojson', GeoJSONConnector);\ndata_set_1.DataSet.registerConnector('GeoJSON', GeoJSONConnector);\nexports.default = GeoJSONConnector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../data-set\");\nvar DEFAULT_OPTIONS = {\n nodes: function (d) {\n // optional\n return d.nodes;\n },\n edges: function (d) {\n // optional\n return d.edges;\n },\n};\nfunction connector(data, options, dataView) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n dataView.dataType = data_set_1.DataSet.CONSTANTS.GRAPH;\n var nodes = options.nodes, edges = options.edges;\n if (nodes && !util_1.isFunction(nodes)) {\n throw new TypeError('Invalid nodes: must be a function!');\n }\n if (edges && !util_1.isFunction(edges)) {\n throw new TypeError('Invalid edges: must be a function!');\n }\n // @ts-ignore\n dataView.rows = dataView.graph = {\n nodes: nodes(data),\n edges: edges(data),\n };\n util_1.assign(dataView, dataView.graph);\n return dataView.rows;\n}\ndata_set_1.DataSet.registerConnector('graph', connector);\ndata_set_1.DataSet.registerConnector('diagram', connector);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar d3_hexjson_1 = require(\"d3-hexjson\");\nvar data_set_1 = require(\"../data-set\");\nvar DEFAULT_OPTIONS = {\n width: 1,\n height: 1,\n};\nfunction processRow(row) {\n row.cx = row.x;\n row.cy = row.y;\n row.x = [];\n row.y = [];\n row.vertices.forEach(function (v) {\n row.x.push(v.x + row.cx);\n row.y.push(v.y + row.cy);\n });\n return row;\n}\nfunction HexJSONConnector(data, options, dataView) {\n dataView.dataType = data_set_1.DataSet.CONSTANTS.HEX;\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var width = options.width, height = options.height;\n var HexJSON = util_1.deepMix([], data);\n dataView._HexJSON = HexJSON;\n var grid = (dataView._GridHexJSON = d3_hexjson_1.getGridForHexJSON(HexJSON));\n var rows = (dataView.rows = d3_hexjson_1.renderHexJSON(HexJSON, width, height).map(processRow));\n dataView._gridRows = d3_hexjson_1.renderHexJSON(grid, width, height).map(processRow);\n return rows;\n}\ndata_set_1.DataSet.registerConnector('hex', HexJSONConnector);\ndata_set_1.DataSet.registerConnector('hexjson', HexJSONConnector);\ndata_set_1.DataSet.registerConnector('hex-json', HexJSONConnector);\ndata_set_1.DataSet.registerConnector('HexJSON', HexJSONConnector);\nexports.default = HexJSONConnector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar d3_hierarchy_1 = require(\"d3-hierarchy\");\nvar data_set_1 = require(\"../data-set\");\nfunction connector(data, options, dataView) {\n dataView.dataType = data_set_1.DataSet.CONSTANTS.HIERARCHY;\n var children = options && options.children ? options.children : null;\n if (children && !util_1.isFunction(children)) {\n throw new TypeError('Invalid children: must be a function!');\n }\n if (!options.pureData) {\n // @ts-ignore\n dataView.rows = dataView.root = d3_hierarchy_1.hierarchy(data, children);\n }\n else {\n dataView.rows = dataView.root = data;\n }\n return data;\n}\ndata_set_1.DataSet.registerConnector('hierarchy', connector);\ndata_set_1.DataSet.registerConnector('tree', connector);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar topojson_client_1 = require(\"topojson-client\");\nvar geojson_1 = tslib_1.__importDefault(require(\"./geojson\"));\nvar data_set_1 = require(\"../data-set\");\nfunction TopoJSONConnector(data, options, dataView) {\n var object = options.object;\n if (!util_1.isString(object)) {\n throw new TypeError('Invalid object: must be a string!');\n }\n var geoData = topojson_client_1.feature(data, data.objects[object]);\n return geojson_1.default(geoData, undefined, dataView);\n}\ndata_set_1.DataSet.registerConnector('topojson', TopoJSONConnector);\ndata_set_1.DataSet.registerConnector('TopoJSON', TopoJSONConnector);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n HIERARCHY: 'hierarchy',\n GEO: 'geo',\n HEX: 'hex',\n GRAPH: 'graph',\n TABLE: 'table',\n GEO_GRATICULE: 'geo-graticule',\n STATISTICS_METHODS: [\n 'max',\n 'mean',\n 'median',\n 'min',\n 'mode',\n 'product',\n 'standardDeviation',\n 'sum',\n 'sumSimple',\n 'variance',\n ],\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar wolfy87_eventemitter_1 = tslib_1.__importDefault(require(\"wolfy87-eventemitter\"));\nvar view_1 = require(\"./view\");\nvar constants_1 = tslib_1.__importDefault(require(\"./constants\"));\n/**\n * 数据集\n * @public\n */\nvar DataSet = /** @class */ (function (_super) {\n tslib_1.__extends(DataSet, _super);\n /**\n * @param initialProps - 初始状态\n */\n function DataSet(initialProps) {\n if (initialProps === void 0) { initialProps = { state: {} }; }\n var _this = _super.call(this) || this;\n /**\n * 否是 DataSet\n */\n _this.isDataSet = true;\n _this._onChangeTimer = null;\n /**\n * 所有挂在数据集上的数据视图key-value 对)\n */\n _this.views = {};\n /**\n * 存储数据集上的状态量key-value 对)\n */\n _this.state = {};\n // assign(me, initialProps);\n _this.state = initialProps.state;\n return _this;\n }\n /**\n * 注册一个数据连接函数,注册后所有数据视图都可以使用 name 来引用这个数据连接函数,从而接入某种数据源。\n * @param name - 类型\n * @param connector - 解析逻辑\n */\n DataSet.registerConnector = function (name, connector) {\n DataSet.connectors[name] = connector;\n };\n DataSet.getConnector = function (name) {\n return DataSet.connectors[name] || DataSet.connectors.default;\n };\n /**\n * 注册一个数据处理函数,注册后所有数据视图都可以使用 name 来引用这个数据处理函数,从而进行某种数据处理\n * @param name - transform 类型\n * @param transform - transform逻辑\n */\n DataSet.registerTransform = function (name, transform) {\n DataSet.transforms[name] = transform;\n };\n DataSet.getTransform = function (name) {\n return DataSet.transforms[name] || DataSet.transforms.default;\n };\n DataSet.prototype._getUniqueViewName = function () {\n var name = util_1.uniqueId('view_');\n while (this.views[name]) {\n name = util_1.uniqueId('view_');\n }\n return name;\n };\n DataSet.prototype.createView = function (name, options) {\n if (util_1.isNil(name)) {\n name = this._getUniqueViewName();\n }\n if (util_1.isObject(name)) {\n options = name;\n name = this._getUniqueViewName();\n }\n if (this.views[name]) {\n throw new Error(\"data view exists: \" + name);\n }\n var view = new view_1.View(this, options);\n this.views[name] = view;\n return view;\n };\n /**\n * 返回 name 对应的数据视图实例\n * @param name - name\n */\n DataSet.prototype.getView = function (name) {\n return this.views[name];\n };\n /**\n * 设置 name 对应的数据视图实例为 dv\n * @param name - 名称\n * @param view - data view\n */\n DataSet.prototype.setView = function (name, view) {\n this.views[name] = view;\n };\n /**\n * 设置状态量 name 的值为 value\n * @param name - 状态名\n * @param value - 值\n */\n DataSet.prototype.setState = function (name, value) {\n var _this = this;\n this.state[name] = value;\n if (this._onChangeTimer) {\n window.clearTimeout(this._onChangeTimer);\n this._onChangeTimer = null;\n }\n this._onChangeTimer = window.setTimeout(function () {\n _this.emit('statechange', name, value);\n }, 16); // execute after one frame\n };\n /**\n * 常量,譬如 DataSet.CONSTANTS.HIERARCHY 是树形结构的名称\n */\n DataSet.CONSTANTS = constants_1.default;\n /**\n * 注册的 Connectorkey-value 对)\n */\n DataSet.connectors = {};\n /**\n * 已注册的 Transformkey-value 对)\n */\n DataSet.transforms = {};\n DataSet.DataSet = DataSet;\n DataSet.DataView = view_1.View; // alias\n DataSet.View = view_1.View;\n DataSet.version = '____DATASET_VERSION____';\n return DataSet;\n}(wolfy87_eventemitter_1.default));\nexports.DataSet = DataSet;\n// @ts-ignore\nutil_1.assign(DataSet, constants_1.default);\n// @ts-ignore\nutil_1.assign(DataSet.prototype, {\n view: DataSet.prototype.createView,\n});\nview_1.View.DataSet = DataSet;\n","\"use strict\";\n// extra APIs\nrequire(\"./api/geo\");\nrequire(\"./api/hierarchy\");\nrequire(\"./api/partition\");\nrequire(\"./api/statistics\");\n// connectors\nrequire(\"./connector/default\");\nrequire(\"./connector/dsv\");\nrequire(\"./connector/geo-graticule\");\nrequire(\"./connector/geojson\");\nrequire(\"./connector/graph\");\nrequire(\"./connector/hexjson\");\nrequire(\"./connector/hierarchy\");\nrequire(\"./connector/topojson\");\n// transforms\n// static\nrequire(\"./transform/default\");\nrequire(\"./transform/filter\");\nrequire(\"./transform/fold\");\nrequire(\"./transform/map\");\nrequire(\"./transform/partition\");\nrequire(\"./transform/percent\");\nrequire(\"./transform/pick\");\nrequire(\"./transform/proportion\");\nrequire(\"./transform/rename\");\nrequire(\"./transform/reverse\");\nrequire(\"./transform/sort\");\nrequire(\"./transform/sort-by\");\nrequire(\"./transform/subset\");\n// imputation\nrequire(\"./transform/fill-rows\");\nrequire(\"./transform/impute\");\n// statistics\nrequire(\"./transform/aggregate\");\n// regression\nrequire(\"./transform/regression\");\n// KDE\nrequire(\"./transform/kde\");\n// binning\nrequire(\"./transform/bin/hexagon\");\nrequire(\"./transform/bin/histogram\");\nrequire(\"./transform/bin/quantile\");\nrequire(\"./transform/bin/rectangle\");\n// geo\nrequire(\"./transform/geo/centroid\");\nrequire(\"./transform/geo/projection\");\nrequire(\"./transform/geo/region\");\n// diagram\nrequire(\"./transform/diagram/arc\");\nrequire(\"./transform/diagram/dagre\");\nrequire(\"./transform/diagram/sankey\");\nrequire(\"./transform/diagram/voronoi\");\n// hierarchy\nrequire(\"./transform/hierarchy/cluster\");\nrequire(\"./transform/hierarchy/compact-box\");\nrequire(\"./transform/hierarchy/dendrogram\");\nrequire(\"./transform/hierarchy/indented\");\nrequire(\"./transform/hierarchy/pack\");\nrequire(\"./transform/hierarchy/partition\");\nrequire(\"./transform/hierarchy/tree\");\nrequire(\"./transform/hierarchy/treemap\");\n// tag cloud\nrequire(\"./transform/tag-cloud\");\n// waffle\nrequire(\"./transform/waffle\");\n// kernel smoothing\nrequire(\"./transform/kernel-smooth/density\");\nrequire(\"./transform/kernel-smooth/regression\");\nvar data_set_1 = require(\"./data-set\");\nmodule.exports = data_set_1.DataSet;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar simpleStatistics = tslib_1.__importStar(require(\"simple-statistics\"));\nvar partition_1 = tslib_1.__importDefault(require(\"../util/partition\"));\nvar data_set_1 = require(\"../data-set\");\nvar registerTransform = data_set_1.DataSet.registerTransform;\nvar option_parser_1 = require(\"../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n as: [],\n fields: [],\n groupBy: [],\n operations: [],\n};\nvar DEFAULT_OPERATION = 'count';\nvar aggregates = {\n count: function (data) {\n return data.length;\n },\n distinct: function (data, field) {\n var values = util_1.uniq(data.map(function (row) { return row[field]; }));\n return values.length;\n },\n};\ndata_set_1.DataSet.CONSTANTS.STATISTICS_METHODS.forEach(function (method) {\n aggregates[method] = function (data, field) {\n var values = data.map(function (row) { return row[field]; });\n if (util_1.isArray(values) && util_1.isArray(values[0])) {\n values = util_1.flattenDeep(values);\n }\n // @ts-ignore\n return simpleStatistics[method](values);\n };\n});\naggregates.average = aggregates.mean;\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var fields = option_parser_1.getFields(options);\n if (!util_1.isArray(fields)) {\n throw new TypeError('Invalid fields: it must be an array with one or more strings!');\n }\n var outputNames = options.as || [];\n if (util_1.isString(outputNames)) {\n outputNames = [outputNames];\n }\n var operations = options.operations;\n if (util_1.isString(operations)) {\n operations = [operations];\n }\n var DEFAULT_OPERATIONS = [DEFAULT_OPERATION];\n if (!util_1.isArray(operations) || !operations.length) {\n console.warn('operations is not defined, will use [ \"count\" ] directly.');\n operations = DEFAULT_OPERATIONS;\n outputNames = operations;\n }\n if (!(operations.length === 1 && operations[0] === DEFAULT_OPERATION)) {\n if (operations.length !== fields.length) {\n throw new TypeError(\"Invalid operations: it's length must be the same as fields!\");\n }\n if (outputNames.length !== fields.length) {\n throw new TypeError(\"Invalid as: it's length must be the same as fields!\");\n }\n }\n var groups = partition_1.default(dataView.rows, options.groupBy);\n var results = [];\n util_1.forIn(groups, function (group) {\n var result = group[0];\n operations.forEach(function (operation, i) {\n var outputName = outputNames[i];\n var field = fields[i];\n result[outputName] = aggregates[operation](group, field);\n });\n results.push(result);\n });\n dataView.rows = results;\n}\nregisterTransform('aggregate', transform);\nregisterTransform('summary', transform);\nexports.default = {\n VALID_AGGREGATES: util_1.keys(aggregates),\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n as: ['x', 'y', 'count'],\n bins: [30, 30],\n offset: [0, 0],\n sizeByCount: false,\n};\nvar SQRT3 = Math.sqrt(3);\nvar THIRD_PI = Math.PI / 3;\nvar ANGLES = [0, THIRD_PI, 2 * THIRD_PI, 3 * THIRD_PI, 4 * THIRD_PI, 5 * THIRD_PI];\nfunction distance(x0, y0, x1, y1) {\n return Math.sqrt((x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1));\n}\nfunction nearestBinsCenters(value, scale, offset) {\n var temp = value - offset;\n scale = scale / 2;\n var div = Math.floor(temp / scale);\n var rounded = scale * (div + (Math.abs(div % 2) === 1 ? 1 : 0));\n var roundedScaled = scale * (div + (Math.abs(div % 2) === 1 ? 0 : 1));\n return [rounded + offset, roundedScaled + offset];\n}\nfunction generateBins(points, binWidth, offset) {\n if (binWidth === void 0) { binWidth = [1, 1]; }\n if (offset === void 0) { offset = [0, 0]; }\n // processing aligned data\n var bins = {};\n var _a = tslib_1.__read(binWidth, 2), binWidthX = _a[0], binWidthY = _a[1];\n var _b = tslib_1.__read(offset, 2), offsetX = _b[0], offsetY = _b[1];\n points.forEach(function (point) {\n var _a, _b;\n var _c = tslib_1.__read(point, 2), x = _c[0], y = _c[1];\n // step3.1: nearest two centers\n var _d = tslib_1.__read(nearestBinsCenters(x, binWidthX, offsetX), 2), xRounded = _d[0], xRoundedScaled = _d[1];\n var _e = tslib_1.__read(nearestBinsCenters(y, binWidthY, offsetY), 2), yRounded = _e[0], yRoundedScaled = _e[1];\n // step3.2: compare distances\n var d1 = distance(x, y, xRounded, yRounded);\n var d2 = distance(x, y, xRoundedScaled, yRoundedScaled);\n var binKey;\n var binX;\n var binY;\n if (d1 < d2) {\n binKey = \"x\" + xRounded + \"y\" + yRounded;\n _a = tslib_1.__read([xRounded, yRounded], 2), binX = _a[0], binY = _a[1];\n }\n else {\n binKey = \"x\" + xRoundedScaled + \"y\" + yRoundedScaled;\n _b = tslib_1.__read([xRoundedScaled, yRoundedScaled], 2), binX = _b[0], binY = _b[1];\n }\n bins[binKey] = bins[binKey] || {\n x: binX,\n y: binY,\n count: 0,\n };\n bins[binKey].count++;\n });\n return bins;\n}\nfunction transform(dataView, options) {\n // step1: get binWidth, etc.\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var fields = option_parser_1.getFields(options);\n if (!util_1.isArray(fields) || fields.length !== 2) {\n throw new TypeError('Invalid fields: it must be an array with 2 strings!');\n }\n var _a = tslib_1.__read(fields, 2), fieldX = _a[0], fieldY = _a[1];\n var rangeFieldX = dataView.range(fieldX);\n var rangeFieldY = dataView.range(fieldY);\n var widthX = rangeFieldX[1] - rangeFieldX[0];\n var widthY = rangeFieldY[1] - rangeFieldY[0];\n var binWidth = options.binWidth || [];\n if (binWidth.length !== 2) {\n var _b = tslib_1.__read(options.bins, 2), binsX = _b[0], binsY = _b[1];\n if (binsX <= 0 || binsY <= 0) {\n throw new TypeError('Invalid bins: must be an array with two positive numbers (e.g. [ 30, 30 ])!');\n }\n binWidth = [widthX / binsX, widthY / binsY];\n }\n // step2: align scale (squash Y)\n /*\n * binWidthX / binWidthY should be Math.sqrt3 / 1.5\n * -: binWidthX |: binWidthY\n * 3\n * |\n * 4 | 2\n * |\n * |\n * 5----------------1\n *\n * 0\n */\n var _c = tslib_1.__read(options.offset, 2), offsetX = _c[0], offsetY = _c[1];\n var yScale = (3 * binWidth[0]) / (SQRT3 * binWidth[1]);\n // const yScale = binWidth[0] / (SQRT3 * binWidth[1]);\n var points = dataView.rows.map(function (row) { return [row[fieldX], yScale * row[fieldY]]; });\n // step3: binning\n var bins = generateBins(points, [binWidth[0], yScale * binWidth[1]], [offsetX, yScale * offsetY]);\n // step4: restore scale (for Y)\n var _d = tslib_1.__read(options.as, 3), asX = _d[0], asY = _d[1], asCount = _d[2];\n if (!asX || !asY || !asCount) {\n throw new TypeError('Invalid as: it must be an array with three elements (e.g. [ \"x\", \"y\", \"count\" ])!');\n }\n var radius = binWidth[0] / SQRT3;\n var hexagonPoints = ANGLES.map(function (angle) { return [Math.sin(angle) * radius, -Math.cos(angle) * radius]; });\n var result = [];\n var maxCount = 0;\n if (options.sizeByCount) {\n util_1.forIn(bins, function (bin) {\n if (bin.count > maxCount) {\n maxCount = bin.count;\n }\n });\n }\n util_1.forIn(bins, function (bin) {\n var x = bin.x, y = bin.y, count = bin.count;\n var row = {};\n row[asCount] = count;\n if (options.sizeByCount) {\n row[asX] = hexagonPoints.map(function (p) { return x + (bin.count / maxCount) * p[0]; });\n row[asY] = hexagonPoints.map(function (p) { return (y + (bin.count / maxCount) * p[1]) / yScale; });\n }\n else {\n row[asX] = hexagonPoints.map(function (p) { return x + p[0]; });\n row[asY] = hexagonPoints.map(function (p) { return (y + p[1]) / yScale; });\n }\n result.push(row);\n });\n dataView.rows = result;\n}\ndata_set_1.DataSet.registerTransform('bin.hexagon', transform);\ndata_set_1.DataSet.registerTransform('bin.hex', transform);\ndata_set_1.DataSet.registerTransform('hexbin', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar partition_1 = tslib_1.__importDefault(require(\"../../util/partition\"));\nvar data_set_1 = require(\"../../data-set\");\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n as: ['x', 'count'],\n bins: 30,\n offset: 0,\n groupBy: [],\n};\nfunction nearestBin(value, scale, offset) {\n var temp = value - offset;\n var div = Math.floor(temp / scale);\n return [div * scale + offset, (div + 1) * scale + offset];\n}\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var field = option_parser_1.getField(options);\n if (dataView.rows.length === 0) {\n return;\n }\n var range = dataView.range(field);\n var width = range[1] - range[0];\n var binWidth = options.binWidth;\n if (!binWidth) {\n var bins = options.bins;\n if (bins <= 0) {\n throw new TypeError('Invalid bins: it must be a positive number!');\n }\n binWidth = width / bins;\n }\n var offset = options.offset % binWidth;\n // grouping\n var rows = [];\n var groupBy = options.groupBy;\n var groups = partition_1.default(dataView.rows, groupBy);\n util_1.forIn(groups, function (group) {\n var bins = {};\n var column = group.map(function (row) { return row[field]; });\n column.forEach(function (value) {\n var _a = tslib_1.__read(nearestBin(value, binWidth, offset), 2), x0 = _a[0], x1 = _a[1];\n var binKey = x0 + \"-\" + x1;\n bins[binKey] = bins[binKey] || {\n x0: x0,\n x1: x1,\n count: 0,\n };\n bins[binKey].count++;\n });\n var _a = tslib_1.__read(options.as, 2), asX = _a[0], asCount = _a[1];\n if (!asX || !asCount) {\n throw new TypeError('Invalid as: it must be an array with 2 elements (e.g. [ \"x\", \"count\" ])!');\n }\n var meta = util_1.pick(group[0], groupBy);\n util_1.forIn(bins, function (bin) {\n var row = util_1.assign({}, meta);\n row[asX] = [bin.x0, bin.x1];\n row[asCount] = bin.count;\n rows.push(row);\n });\n });\n dataView.rows = rows;\n}\ndata_set_1.DataSet.registerTransform('bin.histogram', transform);\ndata_set_1.DataSet.registerTransform('bin.dot', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar simple_statistics_1 = require(\"simple-statistics\");\nvar partition_1 = tslib_1.__importDefault(require(\"../../util/partition\"));\nvar p_by_fraction_1 = tslib_1.__importDefault(require(\"../../util/p-by-fraction\"));\nvar data_set_1 = require(\"../../data-set\");\nvar registerTransform = data_set_1.DataSet.registerTransform;\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n as: '_bin',\n groupBy: [],\n fraction: 4,\n};\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var field = option_parser_1.getField(options);\n var as = options.as;\n if (!util_1.isString(as)) {\n throw new TypeError('Invalid as: it must be a string (e.g. \"_bin\")!');\n }\n var pArray = options.p;\n var fraction = options.fraction;\n if (!util_1.isArray(pArray) || pArray.length === 0) {\n pArray = p_by_fraction_1.default(fraction);\n }\n var rows = dataView.rows;\n var groupBy = options.groupBy;\n var groups = partition_1.default(rows, groupBy);\n var result = [];\n util_1.forIn(groups, function (group) {\n // const resultRow = pick(group[0], groupBy);\n var resultRow = group[0];\n var binningColumn = group.map(function (row) { return row[field]; });\n var quantiles = pArray.map(function (p) { return simple_statistics_1.quantile(binningColumn, p); });\n resultRow[as] = quantiles;\n result.push(resultRow);\n });\n dataView.rows = result;\n}\nregisterTransform('bin.quantile', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar registerTransform = data_set_1.DataSet.registerTransform;\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n as: ['x', 'y', 'count'],\n bins: [30, 30],\n offset: [0, 0],\n sizeByCount: false,\n};\nfunction nearestBin(value, scale, offset) {\n var temp = value - offset;\n var div = Math.floor(temp / scale);\n return [div * scale + offset, (div + 1) * scale + offset];\n}\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var _a = tslib_1.__read(option_parser_1.getFields(options), 2), fieldX = _a[0], fieldY = _a[1];\n if (!fieldX || !fieldY) {\n throw new TypeError('Invalid fields: must be an array with 2 strings!');\n }\n var rangeFieldX = dataView.range(fieldX);\n var rangeFieldY = dataView.range(fieldY);\n var widthX = rangeFieldX[1] - rangeFieldX[0];\n var widthY = rangeFieldY[1] - rangeFieldY[0];\n var binWidth = options.binWidth || [];\n if (binWidth.length !== 2) {\n var _b = tslib_1.__read(options.bins, 2), binsX = _b[0], binsY = _b[1];\n if (binsX <= 0 || binsY <= 0) {\n throw new TypeError('Invalid bins: must be an array with 2 positive numbers (e.g. [ 30, 30 ])!');\n }\n binWidth = [widthX / binsX, widthY / binsY];\n }\n var points = dataView.rows.map(function (row) { return [row[fieldX], row[fieldY]]; });\n var bins = {};\n var _c = tslib_1.__read(options.offset, 2), offsetX = _c[0], offsetY = _c[1];\n points.forEach(function (point) {\n var _a = tslib_1.__read(nearestBin(point[0], binWidth[0], offsetX), 2), x0 = _a[0], x1 = _a[1];\n var _b = tslib_1.__read(nearestBin(point[1], binWidth[1], offsetY), 2), y0 = _b[0], y1 = _b[1];\n var binKey = x0 + \"-\" + x1 + \"-\" + y0 + \"-\" + y1;\n bins[binKey] = bins[binKey] || {\n x0: x0,\n x1: x1,\n y0: y0,\n y1: y1,\n count: 0,\n };\n bins[binKey].count++;\n });\n var rows = [];\n var _d = tslib_1.__read(options.as, 3), asX = _d[0], asY = _d[1], asCount = _d[2];\n if (!asX || !asY || !asCount) {\n throw new TypeError('Invalid as: it must be an array with 3 strings (e.g. [ \"x\", \"y\", \"count\" ])!');\n }\n /* points\n * 3---2\n * | |\n * 0---1\n */\n if (!options.sizeByCount) {\n util_1.forIn(bins, function (bin) {\n var row = {};\n row[asX] = [bin.x0, bin.x1, bin.x1, bin.x0];\n row[asY] = [bin.y0, bin.y0, bin.y1, bin.y1];\n row[asCount] = bin.count;\n rows.push(row);\n });\n }\n else {\n var maxCount_1 = 0;\n util_1.forIn(bins, function (bin) {\n if (bin.count > maxCount_1) {\n maxCount_1 = bin.count;\n }\n });\n util_1.forIn(bins, function (bin) {\n var x0 = bin.x0, x1 = bin.x1, y0 = bin.y0, y1 = bin.y1, count = bin.count;\n var scale = count / maxCount_1;\n var _a = tslib_1.__read([(x0 + x1) / 2, (y0 + y1) / 2], 2), cx = _a[0], cy = _a[1];\n var rx = ((x1 - x0) * scale) / 2;\n var ry = ((y1 - y0) * scale) / 2;\n var x01 = cx - rx;\n var x11 = cx + rx;\n var y01 = cy - ry;\n var y11 = cy + ry;\n var row = {};\n row[asX] = [x01, x11, x11, x01];\n row[asY] = [y01, y01, y11, y11];\n row[asCount] = count;\n rows.push(row);\n });\n }\n dataView.rows = rows;\n}\nregisterTransform('bin.rectangle', transform);\nregisterTransform('bin.rect', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar data_set_1 = require(\"../data-set\");\ndata_set_1.DataSet.registerTransform('default', function (dataView) {\n return dataView;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * for Arc Diagram (edges without weight) / Chord Diagram (edges with source and target weight)\n * graph data required (nodes, edges)\n */\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar DEFAULT_OPTIONS = {\n y: 0,\n thickness: 0.05,\n weight: false,\n marginRatio: 0.1,\n id: function (node) { return node.id; },\n source: function (edge) { return edge.source; },\n target: function (edge) { return edge.target; },\n sourceWeight: function (edge) { return edge.value || 1; },\n targetWeight: function (edge) { return edge.value || 1; },\n sortBy: null,\n};\nfunction _nodesFromEdges(edges, options, map) {\n if (map === void 0) { map = {}; }\n edges.forEach(function (edge) {\n var sId = options.edgeSource(edge);\n var tId = options.edgeTarget(edge);\n if (!map[sId]) {\n map[sId] = {\n id: sId,\n };\n }\n if (!map[tId]) {\n map[tId] = {\n id: tId,\n };\n }\n });\n return util_1.values(map);\n}\nfunction _processGraph(nodeById, edges, options) {\n util_1.forIn(nodeById, function (node, id) {\n // in edges, out edges\n node.inEdges = edges.filter(function (edge) { return \"\" + options.target(edge) === \"\" + id; });\n node.outEdges = edges.filter(function (edge) { return \"\" + options.source(edge) === \"\" + id; });\n // frequency\n node.edges = node.outEdges.concat(node.inEdges);\n node.frequency = node.edges.length;\n // weight\n node.value = 0;\n node.inEdges.forEach(function (edge) {\n node.value += options.targetWeight(edge);\n });\n node.outEdges.forEach(function (edge) {\n node.value += options.sourceWeight(edge);\n });\n });\n}\nfunction _sortNodes(nodes, options) {\n var sortMethods = {\n weight: function (a, b) { return b.value - a.value; },\n frequency: function (a, b) { return b.frequency - a.frequency; },\n id: function (a, b) { return (\"\" + options.id(a)).localeCompare(\"\" + options.id(b)); },\n };\n var method = sortMethods[options.sortBy];\n if (!method && util_1.isFunction(options.sortBy)) {\n method = options.sortBy;\n }\n if (method) {\n nodes.sort(method);\n }\n}\nfunction _layoutNodes(nodes, options) {\n var len = nodes.length;\n if (!len) {\n throw new TypeError(\"Invalid nodes: it's empty!\");\n }\n if (options.weight) {\n var marginRatio_1 = options.marginRatio;\n if (marginRatio_1 < 0 || marginRatio_1 >= 1) {\n throw new TypeError('Invalid marginRatio: it must be in range [0, 1)!');\n }\n var margin_1 = marginRatio_1 / (2 * len);\n var thickness_1 = options.thickness;\n if (thickness_1 <= 0 || thickness_1 >= 1) {\n throw new TypeError('Invalid thickness: it must be in range (0, 1)!');\n }\n var totalValue_1 = 0;\n nodes.forEach(function (node) {\n totalValue_1 += node.value;\n });\n nodes.forEach(function (node) {\n node.weight = node.value / totalValue_1;\n node.width = node.weight * (1 - marginRatio_1);\n node.height = thickness_1;\n });\n nodes.forEach(function (node, index) {\n // x\n var deltaX = 0;\n for (var i = index - 1; i >= 0; i--) {\n deltaX += nodes[i].width + 2 * margin_1;\n }\n var minX = (node.minX = margin_1 + deltaX);\n var maxX = (node.maxX = node.minX + node.width);\n var minY = (node.minY = options.y - thickness_1 / 2);\n var maxY = (node.maxY = minY + thickness_1);\n node.x = [minX, maxX, maxX, minX];\n node.y = [minY, minY, maxY, maxY];\n /* points\n * 3---2\n * | |\n * 0---1\n */\n // node.x = minX + 0.5 * node.width;\n // node.y = options.y;\n });\n }\n else {\n var deltaX_1 = 1 / len;\n nodes.forEach(function (node, index) {\n node.x = (index + 0.5) * deltaX_1;\n node.y = options.y;\n });\n }\n}\nfunction _locatingEdges(nodeById, edges, options) {\n if (options.weight) {\n var valueById_1 = {};\n util_1.forIn(nodeById, function (node, id) {\n valueById_1[id] = node.value;\n });\n edges.forEach(function (edge) {\n var sId = options.source(edge);\n var tId = options.target(edge);\n var sNode = nodeById[sId];\n var tNode = nodeById[tId];\n if (sNode && tNode) {\n var sValue = valueById_1[sId];\n var currentSValue = options.sourceWeight(edge);\n var sStart = sNode.minX + ((sNode.value - sValue) / sNode.value) * sNode.width;\n var sEnd = sStart + (currentSValue / sNode.value) * sNode.width;\n valueById_1[sId] -= currentSValue;\n var tValue = valueById_1[tId];\n var currentTValue = options.targetWeight(edge);\n var tStart = tNode.minX + ((tNode.value - tValue) / tNode.value) * tNode.width;\n var tEnd = tStart + (currentTValue / tNode.value) * tNode.width;\n valueById_1[tId] -= currentTValue;\n var y = options.y;\n edge.x = [sStart, sEnd, tStart, tEnd];\n edge.y = [y, y, y, y];\n }\n });\n }\n else {\n edges.forEach(function (edge) {\n var sNode = nodeById[options.source(edge)];\n var tNode = nodeById[options.target(edge)];\n if (sNode && tNode) {\n edge.x = [sNode.x, tNode.x];\n edge.y = [sNode.y, tNode.y];\n }\n });\n }\n}\nfunction transform(dv, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var nodeById = {};\n var nodes = dv.nodes;\n var edges = dv.edges;\n if (!util_1.isArray(nodes) || nodes.length === 0) {\n nodes = _nodesFromEdges(edges, options, nodeById);\n }\n nodes.forEach(function (node) {\n var id = options.id(node);\n nodeById[id] = node;\n });\n _processGraph(nodeById, edges, options);\n _sortNodes(nodes, options);\n _layoutNodes(nodes, options);\n _locatingEdges(nodeById, edges, options);\n dv.nodes = nodes;\n dv.edges = edges;\n}\ndata_set_1.DataSet.registerTransform('diagram.arc', transform);\ndata_set_1.DataSet.registerTransform('arc', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\n/*\n * for DAG\n * graph data required (nodes, edges)\n */\nvar util_1 = require(\"@antv/util\");\nvar dagre_1 = tslib_1.__importDefault(require(\"dagre\"));\nvar data_set_1 = require(\"../../data-set\");\nvar DEFAULT_OPTIONS = {\n // nodeId: node => node.index,\n rankdir: 'TB',\n align: 'TB',\n nodesep: 50,\n edgesep: 10,\n ranksep: 50,\n source: function (edge) { return edge.source; },\n target: function (edge) { return edge.target; },\n};\nfunction transform(dv, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var g = new dagre_1.default.graphlib.Graph();\n // Set an object for the graph label\n g.setGraph({});\n // Default to assigning a new object as a label for each new edge.\n g.setDefaultEdgeLabel(function () {\n return {};\n });\n dv.nodes.forEach(function (node) {\n var nodeId = options.nodeId ? options.nodeId(node) : node.id;\n if (!node.height && !node.width) {\n node.height = node.width = options.edgesep;\n }\n g.setNode(nodeId, node);\n });\n dv.edges.forEach(function (edge) {\n g.setEdge(options.source(edge), options.target(edge));\n });\n dagre_1.default.layout(g);\n var nodes = [];\n var edges = [];\n g.nodes().forEach(function (node) {\n var n = g.node(node);\n var x = n.x, y = n.y, height = n.height, width = n.width;\n /* points\n * 3---2\n * | |\n * 0---1\n */\n // @ts-ignore\n n.x = [x - width / 2, x + width / 2, x + width / 2, x - width / 2];\n // @ts-ignore\n n.y = [y + height / 2, y + height / 2, y - height / 2, y - height / 2];\n nodes.push(n);\n });\n g.edges().forEach(function (edge) {\n var points = g.edge(edge).points;\n var e = {};\n e.x = points.map(function (p) { return p.x; });\n e.y = points.map(function (p) { return p.y; });\n edges.push(e);\n });\n dv.nodes = nodes;\n dv.edges = edges;\n}\ndata_set_1.DataSet.registerTransform('diagram.dagre', transform);\ndata_set_1.DataSet.registerTransform('dagre', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * for Sankey Diagram\n * graph data required (nodes, edges)\n */\nvar util_1 = require(\"@antv/util\");\nvar d3_sankey_1 = require(\"d3-sankey\");\nvar data_set_1 = require(\"../../data-set\");\nvar ALIGN_METHOD = {\n sankeyLeft: d3_sankey_1.sankeyLeft,\n sankeyRight: d3_sankey_1.sankeyRight,\n sankeyCenter: d3_sankey_1.sankeyCenter,\n sankeyJustify: d3_sankey_1.sankeyJustify,\n};\nvar DEFAULT_OPTIONS = {\n // nodeId: node => node.index,\n value: function (node) { return node.value; },\n source: function (edge) { return edge.source; },\n target: function (edge) { return edge.target; },\n nodeAlign: 'sankeyJustify',\n nodeWidth: 0.02,\n nodePadding: 0.02,\n sort: undefined,\n};\nfunction transform(dv, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var nodeAlign = null;\n if (util_1.isString(options.nodeAlign)) {\n nodeAlign = ALIGN_METHOD[options.nodeAlign];\n }\n else if (util_1.isFunction(options.nodeAlign)) {\n nodeAlign = options.nodeAlign;\n }\n var sankeyProcessor = d3_sankey_1.sankey()\n .nodeSort(options.sort)\n .links(function (d) { return d.edges; })\n .nodeWidth(options.nodeWidth)\n .nodePadding(options.nodePadding)\n .extent([\n [0, 0],\n [1, 1],\n ]);\n if (util_1.isFunction(options.nodeId)) {\n sankeyProcessor.nodeId(options.nodeId);\n }\n if (nodeAlign) {\n sankeyProcessor.nodeAlign(nodeAlign);\n }\n // TODO:\n // @ts-ignore\n sankeyProcessor(dv);\n // post process (x, y), etc.\n dv.nodes.forEach(function (node) {\n var x0 = node.x0, x1 = node.x1, y0 = node.y0, y1 = node.y1;\n /* points\n * 3---2\n * | |\n * 0---1\n */\n node.x = [x0, x1, x1, x0];\n node.y = [y0, y0, y1, y1];\n });\n dv.edges.forEach(function (edge) {\n var source = edge.source, target = edge.target;\n var sx = source.x1;\n var tx = target.x0;\n edge.x = [sx, sx, tx, tx];\n var offset = edge.width / 2;\n edge.y = [edge.y0 + offset, edge.y0 - offset, edge.y1 + offset, edge.y1 - offset];\n });\n}\ndata_set_1.DataSet.registerTransform('diagram.sankey', transform);\ndata_set_1.DataSet.registerTransform('sankey', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar d3Voronoi = tslib_1.__importStar(require(\"d3-voronoi\"));\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar registerTransform = data_set_1.DataSet.registerTransform;\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n // fields: [ 'x', 'y' ] // field x and field y, required\n // extend: [[x0, y0], [x1, y1]], // optional\n // size: [width, height], // optional\n as: ['_x', '_y'],\n};\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: must be an array with two strings!');\n }\n var xField = as[0];\n var yField = as[1];\n var fields = option_parser_1.getFields(options);\n if (!util_1.isArray(fields) || fields.length !== 2) {\n throw new TypeError('Invalid fields: must be an array with two strings!');\n }\n var x = fields[0];\n var y = fields[1];\n var rows = dataView.rows;\n var data = rows.map(function (row) { return [row[x], row[y]]; });\n var voronoi = d3Voronoi.voronoi();\n if (options.extend) {\n voronoi.extent(options.extend);\n }\n if (options.size) {\n voronoi.size(options.size);\n }\n var polygons = voronoi(data).polygons();\n rows.forEach(function (row, i) {\n var polygon = polygons[i].filter(function (point) { return !!point; }); // some points are null\n row[xField] = polygon.map(function (point) { return point[0]; });\n row[yField] = polygon.map(function (point) { return point[1]; });\n });\n}\nregisterTransform('diagram.voronoi', transform);\nregisterTransform('voronoi', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar partition_1 = tslib_1.__importDefault(require(\"../util/partition\"));\nvar data_set_1 = require(\"../data-set\");\nvar DEFAULT_OPTIONS = {\n fillBy: 'group',\n groupBy: [],\n orderBy: [],\n};\nfunction arrayDifference(arr1, arr2) {\n // arrayDifference([1, 1, 1, 2], [1, 2]) => [1, 1]\n var shadow = arr1.map(function (item) { return item; }); // shadow copy\n arr2.forEach(function (item) {\n var index = shadow.indexOf(item);\n if (index > -1) {\n shadow.splice(index, 1);\n }\n });\n return shadow;\n}\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var rows = dataView.rows;\n var groupBy = options.groupBy;\n var orderBy = options.orderBy;\n var groups = partition_1.default(rows, groupBy, orderBy);\n var maxLength = 0;\n var referenceGroup = [];\n util_1.forIn(groups, function (group) {\n if (group.length > maxLength) {\n maxLength = group.length;\n referenceGroup = group;\n }\n });\n var referenceOrderByKeys = [];\n var referenceRowByOrderByKey = {};\n referenceGroup.forEach(function (row) {\n var key = orderBy.map(function (col) { return row[col]; }).join('-');\n referenceOrderByKeys.push(key);\n referenceRowByOrderByKey[key] = row;\n });\n if (options.fillBy === 'order') {\n var first_1 = referenceGroup[0];\n var allOrderByKeys_1 = [];\n var rowByOrderByKey_1 = {};\n rows.forEach(function (row) {\n var key = orderBy.map(function (col) { return row[col]; }).join('-');\n if (allOrderByKeys_1.indexOf(key) === -1) {\n allOrderByKeys_1.push(key);\n rowByOrderByKey_1[key] = row;\n }\n });\n var _missingOrderByKeys = arrayDifference(allOrderByKeys_1, referenceOrderByKeys);\n _missingOrderByKeys.forEach(function (key) {\n var row = {};\n groupBy.forEach(function (col) {\n row[col] = first_1[col];\n });\n orderBy.forEach(function (col) {\n row[col] = rowByOrderByKey_1[key][col];\n });\n rows.push(row);\n referenceGroup.push(row);\n referenceOrderByKeys.push(key);\n referenceRowByOrderByKey[key] = row;\n });\n maxLength = referenceGroup.length;\n }\n util_1.forIn(groups, function (group) {\n if (group !== referenceGroup && group.length < maxLength) {\n var first_2 = group[0];\n // missing orderBy keys\n var orderByKeys_1 = [];\n group.forEach(function (row) {\n orderByKeys_1.push(orderBy.map(function (col) { return row[col]; }).join('-'));\n });\n var missingOrderByKeys = arrayDifference(referenceOrderByKeys, orderByKeys_1);\n missingOrderByKeys.some(function (key, i) {\n if (i >= maxLength - group.length) {\n // group length overflow\n return true;\n }\n var referenceRow = referenceRowByOrderByKey[key];\n var row = {};\n groupBy.forEach(function (col) {\n row[col] = first_2[col];\n });\n orderBy.forEach(function (col) {\n row[col] = referenceRow[col];\n });\n rows.push(row);\n return false;\n });\n }\n });\n}\ndata_set_1.DataSet.registerTransform('fill-rows', transform);\ndata_set_1.DataSet.registerTransform('fillRows', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar data_set_1 = require(\"../data-set\");\nfunction defaultCallback(row) {\n return !!row;\n}\ndata_set_1.DataSet.registerTransform('filter', function (dataView, options) {\n dataView.rows = dataView.rows.filter(options.callback || defaultCallback);\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n fields: [],\n key: 'key',\n retains: [],\n value: 'value',\n};\ndata_set_1.DataSet.registerTransform('fold', function (dataView, options) {\n var columns = dataView.getColumnNames();\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var fields = option_parser_1.getFields(options);\n if (fields.length === 0) {\n console.warn('warning: option fields is not specified, will fold all columns.');\n fields = columns;\n }\n var key = options.key;\n var value = options.value;\n var retains = options.retains;\n if (!retains || retains.length === 0) {\n retains = util_1.difference(columns, fields);\n }\n var resultRows = [];\n dataView.rows.forEach(function (row) {\n fields.forEach(function (field) {\n var resultRow = util_1.pick(row, retains);\n resultRow[key] = field;\n resultRow[value] = row[field];\n resultRows.push(resultRow);\n });\n });\n dataView.rows = resultRows;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar registerTransform = data_set_1.DataSet.registerTransform;\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n // field: 'name', // required\n // geoView: view, // required\n // geoDataView: view, // alias\n as: ['_centroid_x', '_centroid_y'],\n};\nfunction transform(view, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var field = option_parser_1.getField(options);\n // @ts-ignore\n var geoView = options.geoView || options.geoDataView; // alias\n if (util_1.isString(geoView) && view.dataSet) {\n geoView = view.dataSet.getView(geoView);\n }\n if (!geoView || geoView.dataType !== 'geo') {\n throw new TypeError('Invalid geoView: must be a DataView of GEO dataType!');\n }\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"cX\", \"cY\" ])!');\n }\n var centroidX = as[0];\n var centroidY = as[1];\n view.rows.forEach(function (row) {\n var feature = geoView.geoFeatureByName(row[field]);\n if (feature) {\n if (geoView._projectedAs) {\n row[centroidX] = feature[geoView._projectedAs[2]];\n row[centroidY] = feature[geoView._projectedAs[3]];\n }\n else {\n row[centroidX] = feature.centroidX;\n row[centroidY] = feature.centroidY;\n }\n }\n });\n}\nregisterTransform('geo.centroid', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar d3_geo_1 = require(\"d3-geo\");\nvar point_at_length_1 = tslib_1.__importDefault(require(\"point-at-length\"));\nvar data_set_1 = require(\"../../data-set\");\nvar registerTransform = data_set_1.DataSet.registerTransform;\nvar get_geo_projection_1 = tslib_1.__importDefault(require(\"../../util/get-geo-projection\"));\nvar DEFAULT_OPTIONS = {\n // projection: '', // default to null\n as: ['_x', '_y', '_centroid_x', '_centroid_y'],\n};\nfunction transform(dataView, options) {\n if (dataView.dataType !== 'geo' && dataView.dataType !== 'geo-graticule') {\n throw new TypeError('Invalid dataView: this transform is for Geo data only!');\n }\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var projection = options.projection;\n if (!projection) {\n throw new TypeError('Invalid projection!');\n }\n projection = get_geo_projection_1.default(projection);\n // @ts-ignore;\n var geoPathGenerator = d3_geo_1.geoPath(projection);\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 4) {\n throw new TypeError('Invalid as: it must be an array with 4 strings (e.g. [ \"x\", \"y\", \"cX\", \"cY\" ])!');\n }\n dataView._projectedAs = as;\n var _a = tslib_1.__read(as, 4), lonField = _a[0], latField = _a[1], centroidX = _a[2], centroidY = _a[3];\n dataView.rows.forEach(function (row) {\n row[lonField] = [];\n row[latField] = [];\n var pathData = geoPathGenerator(row);\n if (pathData) {\n // TODO projection returns null\n var points = point_at_length_1.default(pathData);\n points._path.forEach(function (point) {\n row[lonField].push(point[1]);\n row[latField].push(point[2]);\n });\n var centroid = geoPathGenerator.centroid(row);\n row[centroidX] = centroid[0];\n row[centroidY] = centroid[1];\n }\n });\n dataView.rows = dataView.rows.filter(function (row) { return row[lonField].length !== 0; });\n}\nregisterTransform('geo.projection', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar registerTransform = data_set_1.DataSet.registerTransform;\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n // field: 'name', // required\n // geoView: view, // required\n // geoDataView: view, // alias\n as: ['_x', '_y'],\n};\nfunction transform(view, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var field = option_parser_1.getField(options);\n // @ts-ignore\n var geoView = options.geoView || options.geoDataView; // alias\n if (util_1.isString(geoView)) {\n geoView = view.dataSet.getView(geoView);\n }\n if (!geoView || geoView.dataType !== 'geo') {\n throw new TypeError('Invalid geoView: must be a DataView of GEO dataType!');\n }\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n var lonField = as[0];\n var latField = as[1];\n view.rows.forEach(function (row) {\n var feature = geoView.geoFeatureByName(row[field]);\n if (feature) {\n if (geoView._projectedAs) {\n row[lonField] = feature[geoView._projectedAs[0]];\n row[latField] = feature[geoView._projectedAs[1]];\n }\n else {\n row[lonField] = feature.longitude;\n row[latField] = feature.latitude;\n }\n }\n });\n}\nregisterTransform('geo.region', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar d3Hierarchy = tslib_1.__importStar(require(\"d3-hierarchy\"));\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n field: 'value',\n size: [1, 1],\n nodeSize: null,\n separation: null,\n as: ['x', 'y'],\n};\nfunction transform(dataView, options) {\n if (dataView.dataType !== data_set_1.DataSet.CONSTANTS.HIERARCHY || !dataView.root) {\n throw new TypeError('Invalid DataView: This transform is for Hierarchy data only!');\n }\n var root = dataView.root;\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n var field = undefined;\n try {\n field = option_parser_1.getField(options);\n }\n catch (e) {\n console.warn(e);\n }\n if (field) {\n root.sum(function (d) { return d[field]; });\n }\n var clusterLayout = d3Hierarchy.cluster();\n clusterLayout.size(options.size);\n if (options.nodeSize) {\n clusterLayout.nodeSize(options.nodeSize);\n }\n if (options.separation) {\n clusterLayout.separation(options.separation);\n }\n clusterLayout(root);\n var x = as[0];\n var y = as[1];\n root.each(function (node) {\n node[x] = node.x;\n node[y] = node.y;\n });\n}\ndata_set_1.DataSet.registerTransform('hierarchy.cluster', transform);\ndata_set_1.DataSet.registerTransform('dendrogram', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar hierarchy_1 = tslib_1.__importDefault(require(\"@antv/hierarchy\"));\nvar data_set_1 = require(\"../../data-set\");\nvar DEFAULT_OPTIONS = {};\nfunction transform(dataView, options) {\n var root = dataView.root;\n options = Object.assign({}, DEFAULT_OPTIONS, options);\n if (dataView.dataType !== data_set_1.DataSet.CONSTANTS.HIERARCHY) {\n throw new TypeError('Invalid DataView: This transform is for Hierarchy data only!');\n }\n dataView.root = hierarchy_1.default.compactBox(root, options);\n}\ndata_set_1.DataSet.registerTransform('hierarchy.compact-box', transform);\ndata_set_1.DataSet.registerTransform('compact-box-tree', transform);\ndata_set_1.DataSet.registerTransform('non-layered-tidy-tree', transform);\ndata_set_1.DataSet.registerTransform('mindmap-logical', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar hierarchy_1 = tslib_1.__importDefault(require(\"@antv/hierarchy\"));\nvar data_set_1 = require(\"../../data-set\");\nvar DEFAULT_OPTIONS = {};\nfunction transform(dataView, options) {\n var root = dataView.root;\n options = Object.assign({}, DEFAULT_OPTIONS, options);\n if (dataView.dataType !== data_set_1.DataSet.CONSTANTS.HIERARCHY) {\n throw new TypeError('Invalid DataView: This transform is for Hierarchy data only!');\n }\n dataView.root = hierarchy_1.default.dendrogram(root, options);\n}\ndata_set_1.DataSet.registerTransform('hierarchy.dendrogram', transform);\ndata_set_1.DataSet.registerTransform('dendrogram', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar hierarchy_1 = tslib_1.__importDefault(require(\"@antv/hierarchy\"));\nvar data_set_1 = require(\"../../data-set\");\nvar DEFAULT_OPTIONS = {};\nfunction transform(dataView, options) {\n var root = dataView.root;\n options = Object.assign({}, DEFAULT_OPTIONS, options);\n if (dataView.dataType !== data_set_1.DataSet.CONSTANTS.HIERARCHY) {\n throw new TypeError('Invalid DataView: This transform is for Hierarchy data only!');\n }\n dataView.root = hierarchy_1.default.indented(root, options);\n}\ndata_set_1.DataSet.registerTransform('hierarchy.indented', transform);\ndata_set_1.DataSet.registerTransform('indented-tree', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar d3Hierarchy = tslib_1.__importStar(require(\"d3-hierarchy\"));\nvar data_set_1 = require(\"../../data-set\");\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n field: 'value',\n size: [1, 1],\n padding: 0,\n as: ['x', 'y', 'r'],\n};\nfunction transform(dataView, options) {\n if (dataView.dataType !== data_set_1.DataSet.CONSTANTS.HIERARCHY) {\n throw new TypeError('Invalid DataView: This transform is for Hierarchy data only!');\n }\n var root = dataView.root;\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 3) {\n throw new TypeError('Invalid as: it must be an array with 3 strings (e.g. [ \"x\", \"y\", \"r\" ])!');\n }\n var field;\n try {\n field = option_parser_1.getField(options);\n }\n catch (e) {\n console.warn(e);\n }\n if (field) {\n root.sum(function (d) { return d[field]; }).sort(function (a, b) { return b[field] - a[field]; });\n }\n var packLayout = d3Hierarchy.pack();\n packLayout.size(options.size);\n if (options.padding) {\n packLayout.padding(options.padding);\n }\n packLayout(root);\n var x = as[0];\n var y = as[1];\n var r = as[2];\n root.each(function (node) {\n node[x] = node.x;\n node[y] = node.y;\n node[r] = node.r;\n });\n}\ndata_set_1.DataSet.registerTransform('hierarchy.pack', transform);\ndata_set_1.DataSet.registerTransform('hierarchy.circle-packing', transform);\ndata_set_1.DataSet.registerTransform('circle-packing', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar d3Hierarchy = tslib_1.__importStar(require(\"d3-hierarchy\"));\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n field: 'value',\n size: [1, 1],\n round: false,\n // ratio: 1.618033988749895, // golden ratio\n padding: 0,\n sort: true,\n as: ['x', 'y'],\n};\nfunction transform(dataView, options) {\n if (dataView.dataType !== data_set_1.DataSet.CONSTANTS.HIERARCHY) {\n throw new TypeError('Invalid DataView: This transform is for Hierarchy data only!');\n }\n var root = dataView.root;\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n var field;\n try {\n field = option_parser_1.getField(options);\n }\n catch (e) {\n console.warn(e);\n }\n if (field) {\n root.sum(function (d) { return d[field]; });\n }\n var partitionLayout = d3Hierarchy.partition();\n partitionLayout\n .size(options.size)\n .round(options.round)\n .padding(options.padding);\n partitionLayout(root);\n /*\n * points:\n * 3 2\n * 0 1\n */\n var x = as[0];\n var y = as[1];\n root.each(function (node) {\n node[x] = [node.x0, node.x1, node.x1, node.x0];\n node[y] = [node.y1, node.y1, node.y0, node.y0];\n ['x0', 'x1', 'y0', 'y1'].forEach(function (prop) {\n if (as.indexOf(prop) === -1) {\n delete node[prop];\n }\n });\n });\n}\ndata_set_1.DataSet.registerTransform('hierarchy.partition', transform);\ndata_set_1.DataSet.registerTransform('adjacency', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar d3Hierarchy = tslib_1.__importStar(require(\"d3-hierarchy\"));\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n field: 'value',\n size: [1, 1],\n nodeSize: null,\n separation: null,\n as: ['x', 'y'],\n};\nfunction transform(dataView, options) {\n if (dataView.dataType !== data_set_1.DataSet.CONSTANTS.HIERARCHY) {\n throw new TypeError('Invalid DataView: This transform is for Hierarchy data only!');\n }\n var root = dataView.root;\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n var field;\n try {\n field = option_parser_1.getField(options);\n }\n catch (e) {\n console.warn(e);\n }\n if (field) {\n root.sum(function (d) { return d[field]; });\n }\n var treeLayout = d3Hierarchy.tree();\n treeLayout.size(options.size);\n if (options.nodeSize) {\n treeLayout.nodeSize(options.nodeSize);\n }\n if (options.separation) {\n treeLayout.separation(options.separation);\n }\n treeLayout(root);\n var x = as[0];\n var y = as[1];\n root.each(function (node) {\n node[x] = node.x;\n node[y] = node.y;\n });\n}\ndata_set_1.DataSet.registerTransform('hierarchy.tree', transform);\ndata_set_1.DataSet.registerTransform('tree', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar d3Hierarchy = tslib_1.__importStar(require(\"d3-hierarchy\"));\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../../data-set\");\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n field: 'value',\n tile: 'treemapSquarify',\n size: [1, 1],\n round: false,\n // ratio: 1.618033988749895, // golden ratio\n padding: 0,\n paddingInner: 0,\n paddingOuter: 0,\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n as: ['x', 'y'],\n};\nfunction transform(dataView, options) {\n if (dataView.dataType !== data_set_1.DataSet.CONSTANTS.HIERARCHY) {\n throw new TypeError('Invalid DataView: This transform is for Hierarchy data only!');\n }\n var root = dataView.root;\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n var field;\n try {\n field = option_parser_1.getField(options);\n }\n catch (e) {\n console.warn(e);\n }\n if (field) {\n root.sum(function (d) { return d[field]; });\n }\n var treemapLayout = d3Hierarchy.treemap();\n treemapLayout\n .tile(d3Hierarchy[options.tile])\n .size(options.size)\n .round(options.round)\n .padding(options.padding)\n .paddingInner(options.paddingInner)\n .paddingOuter(options.paddingOuter)\n .paddingTop(options.paddingTop)\n .paddingRight(options.paddingRight)\n .paddingBottom(options.paddingBottom)\n .paddingLeft(options.paddingLeft);\n treemapLayout(root);\n /*\n * points:\n * 3 2\n * 0 1\n */\n var x = as[0];\n var y = as[1];\n root.each(function (node) {\n node[x] = [node.x0, node.x1, node.x1, node.x0];\n node[y] = [node.y1, node.y1, node.y0, node.y0];\n ['x0', 'x1', 'y0', 'y1'].forEach(function (prop) {\n if (as.indexOf(prop) === -1) {\n delete node[prop];\n }\n });\n });\n}\ndata_set_1.DataSet.registerTransform('hierarchy.treemap', transform);\ndata_set_1.DataSet.registerTransform('treemap', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar simpleStatistics = tslib_1.__importStar(require(\"simple-statistics\"));\nvar partition_1 = tslib_1.__importDefault(require(\"../util/partition\"));\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n // field: '', // required\n // method: 'value', // required\n // value: 10, // required if (method === 'value')\n groupBy: [],\n};\nfunction notUndefinedValues(values) {\n return values.filter(function (value) { return !util_1.isUndefined(value); });\n}\nvar STATISTICS_METHODS = ['mean', 'median', 'max', 'min'];\nvar imputations = {};\nSTATISTICS_METHODS.forEach(function (method) {\n // @ts-ignore\n imputations[method] = function (row, values) { return simpleStatistics[method](values); };\n});\nimputations.value = function (_row, _values, value) { return value; };\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var field = option_parser_1.getField(options);\n var method = options.method;\n if (!method) {\n throw new TypeError('Invalid method!');\n }\n if (method === 'value' && !util_1.has(options, 'value')) {\n throw new TypeError('Invalid value: it is nil.');\n }\n var column = notUndefinedValues(dataView.getColumn(field));\n var groups = partition_1.default(dataView.rows, options.groupBy);\n util_1.forIn(groups, function (group) {\n var fieldValues = notUndefinedValues(group.map(function (row) { return row[field]; }));\n if (fieldValues.length === 0) {\n fieldValues = column;\n }\n group.forEach(function (row) {\n if (util_1.isUndefined(row[field])) {\n if (util_1.isFunction(method)) {\n row[field] = method(row, fieldValues, options.value, group);\n }\n else if (util_1.isString(method)) {\n row[field] = imputations[method](row, fieldValues, options.value);\n }\n else {\n throw new TypeError(\"Invalid method: must be a function or one of \" + STATISTICS_METHODS.join(', '));\n }\n }\n });\n });\n}\ndata_set_1.DataSet.registerTransform('impute', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\n/*\n * kernel density estimation\n */\nvar util_1 = require(\"@antv/util\");\nvar get_series_values_1 = tslib_1.__importDefault(require(\"../util/get-series-values\"));\nvar kernel_1 = tslib_1.__importDefault(require(\"../util/kernel\"));\nvar bandwidth = tslib_1.__importStar(require(\"../util/bandwidth\"));\nvar partition_1 = tslib_1.__importDefault(require(\"../util/partition\"));\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\nvar simple_statistics_1 = require(\"simple-statistics\");\nvar DEFAULT_OPTIONS = {\n minSize: 0.01,\n as: ['key', 'y', 'size'],\n // fields: [ 'y1', 'y2' ], // required, one or more fields\n extent: [],\n method: 'gaussian',\n bandwidth: 'nrd',\n step: 0,\n groupBy: [],\n};\nvar KERNEL_METHODS = util_1.keys(kernel_1.default);\nvar BANDWIDTH_METHODS = util_1.keys(bandwidth);\nfunction transform(dv, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var fields = option_parser_1.getFields(options);\n if (!util_1.isArray(fields) || fields.length < 1) {\n throw new TypeError('invalid fields: must be an array of at least 1 strings!');\n }\n var as = options.as;\n if (!util_1.isArray(as) || as.length !== 3) {\n throw new TypeError('invalid as: must be an array of 3 strings!');\n }\n var method = options.method;\n if (util_1.isString(method)) {\n if (KERNEL_METHODS.indexOf(method) === -1) {\n throw new TypeError(\"invalid method: \" + method + \". Must be one of \" + KERNEL_METHODS.join(', '));\n }\n method = kernel_1.default[method];\n }\n if (!util_1.isFunction(method)) {\n throw new TypeError('invalid method: kernel method must be a function!');\n }\n var extent = options.extent;\n if (!util_1.isArray(extent) || extent.length === 0) {\n var rangeArr_1 = [];\n util_1.each(fields, function (field) {\n var range = dv.range(field);\n rangeArr_1 = rangeArr_1.concat(range);\n });\n extent = [Math.min.apply(Math, tslib_1.__spread(rangeArr_1)), Math.max.apply(Math, tslib_1.__spread(rangeArr_1))];\n }\n var bw = options.bandwidth;\n if (util_1.isString(bw) && bandwidth[bw]) {\n bw = bandwidth[bw](dv.getColumn(fields[0]));\n }\n else if (util_1.isFunction(bw)) {\n bw = bw(dv.getColumn(fields[0]));\n }\n else if (!util_1.isNumber(bw) || bw <= 0) {\n bw = bandwidth.nrd(dv.getColumn(fields[0]));\n }\n var seriesValues = get_series_values_1.default(extent, options.step ? options.step : bw);\n var result = [];\n var groupBy = options.groupBy;\n var groups = partition_1.default(dv.rows, groupBy);\n util_1.forIn(groups, function (group) {\n var probalityDensityFunctionByField = {};\n util_1.each(fields, function (field) {\n var row = util_1.pick(group[0], groupBy);\n probalityDensityFunctionByField[field] = simple_statistics_1.kernelDensityEstimation(group.map(function (item) { return item[field]; }), method, bw);\n var _a = tslib_1.__read(as, 3), key = _a[0], y = _a[1], size = _a[2];\n row[key] = field;\n row[y] = [];\n row[size] = [];\n util_1.each(seriesValues, function (yValue) {\n var sizeValue = probalityDensityFunctionByField[field](yValue);\n if (sizeValue >= options.minSize) {\n row[y].push(yValue);\n row[size].push(sizeValue);\n }\n });\n result.push(row);\n });\n });\n dv.rows = result;\n}\ndata_set_1.DataSet.registerTransform('kernel-density-estimation', transform);\ndata_set_1.DataSet.registerTransform('kde', transform);\ndata_set_1.DataSet.registerTransform('KDE', transform);\nexports.default = {\n KERNEL_METHODS: KERNEL_METHODS,\n BANDWIDTH_METHODS: BANDWIDTH_METHODS,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\n/*\n * @reference: https://github.com/Planeshifter/kernel-smooth/blob/master/lib/index.js\n */\nvar util_1 = require(\"@antv/util\");\nvar get_series_values_1 = tslib_1.__importDefault(require(\"../../util/get-series-values\"));\nvar kernel_1 = tslib_1.__importDefault(require(\"../../util/kernel\"));\nvar data_set_1 = require(\"../../data-set\");\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar bandwidth_1 = require(\"../../util/bandwidth\");\nvar DEFAULT_OPTIONS = {\n as: ['x', 'y', 'z'],\n // fields: [ 'x', 'y' ], // required, one or two fields\n method: 'gaussian',\n};\nvar KERNEL_METHODS = util_1.keys(kernel_1.default);\nfunction transform(dv, options) {\n var _a, _b;\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var fields = option_parser_1.getFields(options);\n if (!util_1.isArray(fields) || fields.length !== 2) {\n throw new TypeError('invalid fields: must be an array of 2 strings!');\n }\n var _c = tslib_1.__read(options.as, 3), asX = _c[0], asY = _c[1], asZ = _c[2];\n if (!util_1.isString(asX) || !util_1.isString(asY) || !util_1.isString(asZ)) {\n throw new TypeError('invalid as: must be an array of 3 strings!');\n }\n var method;\n if (util_1.isString(options.method)) {\n if (KERNEL_METHODS.indexOf(options.method) === -1) {\n throw new TypeError(\"invalid method: \" + options.method + \". Must be one of \" + KERNEL_METHODS.join(', '));\n }\n method = kernel_1.default[options.method];\n }\n var _d = tslib_1.__read(fields, 2), xField = _d[0], yField = _d[1];\n var extent = options.extent, bandwidth = options.bandwidth;\n var extentX;\n var extentY;\n if (extent && Array.isArray(extent) && Array.isArray(extent[0]) && Array.isArray(extent[1])) {\n _a = tslib_1.__read(extent, 2), extentX = _a[0], extentY = _a[1];\n }\n else {\n extentX = dv.range(xField);\n extentY = dv.range(yField);\n }\n var bwX, bwY;\n if (bandwidth &&\n Array.isArray(bandwidth) &&\n bandwidth.slice(0, 2).every(util_1.isNumber) &&\n bandwidth.slice(0, 2).every(function (item) { return item > 0; })) {\n _b = tslib_1.__read(bandwidth, 2), bwX = _b[0], bwY = _b[1];\n }\n else {\n bwX = bandwidth_1.silverman(dv.getColumn(xField));\n bwY = bandwidth_1.silverman(dv.getColumn(yField));\n }\n var seriesValuesX = get_series_values_1.default(extentX, bwX);\n var seriesValuesY = get_series_values_1.default(extentY, bwY);\n var count = dv.rows.length;\n var result = [];\n for (var i = 0; i < seriesValuesX.length; i++) {\n for (var j = 0; j < seriesValuesY.length; j++) {\n var sum = 0;\n var x = seriesValuesX[i];\n var y = seriesValuesY[j];\n for (var k = 0; k < count; k++) {\n sum += method((x - dv.rows[k][xField]) / bwX) * method((y - dv.rows[k][yField]) / bwY);\n }\n var z = (1 / (count * bwX * bwY)) * sum;\n var row = {};\n row[asX] = x;\n row[asY] = y;\n row[asZ] = z;\n result.push(row);\n }\n }\n dv.rows = result;\n}\ndata_set_1.DataSet.registerTransform('kernel-smooth.density', transform);\ndata_set_1.DataSet.registerTransform('kernel.density', transform);\nexports.default = {\n KERNEL_METHODS: KERNEL_METHODS,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\n/*\n * @reference: https://github.com/Planeshifter/kernel-smooth/blob/master/lib/index.js\n */\nvar util_1 = require(\"@antv/util\");\nvar get_series_values_1 = tslib_1.__importDefault(require(\"../../util/get-series-values\"));\nvar kernel_1 = tslib_1.__importDefault(require(\"../../util/kernel\"));\nvar data_set_1 = require(\"../../data-set\");\nvar simple_statistics_1 = require(\"simple-statistics\");\nvar option_parser_1 = require(\"../../util/option-parser\");\nvar bandwidth_1 = require(\"../../util/bandwidth\");\nvar DEFAULT_OPTIONS = {\n as: ['x', 'y'],\n // fields: [ 'x', 'y' ], // required, one or two fields\n method: 'gaussian',\n};\nvar KERNEL_METHODS = util_1.keys(kernel_1.default);\n// calculates weight for i-th obs\nfunction weight(kernel, bandwidth, x_0, x_i) {\n var arg = (x_i - x_0) / bandwidth;\n return kernel(arg);\n}\n// calculates weight for i-th obs when p > 1\n// function weight_vectors(kernel, bandwidth, x_0, x_i) {\n// const arg = enclideanDistance(x_i, x_0) / bandwidth;\n// return kernel(arg);\n// }\nfunction vectorize(fun) {\n return function (x) {\n if (!util_1.isArray(x)) {\n return fun(x);\n }\n return x.map(function (x) {\n return fun(x);\n });\n };\n}\nfunction transform(dv, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var fields = option_parser_1.getFields(options);\n if (!util_1.isArray(fields) || !(fields.length === 1 || fields.length === 2)) {\n throw new TypeError('invalid fields: must be an array of 1 or 2 strings!');\n }\n var _a = tslib_1.__read(options.as, 2), asX = _a[0], asY = _a[1];\n if (!util_1.isString(asX) || !util_1.isString(asY)) {\n throw new TypeError('invalid as: must be an array of 2 strings!');\n }\n var func;\n var method = options.method;\n if (util_1.isString(method)) {\n if (KERNEL_METHODS.indexOf(method) === -1) {\n throw new TypeError(\"invalid method: \" + method + \". Must be one of \" + KERNEL_METHODS.join(', '));\n }\n func = kernel_1.default[method];\n }\n var _b = tslib_1.__read(fields, 2), xField = _b[0], yField = _b[1];\n var xs = dv.getColumn(xField);\n var extent = options.extent;\n if (extent || !util_1.isArray(extent)) {\n extent = dv.range(xField);\n }\n var bandwidth = options.bandwidth;\n if (!bandwidth || !util_1.isNumber(bandwidth) || bandwidth <= 0) {\n bandwidth = bandwidth_1.silverman(xs);\n }\n var seriesValues = get_series_values_1.default(extent, bandwidth);\n var xCount = xs.length;\n var weightFunc = weight.bind(null, func, bandwidth);\n var kernelSmoother;\n if (util_1.isNil(yField)) {\n // KDE\n kernelSmoother = vectorize(function (x) {\n var weights = xs.map(function (x_i) { return weightFunc(x, x_i); });\n var num = simple_statistics_1.sum(weights);\n var denom = xCount * bandwidth;\n if (!num || !denom)\n return 0;\n return num / denom;\n });\n }\n else {\n // kernel regression smoothing\n var ys_1 = dv.getColumn(yField);\n kernelSmoother = vectorize(function (x) {\n var weights = xs.map(function (x_i) { return weightFunc(x, x_i); });\n var num = simple_statistics_1.sum(weights.map(function (w, i) { return w * ys_1[i]; }));\n var denom = simple_statistics_1.sum(weights);\n if (!num || !denom)\n return 0;\n return num / denom;\n });\n }\n var result = seriesValues.map(function (x) {\n var row = {};\n row[asX] = x;\n row[asY] = kernelSmoother(x);\n return row;\n });\n dv.rows = result;\n}\ndata_set_1.DataSet.registerTransform('kernel-smooth.regression', transform);\ndata_set_1.DataSet.registerTransform('kernel.regression', transform);\nexports.default = {\n KERNEL_METHODS: KERNEL_METHODS,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar data_set_1 = require(\"../data-set\");\nfunction defaultCallback(row) {\n return row;\n}\ndata_set_1.DataSet.registerTransform('map', function (dataView, options) {\n dataView.rows = dataView.rows.map(options.callback || defaultCallback);\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar partition_1 = tslib_1.__importDefault(require(\"../util/partition\"));\nvar data_set_1 = require(\"../data-set\");\nvar DEFAULT_OPTIONS = {\n groupBy: [],\n orderBy: [],\n};\ndata_set_1.DataSet.registerTransform('partition', function (dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n // TODO: rows 是否都只能是数组\n // @ts-ignore;\n dataView.rows = partition_1.default(dataView.rows, options.groupBy, options.orderBy);\n});\nfunction group(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n dataView.rows = util_1.values(partition_1.default(dataView.rows, options.groupBy, options.orderBy));\n}\ndata_set_1.DataSet.registerTransform('group', group);\ndata_set_1.DataSet.registerTransform('groups', group);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar simple_statistics_1 = require(\"simple-statistics\");\nvar partition_1 = tslib_1.__importDefault(require(\"../util/partition\"));\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n // field: 'y', // required\n // dimension: 'x', // required\n groupBy: [],\n as: '_percent',\n};\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var field = option_parser_1.getField(options);\n var dimension = options.dimension, groupBy = options.groupBy;\n var as = options.as;\n if (!util_1.isString(dimension)) {\n throw new TypeError('Invalid dimension: must be a string!');\n }\n if (util_1.isArray(as)) {\n console.warn('Invalid as: must be a string, will use the first element of the array specified.');\n as = as[0];\n }\n if (!util_1.isString(as)) {\n throw new TypeError('Invalid as: must be a string!');\n }\n var rows = dataView.rows;\n var result = [];\n var groups = partition_1.default(rows, groupBy);\n util_1.forIn(groups, function (group) {\n var totalSum = simple_statistics_1.sum(group.map(function (row) { return row[field]; }));\n if (totalSum === 0) {\n console.warn(\"Invalid data: total sum of field \" + field + \" is 0!\");\n }\n var innerGroups = partition_1.default(group, [dimension]);\n util_1.forIn(innerGroups, function (innerGroup) {\n var innerSum = simple_statistics_1.sum(innerGroup.map(function (row) { return row[field]; }));\n // const resultRow = pick(innerGroup[0], union(groupBy, [ dimension ]));\n var resultRow = innerGroup[0];\n // FIXME in case dimension and field is the same\n var dimensionValue = resultRow[dimension];\n resultRow[field] = innerSum;\n resultRow[dimension] = dimensionValue;\n if (totalSum === 0) {\n resultRow[as] = 0;\n }\n else {\n resultRow[as] = innerSum / totalSum;\n }\n result.push(resultRow);\n });\n });\n dataView.rows = result;\n}\ndata_set_1.DataSet.registerTransform('percent', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\ndata_set_1.DataSet.registerTransform('pick', function (dataView, options) {\n var columns = option_parser_1.getFields(options, dataView.getColumnNames());\n dataView.rows = dataView.rows.map(function (row) { return util_1.pick(row, columns); });\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar partition_1 = tslib_1.__importDefault(require(\"../util/partition\"));\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n // field: 'y', // required\n // dimension: 'x', // required\n groupBy: [],\n as: '_proportion',\n};\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var field = option_parser_1.getField(options);\n var dimension = options.dimension;\n var groupBy = options.groupBy;\n var as = options.as;\n if (!util_1.isString(dimension)) {\n throw new TypeError('Invalid dimension: must be a string!');\n }\n if (util_1.isArray(as)) {\n console.warn('Invalid as: must be a string, will use the first element of the array specified.');\n as = as[0];\n }\n if (!util_1.isString(as)) {\n throw new TypeError('Invalid as: must be a string!');\n }\n var rows = dataView.rows;\n var result = [];\n var groups = partition_1.default(rows, groupBy);\n util_1.forIn(groups, function (group) {\n var totalCount = group.length;\n var innerGroups = partition_1.default(group, [dimension]);\n util_1.forIn(innerGroups, function (innerGroup) {\n var innerCount = innerGroup.length;\n // const resultRow = pick(innerGroup[0], union(groupBy, [ dimension ]));\n var resultRow = innerGroup[0];\n // FIXME in case dimension and field is the same\n var dimensionValue = resultRow[dimension];\n resultRow[field] = innerCount;\n resultRow[dimension] = dimensionValue;\n resultRow[as] = innerCount / totalCount;\n result.push(resultRow);\n });\n });\n dataView.rows = result;\n}\ndata_set_1.DataSet.registerTransform('proportion', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar regression_1 = tslib_1.__importDefault(require(\"regression\"));\nvar util_1 = require(\"@antv/util\");\nvar get_series_values_1 = tslib_1.__importDefault(require(\"../util/get-series-values\"));\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\nvar bandwidth_1 = require(\"../util/bandwidth\");\nvar DEFAULT_OPTIONS = {\n as: ['x', 'y'],\n // fields: [ 'x', 'y' ], // required two fields\n method: 'linear',\n // extent: [], // extent to execute regression function, default: [ min(x), max(x) ]\n // bandwidth: 1, // bandWidth to execute regression function\n order: 2,\n precision: 2,\n};\nvar REGRESSION_METHODS = ['linear', 'exponential', 'logarithmic', 'power', 'polynomial'];\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var fields = option_parser_1.getFields(options);\n if (!util_1.isArray(fields) || fields.length !== 2) {\n throw new TypeError('invalid fields: must be an array of 2 strings.');\n }\n var _a = tslib_1.__read(fields, 2), xField = _a[0], yField = _a[1];\n var method = options.method;\n if (REGRESSION_METHODS.indexOf(method) === -1) {\n throw new TypeError(\"invalid method: \" + method + \". Must be one of \" + REGRESSION_METHODS.join(', '));\n }\n var points = dataView.rows.map(function (row) { return [row[xField], row[yField]]; });\n var regressionResult = regression_1.default[method](points, options);\n var extent = options.extent;\n if (!util_1.isArray(extent) || extent.length !== 2) {\n extent = dataView.range(xField);\n }\n var bandwidth = options.bandwidth;\n if (!util_1.isNumber(bandwidth) || bandwidth <= 0) {\n bandwidth = bandwidth_1.silverman(dataView.getColumn(xField));\n }\n var valuesToPredict = get_series_values_1.default(extent, bandwidth);\n var result = [];\n var _b = tslib_1.__read(options.as, 2), asX = _b[0], asY = _b[1];\n valuesToPredict.forEach(function (value) {\n var row = {};\n var _a = tslib_1.__read(regressionResult.predict(value), 2), x = _a[0], y = _a[1];\n row[asX] = x;\n row[asY] = y;\n if (isFinite(y)) {\n result.push(row);\n }\n });\n dataView.rows = result;\n}\ndata_set_1.DataSet.registerTransform('regression', transform);\nexports.default = {\n REGRESSION_METHODS: REGRESSION_METHODS,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../data-set\");\nfunction transform(dataView, options) {\n var map = options.map || {};\n var cleanMap = {};\n if (util_1.isPlainObject(map)) {\n util_1.forIn(map, function (value, key) {\n if (util_1.isString(value) && util_1.isString(key)) {\n cleanMap[key] = value;\n }\n });\n }\n dataView.rows.forEach(function (row) {\n util_1.forIn(cleanMap, function (newKey, key) {\n var temp = row[key];\n delete row[key];\n row[newKey] = temp;\n });\n });\n}\ndata_set_1.DataSet.registerTransform('rename', transform);\ndata_set_1.DataSet.registerTransform('rename-fields', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar data_set_1 = require(\"../data-set\");\ndata_set_1.DataSet.registerTransform('reverse', function (dataView) {\n dataView.rows.reverse();\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\n/*\n * options: {\n * type: 'sort-by',\n * fields: [],\n * order: 'ASC' // 'DESC'\n * }\n */\nvar VALID_ORDERS = ['ASC', 'DESC'];\nfunction transform(dataView, options) {\n var fields = option_parser_1.getFields(options, [dataView.getColumnName(0)]);\n if (!util_1.isArray(fields)) {\n throw new TypeError('Invalid fields: must be an array with strings!');\n }\n dataView.rows = util_1.sortBy(dataView.rows, fields);\n var order = options.order;\n if (order && VALID_ORDERS.indexOf(order) === -1) {\n throw new TypeError(\"Invalid order: \" + order + \" must be one of \" + VALID_ORDERS.join(', '));\n }\n else if (order === 'DESC') {\n dataView.rows.reverse();\n }\n}\ndata_set_1.DataSet.registerTransform('sort-by', transform);\ndata_set_1.DataSet.registerTransform('sortBy', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar data_set_1 = require(\"../data-set\");\ndata_set_1.DataSet.registerTransform('sort', function (dataView, options) {\n var columnName = dataView.getColumnName(0);\n dataView.rows.sort(options.callback || (function (a, b) { return a[columnName] - b[columnName]; }));\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\ndata_set_1.DataSet.registerTransform('subset', function (dataView, options) {\n var startIndex = options.startRowIndex || 0;\n var endIndex = options.endRowIndex || dataView.rows.length - 1;\n var columns = option_parser_1.getFields(options, dataView.getColumnNames());\n dataView.rows = dataView.getSubset(startIndex, endIndex, columns);\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar data_set_1 = require(\"../data-set\");\nvar tag_cloud_1 = tslib_1.__importDefault(require(\"../util/tag-cloud\"));\nvar option_parser_1 = require(\"../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n fields: ['text', 'value'],\n font: function () { return 'serif'; },\n padding: 1,\n size: [500, 500],\n spiral: 'archimedean',\n // timeInterval: Infinity // max execute time\n timeInterval: 500,\n};\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var layout = tag_cloud_1.default();\n ['font', 'fontSize', 'padding', 'rotate', 'size', 'spiral', 'timeInterval'].forEach(function (key) {\n // @ts-ignore\n if (options[key]) {\n // @ts-ignore\n layout[key](options[key]);\n }\n });\n var fields = option_parser_1.getFields(options);\n var _a = tslib_1.__read(fields, 2), text = _a[0], value = _a[1];\n if (!util_1.isString(text) || !util_1.isString(value)) {\n throw new TypeError('Invalid fields: must be an array with 2 strings (e.g. [ \"text\", \"value\" ])!');\n }\n var words = dataView.rows.map(function (row) {\n row.text = row[text];\n row.value = row[value];\n return row;\n });\n layout.words(words);\n if (options.imageMask) {\n layout.createMask(options.imageMask);\n }\n var result = layout.start();\n var tags = result._tags;\n var bounds = result._bounds;\n tags.forEach(function (tag) {\n tag.x += options.size[0] / 2;\n tag.y += options.size[1] / 2;\n });\n var _b = tslib_1.__read(options.size, 2), w = _b[0], h = _b[1];\n var hasImage = result.hasImage;\n tags.push({\n text: '',\n value: 0,\n x: hasImage ? 0 : bounds[0].x,\n y: hasImage ? 0 : bounds[0].y,\n opacity: 0,\n });\n tags.push({\n text: '',\n value: 0,\n x: hasImage ? w : bounds[1].x,\n y: hasImage ? h : bounds[1].y,\n opacity: 0,\n });\n dataView.rows = tags;\n dataView._tagCloud = result;\n}\ndata_set_1.DataSet.registerTransform('tag-cloud', transform);\ndata_set_1.DataSet.registerTransform('word-cloud', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar simple_statistics_1 = require(\"simple-statistics\");\nvar partition_1 = tslib_1.__importDefault(require(\"../util/partition\"));\nvar data_set_1 = require(\"../data-set\");\nvar option_parser_1 = require(\"../util/option-parser\");\nvar DEFAULT_OPTIONS = {\n fields: ['name', 'value'],\n rows: 5,\n size: [1, 1],\n scale: 1,\n groupBy: [],\n maxCount: 1000,\n gapRatio: 0.1,\n as: ['x', 'y'],\n};\nfunction transform(dataView, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var fields = option_parser_1.getFields(options);\n var _a = tslib_1.__read(fields, 2), nameField = _a[0], valueField = _a[1];\n var _b = tslib_1.__read(options.as, 2), asX = _b[0], asY = _b[1];\n var groupBy = options.groupBy;\n var groups = partition_1.default(dataView.rows, groupBy);\n var groupKeys = util_1.keys(groups);\n var _c = tslib_1.__read(options.size, 2), width = _c[0], height = _c[1];\n var maxCount = options.maxCount;\n var groupCount = groupKeys.length;\n var partHeight = height / groupCount;\n var rows = options.rows;\n var gapRatio = options.gapRatio;\n var result = [];\n var scale = options.scale;\n var currentGroupIndex = 0;\n var wStep = 0;\n // getting suitable scale and width step\n util_1.forIn(groups, function (group) {\n var totalValue = simple_statistics_1.sum(util_1.map(group, function (row) { return row[valueField]; }));\n var cols = Math.ceil((totalValue * scale) / rows);\n if (totalValue * scale > maxCount) {\n scale = maxCount / totalValue;\n cols = Math.ceil((totalValue * scale) / rows);\n }\n wStep = width / cols;\n });\n // distributing values into grid\n util_1.forIn(groups, function (group) {\n var heightRange = [currentGroupIndex * partHeight, (currentGroupIndex + 1) * partHeight];\n var h = heightRange[1] - heightRange[0];\n var hStep = (h * (1 - gapRatio)) / rows;\n var currentCol = 0;\n var currentRow = 0;\n util_1.each(group, function (row) {\n var value = row[valueField];\n var count = Math.round(value * scale);\n for (var i = 0; i < count; i++) {\n if (currentRow === rows) {\n currentRow = 0;\n currentCol++;\n }\n var resultRow = util_1.pick(row, [nameField, valueField].concat(groupBy));\n resultRow[asX] = currentCol * wStep + wStep / 2;\n resultRow[asY] = currentRow * hStep + hStep / 2 + heightRange[0];\n resultRow._wStep = wStep;\n resultRow._hStep = hStep;\n currentRow++;\n result.push(resultRow);\n }\n });\n currentGroupIndex += 1;\n });\n dataView.rows = result;\n}\ndata_set_1.DataSet.registerTransform('waffle', transform);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar simple_statistics_1 = require(\"simple-statistics\");\nfunction silverman(arr) {\n var stdev = simple_statistics_1.standardDeviation(arr);\n var num = 4 * Math.pow(stdev, 5);\n var denom = 3 * arr.length;\n return Math.pow(num / denom, 0.2);\n}\nexports.silverman = silverman;\nfunction nrd(arr) {\n var s = simple_statistics_1.standardDeviation(arr);\n var iqr = simple_statistics_1.interquartileRange(arr);\n if (typeof iqr === 'number') {\n s = Math.min(s, iqr / 1.34);\n }\n return 1.06 * s * Math.pow(arr.length, -0.2);\n}\nexports.nrd = nrd;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar d3Geo = tslib_1.__importStar(require(\"d3-geo\"));\nvar d3GeoProjection = tslib_1.__importStar(require(\"d3-geo-projection\"));\nvar d3CompositeProjection = tslib_1.__importStar(require(\"d3-composite-projections\"));\n/*\n * getGeoProjection\n *\n * @param {string|function} projection projection name or projection function\n * @param {boolean} [exportRaw = false] - whether return the raw projection or not\n * */\nexports.default = (function (projection, exportRaw) {\n if (exportRaw === void 0) { exportRaw = false; }\n if (util_1.isFunction(projection)) {\n return exportRaw ? projection : projection();\n }\n if (util_1.isString(projection)) {\n // @ts-ignore\n if (d3Geo[projection]) {\n // @ts-ignore\n return exportRaw ? d3Geo[projection] : d3Geo[projection]();\n }\n if (d3GeoProjection[projection]) {\n return exportRaw ? d3GeoProjection[projection] : d3GeoProjection[projection]();\n }\n if (d3CompositeProjection[projection]) {\n return exportRaw ? d3CompositeProjection[projection] : d3CompositeProjection[projection]();\n }\n }\n return null;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nexports.default = (function (extent, bw) {\n var bandwidth = bw || 1;\n var _a = tslib_1.__read(extent, 2), min = _a[0], max = _a[1];\n var values = [];\n var tmp = min;\n while (tmp < max) {\n values.push(tmp);\n tmp += bandwidth;\n }\n values.push(max);\n return values;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * @reference: https://github.com/jasondavies/science.js/blob/master/src/stats/kernel.js\n * @reference: https://github.com/Planeshifter/kernel-smooth/blob/master/lib/index.js#L16\n */\nfunction uniform(u) {\n return Math.abs(u) <= 1 ? 0.5 : 0;\n}\nfunction tricubed(u) {\n var abs = 1 - Math.pow(Math.abs(u), 3);\n return Math.pow(abs, 3);\n}\nexports.default = {\n boxcar: uniform,\n cosine: function (u) {\n if (Math.abs(u) <= 1) {\n return (Math.PI / 4) * Math.cos((Math.PI / 2) * u);\n }\n return 0;\n },\n epanechnikov: function (u) {\n return Math.abs(u) < 1 ? 0.75 * (1 - u * u) : 0;\n },\n gaussian: function (u) {\n // return 1 / Math.sqrt(2 * Math.PI) * Math.exp(-0.5 * u * u);\n return 0.3989422804 * Math.exp(-0.5 * u * u);\n },\n quartic: function (u) {\n if (Math.abs(u) < 1) {\n var tmp = 1 - u * u;\n return (15 / 16) * tmp * tmp;\n }\n return 0;\n },\n triangular: function (u) {\n var abs = Math.abs(u);\n return abs < 1 ? 1 - abs : 0;\n },\n tricube: function (u) {\n return Math.abs(u) < 1 ? (70 / 81) * tricubed(u) : 0;\n },\n triweight: function (u) {\n if (Math.abs(u) < 1) {\n var tmp = 1 - u * u;\n return (35 / 32) * tmp * tmp * tmp;\n }\n return 0;\n },\n uniform: uniform,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nvar INVALID_FIELD_ERR_MSG = 'Invalid field: it must be a string!';\nvar INVALID_FIELDS_ERR_MSG = 'Invalid fields: it must be an array!';\nfunction getField(options, defaultField) {\n var field = options.field, fields = options.fields;\n if (util_1.isString(field)) {\n return field;\n }\n if (util_1.isArray(field)) {\n console.warn(INVALID_FIELD_ERR_MSG);\n return field[0];\n }\n console.warn(INVALID_FIELD_ERR_MSG + \" will try to get fields instead.\");\n if (util_1.isString(fields)) {\n return fields;\n }\n if (util_1.isArray(fields) && fields.length) {\n return fields[0];\n }\n if (defaultField) {\n return defaultField;\n }\n throw new TypeError(INVALID_FIELD_ERR_MSG);\n}\nexports.getField = getField;\nfunction getFields(options, defaultFields) {\n var field = options.field, fields = options.fields;\n if (util_1.isArray(fields)) {\n return fields;\n }\n if (util_1.isString(fields)) {\n console.warn(INVALID_FIELDS_ERR_MSG);\n return [fields];\n }\n console.warn(INVALID_FIELDS_ERR_MSG + \" will try to get field instead.\");\n if (util_1.isString(field)) {\n console.warn(INVALID_FIELDS_ERR_MSG);\n return [field];\n }\n if (util_1.isArray(field) && field.length) {\n console.warn(INVALID_FIELDS_ERR_MSG);\n return field;\n }\n if (defaultFields) {\n return defaultFields;\n }\n throw new TypeError(INVALID_FIELDS_ERR_MSG);\n}\nexports.getFields = getFields;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (function (fraction) {\n var step = 1 / fraction;\n var pArr = [];\n for (var i = 0; i <= 1; i = i + step) {\n pArr.push(i);\n }\n return pArr;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@antv/util\");\nvar simple_sort_by_1 = tslib_1.__importDefault(require(\"./simple-sort-by\"));\nexports.default = (function (rows, group_by, order_by) {\n if (order_by === void 0) { order_by = []; }\n var newRows = rows;\n if (order_by && order_by.length) {\n newRows = simple_sort_by_1.default(rows, order_by);\n }\n var groupingFn;\n if (util_1.isFunction(group_by)) {\n groupingFn = group_by;\n }\n else if (util_1.isArray(group_by)) {\n groupingFn = function (row) { return \"_\" + group_by.map(function (col) { return row[col]; }).join('-'); };\n // NOTE: Object.keys({'b': 'b', '2': '2', '1': '1', 'a': 'a'}) => [ '1', '2', 'b', 'a' ]\n // that is why we have to add a prefix\n }\n else if (util_1.isString(group_by)) {\n groupingFn = function (row) { return \"_\" + row[group_by]; };\n }\n var groups = util_1.groupBy(newRows, groupingFn);\n return groups;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@antv/util\");\nfunction sortBy(arr, keys) {\n if (keys === void 0) { keys = []; }\n var comparer = undefined;\n if (util_1.isFunction(keys)) {\n comparer = keys;\n }\n else if (util_1.isArray(keys)) {\n comparer = function (a, b) {\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (a[key] < b[key]) {\n return -1;\n }\n if (a[key] > b[key]) {\n return 1;\n }\n }\n return 0;\n };\n }\n else if (util_1.isString(keys)) {\n comparer = function (a, b) {\n if (a[keys] < b[keys]) {\n return -1;\n }\n if (a[keys] > b[keys]) {\n return 1;\n }\n return 0;\n };\n }\n return arr.sort(comparer);\n}\nexports.default = sortBy;\n","\"use strict\";\n/*\n * Synchronous version of d3-cloud\n */\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n/* eslint-disable no-return-assign, no-cond-assign */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar cloudRadians = Math.PI / 180, cw = (1 << 11) >> 5, ch = 1 << 11;\nfunction cloudText(d) {\n return d.text;\n}\nfunction cloudFont() {\n return 'serif';\n}\nfunction cloudFontNormal() {\n return 'normal';\n}\nfunction cloudFontSize(d) {\n return d.value;\n}\nfunction cloudRotate() {\n return ~~(Math.random() * 2) * 90;\n}\nfunction cloudPadding() {\n return 1;\n}\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite)\n return;\n var c = contextAndRatio.context, ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0, y = 0, maxh = 0;\n var n = data.length;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n var w = c.measureText(d.text + 'm').width * ratio, h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians), cr = Math.cos(d.rotate * cloudRadians), wcr = w * cr, wsr = w * sr, hcr = h * cr, hsr = h * sr;\n w = ((Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5) << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n }\n else {\n w = ((w + 0x1f) >> 5) << 5;\n }\n if (h > maxh)\n maxh = h;\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch)\n break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate)\n c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText)\n continue;\n var w = d.width, w32 = w >> 5;\n var h = d.y1 - d.y0;\n // Zero the buffer\n for (var i = 0; i < h * w32; i++)\n sprite[i] = 0;\n x = d.xoff;\n if (x == null)\n return;\n y = d.yoff;\n var seen = 0, seenRow = -1;\n for (var j = 0; j < h; j++) {\n for (var i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5), m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen)\n seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite, w = tag.width >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n var x = (tag.y + tag.y0) * sw + (lx >> 5), last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i])\n return true;\n }\n x += sw;\n }\n return false;\n}\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0], b1 = bounds[1];\n if (d.x + d.x0 < b0.x)\n b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y)\n b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x)\n b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y)\n b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n };\n}\nfunction rectangularSpiral(size) {\n var dy = 4, dx = (dy * size[0]) / size[1];\n var x = 0, y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y];\n };\n}\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [];\n var i = -1;\n while (++i < n)\n a[i] = 0;\n return a;\n}\nfunction cloudCanvas() {\n return document.createElement('canvas');\n}\nfunction functor(d) {\n return typeof d === 'function'\n ? d\n : function () {\n return d;\n };\n}\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral,\n};\nfunction default_1() {\n var size = [256, 256], text = cloudText, font = cloudFont, fontSize = cloudFontSize, fontStyle = cloudFontNormal, fontWeight = cloudFontNormal, rotate = cloudRotate, padding = cloudPadding, spiral = archimedeanSpiral, words = [], timeInterval = Infinity, random = Math.random, canvas = cloudCanvas;\n var cloud = {};\n cloud.canvas = function (_) {\n return arguments.length ? ((canvas = functor(_)), cloud) : canvas;\n };\n cloud.start = function () {\n var _a = tslib_1.__read(size, 2), width = _a[0], height = _a[1];\n var contextAndRatio = getContext(canvas()), board = cloud.board ? cloud.board : zeroArray((size[0] >> 5) * size[1]), n = words.length, tags = [], data = words\n .map(function (d, i) {\n d.text = text.call(this, d, i);\n d.font = font.call(this, d, i);\n d.style = fontStyle.call(this, d, i);\n d.weight = fontWeight.call(this, d, i);\n d.rotate = rotate.call(this, d, i);\n d.size = ~~fontSize.call(this, d, i);\n d.padding = padding.call(this, d, i);\n return d;\n })\n .sort(function (a, b) {\n return b.size - a.size;\n });\n var i = -1, bounds = !cloud.board\n ? null\n : [\n {\n x: 0,\n y: 0,\n },\n {\n x: width,\n y: height,\n },\n ];\n step();\n function step() {\n var start = Date.now();\n while (Date.now() - start < timeInterval && ++i < n) {\n var d = data[i];\n d.x = (width * (random() + 0.5)) >> 1;\n d.y = (height * (random() + 0.5)) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) {\n if (!cloud.hasImage) {\n // update bounds if image mask not set\n cloudBounds(bounds, d);\n }\n }\n else {\n bounds = [\n { x: d.x + d.x0, y: d.y + d.y0 },\n { x: d.x + d.x1, y: d.y + d.y1 },\n ];\n }\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n cloud._tags = tags;\n cloud._bounds = bounds;\n }\n return cloud;\n };\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return { context: context, ratio: ratio };\n }\n function place(board, tag, bounds) {\n // const perimeter = [{ x: 0, y: 0 }, { x: size[0], y: size[1] }],\n var startX = tag.x, startY = tag.y, maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), s = spiral(size), dt = random() < 0.5 ? 1 : -1;\n var dxdy, t = -dt, dx, dy;\n while ((dxdy = s((t += dt)))) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta)\n break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1])\n continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite, w = tag.width >> 5, sw = size[0] >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n var last = void 0, x = (tag.y + tag.y0) * sw + (lx >> 5);\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n delete tag.sprite;\n return true;\n }\n }\n }\n return false;\n }\n cloud.createMask = function (img) {\n var can = document.createElement('canvas');\n var _a = tslib_1.__read(size, 2), width = _a[0], height = _a[1];\n var w32 = width >> 5;\n var board = zeroArray((width >> 5) * height);\n can.width = width;\n can.height = height;\n var cxt = can.getContext('2d');\n cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, width, height);\n var imageData = cxt.getImageData(0, 0, width, height).data;\n for (var j = 0; j < height; j++) {\n for (var i = 0; i < width; i++) {\n var k = w32 * j + (i >> 5);\n var tmp = (j * width + i) << 2;\n var flag = imageData[tmp] >= 250 && imageData[tmp + 1] >= 250 && imageData[tmp + 2] >= 250;\n var m = flag ? 1 << (31 - (i % 32)) : 0;\n board[k] |= m;\n }\n }\n cloud.board = board;\n cloud.hasImage = true;\n };\n cloud.timeInterval = function (_) {\n return arguments.length ? ((timeInterval = _ == null ? Infinity : _), cloud) : timeInterval;\n };\n cloud.words = function (_) {\n return arguments.length ? ((words = _), cloud) : words;\n };\n cloud.size = function (_) {\n return arguments.length ? ((size = [+_[0], +_[1]]), cloud) : size;\n };\n cloud.font = function (_) {\n return arguments.length ? ((font = functor(_)), cloud) : font;\n };\n cloud.fontStyle = function (_) {\n return arguments.length ? ((fontStyle = functor(_)), cloud) : fontStyle;\n };\n cloud.fontWeight = function (_) {\n return arguments.length ? ((fontWeight = functor(_)), cloud) : fontWeight;\n };\n cloud.rotate = function (_) {\n return arguments.length ? ((rotate = functor(_)), cloud) : rotate;\n };\n cloud.text = function (_) {\n return arguments.length ? ((text = functor(_)), cloud) : text;\n };\n cloud.spiral = function (_) {\n return arguments.length ? ((spiral = spirals[_] || _), cloud) : spiral;\n };\n cloud.fontSize = function (_) {\n return arguments.length ? ((fontSize = functor(_)), cloud) : fontSize;\n };\n cloud.padding = function (_) {\n return arguments.length ? ((padding = functor(_)), cloud) : padding;\n };\n cloud.random = function (_) {\n return arguments.length ? ((random = _), cloud) : random;\n };\n return cloud;\n}\nexports.default = default_1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar wolfy87_eventemitter_1 = tslib_1.__importDefault(require(\"wolfy87-eventemitter\"));\nvar util_1 = require(\"@antv/util\");\nfunction cloneOptions(options) {\n var result = {};\n util_1.forIn(options, function (value, key) {\n if (util_1.isObject(value) && value.isView) {\n result[key] = value;\n }\n else if (util_1.isArray(value)) {\n result[key] = value.concat([]);\n }\n else if (util_1.isPlainObject(value)) {\n result[key] = util_1.clone(value);\n }\n else {\n result[key] = value;\n }\n });\n return result;\n}\n/**\n * 数据视图\n * @public\n */\nvar View = /** @class */ (function (_super) {\n tslib_1.__extends(View, _super);\n function View(dataSet, options) {\n var _this = _super.call(this) || this;\n /**\n * 是否是View\n */\n _this.isView = true;\n /**\n * 是否是View\n */\n _this.isDataView = true; // alias\n /**\n *\n */\n _this.watchingStates = null;\n /**\n * 数据视图类型\n */\n _this.dataType = 'table';\n /**\n * 已应用的 transform\n */\n _this.transforms = [];\n /**\n * 原始数据\n */\n _this.origin = [];\n /**\n * 存储处理后的数据\n */\n _this.rows = [];\n if (dataSet && dataSet.isDataSet) {\n _this.dataSet = dataSet;\n }\n else {\n _this.dataSet = null;\n options = dataSet;\n }\n _this.loose = !_this.dataSet;\n // TODO:\n // assign(me, options);\n if (options) {\n _this.watchingStates = options.watchingStates;\n }\n if (!_this.loose) {\n var watchingStates_1 = _this.watchingStates;\n dataSet.on('statechange', function (name) {\n if (util_1.isArray(watchingStates_1)) {\n if (watchingStates_1.indexOf(name) > -1) {\n _this._reExecute();\n }\n }\n else {\n _this._reExecute();\n }\n });\n }\n return _this;\n }\n View.prototype._parseStateExpression = function (expr) {\n var dataSet = this.dataSet;\n if (dataSet === null)\n return undefined;\n var matched = /^\\$state\\.(\\w+)/.exec(expr);\n if (matched) {\n return dataSet.state[matched[1]];\n }\n return expr;\n };\n View.prototype._preparseOptions = function (options) {\n var _this = this;\n var optionsCloned = cloneOptions(options);\n if (this.loose) {\n return optionsCloned;\n }\n util_1.forIn(optionsCloned, function (value, key) {\n if (util_1.isString(value) && /^\\$state\\./.test(value)) {\n optionsCloned[key] = _this._parseStateExpression(value);\n }\n });\n return optionsCloned;\n };\n // connectors\n View.prototype._prepareSource = function (source, options) {\n // warning me.origin is protected\n this._source = { source: source, options: options };\n if (!options) {\n if (source instanceof View || util_1.isString(source)) {\n this.origin = View.DataSet.getConnector('default')(source, this.dataSet);\n }\n else if (util_1.isArray(source)) {\n // TODO branch: if source is like ['dataview1', 'dataview2']\n this.origin = source;\n }\n else if (util_1.isObject(source) && source.type) {\n var opts = this._preparseOptions(source); // connector without source\n this.origin = View.DataSet.getConnector(opts.type)(opts, this);\n }\n else {\n throw new TypeError('Invalid source');\n }\n }\n else {\n var opts = this._preparseOptions(options);\n this.origin = View.DataSet.getConnector(opts.type)(source, opts, this);\n }\n this.rows = util_1.deepMix([], this.origin);\n return this;\n };\n View.prototype.source = function (source, options) {\n this._prepareSource(source, options)._reExecuteTransforms();\n this.trigger('change', []);\n return this;\n };\n /**\n * 执行数据处理数据。执行完这个函数后transform 会被存储\n * @param options - 某种类型的transform\n */\n View.prototype.transform = function (options) {\n if (options && options.type) {\n this.transforms.push(options);\n this._executeTransform(options);\n }\n return this;\n };\n View.prototype._executeTransform = function (options) {\n options = this._preparseOptions(options);\n var transform = View.DataSet.getTransform(options.type);\n transform(this, options);\n };\n View.prototype._reExecuteTransforms = function () {\n var _this = this;\n this.transforms.forEach(function (options) {\n _this._executeTransform(options);\n });\n };\n View.prototype.addRow = function (row) {\n this.rows.push(row);\n };\n View.prototype.removeRow = function (index) {\n this.rows.splice(index, 1);\n };\n View.prototype.updateRow = function (index, newRow) {\n util_1.assign(this.rows[index], newRow);\n };\n View.prototype.findRows = function (query) {\n return this.rows.filter(function (row) { return util_1.isMatch(row, query); });\n };\n View.prototype.findRow = function (query) {\n return util_1.find(this.rows, query);\n };\n // columns\n View.prototype.getColumnNames = function () {\n var firstRow = this.rows[0];\n if (firstRow) {\n return util_1.keys(firstRow);\n }\n return [];\n };\n View.prototype.getColumnName = function (index) {\n return this.getColumnNames()[index];\n };\n View.prototype.getColumnIndex = function (columnName) {\n var columnNames = this.getColumnNames();\n return columnNames.indexOf(columnName);\n };\n View.prototype.getColumn = function (columnName) {\n return this.rows.map(function (row) { return row[columnName]; });\n };\n View.prototype.getColumnData = function (columnName) {\n return this.getColumn(columnName);\n };\n // data process\n View.prototype.getSubset = function (startRowIndex, endRowIndex, columnNames) {\n var subset = [];\n for (var i = startRowIndex; i <= endRowIndex; i++) {\n subset.push(util_1.pick(this.rows[i], columnNames));\n }\n return subset;\n };\n View.prototype.toString = function (prettyPrint) {\n if (prettyPrint === void 0) { prettyPrint = false; }\n if (prettyPrint) {\n return JSON.stringify(this.rows, null, 2);\n }\n return JSON.stringify(this.rows);\n };\n View.prototype._reExecute = function () {\n var _a = this._source, source = _a.source, options = _a.options;\n this._prepareSource(source, options);\n this._reExecuteTransforms();\n this.trigger('change', []);\n };\n return View;\n}(wolfy87_eventemitter_1.default));\nexports.View = View;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClFA;AACA;AACA;AACA,QAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpsCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACVA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClEA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3dA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5MA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACl7EA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzNA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7zGA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1iFA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC58EA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnSA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChgCA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvGA;AACA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxVA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClnDA;AACA;AACA;AACA,iBACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC72BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7OA;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnhBA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjCA;;;;;;;;;;;;ACAA;AACA;AACA;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/DA;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClNA;AACA;AACA;AAAA;AAAA;AAAA;AACA,qBAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/XA;AACA;;;;;;;;;;;;ACDA;AACA;AACA;AACA,SACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA,WAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA,WAKA;AACA;;;;;;;;;;;;;ACreA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;A","sourceRoot":""}