{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/handlebars/dist/cjs/handlebars/utils.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/exception.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/base.js","webpack:///./node_modules/es-errors/type.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/logger.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js","webpack:///./node_modules/dom-to-image/src/dom-to-image.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/object-inspect/index.js","webpack:///./node_modules/function-bind/index.js","webpack:///./node_modules/sanitize-filename/index.js","webpack:///./node_modules/slugify/slugify.js","webpack:///./assets/js/api.js","webpack:///./assets/js/utility.js","webpack:///./assets/js/phi.js","webpack:///./node_modules/js-cookie/dist/js.cookie.js","webpack:///./assets/js/search.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars.runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/safe-string.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/compiler/base.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js","webpack:///./node_modules/file-saver/dist/FileSaver.min.js","webpack:///./node_modules/truncate-utf8-bytes/browser.js","webpack:///./node_modules/truncate-utf8-bytes/lib/truncate.js","webpack:///./node_modules/utf8-byte-length/browser.js","webpack:///./node_modules/get-intrinsic/index.js","webpack:///./node_modules/call-bind-apply-helpers/functionCall.js","webpack:///./node_modules/qs/lib/formats.js","webpack:///./node_modules/superagent/lib/utils.js","webpack:///./node_modules/superagent/lib/client.js","webpack:///./node_modules/side-channel-map/index.js","webpack:///./node_modules/es-object-atoms/index.js","webpack:///./node_modules/gopd/index.js","webpack:///./node_modules/get-proto/Reflect.getPrototypeOf.js","webpack:///./node_modules/get-proto/Object.getPrototypeOf.js","webpack:///./node_modules/call-bind-apply-helpers/index.js","webpack:///./node_modules/call-bind-apply-helpers/functionApply.js","webpack:///./node_modules/call-bound/index.js","webpack:///./node_modules/qs/lib/utils.js","webpack:///./node_modules/component-emitter/index.js","webpack:///./node_modules/fast-safe-stringify/index.js","webpack:///./node_modules/qs/lib/index.js","webpack:///./node_modules/qs/lib/stringify.js","webpack:///./node_modules/side-channel/index.js","webpack:///./node_modules/side-channel-list/index.js","webpack:///./node_modules/es-errors/index.js","webpack:///./node_modules/es-errors/eval.js","webpack:///./node_modules/es-errors/range.js","webpack:///./node_modules/es-errors/ref.js","webpack:///./node_modules/es-errors/syntax.js","webpack:///./node_modules/es-errors/uri.js","webpack:///./node_modules/math-intrinsics/abs.js","webpack:///./node_modules/math-intrinsics/floor.js","webpack:///./node_modules/math-intrinsics/max.js","webpack:///./node_modules/math-intrinsics/min.js","webpack:///./node_modules/math-intrinsics/pow.js","webpack:///./node_modules/math-intrinsics/round.js","webpack:///./node_modules/math-intrinsics/sign.js","webpack:///./node_modules/math-intrinsics/isNaN.js","webpack:///./node_modules/gopd/gOPD.js","webpack:///./node_modules/es-define-property/index.js","webpack:///./node_modules/has-symbols/index.js","webpack:///./node_modules/has-symbols/shams.js","webpack:///./node_modules/get-proto/index.js","webpack:///./node_modules/dunder-proto/get.js","webpack:///./node_modules/function-bind/implementation.js","webpack:///./node_modules/call-bind-apply-helpers/actualApply.js","webpack:///./node_modules/call-bind-apply-helpers/reflectApply.js","webpack:///./node_modules/hasown/index.js","webpack:///./node_modules/side-channel-weakmap/index.js","webpack:///./node_modules/qs/lib/parse.js","webpack:///./node_modules/superagent/lib/request-base.js","webpack:///./node_modules/superagent/lib/response-base.js","webpack:///./node_modules/superagent/lib/agent-base.js","webpack:///./assets/js/state-index/utils.js","webpack:///./node_modules/d3/node_modules/d3-array/src/ascending.js","webpack:///./node_modules/d3/node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3/node_modules/d3-array/src/bisector.js","webpack:///./node_modules/d3/node_modules/d3-array/src/cross.js","webpack:///./node_modules/d3/node_modules/d3-array/src/array.js","webpack:///./node_modules/d3/node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3/node_modules/d3-array/src/zip.js","webpack:///./node_modules/d3-axis/src/array.js","webpack:///./node_modules/d3-axis/src/identity.js","webpack:///./node_modules/d3-axis/src/axis.js","webpack:///./node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3-selection/src/matcher.js","webpack:///./node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3-selection/src/selection/join.js","webpack:///./node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3-selection/src/selection/datum.js","webpack:///./node_modules/d3-selection/src/select.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3-interpolate/src/numberArray.js","webpack:///./node_modules/d3-interpolate/src/array.js","webpack:///./node_modules/d3-interpolate/src/date.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3-interpolate/src/object.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3-interpolate/src/value.js","webpack:///./node_modules/d3-selection/src/sourceEvent.js","webpack:///./node_modules/d3-selection/src/point.js","webpack:///./node_modules/d3-selection/src/mouse.js","webpack:///./node_modules/d3-timer/src/timeout.js","webpack:///./node_modules/d3-transition/src/transition/schedule.js","webpack:///./node_modules/d3-transition/src/interrupt.js","webpack:///./node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3-transition/src/transition/tween.js","webpack:///./node_modules/d3-transition/src/transition/interpolate.js","webpack:///./node_modules/d3-transition/src/transition/attr.js","webpack:///./node_modules/d3-transition/src/transition/attrTween.js","webpack:///./node_modules/d3-transition/src/transition/delay.js","webpack:///./node_modules/d3-transition/src/transition/duration.js","webpack:///./node_modules/d3-transition/src/transition/ease.js","webpack:///./node_modules/d3-transition/src/transition/on.js","webpack:///./node_modules/d3-transition/src/transition/remove.js","webpack:///./node_modules/d3-transition/src/transition/selection.js","webpack:///./node_modules/d3-transition/src/transition/style.js","webpack:///./node_modules/d3-transition/src/transition/styleTween.js","webpack:///./node_modules/d3-transition/src/transition/textTween.js","webpack:///./node_modules/d3-transition/src/transition/index.js","webpack:///./node_modules/d3-transition/src/transition/select.js","webpack:///./node_modules/d3-transition/src/transition/selectAll.js","webpack:///./node_modules/d3-transition/src/transition/filter.js","webpack:///./node_modules/d3-transition/src/transition/merge.js","webpack:///./node_modules/d3-transition/src/transition/transition.js","webpack:///./node_modules/d3-transition/src/transition/text.js","webpack:///./node_modules/d3-transition/src/transition/end.js","webpack:///./node_modules/d3-transition/src/selection/transition.js","webpack:///./node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3-transition/src/selection/index.js","webpack:///./node_modules/d3-transition/src/selection/interrupt.js","webpack:///./node_modules/d3-brush/src/brush.js","webpack:///./node_modules/d3-array/src/ascending.js","webpack:///./node_modules/d3-array/src/bisector.js","webpack:///./node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3-array/src/cross.js","webpack:///./node_modules/d3-array/src/array.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3-array/src/threshold/sturges.js","webpack:///./node_modules/d3-array/src/merge.js","webpack:///./node_modules/d3-array/src/min.js","webpack:///./node_modules/d3-chord/src/math.js","webpack:///./node_modules/d3-chord/src/array.js","webpack:///./node_modules/d3-chord/src/chord.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./node_modules/d3/node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3/node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3/node_modules/d3-color/src/define.js","webpack:///./node_modules/d3/node_modules/d3-color/src/color.js","webpack:///./node_modules/d3/node_modules/d3-color/src/math.js","webpack:///./node_modules/d3/node_modules/d3-color/src/lab.js","webpack:///./node_modules/d3/node_modules/d3-color/src/cubehelix.js","webpack:///./node_modules/d3/node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/matcher.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/join.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3/node_modules/d3-drag/node_modules/d3-selection/src/selection/datum.js","webpack:///./node_modules/d3/node_modules/d3-drag/src/event.js","webpack:///./node_modules/d3/node_modules/d3-drag/src/drag.js","webpack:///./node_modules/d3-dsv/src/dsv.js","webpack:///./node_modules/d3-dsv/src/csv.js","webpack:///./node_modules/d3-dsv/src/tsv.js","webpack:///./node_modules/d3/node_modules/d3-ease/src/poly.js","webpack:///./node_modules/d3/node_modules/d3-ease/src/sin.js","webpack:///./node_modules/d3/node_modules/d3-ease/src/back.js","webpack:///./node_modules/d3/node_modules/d3-ease/src/elastic.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/add.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/cover.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/quad.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/x.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/y.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/quadtree.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/data.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/extent.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/find.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/remove.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/root.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/size.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/visit.js","webpack:///./node_modules/d3-force/node_modules/d3-quadtree/src/visitAfter.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-force/src/simulation.js","webpack:///./node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-format/src/formatRounded.js","webpack:///./node_modules/d3-format/src/formatTypes.js","webpack:///./node_modules/d3-format/src/formatDefault.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-format/src/identity.js","webpack:///./node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-format/src/locale.js","webpack:///./node_modules/d3-format/src/formatGroup.js","webpack:///./node_modules/d3-format/src/formatNumerals.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-geo/src/adder.js","webpack:///./node_modules/d3-geo/src/math.js","webpack:///./node_modules/d3-geo/src/noop.js","webpack:///./node_modules/d3-geo/src/stream.js","webpack:///./node_modules/d3-geo/src/area.js","webpack:///./node_modules/d3-geo/src/cartesian.js","webpack:///./node_modules/d3-geo/src/bounds.js","webpack:///./node_modules/d3-geo/src/centroid.js","webpack:///./node_modules/d3-geo/src/compose.js","webpack:///./node_modules/d3-geo/src/rotation.js","webpack:///./node_modules/d3-geo/src/circle.js","webpack:///./node_modules/d3-geo/src/clip/buffer.js","webpack:///./node_modules/d3-geo/src/pointEqual.js","webpack:///./node_modules/d3-geo/src/clip/rejoin.js","webpack:///./node_modules/d3-geo/src/polygonContains.js","webpack:///./node_modules/d3-geo/src/clip/index.js","webpack:///./node_modules/d3-geo/src/clip/antimeridian.js","webpack:///./node_modules/d3-geo/src/clip/circle.js","webpack:///./node_modules/d3-geo/src/clip/rectangle.js","webpack:///./node_modules/d3-geo/src/clip/line.js","webpack:///./node_modules/d3-geo/src/length.js","webpack:///./node_modules/d3-geo/src/interpolate.js","webpack:///./node_modules/d3-geo/src/path/area.js","webpack:///./node_modules/d3-geo/src/identity.js","webpack:///./node_modules/d3-geo/src/path/bounds.js","webpack:///./node_modules/d3-geo/src/path/centroid.js","webpack:///./node_modules/d3-geo/src/path/context.js","webpack:///./node_modules/d3-geo/src/path/measure.js","webpack:///./node_modules/d3-geo/src/path/string.js","webpack:///./node_modules/d3-geo/src/path/index.js","webpack:///./node_modules/d3-geo/src/transform.js","webpack:///./node_modules/d3-geo/src/projection/fit.js","webpack:///./node_modules/d3-geo/src/projection/resample.js","webpack:///./node_modules/d3-geo/src/projection/index.js","webpack:///./node_modules/d3-geo/src/projection/conic.js","webpack:///./node_modules/d3-geo/src/projection/conicEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/cylindricalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/albersUsa.js","webpack:///./node_modules/d3-geo/src/projection/albers.js","webpack:///./node_modules/d3-geo/src/projection/azimuthal.js","webpack:///./node_modules/d3-geo/src/projection/azimuthalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/azimuthalEquidistant.js","webpack:///./node_modules/d3-geo/src/projection/mercator.js","webpack:///./node_modules/d3-geo/src/projection/equirectangular.js","webpack:///./node_modules/d3-geo/src/projection/gnomonic.js","webpack:///./node_modules/d3-geo/src/projection/naturalEarth1.js","webpack:///./node_modules/d3-geo/src/projection/orthographic.js","webpack:///./node_modules/d3-geo/src/projection/stereographic.js","webpack:///./node_modules/d3-geo/src/projection/transverseMercator.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/count.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/index.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/each.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/path.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/links.js","webpack:///./node_modules/d3-hierarchy/src/array.js","webpack:///./node_modules/d3-hierarchy/src/treemap/round.js","webpack:///./node_modules/d3-hierarchy/src/treemap/dice.js","webpack:///./node_modules/d3-hierarchy/src/tree.js","webpack:///./node_modules/d3-hierarchy/src/treemap/slice.js","webpack:///./node_modules/d3-hierarchy/src/treemap/squarify.js","webpack:///./node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/node_modules/d3-color/src/define.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/node_modules/d3-color/src/color.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/zoom.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/hsl.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/node_modules/d3-color/src/math.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/node_modules/d3-color/src/lab.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/hcl.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/node_modules/d3-color/src/cubehelix.js","webpack:///./node_modules/d3/node_modules/d3-interpolate/src/cubehelix.js","webpack:///./node_modules/d3/node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-quadtree/src/add.js","webpack:///./node_modules/d3-quadtree/src/cover.js","webpack:///./node_modules/d3-quadtree/src/quad.js","webpack:///./node_modules/d3-quadtree/src/x.js","webpack:///./node_modules/d3-quadtree/src/y.js","webpack:///./node_modules/d3-quadtree/src/quadtree.js","webpack:///./node_modules/d3-quadtree/src/data.js","webpack:///./node_modules/d3-quadtree/src/extent.js","webpack:///./node_modules/d3-quadtree/src/find.js","webpack:///./node_modules/d3-quadtree/src/remove.js","webpack:///./node_modules/d3-quadtree/src/root.js","webpack:///./node_modules/d3-quadtree/src/size.js","webpack:///./node_modules/d3-quadtree/src/visit.js","webpack:///./node_modules/d3-quadtree/src/visitAfter.js","webpack:///./node_modules/d3-queue/src/array.js","webpack:///./node_modules/d3-queue/src/queue.js","webpack:///./node_modules/d3-random/src/defaultSource.js","webpack:///./node_modules/d3-random/src/normal.js","webpack:///./node_modules/d3-random/src/uniform.js","webpack:///./node_modules/d3-random/src/irwinHall.js","webpack:///./node_modules/d3-random/src/logNormal.js","webpack:///./node_modules/d3-request/src/request.js","webpack:///./node_modules/d3-random/src/bates.js","webpack:///./node_modules/d3-random/src/exponential.js","webpack:///./node_modules/d3-request/src/type.js","webpack:///./node_modules/d3-request/src/json.js","webpack:///./node_modules/d3-request/src/html.js","webpack:///./node_modules/d3-request/node_modules/d3-dsv/src/dsv.js","webpack:///./node_modules/d3-request/src/text.js","webpack:///./node_modules/d3-request/src/xml.js","webpack:///./node_modules/d3-request/node_modules/d3-dsv/src/csv.js","webpack:///./node_modules/d3-request/src/dsv.js","webpack:///./node_modules/d3-request/src/csv.js","webpack:///./node_modules/d3-request/node_modules/d3-dsv/src/tsv.js","webpack:///./node_modules/d3-scale/src/array.js","webpack:///./node_modules/d3-request/src/tsv.js","webpack:///./node_modules/d3-scale/src/ordinal.js","webpack:///./node_modules/d3-scale/src/band.js","webpack:///./node_modules/d3-interpolate/src/round.js","webpack:///./node_modules/d3-scale/src/constant.js","webpack:///./node_modules/d3-scale/src/number.js","webpack:///./node_modules/d3-scale/src/continuous.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/formatRounded.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/formatTypes.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/identity.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/locale.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/formatGroup.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/formatNumerals.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/formatTrim.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/precisionRound.js","webpack:///./node_modules/d3-scale/src/tickFormat.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/precisionPrefix.js","webpack:///./node_modules/d3-scale/node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-scale/src/linear.js","webpack:///./node_modules/d3-scale/src/quantize.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-scale/node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-scale/node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3-scale/src/time.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-time/src/utcMinute.js","webpack:///./node_modules/d3-scale/src/colors.js","webpack:///./node_modules/d3-color/src/math.js","webpack:///./node_modules/d3-scale/src/category10.js","webpack:///./node_modules/d3-scale/src/category20b.js","webpack:///./node_modules/d3-scale/src/category20c.js","webpack:///./node_modules/d3-scale/src/category20.js","webpack:///./node_modules/d3-color/src/cubehelix.js","webpack:///./node_modules/d3-interpolate/src/cubehelix.js","webpack:///./node_modules/d3-scale/src/cubehelix.js","webpack:///./node_modules/d3-scale/src/rainbow.js","webpack:///./node_modules/d3-scale/src/viridis.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/matcher.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/selection/datum.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/select.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/local.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/sourceEvent.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/point.js","webpack:///./node_modules/d3-shape/src/math.js","webpack:///./node_modules/d3-shape/src/curve/linear.js","webpack:///./node_modules/d3-shape/src/curve/radial.js","webpack:///./node_modules/d3-shape/src/array.js","webpack:///./node_modules/d3-shape/src/symbol/diamond.js","webpack:///./node_modules/d3-shape/src/symbol/circle.js","webpack:///./node_modules/d3-shape/src/symbol/star.js","webpack:///./node_modules/d3-shape/src/noop.js","webpack:///./node_modules/d3-shape/src/symbol/triangle.js","webpack:///./node_modules/d3-shape/src/symbol/wye.js","webpack:///./node_modules/d3-shape/src/curve/basis.js","webpack:///./node_modules/d3-shape/src/curve/basisClosed.js","webpack:///./node_modules/d3-shape/src/curve/basisOpen.js","webpack:///./node_modules/d3-shape/src/curve/bundle.js","webpack:///./node_modules/d3-shape/src/curve/cardinal.js","webpack:///./node_modules/d3-shape/src/curve/cardinalClosed.js","webpack:///./node_modules/d3-shape/src/curve/cardinalOpen.js","webpack:///./node_modules/d3-shape/src/curve/catmullRom.js","webpack:///./node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack:///./node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack:///./node_modules/d3-shape/src/curve/linearClosed.js","webpack:///./node_modules/d3-shape/src/curve/monotone.js","webpack:///./node_modules/d3-shape/src/curve/natural.js","webpack:///./node_modules/d3-shape/src/curve/step.js","webpack:///./node_modules/d3-shape/src/order/descending.js","webpack:///./node_modules/d3/node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3/node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3/node_modules/d3-time/src/second.js","webpack:///./node_modules/d3/node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3/node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3/node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3/node_modules/d3-time/src/day.js","webpack:///./node_modules/d3/node_modules/d3-time/src/week.js","webpack:///./node_modules/d3/node_modules/d3-time/src/month.js","webpack:///./node_modules/d3/node_modules/d3-time/src/year.js","webpack:///./node_modules/d3/node_modules/d3-time/src/utcMinute.js","webpack:///./node_modules/d3/node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3/node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3/node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3/node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3/node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3-time-format/src/isoFormat.js","webpack:///./node_modules/d3-time-format/src/isoParse.js","webpack:///./node_modules/d3/node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/matcher.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/join.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-selection/src/selection/datum.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-timer/src/timeout.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/schedule.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/interrupt.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/tween.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-color/src/define.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-color/src/color.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/interpolate.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/attr.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/attrTween.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/delay.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/duration.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/ease.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/on.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/remove.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/selection.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/styleTween.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/text.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/index.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/select.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/selectAll.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/filter.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/merge.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/transition.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/transition/style.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/selection/transition.js","webpack:///./node_modules/d3/node_modules/d3-transition/node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/selection/index.js","webpack:///./node_modules/d3/node_modules/d3-transition/src/selection/interrupt.js","webpack:///./node_modules/d3-voronoi/src/RedBlackTree.js","webpack:///./node_modules/d3-voronoi/src/Edge.js","webpack:///./node_modules/d3-voronoi/src/Cell.js","webpack:///./node_modules/d3-voronoi/src/Circle.js","webpack:///./node_modules/d3-voronoi/src/Beach.js","webpack:///./node_modules/d3-voronoi/src/Diagram.js","webpack:///./node_modules/d3-interpolate/src/zoom.js","webpack:///./node_modules/d3-zoom/src/transform.js","webpack:///./node_modules/d3-zoom/src/zoom.js","webpack:///./assets/js/state-index/api.js","webpack:///./assets/js/state-index/map.js","webpack:///./node_modules/d3/node_modules/d3-selection/src/mouse.js","webpack:///./assets/js/state-index/table.js","webpack:///./assets/js/state-index/d3-import.js","webpack:///./node_modules/d3-selection/src/selectAll.js","webpack:///./node_modules/d3-array/src/max.js","webpack:///./assets/js/state-index/graph.js","webpack:///./assets/js/state-index/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","extend","indexOf","array","len","length","escapeExpression","string","toHTML","possible","test","replace","badChars","escapeChar","isEmpty","isArray","createFrame","frame","_parent","blockParams","params","ids","path","appendContextPath","contextPath","id","escape","chr","obj","arguments","toString","isFunction","Array","errorProps","Exception","message","node","loc","line","undefined","endLineNumber","column","endColumn","start","end","tmp","Error","constructor","this","idx","captureStackTrace","lineNumber","nop","_interopRequireDefault","_handlebarsRuntime2","_handlebarsCompilerAst2","_handlebarsCompilerBase","_handlebarsCompilerCompiler","_handlebarsCompilerJavascriptCompiler2","_handlebarsCompilerVisitor2","_handlebarsNoConflict2","_create","hb","compile","input","options","precompile","AST","Compiler","JavaScriptCompiler","Parser","parser","parse","parseWithoutProcessing","inst","Visitor","HandlebarsEnvironment","_utils","_exception2","_helpers","_decorators","_logger2","_internalProtoAccess","VERSION","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","1","2","3","4","5","6","7","8","helpers","partials","decorators","registerDefaultHelpers","registerDefaultDecorators","logger","log","registerHelper","fn","unregisterHelper","registerPartial","partial","unregisterPartial","registerDecorator","unregisterDecorator","resetLoggedPropertyAccesses","resetLoggedProperties","TypeError","instance","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","moveHelperToHooks","helperName","keepHelper","hooks","methodMap","level","lookupLevel","levelMap","toLowerCase","parseInt","console","method","_len","_key","apply","createProtoAccessControl","runtimeOptions","defaultMethodWhiteList","defaultPropertyWhiteList","properties","whitelist","_createNewLookupObject","createNewLookupObject","allowedProtoProperties","defaultValue","allowProtoPropertiesByDefault","methods","allowedProtoMethods","allowProtoMethodsByDefault","resultIsAllowed","result","protoAccessControl","propertyName","checkWhiteList","keys","loggedProperties","forEach","_logger","protoAccessControlForType","logUnexpecedPropertyAccessOnce","Handlebars","globalThis","__defineGetter__","__magic__","$Handlebars","noConflict","helperExpression","type","hash","scopedId","original","simpleId","parts","depth","_exception","parents","visitSubExpression","mustache","acceptRequired","acceptArray","acceptKey","visitBlock","block","visitPartial","mutating","accept","splice","current","unshift","ret","shift","Program","program","body","MustacheStatement","Decorator","BlockStatement","DecoratorBlock","PartialStatement","PartialBlockStatement","ContentStatement","CommentStatement","SubExpression","PathExpression","StringLiteral","NumberLiteral","BooleanLiteral","UndefinedLiteral","NullLiteral","Hash","pairs","HashPair","pair","global","util","parseExtension","mimeType","url","extension","WOFF","dataAsUrl","content","isDataUrl","search","canvasToBlob","canvas","toBlob","Promise","resolve","binaryString","window","atob","toDataURL","split","binaryArray","Uint8Array","charCodeAt","Blob","resolveUrl","baseUrl","doc","document","implementation","createHTMLDocument","base","createElement","head","appendChild","a","href","getAndEncode","domtoimage","impl","cacheBust","Date","getTime","placeholder","request","XMLHttpRequest","onreadystatechange","readyState","status","fail","encoder","FileReader","onloadend","readAsDataURL","response","ontimeout","responseType","timeout","open","send","imagePlaceholder","error","uid","index","Math","random","pow","slice","delay","ms","arg","setTimeout","asArray","arrayLike","push","escapeXhtml","makeImage","uri","reject","image","Image","onload","onerror","src","width","leftBorder","px","rightBorder","scrollWidth","height","topBorder","bottomBorder","scrollHeight","match","exec","styleProperty","getComputedStyle","getPropertyValue","parseFloat","newUtil","inliner","URL_REGEX","inlineAll","shouldProcess","nothingToInline","then","readUrls","urls","done","inline","filter","data","dataUrl","RegExp","urlAsRegex","newInliner","fontFaces","resolveAll","readAll","webFonts","all","map","webFont","cssStrings","join","styleSheets","cssRules","sheet","e","rule","CSSRule","FONT_FACE_RULE","style","rules","newWebFont","webFontRule","parentStyleSheet","cssText","newFontFaces","images","Element","background","inlined","setProperty","getPropertyPriority","inlineBackground","HTMLImageElement","newImage","childNodes","child","element","newImages","defaultOptions","toSvg","toPng","draw","toJpeg","quality","toPixelData","getContext","getImageData","copyOptions","cloneNode","root","HTMLCanvasElement","clone","cloneChildren","cloneStyle","clonePseudoElements","copyUserInput","fixSvg","source","target","copyProperties","className","styleElement","selector","formatCssText","formatCssProperties","createTextNode","formatPseudoElementStyle","clonePseudoElement","HTMLTextAreaElement","innerHTML","HTMLInputElement","setAttribute","SVGElement","SVGRectElement","attribute","getAttribute","processClone","children","cloneChildrenInOrder","parent","childClone","embedFonts","inlineImages","bgcolor","backgroundColor","XMLSerializer","serializeToString","xhtml","foreignObject","svg","makeSvgDataUri","domNode","ctx","fillStyle","fillRect","newCanvas","drawImage","styleNode","g","Function","mapSizeDescriptor","getOwnPropertyDescriptor","hasMap","Map","mapSize","mapForEach","hasSet","Set","setSizeDescriptor","setSize","setForEach","weakMapHas","WeakMap","has","weakSetHas","WeakSet","weakRefDeref","WeakRef","deref","booleanValueOf","Boolean","valueOf","objectToString","functionToString","$match","String","$slice","$replace","$toUpperCase","toUpperCase","$toLowerCase","$test","$concat","concat","$join","$arrSlice","$floor","floor","bigIntValueOf","BigInt","gOPS","getOwnPropertySymbols","symToString","iterator","hasShammedSymbols","isEnumerable","propertyIsEnumerable","gPO","Reflect","getPrototypeOf","__proto__","O","addNumericSeparator","num","str","Infinity","sepRegex","int","intStr","dec","utilInspect","inspectCustom","custom","inspectSymbol","isSymbol","quotes","single","quoteREs","wrapQuotes","defaultStyle","opts","quoteStyle","quoteChar","quote","toStr","isRegExp","inspect_","seen","maxStringLength","customInspect","indent","numericSeparator","inspectString","remaining","trailer","quoteRE","lastIndex","lowbyte","bigIntStr","maxDepth","baseIndent","prev","getIndent","inspect","from","noIndent","newOpts","f","nameOf","arrObjKeys","symString","markBoxed","x","HTMLElement","nodeName","isElement","attrs","attributes","xs","singleLineValues","indentedJoin","isError","cause","isMap","mapParts","collectionOf","isSet","setParts","isWeakMap","weakCollectionOf","isWeakSet","isWeakRef","isNumber","Number","isBigInt","isBoolean","isString","isDate","ys","isPlainObject","protoTag","stringTag","tag","hasOwn","9","10","12","13","size","entries","lineJoiner","isArr","symMap","syms","k","j","truncate","illegalRe","controlRe","reservedRe","windowsReservedRe","windowsTrailingRe","sanitize","replacement","sanitized","output","factory","charMap","JSON","locales","locale","trim","slug","normalize","reduce","ch","appendChar","remove","strict","lower","customMap","assign","validateEmail","ellipsify","maxWords","startsWith","searchString","position","trace","stack","$","_invoke","ajax","cache","dataType","success","PHI","api","PAGE_SIZE","PAGE_SIZE_NRC_HUB","PAGE_SIZE_EXPERTS","URL_SEARCH_CASE_STUDIES","URL_SEARCH_EXPERTS","URL_SEARCH_BOARD","URL_SEARCH_IMPACT_STORIES","URL_SEARCH_NEWS","URL_SEARCH_STATE_DEVELOPMENTS","URL_SEARCH_OPINION","URL_SEARCH_RESOURCES","URL_SEARCH_RESOURCE_CENTER","URL_SEARCH","DEBUG","handleReturn","alert","getCaseStudies","keyword","to","service","state","offset","callback","isNaN","encodeURIComponent","getExperts","expertise","getBoard","getImpactStories","getNews","issue","getStateDevelopments","getOpinion","getResources","expert","phi_authored","getWorkers","ocсupation","topic","oсcupation","client","partner","getResourceCenter","page_size","google","trackOutbound","gtag","who","currentTarget","hostname","location","protocol","event_category","event_label","transport_type","Pager","_offset","_page","_totalPages","_container","_anchor","_callback","reset","init","pagerSelector","anchorSelector","pagingCallback","render","total_found","ceil","unbind","empty","showNav","startPage","endPage","min","max","jumpPrevPage","jumpNextPage","append","addClass","click","page","preventDefault","animate","scrollTop","top","jQuery","CONSTUTIL","utilities","constructiveEqualHeight","equalHeightParents","each","equalHeightChildren","find","maxHeight","ruler","wrapInner","childHeight","outerHeight","css","_toggleNavigation","nav","expandButton","collapseButton","hasClass","removeClass","hide","show","_toggleChildrenMenu","parentListItem","subMenu","listItems","otherParentListItems","siblings","totalHeight","otherParentListItem","otherSubMenu","_toggleNavigationResize","windowWidth","outerWidth","DATE_FORMAT","FILTER_MIN_DATE","TITLE_MAX_WORDS","SHORT_DESCRIPTION_MAX_WORDS","validate_date","moment","isValid","validateDate","val","get_title","item","short_title","title","get_short_description","short_description","donateLink","haveAny","select2","next","pikaday","format","firstDay","minDate","maxDate","yearRange","getFullYear","phi_theme","global_donate_link","attr","v","me","text","prop","ready","dc","cookie","prefix","begin","decodeURI","substring","getCookie","resize","navSidebar","days","domains","date","setTime","expires","toGMTString","createCookie","converter","defaultAttributes","set","now","toUTCString","decodeURIComponent","stringifiedAttributes","attributeName","write","cookies","jar","found","read","withAttributes","withConverter","freeze","_pager","_got_results","items","total","list","local_last","art","div","kick","h2","span","subtype","states","html","author","contributing_authors","media_outlet","published_formatted","job_title","_search_filter","_type","q","focus","blur","trigger","modal","clickClose","showClose","fadeDuration","on","_","debounce","advanced","_process_incoming","_interopRequireWildcard","newObj","_handlebarsSafeString2","_handlebarsException2","Utils","runtime","SafeString","VM","template","spec","context","inverse","priorKey","execIteration","field","last","first","newContext","it","conditional","includeZero","args","lookupProperty","_decoratorsInline2","_decoratorsInline","props","container","sources","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","templateSpec","env","main","decorator","main_d","compiler","templateWasPrecompiledWithCompilerV7","lookup","depths","lambda","invokePartial","resolvePartial","extendedOptions","compilerOptions","lines","programs","declaredBlockParams","programWrapper","wrapProgram","mergeIfNeeded","param","common","nullContext","seal","noop","_setup","useData","initData","useBlockParams","useDepths","executeDecorators","isTop","mergedHelpers","helper","_internalWrapHelper","wrapHelper","passLookupPropertyOption","wrapHelpersToPassLookupProperty","usePartial","useDecorators","keepHelperInHelpers","allowCallsToHelperMissing","_child","currentPartialBlock","partialBlock","prog","currentDepths","transformOptionsFn","ast","_whitespaceControl2","_parser2","Helpers","yy","locInfo","SourceLocation","srcName","handlebars","symbols_","terminals_","14","15","18","19","23","29","33","34","39","44","47","48","51","54","55","60","65","68","72","73","75","77","80","81","82","83","84","85","87","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","prepareProgram","stripComment","strip","stripFlags","prepareRawBlock","prepareBlock","chained","chain","prepareMustache","preparePartialBlock","preparePath","part","separator","table","11","16","24","27","59","20","78","79","86","17","56","64","49","52","25","38","43","45","28","57","26","30","35","21","61","50","63","69","70","71","53","58","66","31","36","22","62","46","40","67","32","74","37","41","76","42","defaultActions","90","101","104","110","111","116","119","122","135","136","parseError","self","vstack","lstack","recovering","lexer","setInput","yylloc","yyloc","ranges","symbol","preErrorSymbol","action","newState","expected","token","yyval","lex","errStr","showPosition","first_line","last_line","first_column","last_column","range","EOF","_input","_more","_less","matched","conditionStack","unput","substr","oldLines","more","less","pastInput","past","upcomingInput","pre","tempMatch","_currentRules","flex","matches","condition","popState","pop","conditions","topState","pushState","yy_","$avoiding_name_collisions","YY_START","_visitor","_visitor2","WhitespaceControl","isPrevWhitespace","isRoot","sibling","isNextWhitespace","omitRight","multiple","rightStripped","omitLeft","leftStripped","doStandalone","ignoreStandalone","isRootSeen","_isPrevWhitespace","_isNextWhitespace","openStandalone","closeStandalone","inlineStandalone","close","firstInverse","lastInverse","openStrip","closeStrip","inverseStrip","charAt","comment","dig","isLiteral","escapeFlag","escaped","openRawBlock","contents","validateClose","openBlock","inverseAndProgram","inverted","statements","firstLoc","lastLoc","errorNode","compat","environment","compiled","compileInput","execOptions","setupOptions","_ast2","argEquals","b","transformLiteralToPath","sexpr","literal","equals","other","opcodes","opcode","otherOpcode","guid","sourceNode","stringParams","trackIds","knownHelpers","helperMissing","blockHelperMissing","unless","compileProgram","bodyLength","isSimple","classifySexpr","helperSexpr","simpleSexpr","ambiguousSexpr","setupFullMustacheParams","explicitPartialContext","partialName","isDynamic","preventIndent","noEscape","isBlock","knownHelpersOnly","falsy","addDepth","scoped","blockParamId","blockParamIndex","number","bool","pushParam","isBlockParam","isHelper","isEligible","_name","pushParams","blockParamChild","omitEmpty","_codeGen2","Literal","nameLookup","internalNameLookup","depthedLookup","aliasable","stringify","revision","appendToBuffer","explicit","wrap","initializeBuffer","quotedString","lookupPropertyFunctionIsUsed","asObject","isChild","environments","preamble","stackSlot","stackVars","aliases","registers","hashes","compileStack","inlineStack","compileChildren","currentLocation","pushSource","prepend","lookupPropertyFunctionVarDeclaration","merge","createFunctionContext","_context","objectLiteral","toStringWithSourceMap","file","destName","lastContext","_this","varDeclarations","locals","aliasCount","alias","referenceCount","mergeSource","appendOnly","forceBuffer","appendFirst","sourceSeen","bufferStart","bufferEnd","add","blockValue","contextName","setupHelperArgs","blockName","popStack","functionCall","ambiguousBlockValue","flushInline","topStack","lastHelper","appendContent","pendingContent","pendingLocation","isInline","replaceStack","local","appendEscaped","pushContext","pushStackLiteral","lookupOnContext","resolvePath","lookupBlockParam","lookupData","_this2","assumeObjects","requireTerminal","strictLookup","resolvePossibleLambda","pushStringParam","pushString","emptyHash","pushHash","values","types","contexts","popHash","pushLiteral","pushProgram","programExpression","paramSize","foundDecorator","invokeHelper","nonHelper","setupHelper","possibleFunctionCalls","functionLookupCode","itemsSeparatedBy","callParams","invokeKnownHelper","invokeAmbiguous","helperCall","useRegister","paramsInit","setupParams","assignToHash","pushId","existing","matchExistingProgram","programParams","expr","createdStack","usedLiteral","incrStack","topStackName","entry","wrapped","blockHelper","objectArgs","hashIds","hashTypes","hashContexts","generateArray","reservedWords","compilerWords","RESERVED_WORDS","isValidJavaScriptVariableName","SourceNode","err","castChunk","chunk","codeGen","CodeGen","srcFile","chunks","code","iter","generateList","dispatchEvent","MouseEvent","createEvent","initMouseEvent","navigator","userAgent","saveAs","HTMLAnchorElement","h","URL","webkitURL","download","rel","origin","createObjectURL","revokeObjectURL","msSaveOrOpenBlob","autoBom","warn","innerText","safari","getLength","isHighSurrogate","codePoint","isLowSurrogate","byteLength","segment","charLength","curByteLength","prevCodePoint","$Object","$Error","$EvalError","$RangeError","$ReferenceError","$SyntaxError","$TypeError","$URIError","abs","round","sign","$Function","getEvalledConstructor","expressionSyntax","$gOPD","$defineProperty","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","getProto","$ObjectGPO","$ReflectGPO","$apply","$call","needsEval","TypedArray","INTRINSICS","AggregateError","ArrayBuffer","Atomics","BigInt64Array","BigUint64Array","DataView","encodeURI","eval","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","isFinite","Proxy","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","Uint32Array","errorProto","LEGACY_ALIASES","$spliceApply","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","subString","getBaseIntrinsic","allowMissing","intrinsicName","doEval","gen","intrinsicBaseName","intrinsic","intrinsicRealName","skipFurtherCaching","isOwn","desc","percentTwenties","Format","formatters","RFC1738","RFC3986","string_","parseLinks","cleanHeader","header","changesOrigin","host","authorization","isObject","mixin","isGzipOrDeflateEncoding","res","headers","isBrotliEncoding","Emitter","safeStringify","qs","RequestBase","ResponseBase","Agent","Request","getXHR","serialize","pushEncodedKeyValuePair","subkey","parseString","pos","length_","isJSON","mime","Response","request_","req","xhr","responseText","statusText","_setStatusProperties","fields","parseHeader","getAllResponseHeaders","getResponseHeader","_setHeaderProperties","_responseType","_parseBody","_query","_header","new_error","rawResponse","statusCode","emit","_isResponseOK","serializeObject","json","xml","urlencoded","form","indices","strictNullHandling","_parser","toError","auth","user","pass","btoa","_auth","query","attach","_data","_getFormData","_formData","FormData","_shouldRetry","_retry","clearTimeout","_maxRetries","retries","_retries","crossDomainError","crossDomain","agent","ca","buffer","pipe","_isHost","_endCalled","_finalizeQueryString","_end","_setUploadTimeout","_uploadTimeout","_uploadTimeoutTimer","_timeoutError","_aborted","_setTimeouts","addEventListener","_responseTimeoutTimer","timedout","handleProgress","direction","percent","loaded","hasListeners","upload","username","password","_withCredentials","withCredentials","contentType","_serializer","setRequestHeader","_setDefaults","del","delete","patch","post","put","GetIntrinsic","callBound","$Map","$mapGet","$mapSet","$mapHas","$mapDelete","$mapSize","$m","channel","assert","$actualApply","callBindBasic","$indexOf","formats","hexTable","arrayToObject","plainObjects","acc","combine","compact","queue","refs","compacted","compactQueue","decode","defaultDecoder","charset","strWithoutPlus","unescape","encode","defaultEncoder","kind","out","arr","isBuffer","maybeMap","mapped","allowPrototypes","mergeTarget","targetItem","event","_callbacks","once","off","removeListener","removeAllListeners","removeEventListener","cb","callbacks","listeners","default","stable","deterministicStringify","stableStringify","replacerStack","depthLimit","MAX_SAFE_INTEGER","edgesLimit","replacer","spacer","decirc","edgeIndex","setReplace","replaceGetterValues","propertyDescriptor","configurable","compareFunction","deterministicDecirc","toJSON","sort","getSideChannel","utils","arrayPrefixGenerators","brackets","comma","repeat","pushToArray","valueOrArray","toISO","toISOString","defaultFormat","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charsetSentinel","commaRoundTrip","delimiter","encodeDotInKeys","encodeValuesOnly","formatter","serializeDate","skipNulls","sentinel","generateArrayPrefix","sideChannel","tmpSc","step","findFlag","RangeError","objKeys","encodedPrefix","adjustedPrefix","encodedKey","keyPrefix","valueSideChannel","normalizeStringifyOptions","joined","getSideChannelList","getSideChannelMap","makeChannel","$channelData","listGetNode","isDelete","curr","$o","deletedNode","objects","listDelete","listGet","listHas","listSet","EvalError","ReferenceError","SyntaxError","URIError","$isNaN","origSymbol","hasSymbolSham","sym","symObj","getOwnPropertyNames","descriptor","reflectGetProto","originalGetProto","getDunderProto","hasProtoAccessor","callBind","gOPD","$getPrototypeOf","ERROR_MESSAGE","concatty","slicy","arrLike","joiny","joiner","that","bound","binder","boundLength","boundArgs","Empty","$reflectApply","$hasOwn","$WeakMap","$weakMapGet","$weakMapSet","$weakMapHas","$weakMapDelete","$wm","allowSparse","arrayLimit","decodeDotInKeys","decoder","duplicates","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","strictDepth","numberStr","fromCharCode","parseArrayValue","parseKeys","givenKey","valuesParsed","leaf","cleanRoot","decodedRoot","0","parseObject","normalizeParseOptions","tempObj","cleanStr","limit","skipIndex","bracketEqualsPos","encodedVal","parseValues","_timer","_timeout","_responseTimeout","option","deadline","retry","count","_retryCallback","ERROR_CODES","STATUS_CODES","override","timedoutError","_fullfilledPromise","catch","use","ok","_okCallback","getHeader","unset","abort","base64Encoder","redirects","_maxRedirects","maxResponseSize","_maxResponseSize","isObject_","sortQuery","_sort","includes","queryArray","_appendQueryString","reason","errno","ct","parameters","links","link","trunc","statusType","info","redirect","clientError","serverError","created","accepted","noContent","badRequest","unauthorized","notAcceptable","forbidden","notFound","unprocessableEntity","_defaults","def","func","timer","percentile","domNodeImg","querySelector","filename","slugify","blob","statePdf","fetch","disposition","replaceAll","NaN","ascending","compare","sqrt","translateX","translateY","y","scale","bandwidth","entering","__axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","transform","axis","ticks","domain","spacing","range0","range1","copy","selection","selectAll","tick","order","tickExit","exit","tickEnter","enter","select","insert","transition","parentNode","tickSize","dispatch","Dispatch","parseTypenames","typenames","typename","T","none","querySelectorAll","update","EnterNode","datum","ownerDocument","namespaceURI","_next","__data__","insertBefore","bindIndex","group","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","xlink","xmlns","namespaces","space","attrRemove","removeAttribute","attrRemoveNS","fullname","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView","styleRemove","removeProperty","styleConstant","priority","styleFunction","styleValue","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","names","classedRemove","classedTrue","classedFalse","classedFunction","contains","textRemove","textContent","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","nextSibling","previousSibling","firstChild","creatorInherit","documentElement","createElementNS","creatorFixed","namespace","constantNull","removeChild","selection_cloneShallow","selection_cloneDeep","filterEvents","mouseenter","mouseleave","filterContextListener","listener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","__on","capture","onAdd","CustomEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","Selection","groups","_groups","_parents","subgroups","subnode","subgroup","selectorAll","matcher","enterGroup","updateGroup","previous","i0","i1","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","m0","m1","merges","group0","group1","compareNode","sortgroups","sortgroup","nodes","getAttributeNS","classed","creator","before","deep","definition","Color","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl2rgb","m2","basis","t1","v0","v1","v2","v3","t2","t3","define","channels","displayable","formatHsl","brighter","darker","linear","gamma","nogamma","exponential","color","rgbGamma","rgbSpline","spline","colors","isNumberArray","isView","genericArray","nb","na","reA","reB","taskHead","taskTail","am","bm","bs","bi","one","numberArray","sourceEvent","ownerSVGElement","createSVGPoint","point","clientX","clientY","matrixTransform","getScreenCTM","rect","getBoundingClientRect","left","clientLeft","clientTop","changedTouches","clockLast","clockNow","clockSkew","clock","performance","setFrame","requestAnimationFrame","clearNow","Timer","_call","_time","time","restart","wake","timerFlush","t0","sleep","nap","poke","clearInterval","setInterval","stop","elapsed","emptyOn","emptyTween","schedules","__transition","tween","duration","ease","timing","schedule","cssNode","cssRoot","cssView","svgNode","active","degrees","PI","rotate","skewX","scaleX","scaleY","atan2","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","translate","interpolateTransformCss","decompose","interpolateTransformSvg","baseVal","consolidate","matrix","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolate","value1","string00","interpolate0","string1","string0","string10","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","every","styleInterpolate","styleTween","textInterpolate","textTween","Transition","newId","selection_prototype","inherit","id0","id1","styleNull","listener0","styleMaybeRemove","cancel","interrupt","defaultTiming","lo","hi","mid","right","reverse","power","LN10","step0","step1","merged","arrays","valueof","cos","sin","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","w","clear","proto","reHex3","reHex6","deg2rad","rad2deg","labConvert","Lab","Hcl","rgb2xyz","xyz2lab","lab2xyz","xyz2rgb","hclConvert","z","C","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","cosh","sinh","DragEvent","subject","identifier","EOL","objectConverter","columns","reFormat","DELIMITER","parseRows","rows","N","I","eof","eol","row","formatRow","formatValue","convert","customConverter","columnSet","inferColumns","formatRows","csv","dsv","tsv","polyIn","exponent","polyOut","polyInOut","backIn","overshoot","backOut","backInOut","asin","elasticIn","amplitude","period","elasticOut","elasticInOut","tree","xm","ym","xp","yp","bottom","_root","_x","_y","defaultX","defaultY","quadtree","Quadtree","addAll","leaf_copy","treeProto","cover","xz","yz","visit","extent","x3","y3","quads","radius","d2","retainer","removeAll","visitAfter","prefixExponent","toExponential","coefficient","formatDecimal","toPrecision","toFixed","formatRounded","re","formatSpecifier","specifier","FormatSpecifier","fill","align","zero","precision","formatTypes","prefixes","grouping","thousands","currency","decimal","numerals","formatNumerals","newFormat","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","Adder","temp","adder","bv","av","quarterPi","radians","exp","streamGeometry","geometry","stream","streamGeometryType","streamObjectType","Feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","cartesian","spherical","phi","cosPhi","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","compose","invert","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","delta","cosRadius","sinRadius","circleRadius","rejoin","Intersection","points","clip","segments","p0","p1","pointEqual","compareIntersection","startInside","isSubject","normal","angle","winding","polygon","ring","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","absDelta","antimeridian","intersection","phiArc","sink","clipLine","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","polygonContains","pointVisible","pointLine","clean","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","cr","smallRadius","notHemisphere","visible","intersect","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","A","u","uu","polar","q1","c0","v00","point2","clipRectangle","corner","comparePoint","x__","y__","v__","x_","y_","v_","activeStream","bufferStream","clipStream","linePoint","b0","b1","polygonInside","cleanInside","ax","ay","area","bounds","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","_line","_point","lengthRing","PathString","_string","_circle","projectionStream","contextStream","measure","projection","transformer","TransformStream","fit","fitBounds","clipExtent","fitExtent","fitSize","fitWidth","fitHeight","cosMinDistance","delta2","project","resampleLineTo","phi2","lambda2","dx2","dy2","dz","lambda00","x00","y00","a00","b00","c00","resampleStream","ringPoint","resampleNone","transformRadians","projectionMutator","projectAt","projectRotate","cacheStream","theta","preclip","postclip","projectResample","resample","projectTransform","recenter","center","transformRotate","clipAngle","conicProjection","parallels","conicEqualAreaRaw","sy0","forward","cylindricalEqualAreaRaw","r0","r0y","lower48Point","alaskaPoint","hawaiiPoint","lower48","conicEqualArea","alaska","hawaii","pointStream","albersUsa","streams","azimuthalRaw","cx","cy","azimuthalInvert","sc","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","equirectangularRaw","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","sum","hierarchy","childs","Node","valued","defaultChildren","eachBefore","computeHeight","copyData","eachAfter","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","TreeNode","squarifyRatio","ratio","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","dice","squarify","resquarify","_squarify","SQRT2","hue","hcl2lab","rgb2lrgb","lrgb2rgb","cubehelixGamma","cubehelix","noabort","Queue","_size","_error","_tasks","_waiting","_active","_ended","_start","maybeNotify","concurrency","defer","await","results","awaitAll","randomUniform","sourceRandomUniform","randomNormal","mu","sigma","sourceRandomNormal","randomLogNormal","sourceRandomLogNormal","randomIrwinHall","sourceRandomIrwinHall","randomBates","irwinHall","sourceRandomBates","randomExponential","sourceRandomExponential","respond","hasResponse","XDomainRequest","onprogress","overrideMimeType","fixCallback","defaultMimeType","createRange","createContextualFragment","responseXML","pad","formatDate","year","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","preformatBody","formatBody","responseOf","implicit","band","ordinal","unknown","ordinalRange","paddingInner","paddingOuter","rescale","rangeRound","unit","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","d1","r1","polymap","clamp","continuous","piecewise","deinterpolateClamp","reinterpolateClamp","formatDecimalParts","toLocaleString","currencyPrefix","currencySuffix","minus","nan","formatTrim","linearish","nice","invertExtent","newInterval","floori","offseti","interval","setMonth","setHours","setFullYear","setDate","getMonth","weekday","getDate","getDay","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","getMilliseconds","getSeconds","getMinutes","getHours","utcWeekday","setUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","utcYear","setUTCMonth","setUTCFullYear","localDate","H","M","S","L","utcDate","UTC","pads","numberRe","percentRe","requoteRe","requote","formatRe","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","day","formatWeekNumberSunday","dISO","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYearISO","formatFullYear","formatFullYearISO","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","utcFormats","parses","parseSpecifier","newParse","week","X","utcFormat","utcParse","formatLocale","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds","ramp","vendorMatches","webkitMatchesSelector","msMatchesSelector","mozMatchesSelector","oMatchesSelector","nextId","Local","Linear","areaStart","areaEnd","curveRadial","Radial","curve","_curve","radial","kr","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","_basis","_beta","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","py","Step","_t","newYear","newDate","value00","value0","value10","styleRemoveEnd","RedBlackTree","RedBlackNode","R","P","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","createEdge","edge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","Circle","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","ha","hc","circle","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","lexicographic","Diagram","sites","sortCellHalfedges","clipEdges","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","v01","v11","v10","clipCells","edges","polygons","triangles","e1","_found","vx","vy","Transform","applyX","applyY","invertX","invertY","rescaleX","rescaleY","_regeneratorRuntime","asyncIterator","writable","Generator","Context","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","AsyncIterator","invoke","_typeof","__await","callInvokeWithMethodAndArg","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","mark","setPrototypeOf","awrap","async","rval","handle","complete","finish","delegateYield","asyncGeneratorStep","_asyncToGenerator","_throw","_getStateData","_getManifest","getManifest","_callee2","manifest","fetchManifest","_fetchManifest","_args2","_context2","_callee","superagent","getStateData","_callee4","fetchData","_fetchData","_context4","_callee3","_context3","searchParams","stateCount","mapEl","statePopup","getElementById","renderMap","closest","mapSvg","mapWidth","mapHeight","d3","legendText","statePercentiles","geoJson","assetPath","mapInsetDC","coords","dcwsi_ind_i","wsp_ind_i","dcwe_ind_i","score_color","score_tier","jsonState","state_url","score","scoreColor","legendIndex","stateClick","legend","_d3$mouse2","_slicedToArray","clickX","clickY","pathRect","cardWidth","cardHeight","barOffset","stateProfileData","profileCard","stateProfileCard","parentKey","metrics","profileData","stateName","stateRank","statePercentileColor","statePercentileName","stateLink","metricName","metricRank","metricCount","stateData","card","stateKey","tableEl","callbackFn","sortBy","_toConsumableArray","renderTable","attachClickListener","meta","_this3","el","btn","loadStatesClickHandler","tableHeadingClickHandler","btnWrapper","stateInfo","toggle","wrapper","_this4","dataset","initialPage","initialLimit","tableHtml","_this5","tableData","rankKey","heading","label","unit_position","stateObj","mouse","geoAlbersUsa","geoPath","axisBottom","axisLeft","axisTop","scaleQuantize","scaleLinear","scaleBand","graph","graphContainer","stateAbbr","metricKey","metric","metricValue","graphEl","renderGraph","renderBoolViz","viz","legendOffset","circles","rowCount","colCount","gapRatio","gapDist","radii","vizHeight","ix","abbr","scrollTo","offsetTop","behavior","stateMetricsDataUrl","graphWidth","graphHeight","_objectSpread","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","yScaleOffset","xScale","yScale","yMin","yMax","scaleMinY","scaleMaxY","tickCount","fragment","createDocumentFragment","rectWidth","stateIndex","stateIndexObject","post_type","pdfBtn","stateIndexTool"],"mappings":"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G,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,IAAM,CAAEv1B,EAAG,CAAC,EAAG,GAAIw0B,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,IAAM,CAAEv1B,EAAG,CAAC,EAAG,GAAIw0B,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,IAAM,CAAEv1B,EAAG,CAAC,EAAG,GAAIw0B,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,IAAM,CAAEv1B,EAAG,CAAC,EAAG,GAAIw0B,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIE,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,GAAI,CAAC,EAAG,GAAIC,G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AI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,KAAO,CAAEvB,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKO,GAAI,CAAC,EAAG,IAAKG,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,KAAO,CAAEvB,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKO,GAAI,CAAC,EAAG,IAAKG,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,KAAO,CAAEvB,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKO,GAAI,CAAC,EAAG,IAAKG,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,KAAO,CAAEvB,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKO,GAAI,CAAC,EAAG,IAAKG,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKE,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GAAI,CAAC,EAAG,IAAKC,GA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","file":"js/state-index.js","sourcesContent":[" \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 = 184);\n","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _handlebarsRuntime = require('./handlebars.runtime');\n\nvar _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);\n\n// Compiler imports\n\nvar _handlebarsCompilerAst = require('./handlebars/compiler/ast');\n\nvar _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);\n\nvar _handlebarsCompilerBase = require('./handlebars/compiler/base');\n\nvar _handlebarsCompilerCompiler = require('./handlebars/compiler/compiler');\n\nvar _handlebarsCompilerJavascriptCompiler = require('./handlebars/compiler/javascript-compiler');\n\nvar _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);\n\nvar _handlebarsCompilerVisitor = require('./handlebars/compiler/visitor');\n\nvar _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\nvar _create = _handlebarsRuntime2['default'].create;\nfunction create() {\n var hb = _create();\n\n hb.compile = function (input, options) {\n return _handlebarsCompilerCompiler.compile(input, options, hb);\n };\n hb.precompile = function (input, options) {\n return _handlebarsCompilerCompiler.precompile(input, options, hb);\n };\n\n hb.AST = _handlebarsCompilerAst2['default'];\n hb.Compiler = _handlebarsCompilerCompiler.Compiler;\n hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];\n hb.Parser = _handlebarsCompilerBase.parser;\n hb.parse = _handlebarsCompilerBase.parse;\n hb.parseWithoutProcessing = _handlebarsCompilerBase.parseWithoutProcessing;\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst.Visitor = _handlebarsCompilerVisitor2['default'];\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7aUNBQW9CLHNCQUFzQjs7Ozs7O3FDQUcxQiwyQkFBMkI7Ozs7c0NBS3BDLDRCQUE0Qjs7MENBQ1csZ0NBQWdDOztvREFDL0MsMkNBQTJDOzs7O3lDQUN0RCwrQkFBK0I7Ozs7b0NBRTVCLDBCQUEwQjs7OztBQUVqRCxJQUFJLE9BQU8sR0FBRywrQkFBUSxNQUFNLENBQUM7QUFDN0IsU0FBUyxNQUFNLEdBQUc7QUFDaEIsTUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLElBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFdBQU8sb0NBQVEsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNwQyxDQUFDO0FBQ0YsSUFBRSxDQUFDLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdkMsV0FBTyx1Q0FBVyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQ3ZDLENBQUM7O0FBRUYsSUFBRSxDQUFDLEdBQUcscUNBQU0sQ0FBQztBQUNiLElBQUUsQ0FBQyxRQUFRLHVDQUFXLENBQUM7QUFDdkIsSUFBRSxDQUFDLGtCQUFrQixvREFBcUIsQ0FBQztBQUMzQyxJQUFFLENBQUMsTUFBTSxpQ0FBUyxDQUFDO0FBQ25CLElBQUUsQ0FBQyxLQUFLLGdDQUFRLENBQUM7QUFDakIsSUFBRSxDQUFDLHNCQUFzQixpREFBeUIsQ0FBQzs7QUFFbkQsU0FBTyxFQUFFLENBQUM7Q0FDWDs7QUFFRCxJQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIsa0NBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLElBQUksQ0FBQyxPQUFPLHlDQUFVLENBQUM7O0FBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O3FCQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy5ydW50aW1lJztcblxuLy8gQ29tcGlsZXIgaW1wb3J0c1xuaW1wb3J0IEFTVCBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0JztcbmltcG9ydCB7XG4gIHBhcnNlciBhcyBQYXJzZXIsXG4gIHBhcnNlLFxuICBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nXG59IGZyb20gJy4vaGFuZGxlYmFycy9jb21waWxlci9iYXNlJztcbmltcG9ydCB7IENvbXBpbGVyLCBjb21waWxlLCBwcmVjb21waWxlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyJztcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXInO1xuaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3InO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG5sZXQgX2NyZWF0ZSA9IHJ1bnRpbWUuY3JlYXRlO1xuZnVuY3Rpb24gY3JlYXRlKCkge1xuICBsZXQgaGIgPSBfY3JlYXRlKCk7XG5cbiAgaGIuY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcbiAgaGIucHJlY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcblxuICBoYi5BU1QgPSBBU1Q7XG4gIGhiLkNvbXBpbGVyID0gQ29tcGlsZXI7XG4gIGhiLkphdmFTY3JpcHRDb21waWxlciA9IEphdmFTY3JpcHRDb21waWxlcjtcbiAgaGIuUGFyc2VyID0gUGFyc2VyO1xuICBoYi5wYXJzZSA9IHBhcnNlO1xuICBoYi5wYXJzZVdpdGhvdXRQcm9jZXNzaW5nID0gcGFyc2VXaXRob3V0UHJvY2Vzc2luZztcblxuICByZXR1cm4gaGI7XG59XG5cbmxldCBpbnN0ID0gY3JlYXRlKCk7XG5pbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcblxubm9Db25mbGljdChpbnN0KTtcblxuaW5zdC5WaXNpdG9yID0gVmlzaXRvcjtcblxuaW5zdFsnZGVmYXVsdCddID0gaW5zdDtcblxuZXhwb3J0IGRlZmF1bHQgaW5zdDtcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.8';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy44JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMvQyxXQUFXOzs7O0FBRTlCLElBQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFdEMsU0FBUyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUU7QUFDdkQsTUFBSSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELHdCQUFzQixDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM5Qyx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFbkQsTUFBSSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVuRCwwQkFBd0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRTlDLFNBQU87QUFDTCxjQUFVLEVBQUU7QUFDVixlQUFTLEVBQUUsNkNBQ1Qsd0JBQXdCLEVBQ3hCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FDdEM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQyw2QkFBNkI7S0FDM0Q7QUFDRCxXQUFPLEVBQUU7QUFDUCxlQUFTLEVBQUUsNkNBQ1Qsc0JBQXNCLEVBQ3RCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FDbkM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQywwQkFBMEI7S0FDeEQ7R0FDRixDQUFDO0NBQ0g7O0FBRU0sU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUN4RSxNQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUNoQyxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDakUsTUFBTTtBQUNMLFdBQU8sY0FBYyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztHQUNwRTtDQUNGOztBQUVELFNBQVMsY0FBYyxDQUFDLHlCQUF5QixFQUFFLFlBQVksRUFBRTtBQUMvRCxNQUFJLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDbkUsV0FBTyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDO0dBQ25FO0FBQ0QsTUFBSSx5QkFBeUIsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO0FBQ3hELFdBQU8seUJBQXlCLENBQUMsWUFBWSxDQUFDO0dBQy9DO0FBQ0QsZ0NBQThCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0MsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFRCxTQUFTLDhCQUE4QixDQUFDLFlBQVksRUFBRTtBQUNwRCxNQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMzQyxvQkFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsd0JBQU8sR0FBRyxDQUNSLE9BQU8sRUFDUCxpRUFBK0QsWUFBWSxvSUFDSCxvSEFDMkMsQ0FDcEgsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxxQkFBcUIsR0FBRztBQUN0QyxRQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWSxFQUFJO0FBQ3BELFdBQU8sZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7R0FDdkMsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoicHJvdG8tYWNjZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTmV3TG9va3VwT2JqZWN0IH0gZnJvbSAnLi9jcmVhdGUtbmV3LWxvb2t1cC1vYmplY3QnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBsb2dnZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChydW50aW1lT3B0aW9ucykge1xuICBsZXQgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ2NvbnN0cnVjdG9yJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVHZXR0ZXJfXyddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lU2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2xvb2t1cEdldHRlcl9fJ10gPSBmYWxzZTtcblxuICBsZXQgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gIGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdFsnX19wcm90b19fJ10gPSBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHdoaXRlbGlzdDogY3JlYXRlTmV3TG9va3VwT2JqZWN0KFxuICAgICAgICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b1Byb3BlcnRpZXNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9Qcm9wZXJ0aWVzQnlEZWZhdWx0XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCxcbiAgICAgICAgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvTWV0aG9kc1xuICAgICAgKSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHRcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBwcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkge1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wubWV0aG9kcywgcHJvcGVydHlOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSwgcHJvcGVydHlOYW1lKSB7XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKSB7XG4gIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coXG4gICAgICAnZXJyb3InLFxuICAgICAgYEhhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCIke3Byb3BlcnR5TmFtZX1cIiBiZWNhdXNlIGl0IGlzIG5vdCBhbiBcIm93biBwcm9wZXJ0eVwiIG9mIGl0cyBwYXJlbnQuXFxuYCArXG4gICAgICAgIGBZb3UgY2FuIGFkZCBhIHJ1bnRpbWUgb3B0aW9uIHRvIGRpc2FibGUgdGhlIGNoZWNrIG9yIHRoaXMgd2FybmluZzpcXG5gICtcbiAgICAgICAgYFNlZSBodHRwczovL2hhbmRsZWJhcnNqcy5jb20vYXBpLXJlZmVyZW5jZS9ydW50aW1lLW9wdGlvbnMuaHRtbCNvcHRpb25zLXRvLWNvbnRyb2wtcHJvdG90eXBlLWFjY2VzcyBmb3IgZGV0YWlsc2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldExvZ2dlZFByb3BlcnRpZXMoKSB7XG4gIE9iamVjdC5rZXlzKGxvZ2dlZFByb3BlcnRpZXMpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICBkZWxldGUgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICB9KTtcbn1cbiJdfQ==\n","/* global globalThis */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n // https://mathiasbynens.be/notes/globalthis\n (function () {\n if (typeof globalThis === 'object') return;\n Object.prototype.__defineGetter__('__magic__', function () {\n return this;\n });\n __magic__.globalThis = __magic__; // eslint-disable-line no-undef\n delete Object.prototype.__magic__;\n })();\n\n var $Handlebars = globalThis.Handlebars;\n\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (globalThis.Handlebars === Handlebars) {\n globalThis.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOzs7QUFHbEMsR0FBQyxZQUFXO0FBQ1YsUUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsT0FBTztBQUMzQyxVQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxZQUFXO0FBQ3hELGFBQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQyxDQUFDO0FBQ0gsYUFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDakMsV0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztHQUNuQyxDQUFBLEVBQUcsQ0FBQzs7QUFFTCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDOzs7QUFHMUMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDeEMsZ0JBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQ3JDO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGdsb2JhbFRoaXMgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKEhhbmRsZWJhcnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2dsb2JhbHRoaXNcbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oJ19fbWFnaWNfXycsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gICAgX19tYWdpY19fLmdsb2JhbFRoaXMgPSBfX21hZ2ljX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICBkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21hZ2ljX187XG4gIH0pKCk7XG5cbiAgY29uc3QgJEhhbmRsZWJhcnMgPSBnbG9iYWxUaGlzLkhhbmRsZWJhcnM7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGdsb2JhbFRoaXMuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgZ2xvYmFsVGhpcy5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\nvar AST = {\n // Public API used to evaluate derived attributes regarding AST nodes\n helpers: {\n // a mustache is definitely a helper if:\n // * it is an eligible helper, and\n // * it has at least one parameter or hash segment\n helperExpression: function helperExpression(node) {\n return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);\n },\n\n scopedId: function scopedId(path) {\n return (/^\\.|this\\b/.test(path.original)\n );\n },\n\n // an ID is simple if it only has one part, and that part is not\n // `..` or `this`.\n simpleId: function simpleId(path) {\n return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;\n }\n }\n};\n\n// Must be exported as an object rather than the root of the module as the jison lexer\n// must modify the object to operate properly.\nexports['default'] = AST;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLEdBQUcsR0FBRzs7QUFFUixTQUFPLEVBQUU7Ozs7QUFJUCxvQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsYUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFDNUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixJQUNqQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFBLElBQzlCLENBQUMsRUFBRSxBQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLElBQUksQ0FBQSxBQUFDLEFBQUMsQ0FDdkQ7S0FDSDs7QUFFRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQU8sYUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUM7S0FDekM7Ozs7QUFJRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNyRTtLQUNIO0dBQ0Y7Q0FDRixDQUFDOzs7O3FCQUlhLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbm9kZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbicgfHxcbiAgICAgICAgKChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHxcbiAgICAgICAgICBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpICYmXG4gICAgICAgICAgISEoKG5vZGUucGFyYW1zICYmIG5vZGUucGFyYW1zLmxlbmd0aCkgfHwgbm9kZS5oYXNoKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHNjb3BlZElkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gL15cXC58dGhpc1xcYi8udGVzdChwYXRoLm9yaWdpbmFsKTtcbiAgICB9LFxuXG4gICAgLy8gYW4gSUQgaXMgc2ltcGxlIGlmIGl0IG9ubHkgaGFzIG9uZSBwYXJ0LCBhbmQgdGhhdCBwYXJ0IGlzIG5vdFxuICAgIC8vIGAuLmAgb3IgYHRoaXNgLlxuICAgIHNpbXBsZUlkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXRoLnBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQocGF0aCkgJiYgIXBhdGguZGVwdGhcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG4vLyBNdXN0IGJlIGV4cG9ydGVkIGFzIGFuIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgbW9kdWxlIGFzIHRoZSBqaXNvbiBsZXhlclxuLy8gbXVzdCBtb2RpZnkgdGhlIG9iamVjdCB0byBvcGVyYXRlIHByb3Blcmx5LlxuZXhwb3J0IGRlZmF1bHQgQVNUO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nfunction Visitor() {\n this.parents = [];\n}\n\nVisitor.prototype = {\n constructor: Visitor,\n mutating: false,\n\n // Visits a given value. If mutating, will replace the value if necessary.\n acceptKey: function acceptKey(node, name) {\n var value = this.accept(node[name]);\n if (this.mutating) {\n // Hacky sanity check: This may have a few false positives for type for the helper\n // methods but will generally do the right thing without a lot of overhead.\n if (value && !Visitor.prototype[value.type]) {\n throw new _exception2['default']('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n }\n node[name] = value;\n }\n },\n\n // Performs an accept operation with added sanity check to ensure\n // required keys are not removed.\n acceptRequired: function acceptRequired(node, name) {\n this.acceptKey(node, name);\n\n if (!node[name]) {\n throw new _exception2['default'](node.type + ' requires ' + name);\n }\n },\n\n // Traverses a given array. If mutating, empty respnses will be removed\n // for child elements.\n acceptArray: function acceptArray(array) {\n for (var i = 0, l = array.length; i < l; i++) {\n this.acceptKey(array, i);\n\n if (!array[i]) {\n array.splice(i, 1);\n i--;\n l--;\n }\n }\n },\n\n accept: function accept(object) {\n if (!object) {\n return;\n }\n\n /* istanbul ignore next: Sanity code */\n if (!this[object.type]) {\n throw new _exception2['default']('Unknown type: ' + object.type, object);\n }\n\n if (this.current) {\n this.parents.unshift(this.current);\n }\n this.current = object;\n\n var ret = this[object.type](object);\n\n this.current = this.parents.shift();\n\n if (!this.mutating || ret) {\n return ret;\n } else if (ret !== false) {\n return object;\n }\n },\n\n Program: function Program(program) {\n this.acceptArray(program.body);\n },\n\n MustacheStatement: visitSubExpression,\n Decorator: visitSubExpression,\n\n BlockStatement: visitBlock,\n DecoratorBlock: visitBlock,\n\n PartialStatement: visitPartial,\n PartialBlockStatement: function PartialBlockStatement(partial) {\n visitPartial.call(this, partial);\n\n this.acceptKey(partial, 'program');\n },\n\n ContentStatement: function ContentStatement() /* content */{},\n CommentStatement: function CommentStatement() /* comment */{},\n\n SubExpression: visitSubExpression,\n\n PathExpression: function PathExpression() /* path */{},\n\n StringLiteral: function StringLiteral() /* string */{},\n NumberLiteral: function NumberLiteral() /* number */{},\n BooleanLiteral: function BooleanLiteral() /* bool */{},\n UndefinedLiteral: function UndefinedLiteral() /* literal */{},\n NullLiteral: function NullLiteral() /* literal */{},\n\n Hash: function Hash(hash) {\n this.acceptArray(hash.pairs);\n },\n HashPair: function HashPair(pair) {\n this.acceptRequired(pair, 'value');\n }\n};\n\nfunction visitSubExpression(mustache) {\n this.acceptRequired(mustache, 'path');\n this.acceptArray(mustache.params);\n this.acceptKey(mustache, 'hash');\n}\nfunction visitBlock(block) {\n visitSubExpression.call(this, block);\n\n this.acceptKey(block, 'program');\n this.acceptKey(block, 'inverse');\n}\nfunction visitPartial(partial) {\n this.acceptRequired(partial, 'name');\n this.acceptArray(partial.params);\n this.acceptKey(partial, 'hash');\n}\n\nexports['default'] = Visitor;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztBQUVwQyxTQUFTLE9BQU8sR0FBRztBQUNqQixNQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztDQUNuQjs7QUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLGFBQVcsRUFBRSxPQUFPO0FBQ3BCLFVBQVEsRUFBRSxLQUFLOzs7QUFHZixXQUFTLEVBQUUsbUJBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM5QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7O0FBR2pCLFVBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0MsY0FBTSwyQkFDSix3QkFBd0IsR0FDdEIsS0FBSyxDQUFDLElBQUksR0FDVix5QkFBeUIsR0FDekIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLENBQUMsSUFBSSxDQUNaLENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDcEI7R0FDRjs7OztBQUlELGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNuQyxRQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFM0IsUUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNmLFlBQU0sMkJBQWMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDdEQ7R0FDRjs7OztBQUlELGFBQVcsRUFBRSxxQkFBUyxLQUFLLEVBQUU7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxVQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFFekIsVUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNiLGFBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25CLFNBQUMsRUFBRSxDQUFDO0FBQ0osU0FBQyxFQUFFLENBQUM7T0FDTDtLQUNGO0dBQ0Y7O0FBRUQsUUFBTSxFQUFFLGdCQUFTLE1BQU0sRUFBRTtBQUN2QixRQUFJLENBQUMsTUFBTSxFQUFFO0FBQ1gsYUFBTztLQUNSOzs7QUFHRCxRQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0QixZQUFNLDJCQUFjLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDN0Q7O0FBRUQsUUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2hCLFVBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQztBQUNELFFBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDOztBQUV0QixRQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUVwQyxRQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7O0FBRXBDLFFBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsRUFBRTtBQUN6QixhQUFPLEdBQUcsQ0FBQztLQUNaLE1BQU0sSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFO0FBQ3hCLGFBQU8sTUFBTSxDQUFDO0tBQ2Y7R0FDRjs7QUFFRCxTQUFPLEVBQUUsaUJBQVMsT0FBTyxFQUFFO0FBQ3pCLFFBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQ2hDOztBQUVELG1CQUFpQixFQUFFLGtCQUFrQjtBQUNyQyxXQUFTLEVBQUUsa0JBQWtCOztBQUU3QixnQkFBYyxFQUFFLFVBQVU7QUFDMUIsZ0JBQWMsRUFBRSxVQUFVOztBQUUxQixrQkFBZ0IsRUFBRSxZQUFZO0FBQzlCLHVCQUFxQixFQUFFLCtCQUFTLE9BQU8sRUFBRTtBQUN2QyxnQkFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRWpDLFFBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3BDOztBQUVELGtCQUFnQixFQUFFLHlDQUF3QixFQUFFO0FBQzVDLGtCQUFnQixFQUFFLHlDQUF3QixFQUFFOztBQUU1QyxlQUFhLEVBQUUsa0JBQWtCOztBQUVqQyxnQkFBYyxFQUFFLG9DQUFxQixFQUFFOztBQUV2QyxlQUFhLEVBQUUscUNBQXVCLEVBQUU7QUFDeEMsZUFBYSxFQUFFLHFDQUF1QixFQUFFO0FBQ3hDLGdCQUFjLEVBQUUsb0NBQXFCLEVBQUU7QUFDdkMsa0JBQWdCLEVBQUUseUNBQXdCLEVBQUU7QUFDNUMsYUFBVyxFQUFFLG9DQUF3QixFQUFFOztBQUV2QyxNQUFJLEVBQUUsY0FBUyxJQUFJLEVBQUU7QUFDbkIsUUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDOUI7QUFDRCxVQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLFFBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ3BDO0NBQ0YsQ0FBQzs7QUFFRixTQUFTLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtBQUNwQyxNQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxNQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxNQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtBQUN6QixvQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUVyQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUM3QixNQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxNQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNqQzs7cUJBRWMsT0FBTyIsImZpbGUiOiJ2aXNpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5mdW5jdGlvbiBWaXNpdG9yKCkge1xuICB0aGlzLnBhcmVudHMgPSBbXTtcbn1cblxuVmlzaXRvci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBWaXNpdG9yLFxuICBtdXRhdGluZzogZmFsc2UsXG5cbiAgLy8gVmlzaXRzIGEgZ2l2ZW4gdmFsdWUuIElmIG11dGF0aW5nLCB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlIGlmIG5lY2Vzc2FyeS5cbiAgYWNjZXB0S2V5OiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5hY2NlcHQobm9kZVtuYW1lXSk7XG4gICAgaWYgKHRoaXMubXV0YXRpbmcpIHtcbiAgICAgIC8vIEhhY2t5IHNhbml0eSBjaGVjazogVGhpcyBtYXkgaGF2ZSBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgZm9yIHR5cGUgZm9yIHRoZSBoZWxwZXJcbiAgICAgIC8vIG1ldGhvZHMgYnV0IHdpbGwgZ2VuZXJhbGx5IGRvIHRoZSByaWdodCB0aGluZyB3aXRob3V0IGEgbG90IG9mIG92ZXJoZWFkLlxuICAgICAgaWYgKHZhbHVlICYmICFWaXNpdG9yLnByb3RvdHlwZVt2YWx1ZS50eXBlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAgICdVbmV4cGVjdGVkIG5vZGUgdHlwZSBcIicgK1xuICAgICAgICAgICAgdmFsdWUudHlwZSArXG4gICAgICAgICAgICAnXCIgZm91bmQgd2hlbiBhY2NlcHRpbmcgJyArXG4gICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICcgb24gJyArXG4gICAgICAgICAgICBub2RlLnR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gUGVyZm9ybXMgYW4gYWNjZXB0IG9wZXJhdGlvbiB3aXRoIGFkZGVkIHNhbml0eSBjaGVjayB0byBlbnN1cmVcbiAgLy8gcmVxdWlyZWQga2V5cyBhcmUgbm90IHJlbW92ZWQuXG4gIGFjY2VwdFJlcXVpcmVkOiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgdGhpcy5hY2NlcHRLZXkobm9kZSwgbmFtZSk7XG5cbiAgICBpZiAoIW5vZGVbbmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obm9kZS50eXBlICsgJyByZXF1aXJlcyAnICsgbmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRyYXZlcnNlcyBhIGdpdmVuIGFycmF5LiBJZiBtdXRhdGluZywgZW1wdHkgcmVzcG5zZXMgd2lsbCBiZSByZW1vdmVkXG4gIC8vIGZvciBjaGlsZCBlbGVtZW50cy5cbiAgYWNjZXB0QXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0S2V5KGFycmF5LCBpKTtcblxuICAgICAgaWYgKCFhcnJheVtpXSkge1xuICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGktLTtcbiAgICAgICAgbC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhY2NlcHQ6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW29iamVjdC50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0eXBlOiAnICsgb2JqZWN0LnR5cGUsIG9iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudCkge1xuICAgICAgdGhpcy5wYXJlbnRzLnVuc2hpZnQodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50ID0gb2JqZWN0O1xuXG4gICAgbGV0IHJldCA9IHRoaXNbb2JqZWN0LnR5cGVdKG9iamVjdCk7XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnBhcmVudHMuc2hpZnQoKTtcblxuICAgIGlmICghdGhpcy5tdXRhdGluZyB8fCByZXQpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBlbHNlIGlmIChyZXQgIT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShwcm9ncmFtLmJvZHkpO1xuICB9LFxuXG4gIE11c3RhY2hlU3RhdGVtZW50OiB2aXNpdFN1YkV4cHJlc3Npb24sXG4gIERlY29yYXRvcjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIEJsb2NrU3RhdGVtZW50OiB2aXNpdEJsb2NrLFxuICBEZWNvcmF0b3JCbG9jazogdmlzaXRCbG9jayxcblxuICBQYXJ0aWFsU3RhdGVtZW50OiB2aXNpdFBhcnRpYWwsXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHZpc2l0UGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwpO1xuXG4gICAgdGhpcy5hY2NlcHRLZXkocGFydGlhbCwgJ3Byb2dyYW0nKTtcbiAgfSxcblxuICBDb250ZW50U3RhdGVtZW50OiBmdW5jdGlvbigvKiBjb250ZW50ICovKSB7fSxcbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oLyogY29tbWVudCAqLykge30sXG5cbiAgU3ViRXhwcmVzc2lvbjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbigvKiBwYXRoICovKSB7fSxcblxuICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbigvKiBzdHJpbmcgKi8pIHt9LFxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbigvKiBudW1iZXIgKi8pIHt9LFxuICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24oLyogYm9vbCAqLykge30sXG4gIFVuZGVmaW5lZExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24oLyogbGl0ZXJhbCAqLykge30sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkoaGFzaC5wYWlycyk7XG4gIH0sXG4gIEhhc2hQYWlyOiBmdW5jdGlvbihwYWlyKSB7XG4gICAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYWlyLCAndmFsdWUnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdmlzaXRTdWJFeHByZXNzaW9uKG11c3RhY2hlKSB7XG4gIHRoaXMuYWNjZXB0UmVxdWlyZWQobXVzdGFjaGUsICdwYXRoJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkobXVzdGFjaGUucGFyYW1zKTtcbiAgdGhpcy5hY2NlcHRLZXkobXVzdGFjaGUsICdoYXNoJyk7XG59XG5mdW5jdGlvbiB2aXNpdEJsb2NrKGJsb2NrKSB7XG4gIHZpc2l0U3ViRXhwcmVzc2lvbi5jYWxsKHRoaXMsIGJsb2NrKTtcblxuICB0aGlzLmFjY2VwdEtleShibG9jaywgJ3Byb2dyYW0nKTtcbiAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdpbnZlcnNlJyk7XG59XG5mdW5jdGlvbiB2aXNpdFBhcnRpYWwocGFydGlhbCkge1xuICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhcnRpYWwsICduYW1lJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkocGFydGlhbC5wYXJhbXMpO1xuICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAnaGFzaCcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaXNpdG9yO1xuIl19\n","(function (global) {\n 'use strict';\n\n var util = newUtil();\n var inliner = newInliner();\n var fontFaces = newFontFaces();\n var images = newImages();\n\n // Default impl options\n var defaultOptions = {\n // Default is to fail on error, no placeholder\n imagePlaceholder: undefined,\n // Default cache bust is false, it will use the cache\n cacheBust: false\n };\n\n var domtoimage = {\n toSvg: toSvg,\n toPng: toPng,\n toJpeg: toJpeg,\n toBlob: toBlob,\n toPixelData: toPixelData,\n impl: {\n fontFaces: fontFaces,\n images: images,\n util: util,\n inliner: inliner,\n options: {}\n }\n };\n\n if (typeof module !== 'undefined')\n module.exports = domtoimage;\n else\n global.domtoimage = domtoimage;\n\n\n /**\n * @param {Node} node - The DOM Node object to render\n * @param {Object} options - Rendering options\n * @param {Function} options.filter - Should return true if passed node should be included in the output\n * (excluding node means excluding it's children as well). Not called on the root node.\n * @param {String} options.bgcolor - color for the background, any valid CSS color value.\n * @param {Number} options.width - width to be applied to node before rendering.\n * @param {Number} options.height - height to be applied to node before rendering.\n * @param {Object} options.style - an object whose properties to be copied to node's style before rendering.\n * @param {Number} options.quality - a Number between 0 and 1 indicating image quality (applicable to JPEG only),\n defaults to 1.0.\n * @param {String} options.imagePlaceholder - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch\n * @param {Boolean} options.cacheBust - set to true to cache bust by appending the time to the request url\n * @return {Promise} - A promise that is fulfilled with a SVG image data URL\n * */\n function toSvg(node, options) {\n options = options || {};\n copyOptions(options);\n return Promise.resolve(node)\n .then(function (node) {\n return cloneNode(node, options.filter, true);\n })\n .then(embedFonts)\n .then(inlineImages)\n .then(applyOptions)\n .then(function (clone) {\n return makeSvgDataUri(clone,\n options.width || util.width(node),\n options.height || util.height(node)\n );\n });\n\n function applyOptions(clone) {\n if (options.bgcolor) clone.style.backgroundColor = options.bgcolor;\n\n if (options.width) clone.style.width = options.width + 'px';\n if (options.height) clone.style.height = options.height + 'px';\n\n if (options.style)\n Object.keys(options.style).forEach(function (property) {\n clone.style[property] = options.style[property];\n });\n\n return clone;\n }\n }\n\n /**\n * @param {Node} node - The DOM Node object to render\n * @param {Object} options - Rendering options, @see {@link toSvg}\n * @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data.\n * */\n function toPixelData(node, options) {\n return draw(node, options || {})\n .then(function (canvas) {\n return canvas.getContext('2d').getImageData(\n 0,\n 0,\n util.width(node),\n util.height(node)\n ).data;\n });\n }\n\n /**\n * @param {Node} node - The DOM Node object to render\n * @param {Object} options - Rendering options, @see {@link toSvg}\n * @return {Promise} - A promise that is fulfilled with a PNG image data URL\n * */\n function toPng(node, options) {\n return draw(node, options || {})\n .then(function (canvas) {\n return canvas.toDataURL();\n });\n }\n\n /**\n * @param {Node} node - The DOM Node object to render\n * @param {Object} options - Rendering options, @see {@link toSvg}\n * @return {Promise} - A promise that is fulfilled with a JPEG image data URL\n * */\n function toJpeg(node, options) {\n options = options || {};\n return draw(node, options)\n .then(function (canvas) {\n return canvas.toDataURL('image/jpeg', options.quality || 1.0);\n });\n }\n\n /**\n * @param {Node} node - The DOM Node object to render\n * @param {Object} options - Rendering options, @see {@link toSvg}\n * @return {Promise} - A promise that is fulfilled with a PNG image blob\n * */\n function toBlob(node, options) {\n return draw(node, options || {})\n .then(util.canvasToBlob);\n }\n\n function copyOptions(options) {\n // Copy options to impl options for use in impl\n if(typeof(options.imagePlaceholder) === 'undefined') {\n domtoimage.impl.options.imagePlaceholder = defaultOptions.imagePlaceholder;\n } else {\n domtoimage.impl.options.imagePlaceholder = options.imagePlaceholder;\n }\n\n if(typeof(options.cacheBust) === 'undefined') {\n domtoimage.impl.options.cacheBust = defaultOptions.cacheBust;\n } else {\n domtoimage.impl.options.cacheBust = options.cacheBust;\n }\n }\n\n function draw(domNode, options) {\n return toSvg(domNode, options)\n .then(util.makeImage)\n .then(util.delay(100))\n .then(function (image) {\n var canvas = newCanvas(domNode);\n canvas.getContext('2d').drawImage(image, 0, 0);\n return canvas;\n });\n\n function newCanvas(domNode) {\n var canvas = document.createElement('canvas');\n canvas.width = options.width || util.width(domNode);\n canvas.height = options.height || util.height(domNode);\n\n if (options.bgcolor) {\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = options.bgcolor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n return canvas;\n }\n }\n\n function cloneNode(node, filter, root) {\n if (!root && filter && !filter(node)) return Promise.resolve();\n\n return Promise.resolve(node)\n .then(makeNodeCopy)\n .then(function (clone) {\n return cloneChildren(node, clone, filter);\n })\n .then(function (clone) {\n return processClone(node, clone);\n });\n\n function makeNodeCopy(node) {\n if (node instanceof HTMLCanvasElement) return util.makeImage(node.toDataURL());\n return node.cloneNode(false);\n }\n\n function cloneChildren(original, clone, filter) {\n var children = original.childNodes;\n if (children.length === 0) return Promise.resolve(clone);\n\n return cloneChildrenInOrder(clone, util.asArray(children), filter)\n .then(function () {\n return clone;\n });\n\n function cloneChildrenInOrder(parent, children, filter) {\n var done = Promise.resolve();\n children.forEach(function (child) {\n done = done\n .then(function () {\n return cloneNode(child, filter);\n })\n .then(function (childClone) {\n if (childClone) parent.appendChild(childClone);\n });\n });\n return done;\n }\n }\n\n function processClone(original, clone) {\n if (!(clone instanceof Element)) return clone;\n\n return Promise.resolve()\n .then(cloneStyle)\n .then(clonePseudoElements)\n .then(copyUserInput)\n .then(fixSvg)\n .then(function () {\n return clone;\n });\n\n function cloneStyle() {\n copyStyle(window.getComputedStyle(original), clone.style);\n\n function copyStyle(source, target) {\n if (source.cssText) target.cssText = source.cssText;\n else copyProperties(source, target);\n\n function copyProperties(source, target) {\n util.asArray(source).forEach(function (name) {\n target.setProperty(\n name,\n source.getPropertyValue(name),\n source.getPropertyPriority(name)\n );\n });\n }\n }\n }\n\n function clonePseudoElements() {\n [':before', ':after'].forEach(function (element) {\n clonePseudoElement(element);\n });\n\n function clonePseudoElement(element) {\n var style = window.getComputedStyle(original, element);\n var content = style.getPropertyValue('content');\n\n if (content === '' || content === 'none') return;\n\n var className = util.uid();\n clone.className = clone.className + ' ' + className;\n var styleElement = document.createElement('style');\n styleElement.appendChild(formatPseudoElementStyle(className, element, style));\n clone.appendChild(styleElement);\n\n function formatPseudoElementStyle(className, element, style) {\n var selector = '.' + className + ':' + element;\n var cssText = style.cssText ? formatCssText(style) : formatCssProperties(style);\n return document.createTextNode(selector + '{' + cssText + '}');\n\n function formatCssText(style) {\n var content = style.getPropertyValue('content');\n return style.cssText + ' content: ' + content + ';';\n }\n\n function formatCssProperties(style) {\n\n return util.asArray(style)\n .map(formatProperty)\n .join('; ') + ';';\n\n function formatProperty(name) {\n return name + ': ' +\n style.getPropertyValue(name) +\n (style.getPropertyPriority(name) ? ' !important' : '');\n }\n }\n }\n }\n }\n\n function copyUserInput() {\n if (original instanceof HTMLTextAreaElement) clone.innerHTML = original.value;\n if (original instanceof HTMLInputElement) clone.setAttribute(\"value\", original.value);\n }\n\n function fixSvg() {\n if (!(clone instanceof SVGElement)) return;\n clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n if (!(clone instanceof SVGRectElement)) return;\n ['width', 'height'].forEach(function (attribute) {\n var value = clone.getAttribute(attribute);\n if (!value) return;\n\n clone.style.setProperty(attribute, value);\n });\n }\n }\n }\n\n function embedFonts(node) {\n return fontFaces.resolveAll()\n .then(function (cssText) {\n var styleNode = document.createElement('style');\n node.appendChild(styleNode);\n styleNode.appendChild(document.createTextNode(cssText));\n return node;\n });\n }\n\n function inlineImages(node) {\n return images.inlineAll(node)\n .then(function () {\n return node;\n });\n }\n\n function makeSvgDataUri(node, width, height) {\n return Promise.resolve(node)\n .then(function (node) {\n node.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n return new XMLSerializer().serializeToString(node);\n })\n .then(util.escapeXhtml)\n .then(function (xhtml) {\n return '' + xhtml + '';\n })\n .then(function (foreignObject) {\n return '' +\n foreignObject + '';\n })\n .then(function (svg) {\n return 'data:image/svg+xml;charset=utf-8,' + svg;\n });\n }\n\n function newUtil() {\n return {\n escape: escape,\n parseExtension: parseExtension,\n mimeType: mimeType,\n dataAsUrl: dataAsUrl,\n isDataUrl: isDataUrl,\n canvasToBlob: canvasToBlob,\n resolveUrl: resolveUrl,\n getAndEncode: getAndEncode,\n uid: uid(),\n delay: delay,\n asArray: asArray,\n escapeXhtml: escapeXhtml,\n makeImage: makeImage,\n width: width,\n height: height\n };\n\n function mimes() {\n /*\n * Only WOFF and EOT mime types for fonts are 'real'\n * see http://www.iana.org/assignments/media-types/media-types.xhtml\n */\n var WOFF = 'application/font-woff';\n var JPEG = 'image/jpeg';\n\n return {\n 'woff': WOFF,\n 'woff2': WOFF,\n 'ttf': 'application/font-truetype',\n 'eot': 'application/vnd.ms-fontobject',\n 'png': 'image/png',\n 'jpg': JPEG,\n 'jpeg': JPEG,\n 'gif': 'image/gif',\n 'tiff': 'image/tiff',\n 'svg': 'image/svg+xml'\n };\n }\n\n function parseExtension(url) {\n var match = /\\.([^\\.\\/]*?)$/g.exec(url);\n if (match) return match[1];\n else return '';\n }\n\n function mimeType(url) {\n var extension = parseExtension(url).toLowerCase();\n return mimes()[extension] || '';\n }\n\n function isDataUrl(url) {\n return url.search(/^(data:)/) !== -1;\n }\n\n function toBlob(canvas) {\n return new Promise(function (resolve) {\n var binaryString = window.atob(canvas.toDataURL().split(',')[1]);\n var length = binaryString.length;\n var binaryArray = new Uint8Array(length);\n\n for (var i = 0; i < length; i++)\n binaryArray[i] = binaryString.charCodeAt(i);\n\n resolve(new Blob([binaryArray], {\n type: 'image/png'\n }));\n });\n }\n\n function canvasToBlob(canvas) {\n if (canvas.toBlob)\n return new Promise(function (resolve) {\n canvas.toBlob(resolve);\n });\n\n return toBlob(canvas);\n }\n\n function resolveUrl(url, baseUrl) {\n var doc = document.implementation.createHTMLDocument();\n var base = doc.createElement('base');\n doc.head.appendChild(base);\n var a = doc.createElement('a');\n doc.body.appendChild(a);\n base.href = baseUrl;\n a.href = url;\n return a.href;\n }\n\n function uid() {\n var index = 0;\n\n return function () {\n return 'u' + fourRandomChars() + index++;\n\n function fourRandomChars() {\n /* see http://stackoverflow.com/a/6248722/2519373 */\n return ('0000' + (Math.random() * Math.pow(36, 4) << 0).toString(36)).slice(-4);\n }\n };\n }\n\n function makeImage(uri) {\n return new Promise(function (resolve, reject) {\n var image = new Image();\n image.onload = function () {\n resolve(image);\n };\n image.onerror = reject;\n image.src = uri;\n });\n }\n\n function getAndEncode(url) {\n var TIMEOUT = 30000;\n if(domtoimage.impl.options.cacheBust) {\n // Cache bypass so we dont have CORS issues with cached images\n // Source: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache\n url += ((/\\?/).test(url) ? \"&\" : \"?\") + (new Date()).getTime();\n }\n\n return new Promise(function (resolve) {\n var request = new XMLHttpRequest();\n\n request.onreadystatechange = done;\n request.ontimeout = timeout;\n request.responseType = 'blob';\n request.timeout = TIMEOUT;\n request.open('GET', url, true);\n request.send();\n\n var placeholder;\n if(domtoimage.impl.options.imagePlaceholder) {\n var split = domtoimage.impl.options.imagePlaceholder.split(/,/);\n if(split && split[1]) {\n placeholder = split[1];\n }\n }\n\n function done() {\n if (request.readyState !== 4) return;\n\n if (request.status !== 200) {\n if(placeholder) {\n resolve(placeholder);\n } else {\n fail('cannot fetch resource: ' + url + ', status: ' + request.status);\n }\n\n return;\n }\n\n var encoder = new FileReader();\n encoder.onloadend = function () {\n var content = encoder.result.split(/,/)[1];\n resolve(content);\n };\n encoder.readAsDataURL(request.response);\n }\n\n function timeout() {\n if(placeholder) {\n resolve(placeholder);\n } else {\n fail('timeout of ' + TIMEOUT + 'ms occured while fetching resource: ' + url);\n }\n }\n\n function fail(message) {\n console.error(message);\n resolve('');\n }\n });\n }\n\n function dataAsUrl(content, type) {\n return 'data:' + type + ';base64,' + content;\n }\n\n function escape(string) {\n return string.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }\n\n function delay(ms) {\n return function (arg) {\n return new Promise(function (resolve) {\n setTimeout(function () {\n resolve(arg);\n }, ms);\n });\n };\n }\n\n function asArray(arrayLike) {\n var array = [];\n var length = arrayLike.length;\n for (var i = 0; i < length; i++) array.push(arrayLike[i]);\n return array;\n }\n\n function escapeXhtml(string) {\n return string.replace(/#/g, '%23').replace(/\\n/g, '%0A');\n }\n\n function width(node) {\n var leftBorder = px(node, 'border-left-width');\n var rightBorder = px(node, 'border-right-width');\n return node.scrollWidth + leftBorder + rightBorder;\n }\n\n function height(node) {\n var topBorder = px(node, 'border-top-width');\n var bottomBorder = px(node, 'border-bottom-width');\n return node.scrollHeight + topBorder + bottomBorder;\n }\n\n function px(node, styleProperty) {\n var value = window.getComputedStyle(node).getPropertyValue(styleProperty);\n return parseFloat(value.replace('px', ''));\n }\n }\n\n function newInliner() {\n var URL_REGEX = /url\\(['\"]?([^'\"]+?)['\"]?\\)/g;\n\n return {\n inlineAll: inlineAll,\n shouldProcess: shouldProcess,\n impl: {\n readUrls: readUrls,\n inline: inline\n }\n };\n\n function shouldProcess(string) {\n return string.search(URL_REGEX) !== -1;\n }\n\n function readUrls(string) {\n var result = [];\n var match;\n while ((match = URL_REGEX.exec(string)) !== null) {\n result.push(match[1]);\n }\n return result.filter(function (url) {\n return !util.isDataUrl(url);\n });\n }\n\n function inline(string, url, baseUrl, get) {\n return Promise.resolve(url)\n .then(function (url) {\n return baseUrl ? util.resolveUrl(url, baseUrl) : url;\n })\n .then(get || util.getAndEncode)\n .then(function (data) {\n return util.dataAsUrl(data, util.mimeType(url));\n })\n .then(function (dataUrl) {\n return string.replace(urlAsRegex(url), '$1' + dataUrl + '$3');\n });\n\n function urlAsRegex(url) {\n return new RegExp('(url\\\\([\\'\"]?)(' + util.escape(url) + ')([\\'\"]?\\\\))', 'g');\n }\n }\n\n function inlineAll(string, baseUrl, get) {\n if (nothingToInline()) return Promise.resolve(string);\n\n return Promise.resolve(string)\n .then(readUrls)\n .then(function (urls) {\n var done = Promise.resolve(string);\n urls.forEach(function (url) {\n done = done.then(function (string) {\n return inline(string, url, baseUrl, get);\n });\n });\n return done;\n });\n\n function nothingToInline() {\n return !shouldProcess(string);\n }\n }\n }\n\n function newFontFaces() {\n return {\n resolveAll: resolveAll,\n impl: {\n readAll: readAll\n }\n };\n\n function resolveAll() {\n return readAll(document)\n .then(function (webFonts) {\n return Promise.all(\n webFonts.map(function (webFont) {\n return webFont.resolve();\n })\n );\n })\n .then(function (cssStrings) {\n return cssStrings.join('\\n');\n });\n }\n\n function readAll() {\n return Promise.resolve(util.asArray(document.styleSheets))\n .then(getCssRules)\n .then(selectWebFontRules)\n .then(function (rules) {\n return rules.map(newWebFont);\n });\n\n function selectWebFontRules(cssRules) {\n return cssRules\n .filter(function (rule) {\n return rule.type === CSSRule.FONT_FACE_RULE;\n })\n .filter(function (rule) {\n return inliner.shouldProcess(rule.style.getPropertyValue('src'));\n });\n }\n\n function getCssRules(styleSheets) {\n var cssRules = [];\n styleSheets.forEach(function (sheet) {\n try {\n util.asArray(sheet.cssRules || []).forEach(cssRules.push.bind(cssRules));\n } catch (e) {\n console.log('Error while reading CSS rules from ' + sheet.href, e.toString());\n }\n });\n return cssRules;\n }\n\n function newWebFont(webFontRule) {\n return {\n resolve: function resolve() {\n var baseUrl = (webFontRule.parentStyleSheet || {}).href;\n return inliner.inlineAll(webFontRule.cssText, baseUrl);\n },\n src: function () {\n return webFontRule.style.getPropertyValue('src');\n }\n };\n }\n }\n }\n\n function newImages() {\n return {\n inlineAll: inlineAll,\n impl: {\n newImage: newImage\n }\n };\n\n function newImage(element) {\n return {\n inline: inline\n };\n\n function inline(get) {\n if (util.isDataUrl(element.src)) return Promise.resolve();\n\n return Promise.resolve(element.src)\n .then(get || util.getAndEncode)\n .then(function (data) {\n return util.dataAsUrl(data, util.mimeType(element.src));\n })\n .then(function (dataUrl) {\n return new Promise(function (resolve, reject) {\n element.onload = resolve;\n element.onerror = reject;\n element.src = dataUrl;\n });\n });\n }\n }\n\n function inlineAll(node) {\n if (!(node instanceof Element)) return Promise.resolve(node);\n\n return inlineBackground(node)\n .then(function () {\n if (node instanceof HTMLImageElement)\n return newImage(node).inline();\n else\n return Promise.all(\n util.asArray(node.childNodes).map(function (child) {\n return inlineAll(child);\n })\n );\n });\n\n function inlineBackground(node) {\n var background = node.style.getPropertyValue('background');\n\n if (!background) return Promise.resolve(node);\n\n return inliner.inlineAll(background)\n .then(function (inlined) {\n node.style.setProperty(\n 'background',\n inlined,\n node.style.getPropertyPriority('background')\n );\n })\n .then(function () {\n return node;\n });\n }\n }\n }\n})(this);\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","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n ? Symbol.toStringTag\n : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nfunction addNumericSeparator(num, str) {\n if (\n num === Infinity\n || num === -Infinity\n || num !== num\n || (num && num > -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nvar quotes = {\n __proto__: null,\n 'double': '\"',\n single: \"'\"\n};\nvar quoteREs = {\n __proto__: null,\n 'double': /([\"\\\\])/g,\n single: /(['\\\\])/g\n};\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n return utilInspect(obj, { depth: maxDepth - depth });\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n if (mapForEach) {\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n }\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n if (setForEach) {\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n }\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n /* eslint-env browser */\n if (typeof window !== 'undefined' && obj === window) {\n return '{ [object Window] }';\n }\n if (\n (typeof globalThis !== 'undefined' && obj === globalThis)\n || (typeof global !== 'undefined' && obj === global)\n ) {\n return '{ [object globalThis] }';\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var style = opts.quoteStyle || defaultStyle;\n var quoteChar = quotes[style];\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n quoteRE.lastIndex = 0;\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","/*jshint node:true*/\n'use strict';\n\n/**\n * Replaces characters in strings that are illegal/unsafe for filenames.\n * Unsafe characters are either removed or replaced by a substitute set\n * in the optional `options` object.\n *\n * Illegal Characters on Various Operating Systems\n * / ? < > \\ : * | \"\n * https://kb.acronis.com/content/39790\n *\n * Unicode Control codes\n * C0 0x00-0x1f & C1 (0x80-0x9f)\n * http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n *\n * Reserved filenames on Unix-based systems (\".\", \"..\")\n * Reserved filenames in Windows (\"CON\", \"PRN\", \"AUX\", \"NUL\", \"COM1\",\n * \"COM2\", \"COM3\", \"COM4\", \"COM5\", \"COM6\", \"COM7\", \"COM8\", \"COM9\",\n * \"LPT1\", \"LPT2\", \"LPT3\", \"LPT4\", \"LPT5\", \"LPT6\", \"LPT7\", \"LPT8\", and\n * \"LPT9\") case-insesitively and with or without filename extensions.\n *\n * Capped at 255 characters in length.\n * http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs\n *\n * @param {String} input Original filename\n * @param {Object} options {replacement: String | Function }\n * @return {String} Sanitized filename\n */\n\nvar truncate = require(\"truncate-utf8-bytes\");\n\nvar illegalRe = /[\\/\\?<>\\\\:\\*\\|\"]/g;\nvar controlRe = /[\\x00-\\x1f\\x80-\\x9f]/g;\nvar reservedRe = /^\\.+$/;\nvar windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\\..*)?$/i;\nvar windowsTrailingRe = /[\\. ]+$/;\n\nfunction sanitize(input, replacement) {\n if (typeof input !== 'string') {\n throw new Error('Input must be string');\n }\n var sanitized = input\n .replace(illegalRe, replacement)\n .replace(controlRe, replacement)\n .replace(reservedRe, replacement)\n .replace(windowsReservedRe, replacement)\n .replace(windowsTrailingRe, replacement);\n return truncate(sanitized, 255);\n}\n\nmodule.exports = function (input, options) {\n var replacement = (options && options.replacement) || '';\n var output = sanitize(input, replacement);\n if (replacement === '') {\n return output;\n }\n return sanitize(output, '');\n};\n","\n;(function (name, root, factory) {\n if (typeof exports === 'object') {\n module.exports = factory()\n module.exports['default'] = factory()\n }\n /* istanbul ignore next */\n else if (typeof define === 'function' && define.amd) {\n define(factory)\n }\n else {\n root[name] = factory()\n }\n}('slugify', this, function () {\n var charMap = JSON.parse('{\"$\":\"dollar\",\"%\":\"percent\",\"&\":\"and\",\"<\":\"less\",\">\":\"greater\",\"|\":\"or\",\"¢\":\"cent\",\"£\":\"pound\",\"¤\":\"currency\",\"¥\":\"yen\",\"©\":\"(c)\",\"ª\":\"a\",\"®\":\"(r)\",\"º\":\"o\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"Æ\":\"AE\",\"Ç\":\"C\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"Ð\":\"D\",\"Ñ\":\"N\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"Ý\":\"Y\",\"Þ\":\"TH\",\"ß\":\"ss\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"æ\":\"ae\",\"ç\":\"c\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"ð\":\"d\",\"ñ\":\"n\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"ý\":\"y\",\"þ\":\"th\",\"ÿ\":\"y\",\"Ā\":\"A\",\"ā\":\"a\",\"Ă\":\"A\",\"ă\":\"a\",\"Ą\":\"A\",\"ą\":\"a\",\"Ć\":\"C\",\"ć\":\"c\",\"Č\":\"C\",\"č\":\"c\",\"Ď\":\"D\",\"ď\":\"d\",\"Đ\":\"DJ\",\"đ\":\"dj\",\"Ē\":\"E\",\"ē\":\"e\",\"Ė\":\"E\",\"ė\":\"e\",\"Ę\":\"e\",\"ę\":\"e\",\"Ě\":\"E\",\"ě\":\"e\",\"Ğ\":\"G\",\"ğ\":\"g\",\"Ģ\":\"G\",\"ģ\":\"g\",\"Ĩ\":\"I\",\"ĩ\":\"i\",\"Ī\":\"i\",\"ī\":\"i\",\"Į\":\"I\",\"į\":\"i\",\"İ\":\"I\",\"ı\":\"i\",\"Ķ\":\"k\",\"ķ\":\"k\",\"Ļ\":\"L\",\"ļ\":\"l\",\"Ľ\":\"L\",\"ľ\":\"l\",\"Ł\":\"L\",\"ł\":\"l\",\"Ń\":\"N\",\"ń\":\"n\",\"Ņ\":\"N\",\"ņ\":\"n\",\"Ň\":\"N\",\"ň\":\"n\",\"Ō\":\"O\",\"ō\":\"o\",\"Ő\":\"O\",\"ő\":\"o\",\"Œ\":\"OE\",\"œ\":\"oe\",\"Ŕ\":\"R\",\"ŕ\":\"r\",\"Ř\":\"R\",\"ř\":\"r\",\"Ś\":\"S\",\"ś\":\"s\",\"Ş\":\"S\",\"ş\":\"s\",\"Š\":\"S\",\"š\":\"s\",\"Ţ\":\"T\",\"ţ\":\"t\",\"Ť\":\"T\",\"ť\":\"t\",\"Ũ\":\"U\",\"ũ\":\"u\",\"Ū\":\"u\",\"ū\":\"u\",\"Ů\":\"U\",\"ů\":\"u\",\"Ű\":\"U\",\"ű\":\"u\",\"Ų\":\"U\",\"ų\":\"u\",\"Ŵ\":\"W\",\"ŵ\":\"w\",\"Ŷ\":\"Y\",\"ŷ\":\"y\",\"Ÿ\":\"Y\",\"Ź\":\"Z\",\"ź\":\"z\",\"Ż\":\"Z\",\"ż\":\"z\",\"Ž\":\"Z\",\"ž\":\"z\",\"Ə\":\"E\",\"ƒ\":\"f\",\"Ơ\":\"O\",\"ơ\":\"o\",\"Ư\":\"U\",\"ư\":\"u\",\"Lj\":\"LJ\",\"lj\":\"lj\",\"Nj\":\"NJ\",\"nj\":\"nj\",\"Ș\":\"S\",\"ș\":\"s\",\"Ț\":\"T\",\"ț\":\"t\",\"ə\":\"e\",\"˚\":\"o\",\"Ά\":\"A\",\"Έ\":\"E\",\"Ή\":\"H\",\"Ί\":\"I\",\"Ό\":\"O\",\"Ύ\":\"Y\",\"Ώ\":\"W\",\"ΐ\":\"i\",\"Α\":\"A\",\"Β\":\"B\",\"Γ\":\"G\",\"Δ\":\"D\",\"Ε\":\"E\",\"Ζ\":\"Z\",\"Η\":\"H\",\"Θ\":\"8\",\"Ι\":\"I\",\"Κ\":\"K\",\"Λ\":\"L\",\"Μ\":\"M\",\"Ν\":\"N\",\"Ξ\":\"3\",\"Ο\":\"O\",\"Π\":\"P\",\"Ρ\":\"R\",\"Σ\":\"S\",\"Τ\":\"T\",\"Υ\":\"Y\",\"Φ\":\"F\",\"Χ\":\"X\",\"Ψ\":\"PS\",\"Ω\":\"W\",\"Ϊ\":\"I\",\"Ϋ\":\"Y\",\"ά\":\"a\",\"έ\":\"e\",\"ή\":\"h\",\"ί\":\"i\",\"ΰ\":\"y\",\"α\":\"a\",\"β\":\"b\",\"γ\":\"g\",\"δ\":\"d\",\"ε\":\"e\",\"ζ\":\"z\",\"η\":\"h\",\"θ\":\"8\",\"ι\":\"i\",\"κ\":\"k\",\"λ\":\"l\",\"μ\":\"m\",\"ν\":\"n\",\"ξ\":\"3\",\"ο\":\"o\",\"π\":\"p\",\"ρ\":\"r\",\"ς\":\"s\",\"σ\":\"s\",\"τ\":\"t\",\"υ\":\"y\",\"φ\":\"f\",\"χ\":\"x\",\"ψ\":\"ps\",\"ω\":\"w\",\"ϊ\":\"i\",\"ϋ\":\"y\",\"ό\":\"o\",\"ύ\":\"y\",\"ώ\":\"w\",\"Ё\":\"Yo\",\"Ђ\":\"DJ\",\"Є\":\"Ye\",\"І\":\"I\",\"Ї\":\"Yi\",\"Ј\":\"J\",\"Љ\":\"LJ\",\"Њ\":\"NJ\",\"Ћ\":\"C\",\"Џ\":\"DZ\",\"А\":\"A\",\"Б\":\"B\",\"В\":\"V\",\"Г\":\"G\",\"Д\":\"D\",\"Е\":\"E\",\"Ж\":\"Zh\",\"З\":\"Z\",\"И\":\"I\",\"Й\":\"J\",\"К\":\"K\",\"Л\":\"L\",\"М\":\"M\",\"Н\":\"N\",\"О\":\"O\",\"П\":\"P\",\"Р\":\"R\",\"С\":\"S\",\"Т\":\"T\",\"У\":\"U\",\"Ф\":\"F\",\"Х\":\"H\",\"Ц\":\"C\",\"Ч\":\"Ch\",\"Ш\":\"Sh\",\"Щ\":\"Sh\",\"Ъ\":\"U\",\"Ы\":\"Y\",\"Ь\":\"\",\"Э\":\"E\",\"Ю\":\"Yu\",\"Я\":\"Ya\",\"а\":\"a\",\"б\":\"b\",\"в\":\"v\",\"г\":\"g\",\"д\":\"d\",\"е\":\"e\",\"ж\":\"zh\",\"з\":\"z\",\"и\":\"i\",\"й\":\"j\",\"к\":\"k\",\"л\":\"l\",\"м\":\"m\",\"н\":\"n\",\"о\":\"o\",\"п\":\"p\",\"р\":\"r\",\"с\":\"s\",\"т\":\"t\",\"у\":\"u\",\"ф\":\"f\",\"х\":\"h\",\"ц\":\"c\",\"ч\":\"ch\",\"ш\":\"sh\",\"щ\":\"sh\",\"ъ\":\"u\",\"ы\":\"y\",\"ь\":\"\",\"э\":\"e\",\"ю\":\"yu\",\"я\":\"ya\",\"ё\":\"yo\",\"ђ\":\"dj\",\"є\":\"ye\",\"і\":\"i\",\"ї\":\"yi\",\"ј\":\"j\",\"љ\":\"lj\",\"њ\":\"nj\",\"ћ\":\"c\",\"ѝ\":\"u\",\"џ\":\"dz\",\"Ґ\":\"G\",\"ґ\":\"g\",\"Ғ\":\"GH\",\"ғ\":\"gh\",\"Қ\":\"KH\",\"қ\":\"kh\",\"Ң\":\"NG\",\"ң\":\"ng\",\"Ү\":\"UE\",\"ү\":\"ue\",\"Ұ\":\"U\",\"ұ\":\"u\",\"Һ\":\"H\",\"һ\":\"h\",\"Ә\":\"AE\",\"ә\":\"ae\",\"Ө\":\"OE\",\"ө\":\"oe\",\"Ա\":\"A\",\"Բ\":\"B\",\"Գ\":\"G\",\"Դ\":\"D\",\"Ե\":\"E\",\"Զ\":\"Z\",\"Է\":\"E\\'\",\"Ը\":\"Y\\'\",\"Թ\":\"T\\'\",\"Ժ\":\"JH\",\"Ի\":\"I\",\"Լ\":\"L\",\"Խ\":\"X\",\"Ծ\":\"C\\'\",\"Կ\":\"K\",\"Հ\":\"H\",\"Ձ\":\"D\\'\",\"Ղ\":\"GH\",\"Ճ\":\"TW\",\"Մ\":\"M\",\"Յ\":\"Y\",\"Ն\":\"N\",\"Շ\":\"SH\",\"Չ\":\"CH\",\"Պ\":\"P\",\"Ջ\":\"J\",\"Ռ\":\"R\\'\",\"Ս\":\"S\",\"Վ\":\"V\",\"Տ\":\"T\",\"Ր\":\"R\",\"Ց\":\"C\",\"Փ\":\"P\\'\",\"Ք\":\"Q\\'\",\"Օ\":\"O\\'\\'\",\"Ֆ\":\"F\",\"և\":\"EV\",\"ء\":\"a\",\"آ\":\"aa\",\"أ\":\"a\",\"ؤ\":\"u\",\"إ\":\"i\",\"ئ\":\"e\",\"ا\":\"a\",\"ب\":\"b\",\"ة\":\"h\",\"ت\":\"t\",\"ث\":\"th\",\"ج\":\"j\",\"ح\":\"h\",\"خ\":\"kh\",\"د\":\"d\",\"ذ\":\"th\",\"ر\":\"r\",\"ز\":\"z\",\"س\":\"s\",\"ش\":\"sh\",\"ص\":\"s\",\"ض\":\"dh\",\"ط\":\"t\",\"ظ\":\"z\",\"ع\":\"a\",\"غ\":\"gh\",\"ف\":\"f\",\"ق\":\"q\",\"ك\":\"k\",\"ل\":\"l\",\"م\":\"m\",\"ن\":\"n\",\"ه\":\"h\",\"و\":\"w\",\"ى\":\"a\",\"ي\":\"y\",\"ً\":\"an\",\"ٌ\":\"on\",\"ٍ\":\"en\",\"َ\":\"a\",\"ُ\":\"u\",\"ِ\":\"e\",\"ْ\":\"\",\"٠\":\"0\",\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"پ\":\"p\",\"چ\":\"ch\",\"ژ\":\"zh\",\"ک\":\"k\",\"گ\":\"g\",\"ی\":\"y\",\"۰\":\"0\",\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\",\"฿\":\"baht\",\"ა\":\"a\",\"ბ\":\"b\",\"გ\":\"g\",\"დ\":\"d\",\"ე\":\"e\",\"ვ\":\"v\",\"ზ\":\"z\",\"თ\":\"t\",\"ი\":\"i\",\"კ\":\"k\",\"ლ\":\"l\",\"მ\":\"m\",\"ნ\":\"n\",\"ო\":\"o\",\"პ\":\"p\",\"ჟ\":\"zh\",\"რ\":\"r\",\"ს\":\"s\",\"ტ\":\"t\",\"უ\":\"u\",\"ფ\":\"f\",\"ქ\":\"k\",\"ღ\":\"gh\",\"ყ\":\"q\",\"შ\":\"sh\",\"ჩ\":\"ch\",\"ც\":\"ts\",\"ძ\":\"dz\",\"წ\":\"ts\",\"ჭ\":\"ch\",\"ხ\":\"kh\",\"ჯ\":\"j\",\"ჰ\":\"h\",\"Ṣ\":\"S\",\"ṣ\":\"s\",\"Ẁ\":\"W\",\"ẁ\":\"w\",\"Ẃ\":\"W\",\"ẃ\":\"w\",\"Ẅ\":\"W\",\"ẅ\":\"w\",\"ẞ\":\"SS\",\"Ạ\":\"A\",\"ạ\":\"a\",\"Ả\":\"A\",\"ả\":\"a\",\"Ấ\":\"A\",\"ấ\":\"a\",\"Ầ\":\"A\",\"ầ\":\"a\",\"Ẩ\":\"A\",\"ẩ\":\"a\",\"Ẫ\":\"A\",\"ẫ\":\"a\",\"Ậ\":\"A\",\"ậ\":\"a\",\"Ắ\":\"A\",\"ắ\":\"a\",\"Ằ\":\"A\",\"ằ\":\"a\",\"Ẳ\":\"A\",\"ẳ\":\"a\",\"Ẵ\":\"A\",\"ẵ\":\"a\",\"Ặ\":\"A\",\"ặ\":\"a\",\"Ẹ\":\"E\",\"ẹ\":\"e\",\"Ẻ\":\"E\",\"ẻ\":\"e\",\"Ẽ\":\"E\",\"ẽ\":\"e\",\"Ế\":\"E\",\"ế\":\"e\",\"Ề\":\"E\",\"ề\":\"e\",\"Ể\":\"E\",\"ể\":\"e\",\"Ễ\":\"E\",\"ễ\":\"e\",\"Ệ\":\"E\",\"ệ\":\"e\",\"Ỉ\":\"I\",\"ỉ\":\"i\",\"Ị\":\"I\",\"ị\":\"i\",\"Ọ\":\"O\",\"ọ\":\"o\",\"Ỏ\":\"O\",\"ỏ\":\"o\",\"Ố\":\"O\",\"ố\":\"o\",\"Ồ\":\"O\",\"ồ\":\"o\",\"Ổ\":\"O\",\"ổ\":\"o\",\"Ỗ\":\"O\",\"ỗ\":\"o\",\"Ộ\":\"O\",\"ộ\":\"o\",\"Ớ\":\"O\",\"ớ\":\"o\",\"Ờ\":\"O\",\"ờ\":\"o\",\"Ở\":\"O\",\"ở\":\"o\",\"Ỡ\":\"O\",\"ỡ\":\"o\",\"Ợ\":\"O\",\"ợ\":\"o\",\"Ụ\":\"U\",\"ụ\":\"u\",\"Ủ\":\"U\",\"ủ\":\"u\",\"Ứ\":\"U\",\"ứ\":\"u\",\"Ừ\":\"U\",\"ừ\":\"u\",\"Ử\":\"U\",\"ử\":\"u\",\"Ữ\":\"U\",\"ữ\":\"u\",\"Ự\":\"U\",\"ự\":\"u\",\"Ỳ\":\"Y\",\"ỳ\":\"y\",\"Ỵ\":\"Y\",\"ỵ\":\"y\",\"Ỷ\":\"Y\",\"ỷ\":\"y\",\"Ỹ\":\"Y\",\"ỹ\":\"y\",\"–\":\"-\",\"‘\":\"\\'\",\"’\":\"\\'\",\"“\":\"\\\\\\\"\",\"”\":\"\\\\\\\"\",\"„\":\"\\\\\\\"\",\"†\":\"+\",\"•\":\"*\",\"…\":\"...\",\"₠\":\"ecu\",\"₢\":\"cruzeiro\",\"₣\":\"french franc\",\"₤\":\"lira\",\"₥\":\"mill\",\"₦\":\"naira\",\"₧\":\"peseta\",\"₨\":\"rupee\",\"₩\":\"won\",\"₪\":\"new shequel\",\"₫\":\"dong\",\"€\":\"euro\",\"₭\":\"kip\",\"₮\":\"tugrik\",\"₯\":\"drachma\",\"₰\":\"penny\",\"₱\":\"peso\",\"₲\":\"guarani\",\"₳\":\"austral\",\"₴\":\"hryvnia\",\"₵\":\"cedi\",\"₸\":\"kazakhstani tenge\",\"₹\":\"indian rupee\",\"₺\":\"turkish lira\",\"₽\":\"russian ruble\",\"₿\":\"bitcoin\",\"℠\":\"sm\",\"™\":\"tm\",\"∂\":\"d\",\"∆\":\"delta\",\"∑\":\"sum\",\"∞\":\"infinity\",\"♥\":\"love\",\"元\":\"yuan\",\"円\":\"yen\",\"﷼\":\"rial\",\"ﻵ\":\"laa\",\"ﻷ\":\"laa\",\"ﻹ\":\"lai\",\"ﻻ\":\"la\"}')\n var locales = JSON.parse('{\"bg\":{\"Й\":\"Y\",\"Ц\":\"Ts\",\"Щ\":\"Sht\",\"Ъ\":\"A\",\"Ь\":\"Y\",\"й\":\"y\",\"ц\":\"ts\",\"щ\":\"sht\",\"ъ\":\"a\",\"ь\":\"y\"},\"de\":{\"Ä\":\"AE\",\"ä\":\"ae\",\"Ö\":\"OE\",\"ö\":\"oe\",\"Ü\":\"UE\",\"ü\":\"ue\",\"ß\":\"ss\",\"%\":\"prozent\",\"&\":\"und\",\"|\":\"oder\",\"∑\":\"summe\",\"∞\":\"unendlich\",\"♥\":\"liebe\"},\"es\":{\"%\":\"por ciento\",\"&\":\"y\",\"<\":\"menor que\",\">\":\"mayor que\",\"|\":\"o\",\"¢\":\"centavos\",\"£\":\"libras\",\"¤\":\"moneda\",\"₣\":\"francos\",\"∑\":\"suma\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"fr\":{\"%\":\"pourcent\",\"&\":\"et\",\"<\":\"plus petit\",\">\":\"plus grand\",\"|\":\"ou\",\"¢\":\"centime\",\"£\":\"livre\",\"¤\":\"devise\",\"₣\":\"franc\",\"∑\":\"somme\",\"∞\":\"infini\",\"♥\":\"amour\"},\"pt\":{\"%\":\"porcento\",\"&\":\"e\",\"<\":\"menor\",\">\":\"maior\",\"|\":\"ou\",\"¢\":\"centavo\",\"∑\":\"soma\",\"£\":\"libra\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"uk\":{\"И\":\"Y\",\"и\":\"y\",\"Й\":\"Y\",\"й\":\"y\",\"Ц\":\"Ts\",\"ц\":\"ts\",\"Х\":\"Kh\",\"х\":\"kh\",\"Щ\":\"Shch\",\"щ\":\"shch\",\"Г\":\"H\",\"г\":\"h\"},\"vi\":{\"Đ\":\"D\",\"đ\":\"d\"},\"da\":{\"Ø\":\"OE\",\"ø\":\"oe\",\"Å\":\"AA\",\"å\":\"aa\",\"%\":\"procent\",\"&\":\"og\",\"|\":\"eller\",\"$\":\"dollar\",\"<\":\"mindre end\",\">\":\"større end\"},\"nb\":{\"&\":\"og\",\"Å\":\"AA\",\"Æ\":\"AE\",\"Ø\":\"OE\",\"å\":\"aa\",\"æ\":\"ae\",\"ø\":\"oe\"},\"it\":{\"&\":\"e\"},\"nl\":{\"&\":\"en\"},\"sv\":{\"&\":\"och\",\"Å\":\"AA\",\"Ä\":\"AE\",\"Ö\":\"OE\",\"å\":\"aa\",\"ä\":\"ae\",\"ö\":\"oe\"}}')\n\n function replace (string, options) {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n options = (typeof options === 'string')\n ? {replacement: options}\n : options || {}\n\n var locale = locales[options.locale] || {}\n\n var replacement = options.replacement === undefined ? '-' : options.replacement\n\n var trim = options.trim === undefined ? true : options.trim\n\n var slug = string.normalize().split('')\n // replace characters based on charMap\n .reduce(function (result, ch) {\n var appendChar = locale[ch];\n if (appendChar === undefined) appendChar = charMap[ch];\n if (appendChar === undefined) appendChar = ch;\n if (appendChar === replacement) appendChar = ' ';\n return result + appendChar\n // remove not allowed characters\n .replace(options.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n }, '');\n\n if (options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '');\n }\n\n if (trim) {\n slug = slug.trim()\n }\n\n // Replace spaces with replacement character, treating multiple consecutive\n // spaces as a single space.\n slug = slug.replace(/\\s+/g, replacement);\n\n if (options.lower) {\n slug = slug.toLowerCase()\n }\n\n return slug\n }\n\n replace.extend = function (customMap) {\n Object.assign(charMap, customMap)\n }\n\n return replace\n}))\n","String.prototype.validateEmail = function () {\n return this.match(/\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*/) !== null;\n};\n\nString.prototype.ellipsify = function (maxWords) {\n var ret = this.split(\" \");\n\n if (ret.length > maxWords) ret = ret.splice(0, maxWords).join(\" \") + \"...\";\n else ret = ret.join(\" \");\n\n return ret;\n};\n\nif (!String.prototype.startsWith) {\n // IE hack\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.indexOf(searchString, position) === position;\n };\n}\n\nif (console && !console.trace) {\n console.trace = function () {\n console.log(\"CALL STACK\");\n console.log(new Error().stack);\n };\n}\n\n(function ($) {\n \"use strict\";\n\n /**\n * API invocation\n */\n function _invoke(path, d, c) {\n d = d ? d : {};\n\n $.ajax({\n cache: false,\n url: path,\n type: \"GET\",\n dataType: \"json\",\n data: d,\n success: function (r, s, x) {\n if (c) {\n c(r);\n }\n },\n error: function (x, s, e) {\n if (c) {\n c({\n success: false,\n message: e,\n });\n }\n },\n });\n }\n\n window.PHI = window.PHI || {};\n\n PHI.api = {\n PAGE_SIZE: 10,\n PAGE_SIZE_NRC_HUB: 10,\n PAGE_SIZE_EXPERTS: 30,\n URL_SEARCH_CASE_STUDIES: \"/wp-json/phi/v1/search_case_studies?\",\n URL_SEARCH_EXPERTS: \"/wp-json/phi/v1/search_experts?\",\n URL_SEARCH_BOARD: \"/wp-json/phi/v1/search_board?\",\n URL_SEARCH_IMPACT_STORIES: \"/wp-json/phi/v1/search_impact_stories?\",\n URL_SEARCH_NEWS: \"/wp-json/phi/v1/search_news?\",\n URL_SEARCH_STATE_DEVELOPMENTS:\n \"/wp-json/phi/v1/search_state_developments?\",\n URL_SEARCH_OPINION: \"/wp-json/phi/v1/search_opinion?\",\n URL_SEARCH_RESOURCES: \"/wp-json/phi/v1/search_resources?\",\n URL_SEARCH_RESOURCE_CENTER: \"/wp-json/phi/v1/resource_center/?\",\n URL_SEARCH: \"/wp-json/phi/v1/search/?\",\n DEBUG: true,\n handleReturn: function (d) {\n if (d) {\n if (d.success) {\n return true;\n } else {\n if (d.message) {\n alert(d.message);\n } else {\n alert(\"There was a problem processing your request.\");\n }\n }\n }\n\n return false;\n },\n getCaseStudies: function (\n keyword,\n from,\n to,\n service,\n state,\n offset,\n callback\n ) {\n keyword = keyword ? $.trim(keyword) : \"\";\n service = service ? $.trim(service) : null;\n from = from ? $.trim(from) : null;\n to = to ? $.trim(to) : null;\n state = state ? $.trim(state) : null;\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n\n if (keyword.length > 2)\n params.push(\"search=\" + encodeURIComponent(keyword));\n\n if (service) params.push(\"service=\" + encodeURIComponent(service));\n\n if (from) params.push(\"from=\" + encodeURIComponent(from));\n\n if (to) params.push(\"to=\" + encodeURIComponent(to));\n\n if (state) params.push(\"state=\" + encodeURIComponent(state));\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=\" + PHI.api.PAGE_SIZE);\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(\n PHI.api.URL_SEARCH_CASE_STUDIES + params.join(\"&\"),\n null,\n callback\n );\n },\n getExperts: function (keyword, expertise, offset, callback) {\n keyword = keyword ? $.trim(keyword) : \"\";\n expertise = expertise ? $.trim(expertise) : null;\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n\n if (keyword.length > 2)\n params.push(\"search=\" + encodeURIComponent(keyword));\n\n if (expertise)\n params.push(\"expertise=\" + encodeURIComponent(expertise));\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=\" + PHI.api.PAGE_SIZE_EXPERTS);\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(\n PHI.api.URL_SEARCH_EXPERTS + params.join(\"&\"),\n null,\n callback\n );\n },\n getBoard: function (offset, callback) {\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=1024\");\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(\n PHI.api.URL_SEARCH_BOARD + params.join(\"&\"),\n null,\n callback\n );\n },\n getImpactStories: function (\n keyword,\n from,\n to,\n service,\n state,\n offset,\n callback\n ) {\n keyword = keyword ? $.trim(keyword) : \"\";\n service = service ? $.trim(service) : null;\n from = from ? $.trim(from) : null;\n to = to ? $.trim(to) : null;\n state = state ? $.trim(state) : null;\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n\n if (keyword.length > 2)\n params.push(\"search=\" + encodeURIComponent(keyword));\n\n if (service) params.push(\"service=\" + encodeURIComponent(service));\n\n if (from) params.push(\"from=\" + encodeURIComponent(from));\n\n if (to) params.push(\"to=\" + encodeURIComponent(to));\n\n if (state) params.push(\"state=\" + encodeURIComponent(state));\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=\" + PHI.api.PAGE_SIZE);\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(\n PHI.api.URL_SEARCH_IMPACT_STORIES + params.join(\"&\"),\n null,\n callback\n );\n },\n getNews: function (\n keyword,\n type,\n from,\n to,\n issue,\n service,\n state,\n offset,\n callback\n ) {\n keyword = keyword ? $.trim(keyword) : \"\";\n type = type ? $.trim(type) : null;\n from = from ? $.trim(from) : null;\n to = to ? $.trim(to) : null;\n issue = issue ? $.trim(issue) : null;\n service = service ? $.trim(service) : null;\n state = state ? $.trim(state) : null;\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n\n if (keyword.length > 2)\n params.push(\"search=\" + encodeURIComponent(keyword));\n\n if (type) params.push(\"type=\" + encodeURIComponent(type));\n\n if (from) params.push(\"from=\" + encodeURIComponent(from));\n\n if (to) params.push(\"to=\" + encodeURIComponent(to));\n\n if (issue) params.push(\"issue=\" + encodeURIComponent(issue));\n\n if (service) params.push(\"service=\" + encodeURIComponent(service));\n\n if (state) params.push(\"state=\" + encodeURIComponent(state));\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=\" + PHI.api.PAGE_SIZE);\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(PHI.api.URL_SEARCH_NEWS + params.join(\"&\"), null, callback);\n },\n getStateDevelopments: function (\n keyword,\n from,\n to,\n issue,\n service,\n state,\n offset,\n callback\n ) {\n keyword = keyword ? $.trim(keyword) : \"\";\n from = from ? $.trim(from) : null;\n to = to ? $.trim(to) : null;\n issue = issue ? $.trim(issue) : null;\n service = service ? $.trim(service) : null;\n state = state ? $.trim(state) : null;\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n\n if (keyword.length > 2)\n params.push(\"search=\" + encodeURIComponent(keyword));\n\n if (from) params.push(\"from=\" + encodeURIComponent(from));\n\n if (to) params.push(\"to=\" + encodeURIComponent(to));\n\n if (issue) params.push(\"issue=\" + encodeURIComponent(issue));\n\n if (service) params.push(\"service=\" + encodeURIComponent(service));\n\n if (state) params.push(\"state=\" + encodeURIComponent(state));\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=\" + PHI.api.PAGE_SIZE);\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(\n PHI.api.URL_SEARCH_STATE_DEVELOPMENTS + params.join(\"&\"),\n null,\n callback\n );\n },\n getOpinion: function (\n keyword,\n from,\n to,\n issue,\n service,\n state,\n offset,\n callback\n ) {\n keyword = keyword ? $.trim(keyword) : \"\";\n from = from ? $.trim(from) : null;\n to = to ? $.trim(to) : null;\n issue = issue ? $.trim(issue) : null;\n service = service ? $.trim(service) : null;\n state = state ? $.trim(state) : null;\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n\n if (keyword.length > 2)\n params.push(\"search=\" + encodeURIComponent(keyword));\n\n if (from) params.push(\"from=\" + encodeURIComponent(from));\n\n if (to) params.push(\"to=\" + encodeURIComponent(to));\n\n if (issue) params.push(\"issue=\" + encodeURIComponent(issue));\n\n if (service) params.push(\"service=\" + encodeURIComponent(service));\n\n if (state) params.push(\"state=\" + encodeURIComponent(state));\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=\" + PHI.api.PAGE_SIZE);\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(\n PHI.api.URL_SEARCH_OPINION + params.join(\"&\"),\n null,\n callback\n );\n },\n getResources: function (\n keyword,\n type,\n issue,\n from,\n to,\n expert,\n state,\n phi_authored,\n offset,\n callback\n ) {\n keyword = keyword ? $.trim(keyword) : \"\";\n type = type ? $.trim(type) : null;\n issue = issue ? $.trim(issue) : null;\n expert = expert ? $.trim(expert) : null;\n state = state ? $.trim(state) : null;\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n\n if (keyword.length > 2)\n params.push(\"search=\" + encodeURIComponent(keyword));\n\n if (type) params.push(\"type=\" + encodeURIComponent(type));\n\n if (issue) params.push(\"issue=\" + encodeURIComponent(issue));\n\n if (expert) params.push(\"expert=\" + encodeURIComponent(expert));\n\n if (state) params.push(\"state=\" + encodeURIComponent(state));\n\n if (phi_authored !== null && phi_authored)\n params.push(\"phi_authored=\" + phi_authored);\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=\" + PHI.api.PAGE_SIZE);\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(\n PHI.api.URL_SEARCH_RESOURCES + params.join(\"&\"),\n null,\n callback\n );\n },\n getWorkers: function (state, ocсupation, topic, offset, callback) {\n state = state ? $.trim(state) : \"\";\n ocсupation = ocсupation ? $.trim(ocсupation) : null;\n topic = topic ? $.trim(topic) : null;\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n if (state) params.push(\"state=\" + encodeURIComponent(state));\n\n if (oсcupation)\n params.push(\"ocсupation=\" + encodeURIComponent(ocсupation));\n\n if (topic) params.push(\"topic=\" + encodeURIComponent(topic));\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=\" + PHI.api.PAGE_SIZE);\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(\n PHI.api.URL_SEARCH_RESOURCES + params.join(\"&\"),\n null,\n callback\n );\n },\n\n search: function (\n search,\n type,\n service,\n from,\n to,\n expert,\n state,\n issue,\n client,\n partner,\n offset,\n callback\n ) {\n search = search ? $.trim(search) : \"\";\n type = type ? $.trim(type) : \"\";\n service = service ? $.trim(service) : null;\n from = from ? $.trim(from) : null;\n to = to ? $.trim(to) : null;\n expert = expert ? $.trim(expert) : null;\n state = state ? $.trim(state) : null;\n issue = issue ? $.trim(issue) : null;\n client = client ? $.trim(client) : null;\n partner = issue ? $.trim(partner) : null;\n offset = parseInt(offset ? $.trim(offset) : \"0\", 10);\n\n if (isNaN(offset)) {\n offset = 0;\n }\n\n var params = [];\n\n if (search.length > 2)\n params.push(\"search=\" + encodeURIComponent(search));\n\n if (type) params.push(\"type=\" + encodeURIComponent(type));\n\n if (service) params.push(\"service=\" + encodeURIComponent(service));\n\n if (from) params.push(\"from=\" + encodeURIComponent(from));\n\n if (to) params.push(\"to=\" + encodeURIComponent(to));\n\n if (expert) params.push(\"expert=\" + encodeURIComponent(expert));\n\n if (state) params.push(\"state=\" + encodeURIComponent(state));\n\n if (issue) params.push(\"issue=\" + encodeURIComponent(issue));\n\n if (client) params.push(\"client=\" + encodeURIComponent(client));\n\n if (partner) params.push(\"partner=\" + encodeURIComponent(partner));\n\n params.push(\"offset=\" + offset);\n params.push(\"page_size=\" + PHI.api.PAGE_SIZE);\n\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(PHI.api.URL_SEARCH + params.join(\"&\"), null, callback);\n },\n\n getResourceCenter: (options = {}, callback) => {\n var params = [];\n options.offset = options.offset ? options.offset : 0;\n options.page_size = options.page_size ? options.page_size : 10;\n Object.keys(options).forEach((key) =>\n params.push(key + \"=\" + encodeURIComponent(options[key]))\n );\n if (PHI.api.DEBUG) params.push(\"debug=1\");\n\n _invoke(\n PHI.api.URL_SEARCH_RESOURCE_CENTER + params.join(\"&\"),\n null,\n callback\n );\n },\n };\n\n PHI.google = {\n trackOutbound: function (e) {\n // bail if no google analytics\n if (!gtag) {\n return;\n }\n\n var who = e.currentTarget;\n\n if (\n (who.hostname &&\n who.hostname !== \"#\" &&\n who.hostname !== window.location.hostname &&\n who.hostname !== \"wordpress.org\") ||\n \"mailto:\" === who.protocol\n ) {\n gtag(\"event\", \"click\", {\n event_category: \"Outbound Link\",\n event_label: who.href,\n value: 1,\n transport_type: \"beacon\",\n });\n }\n },\n };\n\n PHI.Pager = function () {\n var PAGES_TO_SHOW = 5,\n _offset = 0,\n _page = 1,\n _totalPages = 0,\n _container = null,\n _anchor = null,\n _callback = null;\n\n this.offset = function () {\n return _offset;\n };\n\n this.reset = function () {\n _offset = 0;\n _page = 1;\n _totalPages = 0;\n };\n\n this.init = function (pagerSelector, anchorSelector, pagingCallback) {\n this.reset();\n\n if (!pagerSelector) throw \"pageSelector is required\";\n\n if (!pagingCallback) throw \"pagingCallback is required\";\n\n _container = $(pagerSelector);\n\n if (anchorSelector) {\n _anchor = $(anchorSelector);\n\n if (0 === _anchor.length) _anchor = null;\n }\n\n _callback = pagingCallback;\n };\n\n function _goto(who) {\n var page = $(who).data(\"page\");\n\n _page = page;\n _offset = (_page - 1) * PHI.api.PAGE_SIZE;\n\n if (_anchor) {\n $(\"html,body\").animate(\n {\n scrollTop: _anchor.offset().top - 64,\n },\n 250,\n function () {\n _callback({\n type: \"pagination\",\n target: who,\n });\n }\n );\n\n return;\n }\n\n _callback({\n type: \"pagination\",\n target: who,\n });\n }\n\n this.render = function (total_found, page_size) {\n if (total_found != 0) {\n _totalPages = Math.ceil(\n total_found / (page_size ? page_size : PHI.api.PAGE_SIZE)\n );\n } else {\n _totalPages = 0;\n }\n\n $(\".list-page-pagination-nav\").unbind(\"click\");\n\n _container.empty();\n\n if (0 === total_found) return;\n\n if (1 === _totalPages) return;\n\n var showNav = _totalPages > PAGES_TO_SHOW,\n startPage = 1;\n\n while (startPage <= _totalPages) {\n if (_page < startPage + PAGES_TO_SHOW) break;\n\n if (_page === startPage) break;\n\n startPage += PAGES_TO_SHOW;\n }\n\n var endPage = Math.min(_totalPages, startPage + PAGES_TO_SHOW - 1);\n\n if (endPage === _totalPages)\n startPage = Math.max(1, endPage - PAGES_TO_SHOW + 1);\n\n var jumpPrevPage = Math.max(1, startPage - PAGES_TO_SHOW),\n jumpNextPage = Math.min(_totalPages, startPage + PAGES_TO_SHOW);\n\n if (showNav) {\n _container.append(\n $(\n '\"First'\n )\n );\n _container.append(\n $(\n '\"Previous'\n )\n );\n }\n\n var a = null;\n\n for (var p = startPage; p <= endPage; p++) {\n a = $(\n '' +\n p +\n \"\"\n );\n\n if (p === _page)\n a.addClass(\"list-page-pagination-nav--selected\");\n\n _container.append(a);\n }\n\n if (showNav) {\n _container.append(\n $(\n '\"Next'\n )\n );\n _container.append(\n $(\n '\"Last'\n )\n );\n }\n\n $(\".list-page-pagination-nav\").click(function (e) {\n e.preventDefault();\n\n _goto($(this));\n });\n };\n\n return this;\n };\n})(jQuery);\n","(function($) {\n \"use strict\";\n\n window.CONSTUTIL = window.CONSTUTIL || {};\n\n CONSTUTIL.utilities = {\n constructiveEqualHeight: function() {\n var equalHeightParents = $('.constructive-equal-height-parent');\n\n $.each(equalHeightParents, function(index) {\n var equalHeightParent = $(this),\n equalHeightChildren = equalHeightParent.find('.constructive-equal-height-child'),\n maxHeight = 0;\n $.each(equalHeightChildren, function(index) {\n var child = $(this),\n ruler = child.find('div.ruler');\n if ( ruler.length === 0 ) {\n ruler = child.wrapInner( \"
\");\n }\n var childHeight = ruler.outerHeight(true);\n if (childHeight >= maxHeight) {\n maxHeight = childHeight;\n }\n });\n equalHeightChildren.css({\n 'height': maxHeight + 'px',\n });\n });\n }\n };\n\n})(jQuery);\n","import Cookies from 'js-cookie'\n;(function($) {\n 'use strict'\n\n window.PHI = window.PHI || {}\n\n PHI.DATE_FORMAT = 'YYYY-MM-DD'\n PHI.FILTER_MIN_DATE = new Date(2012, 0, 1)\n PHI.TITLE_MAX_WORDS = 12\n PHI.SHORT_DESCRIPTION_MAX_WORDS = 25\n\n PHI.validate_date = function(d) {\n return moment(d, PHI.DATE_FORMAT, true).isValid()\n }\n\n // validate a date text box with momentjs\n $.fn.validateDate = function() {\n return PHI.validate_date($(this).val())\n }\n\n PHI.get_title = function(item) {\n if (item.short_title) return item.short_title\n\n return item.title.ellipsify(PHI.TITLE_MAX_WORDS)\n }\n\n PHI.get_short_description = function(item) {\n if (!item.short_description) return ''\n\n return item.short_description.ellipsify(PHI.SHORT_DESCRIPTION_MAX_WORDS)\n }\n\n function _toggleNavigation(e) {\n e.preventDefault()\n\n var nav = $('.main-nav-container'),\n content = $('.site-content-container'),\n expandButton = $('.nav-expand'),\n collapseButton = $('.nav-collapse')\n\n if (nav.hasClass('main-nav-container--collapsed')) {\n nav.removeClass('main-nav-container--collapsed')\n content.removeClass('site-content-container--nav-collapsed')\n expandButton.hide()\n collapseButton.show()\n } else {\n nav.addClass('main-nav-container--collapsed')\n content.addClass('site-content-container--nav-collapsed')\n expandButton.show()\n collapseButton.hide()\n }\n\n return false\n }\n\n function _toggleChildrenMenu(e) {\n var clickedMenuItem = $(this),\n parentListItem = clickedMenuItem.parent('li'),\n subMenu = parentListItem.find('ul.sub-menu')\n\n // console.log('PARENT',parentListItem);\n\n if (subMenu.length > 0) {\n e.preventDefault()\n\n if (subMenu.hasClass('is-active')) {\n parentListItem.removeClass('is-active')\n subMenu.removeClass('is-active').css({\n height: '0',\n 'margin-top': '0'\n })\n } else {\n var listItems = subMenu.find('li'),\n otherParentListItems = parentListItem.siblings('li'),\n totalHeight = 0\n // console.log('LIST ITEMS', listItems);\n $.each(otherParentListItems, function() {\n var otherParentListItem = $(this),\n otherSubMenu = otherParentListItem.find('ul.sub-menu')\n otherParentListItem.removeClass('is-active')\n otherSubMenu.removeClass('is-active').css({\n height: '0',\n 'margin-top': '0'\n })\n })\n\n $.each(listItems, function() {\n // console.log('HEIGHT', $(this).find('a').text(),$(this).outerHeight());\n totalHeight = totalHeight + $(this).outerHeight()\n })\n\n parentListItem.addClass('is-active')\n subMenu.addClass('is-active').css({\n height: totalHeight + 'px',\n 'margin-top': '10px'\n })\n }\n // Check for height\n // setTimeout( function() {\n // _sidebarScrollsDetection();\n // }, 500);\n } // End if has subMenu\n }\n\n function _toggleNavigationResize() {\n var $window = $(window),\n windowWidth = $window.outerWidth(true),\n nav = $('.main-nav-container'),\n expandButton = $('.nav-expand'),\n collapseButton = $('.nav-collapse'),\n content = $('.site-content-container'),\n mobileWidthThreshold = 1200\n\n if (windowWidth <= mobileWidthThreshold) {\n nav.addClass('main-nav-container--collapsed')\n content.addClass('site-content-container--nav-collapsed')\n expandButton.show()\n collapseButton.hide()\n } else if (windowWidth > mobileWidthThreshold) {\n nav.removeClass('main-nav-container--collapsed')\n content.removeClass('site-content-container--nav-collapsed')\n expandButton.hide()\n collapseButton.show()\n }\n }\n\n function _sidebarScrollsDetection() {\n var navSidebar = $('.main-nav-container .main-nav-menus'),\n navSidebarHeight = navSidebar.height(),\n navSidebarRuler = $('.main-nav-container .main-nav-menus-ruler'),\n navSidebarRulerHeight = navSidebarRuler.height()\n\n if (navSidebarHeight < navSidebarRulerHeight) {\n navSidebar.addClass('is-scrolling')\n } else {\n navSidebar.removeClass('is-scrolling')\n }\n }\n\n function _sidebarScrollButtons() {\n var sidebarMenuScrollButtonUp = $('.scroll-me button.scroll-up'),\n sidebarMenuScrollButtonDown = $('.scroll-me button.scroll-down'),\n sidebarMenu = $('.main-nav-container .main-nav-menus')\n\n sidebarMenuScrollButtonUp.on({\n 'mousedown touchstart': function() {\n sidebarMenu.animate(\n {\n scrollTop: 0\n },\n 2000\n )\n },\n 'mouseup touchend': function() {\n sidebarMenu.stop(true)\n }\n })\n\n sidebarMenuScrollButtonDown.on({\n 'mousedown touchstart': function() {\n sidebarMenu.animate(\n {\n scrollTop: sidebarMenu[0].scrollHeight\n },\n 2000\n )\n },\n 'mouseup touchend': function() {\n sidebarMenu.stop(true)\n }\n })\n }\n\n function _setup_dropdowns() {\n $('#hub-page-filter-expert-expertise')\n .select2()\n .next()\n .css('width', 'auto')\n\n $('.hub-page-policy .filter-resources select').select2()\n\n $('.list-page-filter select').select2()\n\n $('.wpcf7 select').select2()\n\n $('.list-page-filter-more-toggle a').click(function(e) {\n e.preventDefault()\n\n var t = $(this),\n exp = t.hasClass('list-page-filter-more-toggle--expanded')\n\n if (exp) {\n $('.list-page-filter-more').hide()\n t.removeClass('list-page-filter-more-toggle--expanded')\n } else {\n $('.list-page-filter-more').show()\n t.addClass('list-page-filter-more-toggle--expanded')\n }\n })\n\n $('.search-modal-filter-more-toggle a').click(function(e) {\n e.preventDefault()\n\n var t = $(this),\n exp = t.hasClass('search-modal-filter-more-toggle--expanded')\n\n if (exp) {\n $('.search-modal-filter-more').hide()\n t.removeClass('search-modal-filter-more-toggle--expanded')\n } else {\n $('.search-modal-filter-more').show()\n t.addClass('search-modal-filter-more-toggle--expanded')\n }\n })\n }\n\n function _setup_date_pickers() {\n $('.list-page-filter-date').pikaday({\n format: PHI.DATE_FORMAT,\n firstDay: 1,\n minDate: PHI.FILTER_MIN_DATE,\n maxDate: new Date(),\n yearRange: [\n PHI.FILTER_MIN_DATE.getFullYear(),\n new Date().getFullYear()\n ]\n })\n }\n\n function _setup_donate_buttons() {\n // passed via `wp_localize_script()` as JSON-encoded string\n const donateLink = phi_theme.global_donate_link;\n\n if ( ! donateLink.url ) return;\n\n // dynamically update all donate links\n //\n // decided not to update inner text, just in\n // case it inadvertantly overwrites some HTML\n $('.donate-button, a[href$=\"#donate\"]')\n .attr('href', donateLink.url)\n .attr('target', donateLink.target);\n }\n\n function _setup_outbound_target() {\n $.each($('a'), function(i, v) {\n if (\n v.hostname &&\n v.hostname !== '#' &&\n v.hostname !== window.location.hostname\n ) {\n // make sure external links open in a new window, and mitigate\n // tabnabbing\n $(v)\n .prop('target', '_blank')\n .prop('rel', 'noopener')\n }\n })\n }\n\n function _setup_nice_quoted() {\n var haveAny = false\n\n $.each($('.detail-page-content__body-content p'), function(i, v) {\n var me = $(v)\n\n if (/^[\"“]/.test(me.text())) {\n me.addClass('starts-with-quote')\n haveAny = true\n }\n })\n\n if (haveAny) {\n $('.detail-page-content__body')\n .css('overflow', 'visible')\n .parent()\n .css('overflow', 'visible')\n }\n }\n\n $(function() {\n $('a.nav-collapse, a.nav-expand').click(_toggleNavigation)\n\n $('div.main-nav-menus li a').click(_toggleChildrenMenu)\n\n _toggleNavigationResize()\n // _sidebarScrollsDetection();\n // _sidebarScrollButtons();\n\n _setup_dropdowns()\n _setup_date_pickers()\n _setup_donate_buttons()\n _setup_nice_quoted()\n _setup_outbound_target()\n\n // track outbound links\n $('a').click(PHI.google.trackOutbound)\n })\n\n $(document).ready(function() {\n // Keep transitions from running before doc is ready\n $('body').addClass('animation-ready')\n if (!getCookie('STYXKEY_subscribebar') && $('.subscribe-bar').length > 0)\n {\n $('body').addClass('show-subscribe-bar')\n }\n CONSTUTIL.utilities.constructiveEqualHeight()\n })\n\n $(window).resize(function() {\n _toggleNavigationResize()\n _sidebarScrollsDetection();\n CONSTUTIL.utilities.constructiveEqualHeight()\n })\n\n function createCookie(name, value, days) {\n const domains = [\n '172.28.128.3',\n 'dev-phinew.pantheonsite.io',\n 'test-phinew.pantheonsite.io',\n 'live-phinew.pantheonsite.io',\n 'phinew.test',\n 'phinational.org'\n ]\n for (var i = 0; i < domains.length; i++) {\n if (days) {\n var date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n var expires = '; expires=' + date.toGMTString()\n } else var expires = ''\n document.cookie =\n name + '=' + value + expires + '; path=/; domain=' + domains[i]\n }\n }\n\n function getCookie(name) {\n var dc = document.cookie;\n var prefix = name + \"=\";\n var begin = dc.indexOf(\"; \" + prefix);\n if (begin == -1) {\n begin = dc.indexOf(prefix);\n if (begin != 0) return null;\n }\n else\n {\n begin += 2;\n var end = document.cookie.indexOf(\";\", begin);\n if (end == -1) {\n end = dc.length;\n }\n }\n // because unescape has been deprecated, replaced with decodeURI\n //return unescape(dc.substring(begin + prefix.length, end));\n return decodeURI(dc.substring(begin + prefix.length, end));\n }\n\n function hideSubscribeBar() {\n $('body').removeClass('show-subscribe-bar')\n }\n\n $('.subscribe-bar__close').click(function() {\n createCookie('STYXKEY_subscribebar', 'seen', '14')\n hideSubscribeBar()\n })\n})(jQuery)\n","/*! js-cookie v3.0.5 | MIT */\n;\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n var current = global.Cookies;\n var exports = global.Cookies = factory();\n exports.noConflict = function () { global.Cookies = current; return exports; };\n })());\n})(this, (function () { 'use strict';\n\n /* eslint-disable no-var */\n function assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n }\n /* eslint-enable no-var */\n\n /* eslint-disable no-var */\n var defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n };\n /* eslint-enable no-var */\n\n /* eslint-disable no-var */\n\n function init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n }\n\n var api = init(defaultConverter, { path: '/' });\n /* eslint-enable no-var */\n\n return api;\n\n}));\n","(function($) {\n \"use strict\";\n\n var _pager = new PHI.Pager();\n\n function _got_results(d) {\n $('.loading-overlay').hide();\n\n if (!PHI.api.handleReturn(d)) return;\n\n var items = d.data ? d.data.items : [],\n total = d.data ? d.data.total_found : 0,\n pages = Math.ceil(total / PHI.api.PAGE_SIZE),\n list = $('#results-list');\n\n list.empty();\n\n _pager.render(total);\n\n if (0 === total) {\n $('#results-counts').text('No items found');\n\n return;\n }\n\n var local_last = _pager.offset() + PHI.api.PAGE_SIZE;\n\n if (local_last > total) local_last = total;\n\n $('#results-counts').text((_pager.offset() + 1) + '–' + local_last + ' of ' + total);\n\n var item = null,\n art = null,\n div = null,\n a = null,\n img = null,\n type = null,\n kick = null,\n h2 = null,\n span = null;\n\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n\n art = $('
');\n\n // if (item.featured_image_url || item.headshot_url) {\n // div = $('
');\n // a = $('');\n\n // if (item.headshot_url) img = $('');\n // else if (item.featured_image_url) img = $('');\n\n // img.prop('alt', item.title);\n\n // a.append(img);\n // div.append(a);\n // art.append(div);\n // }\n\n div = $('
');\n type = '';\n\n switch (item.type) {\n case 'affiliate': type = 'New York City System '; break;\n case 'case_study': type = 'Case Study '; break;\n case 'client': type = 'Client '; break;\n case 'expert': type = 'Expert '; break;\n case 'impact_story': type = 'Impact Story '; break;\n case 'news': type = 'News '; break;\n case 'state_development': type = 'Advocacy '; break;\n case 'partner': type = 'Partner '; break;\n case 'post': type = 'Opinion '; break;\n case 'resource': type = 'Resource '; break;\n case 'supporter': type = 'Supporter '; break;\n case 'job': type = 'Job Opening'; break;\n case 'issue': type = 'Issue '; break;\n case 'service': type = 'Service '; break;\n\n default: type = 'Page'; break;\n }\n\n if (item.type !== 'state_development' && item.subtype) type = item.subtype + ' ';\n\n if (type) {\n kick = $('');\n\n if ('state_development' === item.type && item.states && item.states.length > 0) type += ' - ' + item.states[0];\n\n kick.html(type);\n\n div.append(kick);\n }\n\n kick = $('');\n\n if (item.author) kick.html('by ' + item.author);\n else if (item.contributing_authors) kick.html('by ' + item.contributing_authors);\n\n if (item.author || item.contributing_authors) div.append(kick);\n\n if (item.type !== 'expert') {\n kick = $('');\n\n if (item.media_outlet) kick.text(item.published_formatted + ' - ' + item.media_outlet);\n else kick.text(item.published_formatted);\n }\n\n div.append(kick);\n\n art.append(div);\n\n h2 = $('

');\n a = $('');\n a.prop('title', item.title);\n a.text(PHI.get_title(item));\n h2.append(a);\n art.append(h2);\n\n if (item.job_title) {\n div = $('
');\n span = $('');\n span.html(item.job_title);\n div.append(span);\n art.append(div);\n } else if (item.short_description) {\n div = $('
');\n div.text(PHI.get_short_description(item));\n art.append(div);\n } else if (item.expertise && item.expertise.length) {\n div = $('
');\n div.html('Expert In: ' + item.expertise.join(', '));\n art.append(div);\n } else h2.addClass('no-short-description');\n\n list.append(art);\n }\n }\n\n function _search_filter(e) {\n var offset = 0;\n\n if (e) {\n if (e.params && 'unselect' === e.params._type) {\n $(e.target).val('');\n _pager.reset();\n } else if ('pagination' === e.type) offset = _pager.offset();\n else _pager.reset();\n } else _pager.reset();\n\n var search = $('#keyword').val(),\n type = $('#filter-type option:selected').val(),\n service = $('#filter-service option:selected').text(),\n from = $('#date-from').val(),\n to = $('#date-to').val(),\n expert = $('#filter-expert option:selected').text(),\n state = $('#filter-state option:selected').text(),\n issue = $('#filter-issue option:selected').text(),\n client = $('#filter-client option:selected').text(),\n partner = $('#filter-partner option:selected').text();\n\n $('.loading-overlay').show();\n\n PHI.api.search(search, type, service, from, to, expert, state, issue, client, partner, offset, _got_results);\n }\n\n function _process_incoming() {\n var hash = window.location.hash;\n\n if (!hash) return false;\n\n var p = null,\n k = null,\n t = null,\n f = null,\n advanced = false;\n\n hash = hash.substring(1);\n hash = hash.split('&');\n\n for (var i = 0; i < hash.length; i++) {\n p = hash[i].split('=');\n\n if (2 === p.length) {\n k = p[0];\n t = decodeURIComponent(p[1]);\n\n if ('search' === k) {\n $('#keyword').val(t);\n\n continue;\n }\n\n if ('from' === k) {\n if (PHI.validate_date(t)) {\n $('#date-from').val(t);\n advanced = true;\n }\n\n continue;\n }\n\n if ('to' === k) {\n if (PHI.validate_date(t)) {\n $('#date-to').val(t);\n advanced = true;\n }\n\n continue;\n }\n\n f = $('#filter-' + k);\n\n if (f.length) {\n var val = f.find('option:contains(\"' + t + '\")').val();\n\n if (!val) val = f.find('option[value=\"' + t + '\"]').val();\n\n if (val) {\n f.val(val);\n f.trigger('change');\n\n if (!('type' === k || 'service' === k)) advanced = true;\n }\n }\n }\n }\n\n if (advanced) {\n $('.list-page-filter-more').show();\n $('.list-page-filter-more-toggle a').addClass('list-page-filter-more-toggle--expanded');\n }\n\n _search_filter(null);\n\n return true;\n }\n\n $(function() {\n $('#search-modal-search').click(function(e) {\n e.preventDefault();\n\n var q = [];\n\n $('#search-modal-keyword').val($.trim($('#search-modal-keyword').val()));\n\n if ($('#search-modal-keyword').val()) q.push('search=' + encodeURIComponent($('#search-modal-keyword').val()));\n\n $('#search-modal-date-from').val($.trim($('#search-modal-date-from').val()));\n\n if ($('#search-modal-date-from').val()) {\n if (!$('#search-modal-date-from').validateDate()) {\n alert('Please enter a valid from date.');\n $('#search-modal-date-from').focus();\n\n return false;\n }\n\n q.push('from=' + encodeURIComponent($('#search-modal-date-from').val()));\n }\n\n if ($('#search-modal-date-to').val()) {\n if (!$('#search-modal-date-to').validateDate()) {\n alert('Please enter a valid to date.');\n $('#search-modal-date-to').focus();\n\n return false;\n }\n\n q.push('to=' + encodeURIComponent($('#search-modal-date-to').val()));\n }\n\n if ($('#search-modal-filter-type option:selected').val()) q.push('type=' + encodeURIComponent($('#search-modal-filter-type option:selected').val()));\n\n if ($('#search-modal-filter-service option:selected').text()) q.push('service=' + encodeURIComponent($('#search-modal-filter-service option:selected').text()));\n\n if ($('#search-modal-filter-expert option:selected').text()) q.push('expert=' + encodeURIComponent($('#search-modal-filter-expert option:selected').text()));\n\n if ($('#search-modal-filter-state option:selected').text()) q.push('state=' + encodeURIComponent($('#search-modal-filter-state option:selected').text()));\n\n if ($('#search-modal-filter-issue option:selected').text()) q.push('issue=' + encodeURIComponent($('#search-modal-filter-issue option:selected').text()));\n\n if ($('#search-modal-filter-client option:selected').text()) q.push('client=' + encodeURIComponent($('#search-modal-filter-client option:selected').text()));\n\n if ($('#search-modal-filter-partner option:selected').text()) q.push('partner=' + encodeURIComponent($('#search-modal-filter-partner option:selected').text()));\n\n if (q.length) window.location.href = '/search/?ts=' + (new Date()).valueOf() + '#' + q.join('&');\n else window.location.href = '/search/'\n\n return false;\n });\n\n $('#search-modal-clear').click(function(e) {\n e.preventDefault();\n\n $('#search-modal-keyword, .list-page-filter-date').val('').focus().blur();\n $('.search-modal .list-page-filter select').val('').trigger('change');\n\n return false;\n });\n \n $('#site-search').click(function(e) {\n e.preventDefault();\n\n $('#search-modal').modal({\n clickClose: false,\n showClose: false,\n fadeDuration: 125\n });\n\n return false;\n });\n\n if (!$('.search-results-page').length) return;\n\n $('.loading-overlay').show();\n\n $('.list-page-filter-clear a').click(function(e) {\n e.preventDefault();\n\n $('#keyword').val('');\n $('.search-results-page .list-page-filter select').val('').trigger('change');\n\n $('.loading-overlay').show();\n\n _pager.reset();\n\n PHI.api.search(null, null, null, null, null, null, null, null, null, null, 0, _got_results);\n\n return false;\n });\n\n $('#keyword').on('keydown', _.debounce(_search_filter, 1000));\n\n $('.search-results-page .list-page-filter select').on('select2:select', _search_filter);\n $('.search-results-page .list-page-filter select').on('select2:unselect', _search_filter);\n\n _pager.init('#pager-container', '.list-page-filter', _search_filter);\n\n if (_process_incoming()) return;\n\n PHI.api.search(null, null, null, null, null, null, null, null, null, null, 0, _got_results);\n });\n})(jQuery);\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (typeof Symbol === 'function' && context[Symbol.iterator]) {\n var newContext = [];\n var iterator = context[Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (key) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbkUsWUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFlBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb250ZXh0W1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGNvbnRleHRbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICBmb3IgKGxldCBpdCA9IGl0ZXJhdG9yLm5leHQoKTsgIWl0LmRvbmU7IGl0ID0gaXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgbmV3Q29udGV4dC5wdXNoKGl0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0ID0gbmV3Q29udGV4dDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRldGVjdFxuICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAvLyBhbiBpdGVybWVkaWF0ZSBrZXlzIGFycmF5LlxuICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIHJldCA9IGludmVyc2UodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../utils');\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.parseWithoutProcessing = parseWithoutProcessing;\nexports.parse = parse;\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _parser = require('./parser');\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _whitespaceControl = require('./whitespace-control');\n\nvar _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);\n\nvar _helpers = require('./helpers');\n\nvar Helpers = _interopRequireWildcard(_helpers);\n\nvar _utils = require('../utils');\n\nexports.parser = _parser2['default'];\n\nvar yy = {};\n_utils.extend(yy, Helpers);\n\nfunction parseWithoutProcessing(input, options) {\n // Just return if an already-compiled AST was passed in.\n if (input.type === 'Program') {\n return input;\n }\n\n _parser2['default'].yy = yy;\n\n // Altering the shared object here, but this is ok as parser is a sync operation\n yy.locInfo = function (locInfo) {\n return new yy.SourceLocation(options && options.srcName, locInfo);\n };\n\n var ast = _parser2['default'].parse(input);\n\n return ast;\n}\n\nfunction parse(input, options) {\n var ast = parseWithoutProcessing(input, options);\n var strip = new _whitespaceControl2['default'](options);\n\n return strip.accept(ast);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztzQkFBbUIsVUFBVTs7OztpQ0FDQyxzQkFBc0I7Ozs7dUJBQzNCLFdBQVc7O0lBQXhCLE9BQU87O3FCQUNJLFVBQVU7O1FBRXhCLE1BQU07O0FBRWYsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osY0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRWIsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUVyRCxNQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQzVCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRUQsc0JBQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQzs7O0FBR2YsSUFBRSxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUM3QixXQUFPLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNuRSxDQUFDOztBQUVGLE1BQUksR0FBRyxHQUFHLG9CQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFOUIsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLE1BQUksR0FBRyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRCxNQUFJLEtBQUssR0FBRyxtQ0FBc0IsT0FBTyxDQUFDLENBQUM7O0FBRTNDLFNBQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJiYXNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhcnNlciBmcm9tICcuL3BhcnNlcic7XG5pbXBvcnQgV2hpdGVzcGFjZUNvbnRyb2wgZnJvbSAnLi93aGl0ZXNwYWNlLWNvbnRyb2wnO1xuaW1wb3J0ICogYXMgSGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgeyBwYXJzZXIgfTtcblxubGV0IHl5ID0ge307XG5leHRlbmQoeXksIEhlbHBlcnMpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VXaXRob3V0UHJvY2Vzc2luZyhpbnB1dCwgb3B0aW9ucykge1xuICAvLyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNvbXBpbGVkIEFTVCB3YXMgcGFzc2VkIGluLlxuICBpZiAoaW5wdXQudHlwZSA9PT0gJ1Byb2dyYW0nKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcGFyc2VyLnl5ID0geXk7XG5cbiAgLy8gQWx0ZXJpbmcgdGhlIHNoYXJlZCBvYmplY3QgaGVyZSwgYnV0IHRoaXMgaXMgb2sgYXMgcGFyc2VyIGlzIGEgc3luYyBvcGVyYXRpb25cbiAgeXkubG9jSW5mbyA9IGZ1bmN0aW9uKGxvY0luZm8pIHtcbiAgICByZXR1cm4gbmV3IHl5LlNvdXJjZUxvY2F0aW9uKG9wdGlvbnMgJiYgb3B0aW9ucy5zcmNOYW1lLCBsb2NJbmZvKTtcbiAgfTtcblxuICBsZXQgYXN0ID0gcGFyc2VyLnBhcnNlKGlucHV0KTtcblxuICByZXR1cm4gYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgbGV0IGFzdCA9IHBhcnNlV2l0aG91dFByb2Nlc3NpbmcoaW5wdXQsIG9wdGlvbnMpO1xuICBsZXQgc3RyaXAgPSBuZXcgV2hpdGVzcGFjZUNvbnRyb2wob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHN0cmlwLmFjY2VwdChhc3QpO1xufVxuIl19\n","// File ignored in coverage tests via setting in .istanbul.yml\n/* Jison generated parser */\n\"use strict\";\n\nexports.__esModule = true;\nvar handlebars = (function () {\n var parser = { trace: function trace() {},\n yy: {},\n symbols_: { \"error\": 2, \"root\": 3, \"program\": 4, \"EOF\": 5, \"program_repetition0\": 6, \"statement\": 7, \"mustache\": 8, \"block\": 9, \"rawBlock\": 10, \"partial\": 11, \"partialBlock\": 12, \"content\": 13, \"COMMENT\": 14, \"CONTENT\": 15, \"openRawBlock\": 16, \"rawBlock_repetition0\": 17, \"END_RAW_BLOCK\": 18, \"OPEN_RAW_BLOCK\": 19, \"helperName\": 20, \"openRawBlock_repetition0\": 21, \"openRawBlock_option0\": 22, \"CLOSE_RAW_BLOCK\": 23, \"openBlock\": 24, \"block_option0\": 25, \"closeBlock\": 26, \"openInverse\": 27, \"block_option1\": 28, \"OPEN_BLOCK\": 29, \"openBlock_repetition0\": 30, \"openBlock_option0\": 31, \"openBlock_option1\": 32, \"CLOSE\": 33, \"OPEN_INVERSE\": 34, \"openInverse_repetition0\": 35, \"openInverse_option0\": 36, \"openInverse_option1\": 37, \"openInverseChain\": 38, \"OPEN_INVERSE_CHAIN\": 39, \"openInverseChain_repetition0\": 40, \"openInverseChain_option0\": 41, \"openInverseChain_option1\": 42, \"inverseAndProgram\": 43, \"INVERSE\": 44, \"inverseChain\": 45, \"inverseChain_option0\": 46, \"OPEN_ENDBLOCK\": 47, \"OPEN\": 48, \"mustache_repetition0\": 49, \"mustache_option0\": 50, \"OPEN_UNESCAPED\": 51, \"mustache_repetition1\": 52, \"mustache_option1\": 53, \"CLOSE_UNESCAPED\": 54, \"OPEN_PARTIAL\": 55, \"partialName\": 56, \"partial_repetition0\": 57, \"partial_option0\": 58, \"openPartialBlock\": 59, \"OPEN_PARTIAL_BLOCK\": 60, \"openPartialBlock_repetition0\": 61, \"openPartialBlock_option0\": 62, \"param\": 63, \"sexpr\": 64, \"OPEN_SEXPR\": 65, \"sexpr_repetition0\": 66, \"sexpr_option0\": 67, \"CLOSE_SEXPR\": 68, \"hash\": 69, \"hash_repetition_plus0\": 70, \"hashSegment\": 71, \"ID\": 72, \"EQUALS\": 73, \"blockParams\": 74, \"OPEN_BLOCK_PARAMS\": 75, \"blockParams_repetition_plus0\": 76, \"CLOSE_BLOCK_PARAMS\": 77, \"path\": 78, \"dataName\": 79, \"STRING\": 80, \"NUMBER\": 81, \"BOOLEAN\": 82, \"UNDEFINED\": 83, \"NULL\": 84, \"DATA\": 85, \"pathSegments\": 86, \"SEP\": 87, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 5: \"EOF\", 14: \"COMMENT\", 15: \"CONTENT\", 18: \"END_RAW_BLOCK\", 19: \"OPEN_RAW_BLOCK\", 23: \"CLOSE_RAW_BLOCK\", 29: \"OPEN_BLOCK\", 33: \"CLOSE\", 34: \"OPEN_INVERSE\", 39: \"OPEN_INVERSE_CHAIN\", 44: \"INVERSE\", 47: \"OPEN_ENDBLOCK\", 48: \"OPEN\", 51: \"OPEN_UNESCAPED\", 54: \"CLOSE_UNESCAPED\", 55: \"OPEN_PARTIAL\", 60: \"OPEN_PARTIAL_BLOCK\", 65: \"OPEN_SEXPR\", 68: \"CLOSE_SEXPR\", 72: \"ID\", 73: \"EQUALS\", 75: \"OPEN_BLOCK_PARAMS\", 77: \"CLOSE_BLOCK_PARAMS\", 80: \"STRING\", 81: \"NUMBER\", 82: \"BOOLEAN\", 83: \"UNDEFINED\", 84: \"NULL\", 85: \"DATA\", 87: \"SEP\" },\n productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n break;\n case 2:\n this.$ = yy.prepareProgram($$[$0]);\n break;\n case 3:\n this.$ = $$[$0];\n break;\n case 4:\n this.$ = $$[$0];\n break;\n case 5:\n this.$ = $$[$0];\n break;\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n this.$ = $$[$0];\n break;\n case 8:\n this.$ = $$[$0];\n break;\n case 9:\n this.$ = {\n type: 'CommentStatement',\n value: yy.stripComment($$[$0]),\n strip: yy.stripFlags($$[$0], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 10:\n this.$ = {\n type: 'ContentStatement',\n original: $$[$0],\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 11:\n this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 12:\n this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };\n break;\n case 13:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n break;\n case 14:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n break;\n case 15:\n this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 16:\n this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 17:\n this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 18:\n this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };\n break;\n case 19:\n var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n program.chained = true;\n\n this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n\n break;\n case 20:\n this.$ = $$[$0];\n break;\n case 21:\n this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n break;\n case 22:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 23:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 24:\n this.$ = {\n type: 'PartialStatement',\n name: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n indent: '',\n strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 25:\n this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 26:\n this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };\n break;\n case 27:\n this.$ = $$[$0];\n break;\n case 28:\n this.$ = $$[$0];\n break;\n case 29:\n this.$ = {\n type: 'SubExpression',\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 30:\n this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 31:\n this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 32:\n this.$ = yy.id($$[$0 - 1]);\n break;\n case 33:\n this.$ = $$[$0];\n break;\n case 34:\n this.$ = $$[$0];\n break;\n case 35:\n this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 36:\n this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };\n break;\n case 37:\n this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };\n break;\n case 38:\n this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };\n break;\n case 39:\n this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };\n break;\n case 40:\n this.$ = $$[$0];\n break;\n case 41:\n this.$ = $$[$0];\n break;\n case 42:\n this.$ = yy.preparePath(true, $$[$0], this._$);\n break;\n case 43:\n this.$ = yy.preparePath(false, $$[$0], this._$);\n break;\n case 44:\n $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];\n break;\n case 45:\n this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n break;\n case 46:\n this.$ = [];\n break;\n case 47:\n $$[$0 - 1].push($$[$0]);\n break;\n case 48:\n this.$ = [];\n break;\n case 49:\n $$[$0 - 1].push($$[$0]);\n break;\n case 50:\n this.$ = [];\n break;\n case 51:\n $$[$0 - 1].push($$[$0]);\n break;\n case 58:\n this.$ = [];\n break;\n case 59:\n $$[$0 - 1].push($$[$0]);\n break;\n case 64:\n this.$ = [];\n break;\n case 65:\n $$[$0 - 1].push($$[$0]);\n break;\n case 70:\n this.$ = [];\n break;\n case 71:\n $$[$0 - 1].push($$[$0]);\n break;\n case 78:\n this.$ = [];\n break;\n case 79:\n $$[$0 - 1].push($$[$0]);\n break;\n case 82:\n this.$ = [];\n break;\n case 83:\n $$[$0 - 1].push($$[$0]);\n break;\n case 86:\n this.$ = [];\n break;\n case 87:\n $$[$0 - 1].push($$[$0]);\n break;\n case 90:\n this.$ = [];\n break;\n case 91:\n $$[$0 - 1].push($$[$0]);\n break;\n case 94:\n this.$ = [];\n break;\n case 95:\n $$[$0 - 1].push($$[$0]);\n break;\n case 98:\n this.$ = [$$[$0]];\n break;\n case 99:\n $$[$0 - 1].push($$[$0]);\n break;\n case 100:\n this.$ = [$$[$0]];\n break;\n case 101:\n $$[$0 - 1].push($$[$0]);\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],\n defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] },\n parseError: function parseError(str, hash) {\n throw new Error(str);\n },\n parse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null],\n lstack = [],\n table = this.table,\n yytext = \"\",\n yylineno = 0,\n yyleng = 0,\n recovering = 0,\n TERROR = 2,\n EOF = 1;\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n this.yy.parser = this;\n if (typeof this.lexer.yylloc == \"undefined\") this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n var ranges = this.lexer.options && this.lexer.options.ranges;\n if (typeof this.yy.parseError === \"function\") this.parseError = this.yy.parseError;\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = self.lexer.lex() || 1;\n if (typeof token !== \"number\") {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol,\n preErrorSymbol,\n state,\n action,\n a,\n r,\n yyval = {},\n p,\n len,\n newState,\n expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n if (!recovering) {\n expected = [];\n for (p in table[state]) if (this.terminals_[p] && p > 2) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n if (this.lexer.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1 ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });\n }\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0) recovering--;\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n /* Jison generated lexer */\n var lexer = (function () {\n var lexer = { EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n setInput: function setInput(input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };\n if (this.options.ranges) this.yylloc.range = [0, 0];\n this.offset = 0;\n return this;\n },\n input: function input() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) this.yylloc.range[1]++;\n\n this._input = this._input.slice(1);\n return ch;\n },\n unput: function unput(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) this.yylineno -= lines.length - 1;\n var r = this.yylloc.range;\n\n this.yylloc = { first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n return this;\n },\n more: function more() {\n this._more = true;\n return this;\n },\n less: function less(n) {\n this.unput(this.match.slice(n));\n },\n pastInput: function pastInput() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n },\n upcomingInput: function upcomingInput() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n showPosition: function showPosition() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n next: function next() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token, match, tempMatch, index, col, lines;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (!this.options.flex) break;\n }\n }\n if (match) {\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = { first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) this.done = false;\n if (token) return token;else return;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), { text: \"\", token: null, line: this.yylineno });\n }\n },\n lex: function lex() {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n popState: function popState() {\n return this.conditionStack.pop();\n },\n _currentRules: function _currentRules() {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n },\n topState: function topState() {\n return this.conditionStack[this.conditionStack.length - 2];\n },\n pushState: function begin(condition) {\n this.begin(condition);\n } };\n lexer.options = {};\n lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\n function strip(start, end) {\n return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n }\n\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n strip(0, 1);\n this.begin(\"mu\");\n } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n strip(0, 1);\n this.begin(\"emu\");\n } else {\n this.begin(\"mu\");\n }\n if (yy_.yytext) return 15;\n\n break;\n case 1:\n return 15;\n break;\n case 2:\n this.popState();\n return 15;\n\n break;\n case 3:\n this.begin('raw');return 15;\n break;\n case 4:\n this.popState();\n // Should be using `this.topState()` below, but it currently\n // returns the second top instead of the first top. Opened an\n // issue about it at https://github.com/zaach/jison/issues/291\n if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n return 15;\n } else {\n strip(5, 9);\n return 'END_RAW_BLOCK';\n }\n\n break;\n case 5:\n return 15;\n break;\n case 6:\n this.popState();\n return 14;\n\n break;\n case 7:\n return 65;\n break;\n case 8:\n return 68;\n break;\n case 9:\n return 19;\n break;\n case 10:\n this.popState();\n this.begin('raw');\n return 23;\n\n break;\n case 11:\n return 55;\n break;\n case 12:\n return 60;\n break;\n case 13:\n return 29;\n break;\n case 14:\n return 47;\n break;\n case 15:\n this.popState();return 44;\n break;\n case 16:\n this.popState();return 44;\n break;\n case 17:\n return 34;\n break;\n case 18:\n return 39;\n break;\n case 19:\n return 51;\n break;\n case 20:\n return 48;\n break;\n case 21:\n this.unput(yy_.yytext);\n this.popState();\n this.begin('com');\n\n break;\n case 22:\n this.popState();\n return 14;\n\n break;\n case 23:\n return 48;\n break;\n case 24:\n return 73;\n break;\n case 25:\n return 72;\n break;\n case 26:\n return 72;\n break;\n case 27:\n return 87;\n break;\n case 28:\n // ignore whitespace\n break;\n case 29:\n this.popState();return 54;\n break;\n case 30:\n this.popState();return 33;\n break;\n case 31:\n yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');return 80;\n break;\n case 32:\n yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");return 80;\n break;\n case 33:\n return 85;\n break;\n case 34:\n return 82;\n break;\n case 35:\n return 82;\n break;\n case 36:\n return 83;\n break;\n case 37:\n return 84;\n break;\n case 38:\n return 81;\n break;\n case 39:\n return 75;\n break;\n case 40:\n return 77;\n break;\n case 41:\n return 72;\n break;\n case 42:\n yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');return 72;\n break;\n case 43:\n return 'INVALID';\n break;\n case 44:\n return 5;\n break;\n }\n };\n lexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/];\n lexer.conditions = { \"mu\": { \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], \"inclusive\": false }, \"emu\": { \"rules\": [2], \"inclusive\": false }, \"com\": { \"rules\": [6], \"inclusive\": false }, \"raw\": { \"rules\": [3, 4, 5], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 44], \"inclusive\": true } };\n return lexer;\n })();\n parser.lexer = lexer;\n function Parser() {\n this.yy = {};\n }Parser.prototype = parser;parser.Parser = Parser;\n return new Parser();\n})();exports[\"default\"] = handlebars;\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixRQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBSSxFQUFHO0FBQzFDLFVBQUUsRUFBRSxFQUFFO0FBQ04sZ0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFB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RUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSxvQkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFB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QUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9FLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0gsd0JBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzdFLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCwyQkFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O0FBRXZCLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUV0RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzFFLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0SCwwQkFBTTtBQUFB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QUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDcEcsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3BILDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDM0gsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDN0csMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQzlGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBRSxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxBQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEdBQUc7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxHQUFHO0FBQUMsc0JBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDBCQUFNO0FBQUEsYUFDTDtTQUNBO0FBQ0QsYUFBSyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQy8vVixzQkFBYyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQztBQUNsTSxrQkFBVSxFQUFFLFNBQVMsVUFBVSxDQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFD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QUNOLHFCQUFLLENBQUM7QUFBRSwyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFDMkIsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQix3QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQiwyQkFBTyxFQUFFLENBQUM7O0FBRTVDLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0wsd0JBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxL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QyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDLENBQUM7QUFDM1UsZUFBTyxLQUFLLENBQUM7S0FBQyxDQUFBLEVBQUcsQ0FBQTtBQUNqQixVQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixhQUFTLE1BQU0sR0FBSTtBQUFFLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckYsV0FBTyxJQUFJLE1BQU0sRUFBQSxDQUFDO0NBQ2pCLENBQUEsRUFBRyxDQUFDLHFCQUFlLFVBQVUiLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBpZ25vcmVkIGluIGNvdmVyYWdlIHRlc3RzIHZpYSBzZXR0aW5nIGluIC5pc3RhbmJ1bC55bWxcbi8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi9cbnZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9uKCl7XG52YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlvbiB0cmFjZSAoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MTcsXCJFTkRfUkFXX0JMT0NLXCI6MTgsXCJPUEVOX1JBV19CTE9DS1wiOjE5LFwiaGVscGVyTmFtZVwiOjIwLFwib3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MjEsXCJvcGVuUmF3QmxvY2tfb3B0aW9uMFwiOjIyLFwiQ0xPU0VfUkFXX0JMT0NLXCI6MjMsXCJvcGVuQmxvY2tcIjoyNCxcImJsb2NrX29wdGlvbjBcIjoyNSxcImNsb3NlQmxvY2tcIjoyNixcIm9wZW5JbnZlcnNlXCI6MjcsXCJibG9ja19vcHRpb24xXCI6MjgsXCJPUEVOX0JMT0NLXCI6MjksXCJvcGVuQmxvY2tfcmVwZXRpdGlvbjBcIjozMCxcIm9wZW5CbG9ja19vcHRpb24wXCI6MzEsXCJvcGVuQmxvY2tfb3B0aW9uMVwiOjMyLFwiQ0xPU0VcIjozMyxcIk9QRU5fSU5WRVJTRVwiOjM0LFwib3BlbkludmVyc2VfcmVwZXRpdGlvbjBcIjozNSxcIm9wZW5JbnZlcnNlX29wdGlvbjBcIjozNixcIm9wZW5JbnZlcnNlX29wdGlvbjFcIjozNyxcIm9wZW5JbnZlcnNlQ2hhaW5cIjozOCxcIk9QRU5fSU5WRVJTRV9DSEFJTlwiOjM5LFwib3BlbkludmVyc2VDaGFpbl9yZXBldGl0aW9uMFwiOjQwLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24wXCI6NDEsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjFcIjo0MixcImludmVyc2VBbmRQcm9ncmFtXCI6NDMsXCJJTlZFUlNFXCI6NDQsXCJpbnZlcnNlQ2hhaW5cIjo0NSxcImludmVyc2VDaGFpbl9vcHRpb24wXCI6NDYsXCJPUEVOX0VOREJMT0NLXCI6NDcsXCJPUEVOXCI6NDgsXCJtdXN0YWNoZV9yZXBldGl0aW9uMFwiOjQ5LFwibXVzdGFjaGVfb3B0aW9uMFwiOjUwLFwiT1BFTl9VTkVTQ0FQRURcIjo1MSxcIm11c3RhY2hlX3JlcGV0aXRpb24xXCI6NTIsXCJtdXN0YWNoZV9vcHRpb24xXCI6NTMsXCJDTE9TRV9VTkVTQ0FQRURcIjo1NCxcIk9QRU5fUEFSVElBTFwiOjU1LFwicGFydGlhbE5hbWVcIjo1NixcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1NyxcInBhcnRpYWxfb3B0aW9uMFwiOjU4LFwib3BlblBhcnRpYWxCbG9ja1wiOjU5LFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjAsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MixcInBhcmFtXCI6NjMsXCJzZXhwclwiOjY0LFwiT1BFTl9TRVhQUlwiOjY1LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2NixcInNleHByX29wdGlvbjBcIjo2NyxcIkNMT1NFX1NFWFBSXCI6NjgsXCJoYXNoXCI6NjksXCJoYXNoX3JlcGV0aXRpb25fcGx1czBcIjo3MCxcImhhc2hTZWdtZW50XCI6NzEsXCJJRFwiOjcyLFwiRVFVQUxTXCI6NzMsXCJibG9ja1BhcmFtc1wiOjc0LFwiT1BFTl9CTE9DS19QQVJBTVNcIjo3NSxcImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czBcIjo3NixcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOjc3LFwicGF0aFwiOjc4LFwiZGF0YU5hbWVcIjo3OSxcIlNUUklOR1wiOjgwLFwiTlVNQkVSXCI6ODEsXCJCT09MRUFOXCI6ODIsXCJVTkRFRklORURcIjo4MyxcIk5VTExcIjo4NCxcIkRBVEFcIjo4NSxcInBhdGhTZWdtZW50c1wiOjg2LFwiU0VQXCI6ODcsXCIkYWNjZXB0XCI6MCxcIiRlbmRcIjoxfSxcbnRlcm1pbmFsc186IHsyOlwiZXJyb3JcIiw1OlwiRU9GXCIsMTQ6XCJDT01NRU5UXCIsMTU6XCJDT05URU5UXCIsMTg6XCJFTkRfUkFXX0JMT0NLXCIsMTk6XCJPUEVOX1JBV19CTE9DS1wiLDIzOlwiQ0xPU0VfUkFXX0JMT0NLXCIsMjk6XCJPUEVOX0JMT0NLXCIsMzM6XCJDTE9TRVwiLDM0OlwiT1BFTl9JTlZFUlNFXCIsMzk6XCJPUEVOX0lOVkVSU0VfQ0hBSU5cIiw0NDpcIklOVkVSU0VcIiw0NzpcIk9QRU5fRU5EQkxPQ0tcIiw0ODpcIk9QRU5cIiw1MTpcIk9QRU5fVU5FU0NBUEVEXCIsNTQ6XCJDTE9TRV9VTkVTQ0FQRURcIiw1NTpcIk9QRU5fUEFSVElBTFwiLDYwOlwiT1BFTl9QQVJUSUFMX0JMT0NLXCIsNjU6XCJPUEVOX1NFWFBSXCIsNjg6XCJDTE9TRV9TRVhQUlwiLDcyOlwiSURcIiw3MzpcIkVRVUFMU1wiLDc1OlwiT1BFTl9CTE9DS19QQVJBTVNcIiw3NzpcIkNMT1NFX0JMT0NLX1BBUkFNU1wiLDgwOlwiU1RSSU5HXCIsODE6XCJOVU1CRVJcIiw4MjpcIkJPT0xFQU5cIiw4MzpcIlVOREVGSU5FRFwiLDg0OlwiTlVMTFwiLDg1OlwiREFUQVwiLDg3OlwiU0VQXCJ9LFxucHJvZHVjdGlvbnNfOiBbMCxbMywyXSxbNCwxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbMTMsMV0sWzEwLDNdLFsxNiw1XSxbOSw0XSxbOSw0XSxbMjQsNl0sWzI3LDZdLFszOCw2XSxbNDMsMl0sWzQ1LDNdLFs0NSwxXSxbMjYsM10sWzgsNV0sWzgsNV0sWzExLDVdLFsxMiwzXSxbNTksNV0sWzYzLDFdLFs2MywxXSxbNjQsNV0sWzY5LDFdLFs3MSwzXSxbNzQsM10sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFs1NiwxXSxbNTYsMV0sWzc5LDJdLFs3OCwxXSxbODYsM10sWzg2LDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs0OSwwXSxbNDksMl0sWzUwLDBdLFs1MCwxXSxbNTIsMF0sWzUyLDJdLFs1MywwXSxbNTMsMV0sWzU3LDBdLFs1NywyXSxbNTgsMF0sWzU4LDFdLFs2MSwwXSxbNjEsMl0sWzYyLDBdLFs2MiwxXSxbNjYsMF0sWzY2LDJdLFs2NywwXSxbNjcsMV0sWzcwLDFdLFs3MCwyXSxbNzYsMV0sWzc2LDJdXSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQseXlsZW5nLHl5bGluZW5vLHl5LHl5c3RhdGUsJCQsXyRcbikge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE1OlsyLDQ4XSwxNzozOSwxODpbMiw0OF19LHsyMDo0MSw1Njo0MCw2NDo0Miw2NTpbMSw0M10sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NDo0NCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NTpbMiwxMF0sMTQ6WzIsMTBdLDE1OlsyLDEwXSwxODpbMiwxMF0sMTk6WzIsMTBdLDI5OlsyLDEwXSwzNDpbMiwxMF0sMzk6WzIsMTBdLDQ0OlsyLDEwXSw0NzpbMiwxMF0sNDg6WzIsMTBdLDUxOlsyLDEwXSw1NTpbMiwxMF0sNjA6WzIsMTBdfSx7MjA6NDUsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDYsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDcsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDEsNTY6NDgsNjQ6NDIsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsyLDc4XSw0OTo0OSw2NTpbMiw3OF0sNzI6WzIsNzhdLDgwOlsyLDc4XSw4MTpbMiw3OF0sODI6WzIsNzhdLDgzOlsyLDc4XSw4NDpbMiw3OF0sODU6WzIsNzhdfSx7MjM6WzIsMzNdLDMzOlsyLDMzXSw1NDpbMiwzM10sNjU6WzIsMzNdLDY4OlsyLDMzXSw3MjpbMiwzM10sNzU6WzIsMzNdLDgwOlsyLDMzXSw4MTpbMiwzM10sODI6WzIsMzNdLDgzOlsyLDMzXSw4NDpbMiwzM10sODU6WzIsMzNdfSx7MjM6WzIsMzRdLDMzOlsyLDM0XSw1NDpbMiwzNF0sNjU6WzIsMzRdLDY4OlsyLDM0XSw3MjpbMiwzNF0sNzU6WzIsMzRdLDgwOlsyLDM0XSw4MTpbMiwzNF0sODI6WzIsMzRdLDgzOlsyLDM0XSw4NDpbMiwzNF0sODU6WzIsMzRdfSx7MjM6WzIsMzVdLDMzOlsyLDM1XSw1NDpbMiwzNV0sNjU6WzIsMzVdLDY4OlsyLDM1XSw3MjpbMiwzNV0sNzU6WzIsMzVdLDgwOlsyLDM1XSw4MTpbMiwzNV0sODI6WzIsMzVdLDgzOlsyLDM1XSw4NDpbMiwzNV0sODU6WzIsMzVdfSx7MjM6WzIsMzZdLDMzOlsyLDM2XSw1NDpbMiwzNl0sNjU6WzIsMzZdLDY4OlsyLDM2XSw3MjpbMiwzNl0sNzU6WzIsMzZdLDgwOlsyLDM2XSw4MTpbMiwzNl0sODI6WzIsMzZdLDgzOlsyLDM2XSw4NDpbMiwzNl0sODU6WzIsMzZdfSx7MjM6WzIsMzddLDMzOlsyLDM3XSw1NDpbMiwzN10sNjU6WzIsMzddLDY4OlsyLDM3XSw3MjpbMiwzN10sNzU6WzIsMzddLDgwOlsyLDM3XSw4MTpbMiwzN10sODI6WzIsMzddLDgzOlsyLDM3XSw4NDpbMiwzN10sODU6WzIsMzddfSx7MjM6WzIsMzhdLDMzOlsyLDM4XSw1NDpbMiwzOF0sNjU6WzIsMzhdLDY4OlsyLDM4XSw3MjpbMiwzOF0sNzU6WzIsMzhdLDgwOlsyLDM4XSw4MTpbMiwzOF0sODI6WzIsMzhdLDgzOlsyLDM4XSw4NDpbMiwzOF0sODU6WzIsMzhdfSx7MjM6WzIsMzldLDMzOlsyLDM5XSw1NDpbMiwzOV0sNjU6WzIsMzldLDY4OlsyLDM5XSw3MjpbMiwzOV0sNzU6WzIsMzldLDgwOlsyLDM5XSw4MTpbMiwzOV0sODI6WzIsMzldLDgzOlsyLDM5XSw4NDpbMiwzOV0sODU6WzIsMzldfSx7MjM6WzIsNDNdLDMzOlsyLDQzXSw1NDpbMiw0M10sNjU6WzIsNDNdLDY4OlsyLDQzXSw3MjpbMiw0M10sNzU6WzIsNDNdLDgwOlsyLDQzXSw4MTpbMiw0M10sODI6WzIsNDNdLDgzOlsyLDQzXSw4NDpbMiw0M10sODU6WzIsNDNdLDg3OlsxLDUwXX0sezcyOlsxLDM1XSw4Njo1MX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHs1Mjo1Miw1NDpbMiw4Ml0sNjU6WzIsODJdLDcyOlsyLDgyXSw4MDpbMiw4Ml0sODE6WzIsODJdLDgyOlsyLDgyXSw4MzpbMiw4Ml0sODQ6WzIsODJdLDg1OlsyLDgyXX0sezI1OjUzLDM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6NTQsNDc6WzIsNTRdfSx7Mjg6NTksNDM6NjAsNDQ6WzEsNThdLDQ3OlsyLDU2XX0sezEzOjYyLDE1OlsxLDIwXSwxODpbMSw2MV19LHszMzpbMiw4Nl0sNTc6NjMsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2NSw0NzpbMSw2Nl19LHszMDo2NywzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjgsNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo2OSwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MCw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzQsMzM6WzIsODBdLDUwOjcxLDYzOjcyLDY0Ojc1LDY1OlsxLDQzXSw2OTo3Myw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw3OV19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTBdfSx7MjA6NzQsNTM6ODAsNTQ6WzIsODRdLDYzOjgxLDY0Ojc1LDY1OlsxLDQzXSw2OTo4Miw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4Myw0NzpbMSw2Nl19LHs0NzpbMiw1NV19LHs0Ojg0LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODYsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg3LDQ3OlsxLDY2XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc0LDMzOlsyLDg4XSw1ODo4OCw2Mzo4OSw2NDo3NSw2NTpbMSw0M10sNjk6OTAsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkxLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkyLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMxOjkzLDMzOlsyLDYwXSw2Mzo5NCw2NDo3NSw2NTpbMSw0M10sNjk6OTUsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMzOlsyLDY2XSwzNjo5Niw2Mzo5Nyw2NDo3NSw2NTpbMSw0M10sNjk6OTgsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDIyOjk5LDIzOlsyLDUyXSw2MzoxMDAsNjQ6NzUsNjU6WzEsNDNdLDY5OjEwMSw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMzpbMiw5Ml0sNjI6MTAyLDYzOjEwMyw2NDo3NSw2NTpbMSw0M10sNjk6MTA0LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDEwNV19LHszMzpbMiw3OV0sNjU6WzIsNzldLDcyOlsyLDc5XSw4MDpbMiw3OV0sODE6WzIsNzldLDgyOlsyLDc5XSw4MzpbMiw3OV0sODQ6WzIsNzldLDg1OlsyLDc5XX0sezMzOlsyLDgxXX0sezIzOlsyLDI3XSwzMzpbMiwyN10sNTQ6WzIsMjddLDY1OlsyLDI3XSw2ODpbMiwyN10sNzI6WzIsMjddLDc1OlsyLDI3XSw4MDpbMiwyN10sODE6WzIsMjddLDgyOlsyLDI3XSw4MzpbMiwyN10sODQ6WzIsMjddLDg1OlsyLDI3XX0sezIzOlsyLDI4XSwzMzpbMiwyOF0sNTQ6WzIsMjhdLDY1OlsyLDI4XSw2ODpbMiwyOF0sNzI6WzIsMjhdLDc1OlsyLDI4XSw4MDpbMiwyOF0sODE6WzIsMjhdLDgyOlsyLDI4XSw4MzpbMiwyOF0sODQ6WzIsMjhdLDg1OlsyLDI4XX0sezIzOlsyLDMwXSwzMzpbMiwzMF0sNTQ6WzIsMzBdLDY4OlsyLDMwXSw3MToxMDYsNzI6WzEsMTA3XSw3NTpbMiwzMF19LHsyMzpbMiw5OF0sMzM6WzIsOThdLDU0OlsyLDk4XSw2ODpbMiw5OF0sNzI6WzIsOThdLDc1OlsyLDk4XX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDczOlsxLDEwOF0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezIzOlsyLDQ0XSwzMzpbMiw0NF0sNTQ6WzIsNDRdLDY1OlsyLDQ0XSw2ODpbMiw0NF0sNzI6WzIsNDRdLDc1OlsyLDQ0XSw4MDpbMiw0NF0sODE6WzIsNDRdLDgyOlsyLDQ0XSw4MzpbMiw0NF0sODQ6WzIsNDRdLDg1OlsyLDQ0XSw4NzpbMiw0NF19LHs1NDpbMSwxMDldfSx7NTQ6WzIsODNdLDY1OlsyLDgzXSw3MjpbMiw4M10sODA6WzIsODNdLDgxOlsyLDgzXSw4MjpbMiw4M10sODM6WzIsODNdLDg0OlsyLDgzXSw4NTpbMiw4M119LHs1NDpbMiw4NV19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE5OlsyLDEzXSwyOTpbMiwxM10sMzQ6WzIsMTNdLDM5OlsyLDEzXSw0NDpbMiwxM10sNDc6WzIsMTNdLDQ4OlsyLDEzXSw1MTpbMiwxM10sNTU6WzIsMTNdLDYwOlsyLDEzXX0sezM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6MTExLDQ2OjExMCw0NzpbMiw3Nl19LHszMzpbMiw3MF0sNDA6MTEyLDY1OlsyLDcwXSw3MjpbMiw3MF0sNzU6WzIsNzBdLDgwOlsyLDcwXSw4MTpbMiw3MF0sODI6WzIsNzBdLDgzOlsyLDcwXSw4NDpbMiw3MF0sODU6WzIsNzBdfSx7NDc6WzIsMThdfSx7NTpbMiwxNF0sMTQ6WzIsMTRdLDE1OlsyLDE0XSwxOTpbMiwxNF0sMjk6WzIsMTRdLDM0OlsyLDE0XSwzOTpbMiwxNF0sNDQ6WzIsMTRdLDQ3OlsyLDE0XSw0ODpbMiwxNF0sNTE6WzIsMTRdLDU1OlsyLDE0XSw2MDpbMiwxNF19LHszMzpbMSwxMTNdfSx7MzM6WzIsODddLDY1OlsyLDg3XSw3MjpbMiw4N10sODA6WzIsODddLDgxOlsyLDg3XSw4MjpbMiw4N10sODM6WzIsODddLDg0OlsyLDg3XSw4NTpbMiw4N119LHszMzpbMiw4OV19LHsyMDo3NCw2MzoxMTUsNjQ6NzUsNjU6WzEsNDNdLDY3OjExNCw2ODpbMiw5Nl0sNjk6MTE2LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDExN119LHszMjoxMTgsMzM6WzIsNjJdLDc0OjExOSw3NTpbMSwxMjBdfSx7MzM6WzIsNTldLDY1OlsyLDU5XSw3MjpbMiw1OV0sNzU6WzIsNTldLDgwOlsyLDU5XSw4MTpbMiw1OV0sODI6WzIsNTldLDgzOlsyLDU5XSw4NDpbMiw1OV0sODU6WzIsNTldfSx7MzM6WzIsNjFdLDc1OlsyLDYxXX0sezMzOlsyLDY4XSwzNzoxMjEsNzQ6MTIyLDc1OlsxLDEyMF19LHszMzpbMiw2NV0sNjU6WzIsNjVdLDcyOlsyLDY1XSw3NTpbMiw2NV0sODA6WzIsNjVdLDgxOlsyLDY1XSw4MjpbMiw2NV0sODM6WzIsNjVdLDg0OlsyLDY1XSw4NTpbMiw2NV19LHszMzpbMiw2N10sNzU6WzIsNjddfSx7MjM6WzEsMTIzXX0sezIzOlsyLDUxXSw2NTpbMiw1MV0sNzI6WzIsNTFdLDgwOlsyLDUxXSw4MTpbMiw1MV0sODI6WzIsNTFdLDgzOlsyLDUxXSw4NDpbMiw1MV0sODU6WzIsNTFdfSx7MjM6WzIsNTNdfSx7MzM6WzEsMTI0XX0sezMzOlsyLDkxXSw2NTpbMiw5MV0sNzI6WzIsOTFdLDgwOlsyLDkxXSw4MTpbMiw5MV0sODI6WzIsOTFdLDgzOlsyLDkxXSw4NDpbMiw5MV0sODU6WzIsOTFdfSx7MzM6WzIsOTNdfSx7NTpbMiwyMl0sMTQ6WzIsMjJdLDE1OlsyLDIyXSwxOTpbMiwyMl0sMjk6WzIsMjJdLDM0OlsyLDIyXSwzOTpbMiwyMl0sNDQ6WzIsMjJdLDQ3OlsyLDIyXSw0ODpbMiwyMl0sNTE6WzIsMjJdLDU1OlsyLDIyXSw2MDpbMiwyMl19LHsyMzpbMiw5OV0sMzM6WzIsOTldLDU0OlsyLDk5XSw2ODpbMiw5OV0sNzI6WzIsOTldLDc1OlsyLDk5XX0sezczOlsxLDEwOF19LHsyMDo3NCw2MzoxMjUsNjQ6NzUsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjNdLDE0OlsyLDIzXSwxNTpbMiwyM10sMTk6WzIsMjNdLDI5OlsyLDIzXSwzNDpbMiwyM10sMzk6WzIsMjNdLDQ0OlsyLDIzXSw0NzpbMiwyM10sNDg6WzIsMjNdLDUxOlsyLDIzXSw1NTpbMiwyM10sNjA6WzIsMjNdfSx7NDc6WzIsMTldfSx7NDc6WzIsNzddfSx7MjA6NzQsMzM6WzIsNzJdLDQxOjEyNiw2MzoxMjcsNjQ6NzUsNjU6WzEsNDNdLDY5OjEyOCw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzU6WzIsNzJdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NTpbMiwyNF0sMTQ6WzIsMjRdLDE1OlsyLDI0XSwxOTpbMiwyNF0sMjk6WzIsMjRdLDM0OlsyLDI0XSwzOTpbMiwyNF0sNDQ6WzIsMjRdLDQ3OlsyLDI0XSw0ODpbMiwyNF0sNTE6WzIsMjRdLDU1OlsyLDI0XSw2MDpbMiwyNF19LHs2ODpbMSwxMjldfSx7NjU6WzIsOTVdLDY4OlsyLDk1XSw3MjpbMiw5NV0sODA6WzIsOTVdLDgxOlsyLDk1XSw4MjpbMiw5NV0sODM6WzIsOTVdLDg0OlsyLDk1XSw4NTpbMiw5NV19LHs2ODpbMiw5N119LHs1OlsyLDIxXSwxNDpbMiwyMV0sMTU6WzIsMjFdLDE5OlsyLDIxXSwyOTpbMiwyMV0sMzQ6WzIsMjFdLDM5OlsyLDIxXSw0NDpbMiwyMV0sNDc6WzIsMjFdLDQ4OlsyLDIxXSw1MTpbMiwyMV0sNTU6WzIsMjFdLDYwOlsyLDIxXX0sezMzOlsxLDEzMF19LHszMzpbMiw2M119LHs3MjpbMSwxMzJdLDc2OjEzMX0sezMzOlsxLDEzM119LHszMzpbMiw2OV19LHsxNTpbMiwxMl0sMTg6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM0LDc0OjEzNSw3NTpbMSwxMjBdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM3XSw3NzpbMSwxMzZdfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOF19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU0OlsyLDU1XSw1NjpbMiwyMF0sNjA6WzIsNTddLDczOlsyLDgxXSw4MjpbMiw4NV0sODY6WzIsMThdLDkwOlsyLDg5XSwxMDE6WzIsNTNdLDEwNDpbMiw5M10sMTEwOlsyLDE5XSwxMTE6WzIsNzddLDExNjpbMiw5N10sMTE5OlsyLDYzXSwxMjI6WzIsNjldLDEzNTpbMiw3NV0sMTM2OlsyLDMyXX0sXG5wYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yIChzdHIsIGhhc2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbn0sXG5wYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgdGhpcy5sZXhlci5zZXRJbnB1dChpbnB1dCk7XG4gICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7XG4gICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhpcy5sZXhlci55eWxsb2MgPSB7fTtcbiAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzO1xuICAgIGlmICh0eXBlb2YgdGhpcy55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjtcbiAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKCFyZWNvdmVyaW5nKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyB0aGlzLmxleGVyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gMT9cImVuZCBvZiBpbnB1dFwiOlwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHt0ZXh0OiB0aGlzLmxleGVyLm1hdGNoLCB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IHl5bG9jLCBleHBlY3RlZDogZXhwZWN0ZWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2godGhpcy5sZXhlci55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZztcbiAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87XG4gICAgICAgICAgICAgICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbn07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwoeXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3RhY2ssIGxzdGFjayk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG59O1xuLyogSmlzb24gZ2VuZXJhdGVkIGxleGVyICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7RU9GOjEsXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107XG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmlucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG51bnB1dDpmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcblxuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aC1sZW4tMSk7XG4gICAgICAgIC8vdGhpcy55eWxlbmcgLT0gbGVuO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoLTEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGgtMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aC0xKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aC0xO1xuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID9cbiAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aDpcbiAgICAgICAgICAgICAgdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubGVzczpmdW5jdGlvbiAobikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgIH0sXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcbnVwY29taW5nSW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMC1uZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLDIwKSsobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG5zaG93UG9zaXRpb246ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYytcIl5cIjtcbiAgICB9LFxubmV4dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgIHZhciB0b2tlbixcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgdGVtcE1hdGNoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICBsaW5lcztcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxpbmVzW2xpbmVzLmxlbmd0aC0xXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aH07XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBydWxlc1tpbmRleF0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJysodGhpcy55eWxpbmVubysxKSsnLiBVbnJlY29nbml6ZWQgdGV4dC5cXG4nK3RoaXMuc2hvd1Bvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHt0ZXh0OiBcIlwiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxpbmVub30pO1xuICAgICAgICB9XG4gICAgfSxcbmxleDpmdW5jdGlvbiBsZXggKCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgfSxcbl9jdXJyZW50UnVsZXM6ZnVuY3Rpb24gX2N1cnJlbnRSdWxlcyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICB9fSk7XG5sZXhlci5vcHRpb25zID0ge307XG5sZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LHl5XywkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLFlZX1NUQVJUXG4pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlRcbnN3aXRjaCgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG5jYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHl5Xy55eXRleHQuc2xpY2UoLTEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImVtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dCkgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTpyZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAzOnRoaXMuYmVnaW4oJ3JhdycpOyByZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIHVzaW5nIGB0aGlzLnRvcFN0YXRlKClgIGJlbG93LCBidXQgaXQgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgc2Vjb25kIHRvcCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB0b3AuIE9wZW5lZCBhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzc3VlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS96YWFjaC9qaXNvbi9pc3N1ZXMvMjkxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0gPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDUsIDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFTkRfUkFXX0JMT0NLJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjU7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjg7XG5icmVhaztcbmNhc2UgOTogcmV0dXJuIDE5OyBcbmJyZWFrO1xuY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTE6cmV0dXJuIDU1O1xuYnJlYWs7XG5jYXNlIDEyOnJldHVybiA2MDtcbmJyZWFrO1xuY2FzZSAxMzpyZXR1cm4gMjk7XG5icmVhaztcbmNhc2UgMTQ6cmV0dXJuIDQ3O1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE3OnJldHVybiAzNDtcbmJyZWFrO1xuY2FzZSAxODpyZXR1cm4gMzk7XG5icmVhaztcbmNhc2UgMTk6cmV0dXJuIDUxO1xuYnJlYWs7XG5jYXNlIDIwOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyMTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIyOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxNDtcblxuYnJlYWs7XG5jYXNlIDIzOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyNDpyZXR1cm4gNzM7XG5icmVhaztcbmNhc2UgMjU6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI2OnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSAyNzpyZXR1cm4gODc7XG5icmVhaztcbmNhc2UgMjg6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1NDtcbmJyZWFrO1xuY2FzZSAzMDp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMztcbmJyZWFrO1xuY2FzZSAzMTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDgwO1xuYnJlYWs7XG5jYXNlIDMyOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzM6cmV0dXJuIDg1O1xuYnJlYWs7XG5jYXNlIDM0OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNTpyZXR1cm4gODI7XG5icmVhaztcbmNhc2UgMzY6cmV0dXJuIDgzO1xuYnJlYWs7XG5jYXNlIDM3OnJldHVybiA4NDtcbmJyZWFrO1xuY2FzZSAzODpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMzk6cmV0dXJuIDc1O1xuYnJlYWs7XG5jYXNlIDQwOnJldHVybiA3NztcbmJyZWFrO1xuY2FzZSA0MTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgNDI6eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7IHJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0MzpyZXR1cm4gJ0lOVkFMSUQnO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA1O1xuYnJlYWs7XG59XG59O1xubGV4ZXIucnVsZXMgPSBbL14oPzpbXlxceDAwXSo/KD89KFxce1xceykpKS8sL14oPzpbXlxceDAwXSspLywvXig/OlteXFx4MDBdezIsfT8oPz0oXFx7XFx7fFxcXFxcXHtcXHt8XFxcXFxcXFxcXHtcXHt8JCkpKS8sL14oPzpcXHtcXHtcXHtcXHsoPz1bXi9dKSkvLC9eKD86XFx7XFx7XFx7XFx7XFwvW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PVs9fVxcc1xcLy5dKVxcfVxcfVxcfVxcfSkvLC9eKD86W15cXHgwMF0rPyg/PShcXHtcXHtcXHtcXHspKSkvLC9eKD86W1xcc1xcU10qPy0tKH4pP1xcfVxcfSkvLC9eKD86XFwoKS8sL14oPzpcXCkpLywvXig/Olxce1xce1xce1xceykvLC9eKD86XFx9XFx9XFx9XFx9KS8sL14oPzpcXHtcXHsofik/PikvLC9eKD86XFx7XFx7KH4pPyM+KS8sL14oPzpcXHtcXHsofik/I1xcKj8pLywvXig/Olxce1xceyh+KT9cXC8pLywvXig/Olxce1xceyh+KT9cXF5cXHMqKH4pP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xccyplbHNlXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXF4pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxcYikvLC9eKD86XFx7XFx7KH4pP1xceykvLC9eKD86XFx7XFx7KH4pPyYpLywvXig/Olxce1xceyh+KT8hLS0pLywvXig/Olxce1xceyh+KT8hW1xcc1xcU10qP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xcKj8pLywvXig/Oj0pLywvXig/OlxcLlxcLikvLC9eKD86XFwuKD89KFs9fn1cXHNcXC8uKXxdKSkpLywvXig/OltcXC8uXSkvLC9eKD86XFxzKykvLC9eKD86XFx9KH4pP1xcfVxcfSkvLC9eKD86KH4pP1xcfVxcfSkvLC9eKD86XCIoXFxcXFtcIl18W15cIl0pKlwiKS8sL14oPzonKFxcXFxbJ118W14nXSkqJykvLC9eKD86QCkvLC9eKD86dHJ1ZSg/PShbfn1cXHMpXSkpKS8sL14oPzpmYWxzZSg/PShbfn1cXHMpXSkpKS8sL14oPzp1bmRlZmluZWQoPz0oW359XFxzKV0pKSkvLC9eKD86bnVsbCg/PShbfn1cXHMpXSkpKS8sL14oPzotP1swLTldKyg/OlxcLlswLTldKyk/KD89KFt+fVxccyldKSkpLywvXig/OmFzXFxzK1xcfCkvLC9eKD86XFx8KS8sL14oPzooW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PShbPX59XFxzXFwvLil8XSkpKSkvLC9eKD86XFxbKFxcXFxcXF18W15cXF1dKSpcXF0pLywvXig/Oi4pLywvXig/OiQpL107XG5sZXhlci5jb25kaXRpb25zID0ge1wibXVcIjp7XCJydWxlc1wiOls3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NF0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJlbXVcIjp7XCJydWxlc1wiOlsyXSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcImNvbVwiOntcInJ1bGVzXCI6WzZdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwicmF3XCI6e1wicnVsZXNcIjpbMyw0LDVdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiSU5JVElBTFwiOntcInJ1bGVzXCI6WzAsMSw0NF0sXCJpbmNsdXNpdmVcIjp0cnVlfX07XG5yZXR1cm4gbGV4ZXI7fSkoKVxucGFyc2VyLmxleGVyID0gbGV4ZXI7XG5mdW5jdGlvbiBQYXJzZXIgKCkgeyB0aGlzLnl5ID0ge307IH1QYXJzZXIucHJvdG90eXBlID0gcGFyc2VyO3BhcnNlci5QYXJzZXIgPSBQYXJzZXI7XG5yZXR1cm4gbmV3IFBhcnNlcjtcbn0pKCk7ZXhwb3J0IGRlZmF1bHQgaGFuZGxlYmFycztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _visitor = require('./visitor');\n\nvar _visitor2 = _interopRequireDefault(_visitor);\n\nfunction WhitespaceControl() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n this.options = options;\n}\nWhitespaceControl.prototype = new _visitor2['default']();\n\nWhitespaceControl.prototype.Program = function (program) {\n var doStandalone = !this.options.ignoreStandalone;\n\n var isRoot = !this.isRootSeen;\n this.isRootSeen = true;\n\n var body = program.body;\n for (var i = 0, l = body.length; i < l; i++) {\n var current = body[i],\n strip = this.accept(current);\n\n if (!strip) {\n continue;\n }\n\n var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n openStandalone = strip.openStandalone && _isPrevWhitespace,\n closeStandalone = strip.closeStandalone && _isNextWhitespace,\n inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\n if (strip.close) {\n omitRight(body, i, true);\n }\n if (strip.open) {\n omitLeft(body, i, true);\n }\n\n if (doStandalone && inlineStandalone) {\n omitRight(body, i);\n\n if (omitLeft(body, i)) {\n // If we are on a standalone node, save the indent info for partials\n if (current.type === 'PartialStatement') {\n // Pull out the whitespace from the final line\n current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n }\n }\n }\n if (doStandalone && openStandalone) {\n omitRight((current.program || current.inverse).body);\n\n // Strip out the previous content node if it's whitespace only\n omitLeft(body, i);\n }\n if (doStandalone && closeStandalone) {\n // Always strip the next node\n omitRight(body, i);\n\n omitLeft((current.inverse || current.program).body);\n }\n }\n\n return program;\n};\n\nWhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n this.accept(block.program);\n this.accept(block.inverse);\n\n // Find the inverse program that is involed with whitespace stripping.\n var program = block.program || block.inverse,\n inverse = block.program && block.inverse,\n firstInverse = inverse,\n lastInverse = inverse;\n\n if (inverse && inverse.chained) {\n firstInverse = inverse.body[0].program;\n\n // Walk the inverse chain to find the last inverse that is actually in the chain.\n while (lastInverse.chained) {\n lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n }\n }\n\n var strip = {\n open: block.openStrip.open,\n close: block.closeStrip.close,\n\n // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n // so our parent can determine if we actually are standalone\n openStandalone: isNextWhitespace(program.body),\n closeStandalone: isPrevWhitespace((firstInverse || program).body)\n };\n\n if (block.openStrip.close) {\n omitRight(program.body, null, true);\n }\n\n if (inverse) {\n var inverseStrip = block.inverseStrip;\n\n if (inverseStrip.open) {\n omitLeft(program.body, null, true);\n }\n\n if (inverseStrip.close) {\n omitRight(firstInverse.body, null, true);\n }\n if (block.closeStrip.open) {\n omitLeft(lastInverse.body, null, true);\n }\n\n // Find standalone else statments\n if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n omitLeft(program.body);\n omitRight(firstInverse.body);\n }\n } else if (block.closeStrip.open) {\n omitLeft(program.body, null, true);\n }\n\n return strip;\n};\n\nWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n return mustache.strip;\n};\n\nWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n /* istanbul ignore next */\n var strip = node.strip || {};\n return {\n inlineStandalone: true,\n open: strip.open,\n close: strip.close\n };\n};\n\nfunction isPrevWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = body.length;\n }\n\n // Nodes that end with newlines are considered whitespace (but are special\n // cased for strip operations)\n var prev = body[i - 1],\n sibling = body[i - 2];\n if (!prev) {\n return isRoot;\n }\n\n if (prev.type === 'ContentStatement') {\n return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n }\n}\nfunction isNextWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = -1;\n }\n\n var next = body[i + 1],\n sibling = body[i + 2];\n if (!next) {\n return isRoot;\n }\n\n if (next.type === 'ContentStatement') {\n return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n }\n}\n\n// Marks the node to the right of the position as omitted.\n// I.e. {{foo}}' ' will mark the ' ' node as omitted.\n//\n// If i is undefined, then the first child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitRight(body, i, multiple) {\n var current = body[i == null ? 0 : i + 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n return;\n }\n\n var original = current.value;\n current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n current.rightStripped = current.value !== original;\n}\n\n// Marks the node to the left of the position as omitted.\n// I.e. ' '{{foo}} will mark the ' ' node as omitted.\n//\n// If i is undefined then the last child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitLeft(body, i, multiple) {\n var current = body[i == null ? body.length - 1 : i - 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n return;\n }\n\n // We omit the last node if it's whitespace only and not preceded by a non-content node.\n var original = current.value;\n current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n current.leftStripped = current.value !== original;\n return current.leftStripped;\n}\n\nexports['default'] = WhitespaceControl;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3VCQUFvQixXQUFXOzs7O0FBRS9CLFNBQVMsaUJBQWlCLEdBQWU7TUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3JDLE1BQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3hCO0FBQ0QsaUJBQWlCLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRTVDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDdEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUVwRCxNQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsTUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLE1BQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUUvQixRQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsZUFBUztLQUNWOztBQUVELFFBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDdkQsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDckQsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksaUJBQWlCO1FBQzFE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QUFDLE9BQU8sSUFDUixPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUNsQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxBQUFDLEVBQ25DO0FBQ0EsV0FBTztHQUNSOzs7QUFHRCxNQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLFNBQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsU0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNsRCxTQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7Q0FDN0I7O3FCQUVjLGlCQUFpQiIsImZpbGUiOiJ3aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5mdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbChvcHRpb25zID0ge30pIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBjb25zdCBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7XG5cbiAgbGV0IGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47XG4gIHRoaXMuaXNSb290U2VlbiA9IHRydWU7XG5cbiAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHk7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY3VycmVudCA9IGJvZHlbaV0sXG4gICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgX2lzTmV4dFdoaXRlc3BhY2UgPSBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksXG4gICAgICBvcGVuU3RhbmRhbG9uZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLFxuICAgICAgY2xvc2VTdGFuZGFsb25lID0gc3RyaXAuY2xvc2VTdGFuZGFsb25lICYmIF9pc05leHRXaGl0ZXNwYWNlLFxuICAgICAgaW5saW5lU3RhbmRhbG9uZSA9XG4gICAgICAgIHN0cmlwLmlubGluZVN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7XG5cbiAgICBpZiAoc3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGJvZHksIGksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gLyhbIFxcdF0rJCkvLmV4ZWMoYm9keVtpIC0gMV0ub3JpZ2luYWwpWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgb3BlblN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodCgoY3VycmVudC5wcm9ncmFtIHx8IGN1cnJlbnQuaW52ZXJzZSkuYm9keSk7XG5cbiAgICAgIC8vIFN0cmlwIG91dCB0aGUgcHJldmlvdXMgY29udGVudCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5XG4gICAgICBvbWl0TGVmdChib2R5LCBpKTtcbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBjbG9zZVN0YW5kYWxvbmUpIHtcbiAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2RlXG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwgY3VycmVudC5wcm9ncmFtKS5ib2R5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsQmxvY2tTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgYmxvY2tcbikge1xuICB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgdGhpcy5hY2NlcHQoYmxvY2suaW52ZXJzZSk7XG5cbiAgLy8gRmluZCB0aGUgaW52ZXJzZSBwcm9ncmFtIHRoYXQgaXMgaW52b2xlZCB3aXRoIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLlxuICBsZXQgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0gfHwgYmxvY2suaW52ZXJzZSxcbiAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZlcnNlLFxuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UsXG4gICAgbGFzdEludmVyc2UgPSBpbnZlcnNlO1xuXG4gIGlmIChpbnZlcnNlICYmIGludmVyc2UuY2hhaW5lZCkge1xuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UuYm9keVswXS5wcm9ncmFtO1xuXG4gICAgLy8gV2FsayB0aGUgaW52ZXJzZSBjaGFpbiB0byBmaW5kIHRoZSBsYXN0IGludmVyc2UgdGhhdCBpcyBhY3R1YWxseSBpbiB0aGUgY2hhaW4uXG4gICAgd2hpbGUgKGxhc3RJbnZlcnNlLmNoYWluZWQpIHtcbiAgICAgIGxhc3RJbnZlcnNlID0gbGFzdEludmVyc2UuYm9keVtsYXN0SW52ZXJzZS5ib2R5Lmxlbmd0aCAtIDFdLnByb2dyYW07XG4gICAgfVxuICB9XG5cbiAgbGV0IHN0cmlwID0ge1xuICAgIG9wZW46IGJsb2NrLm9wZW5TdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBibG9jay5jbG9zZVN0cmlwLmNsb3NlLFxuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFuZGFsb25lIGNhbmRpYWN5LiBCYXNpY2FsbHkgZmxhZyBvdXIgY29udGVudCBhcyBiZWluZyBwb3NzaWJseSBzdGFuZGFsb25lXG4gICAgLy8gc28gb3VyIHBhcmVudCBjYW4gZGV0ZXJtaW5lIGlmIHdlIGFjdHVhbGx5IGFyZSBzdGFuZGFsb25lXG4gICAgb3BlblN0YW5kYWxvbmU6IGlzTmV4dFdoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSxcbiAgICBjbG9zZVN0YW5kYWxvbmU6IGlzUHJldldoaXRlc3BhY2UoKGZpcnN0SW52ZXJzZSB8fCBwcm9ncmFtKS5ib2R5KVxuICB9O1xuXG4gIGlmIChibG9jay5vcGVuU3RyaXAuY2xvc2UpIHtcbiAgICBvbWl0UmlnaHQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChpbnZlcnNlKSB7XG4gICAgbGV0IGludmVyc2VTdHJpcCA9IGJsb2NrLmludmVyc2VTdHJpcDtcblxuICAgIGlmIChpbnZlcnNlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChsYXN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHN0YW5kYWxvbmUgZWxzZSBzdGF0bWVudHNcbiAgICBpZiAoXG4gICAgICAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmUgJiZcbiAgICAgIGlzUHJldldoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSAmJlxuICAgICAgaXNOZXh0V2hpdGVzcGFjZShmaXJzdEludmVyc2UuYm9keSlcbiAgICApIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSk7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKFxuICBtdXN0YWNoZVxuKSB7XG4gIHJldHVybiBtdXN0YWNoZS5zdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgbm9kZVxuKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge307XG4gIHJldHVybiB7XG4gICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBvcGVuOiBzdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBzdHJpcC5jbG9zZVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSBib2R5Lmxlbmd0aDtcbiAgfVxuXG4gIC8vIE5vZGVzIHRoYXQgZW5kIHdpdGggbmV3bGluZXMgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSAoYnV0IGFyZSBzcGVjaWFsXG4gIC8vIGNhc2VkIGZvciBzdHJpcCBvcGVyYXRpb25zKVxuICBsZXQgcHJldiA9IGJvZHlbaSAtIDFdLFxuICAgIHNpYmxpbmcgPSBib2R5W2kgLSAyXTtcbiAgaWYgKCFwcmV2KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChwcmV2LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gL1xccj9cXG5cXHMqPyQvIDogLyhefFxccj9cXG4pXFxzKj8kLykudGVzdChcbiAgICAgIHByZXYub3JpZ2luYWxcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IC0xO1xuICB9XG5cbiAgbGV0IG5leHQgPSBib2R5W2kgKyAxXSxcbiAgICBzaWJsaW5nID0gYm9keVtpICsgMl07XG4gIGlmICghbmV4dCkge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAobmV4dC50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/IC9eXFxzKj9cXHI/XFxuLyA6IC9eXFxzKj8oXFxyP1xcbnwkKS8pLnRlc3QoXG4gICAgICBuZXh0Lm9yaWdpbmFsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIHBvc2l0aW9uIGFzIG9taXR0ZWQuXG4vLyBJLmUuIHt7Zm9vfX0nICcgd2lsbCBtYXJrIHRoZSAnICcgbm9kZSBhcyBvbWl0dGVkLlxuLy9cbi8vIElmIGkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLlxuLy9cbi8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNlXG4vLyBjb250ZW50IGlzIG1ldC5cbmZ1bmN0aW9uIG9taXRSaWdodChib2R5LCBpLCBtdWx0aXBsZSkge1xuICBsZXQgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gMCA6IGkgKyAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQucmlnaHRTdHJpcHBlZClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShcbiAgICBtdWx0aXBsZSA/IC9eXFxzKy8gOiAvXlsgXFx0XSpcXHI/XFxuPy8sXG4gICAgJydcbiAgKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQubGVmdFN0cmlwcGVkKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBXZSBvbWl0IHRoZSBsYXN0IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHkgYW5kIG5vdCBwcmVjZWRlZCBieSBhIG5vbi1jb250ZW50IG5vZGUuXG4gIGxldCBvcmlnaW5hbCA9IGN1cnJlbnQudmFsdWU7XG4gIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAvXFxzKyQvIDogL1sgXFx0XSskLywgJycpO1xuICBjdXJyZW50LmxlZnRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xuICByZXR1cm4gY3VycmVudC5sZWZ0U3RyaXBwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdoaXRlc3BhY2VDb250cm9sO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.SourceLocation = SourceLocation;\nexports.id = id;\nexports.stripFlags = stripFlags;\nexports.stripComment = stripComment;\nexports.preparePath = preparePath;\nexports.prepareMustache = prepareMustache;\nexports.prepareRawBlock = prepareRawBlock;\nexports.prepareBlock = prepareBlock;\nexports.prepareProgram = prepareProgram;\nexports.preparePartialBlock = preparePartialBlock;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nfunction validateClose(open, close) {\n close = close.path ? close.path.original : close;\n\n if (open.path.original !== close) {\n var errorNode = { loc: open.path.loc };\n\n throw new _exception2['default'](open.path.original + \" doesn't match \" + close, errorNode);\n }\n}\n\nfunction SourceLocation(source, locInfo) {\n this.source = source;\n this.start = {\n line: locInfo.first_line,\n column: locInfo.first_column\n };\n this.end = {\n line: locInfo.last_line,\n column: locInfo.last_column\n };\n}\n\nfunction id(token) {\n if (/^\\[.*\\]$/.test(token)) {\n return token.substring(1, token.length - 1);\n } else {\n return token;\n }\n}\n\nfunction stripFlags(open, close) {\n return {\n open: open.charAt(2) === '~',\n close: close.charAt(close.length - 3) === '~'\n };\n}\n\nfunction stripComment(comment) {\n return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n}\n\nfunction preparePath(data, parts, loc) {\n loc = this.locInfo(loc);\n\n var original = data ? '@' : '',\n dig = [],\n depth = 0;\n\n for (var i = 0, l = parts.length; i < l; i++) {\n var part = parts[i].part,\n\n // If we have [] syntax then we do not treat path references as operators,\n // i.e. foo.[this] resolves to approximately context.foo['this']\n isLiteral = parts[i].original !== part;\n original += (parts[i].separator || '') + part;\n\n if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n if (dig.length > 0) {\n throw new _exception2['default']('Invalid path: ' + original, { loc: loc });\n } else if (part === '..') {\n depth++;\n }\n } else {\n dig.push(part);\n }\n }\n\n return {\n type: 'PathExpression',\n data: data,\n depth: depth,\n parts: dig,\n original: original,\n loc: loc\n };\n}\n\nfunction prepareMustache(path, params, hash, open, strip, locInfo) {\n // Must use charAt to support IE pre-10\n var escapeFlag = open.charAt(3) || open.charAt(2),\n escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n var decorator = /\\*/.test(open);\n return {\n type: decorator ? 'Decorator' : 'MustacheStatement',\n path: path,\n params: params,\n hash: hash,\n escaped: escaped,\n strip: strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nfunction prepareRawBlock(openRawBlock, contents, close, locInfo) {\n validateClose(openRawBlock, close);\n\n locInfo = this.locInfo(locInfo);\n var program = {\n type: 'Program',\n body: contents,\n strip: {},\n loc: locInfo\n };\n\n return {\n type: 'BlockStatement',\n path: openRawBlock.path,\n params: openRawBlock.params,\n hash: openRawBlock.hash,\n program: program,\n openStrip: {},\n inverseStrip: {},\n closeStrip: {},\n loc: locInfo\n };\n}\n\nfunction prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n if (close && close.path) {\n validateClose(openBlock, close);\n }\n\n var decorator = /\\*/.test(openBlock.open);\n\n program.blockParams = openBlock.blockParams;\n\n var inverse = undefined,\n inverseStrip = undefined;\n\n if (inverseAndProgram) {\n if (decorator) {\n throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);\n }\n\n if (inverseAndProgram.chain) {\n inverseAndProgram.program.body[0].closeStrip = close.strip;\n }\n\n inverseStrip = inverseAndProgram.strip;\n inverse = inverseAndProgram.program;\n }\n\n if (inverted) {\n inverted = inverse;\n inverse = program;\n program = inverted;\n }\n\n return {\n type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n path: openBlock.path,\n params: openBlock.params,\n hash: openBlock.hash,\n program: program,\n inverse: inverse,\n openStrip: openBlock.strip,\n inverseStrip: inverseStrip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nfunction prepareProgram(statements, loc) {\n if (!loc && statements.length) {\n var firstLoc = statements[0].loc,\n lastLoc = statements[statements.length - 1].loc;\n\n /* istanbul ignore else */\n if (firstLoc && lastLoc) {\n loc = {\n source: firstLoc.source,\n start: {\n line: firstLoc.start.line,\n column: firstLoc.start.column\n },\n end: {\n line: lastLoc.end.line,\n column: lastLoc.end.column\n }\n };\n }\n }\n\n return {\n type: 'Program',\n body: statements,\n strip: {},\n loc: loc\n };\n}\n\nfunction preparePartialBlock(open, program, close, locInfo) {\n validateClose(open, close);\n\n return {\n type: 'PartialBlockStatement',\n name: open.path,\n params: open.params,\n hash: open.hash,\n program: program,\n openStrip: open.strip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQXNCLGNBQWM7Ozs7QUFFcEMsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxPQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0FBRWpELE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2hDLFFBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7O0FBRXZDLFVBQU0sMkJBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxFQUM5QyxTQUFTLENBQ1YsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsUUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3hCLFVBQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtHQUM3QixDQUFDO0FBQ0YsTUFBSSxDQUFDLEdBQUcsR0FBRztBQUNULFFBQUksRUFBRSxPQUFPLENBQUMsU0FBUztBQUN2QixVQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7R0FDNUIsQ0FBQztDQUNIOztBQUVNLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN4QixNQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzdDLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUN0QyxTQUFPO0FBQ0wsUUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUM1QixTQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7R0FDOUMsQ0FBQztDQUNIOztBQUVNLFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUNwQyxTQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdkU7O0FBRU0sU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDNUMsS0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRXhCLE1BQUksUUFBUSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRTtNQUM1QixHQUFHLEdBQUcsRUFBRTtNQUNSLEtBQUssR0FBRyxDQUFDLENBQUM7O0FBRVosT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxRQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTs7OztBQUd0QixhQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDekMsWUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUEsR0FBSSxJQUFJLENBQUM7O0FBRTlDLFFBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxNQUFNLENBQUEsQUFBQyxFQUFFO0FBQ3BFLFVBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbEIsY0FBTSwyQkFBYyxnQkFBZ0IsR0FBRyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUgsR0FBRyxFQUFFLENBQUMsQ0FBQztPQUMzRCxNQUFNLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUN4QixhQUFLLEVBQUUsQ0FBQztPQUNUO0tBQ0YsTUFBTTtBQUNMLFNBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEI7R0FDRjs7QUFFRCxTQUFPO0FBQ0wsUUFBSSxFQUFFLGdCQUFnQjtBQUN0QixRQUFJLEVBQUosSUFBSTtBQUNKLFNBQUssRUFBTCxLQUFLO0FBQ0wsU0FBSyxFQUFFLEdBQUc7QUFDVixZQUFRLEVBQVIsUUFBUTtBQUNSLE9BQUcsRUFBSCxHQUFHO0dBQ0osQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUV4RSxNQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQy9DLE9BQU8sR0FBRyxVQUFVLEtBQUssR0FBRyxJQUFJLFVBQVUsS0FBSyxHQUFHLENBQUM7O0FBRXJELE1BQUksU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTLEdBQUcsV0FBVyxHQUFHLG1CQUFtQjtBQUNuRCxRQUFJLEVBQUosSUFBSTtBQUNKLFVBQU0sRUFBTixNQUFNO0FBQ04sUUFBSSxFQUFKLElBQUk7QUFDSixXQUFPLEVBQVAsT0FBTztBQUNQLFNBQUssRUFBTCxLQUFLO0FBQ0wsT0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0dBQzNCLENBQUM7Q0FDSDs7QUFFTSxTQUFTLGVBQWUsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdEUsZUFBYSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzs7QUFFbkMsU0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEMsTUFBSSxPQUFPLEdBQUc7QUFDWixRQUFJLEVBQUUsU0FBUztBQUNmLFFBQUksRUFBRSxRQUFRO0FBQ2QsU0FBSyxFQUFFLEVBQUU7QUFDVCxPQUFHLEVBQUUsT0FBTztHQUNiLENBQUM7O0FBRUYsU0FBTztBQUNMLFFBQUksRUFBRSxnQkFBZ0I7QUFDdEIsUUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJO0FBQ3ZCLFVBQU0sRUFBRSxZQUFZLENBQUMsTUFBTTtBQUMzQixRQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7QUFDdkIsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsRUFBRTtBQUNiLGdCQUFZLEVBQUUsRUFBRTtBQUNoQixjQUFVLEVBQUUsRUFBRTtBQUNkLE9BQUcsRUFBRSxPQUFPO0dBQ2IsQ0FBQztDQUNIOztBQUVNLFNBQVMsWUFBWSxDQUMxQixTQUFTLEVBQ1QsT0FBTyxFQUNQLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsUUFBUSxFQUNSLE9BQU8sRUFDUDtBQUNBLE1BQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDdkIsaUJBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7R0FDakM7O0FBRUQsTUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRTFDLFNBQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQzs7QUFFNUMsTUFBSSxPQUFPLFlBQUE7TUFBRSxZQUFZLFlBQUEsQ0FBQzs7QUFFMUIsTUFBSSxpQkFBaUIsRUFBRTtBQUNyQixRQUFJLFNBQVMsRUFBRTtBQUNiLFlBQU0sMkJBQ0osdUNBQXVDLEVBQ3ZDLGlCQUFpQixDQUNsQixDQUFDO0tBQ0g7O0FBRUQsUUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7QUFDM0IsdUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztLQUM1RDs7QUFFRCxnQkFBWSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztBQUN2QyxXQUFPLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDO0dBQ3JDOztBQUVELE1BQUksUUFBUSxFQUFFO0FBQ1osWUFBUSxHQUFHLE9BQU8sQ0FBQztBQUNuQixXQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ2xCLFdBQU8sR0FBRyxRQUFRLENBQUM7R0FDcEI7O0FBRUQsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTLEdBQUcsZ0JBQWdCLEdBQUcsZ0JBQWdCO0FBQ3JELFFBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtBQUNwQixVQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07QUFDeEIsUUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO0FBQ3BCLFdBQU8sRUFBUCxPQUFPO0FBQ1AsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUs7QUFDMUIsZ0JBQVksRUFBWixZQUFZO0FBQ1osY0FBVSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoQyxPQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7R0FDM0IsQ0FBQztDQUNIOztBQUVNLFNBQVMsY0FBYyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7QUFDOUMsTUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO0FBQzdCLFFBQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO1FBQ2hDLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7OztBQUdsRCxRQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDdkIsU0FBRyxHQUFHO0FBQ0osY0FBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ3ZCLGFBQUssRUFBRTtBQUNMLGNBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDekIsZ0JBQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDOUI7QUFDRCxXQUFHLEVBQUU7QUFDSCxjQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3RCLGdCQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQzNCO09BQ0YsQ0FBQztLQUNIO0dBQ0Y7O0FBRUQsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTO0FBQ2YsUUFBSSxFQUFFLFVBQVU7QUFDaEIsU0FBSyxFQUFFLEVBQUU7QUFDVCxPQUFHLEVBQUUsR0FBRztHQUNULENBQUM7Q0FDSDs7QUFFTSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNqRSxlQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUUzQixTQUFPO0FBQ0wsUUFBSSxFQUFFLHVCQUF1QjtBQUM3QixRQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixVQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDbkIsUUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDckIsY0FBVSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoQyxPQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7R0FDM0IsQ0FBQztDQUNIIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgbGV0IGVycm9yTm9kZSA9IHsgbG9jOiBvcGVuLnBhdGgubG9jIH07XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgb3Blbi5wYXRoLm9yaWdpbmFsICsgXCIgZG9lc24ndCBtYXRjaCBcIiArIGNsb3NlLFxuICAgICAgZXJyb3JOb2RlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+PyEtPy0/LywgJycpLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywgbG9jKSB7XG4gIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpO1xuXG4gIGxldCBvcmlnaW5hbCA9IGRhdGEgPyAnQCcgOiAnJyxcbiAgICBkaWcgPSBbXSxcbiAgICBkZXB0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgcGFydCA9IHBhcnRzW2ldLnBhcnQsXG4gICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgLy8gaS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3RoaXMnXVxuICAgICAgaXNMaXRlcmFsID0gcGFydHNbaV0ub3JpZ2luYWwgIT09IHBhcnQ7XG4gICAgb3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0O1xuXG4gICAgaWYgKCFpc0xpdGVyYWwgJiYgKHBhcnQgPT09ICcuLicgfHwgcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICd0aGlzJykpIHtcbiAgICAgIGlmIChkaWcubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwgeyBsb2MgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYnO1xuXG4gIGxldCBkZWNvcmF0b3IgPSAvXFwqLy50ZXN0KG9wZW4pO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3InIDogJ011c3RhY2hlU3RhdGVtZW50JyxcbiAgICBwYXRoLFxuICAgIHBhcmFtcyxcbiAgICBoYXNoLFxuICAgIGVzY2FwZWQsXG4gICAgc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhvcGVuUmF3QmxvY2ssIGNvbnRlbnRzLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW5SYXdCbG9jaywgY2xvc2UpO1xuXG4gIGxvY0luZm8gPSB0aGlzLmxvY0luZm8obG9jSW5mbyk7XG4gIGxldCBwcm9ncmFtID0ge1xuICAgIHR5cGU6ICdQcm9ncmFtJyxcbiAgICBib2R5OiBjb250ZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5SYXdCbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlblJhd0Jsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuUmF3QmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDoge30sXG4gICAgaW52ZXJzZVN0cmlwOiB7fSxcbiAgICBjbG9zZVN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVCbG9jayhcbiAgb3BlbkJsb2NrLFxuICBwcm9ncmFtLFxuICBpbnZlcnNlQW5kUHJvZ3JhbSxcbiAgY2xvc2UsXG4gIGludmVydGVkLFxuICBsb2NJbmZvXG4pIHtcbiAgaWYgKGNsb3NlICYmIGNsb3NlLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNsb3NlKG9wZW5CbG9jaywgY2xvc2UpO1xuICB9XG5cbiAgbGV0IGRlY29yYXRvciA9IC9cXCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsIGludmVyc2VTdHJpcDtcblxuICBpZiAoaW52ZXJzZUFuZFByb2dyYW0pIHtcbiAgICBpZiAoZGVjb3JhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsXG4gICAgICAgIGludmVyc2VBbmRQcm9ncmFtXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnZlcnNlQW5kUHJvZ3JhbS5jaGFpbikge1xuICAgICAgaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbS5ib2R5WzBdLmNsb3NlU3RyaXAgPSBjbG9zZS5zdHJpcDtcbiAgICB9XG5cbiAgICBpbnZlcnNlU3RyaXAgPSBpbnZlcnNlQW5kUHJvZ3JhbS5zdHJpcDtcbiAgICBpbnZlcnNlID0gaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbTtcbiAgfVxuXG4gIGlmIChpbnZlcnRlZCkge1xuICAgIGludmVydGVkID0gaW52ZXJzZTtcbiAgICBpbnZlcnNlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtID0gaW52ZXJ0ZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3JCbG9jaycgOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5CbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlbkJsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuQmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIGludmVyc2UsXG4gICAgb3BlblN0cmlwOiBvcGVuQmxvY2suc3RyaXAsXG4gICAgaW52ZXJzZVN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUHJvZ3JhbShzdGF0ZW1lbnRzLCBsb2MpIHtcbiAgaWYgKCFsb2MgJiYgc3RhdGVtZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdExvYyA9IHN0YXRlbWVudHNbMF0ubG9jLFxuICAgICAgbGFzdExvYyA9IHN0YXRlbWVudHNbc3RhdGVtZW50cy5sZW5ndGggLSAxXS5sb2M7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7XG4gICAgICBsb2MgPSB7XG4gICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLFxuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IGZpcnN0TG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IHN0YXRlbWVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFydGlhbEJsb2NrKG9wZW4sIHByb2dyYW0sIGNsb3NlLCBsb2NJbmZvKSB7XG4gIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1BhcnRpYWxCbG9ja1N0YXRlbWVudCcsXG4gICAgbmFtZTogb3Blbi5wYXRoLFxuICAgIHBhcmFtczogb3Blbi5wYXJhbXMsXG4gICAgaGFzaDogb3Blbi5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgb3BlblN0cmlwOiBvcGVuLnN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG4iXX0=\n","/* eslint-disable new-cap */\n\n'use strict';\n\nexports.__esModule = true;\nexports.Compiler = Compiler;\nexports.precompile = precompile;\nexports.compile = compile;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nvar _ast = require('./ast');\n\nvar _ast2 = _interopRequireDefault(_ast);\n\nvar slice = [].slice;\n\nfunction Compiler() {}\n\n// the foundHelper register will disambiguate helper lookup from finding a\n// function in a context. This is necessary for mustache compatibility, which\n// requires that context functions in blocks are evaluated by blockHelperMissing,\n// and then proceed as if the resulting value was provided to blockHelperMissing.\n\nCompiler.prototype = {\n compiler: Compiler,\n\n equals: function equals(other) {\n var len = this.opcodes.length;\n if (other.opcodes.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var opcode = this.opcodes[i],\n otherOpcode = other.opcodes[i];\n if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {\n return false;\n }\n }\n\n // We know that length is the same between the two arrays because they are directly tied\n // to the opcode behavior above.\n len = this.children.length;\n for (var i = 0; i < len; i++) {\n if (!this.children[i].equals(other.children[i])) {\n return false;\n }\n }\n\n return true;\n },\n\n guid: 0,\n\n compile: function compile(program, options) {\n this.sourceNode = [];\n this.opcodes = [];\n this.children = [];\n this.options = options;\n this.stringParams = options.stringParams;\n this.trackIds = options.trackIds;\n\n options.blockParams = options.blockParams || [];\n\n options.knownHelpers = _utils.extend(Object.create(null), {\n helperMissing: true,\n blockHelperMissing: true,\n each: true,\n 'if': true,\n unless: true,\n 'with': true,\n log: true,\n lookup: true\n }, options.knownHelpers);\n\n return this.accept(program);\n },\n\n compileProgram: function compileProgram(program) {\n var childCompiler = new this.compiler(),\n // eslint-disable-line new-cap\n result = childCompiler.compile(program, this.options),\n guid = this.guid++;\n\n this.usePartial = this.usePartial || result.usePartial;\n\n this.children[guid] = result;\n this.useDepths = this.useDepths || result.useDepths;\n\n return guid;\n },\n\n accept: function accept(node) {\n /* istanbul ignore next: Sanity code */\n if (!this[node.type]) {\n throw new _exception2['default']('Unknown type: ' + node.type, node);\n }\n\n this.sourceNode.unshift(node);\n var ret = this[node.type](node);\n this.sourceNode.shift();\n return ret;\n },\n\n Program: function Program(program) {\n this.options.blockParams.unshift(program.blockParams);\n\n var body = program.body,\n bodyLength = body.length;\n for (var i = 0; i < bodyLength; i++) {\n this.accept(body[i]);\n }\n\n this.options.blockParams.shift();\n\n this.isSimple = bodyLength === 1;\n this.blockParams = program.blockParams ? program.blockParams.length : 0;\n\n return this;\n },\n\n BlockStatement: function BlockStatement(block) {\n transformLiteralToPath(block);\n\n var program = block.program,\n inverse = block.inverse;\n\n program = program && this.compileProgram(program);\n inverse = inverse && this.compileProgram(inverse);\n\n var type = this.classifySexpr(block);\n\n if (type === 'helper') {\n this.helperSexpr(block, program, inverse);\n } else if (type === 'simple') {\n this.simpleSexpr(block);\n\n // now that the simple mustache is resolved, we need to\n // evaluate it by executing `blockHelperMissing`\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n this.opcode('emptyHash');\n this.opcode('blockValue', block.path.original);\n } else {\n this.ambiguousSexpr(block, program, inverse);\n\n // now that the simple mustache is resolved, we need to\n // evaluate it by executing `blockHelperMissing`\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n this.opcode('emptyHash');\n this.opcode('ambiguousBlockValue');\n }\n\n this.opcode('append');\n },\n\n DecoratorBlock: function DecoratorBlock(decorator) {\n var program = decorator.program && this.compileProgram(decorator.program);\n var params = this.setupFullMustacheParams(decorator, program, undefined),\n path = decorator.path;\n\n this.useDecorators = true;\n this.opcode('registerDecorator', params.length, path.original);\n },\n\n PartialStatement: function PartialStatement(partial) {\n this.usePartial = true;\n\n var program = partial.program;\n if (program) {\n program = this.compileProgram(partial.program);\n }\n\n var params = partial.params;\n if (params.length > 1) {\n throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);\n } else if (!params.length) {\n if (this.options.explicitPartialContext) {\n this.opcode('pushLiteral', 'undefined');\n } else {\n params.push({ type: 'PathExpression', parts: [], depth: 0 });\n }\n }\n\n var partialName = partial.name.original,\n isDynamic = partial.name.type === 'SubExpression';\n if (isDynamic) {\n this.accept(partial.name);\n }\n\n this.setupFullMustacheParams(partial, program, undefined, true);\n\n var indent = partial.indent || '';\n if (this.options.preventIndent && indent) {\n this.opcode('appendContent', indent);\n indent = '';\n }\n\n this.opcode('invokePartial', isDynamic, partialName, indent);\n this.opcode('append');\n },\n PartialBlockStatement: function PartialBlockStatement(partialBlock) {\n this.PartialStatement(partialBlock);\n },\n\n MustacheStatement: function MustacheStatement(mustache) {\n this.SubExpression(mustache);\n\n if (mustache.escaped && !this.options.noEscape) {\n this.opcode('appendEscaped');\n } else {\n this.opcode('append');\n }\n },\n Decorator: function Decorator(decorator) {\n this.DecoratorBlock(decorator);\n },\n\n ContentStatement: function ContentStatement(content) {\n if (content.value) {\n this.opcode('appendContent', content.value);\n }\n },\n\n CommentStatement: function CommentStatement() {},\n\n SubExpression: function SubExpression(sexpr) {\n transformLiteralToPath(sexpr);\n var type = this.classifySexpr(sexpr);\n\n if (type === 'simple') {\n this.simpleSexpr(sexpr);\n } else if (type === 'helper') {\n this.helperSexpr(sexpr);\n } else {\n this.ambiguousSexpr(sexpr);\n }\n },\n ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {\n var path = sexpr.path,\n name = path.parts[0],\n isBlock = program != null || inverse != null;\n\n this.opcode('getContext', path.depth);\n\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n\n path.strict = true;\n this.accept(path);\n\n this.opcode('invokeAmbiguous', name, isBlock);\n },\n\n simpleSexpr: function simpleSexpr(sexpr) {\n var path = sexpr.path;\n path.strict = true;\n this.accept(path);\n this.opcode('resolvePossibleLambda');\n },\n\n helperSexpr: function helperSexpr(sexpr, program, inverse) {\n var params = this.setupFullMustacheParams(sexpr, program, inverse),\n path = sexpr.path,\n name = path.parts[0];\n\n if (this.options.knownHelpers[name]) {\n this.opcode('invokeKnownHelper', params.length, name);\n } else if (this.options.knownHelpersOnly) {\n throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);\n } else {\n path.strict = true;\n path.falsy = true;\n\n this.accept(path);\n this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));\n }\n },\n\n PathExpression: function PathExpression(path) {\n this.addDepth(path.depth);\n this.opcode('getContext', path.depth);\n\n var name = path.parts[0],\n scoped = _ast2['default'].helpers.scopedId(path),\n blockParamId = !path.depth && !scoped && this.blockParamIndex(name);\n\n if (blockParamId) {\n this.opcode('lookupBlockParam', blockParamId, path.parts);\n } else if (!name) {\n // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`\n this.opcode('pushContext');\n } else if (path.data) {\n this.options.data = true;\n this.opcode('lookupData', path.depth, path.parts, path.strict);\n } else {\n this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);\n }\n },\n\n StringLiteral: function StringLiteral(string) {\n this.opcode('pushString', string.value);\n },\n\n NumberLiteral: function NumberLiteral(number) {\n this.opcode('pushLiteral', number.value);\n },\n\n BooleanLiteral: function BooleanLiteral(bool) {\n this.opcode('pushLiteral', bool.value);\n },\n\n UndefinedLiteral: function UndefinedLiteral() {\n this.opcode('pushLiteral', 'undefined');\n },\n\n NullLiteral: function NullLiteral() {\n this.opcode('pushLiteral', 'null');\n },\n\n Hash: function Hash(hash) {\n var pairs = hash.pairs,\n i = 0,\n l = pairs.length;\n\n this.opcode('pushHash');\n\n for (; i < l; i++) {\n this.pushParam(pairs[i].value);\n }\n while (i--) {\n this.opcode('assignToHash', pairs[i].key);\n }\n this.opcode('popHash');\n },\n\n // HELPERS\n opcode: function opcode(name) {\n this.opcodes.push({\n opcode: name,\n args: slice.call(arguments, 1),\n loc: this.sourceNode[0].loc\n });\n },\n\n addDepth: function addDepth(depth) {\n if (!depth) {\n return;\n }\n\n this.useDepths = true;\n },\n\n classifySexpr: function classifySexpr(sexpr) {\n var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);\n\n var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);\n\n // a mustache is an eligible helper if:\n // * its id is simple (a single part, not `this` or `..`)\n var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);\n\n // if a mustache is an eligible helper but not a definite\n // helper, it is ambiguous, and will be resolved in a later\n // pass or at runtime.\n var isEligible = !isBlockParam && (isHelper || isSimple);\n\n // if ambiguous, we can possibly resolve the ambiguity now\n // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n if (isEligible && !isHelper) {\n var _name = sexpr.path.parts[0],\n options = this.options;\n if (options.knownHelpers[_name]) {\n isHelper = true;\n } else if (options.knownHelpersOnly) {\n isEligible = false;\n }\n }\n\n if (isHelper) {\n return 'helper';\n } else if (isEligible) {\n return 'ambiguous';\n } else {\n return 'simple';\n }\n },\n\n pushParams: function pushParams(params) {\n for (var i = 0, l = params.length; i < l; i++) {\n this.pushParam(params[i]);\n }\n },\n\n pushParam: function pushParam(val) {\n var value = val.value != null ? val.value : val.original || '';\n\n if (this.stringParams) {\n if (value.replace) {\n value = value.replace(/^(\\.?\\.\\/)*/g, '').replace(/\\//g, '.');\n }\n\n if (val.depth) {\n this.addDepth(val.depth);\n }\n this.opcode('getContext', val.depth || 0);\n this.opcode('pushStringParam', value, val.type);\n\n if (val.type === 'SubExpression') {\n // SubExpressions get evaluated and passed in\n // in string params mode.\n this.accept(val);\n }\n } else {\n if (this.trackIds) {\n var blockParamIndex = undefined;\n if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {\n blockParamIndex = this.blockParamIndex(val.parts[0]);\n }\n if (blockParamIndex) {\n var blockParamChild = val.parts.slice(1).join('.');\n this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);\n } else {\n value = val.original || value;\n if (value.replace) {\n value = value.replace(/^this(?:\\.|$)/, '').replace(/^\\.\\//, '').replace(/^\\.$/, '');\n }\n\n this.opcode('pushId', val.type, value);\n }\n }\n this.accept(val);\n }\n },\n\n setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {\n var params = sexpr.params;\n this.pushParams(params);\n\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n\n if (sexpr.hash) {\n this.accept(sexpr.hash);\n } else {\n this.opcode('emptyHash', omitEmpty);\n }\n\n return params;\n },\n\n blockParamIndex: function blockParamIndex(name) {\n for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {\n var blockParams = this.options.blockParams[depth],\n param = blockParams && _utils.indexOf(blockParams, name);\n if (blockParams && param >= 0) {\n return [depth, param];\n }\n }\n }\n};\n\nfunction precompile(input, options, env) {\n if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);\n }\n\n options = options || {};\n if (!('data' in options)) {\n options.data = true;\n }\n if (options.compat) {\n options.useDepths = true;\n }\n\n var ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options);\n return new env.JavaScriptCompiler().compile(environment, options);\n}\n\nfunction compile(input, options, env) {\n if (options === undefined) options = {};\n\n if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);\n }\n\n options = _utils.extend({}, options);\n if (!('data' in options)) {\n options.data = true;\n }\n if (options.compat) {\n options.useDepths = true;\n }\n\n var compiled = undefined;\n\n function compileInput() {\n var ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options),\n templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);\n return env.template(templateSpec);\n }\n\n // Template is only compiled on first use and cached after that point.\n function ret(context, execOptions) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled.call(this, context, execOptions);\n }\n ret._setup = function (setupOptions) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled._setup(setupOptions);\n };\n ret._child = function (i, data, blockParams, depths) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled._child(i, data, blockParams, depths);\n };\n return ret;\n}\n\nfunction argEquals(a, b) {\n if (a === b) {\n return true;\n }\n\n if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {\n for (var i = 0; i < a.length; i++) {\n if (!argEquals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n}\n\nfunction transformLiteralToPath(sexpr) {\n if (!sexpr.path.parts) {\n var literal = sexpr.path;\n // Casting to string here to make false and 0 literal values play nicely with the rest\n // of the system.\n sexpr.path = {\n type: 'PathExpression',\n data: false,\n depth: 0,\n parts: [literal.original + ''],\n original: literal.original + '',\n loc: literal.loc\n };\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozt5QkFFc0IsY0FBYzs7OztxQkFDSyxVQUFVOzttQkFDbkMsT0FBTzs7OztBQUV2QixJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDOztBQUVoQixTQUFTLFFBQVEsR0FBRyxFQUFFOzs7Ozs7O0FBTzdCLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsVUFBUSxFQUFFLFFBQVE7O0FBRWxCLFFBQU0sRUFBRSxnQkFBUyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDaEMsYUFBTyxLQUFLLENBQUM7S0FDZDs7QUFFRCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQzFCLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFVBQ0UsTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxJQUNwQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFDekM7QUFDQSxlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7Ozs7QUFJRCxPQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixVQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEs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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxQixlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiO0NBQ0Y7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7QUFDckMsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLFFBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7OztBQUd6QixTQUFLLENBQUMsSUFBSSxHQUFHO0FBQ1gsVUFBSSxFQUFFLGdCQUFnQjtBQUN0QixVQUFJLEVBQUUsS0FBSztBQUNYLFdBQUssRUFBRSxDQUFDO0FBQ1IsV0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDOUIsY0FBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRTtBQUMvQixTQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7S0FDakIsQ0FBQztHQUNIO0NBQ0YiLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXksIGluZGV4T2YsIGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgIG90aGVyT3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgb3Bjb2RlLm9wY29kZSAhPT0gb3RoZXJPcGNvZGUub3Bjb2RlIHx8XG4gICAgICAgICFhcmdFcXVhbHMob3Bjb2RlLmFyZ3MsIG90aGVyT3Bjb2RlLmFyZ3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGtub3cgdGhhdCBsZW5ndGggaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IHRpZWRcbiAgICAvLyB0byB0aGUgb3Bjb2RlIGJlaGF2aW9yIGFib3ZlLlxuICAgIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5lcXVhbHMob3RoZXIuY2hpbGRyZW5baV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBndWlkOiAwLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKHByb2dyYW0sIG9wdGlvbnMpIHtcbiAgICB0aGlzLnNvdXJjZU5vZGUgPSBbXTtcbiAgICB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IG9wdGlvbnMuc3RyaW5nUGFyYW1zO1xuICAgIHRoaXMudHJhY2tJZHMgPSBvcHRpb25zLnRyYWNrSWRzO1xuXG4gICAgb3B0aW9ucy5ibG9ja1BhcmFtcyA9IG9wdGlvbnMuYmxvY2tQYXJhbXMgfHwgW107XG5cbiAgICBvcHRpb25zLmtub3duSGVscGVycyA9IGV4dGVuZChcbiAgICAgIE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICB7XG4gICAgICAgIGhlbHBlck1pc3Npbmc6IHRydWUsXG4gICAgICAgIGJsb2NrSGVscGVyTWlzc2luZzogdHJ1ZSxcbiAgICAgICAgZWFjaDogdHJ1ZSxcbiAgICAgICAgaWY6IHRydWUsXG4gICAgICAgIHVubGVzczogdHJ1ZSxcbiAgICAgICAgd2l0aDogdHJ1ZSxcbiAgICAgICAgbG9nOiB0cnVlLFxuICAgICAgICBsb29rdXA6IHRydWVcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmtub3duSGVscGVyc1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5hY2NlcHQocHJvZ3JhbSk7XG4gIH0sXG5cbiAgY29tcGlsZVByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICBsZXQgY2hpbGRDb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICBndWlkID0gdGhpcy5ndWlkKys7XG5cbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0aGlzLnVzZVBhcnRpYWwgfHwgcmVzdWx0LnVzZVBhcnRpYWw7XG5cbiAgICB0aGlzLmNoaWxkcmVuW2d1aWRdID0gcmVzdWx0O1xuICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgcmVzdWx0LnVzZURlcHRocztcblxuICAgIHJldHVybiBndWlkO1xuICB9LFxuXG4gIGFjY2VwdDogZnVuY3Rpb24obm9kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tub2RlLnR5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHR5cGU6ICcgKyBub2RlLnR5cGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlTm9kZS51bnNoaWZ0KG5vZGUpO1xuICAgIGxldCByZXQgPSB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gICAgdGhpcy5zb3VyY2VOb2RlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnVuc2hpZnQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYm9keSA9IHByb2dyYW0uYm9keSxcbiAgICAgIGJvZHlMZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnNoaWZ0KCk7XG5cbiAgICB0aGlzLmlzU2ltcGxlID0gYm9keUxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gcHJvZ3JhbS5ibG9ja1BhcmFtcyA/IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoIDogMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihibG9jaykge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoYmxvY2spO1xuXG4gICAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtLFxuICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICBwYXRoID0gZGVjb3JhdG9yLnBhdGg7XG5cbiAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgIHRoaXMub3Bjb2RlKCdyZWdpc3RlckRlY29yYXRvcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwpO1xuICB9LFxuXG4gIFBhcnRpYWxTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlO1xuXG4gICAgbGV0IHByb2dyYW0gPSBwYXJ0aWFsLnByb2dyYW07XG4gICAgaWYgKHByb2dyYW0pIHtcbiAgICAgIHByb2dyYW0gPSB0aGlzLmNvbXBpbGVQcm9ncmFtKHBhcnRpYWwucHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IHBhcnRpYWwucGFyYW1zO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1Vuc3VwcG9ydGVkIG51bWJlciBvZiBwYXJ0aWFsIGFyZ3VtZW50czogJyArIHBhcmFtcy5sZW5ndGgsXG4gICAgICAgIHBhcnRpYWxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghcGFyYW1zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBsaWNpdFBhcnRpYWxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICd1bmRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKHsgdHlwZTogJ1BhdGhFeHByZXNzaW9uJywgcGFydHM6IFtdLCBkZXB0aDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICBpc0R5bmFtaWMgPSBwYXJ0aWFsLm5hbWUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nO1xuICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgIHRoaXMuYWNjZXB0KHBhcnRpYWwubmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhwYXJ0aWFsLCBwcm9ncmFtLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgbGV0IGluZGVudCA9IHBhcnRpYWwuaW5kZW50IHx8ICcnO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmVudEluZGVudCAmJiBpbmRlbnQpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRDb250ZW50JywgaW5kZW50KTtcbiAgICAgIGluZGVudCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdpbnZva2VQYXJ0aWFsJywgaXNEeW5hbWljLCBwYXJ0aWFsTmFtZSwgaW5kZW50KTtcbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbEJsb2NrKSB7XG4gICAgdGhpcy5QYXJ0aWFsU3RhdGVtZW50KHBhcnRpYWxCbG9jayk7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gICAgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKTtcblxuICAgIGlmIChtdXN0YWNoZS5lc2NhcGVkICYmICF0aGlzLm9wdGlvbnMubm9Fc2NhcGUpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRFc2NhcGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgICB9XG4gIH0sXG4gIERlY29yYXRvcihkZWNvcmF0b3IpIHtcbiAgICB0aGlzLkRlY29yYXRvckJsb2NrKGRlY29yYXRvcik7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oY29udGVudCkge1xuICAgIGlmIChjb250ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVudCcsIGNvbnRlbnQudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigpIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgdHJhbnNmb3JtTGl0ZXJhbFRvUGF0aChzZXhwcik7XG4gICAgbGV0IHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7XG4gICAgICB0aGlzLmhlbHBlclNleHByKHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihzZXhwcik7XG4gICAgfVxuICB9LFxuICBhbWJpZ3VvdXNTZXhwcjogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICBsZXQgcGF0aCA9IHNleHByLnBhdGgsXG4gICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgIGlzQmxvY2sgPSBwcm9ncmFtICE9IG51bGwgfHwgaW52ZXJzZSAhPSBudWxsO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBwYXRoLmRlcHRoKTtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuXG4gICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZUFtYmlndW91cycsIG5hbWUsIGlzQmxvY2spO1xuICB9LFxuXG4gIHNpbXBsZVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBwYXRoID0gc2V4cHIucGF0aDtcbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG4gICAgdGhpcy5vcGNvZGUoJ3Jlc29sdmVQb3NzaWJsZUxhbWJkYScpO1xuICB9LFxuXG4gIGhlbHBlclNleHByOiBmdW5jdGlvbihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSkge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSxcbiAgICAgIHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1lvdSBzcGVjaWZpZWQga25vd25IZWxwZXJzT25seSwgYnV0IHVzZWQgdGhlIHVua25vd24gaGVscGVyICcgKyBuYW1lLFxuICAgICAgICBzZXhwclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoXG4gICAgICAgICdpbnZva2VIZWxwZXInLFxuICAgICAgICBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBwYXRoLm9yaWdpbmFsLFxuICAgICAgICBBU1QuaGVscGVycy5zaW1wbGVJZChwYXRoKVxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICBzY29wZWQgPSBBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSxcbiAgICAgIGJsb2NrUGFyYW1JZCA9ICFwYXRoLmRlcHRoICYmICFzY29wZWQgJiYgdGhpcy5ibG9ja1BhcmFtSW5kZXgobmFtZSk7XG5cbiAgICBpZiAoYmxvY2tQYXJhbUlkKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JZCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmICghbmFtZSkge1xuICAgICAgLy8gQ29udGV4dCByZWZlcmVuY2UsIGkuZS4gYHt7Zm9vIC59fWAgb3IgYHt7Zm9vIC4ufX1gXG4gICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQnKTtcbiAgICB9IGVsc2UgaWYgKHBhdGguZGF0YSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERhdGEnLCBwYXRoLmRlcHRoLCBwYXRoLnBhcnRzLCBwYXRoLnN0cmljdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKFxuICAgICAgICAnbG9va3VwT25Db250ZXh0JyxcbiAgICAgICAgcGF0aC5wYXJ0cyxcbiAgICAgICAgcGF0aC5mYWxzeSxcbiAgICAgICAgcGF0aC5zdHJpY3QsXG4gICAgICAgIHNjb3BlZFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcudmFsdWUpO1xuICB9LFxuXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIG51bWJlci52YWx1ZSk7XG4gIH0sXG5cbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKGJvb2wpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBib29sLnZhbHVlKTtcbiAgfSxcblxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gIH0sXG5cbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICdudWxsJyk7XG4gIH0sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICBpID0gMCxcbiAgICAgIGwgPSBwYWlycy5sZW5ndGg7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTtcblxuICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYWlyc1tpXS52YWx1ZSk7XG4gICAgfVxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhc3NpZ25Ub0hhc2gnLCBwYWlyc1tpXS5rZXkpO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgncG9wSGFzaCcpO1xuICB9LFxuXG4gIC8vIEhFTFBFUlNcbiAgb3Bjb2RlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdGhpcy5vcGNvZGVzLnB1c2goe1xuICAgICAgb3Bjb2RlOiBuYW1lLFxuICAgICAgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgbG9jOiB0aGlzLnNvdXJjZU5vZGVbMF0ubG9jXG4gICAgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7XG4gICAgICAgIGlzSGVscGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICAgIGlzRWxpZ2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNIZWxwZXIpIHtcbiAgICAgIHJldHVybiAnaGVscGVyJztcbiAgICB9IGVsc2UgaWYgKGlzRWxpZ2libGUpIHtcbiAgICAgIHJldHVybiAnYW1iaWd1b3VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdzaW1wbGUnO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2hQYXJhbTogZnVuY3Rpb24odmFsKSB7XG4gICAgbGV0IHZhbHVlID0gdmFsLnZhbHVlICE9IG51bGwgPyB2YWwudmFsdWUgOiB2YWwub3JpZ2luYWwgfHwgJyc7XG5cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpLnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsLmRlcHRoKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwdGgodmFsLmRlcHRoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgdmFsLmRlcHRoIHx8IDApO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmdQYXJhbScsIHZhbHVlLCB2YWwudHlwZSk7XG5cbiAgICAgIGlmICh2YWwudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nKSB7XG4gICAgICAgIC8vIFN1YkV4cHJlc3Npb25zIGdldCBldmFsdWF0ZWQgYW5kIHBhc3NlZCBpblxuICAgICAgICAvLyBpbiBzdHJpbmcgcGFyYW1zIG1vZGUuXG4gICAgICAgIHRoaXMuYWNjZXB0KHZhbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICAgIGxldCBibG9ja1BhcmFtSW5kZXg7XG4gICAgICAgIGlmICh2YWwucGFydHMgJiYgIUFTVC5oZWxwZXJzLnNjb3BlZElkKHZhbCkgJiYgIXZhbC5kZXB0aCkge1xuICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXnRoaXMoPzpcXC58JCkvLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC5cXC8vLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKFxuICAgICAgbGV0IGRlcHRoID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLmxlbmd0aDtcbiAgICAgIGRlcHRoIDwgbGVuO1xuICAgICAgZGVwdGgrK1xuICAgICkge1xuICAgICAgbGV0IGJsb2NrUGFyYW1zID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zW2RlcHRoXSxcbiAgICAgICAgcGFyYW0gPSBibG9ja1BhcmFtcyAmJiBpbmRleE9mKGJsb2NrUGFyYW1zLCBuYW1lKTtcbiAgICAgIGlmIChibG9ja1BhcmFtcyAmJiBwYXJhbSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBbZGVwdGgsIHBhcmFtXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBlbnYpIHtcbiAgaWYgKFxuICAgIGlucHV0ID09IG51bGwgfHxcbiAgICAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlICE9PSAnUHJvZ3JhbScpXG4gICkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAnWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5kbGViYXJzLnByZWNvbXBpbGUuIFlvdSBwYXNzZWQgJyArXG4gICAgICAgIGlucHV0XG4gICAgKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBhc3QgPSBlbnYucGFyc2UoaW5wdXQsIG9wdGlvbnMpLFxuICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKGlucHV0LCBvcHRpb25zID0ge30sIGVudikge1xuICBpZiAoXG4gICAgaW5wdXQgPT0gbnVsbCB8fFxuICAgICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91IHBhc3NlZCAnICtcbiAgICAgICAgaW5wdXRcbiAgICApO1xuICB9XG5cbiAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGNvbXBpbGVkO1xuXG4gIGZ1bmN0aW9uIGNvbXBpbGVJbnB1dCgpIHtcbiAgICBsZXQgYXN0ID0gZW52LnBhcnNlKGlucHV0LCBvcHRpb25zKSxcbiAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgIHRlbXBsYXRlU3BlYyA9IG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICByZXR1cm4gZW52LnRlbXBsYXRlKHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBpcyBvbmx5IGNvbXBpbGVkIG9uIGZpcnN0IHVzZSBhbmQgY2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBleGVjT3B0aW9ucykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5jYWxsKHRoaXMsIGNvbnRleHQsIGV4ZWNPcHRpb25zKTtcbiAgfVxuICByZXQuX3NldHVwID0gZnVuY3Rpb24oc2V0dXBPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9zZXR1cChzZXR1cE9wdGlvbnMpO1xuICB9O1xuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5fY2hpbGQoaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGFyZ0VxdWFscyhhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNBcnJheShhKSAmJiBpc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFhcmdFcXVhbHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKSB7XG4gIGlmICghc2V4cHIucGF0aC5wYXJ0cykge1xuICAgIGxldCBsaXRlcmFsID0gc2V4cHIucGF0aDtcbiAgICAvLyBDYXN0aW5nIHRvIHN0cmluZyBoZXJlIHRvIG1ha2UgZmFsc2UgYW5kIDAgbGl0ZXJhbCB2YWx1ZXMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdFxuICAgIC8vIG9mIHRoZSBzeXN0ZW0uXG4gICAgc2V4cHIucGF0aCA9IHtcbiAgICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsXG4gICAgICBkYXRhOiBmYWxzZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcGFydHM6IFtsaXRlcmFsLm9yaWdpbmFsICsgJyddLFxuICAgICAgb3JpZ2luYWw6IGxpdGVyYWwub3JpZ2luYWwgKyAnJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2NcbiAgICB9O1xuICB9XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _base = require('../base');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nvar _codeGen = require('./code-gen');\n\nvar _codeGen2 = _interopRequireDefault(_codeGen);\n\nfunction Literal(value) {\n this.value = value;\n}\n\nfunction JavaScriptCompiler() {}\n\nJavaScriptCompiler.prototype = {\n // PUBLIC API: You can override these methods in a subclass to provide\n // alternative compiled forms for name lookup and buffering semantics\n nameLookup: function nameLookup(parent, name /*, type */) {\n return this.internalNameLookup(parent, name);\n },\n depthedLookup: function depthedLookup(name) {\n return [this.aliasable('container.lookup'), '(depths, ', JSON.stringify(name), ')'];\n },\n\n compilerInfo: function compilerInfo() {\n var revision = _base.COMPILER_REVISION,\n versions = _base.REVISION_CHANGES[revision];\n return [revision, versions];\n },\n\n appendToBuffer: function appendToBuffer(source, location, explicit) {\n // Force a source as this simplifies the merge logic.\n if (!_utils.isArray(source)) {\n source = [source];\n }\n source = this.source.wrap(source, location);\n\n if (this.environment.isSimple) {\n return ['return ', source, ';'];\n } else if (explicit) {\n // This is a case where the buffer operation occurs as a child of another\n // construct, generally braces. We have to explicitly output these buffer\n // operations to ensure that the emitted code goes in the correct location.\n return ['buffer += ', source, ';'];\n } else {\n source.appendToBuffer = true;\n return source;\n }\n },\n\n initializeBuffer: function initializeBuffer() {\n return this.quotedString('');\n },\n // END PUBLIC API\n internalNameLookup: function internalNameLookup(parent, name) {\n this.lookupPropertyFunctionIsUsed = true;\n return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];\n },\n\n lookupPropertyFunctionIsUsed: false,\n\n compile: function compile(environment, options, context, asObject) {\n this.environment = environment;\n this.options = options;\n this.stringParams = this.options.stringParams;\n this.trackIds = this.options.trackIds;\n this.precompile = !asObject;\n\n this.name = this.environment.name;\n this.isChild = !!context;\n this.context = context || {\n decorators: [],\n programs: [],\n environments: []\n };\n\n this.preamble();\n\n this.stackSlot = 0;\n this.stackVars = [];\n this.aliases = {};\n this.registers = { list: [] };\n this.hashes = [];\n this.compileStack = [];\n this.inlineStack = [];\n this.blockParams = [];\n\n this.compileChildren(environment, options);\n\n this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;\n this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\n var opcodes = environment.opcodes,\n opcode = undefined,\n firstLoc = undefined,\n i = undefined,\n l = undefined;\n\n for (i = 0, l = opcodes.length; i < l; i++) {\n opcode = opcodes[i];\n\n this.source.currentLocation = opcode.loc;\n firstLoc = firstLoc || opcode.loc;\n this[opcode.opcode].apply(this, opcode.args);\n }\n\n // Flush any trailing content that might be pending.\n this.source.currentLocation = firstLoc;\n this.pushSource('');\n\n /* istanbul ignore next */\n if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {\n throw new _exception2['default']('Compile completed with content left on stack');\n }\n\n if (!this.decorators.isEmpty()) {\n this.useDecorators = true;\n\n this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\\n']);\n this.decorators.push('return fn;');\n\n if (asObject) {\n this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);\n } else {\n this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\\n');\n this.decorators.push('}\\n');\n this.decorators = this.decorators.merge();\n }\n } else {\n this.decorators = undefined;\n }\n\n var fn = this.createFunctionContext(asObject);\n if (!this.isChild) {\n var ret = {\n compiler: this.compilerInfo(),\n main: fn\n };\n\n if (this.decorators) {\n ret.main_d = this.decorators; // eslint-disable-line camelcase\n ret.useDecorators = true;\n }\n\n var _context = this.context;\n var programs = _context.programs;\n var decorators = _context.decorators;\n\n for (i = 0, l = programs.length; i < l; i++) {\n if (programs[i]) {\n ret[i] = programs[i];\n if (decorators[i]) {\n ret[i + '_d'] = decorators[i];\n ret.useDecorators = true;\n }\n }\n }\n\n if (this.environment.usePartial) {\n ret.usePartial = true;\n }\n if (this.options.data) {\n ret.useData = true;\n }\n if (this.useDepths) {\n ret.useDepths = true;\n }\n if (this.useBlockParams) {\n ret.useBlockParams = true;\n }\n if (this.options.compat) {\n ret.compat = true;\n }\n\n if (!asObject) {\n ret.compiler = JSON.stringify(ret.compiler);\n\n this.source.currentLocation = { start: { line: 1, column: 0 } };\n ret = this.objectLiteral(ret);\n\n if (options.srcName) {\n ret = ret.toStringWithSourceMap({ file: options.destName });\n ret.map = ret.map && ret.map.toString();\n } else {\n ret = ret.toString();\n }\n } else {\n ret.compilerOptions = this.options;\n }\n\n return ret;\n } else {\n return fn;\n }\n },\n\n preamble: function preamble() {\n // track the last context pushed into place to allow skipping the\n // getContext opcode when it would be a noop\n this.lastContext = 0;\n this.source = new _codeGen2['default'](this.options.srcName);\n this.decorators = new _codeGen2['default'](this.options.srcName);\n },\n\n createFunctionContext: function createFunctionContext(asObject) {\n // istanbul ignore next\n\n var _this = this;\n\n var varDeclarations = '';\n\n var locals = this.stackVars.concat(this.registers.list);\n if (locals.length > 0) {\n varDeclarations += ', ' + locals.join(', ');\n }\n\n // Generate minimizer alias mappings\n //\n // When using true SourceNodes, this will update all references to the given alias\n // as the source nodes are reused in situ. For the non-source node compilation mode,\n // aliases will not be used, but this case is already being run on the client and\n // we aren't concern about minimizing the template size.\n var aliasCount = 0;\n Object.keys(this.aliases).forEach(function (alias) {\n var node = _this.aliases[alias];\n if (node.children && node.referenceCount > 1) {\n varDeclarations += ', alias' + ++aliasCount + '=' + alias;\n node.children[0] = 'alias' + aliasCount;\n }\n });\n\n if (this.lookupPropertyFunctionIsUsed) {\n varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();\n }\n\n var params = ['container', 'depth0', 'helpers', 'partials', 'data'];\n\n if (this.useBlockParams || this.useDepths) {\n params.push('blockParams');\n }\n if (this.useDepths) {\n params.push('depths');\n }\n\n // Perform a second pass over the output to merge content when possible\n var source = this.mergeSource(varDeclarations);\n\n if (asObject) {\n params.push(source);\n\n return Function.apply(this, params);\n } else {\n return this.source.wrap(['function(', params.join(','), ') {\\n ', source, '}']);\n }\n },\n mergeSource: function mergeSource(varDeclarations) {\n var isSimple = this.environment.isSimple,\n appendOnly = !this.forceBuffer,\n appendFirst = undefined,\n sourceSeen = undefined,\n bufferStart = undefined,\n bufferEnd = undefined;\n this.source.each(function (line) {\n if (line.appendToBuffer) {\n if (bufferStart) {\n line.prepend(' + ');\n } else {\n bufferStart = line;\n }\n bufferEnd = line;\n } else {\n if (bufferStart) {\n if (!sourceSeen) {\n appendFirst = true;\n } else {\n bufferStart.prepend('buffer += ');\n }\n bufferEnd.add(';');\n bufferStart = bufferEnd = undefined;\n }\n\n sourceSeen = true;\n if (!isSimple) {\n appendOnly = false;\n }\n }\n });\n\n if (appendOnly) {\n if (bufferStart) {\n bufferStart.prepend('return ');\n bufferEnd.add(';');\n } else if (!sourceSeen) {\n this.source.push('return \"\";');\n }\n } else {\n varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());\n\n if (bufferStart) {\n bufferStart.prepend('return buffer + ');\n bufferEnd.add(';');\n } else {\n this.source.push('return buffer;');\n }\n }\n\n if (varDeclarations) {\n this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n'));\n }\n\n return this.source.merge();\n },\n\n lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {\n return '\\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\\n return parent[propertyName];\\n }\\n return undefined\\n }\\n '.trim();\n },\n\n // [blockValue]\n //\n // On stack, before: hash, inverse, program, value\n // On stack, after: return value of blockHelperMissing\n //\n // The purpose of this opcode is to take a block of the form\n // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n // replace it on the stack with the result of properly\n // invoking blockHelperMissing.\n blockValue: function blockValue(name) {\n var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n params = [this.contextName(0)];\n this.setupHelperArgs(name, 0, params);\n\n var blockName = this.popStack();\n params.splice(1, 0, blockName);\n\n this.push(this.source.functionCall(blockHelperMissing, 'call', params));\n },\n\n // [ambiguousBlockValue]\n //\n // On stack, before: hash, inverse, program, value\n // Compiler value, before: lastHelper=value of last found helper, if any\n // On stack, after, if no lastHelper: same as [blockValue]\n // On stack, after, if lastHelper: value\n ambiguousBlockValue: function ambiguousBlockValue() {\n // We're being a bit cheeky and reusing the options value from the prior exec\n var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n params = [this.contextName(0)];\n this.setupHelperArgs('', 0, params, true);\n\n this.flushInline();\n\n var current = this.topStack();\n params.splice(1, 0, current);\n\n this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);\n },\n\n // [appendContent]\n //\n // On stack, before: ...\n // On stack, after: ...\n //\n // Appends the string value of `content` to the current buffer\n appendContent: function appendContent(content) {\n if (this.pendingContent) {\n content = this.pendingContent + content;\n } else {\n this.pendingLocation = this.source.currentLocation;\n }\n\n this.pendingContent = content;\n },\n\n // [append]\n //\n // On stack, before: value, ...\n // On stack, after: ...\n //\n // Coerces `value` to a String and appends it to the current buffer.\n //\n // If `value` is truthy, or 0, it is coerced into a string and appended\n // Otherwise, the empty string is appended\n append: function append() {\n if (this.isInline()) {\n this.replaceStack(function (current) {\n return [' != null ? ', current, ' : \"\"'];\n });\n\n this.pushSource(this.appendToBuffer(this.popStack()));\n } else {\n var local = this.popStack();\n this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);\n if (this.environment.isSimple) {\n this.pushSource(['else { ', this.appendToBuffer(\"''\", undefined, true), ' }']);\n }\n }\n },\n\n // [appendEscaped]\n //\n // On stack, before: value, ...\n // On stack, after: ...\n //\n // Escape `value` and append it to the buffer\n appendEscaped: function appendEscaped() {\n this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));\n },\n\n // [getContext]\n //\n // On stack, before: ...\n // On stack, after: ...\n // Compiler value, after: lastContext=depth\n //\n // Set the value of the `lastContext` compiler value to the depth\n getContext: function getContext(depth) {\n this.lastContext = depth;\n },\n\n // [pushContext]\n //\n // On stack, before: ...\n // On stack, after: currentContext, ...\n //\n // Pushes the value of the current context onto the stack.\n pushContext: function pushContext() {\n this.pushStackLiteral(this.contextName(this.lastContext));\n },\n\n // [lookupOnContext]\n //\n // On stack, before: ...\n // On stack, after: currentContext[name], ...\n //\n // Looks up the value of `name` on the current context and pushes\n // it onto the stack.\n lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {\n var i = 0;\n\n if (!scoped && this.options.compat && !this.lastContext) {\n // The depthed query is expected to handle the undefined logic for the root level that\n // is implemented below, so we evaluate that directly in compat mode\n this.push(this.depthedLookup(parts[i++]));\n } else {\n this.pushContext();\n }\n\n this.resolvePath('context', parts, i, falsy, strict);\n },\n\n // [lookupBlockParam]\n //\n // On stack, before: ...\n // On stack, after: blockParam[name], ...\n //\n // Looks up the value of `parts` on the given block param and pushes\n // it onto the stack.\n lookupBlockParam: function lookupBlockParam(blockParamId, parts) {\n this.useBlockParams = true;\n\n this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);\n this.resolvePath('context', parts, 1);\n },\n\n // [lookupData]\n //\n // On stack, before: ...\n // On stack, after: data, ...\n //\n // Push the data lookup operator\n lookupData: function lookupData(depth, parts, strict) {\n if (!depth) {\n this.pushStackLiteral('data');\n } else {\n this.pushStackLiteral('container.data(data, ' + depth + ')');\n }\n\n this.resolvePath('data', parts, 0, true, strict);\n },\n\n resolvePath: function resolvePath(type, parts, i, falsy, strict) {\n // istanbul ignore next\n\n var _this2 = this;\n\n if (this.options.strict || this.options.assumeObjects) {\n this.push(strictLookup(this.options.strict && strict, this, parts, i, type));\n return;\n }\n\n var len = parts.length;\n for (; i < len; i++) {\n /* eslint-disable no-loop-func */\n this.replaceStack(function (current) {\n var lookup = _this2.nameLookup(current, parts[i], type);\n // We want to ensure that zero and false are handled properly if the context (falsy flag)\n // needs to have the special handling for these values.\n if (!falsy) {\n return [' != null ? ', lookup, ' : ', current];\n } else {\n // Otherwise we can use generic falsy handling\n return [' && ', lookup];\n }\n });\n /* eslint-enable no-loop-func */\n }\n },\n\n // [resolvePossibleLambda]\n //\n // On stack, before: value, ...\n // On stack, after: resolved value, ...\n //\n // If the `value` is a lambda, replace it on the stack by\n // the return value of the lambda\n resolvePossibleLambda: function resolvePossibleLambda() {\n this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);\n },\n\n // [pushStringParam]\n //\n // On stack, before: ...\n // On stack, after: string, currentContext, ...\n //\n // This opcode is designed for use in string mode, which\n // provides the string value of a parameter along with its\n // depth rather than resolving it immediately.\n pushStringParam: function pushStringParam(string, type) {\n this.pushContext();\n this.pushString(type);\n\n // If it's a subexpression, the string result\n // will be pushed after this opcode.\n if (type !== 'SubExpression') {\n if (typeof string === 'string') {\n this.pushString(string);\n } else {\n this.pushStackLiteral(string);\n }\n }\n },\n\n emptyHash: function emptyHash(omitEmpty) {\n if (this.trackIds) {\n this.push('{}'); // hashIds\n }\n if (this.stringParams) {\n this.push('{}'); // hashContexts\n this.push('{}'); // hashTypes\n }\n this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');\n },\n pushHash: function pushHash() {\n if (this.hash) {\n this.hashes.push(this.hash);\n }\n this.hash = { values: {}, types: [], contexts: [], ids: [] };\n },\n popHash: function popHash() {\n var hash = this.hash;\n this.hash = this.hashes.pop();\n\n if (this.trackIds) {\n this.push(this.objectLiteral(hash.ids));\n }\n if (this.stringParams) {\n this.push(this.objectLiteral(hash.contexts));\n this.push(this.objectLiteral(hash.types));\n }\n\n this.push(this.objectLiteral(hash.values));\n },\n\n // [pushString]\n //\n // On stack, before: ...\n // On stack, after: quotedString(string), ...\n //\n // Push a quoted version of `string` onto the stack\n pushString: function pushString(string) {\n this.pushStackLiteral(this.quotedString(string));\n },\n\n // [pushLiteral]\n //\n // On stack, before: ...\n // On stack, after: value, ...\n //\n // Pushes a value onto the stack. This operation prevents\n // the compiler from creating a temporary variable to hold\n // it.\n pushLiteral: function pushLiteral(value) {\n this.pushStackLiteral(value);\n },\n\n // [pushProgram]\n //\n // On stack, before: ...\n // On stack, after: program(guid), ...\n //\n // Push a program expression onto the stack. This takes\n // a compile-time guid and converts it into a runtime-accessible\n // expression.\n pushProgram: function pushProgram(guid) {\n if (guid != null) {\n this.pushStackLiteral(this.programExpression(guid));\n } else {\n this.pushStackLiteral(null);\n }\n },\n\n // [registerDecorator]\n //\n // On stack, before: hash, program, params..., ...\n // On stack, after: ...\n //\n // Pops off the decorator's parameters, invokes the decorator,\n // and inserts the decorator into the decorators list.\n registerDecorator: function registerDecorator(paramSize, name) {\n var foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n options = this.setupHelperArgs(name, paramSize);\n\n this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);\n },\n\n // [invokeHelper]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of helper invocation\n //\n // Pops off the helper's parameters, invokes the helper,\n // and pushes the helper's return value onto the stack.\n //\n // If the helper is not found, `helperMissing` is called.\n invokeHelper: function invokeHelper(paramSize, name, isSimple) {\n var nonHelper = this.popStack(),\n helper = this.setupHelper(paramSize, name);\n\n var possibleFunctionCalls = [];\n\n if (isSimple) {\n // direct call to helper\n possibleFunctionCalls.push(helper.name);\n }\n // call a function from the input object\n possibleFunctionCalls.push(nonHelper);\n if (!this.options.strict) {\n possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing'));\n }\n\n var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')'];\n var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams);\n this.push(functionCall);\n },\n\n itemsSeparatedBy: function itemsSeparatedBy(items, separator) {\n var result = [];\n result.push(items[0]);\n for (var i = 1; i < items.length; i++) {\n result.push(separator, items[i]);\n }\n return result;\n },\n // [invokeKnownHelper]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of helper invocation\n //\n // This operation is used when the helper is known to exist,\n // so a `helperMissing` fallback is not required.\n invokeKnownHelper: function invokeKnownHelper(paramSize, name) {\n var helper = this.setupHelper(paramSize, name);\n this.push(this.source.functionCall(helper.name, 'call', helper.callParams));\n },\n\n // [invokeAmbiguous]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of disambiguation\n //\n // This operation is used when an expression like `{{foo}}`\n // is provided, but we don't know at compile-time whether it\n // is a helper or a path.\n //\n // This operation emits more code than the other options,\n // and can be avoided by passing the `knownHelpers` and\n // `knownHelpersOnly` flags at compile-time.\n invokeAmbiguous: function invokeAmbiguous(name, helperCall) {\n this.useRegister('helper');\n\n var nonHelper = this.popStack();\n\n this.emptyHash();\n var helper = this.setupHelper(0, name, helperCall);\n\n var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');\n\n var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n if (!this.options.strict) {\n lookup[0] = '(helper = ';\n lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing'));\n }\n\n this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('\"function\"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);\n },\n\n // [invokePartial]\n //\n // On stack, before: context, ...\n // On stack after: result of partial invocation\n //\n // This operation pops off a context, invokes a partial with that context,\n // and pushes the result of the invocation back.\n invokePartial: function invokePartial(isDynamic, name, indent) {\n var params = [],\n options = this.setupParams(name, 1, params);\n\n if (isDynamic) {\n name = this.popStack();\n delete options.name;\n }\n\n if (indent) {\n options.indent = JSON.stringify(indent);\n }\n options.helpers = 'helpers';\n options.partials = 'partials';\n options.decorators = 'container.decorators';\n\n if (!isDynamic) {\n params.unshift(this.nameLookup('partials', name, 'partial'));\n } else {\n params.unshift(name);\n }\n\n if (this.options.compat) {\n options.depths = 'depths';\n }\n options = this.objectLiteral(options);\n params.push(options);\n\n this.push(this.source.functionCall('container.invokePartial', '', params));\n },\n\n // [assignToHash]\n //\n // On stack, before: value, ..., hash, ...\n // On stack, after: ..., hash, ...\n //\n // Pops a value off the stack and assigns it to the current hash\n assignToHash: function assignToHash(key) {\n var value = this.popStack(),\n context = undefined,\n type = undefined,\n id = undefined;\n\n if (this.trackIds) {\n id = this.popStack();\n }\n if (this.stringParams) {\n type = this.popStack();\n context = this.popStack();\n }\n\n var hash = this.hash;\n if (context) {\n hash.contexts[key] = context;\n }\n if (type) {\n hash.types[key] = type;\n }\n if (id) {\n hash.ids[key] = id;\n }\n hash.values[key] = value;\n },\n\n pushId: function pushId(type, name, child) {\n if (type === 'BlockParam') {\n this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));\n } else if (type === 'PathExpression') {\n this.pushString(name);\n } else if (type === 'SubExpression') {\n this.pushStackLiteral('true');\n } else {\n this.pushStackLiteral('null');\n }\n },\n\n // HELPERS\n\n compiler: JavaScriptCompiler,\n\n compileChildren: function compileChildren(environment, options) {\n var children = environment.children,\n child = undefined,\n compiler = undefined;\n\n for (var i = 0, l = children.length; i < l; i++) {\n child = children[i];\n compiler = new this.compiler(); // eslint-disable-line new-cap\n\n var existing = this.matchExistingProgram(child);\n\n if (existing == null) {\n this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children\n var index = this.context.programs.length;\n child.index = index;\n child.name = 'program' + index;\n this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);\n this.context.decorators[index] = compiler.decorators;\n this.context.environments[index] = child;\n\n this.useDepths = this.useDepths || compiler.useDepths;\n this.useBlockParams = this.useBlockParams || compiler.useBlockParams;\n child.useDepths = this.useDepths;\n child.useBlockParams = this.useBlockParams;\n } else {\n child.index = existing.index;\n child.name = 'program' + existing.index;\n\n this.useDepths = this.useDepths || existing.useDepths;\n this.useBlockParams = this.useBlockParams || existing.useBlockParams;\n }\n }\n },\n matchExistingProgram: function matchExistingProgram(child) {\n for (var i = 0, len = this.context.environments.length; i < len; i++) {\n var environment = this.context.environments[i];\n if (environment && environment.equals(child)) {\n return environment;\n }\n }\n },\n\n programExpression: function programExpression(guid) {\n var child = this.environment.children[guid],\n programParams = [child.index, 'data', child.blockParams];\n\n if (this.useBlockParams || this.useDepths) {\n programParams.push('blockParams');\n }\n if (this.useDepths) {\n programParams.push('depths');\n }\n\n return 'container.program(' + programParams.join(', ') + ')';\n },\n\n useRegister: function useRegister(name) {\n if (!this.registers[name]) {\n this.registers[name] = true;\n this.registers.list.push(name);\n }\n },\n\n push: function push(expr) {\n if (!(expr instanceof Literal)) {\n expr = this.source.wrap(expr);\n }\n\n this.inlineStack.push(expr);\n return expr;\n },\n\n pushStackLiteral: function pushStackLiteral(item) {\n this.push(new Literal(item));\n },\n\n pushSource: function pushSource(source) {\n if (this.pendingContent) {\n this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));\n this.pendingContent = undefined;\n }\n\n if (source) {\n this.source.push(source);\n }\n },\n\n replaceStack: function replaceStack(callback) {\n var prefix = ['('],\n stack = undefined,\n createdStack = undefined,\n usedLiteral = undefined;\n\n /* istanbul ignore next */\n if (!this.isInline()) {\n throw new _exception2['default']('replaceStack on non-inline');\n }\n\n // We want to merge the inline statement into the replacement statement via ','\n var top = this.popStack(true);\n\n if (top instanceof Literal) {\n // Literals do not need to be inlined\n stack = [top.value];\n prefix = ['(', stack];\n usedLiteral = true;\n } else {\n // Get or create the current stack name for use by the inline\n createdStack = true;\n var _name = this.incrStack();\n\n prefix = ['((', this.push(_name), ' = ', top, ')'];\n stack = this.topStack();\n }\n\n var item = callback.call(this, stack);\n\n if (!usedLiteral) {\n this.popStack();\n }\n if (createdStack) {\n this.stackSlot--;\n }\n this.push(prefix.concat(item, ')'));\n },\n\n incrStack: function incrStack() {\n this.stackSlot++;\n if (this.stackSlot > this.stackVars.length) {\n this.stackVars.push('stack' + this.stackSlot);\n }\n return this.topStackName();\n },\n topStackName: function topStackName() {\n return 'stack' + this.stackSlot;\n },\n flushInline: function flushInline() {\n var inlineStack = this.inlineStack;\n this.inlineStack = [];\n for (var i = 0, len = inlineStack.length; i < len; i++) {\n var entry = inlineStack[i];\n /* istanbul ignore if */\n if (entry instanceof Literal) {\n this.compileStack.push(entry);\n } else {\n var stack = this.incrStack();\n this.pushSource([stack, ' = ', entry, ';']);\n this.compileStack.push(stack);\n }\n }\n },\n isInline: function isInline() {\n return this.inlineStack.length;\n },\n\n popStack: function popStack(wrapped) {\n var inline = this.isInline(),\n item = (inline ? this.inlineStack : this.compileStack).pop();\n\n if (!wrapped && item instanceof Literal) {\n return item.value;\n } else {\n if (!inline) {\n /* istanbul ignore next */\n if (!this.stackSlot) {\n throw new _exception2['default']('Invalid stack pop');\n }\n this.stackSlot--;\n }\n return item;\n }\n },\n\n topStack: function topStack() {\n var stack = this.isInline() ? this.inlineStack : this.compileStack,\n item = stack[stack.length - 1];\n\n /* istanbul ignore if */\n if (item instanceof Literal) {\n return item.value;\n } else {\n return item;\n }\n },\n\n contextName: function contextName(context) {\n if (this.useDepths && context) {\n return 'depths[' + context + ']';\n } else {\n return 'depth' + context;\n }\n },\n\n quotedString: function quotedString(str) {\n return this.source.quotedString(str);\n },\n\n objectLiteral: function objectLiteral(obj) {\n return this.source.objectLiteral(obj);\n },\n\n aliasable: function aliasable(name) {\n var ret = this.aliases[name];\n if (ret) {\n ret.referenceCount++;\n return ret;\n }\n\n ret = this.aliases[name] = this.source.wrap(name);\n ret.aliasable = true;\n ret.referenceCount = 1;\n\n return ret;\n },\n\n setupHelper: function setupHelper(paramSize, name, blockHelper) {\n var params = [],\n paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n var foundHelper = this.nameLookup('helpers', name, 'helper'),\n callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})');\n\n return {\n params: params,\n paramsInit: paramsInit,\n name: foundHelper,\n callParams: [callContext].concat(params)\n };\n },\n\n setupParams: function setupParams(helper, paramSize, params) {\n var options = {},\n contexts = [],\n types = [],\n ids = [],\n objectArgs = !params,\n param = undefined;\n\n if (objectArgs) {\n params = [];\n }\n\n options.name = this.quotedString(helper);\n options.hash = this.popStack();\n\n if (this.trackIds) {\n options.hashIds = this.popStack();\n }\n if (this.stringParams) {\n options.hashTypes = this.popStack();\n options.hashContexts = this.popStack();\n }\n\n var inverse = this.popStack(),\n program = this.popStack();\n\n // Avoid setting fn and inverse if neither are set. This allows\n // helpers to do a check for `if (options.fn)`\n if (program || inverse) {\n options.fn = program || 'container.noop';\n options.inverse = inverse || 'container.noop';\n }\n\n // The parameters go on to the stack in order (making sure that they are evaluated in order)\n // so we need to pop them off the stack in reverse order\n var i = paramSize;\n while (i--) {\n param = this.popStack();\n params[i] = param;\n\n if (this.trackIds) {\n ids[i] = this.popStack();\n }\n if (this.stringParams) {\n types[i] = this.popStack();\n contexts[i] = this.popStack();\n }\n }\n\n if (objectArgs) {\n options.args = this.source.generateArray(params);\n }\n\n if (this.trackIds) {\n options.ids = this.source.generateArray(ids);\n }\n if (this.stringParams) {\n options.types = this.source.generateArray(types);\n options.contexts = this.source.generateArray(contexts);\n }\n\n if (this.options.data) {\n options.data = 'data';\n }\n if (this.useBlockParams) {\n options.blockParams = 'blockParams';\n }\n return options;\n },\n\n setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {\n var options = this.setupParams(helper, paramSize, params);\n options.loc = JSON.stringify(this.source.currentLocation);\n options = this.objectLiteral(options);\n if (useRegister) {\n this.useRegister('options');\n params.push('options');\n return ['options=', options];\n } else if (params) {\n params.push(options);\n return '';\n } else {\n return options;\n }\n }\n};\n\n(function () {\n var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');\n\n var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};\n\n for (var i = 0, l = reservedWords.length; i < l; i++) {\n compilerWords[reservedWords[i]] = true;\n }\n})();\n\n/**\n * @deprecated May be removed in the next major version\n */\nJavaScriptCompiler.isValidJavaScriptVariableName = function (name) {\n return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);\n};\n\nfunction strictLookup(requireTerminal, compiler, parts, i, type) {\n var stack = compiler.popStack(),\n len = parts.length;\n if (requireTerminal) {\n len--;\n }\n\n for (; i < len; i++) {\n stack = compiler.nameLookup(stack, parts[i], type);\n }\n\n if (requireTerminal) {\n return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];\n } else {\n return stack;\n }\n}\n\nexports['default'] = JavaScriptCompiler;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztvQkFBb0QsU0FBUzs7eUJBQ3ZDLGNBQWM7Ozs7cUJBQ1osVUFBVTs7dUJBQ2QsWUFBWTs7OztBQUVoQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsTUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDcEI7O0FBRUQsU0FBUyxrQkFBa0IsR0FBRyxFQUFFOztBQUVoQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUc7OztBQUc3QixZQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFLElBQUksZUFBZTtBQUM5QyxXQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDOUM7QUFDRCxlQUFhLEVBQUUsdUJBQVMsSUFBSSxFQUFFO0FBQzVCLFdBQU8sQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQ2xDLFdBQVcsRUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNwQixHQUFHLENBQ0osQ0FBQztHQUNIOztBQUVELGNBQVksRUFBRSx3QkFBVztBQUN2QixRQUFNLFFBQVEsMEJBQW9CO1FBQ2hDLFFBQVEsR0FBRyx1QkFBaUIsUUFBUSxDQUFDLENBQUM7QUFDeEMsV0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztHQUM3Qjs7QUFFRCxnQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFOztBQUVuRCxRQUFJLENBQUMsZUFBUSxNQUFNLENBQUMsRUFBRTtBQUNwQixZQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuQjtBQUNELFVBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRTVDLFFB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LEVBQUU7QUFDbkIsU0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztHQUNwRDs7QUFFRCxNQUFJLGVBQWUsRUFBRTtBQUNuQixXQUFPLENBQ0wsUUFBUSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUN0QyxHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMvQixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUMvQyxJQUFJLENBQ0wsQ0FBQztHQUNILE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O3FCQUVjLGtCQUFrQiIsImZpbGUiOiJqYXZhc2NyaXB0LWNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVMgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgQ29kZUdlbiBmcm9tICcuL2NvZGUtZ2VuJztcblxuZnVuY3Rpb24gTGl0ZXJhbCh2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEphdmFTY3JpcHRDb21waWxlcigpIHt9XG5cbkphdmFTY3JpcHRDb21waWxlci5wcm90b3R5cGUgPSB7XG4gIC8vIFBVQkxJQyBBUEk6IFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgbWV0aG9kcyBpbiBhIHN1YmNsYXNzIHRvIHByb3ZpZGVcbiAgLy8gYWx0ZXJuYXRpdmUgY29tcGlsZWQgZm9ybXMgZm9yIG5hbWUgbG9va3VwIGFuZCBidWZmZXJpbmcgc2VtYW50aWNzXG4gIG5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSAvKiwgIHR5cGUgKi8pIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbE5hbWVMb29rdXAocGFyZW50LCBuYW1lKTtcbiAgfSxcbiAgZGVwdGhlZExvb2t1cDogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxvb2t1cCcpLFxuICAgICAgJyhkZXB0aHMsICcsXG4gICAgICBKU09OLnN0cmluZ2lmeShuYW1lKSxcbiAgICAgICcpJ1xuICAgIF07XG4gIH0sXG5cbiAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OLFxuICAgICAgdmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW3JldmlzaW9uXTtcbiAgICByZXR1cm4gW3JldmlzaW9uLCB2ZXJzaW9uc107XG4gIH0sXG5cbiAgYXBwZW5kVG9CdWZmZXI6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jYXRpb24sIGV4cGxpY2l0KSB7XG4gICAgLy8gRm9yY2UgYSBzb3VyY2UgYXMgdGhpcyBzaW1wbGlmaWVzIHRoZSBtZXJnZSBsb2dpYy5cbiAgICBpZiAoIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgc291cmNlID0gW3NvdXJjZV07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuc291cmNlLndyYXAoc291cmNlLCBsb2NhdGlvbik7XG5cbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkge1xuICAgICAgcmV0dXJuIFsncmV0dXJuICcsIHNvdXJjZSwgJzsnXTtcbiAgICB9IGVsc2UgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIG9wZXJhdGlvbiBvY2N1cnMgYXMgYSBjaGlsZCBvZiBhbm90aGVyXG4gICAgICAvLyBjb25zdHJ1Y3QsIGdlbmVyYWxseSBicmFjZXMuIFdlIGhhdmUgdG8gZXhwbGljaXRseSBvdXRwdXQgdGhlc2UgYnVmZmVyXG4gICAgICAvLyBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGF0IHRoZSBlbWl0dGVkIGNvZGUgZ29lcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAgICAgIHJldHVybiBbJ2J1ZmZlciArPSAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIHtcbiAgICAgIHNvdXJjZS5hcHBlbmRUb0J1ZmZlciA9IHRydWU7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgfSxcblxuICBpbml0aWFsaXplQnVmZmVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdW90ZWRTdHJpbmcoJycpO1xuICB9LFxuICAvLyBFTkQgUFVCTElDIEFQSVxuICBpbnRlcm5hbE5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkge1xuICAgIHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCA9IHRydWU7XG4gICAgcmV0dXJuIFsnbG9va3VwUHJvcGVydHkoJywgcGFyZW50LCAnLCcsIEpTT04uc3RyaW5naWZ5KG5hbWUpLCAnKSddO1xuICB9LFxuXG4gIGxvb2t1cFByb3BlcnR5RnVuY3Rpb25Jc1VzZWQ6IGZhbHNlLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zLCBjb250ZXh0LCBhc09iamVjdCkge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gdGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtcztcbiAgICB0aGlzLnRyYWNrSWRzID0gdGhpcy5vcHRpb25zLnRyYWNrSWRzO1xuICAgIHRoaXMucHJlY29tcGlsZSA9ICFhc09iamVjdDtcblxuICAgIHRoaXMubmFtZSA9IHRoaXMuZW52aXJvbm1lbnQubmFtZTtcbiAgICB0aGlzLmlzQ2hpbGQgPSAhIWNvbnRleHQ7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB7XG4gICAgICBkZWNvcmF0b3JzOiBbXSxcbiAgICAgIHByb2dyYW1zOiBbXSxcbiAgICAgIGVudmlyb25tZW50czogW11cbiAgICB9O1xuXG4gICAgdGhpcy5wcmVhbWJsZSgpO1xuXG4gICAgdGhpcy5zdGFja1Nsb3QgPSAwO1xuICAgIHRoaXMuc3RhY2tWYXJzID0gW107XG4gICAgdGhpcy5hbGlhc2VzID0ge307XG4gICAgdGhpcy5yZWdpc3RlcnMgPSB7IGxpc3Q6IFtdIH07XG4gICAgdGhpcy5oYXNoZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBpbGVTdGFjayA9IFtdO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gW107XG5cbiAgICB0aGlzLmNvbXBpbGVDaGlsZHJlbihlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnVzZURlcHRocyA9XG4gICAgICB0aGlzLnVzZURlcHRocyB8fFxuICAgICAgZW52aXJvbm1lbnQudXNlRGVwdGhzIHx8XG4gICAgICBlbnZpcm9ubWVudC51c2VEZWNvcmF0b3JzIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGF0O1xuICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGVudmlyb25tZW50LnVzZUJsb2NrUGFyYW1zO1xuXG4gICAgbGV0IG9wY29kZXMgPSBlbnZpcm9ubWVudC5vcGNvZGVzLFxuICAgICAgb3Bjb2RlLFxuICAgICAgZmlyc3RMb2MsXG4gICAgICBpLFxuICAgICAgbDtcblxuICAgIGZvciAoaSA9IDAsIGwgPSBvcGNvZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgb3Bjb2RlID0gb3Bjb2Rlc1tpXTtcblxuICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0gb3Bjb2RlLmxvYztcbiAgICAgIGZpcnN0TG9jID0gZmlyc3RMb2MgfHwgb3Bjb2RlLmxvYztcbiAgICAgIHRoaXNbb3Bjb2RlLm9wY29kZV0uYXBwbHkodGhpcywgb3Bjb2RlLmFyZ3MpO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIGFueSB0cmFpbGluZyBjb250ZW50IHRoYXQgbWlnaHQgYmUgcGVuZGluZy5cbiAgICB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24gPSBmaXJzdExvYztcbiAgICB0aGlzLnB1c2hTb3VyY2UoJycpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodGhpcy5zdGFja1Nsb3QgfHwgdGhpcy5pbmxpbmVTdGFjay5sZW5ndGggfHwgdGhpcy5jb21waWxlU3RhY2subGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb21waWxlIGNvbXBsZXRlZCB3aXRoIGNvbnRlbnQgbGVmdCBvbiBzdGFjaycpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kZWNvcmF0b3JzLmlzRW1wdHkoKSkge1xuICAgICAgdGhpcy51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoW1xuICAgICAgICAndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVjb3JhdG9ycywgJyxcbiAgICAgICAgdGhpcy5sb29rdXBQcm9wZXJ0eUZ1bmN0aW9uVmFyRGVjbGFyYXRpb24oKSxcbiAgICAgICAgJztcXG4nXG4gICAgICBdKTtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCdyZXR1cm4gZm47Jyk7XG5cbiAgICAgIGlmIChhc09iamVjdCkge1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSBGdW5jdGlvbi5hcHBseSh0aGlzLCBbXG4gICAgICAgICAgJ2ZuJyxcbiAgICAgICAgICAncHJvcHMnLFxuICAgICAgICAgICdjb250YWluZXInLFxuICAgICAgICAgICdkZXB0aDAnLFxuICAgICAgICAgICdkYXRhJyxcbiAgICAgICAgICAnYmxvY2tQYXJhbXMnLFxuICAgICAgICAgICdkZXB0aHMnLFxuICAgICAgICAgIHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoXG4gICAgICAgICAgJ2Z1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aDAsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcXG4nXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCd9XFxuJyk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlY29yYXRvcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbGV0IGZuID0gdGhpcy5jcmVhdGVGdW5jdGlvbkNvbnRleHQoYXNPYmplY3QpO1xuICAgIGlmICghdGhpcy5pc0NoaWxkKSB7XG4gICAgICBsZXQgcmV0ID0ge1xuICAgICAgICBjb21waWxlcjogdGhpcy5jb21waWxlckluZm8oKSxcbiAgICAgICAgbWFpbjogZm5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmRlY29yYXRvcnMpIHtcbiAgICAgICAgcmV0Lm1haW5fZCA9IHRoaXMuZGVjb3JhdG9yczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgICAgcmV0LnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgeyBwcm9ncmFtcywgZGVjb3JhdG9ycyB9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAocHJvZ3JhbXNbaV0pIHtcbiAgICAgICAgICByZXRbaV0gPSBwcm9ncmFtc1tpXTtcbiAgICAgICAgICBpZiAoZGVjb3JhdG9yc1tpXSkge1xuICAgICAgICAgICAgcmV0W2kgKyAnX2QnXSA9IGRlY29yYXRvcnNbaV07XG4gICAgICAgICAgICByZXQudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwpIHtcbiAgICAgICAgcmV0LnVzZVBhcnRpYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICAgIHJldC51c2VEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgICByZXQudXNlRGVwdGhzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHJldC51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdCkge1xuICAgICAgICByZXQuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhc09iamVjdCkge1xuICAgICAgICByZXQuY29tcGlsZXIgPSBKU09OLnN0cmluZ2lmeShyZXQuY29tcGlsZXIpO1xuXG4gICAgICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IHsgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTtcbiAgICAgICAgcmV0ID0gdGhpcy5vYmplY3RMaXRlcmFsKHJldCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3JjTmFtZSkge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoeyBmaWxlOiBvcHRpb25zLmRlc3ROYW1lIH0pO1xuICAgICAgICAgIHJldC5tYXAgPSByZXQubWFwICYmIHJldC5tYXAudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmNvbXBpbGVyT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cbiAgfSxcblxuICBwcmVhbWJsZTogZnVuY3Rpb24oKSB7XG4gICAgLy8gdHJhY2sgdGhlIGxhc3QgY29udGV4dCBwdXNoZWQgaW50byBwbGFjZSB0byBhbGxvdyBza2lwcGluZyB0aGVcbiAgICAvLyBnZXRDb250ZXh0IG9wY29kZSB3aGVuIGl0IHdvdWxkIGJlIGEgbm9vcFxuICAgIHRoaXMubGFzdENvbnRleHQgPSAwO1xuICAgIHRoaXMuc291cmNlID0gbmV3IENvZGVHZW4odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICAgIHRoaXMuZGVjb3JhdG9ycyA9IG5ldyBDb2RlR2VuKHRoaXMub3B0aW9ucy5zcmNOYW1lKTtcbiAgfSxcblxuICBjcmVhdGVGdW5jdGlvbkNvbnRleHQ6IGZ1bmN0aW9uKGFzT2JqZWN0KSB7XG4gICAgbGV0IHZhckRlY2xhcmF0aW9ucyA9ICcnO1xuXG4gICAgbGV0IGxvY2FscyA9IHRoaXMuc3RhY2tWYXJzLmNvbmNhdCh0aGlzLnJlZ2lzdGVycy5saXN0KTtcbiAgICBpZiAobG9jYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCAnICsgbG9jYWxzLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgbWluaW1pemVyIGFsaWFzIG1hcHBpbmdzXG4gICAgLy9cbiAgICAvLyBXaGVuIHVzaW5nIHRydWUgU291cmNlTm9kZXMsIHRoaXMgd2lsbCB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGdpdmVuIGFsaWFzXG4gICAgLy8gYXMgdGhlIHNvdXJjZSBub2RlcyBhcmUgcmV1c2VkIGluIHNpdHUuIEZvciB0aGUgbm9uLXNvdXJjZSBub2RlIGNvbXBpbGF0aW9uIG1vZGUsXG4gICAgLy8gYWxpYXNlcyB3aWxsIG5vdCBiZSB1c2VkLCBidXQgdGhpcyBjYXNlIGlzIGFscmVhZHkgYmVpbmcgcnVuIG9uIHRoZSBjbGllbnQgYW5kXG4gICAgLy8gd2UgYXJlbid0IGNvbmNlcm4gYWJvdXQgbWluaW1pemluZyB0aGUgdGVtcGxhdGUgc2l6ZS5cbiAgICBsZXQgYWxpYXNDb3VudCA9IDA7XG4gICAgT2JqZWN0LmtleXModGhpcy5hbGlhc2VzKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5hbGlhc2VzW2FsaWFzXTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUucmVmZXJlbmNlQ291bnQgPiAxKSB7XG4gICAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCBhbGlhcycgKyArK2FsaWFzQ291bnQgKyAnPScgKyBhbGlhcztcbiAgICAgICAgbm9kZS5jaGlsZHJlblswXSA9ICdhbGlhcycgKyBhbGlhc0NvdW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyB0aGlzLmxvb2t1cFByb3BlcnR5RnVuY3Rpb25WYXJEZWNsYXJhdGlvbigpO1xuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBbJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnaGVscGVycycsICdwYXJ0aWFscycsICdkYXRhJ107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVudCB3aGVuIHBvc3NpYmxlXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTtcblxuICAgIGlmIChhc09iamVjdCkge1xuICAgICAgcGFyYW1zLnB1c2goc291cmNlKTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS53cmFwKFtcbiAgICAgICAgJ2Z1bmN0aW9uKCcsXG4gICAgICAgIHBhcmFtcy5qb2luKCcsJyksXG4gICAgICAgICcpIHtcXG4gICcsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgJ30nXG4gICAgICBdKTtcbiAgICB9XG4gIH0sXG4gIG1lcmdlU291cmNlOiBmdW5jdGlvbih2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICBsZXQgaXNTaW1wbGUgPSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLFxuICAgICAgYXBwZW5kT25seSA9ICF0aGlzLmZvcmNlQnVmZmVyLFxuICAgICAgYXBwZW5kRmlyc3QsXG4gICAgICBzb3VyY2VTZWVuLFxuICAgICAgYnVmZmVyU3RhcnQsXG4gICAgICBidWZmZXJFbmQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaChsaW5lID0+IHtcbiAgICAgIGlmIChsaW5lLmFwcGVuZFRvQnVmZmVyKSB7XG4gICAgICAgIGlmIChidWZmZXJTdGFydCkge1xuICAgICAgICAgIGxpbmUucHJlcGVuZCgnICArICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gbGluZTtcbiAgICAgICAgfVxuICAgICAgICBidWZmZXJFbmQgPSBsaW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgICAgICBhcHBlbmRGaXJzdCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ2J1ZmZlciArPSAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gYnVmZmVyRW5kID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlU2VlbiA9IHRydWU7XG4gICAgICAgIGlmICghaXNTaW1wbGUpIHtcbiAgICAgICAgICBhcHBlbmRPbmx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhcHBlbmRPbmx5KSB7XG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgIHRoaXMuc291cmNlLnB1c2goJ3JldHVybiBcIlwiOycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXJEZWNsYXJhdGlvbnMgKz1cbiAgICAgICAgJywgYnVmZmVyID0gJyArIChhcHBlbmRGaXJzdCA/ICcnIDogdGhpcy5pbml0aWFsaXplQnVmZmVyKCkpO1xuXG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuIGJ1ZmZlciArICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gYnVmZmVyOycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICAgIHRoaXMuc291cmNlLnByZXBlbmQoXG4gICAgICAgICd2YXIgJyArIHZhckRlY2xhcmF0aW9ucy5zdWJzdHJpbmcoMikgKyAoYXBwZW5kRmlyc3QgPyAnJyA6ICc7XFxuJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc291cmNlLm1lcmdlKCk7XG4gIH0sXG5cbiAgbG9va3VwUHJvcGVydHlGdW5jdGlvblZhckRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYFxuICAgICAgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBgLnRyaW0oKTtcbiAgfSxcblxuICAvLyBbYmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXR1cm4gdmFsdWUgb2YgYmxvY2tIZWxwZXJNaXNzaW5nXG4gIC8vXG4gIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3Bjb2RlIGlzIHRvIHRha2UgYSBibG9jayBvZiB0aGUgZm9ybVxuICAvLyBge3sjdGhpcy5mb299fS4uLnt7L3RoaXMuZm9vfX1gLCByZXNvbHZlIHRoZSB2YWx1ZSBvZiBgZm9vYCwgYW5kXG4gIC8vIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIHdpdGggdGhlIHJlc3VsdCBvZiBwcm9wZXJseVxuICAvLyBpbnZva2luZyBibG9ja0hlbHBlck1pc3NpbmcuXG4gIGJsb2NrVmFsdWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBsZXQgYmxvY2tIZWxwZXJNaXNzaW5nID0gdGhpcy5hbGlhc2FibGUoXG4gICAgICAgICdjb250YWluZXIuaG9va3MuYmxvY2tIZWxwZXJNaXNzaW5nJ1xuICAgICAgKSxcbiAgICAgIHBhcmFtcyA9IFt0aGlzLmNvbnRleHROYW1lKDApXTtcbiAgICB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCAwLCBwYXJhbXMpO1xuXG4gICAgbGV0IGJsb2NrTmFtZSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGJsb2NrTmFtZSk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYW1iaWd1b3VzQmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGJlZm9yZTogbGFzdEhlbHBlcj12YWx1ZSBvZiBsYXN0IGZvdW5kIGhlbHBlciwgaWYgYW55XG4gIC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbm8gbGFzdEhlbHBlcjogc2FtZSBhcyBbYmxvY2tWYWx1ZV1cbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBsYXN0SGVscGVyOiB2YWx1ZVxuICBhbWJpZ3VvdXNCbG9ja1ZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAvLyBXZSdyZSBiZWluZyBhIGJpdCBjaGVla3kgYW5kIHJldXNpbmcgdGhlIG9wdGlvbnMgdmFsdWUgZnJvbSB0aGUgcHJpb3IgZXhlY1xuICAgIGxldCBibG9ja0hlbHBlck1pc3NpbmcgPSB0aGlzLmFsaWFzYWJsZShcbiAgICAgICAgJ2NvbnRhaW5lci5ob29rcy5ibG9ja0hlbHBlck1pc3NpbmcnXG4gICAgICApLFxuICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKCcnLCAwLCBwYXJhbXMsIHRydWUpO1xuXG4gICAgdGhpcy5mbHVzaElubGluZSgpO1xuXG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgcGFyYW1zLnNwbGljZSgxLCAwLCBjdXJyZW50KTtcblxuICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAnaWYgKCEnLFxuICAgICAgdGhpcy5sYXN0SGVscGVyLFxuICAgICAgJykgeyAnLFxuICAgICAgY3VycmVudCxcbiAgICAgICcgPSAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpLFxuICAgICAgJ30nXG4gICAgXSk7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZENvbnRlbnRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlclxuICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aGlzLnJlcGxhY2VTdGFjayhjdXJyZW50ID0+IFsnICE9IG51bGwgPyAnLCBjdXJyZW50LCAnIDogXCJcIiddKTtcblxuICAgICAgdGhpcy5wdXNoU291cmNlKHRoaXMuYXBwZW5kVG9CdWZmZXIodGhpcy5wb3BTdGFjaygpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsb2NhbCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICdpZiAoJyxcbiAgICAgICAgbG9jYWwsXG4gICAgICAgICcgIT0gbnVsbCkgeyAnLFxuICAgICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKGxvY2FsLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAnIH0nXG4gICAgICBdKTtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7XG4gICAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICAgJ2Vsc2UgeyAnLFxuICAgICAgICAgIHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAgICcgfSdcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFthcHBlbmRFc2NhcGVkXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlclxuICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2hTb3VyY2UoXG4gICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKFtcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5lc2NhcGVFeHByZXNzaW9uJyksXG4gICAgICAgICcoJyxcbiAgICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICAnKSdcbiAgICAgIF0pXG4gICAgKTtcbiAgfSxcblxuICAvLyBbZ2V0Q29udGV4dF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vIENvbXBpbGVyIHZhbHVlLCBhZnRlcjogbGFzdENvbnRleHQ9ZGVwdGhcbiAgLy9cbiAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYGxhc3RDb250ZXh0YCBjb21waWxlciB2YWx1ZSB0byB0aGUgZGVwdGhcbiAgZ2V0Q29udGV4dDogZnVuY3Rpb24oZGVwdGgpIHtcbiAgICB0aGlzLmxhc3RDb250ZXh0ID0gZGVwdGg7XG4gIH0sXG5cbiAgLy8gW3B1c2hDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dCwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbnRvIHRoZSBzdGFjay5cbiAgcHVzaENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLmNvbnRleHROYW1lKHRoaXMubGFzdENvbnRleHQpKTtcbiAgfSxcblxuICAvLyBbbG9va3VwT25Db250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dFtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgbmFtZWAgb24gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBPbkNvbnRleHQ6IGZ1bmN0aW9uKHBhcnRzLCBmYWxzeSwgc3RyaWN0LCBzY29wZWQpIHtcbiAgICBsZXQgaSA9IDA7XG5cbiAgICBpZiAoIXNjb3BlZCAmJiB0aGlzLm9wdGlvbnMuY29tcGF0ICYmICF0aGlzLmxhc3RDb250ZXh0KSB7XG4gICAgICAvLyBUaGUgZGVwdGhlZCBxdWVyeSBpcyBleHBlY3RlZCB0byBoYW5kbGUgdGhlIHVuZGVmaW5lZCBsb2dpYyBmb3IgdGhlIHJvb3QgbGV2ZWwgdGhhdFxuICAgICAgLy8gaXMgaW1wbGVtZW50ZWQgYmVsb3csIHNvIHdlIGV2YWx1YXRlIHRoYXQgZGlyZWN0bHkgaW4gY29tcGF0IG1vZGVcbiAgICAgIHRoaXMucHVzaCh0aGlzLmRlcHRoZWRMb29rdXAocGFydHNbaSsrXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KTtcbiAgfSxcblxuICAvLyBbbG9va3VwQmxvY2tQYXJhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogYmxvY2tQYXJhbVtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgcGFydHNgIG9uIHRoZSBnaXZlbiBibG9jayBwYXJhbSBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBCbG9ja1BhcmFtOiBmdW5jdGlvbihibG9ja1BhcmFtSWQsIHBhcnRzKSB7XG4gICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG5cbiAgICB0aGlzLnB1c2goWydibG9ja1BhcmFtc1snLCBibG9ja1BhcmFtSWRbMF0sICddWycsIGJsb2NrUGFyYW1JZFsxXSwgJ10nXSk7XG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCAxKTtcbiAgfSxcblxuICAvLyBbbG9va3VwRGF0YV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogZGF0YSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggdGhlIGRhdGEgbG9va3VwIG9wZXJhdG9yXG4gIGxvb2t1cERhdGE6IGZ1bmN0aW9uKGRlcHRoLCBwYXJ0cywgc3RyaWN0KSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdkYXRhJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnY29udGFpbmVyLmRhdGEoZGF0YSwgJyArIGRlcHRoICsgJyknKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdkYXRhJywgcGFydHMsIDAsIHRydWUsIHN0cmljdCk7XG4gIH0sXG5cbiAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHR5cGUsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3QgfHwgdGhpcy5vcHRpb25zLmFzc3VtZU9iamVjdHMpIHtcbiAgICAgIHRoaXMucHVzaChcbiAgICAgICAgc3RyaWN0TG9va3VwKHRoaXMub3B0aW9ucy5zdHJpY3QgJiYgc3RyaWN0LCB0aGlzLCBwYXJ0cywgaSwgdHlwZSlcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGN1cnJlbnQgPT4ge1xuICAgICAgICBsZXQgbG9va3VwID0gdGhpcy5uYW1lTG9va3VwKGN1cnJlbnQsIHBhcnRzW2ldLCB0eXBlKTtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB6ZXJvIGFuZCBmYWxzZSBhcmUgaGFuZGxlZCBwcm9wZXJseSBpZiB0aGUgY29udGV4dCAoZmFsc3kgZmxhZylcbiAgICAgICAgLy8gbmVlZHMgdG8gaGF2ZSB0aGUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlc2UgdmFsdWVzLlxuICAgICAgICBpZiAoIWZhbHN5KSB7XG4gICAgICAgICAgcmV0dXJuIFsnICE9IG51bGwgPyAnLCBsb29rdXAsICcgOiAnLCBjdXJyZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UgY2FuIHVzZSBnZW5lcmljIGZhbHN5IGhhbmRsaW5nXG4gICAgICAgICAgcmV0dXJuIFsnICYmICcsIGxvb2t1cF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB9XG4gIH0sXG5cbiAgLy8gW3Jlc29sdmVQb3NzaWJsZUxhbWJkYV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc29sdmVkIHZhbHVlLCAuLi5cbiAgLy9cbiAgLy8gSWYgdGhlIGB2YWx1ZWAgaXMgYSBsYW1iZGEsIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGJ5XG4gIC8vIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxhbWJkYVxuICByZXNvbHZlUG9zc2libGVMYW1iZGE6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaChbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxhbWJkYScpLFxuICAgICAgJygnLFxuICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgJywgJyxcbiAgICAgIHRoaXMuY29udGV4dE5hbWUoMCksXG4gICAgICAnKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2hcbiAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0c1xuICAvLyBkZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuXG4gIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHVzaFN0cmluZyh0eXBlKTtcblxuICAgIC8vIElmIGl0J3MgYSBzdWJleHByZXNzaW9uLCB0aGUgc3RyaW5nIHJlc3VsdFxuICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLlxuICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBlbXB0eUhhc2g6IGZ1bmN0aW9uKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHsgdmFsdWVzOiB7fSwgdHlwZXM6IFtdLCBjb250ZXh0czogW10sIGlkczogW10gfTtcbiAgfSxcbiAgcG9wSGFzaDogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGhhc2ggPSB0aGlzLmhhc2g7XG4gICAgdGhpcy5oYXNoID0gdGhpcy5oYXNoZXMucG9wKCk7XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLmlkcykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5jb250ZXh0cykpO1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnR5cGVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnZhbHVlcykpO1xuICB9LFxuXG4gIC8vIFtwdXNoU3RyaW5nXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBxdW90ZWRTdHJpbmcoc3RyaW5nKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBxdW90ZWQgdmVyc2lvbiBvZiBgc3RyaW5nYCBvbnRvIHRoZSBzdGFja1xuICBwdXNoU3RyaW5nOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRTdHJpbmcoc3RyaW5nKSk7XG4gIH0sXG5cbiAgLy8gW3B1c2hMaXRlcmFsXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyBhIHZhbHVlIG9udG8gdGhlIHN0YWNrLiBUaGlzIG9wZXJhdGlvbiBwcmV2ZW50c1xuICAvLyB0aGUgY29tcGlsZXIgZnJvbSBjcmVhdGluZyBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBob2xkXG4gIC8vIGl0LlxuICBwdXNoTGl0ZXJhbDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodmFsdWUpO1xuICB9LFxuXG4gIC8vIFtwdXNoUHJvZ3JhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcHJvZ3JhbShndWlkKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBwcm9ncmFtIGV4cHJlc3Npb24gb250byB0aGUgc3RhY2suIFRoaXMgdGFrZXNcbiAgLy8gYSBjb21waWxlLXRpbWUgZ3VpZCBhbmQgY29udmVydHMgaXQgaW50byBhIHJ1bnRpbWUtYWNjZXNzaWJsZVxuICAvLyBleHByZXNzaW9uLlxuICBwdXNoUHJvZ3JhbTogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGlmIChndWlkICE9IG51bGwpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLnByb2dyYW1FeHByZXNzaW9uKGd1aWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG51bGwpO1xuICAgIH1cbiAgfSxcblxuICAvLyBbcmVnaXN0ZXJEZWNvcmF0b3JdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIFBvcHMgb2ZmIHRoZSBkZWNvcmF0b3IncyBwYXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBkZWNvcmF0b3IsXG4gIC8vIGFuZCBpbnNlcnRzIHRoZSBkZWNvcmF0b3IgaW50byB0aGUgZGVjb3JhdG9ycyBsaXN0LlxuICByZWdpc3RlckRlY29yYXRvcihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgZm91bmREZWNvcmF0b3IgPSB0aGlzLm5hbWVMb29rdXAoJ2RlY29yYXRvcnMnLCBuYW1lLCAnZGVjb3JhdG9yJyksXG4gICAgICBvcHRpb25zID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplKTtcblxuICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKFtcbiAgICAgICdmbiA9ICcsXG4gICAgICB0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKGZvdW5kRGVjb3JhdG9yLCAnJywgW1xuICAgICAgICAnZm4nLFxuICAgICAgICAncHJvcHMnLFxuICAgICAgICAnY29udGFpbmVyJyxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgXSksXG4gICAgICAnIHx8IGZuOydcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgaGVscGVyLFxuICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suXG4gIC8vXG4gIC8vIElmIHRoZSBoZWxwZXIgaXMgbm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLlxuICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgaXNTaW1wbGUpIHtcbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuXG4gICAgbGV0IHBvc3NpYmxlRnVuY3Rpb25DYWxscyA9IFtdO1xuXG4gICAgaWYgKGlzU2ltcGxlKSB7XG4gICAgICAvLyBkaXJlY3QgY2FsbCB0byBoZWxwZXJcbiAgICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKGhlbHBlci5uYW1lKTtcbiAgICB9XG4gICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGZyb20gdGhlIGlucHV0IG9iamVjdFxuICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKG5vbkhlbHBlcik7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMucHVzaChcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGZ1bmN0aW9uTG9va3VwQ29kZSA9IFtcbiAgICAgICcoJyxcbiAgICAgIHRoaXMuaXRlbXNTZXBhcmF0ZWRCeShwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMsICd8fCcpLFxuICAgICAgJyknXG4gICAgXTtcbiAgICBsZXQgZnVuY3Rpb25DYWxsID0gdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKFxuICAgICAgZnVuY3Rpb25Mb29rdXBDb2RlLFxuICAgICAgJ2NhbGwnLFxuICAgICAgaGVscGVyLmNhbGxQYXJhbXNcbiAgICApO1xuICAgIHRoaXMucHVzaChmdW5jdGlvbkNhbGwpO1xuICB9LFxuXG4gIGl0ZW1zU2VwYXJhdGVkQnk6IGZ1bmN0aW9uKGl0ZW1zLCBzZXBhcmF0b3IpIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0LnB1c2goaXRlbXNbMF0pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHNlcGFyYXRvciwgaXRlbXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICAvLyBbaW52b2tlS25vd25IZWxwZXJdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGhlbHBlciBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgd2hlbiB0aGUgaGVscGVyIGlzIGtub3duIHRvIGV4aXN0LFxuICAvLyBzbyBhIGBoZWxwZXJNaXNzaW5nYCBmYWxsYmFjayBpcyBub3QgcmVxdWlyZWQuXG4gIGludm9rZUtub3duSGVscGVyOiBmdW5jdGlvbihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoaGVscGVyLm5hbWUsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbaW52b2tlQW1iaWd1b3VzXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBkaXNhbWJpZ3VhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gYW4gZXhwcmVzc2lvbiBsaWtlIGB7e2Zvb319YFxuICAvLyBpcyBwcm92aWRlZCwgYnV0IHdlIGRvbid0IGtub3cgYXQgY29tcGlsZS10aW1lIHdoZXRoZXIgaXRcbiAgLy8gaXMgYSBoZWxwZXIgb3IgYSBwYXRoLlxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBlbWl0cyBtb3JlIGNvZGUgdGhhbiB0aGUgb3RoZXIgb3B0aW9ucyxcbiAgLy8gYW5kIGNhbiBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgdGhlIGBrbm93bkhlbHBlcnNgIGFuZFxuICAvLyBga25vd25IZWxwZXJzT25seWAgZmxhZ3MgYXQgY29tcGlsZS10aW1lLlxuICBpbnZva2VBbWJpZ3VvdXM6IGZ1bmN0aW9uKG5hbWUsIGhlbHBlckNhbGwpIHtcbiAgICB0aGlzLnVzZVJlZ2lzdGVyKCdoZWxwZXInKTtcblxuICAgIGxldCBub25IZWxwZXIgPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICB0aGlzLmVtcHR5SGFzaCgpO1xuICAgIGxldCBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKDAsIG5hbWUsIGhlbHBlckNhbGwpO1xuXG4gICAgbGV0IGhlbHBlck5hbWUgPSAodGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKFxuICAgICAgJ2hlbHBlcnMnLFxuICAgICAgbmFtZSxcbiAgICAgICdoZWxwZXInXG4gICAgKSk7XG5cbiAgICBsZXQgbG9va3VwID0gWycoJywgJyhoZWxwZXIgPSAnLCBoZWxwZXJOYW1lLCAnIHx8ICcsIG5vbkhlbHBlciwgJyknXTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGxvb2t1cFswXSA9ICcoaGVscGVyID0gJztcbiAgICAgIGxvb2t1cC5wdXNoKFxuICAgICAgICAnICE9IG51bGwgPyBoZWxwZXIgOiAnLFxuICAgICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2goW1xuICAgICAgJygnLFxuICAgICAgbG9va3VwLFxuICAgICAgaGVscGVyLnBhcmFtc0luaXQgPyBbJyksKCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdLFxuICAgICAgJyksJyxcbiAgICAgICcodHlwZW9mIGhlbHBlciA9PT0gJyxcbiAgICAgIHRoaXMuYWxpYXNhYmxlKCdcImZ1bmN0aW9uXCInKSxcbiAgICAgICcgPyAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdoZWxwZXInLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSxcbiAgICAgICcgOiBoZWxwZXIpKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlUGFydGlhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogY29udGV4dCwgLi4uXG4gIC8vIE9uIHN0YWNrIGFmdGVyOiByZXN1bHQgb2YgcGFydGlhbCBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIHBvcHMgb2ZmIGEgY29udGV4dCwgaW52b2tlcyBhIHBhcnRpYWwgd2l0aCB0aGF0IGNvbnRleHQsXG4gIC8vIGFuZCBwdXNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBiYWNrLlxuICBpbnZva2VQYXJ0aWFsOiBmdW5jdGlvbihpc0R5bmFtaWMsIG5hbWUsIGluZGVudCkge1xuICAgIGxldCBwYXJhbXMgPSBbXSxcbiAgICAgIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKG5hbWUsIDEsIHBhcmFtcyk7XG5cbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICBuYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgZGVsZXRlIG9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICBvcHRpb25zLmluZGVudCA9IEpTT04uc3RyaW5naWZ5KGluZGVudCk7XG4gICAgfVxuICAgIG9wdGlvbnMuaGVscGVycyA9ICdoZWxwZXJzJztcbiAgICBvcHRpb25zLnBhcnRpYWxzID0gJ3BhcnRpYWxzJztcbiAgICBvcHRpb25zLmRlY29yYXRvcnMgPSAnY29udGFpbmVyLmRlY29yYXRvcnMnO1xuXG4gICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgIHBhcmFtcy51bnNoaWZ0KHRoaXMubmFtZUxvb2t1cCgncGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnVuc2hpZnQobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXQpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGhzID0gJ2RlcHRocyc7XG4gICAgfVxuICAgIG9wdGlvbnMgPSB0aGlzLm9iamVjdExpdGVyYWwob3B0aW9ucyk7XG4gICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdjb250YWluZXIuaW52b2tlUGFydGlhbCcsICcnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYXNzaWduVG9IYXNoXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uLCBoYXNoLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4sIGhhc2gsIC4uLlxuICAvL1xuICAvLyBQb3BzIGEgdmFsdWUgb2ZmIHRoZSBzdGFjayBhbmQgYXNzaWducyBpdCB0byB0aGUgY3VycmVudCBoYXNoXG4gIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgY29udGV4dCxcbiAgICAgIHR5cGUsXG4gICAgICBpZDtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBpZCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0eXBlID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaGFzaC5jb250ZXh0c1trZXldID0gY29udGV4dDtcbiAgICB9XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGhhc2gudHlwZXNba2V5XSA9IHR5cGU7XG4gICAgfVxuICAgIGlmIChpZCkge1xuICAgICAgaGFzaC5pZHNba2V5XSA9IGlkO1xuICAgIH1cbiAgICBoYXNoLnZhbHVlc1trZXldID0gdmFsdWU7XG4gIH0sXG5cbiAgcHVzaElkOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBjaGlsZCkge1xuICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChcbiAgICAgICAgJ2Jsb2NrUGFyYW1zWycgK1xuICAgICAgICAgIG5hbWVbMF0gK1xuICAgICAgICAgICddLnBhdGhbJyArXG4gICAgICAgICAgbmFtZVsxXSArXG4gICAgICAgICAgJ10nICtcbiAgICAgICAgICAoY2hpbGQgPyAnICsgJyArIEpTT04uc3RyaW5naWZ5KCcuJyArIGNoaWxkKSA6ICcnKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQYXRoRXhwcmVzc2lvbicpIHtcbiAgICAgIHRoaXMucHVzaFN0cmluZyhuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdTdWJFeHByZXNzaW9uJykge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnbnVsbCcpO1xuICAgIH1cbiAgfSxcblxuICAvLyBIRUxQRVJTXG5cbiAgY29tcGlsZXI6IEphdmFTY3JpcHRDb21waWxlcixcblxuICBjb21waWxlQ2hpbGRyZW46IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zKSB7XG4gICAgbGV0IGNoaWxkcmVuID0gZW52aXJvbm1lbnQuY2hpbGRyZW4sXG4gICAgICBjaGlsZCxcbiAgICAgIGNvbXBpbGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBjb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLm1hdGNoRXhpc3RpbmdQcm9ncmFtKGNoaWxkKTtcblxuICAgICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnByb2dyYW1zLnB1c2goJycpOyAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxpY3RzIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShcbiAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAhdGhpcy5wcmVjb21waWxlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kZWNvcmF0b3JzW2luZGV4XSA9IGNvbXBpbGVyLmRlY29yYXRvcnM7XG4gICAgICAgIHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaW5kZXhdID0gY2hpbGQ7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBjb21waWxlci51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGNvbXBpbGVyLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgICBjaGlsZC51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocztcbiAgICAgICAgY2hpbGQudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBleGlzdGluZy5pbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGV4aXN0aW5nLmluZGV4O1xuXG4gICAgICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgZXhpc3RpbmcudXNlRGVwdGhzO1xuICAgICAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8fCBleGlzdGluZy51c2VCbG9ja1BhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1hdGNoRXhpc3RpbmdQcm9ncmFtOiBmdW5jdGlvbihjaGlsZCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgZW52aXJvbm1lbnQgPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2ldO1xuICAgICAgaWYgKGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LmVxdWFscyhjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIGVudmlyb25tZW50O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9ncmFtRXhwcmVzc2lvbjogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZW52aXJvbm1lbnQuY2hpbGRyZW5bZ3VpZF0sXG4gICAgICBwcm9ncmFtUGFyYW1zID0gW2NoaWxkLmluZGV4LCAnZGF0YScsIGNoaWxkLmJsb2NrUGFyYW1zXTtcblxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICBwcm9ncmFtUGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ2NvbnRhaW5lci5wcm9ncmFtKCcgKyBwcm9ncmFtUGFyYW1zLmpvaW4oJywgJykgKyAnKSc7XG4gIH0sXG5cbiAgdXNlUmVnaXN0ZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMucmVnaXN0ZXJzW25hbWVdKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyc1tuYW1lXSA9IHRydWU7XG4gICAgICB0aGlzLnJlZ2lzdGVycy5saXN0LnB1c2gobmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2g6IGZ1bmN0aW9uKGV4cHIpIHtcbiAgICBpZiAoIShleHByIGluc3RhbmNlb2YgTGl0ZXJhbCkpIHtcbiAgICAgIGV4cHIgPSB0aGlzLnNvdXJjZS53cmFwKGV4cHIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RhY2sucHVzaChleHByKTtcbiAgICByZXR1cm4gZXhwcjtcbiAgfSxcblxuICBwdXNoU3RhY2tMaXRlcmFsOiBmdW5jdGlvbihpdGVtKSB7XG4gICAgdGhpcy5wdXNoKG5ldyBMaXRlcmFsKGl0ZW0pKTtcbiAgfSxcblxuICBwdXNoU291cmNlOiBmdW5jdGlvbihzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQ29udGVudCkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChcbiAgICAgICAgdGhpcy5hcHBlbmRUb0J1ZmZlcihcbiAgICAgICAgICB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5kaW5nQ29udGVudCksXG4gICAgICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMucGVuZGluZ0NvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChzb3VyY2UpO1xuICAgIH1cbiAgfSxcblxuICByZXBsYWNlU3RhY2s6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgbGV0IHByZWZpeCA9IFsnKCddLFxuICAgICAgc3RhY2ssXG4gICAgICBjcmVhdGVkU3RhY2ssXG4gICAgICB1c2VkTGl0ZXJhbDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCF0aGlzLmlzSW5saW5lKCkpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ3JlcGxhY2VTdGFjayBvbiBub24taW5saW5lJyk7XG4gICAgfVxuXG4gICAgLy8gV2Ugd2FudCB0byBtZXJnZSB0aGUgaW5saW5lIHN0YXRlbWVudCBpbnRvIHRoZSByZXBsYWNlbWVudCBzdGF0ZW1lbnQgdmlhICcsJ1xuICAgIGxldCB0b3AgPSB0aGlzLnBvcFN0YWNrKHRydWUpO1xuXG4gICAgaWYgKHRvcCBpbnN0YW5jZW9mIExpdGVyYWwpIHtcbiAgICAgIC8vIExpdGVyYWxzIGRvIG5vdCBuZWVkIHRvIGJlIGlubGluZWRcbiAgICAgIHN0YWNrID0gW3RvcC52YWx1ZV07XG4gICAgICBwcmVmaXggPSBbJygnLCBzdGFja107XG4gICAgICB1c2VkTGl0ZXJhbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgc3RhY2sgbmFtZSBmb3IgdXNlIGJ5IHRoZSBpbmxpbmVcbiAgICAgIGNyZWF0ZWRTdGFjayA9IHRydWU7XG4gICAgICBsZXQgbmFtZSA9IHRoaXMuaW5jclN0YWNrKCk7XG5cbiAgICAgIHByZWZpeCA9IFsnKCgnLCB0aGlzLnB1c2gobmFtZSksICcgPSAnLCB0b3AsICcpJ107XG4gICAgICBzdGFjayA9IHRoaXMudG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RhY2spO1xuXG4gICAgaWYgKCF1c2VkTGl0ZXJhbCkge1xuICAgICAgdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZFN0YWNrKSB7XG4gICAgICB0aGlzLnN0YWNrU2xvdC0tO1xuICAgIH1cbiAgICB0aGlzLnB1c2gocHJlZml4LmNvbmNhdChpdGVtLCAnKScpKTtcbiAgfSxcblxuICBpbmNyU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3RhY2tTbG90Kys7XG4gICAgaWYgKHRoaXMuc3RhY2tTbG90ID4gdGhpcy5zdGFja1ZhcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRvcFN0YWNrTmFtZSgpO1xuICB9LFxuICB0b3BTdGFja05hbWU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnc3RhY2snICsgdGhpcy5zdGFja1Nsb3Q7XG4gIH0sXG4gIGZsdXNoSW5saW5lOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgaW5saW5lU3RhY2sgPSB0aGlzLmlubGluZVN0YWNrO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5saW5lU3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBlbnRyeSA9IGlubGluZVN0YWNrW2ldO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goZW50cnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHN0YWNrID0gdGhpcy5pbmNyU3RhY2soKTtcbiAgICAgICAgdGhpcy5wdXNoU291cmNlKFtzdGFjaywgJyA9ICcsIGVudHJ5LCAnOyddKTtcbiAgICAgICAgdGhpcy5jb21waWxlU3RhY2sucHVzaChzdGFjayk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc0lubGluZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RoO1xuICB9LFxuXG4gIHBvcFN0YWNrOiBmdW5jdGlvbih3cmFwcGVkKSB7XG4gICAgbGV0IGlubGluZSA9IHRoaXMuaXNJbmxpbmUoKSxcbiAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtcblxuICAgIGlmICghd3JhcHBlZCAmJiBpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmICghdGhpcy5zdGFja1Nsb3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHN0YWNrIHBvcCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhY2tTbG90LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH0sXG5cbiAgdG9wU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzdGFjayA9IHRoaXMuaXNJbmxpbmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayxcbiAgICAgIGl0ZW0gPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICBjb250ZXh0TmFtZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLnVzZURlcHRocyAmJiBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdkZXB0aCcgKyBjb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTtcbiAgfSxcblxuICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopO1xuICB9LFxuXG4gIGFsaWFzYWJsZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnJlZmVyZW5jZUNvdW50Kys7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7XG4gICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7XG4gICAgcmV0LnJlZmVyZW5jZUNvdW50ID0gMTtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgYmxvY2tIZWxwZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICBwYXJhbXNJbml0ID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplLCBwYXJhbXMsIGJsb2NrSGVscGVyKTtcbiAgICBsZXQgZm91bmRIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAoJ2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyksXG4gICAgICBjYWxsQ29udGV4dCA9IHRoaXMuYWxpYXNhYmxlKFxuICAgICAgICBgJHt0aGlzLmNvbnRleHROYW1lKDApfSAhPSBudWxsID8gJHt0aGlzLmNvbnRleHROYW1lKFxuICAgICAgICAgIDBcbiAgICAgICAgKX0gOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KWBcbiAgICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LFxuICAgICAgbmFtZTogZm91bmRIZWxwZXIsXG4gICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRleHRdLmNvbmNhdChwYXJhbXMpXG4gICAgfTtcbiAgfSxcblxuICBzZXR1cFBhcmFtczogZnVuY3Rpb24oaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykge1xuICAgIGxldCBvcHRpb25zID0ge30sXG4gICAgICBjb250ZXh0cyA9IFtdLFxuICAgICAgdHlwZXMgPSBbXSxcbiAgICAgIGlkcyA9IFtdLFxuICAgICAgb2JqZWN0QXJncyA9ICFwYXJhbXMsXG4gICAgICBwYXJhbTtcblxuICAgIGlmIChvYmplY3RBcmdzKSB7XG4gICAgICBwYXJhbXMgPSBbXTtcbiAgICB9XG5cbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLnF1b3RlZFN0cmluZyhoZWxwZXIpO1xuICAgIG9wdGlvbnMuaGFzaCA9IHRoaXMucG9wU3RhY2soKTtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmhhc2hJZHMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykge1xuICAgICAgb3B0aW9ucy5oYXNoVHlwZXMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBvcHRpb25zLmhhc2hDb250ZXh0cyA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaW52ZXJzZSA9IHRoaXMucG9wU3RhY2soKSxcbiAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3NcbiAgICAvLyBoZWxwZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgXG4gICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkge1xuICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICAgIG9wdGlvbnMuaW52ZXJzZSA9IGludmVyc2UgfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICB9XG5cbiAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGluIG9yZGVyKVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gcG9wIHRoZW0gb2ZmIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyXG4gICAgbGV0IGkgPSBwYXJhbVNpemU7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcblxuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgaWRzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICAgIHR5cGVzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLnR5cGVzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7XG4gICAgICBvcHRpb25zLmNvbnRleHRzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShjb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSAnZGF0YSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gJ2Jsb2NrUGFyYW1zJztcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbihoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zLmxvYyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbik7XG4gICAgb3B0aW9ucyA9IHRoaXMub2JqZWN0TGl0ZXJhbChvcHRpb25zKTtcbiAgICBpZiAodXNlUmVnaXN0ZXIpIHtcbiAgICAgIHRoaXMudXNlUmVnaXN0ZXIoJ29wdGlvbnMnKTtcbiAgICAgIHBhcmFtcy5wdXNoKCdvcHRpb25zJyk7XG4gICAgICByZXR1cm4gWydvcHRpb25zPScsIG9wdGlvbnNdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zKSB7XG4gICAgICBwYXJhbXMucHVzaChvcHRpb25zKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIGNvbnN0IHJlc2VydmVkV29yZHMgPSAoXG4gICAgJ2JyZWFrIGVsc2UgbmV3IHZhcicgK1xuICAgICcgY2FzZSBmaW5hbGx5IHJldHVybiB2b2lkJyArXG4gICAgJyBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlJyArXG4gICAgJyBjb250aW51ZSBmdW5jdGlvbiB0aGlzIHdpdGgnICtcbiAgICAnIGRlZmF1bHQgaWYgdGhyb3cnICtcbiAgICAnIGRlbGV0ZSBpbiB0cnknICtcbiAgICAnIGRvIGluc3RhbmNlb2YgdHlwZW9mJyArXG4gICAgJyBhYnN0cmFjdCBlbnVtIGludCBzaG9ydCcgK1xuICAgICcgYm9vbGVhbiBleHBvcnQgaW50ZXJmYWNlIHN0YXRpYycgK1xuICAgICcgYnl0ZSBleHRlbmRzIGxvbmcgc3VwZXInICtcbiAgICAnIGNoYXIgZmluYWwgbmF0aXZlIHN5bmNocm9uaXplZCcgK1xuICAgICcgY2xhc3MgZmxvYXQgcGFja2FnZSB0aHJvd3MnICtcbiAgICAnIGNvbnN0IGdvdG8gcHJpdmF0ZSB0cmFuc2llbnQnICtcbiAgICAnIGRlYnVnZ2VyIGltcGxlbWVudHMgcHJvdGVjdGVkIHZvbGF0aWxlJyArXG4gICAgJyBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQgYXdhaXQnICtcbiAgICAnIG51bGwgdHJ1ZSBmYWxzZSdcbiAgKS5zcGxpdCgnICcpO1xuXG4gIGNvbnN0IGNvbXBpbGVyV29yZHMgPSAoSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge30pO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcmVzZXJ2ZWRXb3Jkcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb21waWxlcldvcmRzW3Jlc2VydmVkV29yZHNbaV1dID0gdHJ1ZTtcbiAgfVxufSkoKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBNYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG4gKi9cbkphdmFTY3JpcHRDb21waWxlci5pc1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIChcbiAgICAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVdICYmXG4gICAgL15bYS16QS1aXyRdWzAtOWEtekEtWl8kXSokLy50ZXN0KG5hbWUpXG4gICk7XG59O1xuXG5mdW5jdGlvbiBzdHJpY3RMb29rdXAocmVxdWlyZVRlcm1pbmFsLCBjb21waWxlciwgcGFydHMsIGksIHR5cGUpIHtcbiAgbGV0IHN0YWNrID0gY29tcGlsZXIucG9wU3RhY2soKSxcbiAgICBsZW4gPSBwYXJ0cy5sZW5ndGg7XG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICBsZW4tLTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzdGFjayA9IGNvbXBpbGVyLm5hbWVMb29rdXAoc3RhY2ssIHBhcnRzW2ldLCB0eXBlKTtcbiAgfVxuXG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksXG4gICAgICAnKCcsXG4gICAgICBzdGFjayxcbiAgICAgICcsICcsXG4gICAgICBjb21waWxlci5xdW90ZWRTdHJpbmcocGFydHNbaV0pLFxuICAgICAgJywgJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNvbXBpbGVyLnNvdXJjZS5jdXJyZW50TG9jYXRpb24pLFxuICAgICAgJyApJ1xuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEphdmFTY3JpcHRDb21waWxlcjtcbiJdfQ==\n","/* global define, require */\n'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nvar SourceNode = undefined;\n\ntry {\n /* istanbul ignore next */\n if (typeof define !== 'function' || !define.amd) {\n // We don't support this in AMD environments. For these environments, we assume that\n // they are running on the browser and thus have no need for the source-map library.\n var SourceMap = require('source-map');\n SourceNode = SourceMap.SourceNode;\n }\n} catch (err) {}\n/* NOP */\n\n/* istanbul ignore if: tested but not covered in istanbul due to dist build */\nif (!SourceNode) {\n SourceNode = function (line, column, srcFile, chunks) {\n this.src = '';\n if (chunks) {\n this.add(chunks);\n }\n };\n /* istanbul ignore next */\n SourceNode.prototype = {\n add: function add(chunks) {\n if (_utils.isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src += chunks;\n },\n prepend: function prepend(chunks) {\n if (_utils.isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src = chunks + this.src;\n },\n toStringWithSourceMap: function toStringWithSourceMap() {\n return { code: this.toString() };\n },\n toString: function toString() {\n return this.src;\n }\n };\n}\n\nfunction castChunk(chunk, codeGen, loc) {\n if (_utils.isArray(chunk)) {\n var ret = [];\n\n for (var i = 0, len = chunk.length; i < len; i++) {\n ret.push(codeGen.wrap(chunk[i], loc));\n }\n return ret;\n } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {\n // Handle primitives that the SourceNode will throw up on\n return chunk + '';\n }\n return chunk;\n}\n\nfunction CodeGen(srcFile) {\n this.srcFile = srcFile;\n this.source = [];\n}\n\nCodeGen.prototype = {\n isEmpty: function isEmpty() {\n return !this.source.length;\n },\n prepend: function prepend(source, loc) {\n this.source.unshift(this.wrap(source, loc));\n },\n push: function push(source, loc) {\n this.source.push(this.wrap(source, loc));\n },\n\n merge: function merge() {\n var source = this.empty();\n this.each(function (line) {\n source.add([' ', line, '\\n']);\n });\n return source;\n },\n\n each: function each(iter) {\n for (var i = 0, len = this.source.length; i < len; i++) {\n iter(this.source[i]);\n }\n },\n\n empty: function empty() {\n var loc = this.currentLocation || { start: {} };\n return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n },\n wrap: function wrap(chunk) {\n var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];\n\n if (chunk instanceof SourceNode) {\n return chunk;\n }\n\n chunk = castChunk(chunk, this, loc);\n\n return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);\n },\n\n functionCall: function functionCall(fn, type, params) {\n params = this.generateList(params);\n return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n },\n\n quotedString: function quotedString(str) {\n return '\"' + (str + '').replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n .replace(/\\u2029/g, '\\\\u2029') + '\"';\n },\n\n objectLiteral: function objectLiteral(obj) {\n // istanbul ignore next\n\n var _this = this;\n\n var pairs = [];\n\n Object.keys(obj).forEach(function (key) {\n var value = castChunk(obj[key], _this);\n if (value !== 'undefined') {\n pairs.push([_this.quotedString(key), ':', value]);\n }\n });\n\n var ret = this.generateList(pairs);\n ret.prepend('{');\n ret.add('}');\n return ret;\n },\n\n generateList: function generateList(entries) {\n var ret = this.empty();\n\n for (var i = 0, len = entries.length; i < len; i++) {\n if (i) {\n ret.add(',');\n }\n\n ret.add(castChunk(entries[i], this));\n }\n\n return ret;\n },\n\n generateArray: function generateArray(entries) {\n var ret = this.generateList(entries);\n ret.prepend('[');\n ret.add(']');\n\n return ret;\n }\n};\n\nexports['default'] = CodeGen;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUN3QixVQUFVOztBQUVsQyxJQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLElBQUk7O0FBRUYsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGNBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0dBQ25DO0NBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUViOzs7O0FBQUEsQUFHRCxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsWUFBVSxHQUFHLFVBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ25ELFFBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBSSxNQUFNLEVBQUU7QUFDVixVQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xCO0dBQ0YsQ0FBQzs7QUFFRixZQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLE9BQUcsRUFBRSxhQUFTLE1BQU0sRUFBRTtBQUNwQixVQUFJLGVBQVEsTUFBTSxDQUFDLEVBQUU7QUFDbkIsY0FBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDMUI7QUFDRCxVQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNwQjtBQUNELFdBQU8sRUFBRSxpQkFBUyxNQUFNLEVBQUU7QUFDeEIsVUFBSSxlQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGNBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFCO0FBQ0QsVUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztL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QUcsQ0FBQyxDQUFDO0FBQ2pCLE9BQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWIsV0FBTyxHQUFHLENBQUM7R0FDWjtDQUNGLENBQUM7O3FCQUVhLE9BQU8iLCJmaWxlIjoiY29kZS1nZW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5sZXQgU291cmNlTm9kZTtcblxudHJ5IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicgfHwgIWRlZmluZS5hbWQpIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgaW4gQU1EIGVudmlyb25tZW50cy4gRm9yIHRoZXNlIGVudmlyb25tZW50cywgd2UgYXNzdW1lIHRoYXRcbiAgICAvLyB0aGV5IGFyZSBydW5uaW5nIG9uIHRoZSBicm93c2VyIGFuZCB0aHVzIGhhdmUgbm8gbmVlZCBmb3IgdGhlIHNvdXJjZS1tYXAgbGlicmFyeS5cbiAgICBsZXQgU291cmNlTWFwID0gcmVxdWlyZSgnc291cmNlLW1hcCcpO1xuICAgIFNvdXJjZU5vZGUgPSBTb3VyY2VNYXAuU291cmNlTm9kZTtcbiAgfVxufSBjYXRjaCAoZXJyKSB7XG4gIC8qIE5PUCAqL1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IHRlc3RlZCBidXQgbm90IGNvdmVyZWQgaW4gaXN0YW5idWwgZHVlIHRvIGRpc3QgYnVpbGQgICovXG5pZiAoIVNvdXJjZU5vZGUpIHtcbiAgU291cmNlTm9kZSA9IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbiwgc3JjRmlsZSwgY2h1bmtzKSB7XG4gICAgdGhpcy5zcmMgPSAnJztcbiAgICBpZiAoY2h1bmtzKSB7XG4gICAgICB0aGlzLmFkZChjaHVua3MpO1xuICAgIH1cbiAgfTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgYWRkOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgKz0gY2h1bmtzO1xuICAgIH0sXG4gICAgcHJlcGVuZDogZnVuY3Rpb24oY2h1bmtzKSB7XG4gICAgICBpZiAoaXNBcnJheShjaHVua3MpKSB7XG4gICAgICAgIGNodW5rcyA9IGNodW5rcy5qb2luKCcnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3JjID0gY2h1bmtzICsgdGhpcy5zcmM7XG4gICAgfSxcbiAgICB0b1N0cmluZ1dpdGhTb3VyY2VNYXA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgY29kZTogdGhpcy50b1N0cmluZygpIH07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjYXN0Q2h1bmsoY2h1bmssIGNvZGVHZW4sIGxvYykge1xuICBpZiAoaXNBcnJheShjaHVuaykpIHtcbiAgICBsZXQgcmV0ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2h1bmsubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHJldC5wdXNoKGNvZGVHZW4ud3JhcChjaHVua1tpXSwgbG9jKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNodW5rID09PSAnbnVtYmVyJykge1xuICAgIC8vIEhhbmRsZSBwcmltaXRpdmVzIHRoYXQgdGhlIFNvdXJjZU5vZGUgd2lsbCB0aHJvdyB1cCBvblxuICAgIHJldHVybiBjaHVuayArICcnO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuZnVuY3Rpb24gQ29kZUdlbihzcmNGaWxlKSB7XG4gIHRoaXMuc3JjRmlsZSA9IHNyY0ZpbGU7XG4gIHRoaXMuc291cmNlID0gW107XG59XG5cbkNvZGVHZW4ucHJvdG90eXBlID0ge1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5zb3VyY2UubGVuZ3RoO1xuICB9LFxuICBwcmVwZW5kOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnVuc2hpZnQodGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG4gIHB1c2g6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jKSB7XG4gICAgdGhpcy5zb3VyY2UucHVzaCh0aGlzLndyYXAoc291cmNlLCBsb2MpKTtcbiAgfSxcblxuICBtZXJnZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IHNvdXJjZSA9IHRoaXMuZW1wdHkoKTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgc291cmNlLmFkZChbJyAgJywgbGluZSwgJ1xcbiddKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9LFxuXG4gIGVhY2g6IGZ1bmN0aW9uKGl0ZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5zb3VyY2UubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZXIodGhpcy5zb3VyY2VbaV0pO1xuICAgIH1cbiAgfSxcblxuICBlbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGxvYyA9IHRoaXMuY3VycmVudExvY2F0aW9uIHx8IHsgc3RhcnQ6IHt9IH07XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VOb2RlKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uLCB0aGlzLnNyY0ZpbGUpO1xuICB9LFxuICB3cmFwOiBmdW5jdGlvbihjaHVuaywgbG9jID0gdGhpcy5jdXJyZW50TG9jYXRpb24gfHwgeyBzdGFydDoge30gfSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShcbiAgICAgIGxvYy5zdGFydC5saW5lLFxuICAgICAgbG9jLnN0YXJ0LmNvbHVtbixcbiAgICAgIHRoaXMuc3JjRmlsZSxcbiAgICAgIGNodW5rXG4gICAgKTtcbiAgfSxcblxuICBmdW5jdGlvbkNhbGw6IGZ1bmN0aW9uKGZuLCB0eXBlLCBwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSB0aGlzLmdlbmVyYXRlTGlzdChwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLndyYXAoW2ZuLCB0eXBlID8gJy4nICsgdHlwZSArICcoJyA6ICcoJywgcGFyYW1zLCAnKSddKTtcbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiAoXG4gICAgICAnXCInICtcbiAgICAgIChzdHIgKyAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpIC8vIFBlciBFY21hLTI2MiA3LjMgKyA3LjguNFxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5JykgK1xuICAgICAgJ1wiJ1xuICAgICk7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGNhc3RDaHVuayhvYmpba2V5XSwgdGhpcyk7XG4gICAgICBpZiAodmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUxpc3Q6IGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAgICBsZXQgcmV0ID0gdGhpcy5lbXB0eSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChpKSB7XG4gICAgICAgIHJldC5hZGQoJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0LmFkZChjYXN0Q2h1bmsoZW50cmllc1tpXSwgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2VuZXJhdGVBcnJheTogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChlbnRyaWVzKTtcbiAgICByZXQucHJlcGVuZCgnWycpO1xuICAgIHJldC5hZGQoJ10nKTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvZGVHZW47XG4iXX0=\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","'use strict';\n\nvar truncate = require(\"./lib/truncate\");\nvar getLength = require(\"utf8-byte-length/browser\");\nmodule.exports = truncate.bind(null, getLength);\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function truncate(getLength, string, byteLength) {\n if (typeof string !== \"string\") {\n throw new Error(\"Input must be string\");\n }\n\n var charLength = string.length;\n var curByteLength = 0;\n var codePoint;\n var segment;\n\n for (var i = 0; i < charLength; i += 1) {\n codePoint = string.charCodeAt(i);\n segment = string[i];\n\n if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) {\n i += 1;\n segment += string[i];\n }\n\n curByteLength += getLength(segment);\n\n if (curByteLength === byteLength) {\n return string.slice(0, i + 1);\n }\n else if (curByteLength > byteLength) {\n return string.slice(0, i - segment.length + 1);\n }\n }\n\n return string;\n};\n\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function getByteLength(string) {\n if (typeof string !== \"string\") {\n throw new Error(\"Input must be string\");\n }\n\n var charLength = string.length;\n var byteLength = 0;\n var codePoint = null;\n var prevCodePoint = null;\n for (var i = 0; i < charLength; i++) {\n codePoint = string.charCodeAt(i);\n // handle 4-byte non-BMP chars\n // low surrogate\n if (isLowSurrogate(codePoint)) {\n // when parsing previous hi-surrogate, 3 is added to byteLength\n if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) {\n byteLength += 1;\n }\n else {\n byteLength += 3;\n }\n }\n else if (codePoint <= 0x7f ) {\n byteLength += 1;\n }\n else if (codePoint >= 0x80 && codePoint <= 0x7ff) {\n byteLength += 2;\n }\n else if (codePoint >= 0x800 && codePoint <= 0xffff) {\n byteLength += 3;\n }\n prevCodePoint = codePoint;\n }\n\n return byteLength;\n};\n","'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n","\"use strict\";\n\n/**\n * Return the mime type for the given `str`.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nexports.type = string_ => string_.split(/ *; */).shift();\n\n/**\n * Return header field parameters.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nexports.params = value => {\n const object = {};\n for (const string_ of value.split(/ *; */)) {\n const parts = string_.split(/ *= */);\n const key = parts.shift();\n const value = parts.shift();\n if (key && value) object[key] = value;\n }\n return object;\n};\n\n/**\n * Parse Link header fields.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nexports.parseLinks = value => {\n const object = {};\n for (const string_ of value.split(/ *, */)) {\n const parts = string_.split(/ *; */);\n const url = parts[0].slice(1, -1);\n const rel = parts[1].split(/ *= */)[1].slice(1, -1);\n object[rel] = url;\n }\n return object;\n};\n\n/**\n * Strip content related fields from `header`.\n *\n * @param {Object} header\n * @return {Object} header\n * @api private\n */\n\nexports.cleanHeader = (header, changesOrigin) => {\n delete header['content-type'];\n delete header['content-length'];\n delete header['transfer-encoding'];\n delete header.host;\n // secuirty\n if (changesOrigin) {\n delete header.authorization;\n delete header.cookie;\n }\n return header;\n};\n\n/**\n * Check if `obj` is an object.\n *\n * @param {Object} object\n * @return {Boolean}\n * @api private\n */\nexports.isObject = object => {\n return object !== null && typeof object === 'object';\n};\n\n/**\n * Object.hasOwn fallback/polyfill.\n *\n * @type {(object: object, property: string) => boolean} object\n * @api private\n */\nexports.hasOwn = Object.hasOwn || function (object, property) {\n if (object == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n return Object.prototype.hasOwnProperty.call(new Object(object), property);\n};\nexports.mixin = (target, source) => {\n for (const key in source) {\n if (exports.hasOwn(source, key)) {\n target[key] = source[key];\n }\n }\n};\n\n/**\n * Check if the response is compressed using Gzip or Deflate.\n * @param {Object} res\n * @return {Boolean}\n */\n\nexports.isGzipOrDeflateEncoding = res => {\n return new RegExp(/^\\s*(?:deflate|gzip)\\s*$/).test(res.headers['content-encoding']);\n};\n\n/**\n * Check if the response is compressed using Brotli.\n * @param {Object} res\n * @return {Boolean}\n */\n\nexports.isBrotliEncoding = res => {\n return new RegExp(/^\\s*(?:br)\\s*$/).test(res.headers['content-encoding']);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwidHlwZSIsInN0cmluZ18iLCJzcGxpdCIsInNoaWZ0IiwicGFyYW1zIiwidmFsdWUiLCJvYmplY3QiLCJwYXJ0cyIsImtleSIsInBhcnNlTGlua3MiLCJ1cmwiLCJzbGljZSIsInJlbCIsImNsZWFuSGVhZGVyIiwiaGVhZGVyIiwiY2hhbmdlc09yaWdpbiIsImhvc3QiLCJhdXRob3JpemF0aW9uIiwiY29va2llIiwiaXNPYmplY3QiLCJoYXNPd24iLCJPYmplY3QiLCJwcm9wZXJ0eSIsIlR5cGVFcnJvciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIm1peGluIiwidGFyZ2V0Iiwic291cmNlIiwiaXNHemlwT3JEZWZsYXRlRW5jb2RpbmciLCJyZXMiLCJSZWdFeHAiLCJ0ZXN0IiwiaGVhZGVycyIsImlzQnJvdGxpRW5jb2RpbmciXSwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIFJldHVybiB0aGUgbWltZSB0eXBlIGZvciB0aGUgZ2l2ZW4gYHN0cmAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy50eXBlID0gKHN0cmluZ18pID0+IHN0cmluZ18uc3BsaXQoLyAqOyAqLykuc2hpZnQoKTtcblxuLyoqXG4gKiBSZXR1cm4gaGVhZGVyIGZpZWxkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5wYXJhbXMgPSAodmFsdWUpID0+IHtcbiAgY29uc3Qgb2JqZWN0ID0ge307XG4gIGZvciAoY29uc3Qgc3RyaW5nXyBvZiB2YWx1ZS5zcGxpdCgvICo7ICovKSkge1xuICAgIGNvbnN0IHBhcnRzID0gc3RyaW5nXy5zcGxpdCgvICo9ICovKTtcbiAgICBjb25zdCBrZXkgPSBwYXJ0cy5zaGlmdCgpO1xuICAgIGNvbnN0IHZhbHVlID0gcGFydHMuc2hpZnQoKTtcblxuICAgIGlmIChrZXkgJiYgdmFsdWUpIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufTtcblxuLyoqXG4gKiBQYXJzZSBMaW5rIGhlYWRlciBmaWVsZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5wYXJzZUxpbmtzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IG9iamVjdCA9IHt9O1xuICBmb3IgKGNvbnN0IHN0cmluZ18gb2YgdmFsdWUuc3BsaXQoLyAqLCAqLykpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHN0cmluZ18uc3BsaXQoLyAqOyAqLyk7XG4gICAgY29uc3QgdXJsID0gcGFydHNbMF0uc2xpY2UoMSwgLTEpO1xuICAgIGNvbnN0IHJlbCA9IHBhcnRzWzFdLnNwbGl0KC8gKj0gKi8pWzFdLnNsaWNlKDEsIC0xKTtcbiAgICBvYmplY3RbcmVsXSA9IHVybDtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59O1xuXG4vKipcbiAqIFN0cmlwIGNvbnRlbnQgcmVsYXRlZCBmaWVsZHMgZnJvbSBgaGVhZGVyYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyXG4gKiBAcmV0dXJuIHtPYmplY3R9IGhlYWRlclxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jbGVhbkhlYWRlciA9IChoZWFkZXIsIGNoYW5nZXNPcmlnaW4pID0+IHtcbiAgZGVsZXRlIGhlYWRlclsnY29udGVudC10eXBlJ107XG4gIGRlbGV0ZSBoZWFkZXJbJ2NvbnRlbnQtbGVuZ3RoJ107XG4gIGRlbGV0ZSBoZWFkZXJbJ3RyYW5zZmVyLWVuY29kaW5nJ107XG4gIGRlbGV0ZSBoZWFkZXIuaG9zdDtcbiAgLy8gc2VjdWlydHlcbiAgaWYgKGNoYW5nZXNPcmlnaW4pIHtcbiAgICBkZWxldGUgaGVhZGVyLmF1dGhvcml6YXRpb247XG4gICAgZGVsZXRlIGhlYWRlci5jb29raWU7XG4gIH1cblxuICByZXR1cm4gaGVhZGVyO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5leHBvcnRzLmlzT2JqZWN0ID0gKG9iamVjdCkgPT4ge1xuICByZXR1cm4gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xufTtcblxuLyoqXG4gKiBPYmplY3QuaGFzT3duIGZhbGxiYWNrL3BvbHlmaWxsLlxuICpcbiAqIEB0eXBlIHsob2JqZWN0OiBvYmplY3QsIHByb3BlcnR5OiBzdHJpbmcpID0+IGJvb2xlYW59IG9iamVjdFxuICogQGFwaSBwcml2YXRlXG4gKi9cbmV4cG9ydHMuaGFzT3duID1cbiAgT2JqZWN0Lmhhc093biB8fFxuICBmdW5jdGlvbiAob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXcgT2JqZWN0KG9iamVjdCksIHByb3BlcnR5KTtcbiAgfTtcblxuZXhwb3J0cy5taXhpbiA9ICh0YXJnZXQsIHNvdXJjZSkgPT4ge1xuICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoZXhwb3J0cy5oYXNPd24oc291cmNlLCBrZXkpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaXMgY29tcHJlc3NlZCB1c2luZyBHemlwIG9yIERlZmxhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gcmVzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmV4cG9ydHMuaXNHemlwT3JEZWZsYXRlRW5jb2RpbmcgPSAocmVzKSA9PiB7XG4gIHJldHVybiBuZXcgUmVnRXhwKC9eXFxzKig/OmRlZmxhdGV8Z3ppcClcXHMqJC8pLnRlc3QocmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZXNwb25zZSBpcyBjb21wcmVzc2VkIHVzaW5nIEJyb3RsaS5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cblxuZXhwb3J0cy5pc0Jyb3RsaUVuY29kaW5nID0gKHJlcykgPT4ge1xuICByZXR1cm4gbmV3IFJlZ0V4cCgvXlxccyooPzpicilcXHMqJC8pLnRlc3QocmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBQSxPQUFPLENBQUNDLElBQUksR0FBSUMsT0FBTyxJQUFLQSxPQUFPLENBQUNDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLENBQUM7O0FBRTFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBSixPQUFPLENBQUNLLE1BQU0sR0FBSUMsS0FBSyxJQUFLO0VBQzFCLE1BQU1DLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDakIsS0FBSyxNQUFNTCxPQUFPLElBQUlJLEtBQUssQ0FBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0lBQzFDLE1BQU1LLEtBQUssR0FBR04sT0FBTyxDQUFDQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ3BDLE1BQU1NLEdBQUcsR0FBR0QsS0FBSyxDQUFDSixLQUFLLENBQUMsQ0FBQztJQUN6QixNQUFNRSxLQUFLLEdBQUdFLEtBQUssQ0FBQ0osS0FBSyxDQUFDLENBQUM7SUFFM0IsSUFBSUssR0FBRyxJQUFJSCxLQUFLLEVBQUVDLE1BQU0sQ0FBQ0UsR0FBRyxDQUFDLEdBQUdILEtBQUs7RUFDdkM7RUFFQSxPQUFPQyxNQUFNO0FBQ2YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQVAsT0FBTyxDQUFDVSxVQUFVLEdBQUlKLEtBQUssSUFBSztFQUM5QixNQUFNQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2pCLEtBQUssTUFBTUwsT0FBTyxJQUFJSSxLQUFLLENBQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtJQUMxQyxNQUFNSyxLQUFLLEdBQUdOLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNwQyxNQUFNUSxHQUFHLEdBQUdILEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNQyxHQUFHLEdBQUdMLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0wsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDUyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ETCxNQUFNLENBQUNNLEdBQUcsQ0FBQyxHQUFHRixHQUFHO0VBQ25CO0VBRUEsT0FBT0osTUFBTTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFQLE9BQU8sQ0FBQ2MsV0FBVyxHQUFHLENBQUNDLE1BQU0sRUFBRUMsYUFBYSxLQUFLO0VBQy9DLE9BQU9ELE1BQU0sQ0FBQyxjQUFjLENBQUM7RUFDN0IsT0FBT0EsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0VBQy9CLE9BQU9BLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztFQUNsQyxPQUFPQSxNQUFNLENBQUNFLElBQUk7RUFDbEI7RUFDQSxJQUFJRCxhQUFhLEVBQUU7SUFDakIsT0FBT0QsTUFBTSxDQUFDRyxhQUFhO0lBQzNCLE9BQU9ILE1BQU0sQ0FBQ0ksTUFBTTtFQUN0QjtFQUVBLE9BQU9KLE1BQU07QUFDZixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FmLE9BQU8sQ0FBQ29CLFFBQVEsR0FBSWIsTUFBTSxJQUFLO0VBQzdCLE9BQU9BLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBT0EsTUFBTSxLQUFLLFFBQVE7QUFDdEQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQVAsT0FBTyxDQUFDcUIsTUFBTSxHQUNaQyxNQUFNLENBQUNELE1BQU0sSUFDYixVQUFVZCxNQUFNLEVBQUVnQixRQUFRLEVBQUU7RUFDMUIsSUFBSWhCLE1BQU0sSUFBSSxJQUFJLEVBQUU7SUFDbEIsTUFBTSxJQUFJaUIsU0FBUyxDQUFDLDRDQUE0QyxDQUFDO0VBQ25FO0VBRUEsT0FBT0YsTUFBTSxDQUFDRyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDLElBQUlMLE1BQU0sQ0FBQ2YsTUFBTSxDQUFDLEVBQUVnQixRQUFRLENBQUM7QUFDM0UsQ0FBQztBQUVIdkIsT0FBTyxDQUFDNEIsS0FBSyxHQUFHLENBQUNDLE1BQU0sRUFBRUMsTUFBTSxLQUFLO0VBQ2xDLEtBQUssTUFBTXJCLEdBQUcsSUFBSXFCLE1BQU0sRUFBRTtJQUN4QixJQUFJOUIsT0FBTyxDQUFDcUIsTUFBTSxDQUFDUyxNQUFNLEVBQUVyQixHQUFHLENBQUMsRUFBRTtNQUMvQm9CLE1BQU0sQ0FBQ3BCLEdBQUcsQ0FBQyxHQUFHcUIsTUFBTSxDQUFDckIsR0FBRyxDQUFDO0lBQzNCO0VBQ0Y7QUFDRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFULE9BQU8sQ0FBQytCLHVCQUF1QixHQUFJQyxHQUFHLElBQUs7RUFDekMsT0FBTyxJQUFJQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQ0MsSUFBSSxDQUFDRixHQUFHLENBQUNHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3JGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQW5DLE9BQU8sQ0FBQ29DLGdCQUFnQixHQUFJSixHQUFHLElBQUs7RUFDbEMsT0FBTyxJQUFJQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ0MsSUFBSSxDQUFDRixHQUFHLENBQUNHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzNFLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=","\"use strict\";\n\n/**\n * Root reference for iframes.\n */\n\nlet root;\nif (typeof window !== 'undefined') {\n // Browser window\n root = window;\n} else if (typeof self === 'undefined') {\n // Other environments\n console.warn('Using browser-only version of superagent in non-browser environment');\n root = void 0;\n} else {\n // Web Worker\n root = self;\n}\nconst Emitter = require('component-emitter');\nconst safeStringify = require('fast-safe-stringify');\nconst qs = require('qs');\nconst RequestBase = require('./request-base');\nconst {\n isObject,\n mixin,\n hasOwn\n} = require('./utils');\nconst ResponseBase = require('./response-base');\nconst Agent = require('./agent-base');\n\n/**\n * Noop.\n */\n\nfunction noop() {}\n\n/**\n * Expose `request`.\n */\n\nmodule.exports = function (method, url) {\n // callback\n if (typeof url === 'function') {\n return new exports.Request('GET', method).end(url);\n }\n\n // url first\n if (arguments.length === 1) {\n return new exports.Request('GET', method);\n }\n return new exports.Request(method, url);\n};\nexports = module.exports;\nconst request = exports;\nexports.Request = Request;\n\n/**\n * Determine XHR.\n */\n\nrequest.getXHR = () => {\n if (root.XMLHttpRequest) {\n return new root.XMLHttpRequest();\n }\n throw new Error('Browser-only version of superagent could not find XHR');\n};\n\n/**\n * Removes leading and trailing whitespace, added to support IE.\n *\n * @param {String} s\n * @return {String}\n * @api private\n */\n\nconst trim = ''.trim ? s => s.trim() : s => s.replace(/(^\\s*|\\s*$)/g, '');\n\n/**\n * Serialize the given `obj`.\n *\n * @param {Object} obj\n * @return {String}\n * @api private\n */\n\nfunction serialize(object) {\n if (!isObject(object)) return object;\n const pairs = [];\n for (const key in object) {\n if (hasOwn(object, key)) pushEncodedKeyValuePair(pairs, key, object[key]);\n }\n return pairs.join('&');\n}\n\n/**\n * Helps 'serialize' with serializing arrays.\n * Mutates the pairs array.\n *\n * @param {Array} pairs\n * @param {String} key\n * @param {Mixed} val\n */\n\nfunction pushEncodedKeyValuePair(pairs, key, value) {\n if (value === undefined) return;\n if (value === null) {\n pairs.push(encodeURI(key));\n return;\n }\n if (Array.isArray(value)) {\n for (const v of value) {\n pushEncodedKeyValuePair(pairs, key, v);\n }\n } else if (isObject(value)) {\n for (const subkey in value) {\n if (hasOwn(value, subkey)) pushEncodedKeyValuePair(pairs, `${key}[${subkey}]`, value[subkey]);\n }\n } else {\n pairs.push(encodeURI(key) + '=' + encodeURIComponent(value));\n }\n}\n\n/**\n * Expose serialization method.\n */\n\nrequest.serializeObject = serialize;\n\n/**\n * Parse the given x-www-form-urlencoded `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parseString(string_) {\n const object = {};\n const pairs = string_.split('&');\n let pair;\n let pos;\n for (let i = 0, length_ = pairs.length; i < length_; ++i) {\n pair = pairs[i];\n pos = pair.indexOf('=');\n if (pos === -1) {\n object[decodeURIComponent(pair)] = '';\n } else {\n object[decodeURIComponent(pair.slice(0, pos))] = decodeURIComponent(pair.slice(pos + 1));\n }\n }\n return object;\n}\n\n/**\n * Expose parser.\n */\n\nrequest.parseString = parseString;\n\n/**\n * Default MIME type map.\n *\n * superagent.types.xml = 'application/xml';\n *\n */\n\nrequest.types = {\n html: 'text/html',\n json: 'application/json',\n xml: 'text/xml',\n urlencoded: 'application/x-www-form-urlencoded',\n form: 'application/x-www-form-urlencoded',\n 'form-data': 'application/x-www-form-urlencoded'\n};\n\n/**\n * Default serialization map.\n *\n * superagent.serialize['application/xml'] = function(obj){\n * return 'generated xml here';\n * };\n *\n */\n\nrequest.serialize = {\n 'application/x-www-form-urlencoded': obj => {\n return qs.stringify(obj, {\n indices: false,\n strictNullHandling: true\n });\n },\n 'application/json': safeStringify\n};\n\n/**\n * Default parsers.\n *\n * superagent.parse['application/xml'] = function(str){\n * return { object parsed from str };\n * };\n *\n */\n\nrequest.parse = {\n 'application/x-www-form-urlencoded': parseString,\n 'application/json': JSON.parse\n};\n\n/**\n * Parse the given header `str` into\n * an object containing the mapped fields.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parseHeader(string_) {\n const lines = string_.split(/\\r?\\n/);\n const fields = {};\n let index;\n let line;\n let field;\n let value;\n for (let i = 0, length_ = lines.length; i < length_; ++i) {\n line = lines[i];\n index = line.indexOf(':');\n if (index === -1) {\n // could be empty line, just skip it\n continue;\n }\n field = line.slice(0, index).toLowerCase();\n value = trim(line.slice(index + 1));\n fields[field] = value;\n }\n return fields;\n}\n\n/**\n * Check if `mime` is json or has +json structured syntax suffix.\n *\n * @param {String} mime\n * @return {Boolean}\n * @api private\n */\n\nfunction isJSON(mime) {\n // should match /json or +json\n // but not /json-seq\n return /[/+]json($|[^-\\w])/i.test(mime);\n}\n\n/**\n * Initialize a new `Response` with the given `xhr`.\n *\n * - set flags (.ok, .error, etc)\n * - parse header\n *\n * Examples:\n *\n * Aliasing `superagent` as `request` is nice:\n *\n * request = superagent;\n *\n * We can use the promise-like API, or pass callbacks:\n *\n * request.get('/').end(function(res){});\n * request.get('/', function(res){});\n *\n * Sending data can be chained:\n *\n * request\n * .post('/user')\n * .send({ name: 'tj' })\n * .end(function(res){});\n *\n * Or passed to `.send()`:\n *\n * request\n * .post('/user')\n * .send({ name: 'tj' }, function(res){});\n *\n * Or passed to `.post()`:\n *\n * request\n * .post('/user', { name: 'tj' })\n * .end(function(res){});\n *\n * Or further reduced to a single call for simple cases:\n *\n * request\n * .post('/user', { name: 'tj' }, function(res){});\n *\n * @param {XMLHTTPRequest} xhr\n * @param {Object} options\n * @api private\n */\n\nfunction Response(request_) {\n this.req = request_;\n this.xhr = this.req.xhr;\n // responseText is accessible only if responseType is '' or 'text' and on older browsers\n this.text = this.req.method !== 'HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text') || typeof this.xhr.responseType === 'undefined' ? this.xhr.responseText : null;\n this.statusText = this.req.xhr.statusText;\n let {\n status\n } = this.xhr;\n // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request\n if (status === 1223) {\n status = 204;\n }\n this._setStatusProperties(status);\n this.headers = parseHeader(this.xhr.getAllResponseHeaders());\n this.header = this.headers;\n // getAllResponseHeaders sometimes falsely returns \"\" for CORS requests, but\n // getResponseHeader still works. so we get content-type even if getting\n // other headers fails.\n this.header['content-type'] = this.xhr.getResponseHeader('content-type');\n this._setHeaderProperties(this.header);\n if (this.text === null && request_._responseType) {\n this.body = this.xhr.response;\n } else {\n this.body = this.req.method === 'HEAD' ? null : this._parseBody(this.text ? this.text : this.xhr.response);\n }\n}\nmixin(Response.prototype, ResponseBase.prototype);\n\n/**\n * Parse the given body `str`.\n *\n * Used for auto-parsing of bodies. Parsers\n * are defined on the `superagent.parse` object.\n *\n * @param {String} str\n * @return {Mixed}\n * @api private\n */\n\nResponse.prototype._parseBody = function (string_) {\n let parse = request.parse[this.type];\n if (this.req._parser) {\n return this.req._parser(this, string_);\n }\n if (!parse && isJSON(this.type)) {\n parse = request.parse['application/json'];\n }\n return parse && string_ && (string_.length > 0 || string_ instanceof Object) ? parse(string_) : null;\n};\n\n/**\n * Return an `Error` representative of this response.\n *\n * @return {Error}\n * @api public\n */\n\nResponse.prototype.toError = function () {\n const {\n req\n } = this;\n const {\n method\n } = req;\n const {\n url\n } = req;\n const message = `cannot ${method} ${url} (${this.status})`;\n const error = new Error(message);\n error.status = this.status;\n error.method = method;\n error.url = url;\n return error;\n};\n\n/**\n * Expose `Response`.\n */\n\nrequest.Response = Response;\n\n/**\n * Initialize a new `Request` with the given `method` and `url`.\n *\n * @param {String} method\n * @param {String} url\n * @api public\n */\n\nfunction Request(method, url) {\n const self = this;\n this._query = this._query || [];\n this.method = method;\n this.url = url;\n this.header = {}; // preserves header name case\n this._header = {}; // coerces header names to lowercase\n this.on('end', () => {\n let error = null;\n let res = null;\n try {\n res = new Response(self);\n } catch (err) {\n error = new Error('Parser is unable to parse the response');\n error.parse = true;\n error.original = err;\n // issue #675: return the raw response if the response parsing fails\n if (self.xhr) {\n // ie9 doesn't have 'response' property\n error.rawResponse = typeof self.xhr.responseType === 'undefined' ? self.xhr.responseText : self.xhr.response;\n // issue #876: return the http status code if the response parsing fails\n error.status = self.xhr.status ? self.xhr.status : null;\n error.statusCode = error.status; // backwards-compat only\n } else {\n error.rawResponse = null;\n error.status = null;\n }\n return self.callback(error);\n }\n self.emit('response', res);\n let new_error;\n try {\n if (!self._isResponseOK(res)) {\n new_error = new Error(res.statusText || res.text || 'Unsuccessful HTTP response');\n }\n } catch (err) {\n new_error = err; // ok() callback can throw\n }\n\n // #1000 don't catch errors from the callback to avoid double calling it\n if (new_error) {\n new_error.original = error;\n new_error.response = res;\n new_error.status = new_error.status || res.status;\n self.callback(new_error, res);\n } else {\n self.callback(null, res);\n }\n });\n}\n\n/**\n * Mixin `Emitter` and `RequestBase`.\n */\n\n// eslint-disable-next-line new-cap\nEmitter(Request.prototype);\nmixin(Request.prototype, RequestBase.prototype);\n\n/**\n * Set Content-Type to `type`, mapping values from `request.types`.\n *\n * Examples:\n *\n * superagent.types.xml = 'application/xml';\n *\n * request.post('/')\n * .type('xml')\n * .send(xmlstring)\n * .end(callback);\n *\n * request.post('/')\n * .type('application/xml')\n * .send(xmlstring)\n * .end(callback);\n *\n * @param {String} type\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.type = function (type) {\n this.set('Content-Type', request.types[type] || type);\n return this;\n};\n\n/**\n * Set Accept to `type`, mapping values from `request.types`.\n *\n * Examples:\n *\n * superagent.types.json = 'application/json';\n *\n * request.get('/agent')\n * .accept('json')\n * .end(callback);\n *\n * request.get('/agent')\n * .accept('application/json')\n * .end(callback);\n *\n * @param {String} accept\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.accept = function (type) {\n this.set('Accept', request.types[type] || type);\n return this;\n};\n\n/**\n * Set Authorization field value with `user` and `pass`.\n *\n * @param {String} user\n * @param {String} [pass] optional in case of using 'bearer' as type\n * @param {Object} options with 'type' property 'auto', 'basic' or 'bearer' (default 'basic')\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.auth = function (user, pass, options) {\n if (arguments.length === 1) pass = '';\n if (typeof pass === 'object' && pass !== null) {\n // pass is optional and can be replaced with options\n options = pass;\n pass = '';\n }\n if (!options) {\n options = {\n type: typeof btoa === 'function' ? 'basic' : 'auto'\n };\n }\n const encoder = options.encoder ? options.encoder : string => {\n if (typeof btoa === 'function') {\n return btoa(string);\n }\n throw new Error('Cannot use basic auth, btoa is not a function');\n };\n return this._auth(user, pass, options, encoder);\n};\n\n/**\n * Add query-string `val`.\n *\n * Examples:\n *\n * request.get('/shoes')\n * .query('size=10')\n * .query({ color: 'blue' })\n *\n * @param {Object|String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.query = function (value) {\n if (typeof value !== 'string') value = serialize(value);\n if (value) this._query.push(value);\n return this;\n};\n\n/**\n * Queue the given `file` as an attachment to the specified `field`,\n * with optional `options` (or filename).\n *\n * ``` js\n * request.post('/upload')\n * .attach('content', new Blob(['hey!'], { type: \"text/html\"}))\n * .end(callback);\n * ```\n *\n * @param {String} field\n * @param {Blob|File} file\n * @param {String|Object} options\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.attach = function (field, file, options) {\n if (file) {\n if (this._data) {\n throw new Error(\"superagent can't mix .send() and .attach()\");\n }\n this._getFormData().append(field, file, options || file.name);\n }\n return this;\n};\nRequest.prototype._getFormData = function () {\n if (!this._formData) {\n this._formData = new root.FormData();\n }\n return this._formData;\n};\n\n/**\n * Invoke the callback with `err` and `res`\n * and handle arity check.\n *\n * @param {Error} err\n * @param {Response} res\n * @api private\n */\n\nRequest.prototype.callback = function (error, res) {\n if (this._shouldRetry(error, res)) {\n return this._retry();\n }\n const fn = this._callback;\n this.clearTimeout();\n if (error) {\n if (this._maxRetries) error.retries = this._retries - 1;\n this.emit('error', error);\n }\n fn(error, res);\n};\n\n/**\n * Invoke callback with x-domain error.\n *\n * @api private\n */\n\nRequest.prototype.crossDomainError = function () {\n const error = new Error('Request has been terminated\\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.');\n error.crossDomain = true;\n error.status = this.status;\n error.method = this.method;\n error.url = this.url;\n this.callback(error);\n};\n\n// This only warns, because the request is still likely to work\nRequest.prototype.agent = function () {\n console.warn('This is not supported in browser version of superagent');\n return this;\n};\nRequest.prototype.ca = Request.prototype.agent;\nRequest.prototype.buffer = Request.prototype.ca;\n\n// This throws, because it can't send/receive data as expected\nRequest.prototype.write = () => {\n throw new Error('Streaming is not supported in browser version of superagent');\n};\nRequest.prototype.pipe = Request.prototype.write;\n\n/**\n * Check if `obj` is a host object,\n * we don't want to serialize these :)\n *\n * @param {Object} obj host object\n * @return {Boolean} is a host object\n * @api private\n */\nRequest.prototype._isHost = function (object) {\n // Native objects stringify to [object File], [object Blob], [object FormData], etc.\n return object && typeof object === 'object' && !Array.isArray(object) && Object.prototype.toString.call(object) !== '[object Object]';\n};\n\n/**\n * Initiate request, invoking callback `fn(res)`\n * with an instanceof `Response`.\n *\n * @param {Function} fn\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.end = function (fn) {\n if (this._endCalled) {\n console.warn('Warning: .end() was called twice. This is not supported in superagent');\n }\n this._endCalled = true;\n\n // store callback\n this._callback = fn || noop;\n\n // querystring\n this._finalizeQueryString();\n this._end();\n};\nRequest.prototype._setUploadTimeout = function () {\n const self = this;\n\n // upload timeout it's wokrs only if deadline timeout is off\n if (this._uploadTimeout && !this._uploadTimeoutTimer) {\n this._uploadTimeoutTimer = setTimeout(() => {\n self._timeoutError('Upload timeout of ', self._uploadTimeout, 'ETIMEDOUT');\n }, this._uploadTimeout);\n }\n};\n\n// eslint-disable-next-line complexity\nRequest.prototype._end = function () {\n if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called'));\n const self = this;\n this.xhr = request.getXHR();\n const {\n xhr\n } = this;\n let data = this._formData || this._data;\n this._setTimeouts();\n\n // state change\n xhr.addEventListener('readystatechange', () => {\n const {\n readyState\n } = xhr;\n if (readyState >= 2 && self._responseTimeoutTimer) {\n clearTimeout(self._responseTimeoutTimer);\n }\n if (readyState !== 4) {\n return;\n }\n\n // In IE9, reads to any property (e.g. status) off of an aborted XHR will\n // result in the error \"Could not complete the operation due to error c00c023f\"\n let status;\n try {\n status = xhr.status;\n } catch (err) {\n status = 0;\n }\n if (!status) {\n if (self.timedout || self._aborted) return;\n return self.crossDomainError();\n }\n self.emit('end');\n });\n\n // progress\n const handleProgress = (direction, e) => {\n if (e.total > 0) {\n e.percent = e.loaded / e.total * 100;\n if (e.percent === 100) {\n clearTimeout(self._uploadTimeoutTimer);\n }\n }\n e.direction = direction;\n self.emit('progress', e);\n };\n if (this.hasListeners('progress')) {\n try {\n xhr.addEventListener('progress', handleProgress.bind(null, 'download'));\n if (xhr.upload) {\n xhr.upload.addEventListener('progress', handleProgress.bind(null, 'upload'));\n }\n } catch (err) {\n // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist.\n // Reported here:\n // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context\n }\n }\n if (xhr.upload) {\n this._setUploadTimeout();\n }\n\n // initiate request\n try {\n if (this.username && this.password) {\n xhr.open(this.method, this.url, true, this.username, this.password);\n } else {\n xhr.open(this.method, this.url, true);\n }\n } catch (err) {\n // see #1149\n return this.callback(err);\n }\n\n // CORS\n if (this._withCredentials) xhr.withCredentials = true;\n\n // body\n if (!this._formData && this.method !== 'GET' && this.method !== 'HEAD' && typeof data !== 'string' && !this._isHost(data)) {\n // serialize stuff\n const contentType = this._header['content-type'];\n let serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : ''];\n if (!serialize && isJSON(contentType)) {\n serialize = request.serialize['application/json'];\n }\n if (serialize) data = serialize(data);\n }\n\n // set header fields\n for (const field in this.header) {\n if (this.header[field] === null) continue;\n if (hasOwn(this.header, field)) xhr.setRequestHeader(field, this.header[field]);\n }\n if (this._responseType) {\n xhr.responseType = this._responseType;\n }\n\n // send stuff\n this.emit('request', this);\n\n // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing)\n // We need null here if data is undefined\n xhr.send(typeof data === 'undefined' ? null : data);\n};\nrequest.agent = () => new Agent();\nfor (const method of ['GET', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE']) {\n Agent.prototype[method.toLowerCase()] = function (url, fn) {\n const request_ = new request.Request(method, url);\n this._setDefaults(request_);\n if (fn) {\n request_.end(fn);\n }\n return request_;\n };\n}\nAgent.prototype.del = Agent.prototype.delete;\n\n/**\n * GET `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.get = (url, data, fn) => {\n const request_ = request('GET', url);\n if (typeof data === 'function') {\n fn = data;\n data = null;\n }\n if (data) request_.query(data);\n if (fn) request_.end(fn);\n return request_;\n};\n\n/**\n * HEAD `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.head = (url, data, fn) => {\n const request_ = request('HEAD', url);\n if (typeof data === 'function') {\n fn = data;\n data = null;\n }\n if (data) request_.query(data);\n if (fn) request_.end(fn);\n return request_;\n};\n\n/**\n * OPTIONS query to `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.options = (url, data, fn) => {\n const request_ = request('OPTIONS', url);\n if (typeof data === 'function') {\n fn = data;\n data = null;\n }\n if (data) request_.send(data);\n if (fn) request_.end(fn);\n return request_;\n};\n\n/**\n * DELETE `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed} [data]\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nfunction del(url, data, fn) {\n const request_ = request('DELETE', url);\n if (typeof data === 'function') {\n fn = data;\n data = null;\n }\n if (data) request_.send(data);\n if (fn) request_.end(fn);\n return request_;\n}\nrequest.del = del;\nrequest.delete = del;\n\n/**\n * PATCH `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed} [data]\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.patch = (url, data, fn) => {\n const request_ = request('PATCH', url);\n if (typeof data === 'function') {\n fn = data;\n data = null;\n }\n if (data) request_.send(data);\n if (fn) request_.end(fn);\n return request_;\n};\n\n/**\n * POST `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed} [data]\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.post = (url, data, fn) => {\n const request_ = request('POST', url);\n if (typeof data === 'function') {\n fn = data;\n data = null;\n }\n if (data) request_.send(data);\n if (fn) request_.end(fn);\n return request_;\n};\n\n/**\n * PUT `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.put = (url, data, fn) => {\n const request_ = request('PUT', url);\n if (typeof data === 'function') {\n fn = data;\n data = null;\n }\n if (data) request_.send(data);\n if (fn) request_.end(fn);\n return request_;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyb290Iiwid2luZG93Iiwic2VsZiIsImNvbnNvbGUiLCJ3YXJuIiwiRW1pdHRlciIsInJlcXVpcmUiLCJzYWZlU3RyaW5naWZ5IiwicXMiLCJSZXF1ZXN0QmFzZSIsImlzT2JqZWN0IiwibWl4aW4iLCJoYXNPd24iLCJSZXNwb25zZUJhc2UiLCJBZ2VudCIsIm5vb3AiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0aG9kIiwidXJsIiwiUmVxdWVzdCIsImVuZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInJlcXVlc3QiLCJnZXRYSFIiLCJYTUxIdHRwUmVxdWVzdCIsIkVycm9yIiwidHJpbSIsInMiLCJyZXBsYWNlIiwic2VyaWFsaXplIiwib2JqZWN0IiwicGFpcnMiLCJrZXkiLCJwdXNoRW5jb2RlZEtleVZhbHVlUGFpciIsImpvaW4iLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInB1c2giLCJlbmNvZGVVUkkiLCJBcnJheSIsImlzQXJyYXkiLCJ2Iiwic3Via2V5IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2VyaWFsaXplT2JqZWN0IiwicGFyc2VTdHJpbmciLCJzdHJpbmdfIiwic3BsaXQiLCJwYWlyIiwicG9zIiwiaSIsImxlbmd0aF8iLCJpbmRleE9mIiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwic2xpY2UiLCJ0eXBlcyIsImh0bWwiLCJqc29uIiwieG1sIiwidXJsZW5jb2RlZCIsImZvcm0iLCJvYmoiLCJzdHJpbmdpZnkiLCJpbmRpY2VzIiwic3RyaWN0TnVsbEhhbmRsaW5nIiwicGFyc2UiLCJKU09OIiwicGFyc2VIZWFkZXIiLCJsaW5lcyIsImZpZWxkcyIsImluZGV4IiwibGluZSIsImZpZWxkIiwidG9Mb3dlckNhc2UiLCJpc0pTT04iLCJtaW1lIiwidGVzdCIsIlJlc3BvbnNlIiwicmVxdWVzdF8iLCJyZXEiLCJ4aHIiLCJ0ZXh0IiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsInN0YXR1cyIsIl9zZXRTdGF0dXNQcm9wZXJ0aWVzIiwiaGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImhlYWRlciIsImdldFJlc3BvbnNlSGVhZGVyIiwiX3NldEhlYWRlclByb3BlcnRpZXMiLCJfcmVzcG9uc2VUeXBlIiwiYm9keSIsInJlc3BvbnNlIiwiX3BhcnNlQm9keSIsInByb3RvdHlwZSIsInR5cGUiLCJfcGFyc2VyIiwiT2JqZWN0IiwidG9FcnJvciIsIm1lc3NhZ2UiLCJlcnJvciIsIl9xdWVyeSIsIl9oZWFkZXIiLCJvbiIsInJlcyIsImVyciIsIm9yaWdpbmFsIiwicmF3UmVzcG9uc2UiLCJzdGF0dXNDb2RlIiwiY2FsbGJhY2siLCJlbWl0IiwibmV3X2Vycm9yIiwiX2lzUmVzcG9uc2VPSyIsInNldCIsImFjY2VwdCIsImF1dGgiLCJ1c2VyIiwicGFzcyIsIm9wdGlvbnMiLCJidG9hIiwiZW5jb2RlciIsInN0cmluZyIsIl9hdXRoIiwicXVlcnkiLCJhdHRhY2giLCJmaWxlIiwiX2RhdGEiLCJfZ2V0Rm9ybURhdGEiLCJhcHBlbmQiLCJuYW1lIiwiX2Zvcm1EYXRhIiwiRm9ybURhdGEiLCJfc2hvdWxkUmV0cnkiLCJfcmV0cnkiLCJmbiIsIl9jYWxsYmFjayIsImNsZWFyVGltZW91dCIsIl9tYXhSZXRyaWVzIiwicmV0cmllcyIsIl9yZXRyaWVzIiwiY3Jvc3NEb21haW5FcnJvciIsImNyb3NzRG9tYWluIiwiYWdlbnQiLCJjYSIsImJ1ZmZlciIsIndyaXRlIiwicGlwZSIsIl9pc0hvc3QiLCJ0b1N0cmluZyIsImNhbGwiLCJfZW5kQ2FsbGVkIiwiX2ZpbmFsaXplUXVlcnlTdHJpbmciLCJfZW5kIiwiX3NldFVwbG9hZFRpbWVvdXQiLCJfdXBsb2FkVGltZW91dCIsIl91cGxvYWRUaW1lb3V0VGltZXIiLCJzZXRUaW1lb3V0IiwiX3RpbWVvdXRFcnJvciIsIl9hYm9ydGVkIiwiZGF0YSIsIl9zZXRUaW1lb3V0cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZWFkeVN0YXRlIiwiX3Jlc3BvbnNlVGltZW91dFRpbWVyIiwidGltZWRvdXQiLCJoYW5kbGVQcm9ncmVzcyIsImRpcmVjdGlvbiIsImUiLCJ0b3RhbCIsInBlcmNlbnQiLCJsb2FkZWQiLCJoYXNMaXN0ZW5lcnMiLCJiaW5kIiwidXBsb2FkIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIm9wZW4iLCJfd2l0aENyZWRlbnRpYWxzIiwid2l0aENyZWRlbnRpYWxzIiwiY29udGVudFR5cGUiLCJfc2VyaWFsaXplciIsInNldFJlcXVlc3RIZWFkZXIiLCJzZW5kIiwiX3NldERlZmF1bHRzIiwiZGVsIiwiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBhdGNoIiwicG9zdCIsInB1dCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSb290IHJlZmVyZW5jZSBmb3IgaWZyYW1lcy5cbiAqL1xuXG5sZXQgcm9vdDtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAvLyBCcm93c2VyIHdpbmRvd1xuICByb290ID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gT3RoZXIgZW52aXJvbm1lbnRzXG4gIGNvbnNvbGUud2FybihcbiAgICAnVXNpbmcgYnJvd3Nlci1vbmx5IHZlcnNpb24gb2Ygc3VwZXJhZ2VudCBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudCdcbiAgKTtcbiAgcm9vdCA9IHRoaXM7XG59IGVsc2Uge1xuICAvLyBXZWIgV29ya2VyXG4gIHJvb3QgPSBzZWxmO1xufVxuXG5jb25zdCBFbWl0dGVyID0gcmVxdWlyZSgnY29tcG9uZW50LWVtaXR0ZXInKTtcbmNvbnN0IHNhZmVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LXNhZmUtc3RyaW5naWZ5Jyk7XG5jb25zdCBxcyA9IHJlcXVpcmUoJ3FzJyk7XG5jb25zdCBSZXF1ZXN0QmFzZSA9IHJlcXVpcmUoJy4vcmVxdWVzdC1iYXNlJyk7XG5jb25zdCB7IGlzT2JqZWN0LCBtaXhpbiwgaGFzT3duIH0gPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCBSZXNwb25zZUJhc2UgPSByZXF1aXJlKCcuL3Jlc3BvbnNlLWJhc2UnKTtcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudC1iYXNlJyk7XG5cbi8qKlxuICogTm9vcC5cbiAqL1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuLyoqXG4gKiBFeHBvc2UgYHJlcXVlc3RgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgdXJsKSB7XG4gIC8vIGNhbGxiYWNrXG4gIGlmICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBleHBvcnRzLlJlcXVlc3QoJ0dFVCcsIG1ldGhvZCkuZW5kKHVybCk7XG4gIH1cblxuICAvLyB1cmwgZmlyc3RcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IGV4cG9ydHMuUmVxdWVzdCgnR0VUJywgbWV0aG9kKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgZXhwb3J0cy5SZXF1ZXN0KG1ldGhvZCwgdXJsKTtcbn07XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cztcblxuY29uc3QgcmVxdWVzdCA9IGV4cG9ydHM7XG5cbmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5cbi8qKlxuICogRGV0ZXJtaW5lIFhIUi5cbiAqL1xuXG5yZXF1ZXN0LmdldFhIUiA9ICgpID0+IHtcbiAgaWYgKHJvb3QuWE1MSHR0cFJlcXVlc3QpIHtcbiAgICByZXR1cm4gbmV3IHJvb3QuWE1MSHR0cFJlcXVlc3QoKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignQnJvd3Nlci1vbmx5IHZlcnNpb24gb2Ygc3VwZXJhZ2VudCBjb3VsZCBub3QgZmluZCBYSFInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBhZGRlZCB0byBzdXBwb3J0IElFLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5jb25zdCB0cmltID0gJycudHJpbSA/IChzKSA9PiBzLnRyaW0oKSA6IChzKSA9PiBzLnJlcGxhY2UoLyheXFxzKnxcXHMqJCkvZywgJycpO1xuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gYG9iamAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2VyaWFsaXplKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHJldHVybiBvYmplY3Q7XG4gIGNvbnN0IHBhaXJzID0gW107XG4gIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChoYXNPd24ob2JqZWN0LCBrZXkpKSBwdXNoRW5jb2RlZEtleVZhbHVlUGFpcihwYWlycywga2V5LCBvYmplY3Rba2V5XSk7XG4gIH1cblxuICByZXR1cm4gcGFpcnMuam9pbignJicpO1xufVxuXG4vKipcbiAqIEhlbHBzICdzZXJpYWxpemUnIHdpdGggc2VyaWFsaXppbmcgYXJyYXlzLlxuICogTXV0YXRlcyB0aGUgcGFpcnMgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcGFpcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICovXG5cbmZ1bmN0aW9uIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHBhaXJzLnB1c2goZW5jb2RlVVJJKGtleSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkge1xuICAgICAgcHVzaEVuY29kZWRLZXlWYWx1ZVBhaXIocGFpcnMsIGtleSwgdik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3Qgc3Via2V5IGluIHZhbHVlKSB7XG4gICAgICBpZiAoaGFzT3duKHZhbHVlLCBzdWJrZXkpKVxuICAgICAgICBwdXNoRW5jb2RlZEtleVZhbHVlUGFpcihwYWlycywgYCR7a2V5fVske3N1YmtleX1dYCwgdmFsdWVbc3Via2V5XSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhaXJzLnB1c2goZW5jb2RlVVJJKGtleSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcbiAgfVxufVxuXG4vKipcbiAqIEV4cG9zZSBzZXJpYWxpemF0aW9uIG1ldGhvZC5cbiAqL1xuXG5yZXF1ZXN0LnNlcmlhbGl6ZU9iamVjdCA9IHNlcmlhbGl6ZTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4geC13d3ctZm9ybS11cmxlbmNvZGVkIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKHN0cmluZ18pIHtcbiAgY29uc3Qgb2JqZWN0ID0ge307XG4gIGNvbnN0IHBhaXJzID0gc3RyaW5nXy5zcGxpdCgnJicpO1xuICBsZXQgcGFpcjtcbiAgbGV0IHBvcztcblxuICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoXyA9IHBhaXJzLmxlbmd0aDsgaSA8IGxlbmd0aF87ICsraSkge1xuICAgIHBhaXIgPSBwYWlyc1tpXTtcbiAgICBwb3MgPSBwYWlyLmluZGV4T2YoJz0nKTtcbiAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgb2JqZWN0W2RlY29kZVVSSUNvbXBvbmVudChwYWlyKV0gPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0W2RlY29kZVVSSUNvbXBvbmVudChwYWlyLnNsaWNlKDAsIHBvcykpXSA9IGRlY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgcGFpci5zbGljZShwb3MgKyAxKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vKipcbiAqIEV4cG9zZSBwYXJzZXIuXG4gKi9cblxucmVxdWVzdC5wYXJzZVN0cmluZyA9IHBhcnNlU3RyaW5nO1xuXG4vKipcbiAqIERlZmF1bHQgTUlNRSB0eXBlIG1hcC5cbiAqXG4gKiAgICAgc3VwZXJhZ2VudC50eXBlcy54bWwgPSAnYXBwbGljYXRpb24veG1sJztcbiAqXG4gKi9cblxucmVxdWVzdC50eXBlcyA9IHtcbiAgaHRtbDogJ3RleHQvaHRtbCcsXG4gIGpzb246ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgeG1sOiAndGV4dC94bWwnLFxuICB1cmxlbmNvZGVkOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgZm9ybTogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICdmb3JtLWRhdGEnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuLyoqXG4gKiBEZWZhdWx0IHNlcmlhbGl6YXRpb24gbWFwLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnNlcmlhbGl6ZVsnYXBwbGljYXRpb24veG1sJ10gPSBmdW5jdGlvbihvYmope1xuICogICAgICAgcmV0dXJuICdnZW5lcmF0ZWQgeG1sIGhlcmUnO1xuICogICAgIH07XG4gKlxuICovXG5cbnJlcXVlc3Quc2VyaWFsaXplID0ge1xuICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogKG9iaikgPT4ge1xuICAgIHJldHVybiBxcy5zdHJpbmdpZnkob2JqLCB7IGluZGljZXM6IGZhbHNlLCBzdHJpY3ROdWxsSGFuZGxpbmc6IHRydWUgfSk7XG4gIH0sXG4gICdhcHBsaWNhdGlvbi9qc29uJzogc2FmZVN0cmluZ2lmeVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IHBhcnNlcnMuXG4gKlxuICogICAgIHN1cGVyYWdlbnQucGFyc2VbJ2FwcGxpY2F0aW9uL3htbCddID0gZnVuY3Rpb24oc3RyKXtcbiAqICAgICAgIHJldHVybiB7IG9iamVjdCBwYXJzZWQgZnJvbSBzdHIgfTtcbiAqICAgICB9O1xuICpcbiAqL1xuXG5yZXF1ZXN0LnBhcnNlID0ge1xuICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogcGFyc2VTdHJpbmcsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogSlNPTi5wYXJzZVxufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gaGVhZGVyIGBzdHJgIGludG9cbiAqIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBtYXBwZWQgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyKHN0cmluZ18pIHtcbiAgY29uc3QgbGluZXMgPSBzdHJpbmdfLnNwbGl0KC9cXHI/XFxuLyk7XG4gIGNvbnN0IGZpZWxkcyA9IHt9O1xuICBsZXQgaW5kZXg7XG4gIGxldCBsaW5lO1xuICBsZXQgZmllbGQ7XG4gIGxldCB2YWx1ZTtcblxuICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoXyA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbmd0aF87ICsraSkge1xuICAgIGxpbmUgPSBsaW5lc1tpXTtcbiAgICBpbmRleCA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIGNvdWxkIGJlIGVtcHR5IGxpbmUsIGp1c3Qgc2tpcCBpdFxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZmllbGQgPSBsaW5lLnNsaWNlKDAsIGluZGV4KS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbHVlID0gdHJpbShsaW5lLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgIGZpZWxkc1tmaWVsZF0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHM7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYG1pbWVgIGlzIGpzb24gb3IgaGFzICtqc29uIHN0cnVjdHVyZWQgc3ludGF4IHN1ZmZpeC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWltZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzSlNPTihtaW1lKSB7XG4gIC8vIHNob3VsZCBtYXRjaCAvanNvbiBvciAranNvblxuICAvLyBidXQgbm90IC9qc29uLXNlcVxuICByZXR1cm4gL1svK11qc29uKCR8W14tXFx3XSkvaS50ZXN0KG1pbWUpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlYCB3aXRoIHRoZSBnaXZlbiBgeGhyYC5cbiAqXG4gKiAgLSBzZXQgZmxhZ3MgKC5vaywgLmVycm9yLCBldGMpXG4gKiAgLSBwYXJzZSBoZWFkZXJcbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgQWxpYXNpbmcgYHN1cGVyYWdlbnRgIGFzIGByZXF1ZXN0YCBpcyBuaWNlOlxuICpcbiAqICAgICAgcmVxdWVzdCA9IHN1cGVyYWdlbnQ7XG4gKlxuICogIFdlIGNhbiB1c2UgdGhlIHByb21pc2UtbGlrZSBBUEksIG9yIHBhc3MgY2FsbGJhY2tzOlxuICpcbiAqICAgICAgcmVxdWVzdC5nZXQoJy8nKS5lbmQoZnVuY3Rpb24ocmVzKXt9KTtcbiAqICAgICAgcmVxdWVzdC5nZXQoJy8nLCBmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqICBTZW5kaW5nIGRhdGEgY2FuIGJlIGNoYWluZWQ6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJylcbiAqICAgICAgICAuc2VuZCh7IG5hbWU6ICd0aicgfSlcbiAqICAgICAgICAuZW5kKGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogIE9yIHBhc3NlZCB0byBgLnNlbmQoKWA6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJylcbiAqICAgICAgICAuc2VuZCh7IG5hbWU6ICd0aicgfSwgZnVuY3Rpb24ocmVzKXt9KTtcbiAqXG4gKiAgT3IgcGFzc2VkIHRvIGAucG9zdCgpYDpcbiAqXG4gKiAgICAgIHJlcXVlc3RcbiAqICAgICAgICAucG9zdCgnL3VzZXInLCB7IG5hbWU6ICd0aicgfSlcbiAqICAgICAgICAuZW5kKGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogT3IgZnVydGhlciByZWR1Y2VkIHRvIGEgc2luZ2xlIGNhbGwgZm9yIHNpbXBsZSBjYXNlczpcbiAqXG4gKiAgICAgIHJlcXVlc3RcbiAqICAgICAgICAucG9zdCgnL3VzZXInLCB7IG5hbWU6ICd0aicgfSwgZnVuY3Rpb24ocmVzKXt9KTtcbiAqXG4gKiBAcGFyYW0ge1hNTEhUVFBSZXF1ZXN0fSB4aHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBSZXNwb25zZShyZXF1ZXN0Xykge1xuICB0aGlzLnJlcSA9IHJlcXVlc3RfO1xuICB0aGlzLnhociA9IHRoaXMucmVxLnhocjtcbiAgLy8gcmVzcG9uc2VUZXh0IGlzIGFjY2Vzc2libGUgb25seSBpZiByZXNwb25zZVR5cGUgaXMgJycgb3IgJ3RleHQnIGFuZCBvbiBvbGRlciBicm93c2Vyc1xuICB0aGlzLnRleHQgPVxuICAgICh0aGlzLnJlcS5tZXRob2QgIT09ICdIRUFEJyAmJlxuICAgICAgKHRoaXMueGhyLnJlc3BvbnNlVHlwZSA9PT0gJycgfHwgdGhpcy54aHIucmVzcG9uc2VUeXBlID09PSAndGV4dCcpKSB8fFxuICAgIHR5cGVvZiB0aGlzLnhoci5yZXNwb25zZVR5cGUgPT09ICd1bmRlZmluZWQnXG4gICAgICA/IHRoaXMueGhyLnJlc3BvbnNlVGV4dFxuICAgICAgOiBudWxsO1xuICB0aGlzLnN0YXR1c1RleHQgPSB0aGlzLnJlcS54aHIuc3RhdHVzVGV4dDtcbiAgbGV0IHsgc3RhdHVzIH0gPSB0aGlzLnhocjtcbiAgLy8gaGFuZGxlIElFOSBidWc6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTAwNDY5NzIvbXNpZS1yZXR1cm5zLXN0YXR1cy1jb2RlLW9mLTEyMjMtZm9yLWFqYXgtcmVxdWVzdFxuICBpZiAoc3RhdHVzID09PSAxMjIzKSB7XG4gICAgc3RhdHVzID0gMjA0O1xuICB9XG5cbiAgdGhpcy5fc2V0U3RhdHVzUHJvcGVydGllcyhzdGF0dXMpO1xuICB0aGlzLmhlYWRlcnMgPSBwYXJzZUhlYWRlcih0aGlzLnhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7XG4gIHRoaXMuaGVhZGVyID0gdGhpcy5oZWFkZXJzO1xuICAvLyBnZXRBbGxSZXNwb25zZUhlYWRlcnMgc29tZXRpbWVzIGZhbHNlbHkgcmV0dXJucyBcIlwiIGZvciBDT1JTIHJlcXVlc3RzLCBidXRcbiAgLy8gZ2V0UmVzcG9uc2VIZWFkZXIgc3RpbGwgd29ya3MuIHNvIHdlIGdldCBjb250ZW50LXR5cGUgZXZlbiBpZiBnZXR0aW5nXG4gIC8vIG90aGVyIGhlYWRlcnMgZmFpbHMuXG4gIHRoaXMuaGVhZGVyWydjb250ZW50LXR5cGUnXSA9IHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcbiAgdGhpcy5fc2V0SGVhZGVyUHJvcGVydGllcyh0aGlzLmhlYWRlcik7XG5cbiAgaWYgKHRoaXMudGV4dCA9PT0gbnVsbCAmJiByZXF1ZXN0Xy5fcmVzcG9uc2VUeXBlKSB7XG4gICAgdGhpcy5ib2R5ID0gdGhpcy54aHIucmVzcG9uc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5ib2R5ID1cbiAgICAgIHRoaXMucmVxLm1ldGhvZCA9PT0gJ0hFQUQnXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuX3BhcnNlQm9keSh0aGlzLnRleHQgPyB0aGlzLnRleHQgOiB0aGlzLnhoci5yZXNwb25zZSk7XG4gIH1cbn1cblxubWl4aW4oUmVzcG9uc2UucHJvdG90eXBlLCBSZXNwb25zZUJhc2UucHJvdG90eXBlKTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYm9keSBgc3RyYC5cbiAqXG4gKiBVc2VkIGZvciBhdXRvLXBhcnNpbmcgb2YgYm9kaWVzLiBQYXJzZXJzXG4gKiBhcmUgZGVmaW5lZCBvbiB0aGUgYHN1cGVyYWdlbnQucGFyc2VgIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtNaXhlZH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS5fcGFyc2VCb2R5ID0gZnVuY3Rpb24gKHN0cmluZ18pIHtcbiAgbGV0IHBhcnNlID0gcmVxdWVzdC5wYXJzZVt0aGlzLnR5cGVdO1xuICBpZiAodGhpcy5yZXEuX3BhcnNlcikge1xuICAgIHJldHVybiB0aGlzLnJlcS5fcGFyc2VyKHRoaXMsIHN0cmluZ18pO1xuICB9XG5cbiAgaWYgKCFwYXJzZSAmJiBpc0pTT04odGhpcy50eXBlKSkge1xuICAgIHBhcnNlID0gcmVxdWVzdC5wYXJzZVsnYXBwbGljYXRpb24vanNvbiddO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlICYmIHN0cmluZ18gJiYgKHN0cmluZ18ubGVuZ3RoID4gMCB8fCBzdHJpbmdfIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgID8gcGFyc2Uoc3RyaW5nXylcbiAgICA6IG51bGw7XG59O1xuXG4vKipcbiAqIFJldHVybiBhbiBgRXJyb3JgIHJlcHJlc2VudGF0aXZlIG9mIHRoaXMgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybiB7RXJyb3J9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS50b0Vycm9yID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHJlcSB9ID0gdGhpcztcbiAgY29uc3QgeyBtZXRob2QgfSA9IHJlcTtcbiAgY29uc3QgeyB1cmwgfSA9IHJlcTtcblxuICBjb25zdCBtZXNzYWdlID0gYGNhbm5vdCAke21ldGhvZH0gJHt1cmx9ICgke3RoaXMuc3RhdHVzfSlgO1xuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgZXJyb3Iuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gIGVycm9yLm1ldGhvZCA9IG1ldGhvZDtcbiAgZXJyb3IudXJsID0gdXJsO1xuXG4gIHJldHVybiBlcnJvcjtcbn07XG5cbi8qKlxuICogRXhwb3NlIGBSZXNwb25zZWAuXG4gKi9cblxucmVxdWVzdC5SZXNwb25zZSA9IFJlc3BvbnNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlcXVlc3RgIHdpdGggdGhlIGdpdmVuIGBtZXRob2RgIGFuZCBgdXJsYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3QobWV0aG9kLCB1cmwpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3F1ZXJ5ID0gdGhpcy5fcXVlcnkgfHwgW107XG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICB0aGlzLnVybCA9IHVybDtcbiAgdGhpcy5oZWFkZXIgPSB7fTsgLy8gcHJlc2VydmVzIGhlYWRlciBuYW1lIGNhc2VcbiAgdGhpcy5faGVhZGVyID0ge307IC8vIGNvZXJjZXMgaGVhZGVyIG5hbWVzIHRvIGxvd2VyY2FzZVxuICB0aGlzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBsZXQgcmVzID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICByZXMgPSBuZXcgUmVzcG9uc2Uoc2VsZik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcignUGFyc2VyIGlzIHVuYWJsZSB0byBwYXJzZSB0aGUgcmVzcG9uc2UnKTtcbiAgICAgIGVycm9yLnBhcnNlID0gdHJ1ZTtcbiAgICAgIGVycm9yLm9yaWdpbmFsID0gZXJyO1xuICAgICAgLy8gaXNzdWUgIzY3NTogcmV0dXJuIHRoZSByYXcgcmVzcG9uc2UgaWYgdGhlIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAgICAgIGlmIChzZWxmLnhocikge1xuICAgICAgICAvLyBpZTkgZG9lc24ndCBoYXZlICdyZXNwb25zZScgcHJvcGVydHlcbiAgICAgICAgZXJyb3IucmF3UmVzcG9uc2UgPVxuICAgICAgICAgIHR5cGVvZiBzZWxmLnhoci5yZXNwb25zZVR5cGUgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IHNlbGYueGhyLnJlc3BvbnNlVGV4dFxuICAgICAgICAgICAgOiBzZWxmLnhoci5yZXNwb25zZTtcbiAgICAgICAgLy8gaXNzdWUgIzg3NjogcmV0dXJuIHRoZSBodHRwIHN0YXR1cyBjb2RlIGlmIHRoZSByZXNwb25zZSBwYXJzaW5nIGZhaWxzXG4gICAgICAgIGVycm9yLnN0YXR1cyA9IHNlbGYueGhyLnN0YXR1cyA/IHNlbGYueGhyLnN0YXR1cyA6IG51bGw7XG4gICAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSBlcnJvci5zdGF0dXM7IC8vIGJhY2t3YXJkcy1jb21wYXQgb25seVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IucmF3UmVzcG9uc2UgPSBudWxsO1xuICAgICAgICBlcnJvci5zdGF0dXMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZi5jYWxsYmFjayhlcnJvcik7XG4gICAgfVxuXG4gICAgc2VsZi5lbWl0KCdyZXNwb25zZScsIHJlcyk7XG5cbiAgICBsZXQgbmV3X2Vycm9yO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXNlbGYuX2lzUmVzcG9uc2VPSyhyZXMpKSB7XG4gICAgICAgIG5ld19lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICByZXMuc3RhdHVzVGV4dCB8fCByZXMudGV4dCB8fCAnVW5zdWNjZXNzZnVsIEhUVFAgcmVzcG9uc2UnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBuZXdfZXJyb3IgPSBlcnI7IC8vIG9rKCkgY2FsbGJhY2sgY2FuIHRocm93XG4gICAgfVxuXG4gICAgLy8gIzEwMDAgZG9uJ3QgY2F0Y2ggZXJyb3JzIGZyb20gdGhlIGNhbGxiYWNrIHRvIGF2b2lkIGRvdWJsZSBjYWxsaW5nIGl0XG4gICAgaWYgKG5ld19lcnJvcikge1xuICAgICAgbmV3X2Vycm9yLm9yaWdpbmFsID0gZXJyb3I7XG4gICAgICBuZXdfZXJyb3IucmVzcG9uc2UgPSByZXM7XG4gICAgICBuZXdfZXJyb3Iuc3RhdHVzID0gbmV3X2Vycm9yLnN0YXR1cyB8fCByZXMuc3RhdHVzO1xuICAgICAgc2VsZi5jYWxsYmFjayhuZXdfZXJyb3IsIHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuY2FsbGJhY2sobnVsbCwgcmVzKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIE1peGluIGBFbWl0dGVyYCBhbmQgYFJlcXVlc3RCYXNlYC5cbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuRW1pdHRlcihSZXF1ZXN0LnByb3RvdHlwZSk7XG5cbm1peGluKFJlcXVlc3QucHJvdG90eXBlLCBSZXF1ZXN0QmFzZS5wcm90b3R5cGUpO1xuXG4vKipcbiAqIFNldCBDb250ZW50LVR5cGUgdG8gYHR5cGVgLCBtYXBwaW5nIHZhbHVlcyBmcm9tIGByZXF1ZXN0LnR5cGVzYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHN1cGVyYWdlbnQudHlwZXMueG1sID0gJ2FwcGxpY2F0aW9uL3htbCc7XG4gKlxuICogICAgICByZXF1ZXN0LnBvc3QoJy8nKVxuICogICAgICAgIC50eXBlKCd4bWwnKVxuICogICAgICAgIC5zZW5kKHhtbHN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcXVlc3QucG9zdCgnLycpXG4gKiAgICAgICAgLnR5cGUoJ2FwcGxpY2F0aW9uL3htbCcpXG4gKiAgICAgICAgLnNlbmQoeG1sc3RyaW5nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUudHlwZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gIHRoaXMuc2V0KCdDb250ZW50LVR5cGUnLCByZXF1ZXN0LnR5cGVzW3R5cGVdIHx8IHR5cGUpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IEFjY2VwdCB0byBgdHlwZWAsIG1hcHBpbmcgdmFsdWVzIGZyb20gYHJlcXVlc3QudHlwZXNgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgc3VwZXJhZ2VudC50eXBlcy5qc29uID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICpcbiAqICAgICAgcmVxdWVzdC5nZXQoJy9hZ2VudCcpXG4gKiAgICAgICAgLmFjY2VwdCgnanNvbicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LmdldCgnL2FnZW50JylcbiAqICAgICAgICAuYWNjZXB0KCdhcHBsaWNhdGlvbi9qc29uJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWNjZXB0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgdGhpcy5zZXQoJ0FjY2VwdCcsIHJlcXVlc3QudHlwZXNbdHlwZV0gfHwgdHlwZSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQXV0aG9yaXphdGlvbiBmaWVsZCB2YWx1ZSB3aXRoIGB1c2VyYCBhbmQgYHBhc3NgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1c2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gW3Bhc3NdIG9wdGlvbmFsIGluIGNhc2Ugb2YgdXNpbmcgJ2JlYXJlcicgYXMgdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgd2l0aCAndHlwZScgcHJvcGVydHkgJ2F1dG8nLCAnYmFzaWMnIG9yICdiZWFyZXInIChkZWZhdWx0ICdiYXNpYycpXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYXV0aCA9IGZ1bmN0aW9uICh1c2VyLCBwYXNzLCBvcHRpb25zKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSBwYXNzID0gJyc7XG4gIGlmICh0eXBlb2YgcGFzcyA9PT0gJ29iamVjdCcgJiYgcGFzcyAhPT0gbnVsbCkge1xuICAgIC8vIHBhc3MgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSByZXBsYWNlZCB3aXRoIG9wdGlvbnNcbiAgICBvcHRpb25zID0gcGFzcztcbiAgICBwYXNzID0gJyc7XG4gIH1cblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgdHlwZTogdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicgPyAnYmFzaWMnIDogJ2F1dG8nXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGVuY29kZXIgPSBvcHRpb25zLmVuY29kZXJcbiAgICA/IG9wdGlvbnMuZW5jb2RlclxuICAgIDogKHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gYnRvYShzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIGJhc2ljIGF1dGgsIGJ0b2EgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgIH07XG5cbiAgcmV0dXJuIHRoaXMuX2F1dGgodXNlciwgcGFzcywgb3B0aW9ucywgZW5jb2Rlcik7XG59O1xuXG4vKipcbiAqIEFkZCBxdWVyeS1zdHJpbmcgYHZhbGAuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICByZXF1ZXN0LmdldCgnL3Nob2VzJylcbiAqICAgICAucXVlcnkoJ3NpemU9MTAnKVxuICogICAgIC5xdWVyeSh7IGNvbG9yOiAnYmx1ZScgfSlcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHZhbFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB2YWx1ZSA9IHNlcmlhbGl6ZSh2YWx1ZSk7XG4gIGlmICh2YWx1ZSkgdGhpcy5fcXVlcnkucHVzaCh2YWx1ZSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBRdWV1ZSB0aGUgZ2l2ZW4gYGZpbGVgIGFzIGFuIGF0dGFjaG1lbnQgdG8gdGhlIHNwZWNpZmllZCBgZmllbGRgLFxuICogd2l0aCBvcHRpb25hbCBgb3B0aW9uc2AgKG9yIGZpbGVuYW1lKS5cbiAqXG4gKiBgYGAganNcbiAqIHJlcXVlc3QucG9zdCgnL3VwbG9hZCcpXG4gKiAgIC5hdHRhY2goJ2NvbnRlbnQnLCBuZXcgQmxvYihbJzxhIGlkPVwiYVwiPjxiIGlkPVwiYlwiPmhleSE8L2I+PC9hPiddLCB7IHR5cGU6IFwidGV4dC9odG1sXCJ9KSlcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7QmxvYnxGaWxlfSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAoZmllbGQsIGZpbGUsIG9wdGlvbnMpIHtcbiAgaWYgKGZpbGUpIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3VwZXJhZ2VudCBjYW4ndCBtaXggLnNlbmQoKSBhbmQgLmF0dGFjaCgpXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX2dldEZvcm1EYXRhKCkuYXBwZW5kKGZpZWxkLCBmaWxlLCBvcHRpb25zIHx8IGZpbGUubmFtZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9nZXRGb3JtRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9mb3JtRGF0YSkge1xuICAgIHRoaXMuX2Zvcm1EYXRhID0gbmV3IHJvb3QuRm9ybURhdGEoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9mb3JtRGF0YTtcbn07XG5cbi8qKlxuICogSW52b2tlIHRoZSBjYWxsYmFjayB3aXRoIGBlcnJgIGFuZCBgcmVzYFxuICogYW5kIGhhbmRsZSBhcml0eSBjaGVjay5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJcbiAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXJyb3IsIHJlcykge1xuICBpZiAodGhpcy5fc2hvdWxkUmV0cnkoZXJyb3IsIHJlcykpIHtcbiAgICByZXR1cm4gdGhpcy5fcmV0cnkoKTtcbiAgfVxuXG4gIGNvbnN0IGZuID0gdGhpcy5fY2FsbGJhY2s7XG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgaWYgKHRoaXMuX21heFJldHJpZXMpIGVycm9yLnJldHJpZXMgPSB0aGlzLl9yZXRyaWVzIC0gMTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICB9XG5cbiAgZm4oZXJyb3IsIHJlcyk7XG59O1xuXG4vKipcbiAqIEludm9rZSBjYWxsYmFjayB3aXRoIHgtZG9tYWluIGVycm9yLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmNyb3NzRG9tYWluRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICdSZXF1ZXN0IGhhcyBiZWVuIHRlcm1pbmF0ZWRcXG5Qb3NzaWJsZSBjYXVzZXM6IHRoZSBuZXR3b3JrIGlzIG9mZmxpbmUsIE9yaWdpbiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4sIHRoZSBwYWdlIGlzIGJlaW5nIHVubG9hZGVkLCBldGMuJ1xuICApO1xuICBlcnJvci5jcm9zc0RvbWFpbiA9IHRydWU7XG5cbiAgZXJyb3Iuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gIGVycm9yLm1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICBlcnJvci51cmwgPSB0aGlzLnVybDtcblxuICB0aGlzLmNhbGxiYWNrKGVycm9yKTtcbn07XG5cbi8vIFRoaXMgb25seSB3YXJucywgYmVjYXVzZSB0aGUgcmVxdWVzdCBpcyBzdGlsbCBsaWtlbHkgdG8gd29ya1xuUmVxdWVzdC5wcm90b3R5cGUuYWdlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnNvbGUud2FybignVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgdmVyc2lvbiBvZiBzdXBlcmFnZW50Jyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuY2EgPSBSZXF1ZXN0LnByb3RvdHlwZS5hZ2VudDtcblJlcXVlc3QucHJvdG90eXBlLmJ1ZmZlciA9IFJlcXVlc3QucHJvdG90eXBlLmNhO1xuXG4vLyBUaGlzIHRocm93cywgYmVjYXVzZSBpdCBjYW4ndCBzZW5kL3JlY2VpdmUgZGF0YSBhcyBleHBlY3RlZFxuUmVxdWVzdC5wcm90b3R5cGUud3JpdGUgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnU3RyZWFtaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciB2ZXJzaW9uIG9mIHN1cGVyYWdlbnQnXG4gICk7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5waXBlID0gUmVxdWVzdC5wcm90b3R5cGUud3JpdGU7XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYSBob3N0IG9iamVjdCxcbiAqIHdlIGRvbid0IHdhbnQgdG8gc2VyaWFsaXplIHRoZXNlIDopXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBob3N0IG9iamVjdFxuICogQHJldHVybiB7Qm9vbGVhbn0gaXMgYSBob3N0IG9iamVjdFxuICogQGFwaSBwcml2YXRlXG4gKi9cblJlcXVlc3QucHJvdG90eXBlLl9pc0hvc3QgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gIC8vIE5hdGl2ZSBvYmplY3RzIHN0cmluZ2lmeSB0byBbb2JqZWN0IEZpbGVdLCBbb2JqZWN0IEJsb2JdLCBbb2JqZWN0IEZvcm1EYXRhXSwgZXRjLlxuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgIUFycmF5LmlzQXJyYXkob2JqZWN0KSAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpICE9PSAnW29iamVjdCBPYmplY3RdJ1xuICApO1xufTtcblxuLyoqXG4gKiBJbml0aWF0ZSByZXF1ZXN0LCBpbnZva2luZyBjYWxsYmFjayBgZm4ocmVzKWBcbiAqIHdpdGggYW4gaW5zdGFuY2VvZiBgUmVzcG9uc2VgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9lbmRDYWxsZWQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnV2FybmluZzogLmVuZCgpIHdhcyBjYWxsZWQgdHdpY2UuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBpbiBzdXBlcmFnZW50J1xuICAgICk7XG4gIH1cblxuICB0aGlzLl9lbmRDYWxsZWQgPSB0cnVlO1xuXG4gIC8vIHN0b3JlIGNhbGxiYWNrXG4gIHRoaXMuX2NhbGxiYWNrID0gZm4gfHwgbm9vcDtcblxuICAvLyBxdWVyeXN0cmluZ1xuICB0aGlzLl9maW5hbGl6ZVF1ZXJ5U3RyaW5nKCk7XG5cbiAgdGhpcy5fZW5kKCk7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5fc2V0VXBsb2FkVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgLy8gdXBsb2FkIHRpbWVvdXQgaXQncyB3b2tycyBvbmx5IGlmIGRlYWRsaW5lIHRpbWVvdXQgaXMgb2ZmXG4gIGlmICh0aGlzLl91cGxvYWRUaW1lb3V0ICYmICF0aGlzLl91cGxvYWRUaW1lb3V0VGltZXIpIHtcbiAgICB0aGlzLl91cGxvYWRUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNlbGYuX3RpbWVvdXRFcnJvcihcbiAgICAgICAgJ1VwbG9hZCB0aW1lb3V0IG9mICcsXG4gICAgICAgIHNlbGYuX3VwbG9hZFRpbWVvdXQsXG4gICAgICAgICdFVElNRURPVVQnXG4gICAgICApO1xuICAgIH0sIHRoaXMuX3VwbG9hZFRpbWVvdXQpO1xuICB9XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuUmVxdWVzdC5wcm90b3R5cGUuX2VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpXG4gICAgcmV0dXJuIHRoaXMuY2FsbGJhY2soXG4gICAgICBuZXcgRXJyb3IoJ1RoZSByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQgZXZlbiBiZWZvcmUgLmVuZCgpIHdhcyBjYWxsZWQnKVxuICAgICk7XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHRoaXMueGhyID0gcmVxdWVzdC5nZXRYSFIoKTtcbiAgY29uc3QgeyB4aHIgfSA9IHRoaXM7XG4gIGxldCBkYXRhID0gdGhpcy5fZm9ybURhdGEgfHwgdGhpcy5fZGF0YTtcblxuICB0aGlzLl9zZXRUaW1lb3V0cygpO1xuXG4gIC8vIHN0YXRlIGNoYW5nZVxuICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUgfSA9IHhocjtcbiAgICBpZiAocmVhZHlTdGF0ZSA+PSAyICYmIHNlbGYuX3Jlc3BvbnNlVGltZW91dFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fcmVzcG9uc2VUaW1lb3V0VGltZXIpO1xuICAgIH1cblxuICAgIGlmIChyZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW4gSUU5LCByZWFkcyB0byBhbnkgcHJvcGVydHkgKGUuZy4gc3RhdHVzKSBvZmYgb2YgYW4gYWJvcnRlZCBYSFIgd2lsbFxuICAgIC8vIHJlc3VsdCBpbiB0aGUgZXJyb3IgXCJDb3VsZCBub3QgY29tcGxldGUgdGhlIG9wZXJhdGlvbiBkdWUgdG8gZXJyb3IgYzAwYzAyM2ZcIlxuICAgIGxldCBzdGF0dXM7XG4gICAgdHJ5IHtcbiAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzdGF0dXMgPSAwO1xuICAgIH1cblxuICAgIGlmICghc3RhdHVzKSB7XG4gICAgICBpZiAoc2VsZi50aW1lZG91dCB8fCBzZWxmLl9hYm9ydGVkKSByZXR1cm47XG4gICAgICByZXR1cm4gc2VsZi5jcm9zc0RvbWFpbkVycm9yKCk7XG4gICAgfVxuXG4gICAgc2VsZi5lbWl0KCdlbmQnKTtcbiAgfSk7XG5cbiAgLy8gcHJvZ3Jlc3NcbiAgY29uc3QgaGFuZGxlUHJvZ3Jlc3MgPSAoZGlyZWN0aW9uLCBlKSA9PiB7XG4gICAgaWYgKGUudG90YWwgPiAwKSB7XG4gICAgICBlLnBlcmNlbnQgPSAoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMDtcblxuICAgICAgaWYgKGUucGVyY2VudCA9PT0gMTAwKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChzZWxmLl91cGxvYWRUaW1lb3V0VGltZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGUuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgIHNlbGYuZW1pdCgncHJvZ3Jlc3MnLCBlKTtcbiAgfTtcblxuICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoJ3Byb2dyZXNzJykpIHtcbiAgICB0cnkge1xuICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgaGFuZGxlUHJvZ3Jlc3MuYmluZChudWxsLCAnZG93bmxvYWQnKSk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICB4aHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgJ3Byb2dyZXNzJyxcbiAgICAgICAgICBoYW5kbGVQcm9ncmVzcy5iaW5kKG51bGwsICd1cGxvYWQnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gQWNjZXNzaW5nIHhoci51cGxvYWQgZmFpbHMgaW4gSUUgZnJvbSBhIHdlYiB3b3JrZXIsIHNvIGp1c3QgcHJldGVuZCBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgLy8gUmVwb3J0ZWQgaGVyZTpcbiAgICAgIC8vIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvODM3MjQ1L3htbGh0dHByZXF1ZXN0LXVwbG9hZC10aHJvd3MtaW52YWxpZC1hcmd1bWVudC13aGVuLXVzZWQtZnJvbS13ZWItd29ya2VyLWNvbnRleHRcbiAgICB9XG4gIH1cblxuICBpZiAoeGhyLnVwbG9hZCkge1xuICAgIHRoaXMuX3NldFVwbG9hZFRpbWVvdXQoKTtcbiAgfVxuXG4gIC8vIGluaXRpYXRlIHJlcXVlc3RcbiAgdHJ5IHtcbiAgICBpZiAodGhpcy51c2VybmFtZSAmJiB0aGlzLnBhc3N3b3JkKSB7XG4gICAgICB4aHIub3Blbih0aGlzLm1ldGhvZCwgdGhpcy51cmwsIHRydWUsIHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB4aHIub3Blbih0aGlzLm1ldGhvZCwgdGhpcy51cmwsIHRydWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gc2VlICMxMTQ5XG4gICAgcmV0dXJuIHRoaXMuY2FsbGJhY2soZXJyKTtcbiAgfVxuXG4gIC8vIENPUlNcbiAgaWYgKHRoaXMuX3dpdGhDcmVkZW50aWFscykgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cbiAgLy8gYm9keVxuICBpZiAoXG4gICAgIXRoaXMuX2Zvcm1EYXRhICYmXG4gICAgdGhpcy5tZXRob2QgIT09ICdHRVQnICYmXG4gICAgdGhpcy5tZXRob2QgIT09ICdIRUFEJyAmJlxuICAgIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJyAmJlxuICAgICF0aGlzLl9pc0hvc3QoZGF0YSlcbiAgKSB7XG4gICAgLy8gc2VyaWFsaXplIHN0dWZmXG4gICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLl9oZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICAgIGxldCBzZXJpYWxpemUgPVxuICAgICAgdGhpcy5fc2VyaWFsaXplciB8fFxuICAgICAgcmVxdWVzdC5zZXJpYWxpemVbY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdIDogJyddO1xuICAgIGlmICghc2VyaWFsaXplICYmIGlzSlNPTihjb250ZW50VHlwZSkpIHtcbiAgICAgIHNlcmlhbGl6ZSA9IHJlcXVlc3Quc2VyaWFsaXplWydhcHBsaWNhdGlvbi9qc29uJ107XG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZSkgZGF0YSA9IHNlcmlhbGl6ZShkYXRhKTtcbiAgfVxuXG4gIC8vIHNldCBoZWFkZXIgZmllbGRzXG4gIGZvciAoY29uc3QgZmllbGQgaW4gdGhpcy5oZWFkZXIpIHtcbiAgICBpZiAodGhpcy5oZWFkZXJbZmllbGRdID09PSBudWxsKSBjb250aW51ZTtcblxuICAgIGlmIChoYXNPd24odGhpcy5oZWFkZXIsIGZpZWxkKSlcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGZpZWxkLCB0aGlzLmhlYWRlcltmaWVsZF0pO1xuICB9XG5cbiAgaWYgKHRoaXMuX3Jlc3BvbnNlVHlwZSkge1xuICAgIHhoci5yZXNwb25zZVR5cGUgPSB0aGlzLl9yZXNwb25zZVR5cGU7XG4gIH1cblxuICAvLyBzZW5kIHN0dWZmXG4gIHRoaXMuZW1pdCgncmVxdWVzdCcsIHRoaXMpO1xuXG4gIC8vIElFMTEgeGhyLnNlbmQodW5kZWZpbmVkKSBzZW5kcyAndW5kZWZpbmVkJyBzdHJpbmcgYXMgUE9TVCBwYXlsb2FkIChpbnN0ZWFkIG9mIG5vdGhpbmcpXG4gIC8vIFdlIG5lZWQgbnVsbCBoZXJlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gIHhoci5zZW5kKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiBkYXRhKTtcbn07XG5cbnJlcXVlc3QuYWdlbnQgPSAoKSA9PiBuZXcgQWdlbnQoKTtcblxuZm9yIChjb25zdCBtZXRob2Qgb2YgWydHRVQnLCAnUE9TVCcsICdPUFRJT05TJywgJ1BBVENIJywgJ1BVVCcsICdERUxFVEUnXSkge1xuICBBZ2VudC5wcm90b3R5cGVbbWV0aG9kLnRvTG93ZXJDYXNlKCldID0gZnVuY3Rpb24gKHVybCwgZm4pIHtcbiAgICBjb25zdCByZXF1ZXN0XyA9IG5ldyByZXF1ZXN0LlJlcXVlc3QobWV0aG9kLCB1cmwpO1xuICAgIHRoaXMuX3NldERlZmF1bHRzKHJlcXVlc3RfKTtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHJlcXVlc3RfLmVuZChmbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RfO1xuICB9O1xufVxuXG5BZ2VudC5wcm90b3R5cGUuZGVsID0gQWdlbnQucHJvdG90eXBlLmRlbGV0ZTtcblxuLyoqXG4gKiBHRVQgYHVybGAgd2l0aCBvcHRpb25hbCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZHxGdW5jdGlvbn0gW2RhdGFdIG9yIGZuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LmdldCA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gIGNvbnN0IHJlcXVlc3RfID0gcmVxdWVzdCgnR0VUJywgdXJsKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRhdGEpIHJlcXVlc3RfLnF1ZXJ5KGRhdGEpO1xuICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gIHJldHVybiByZXF1ZXN0Xztcbn07XG5cbi8qKlxuICogSEVBRCBgdXJsYCB3aXRoIG9wdGlvbmFsIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfEZ1bmN0aW9ufSBbZGF0YV0gb3IgZm5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QuaGVhZCA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gIGNvbnN0IHJlcXVlc3RfID0gcmVxdWVzdCgnSEVBRCcsIHVybCk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZuID0gZGF0YTtcbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhKSByZXF1ZXN0Xy5xdWVyeShkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59O1xuXG4vKipcbiAqIE9QVElPTlMgcXVlcnkgdG8gYHVybGAgd2l0aCBvcHRpb25hbCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZHxGdW5jdGlvbn0gW2RhdGFdIG9yIGZuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0Lm9wdGlvbnMgPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ09QVElPTlMnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59O1xuXG4vKipcbiAqIERFTEVURSBgdXJsYCB3aXRoIG9wdGlvbmFsIGBkYXRhYCBhbmQgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR9IFtkYXRhXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGVsKHVybCwgZGF0YSwgZm4pIHtcbiAgY29uc3QgcmVxdWVzdF8gPSByZXF1ZXN0KCdERUxFVEUnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59XG5cbnJlcXVlc3QuZGVsID0gZGVsO1xucmVxdWVzdC5kZWxldGUgPSBkZWw7XG5cbi8qKlxuICogUEFUQ0ggYHVybGAgd2l0aCBvcHRpb25hbCBgZGF0YWAgYW5kIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfSBbZGF0YV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QucGF0Y2ggPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ1BBVENIJywgdXJsKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRhdGEpIHJlcXVlc3RfLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxdWVzdF8uZW5kKGZuKTtcbiAgcmV0dXJuIHJlcXVlc3RfO1xufTtcblxuLyoqXG4gKiBQT1NUIGB1cmxgIHdpdGggb3B0aW9uYWwgYGRhdGFgIGFuZCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZH0gW2RhdGFdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LnBvc3QgPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ1BPU1QnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59O1xuXG4vKipcbiAqIFBVVCBgdXJsYCB3aXRoIG9wdGlvbmFsIGBkYXRhYCBhbmQgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR8RnVuY3Rpb259IFtkYXRhXSBvciBmblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucmVxdWVzdC5wdXQgPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ1BVVCcsIHVybCk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZuID0gZGF0YTtcbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhKSByZXF1ZXN0Xy5zZW5kKGRhdGEpO1xuICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gIHJldHVybiByZXF1ZXN0Xztcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBOztBQUVBLElBQUlBLElBQUk7QUFDUixJQUFJLE9BQU9DLE1BQU0sS0FBSyxXQUFXLEVBQUU7RUFDakM7RUFDQUQsSUFBSSxHQUFHQyxNQUFNO0FBQ2YsQ0FBQyxNQUFNLElBQUksT0FBT0MsSUFBSSxLQUFLLFdBQVcsRUFBRTtFQUN0QztFQUNBQyxPQUFPLENBQUNDLElBQUksQ0FDVixxRUFDRixDQUFDO0VBQ0RKLElBQUksU0FBTztBQUNiLENBQUMsTUFBTTtFQUNMO0VBQ0FBLElBQUksR0FBR0UsSUFBSTtBQUNiO0FBRUEsTUFBTUcsT0FBTyxHQUFHQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7QUFDNUMsTUFBTUMsYUFBYSxHQUFHRCxPQUFPLENBQUMscUJBQXFCLENBQUM7QUFDcEQsTUFBTUUsRUFBRSxHQUFHRixPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLE1BQU1HLFdBQVcsR0FBR0gsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQzdDLE1BQU07RUFBRUksUUFBUTtFQUFFQyxLQUFLO0VBQUVDO0FBQU8sQ0FBQyxHQUFHTixPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ3RELE1BQU1PLFlBQVksR0FBR1AsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0FBQy9DLE1BQU1RLEtBQUssR0FBR1IsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLFNBQVNTLElBQUlBLENBQUEsRUFBRyxDQUFDOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLFVBQVVDLE1BQU0sRUFBRUMsR0FBRyxFQUFFO0VBQ3RDO0VBQ0EsSUFBSSxPQUFPQSxHQUFHLEtBQUssVUFBVSxFQUFFO0lBQzdCLE9BQU8sSUFBSUYsT0FBTyxDQUFDRyxPQUFPLENBQUMsS0FBSyxFQUFFRixNQUFNLENBQUMsQ0FBQ0csR0FBRyxDQUFDRixHQUFHLENBQUM7RUFDcEQ7O0VBRUE7RUFDQSxJQUFJRyxTQUFTLENBQUNDLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDMUIsT0FBTyxJQUFJTixPQUFPLENBQUNHLE9BQU8sQ0FBQyxLQUFLLEVBQUVGLE1BQU0sQ0FBQztFQUMzQztFQUVBLE9BQU8sSUFBSUQsT0FBTyxDQUFDRyxPQUFPLENBQUNGLE1BQU0sRUFBRUMsR0FBRyxDQUFDO0FBQ3pDLENBQUM7QUFFREYsT0FBTyxHQUFHRCxNQUFNLENBQUNDLE9BQU87QUFFeEIsTUFBTU8sT0FBTyxHQUFHUCxPQUFPO0FBRXZCQSxPQUFPLENBQUNHLE9BQU8sR0FBR0EsT0FBTzs7QUFFekI7QUFDQTtBQUNBOztBQUVBSSxPQUFPLENBQUNDLE1BQU0sR0FBRyxNQUFNO0VBQ3JCLElBQUl6QixJQUFJLENBQUMwQixjQUFjLEVBQUU7SUFDdkIsT0FBTyxJQUFJMUIsSUFBSSxDQUFDMEIsY0FBYyxDQUFDLENBQUM7RUFDbEM7RUFFQSxNQUFNLElBQUlDLEtBQUssQ0FBQyx1REFBdUQsQ0FBQztBQUMxRSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1DLElBQUksR0FBRyxFQUFFLENBQUNBLElBQUksR0FBSUMsQ0FBQyxJQUFLQSxDQUFDLENBQUNELElBQUksQ0FBQyxDQUFDLEdBQUlDLENBQUMsSUFBS0EsQ0FBQyxDQUFDQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQzs7QUFFN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU0MsU0FBU0EsQ0FBQ0MsTUFBTSxFQUFFO0VBQ3pCLElBQUksQ0FBQ3RCLFFBQVEsQ0FBQ3NCLE1BQU0sQ0FBQyxFQUFFLE9BQU9BLE1BQU07RUFDcEMsTUFBTUMsS0FBSyxHQUFHLEVBQUU7RUFDaEIsS0FBSyxNQUFNQyxHQUFHLElBQUlGLE1BQU0sRUFBRTtJQUN4QixJQUFJcEIsTUFBTSxDQUFDb0IsTUFBTSxFQUFFRSxHQUFHLENBQUMsRUFBRUMsdUJBQXVCLENBQUNGLEtBQUssRUFBRUMsR0FBRyxFQUFFRixNQUFNLENBQUNFLEdBQUcsQ0FBQyxDQUFDO0VBQzNFO0VBRUEsT0FBT0QsS0FBSyxDQUFDRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU0QsdUJBQXVCQSxDQUFDRixLQUFLLEVBQUVDLEdBQUcsRUFBRUcsS0FBSyxFQUFFO0VBQ2xELElBQUlBLEtBQUssS0FBS0MsU0FBUyxFQUFFO0VBQ3pCLElBQUlELEtBQUssS0FBSyxJQUFJLEVBQUU7SUFDbEJKLEtBQUssQ0FBQ00sSUFBSSxDQUFDQyxTQUFTLENBQUNOLEdBQUcsQ0FBQyxDQUFDO0lBQzFCO0VBQ0Y7RUFFQSxJQUFJTyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0wsS0FBSyxDQUFDLEVBQUU7SUFDeEIsS0FBSyxNQUFNTSxDQUFDLElBQUlOLEtBQUssRUFBRTtNQUNyQkYsdUJBQXVCLENBQUNGLEtBQUssRUFBRUMsR0FBRyxFQUFFUyxDQUFDLENBQUM7SUFDeEM7RUFDRixDQUFDLE1BQU0sSUFBSWpDLFFBQVEsQ0FBQzJCLEtBQUssQ0FBQyxFQUFFO0lBQzFCLEtBQUssTUFBTU8sTUFBTSxJQUFJUCxLQUFLLEVBQUU7TUFDMUIsSUFBSXpCLE1BQU0sQ0FBQ3lCLEtBQUssRUFBRU8sTUFBTSxDQUFDLEVBQ3ZCVCx1QkFBdUIsQ0FBQ0YsS0FBSyxFQUFFLEdBQUdDLEdBQUcsSUFBSVUsTUFBTSxHQUFHLEVBQUVQLEtBQUssQ0FBQ08sTUFBTSxDQUFDLENBQUM7SUFDdEU7RUFDRixDQUFDLE1BQU07SUFDTFgsS0FBSyxDQUFDTSxJQUFJLENBQUNDLFNBQVMsQ0FBQ04sR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHVyxrQkFBa0IsQ0FBQ1IsS0FBSyxDQUFDLENBQUM7RUFDOUQ7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFiLE9BQU8sQ0FBQ3NCLGVBQWUsR0FBR2YsU0FBUzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU2dCLFdBQVdBLENBQUNDLE9BQU8sRUFBRTtFQUM1QixNQUFNaEIsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUNqQixNQUFNQyxLQUFLLEdBQUdlLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQztFQUNoQyxJQUFJQyxJQUFJO0VBQ1IsSUFBSUMsR0FBRztFQUVQLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUMsT0FBTyxHQUFHcEIsS0FBSyxDQUFDVixNQUFNLEVBQUU2QixDQUFDLEdBQUdDLE9BQU8sRUFBRSxFQUFFRCxDQUFDLEVBQUU7SUFDeERGLElBQUksR0FBR2pCLEtBQUssQ0FBQ21CLENBQUMsQ0FBQztJQUNmRCxHQUFHLEdBQUdELElBQUksQ0FBQ0ksT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUN2QixJQUFJSCxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDZG5CLE1BQU0sQ0FBQ3VCLGtCQUFrQixDQUFDTCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDdkMsQ0FBQyxNQUFNO01BQ0xsQixNQUFNLENBQUN1QixrQkFBa0IsQ0FBQ0wsSUFBSSxDQUFDTSxLQUFLLENBQUMsQ0FBQyxFQUFFTCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdJLGtCQUFrQixDQUNqRUwsSUFBSSxDQUFDTSxLQUFLLENBQUNMLEdBQUcsR0FBRyxDQUFDLENBQ3BCLENBQUM7SUFDSDtFQUNGO0VBRUEsT0FBT25CLE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFSLE9BQU8sQ0FBQ3VCLFdBQVcsR0FBR0EsV0FBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBdkIsT0FBTyxDQUFDaUMsS0FBSyxHQUFHO0VBQ2RDLElBQUksRUFBRSxXQUFXO0VBQ2pCQyxJQUFJLEVBQUUsa0JBQWtCO0VBQ3hCQyxHQUFHLEVBQUUsVUFBVTtFQUNmQyxVQUFVLEVBQUUsbUNBQW1DO0VBQy9DQyxJQUFJLEVBQUUsbUNBQW1DO0VBQ3pDLFdBQVcsRUFBRTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQXRDLE9BQU8sQ0FBQ08sU0FBUyxHQUFHO0VBQ2xCLG1DQUFtQyxFQUFHZ0MsR0FBRyxJQUFLO0lBQzVDLE9BQU92RCxFQUFFLENBQUN3RCxTQUFTLENBQUNELEdBQUcsRUFBRTtNQUFFRSxPQUFPLEVBQUUsS0FBSztNQUFFQyxrQkFBa0IsRUFBRTtJQUFLLENBQUMsQ0FBQztFQUN4RSxDQUFDO0VBQ0Qsa0JBQWtCLEVBQUUzRDtBQUN0QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFpQixPQUFPLENBQUMyQyxLQUFLLEdBQUc7RUFDZCxtQ0FBbUMsRUFBRXBCLFdBQVc7RUFDaEQsa0JBQWtCLEVBQUVxQixJQUFJLENBQUNEO0FBQzNCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTRSxXQUFXQSxDQUFDckIsT0FBTyxFQUFFO0VBQzVCLE1BQU1zQixLQUFLLEdBQUd0QixPQUFPLENBQUNDLEtBQUssQ0FBQyxPQUFPLENBQUM7RUFDcEMsTUFBTXNCLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDakIsSUFBSUMsS0FBSztFQUNULElBQUlDLElBQUk7RUFDUixJQUFJQyxLQUFLO0VBQ1QsSUFBSXJDLEtBQUs7RUFFVCxLQUFLLElBQUllLENBQUMsR0FBRyxDQUFDLEVBQUVDLE9BQU8sR0FBR2lCLEtBQUssQ0FBQy9DLE1BQU0sRUFBRTZCLENBQUMsR0FBR0MsT0FBTyxFQUFFLEVBQUVELENBQUMsRUFBRTtJQUN4RHFCLElBQUksR0FBR0gsS0FBSyxDQUFDbEIsQ0FBQyxDQUFDO0lBQ2ZvQixLQUFLLEdBQUdDLElBQUksQ0FBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDekIsSUFBSWtCLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtNQUNoQjtNQUNBO0lBQ0Y7SUFFQUUsS0FBSyxHQUFHRCxJQUFJLENBQUNqQixLQUFLLENBQUMsQ0FBQyxFQUFFZ0IsS0FBSyxDQUFDLENBQUNHLFdBQVcsQ0FBQyxDQUFDO0lBQzFDdEMsS0FBSyxHQUFHVCxJQUFJLENBQUM2QyxJQUFJLENBQUNqQixLQUFLLENBQUNnQixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkNELE1BQU0sQ0FBQ0csS0FBSyxDQUFDLEdBQUdyQyxLQUFLO0VBQ3ZCO0VBRUEsT0FBT2tDLE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTSyxNQUFNQSxDQUFDQyxJQUFJLEVBQUU7RUFDcEI7RUFDQTtFQUNBLE9BQU8scUJBQXFCLENBQUNDLElBQUksQ0FBQ0QsSUFBSSxDQUFDO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTRSxRQUFRQSxDQUFDQyxRQUFRLEVBQUU7RUFDMUIsSUFBSSxDQUFDQyxHQUFHLEdBQUdELFFBQVE7RUFDbkIsSUFBSSxDQUFDRSxHQUFHLEdBQUcsSUFBSSxDQUFDRCxHQUFHLENBQUNDLEdBQUc7RUFDdkI7RUFDQSxJQUFJLENBQUNDLElBQUksR0FDTixJQUFJLENBQUNGLEdBQUcsQ0FBQy9ELE1BQU0sS0FBSyxNQUFNLEtBQ3hCLElBQUksQ0FBQ2dFLEdBQUcsQ0FBQ0UsWUFBWSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUNGLEdBQUcsQ0FBQ0UsWUFBWSxLQUFLLE1BQU0sQ0FBQyxJQUNwRSxPQUFPLElBQUksQ0FBQ0YsR0FBRyxDQUFDRSxZQUFZLEtBQUssV0FBVyxHQUN4QyxJQUFJLENBQUNGLEdBQUcsQ0FBQ0csWUFBWSxHQUNyQixJQUFJO0VBQ1YsSUFBSSxDQUFDQyxVQUFVLEdBQUcsSUFBSSxDQUFDTCxHQUFHLENBQUNDLEdBQUcsQ0FBQ0ksVUFBVTtFQUN6QyxJQUFJO0lBQUVDO0VBQU8sQ0FBQyxHQUFHLElBQUksQ0FBQ0wsR0FBRztFQUN6QjtFQUNBLElBQUlLLE1BQU0sS0FBSyxJQUFJLEVBQUU7SUFDbkJBLE1BQU0sR0FBRyxHQUFHO0VBQ2Q7RUFFQSxJQUFJLENBQUNDLG9CQUFvQixDQUFDRCxNQUFNLENBQUM7RUFDakMsSUFBSSxDQUFDRSxPQUFPLEdBQUdwQixXQUFXLENBQUMsSUFBSSxDQUFDYSxHQUFHLENBQUNRLHFCQUFxQixDQUFDLENBQUMsQ0FBQztFQUM1RCxJQUFJLENBQUNDLE1BQU0sR0FBRyxJQUFJLENBQUNGLE9BQU87RUFDMUI7RUFDQTtFQUNBO0VBQ0EsSUFBSSxDQUFDRSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDVCxHQUFHLENBQUNVLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztFQUN4RSxJQUFJLENBQUNDLG9CQUFvQixDQUFDLElBQUksQ0FBQ0YsTUFBTSxDQUFDO0VBRXRDLElBQUksSUFBSSxDQUFDUixJQUFJLEtBQUssSUFBSSxJQUFJSCxRQUFRLENBQUNjLGFBQWEsRUFBRTtJQUNoRCxJQUFJLENBQUNDLElBQUksR0FBRyxJQUFJLENBQUNiLEdBQUcsQ0FBQ2MsUUFBUTtFQUMvQixDQUFDLE1BQU07SUFDTCxJQUFJLENBQUNELElBQUksR0FDUCxJQUFJLENBQUNkLEdBQUcsQ0FBQy9ELE1BQU0sS0FBSyxNQUFNLEdBQ3RCLElBQUksR0FDSixJQUFJLENBQUMrRSxVQUFVLENBQUMsSUFBSSxDQUFDZCxJQUFJLEdBQUcsSUFBSSxDQUFDQSxJQUFJLEdBQUcsSUFBSSxDQUFDRCxHQUFHLENBQUNjLFFBQVEsQ0FBQztFQUNsRTtBQUNGO0FBRUFyRixLQUFLLENBQUNvRSxRQUFRLENBQUNtQixTQUFTLEVBQUVyRixZQUFZLENBQUNxRixTQUFTLENBQUM7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBbkIsUUFBUSxDQUFDbUIsU0FBUyxDQUFDRCxVQUFVLEdBQUcsVUFBVWpELE9BQU8sRUFBRTtFQUNqRCxJQUFJbUIsS0FBSyxHQUFHM0MsT0FBTyxDQUFDMkMsS0FBSyxDQUFDLElBQUksQ0FBQ2dDLElBQUksQ0FBQztFQUNwQyxJQUFJLElBQUksQ0FBQ2xCLEdBQUcsQ0FBQ21CLE9BQU8sRUFBRTtJQUNwQixPQUFPLElBQUksQ0FBQ25CLEdBQUcsQ0FBQ21CLE9BQU8sQ0FBQyxJQUFJLEVBQUVwRCxPQUFPLENBQUM7RUFDeEM7RUFFQSxJQUFJLENBQUNtQixLQUFLLElBQUlTLE1BQU0sQ0FBQyxJQUFJLENBQUN1QixJQUFJLENBQUMsRUFBRTtJQUMvQmhDLEtBQUssR0FBRzNDLE9BQU8sQ0FBQzJDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztFQUMzQztFQUVBLE9BQU9BLEtBQUssSUFBSW5CLE9BQU8sS0FBS0EsT0FBTyxDQUFDekIsTUFBTSxHQUFHLENBQUMsSUFBSXlCLE9BQU8sWUFBWXFELE1BQU0sQ0FBQyxHQUN4RWxDLEtBQUssQ0FBQ25CLE9BQU8sQ0FBQyxHQUNkLElBQUk7QUFDVixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQStCLFFBQVEsQ0FBQ21CLFNBQVMsQ0FBQ0ksT0FBTyxHQUFHLFlBQVk7RUFDdkMsTUFBTTtJQUFFckI7RUFBSSxDQUFDLEdBQUcsSUFBSTtFQUNwQixNQUFNO0lBQUUvRDtFQUFPLENBQUMsR0FBRytELEdBQUc7RUFDdEIsTUFBTTtJQUFFOUQ7RUFBSSxDQUFDLEdBQUc4RCxHQUFHO0VBRW5CLE1BQU1zQixPQUFPLEdBQUcsVUFBVXJGLE1BQU0sSUFBSUMsR0FBRyxLQUFLLElBQUksQ0FBQ29FLE1BQU0sR0FBRztFQUMxRCxNQUFNaUIsS0FBSyxHQUFHLElBQUk3RSxLQUFLLENBQUM0RSxPQUFPLENBQUM7RUFDaENDLEtBQUssQ0FBQ2pCLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU07RUFDMUJpQixLQUFLLENBQUN0RixNQUFNLEdBQUdBLE1BQU07RUFDckJzRixLQUFLLENBQUNyRixHQUFHLEdBQUdBLEdBQUc7RUFFZixPQUFPcUYsS0FBSztBQUNkLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBaEYsT0FBTyxDQUFDdUQsUUFBUSxHQUFHQSxRQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTM0QsT0FBT0EsQ0FBQ0YsTUFBTSxFQUFFQyxHQUFHLEVBQUU7RUFDNUIsTUFBTWpCLElBQUksR0FBRyxJQUFJO0VBQ2pCLElBQUksQ0FBQ3VHLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU0sSUFBSSxFQUFFO0VBQy9CLElBQUksQ0FBQ3ZGLE1BQU0sR0FBR0EsTUFBTTtFQUNwQixJQUFJLENBQUNDLEdBQUcsR0FBR0EsR0FBRztFQUNkLElBQUksQ0FBQ3dFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLElBQUksQ0FBQ2UsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsSUFBSSxDQUFDQyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07SUFDbkIsSUFBSUgsS0FBSyxHQUFHLElBQUk7SUFDaEIsSUFBSUksR0FBRyxHQUFHLElBQUk7SUFFZCxJQUFJO01BQ0ZBLEdBQUcsR0FBRyxJQUFJN0IsUUFBUSxDQUFDN0UsSUFBSSxDQUFDO0lBQzFCLENBQUMsQ0FBQyxPQUFPMkcsR0FBRyxFQUFFO01BQ1pMLEtBQUssR0FBRyxJQUFJN0UsS0FBSyxDQUFDLHdDQUF3QyxDQUFDO01BQzNENkUsS0FBSyxDQUFDckMsS0FBSyxHQUFHLElBQUk7TUFDbEJxQyxLQUFLLENBQUNNLFFBQVEsR0FBR0QsR0FBRztNQUNwQjtNQUNBLElBQUkzRyxJQUFJLENBQUNnRixHQUFHLEVBQUU7UUFDWjtRQUNBc0IsS0FBSyxDQUFDTyxXQUFXLEdBQ2YsT0FBTzdHLElBQUksQ0FBQ2dGLEdBQUcsQ0FBQ0UsWUFBWSxLQUFLLFdBQVcsR0FDeENsRixJQUFJLENBQUNnRixHQUFHLENBQUNHLFlBQVksR0FDckJuRixJQUFJLENBQUNnRixHQUFHLENBQUNjLFFBQVE7UUFDdkI7UUFDQVEsS0FBSyxDQUFDakIsTUFBTSxHQUFHckYsSUFBSSxDQUFDZ0YsR0FBRyxDQUFDSyxNQUFNLEdBQUdyRixJQUFJLENBQUNnRixHQUFHLENBQUNLLE1BQU0sR0FBRyxJQUFJO1FBQ3ZEaUIsS0FBSyxDQUFDUSxVQUFVLEdBQUdSLEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQyxDQUFDO01BQ25DLENBQUMsTUFBTTtRQUNMaUIsS0FBSyxDQUFDTyxXQUFXLEdBQUcsSUFBSTtRQUN4QlAsS0FBSyxDQUFDakIsTUFBTSxHQUFHLElBQUk7TUFDckI7TUFFQSxPQUFPckYsSUFBSSxDQUFDK0csUUFBUSxDQUFDVCxLQUFLLENBQUM7SUFDN0I7SUFFQXRHLElBQUksQ0FBQ2dILElBQUksQ0FBQyxVQUFVLEVBQUVOLEdBQUcsQ0FBQztJQUUxQixJQUFJTyxTQUFTO0lBQ2IsSUFBSTtNQUNGLElBQUksQ0FBQ2pILElBQUksQ0FBQ2tILGFBQWEsQ0FBQ1IsR0FBRyxDQUFDLEVBQUU7UUFDNUJPLFNBQVMsR0FBRyxJQUFJeEYsS0FBSyxDQUNuQmlGLEdBQUcsQ0FBQ3RCLFVBQVUsSUFBSXNCLEdBQUcsQ0FBQ3pCLElBQUksSUFBSSw0QkFDaEMsQ0FBQztNQUNIO0lBQ0YsQ0FBQyxDQUFDLE9BQU8wQixHQUFHLEVBQUU7TUFDWk0sU0FBUyxHQUFHTixHQUFHLENBQUMsQ0FBQztJQUNuQjs7SUFFQTtJQUNBLElBQUlNLFNBQVMsRUFBRTtNQUNiQSxTQUFTLENBQUNMLFFBQVEsR0FBR04sS0FBSztNQUMxQlcsU0FBUyxDQUFDbkIsUUFBUSxHQUFHWSxHQUFHO01BQ3hCTyxTQUFTLENBQUM1QixNQUFNLEdBQUc0QixTQUFTLENBQUM1QixNQUFNLElBQUlxQixHQUFHLENBQUNyQixNQUFNO01BQ2pEckYsSUFBSSxDQUFDK0csUUFBUSxDQUFDRSxTQUFTLEVBQUVQLEdBQUcsQ0FBQztJQUMvQixDQUFDLE1BQU07TUFDTDFHLElBQUksQ0FBQytHLFFBQVEsQ0FBQyxJQUFJLEVBQUVMLEdBQUcsQ0FBQztJQUMxQjtFQUNGLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBdkcsT0FBTyxDQUFDZSxPQUFPLENBQUM4RSxTQUFTLENBQUM7QUFFMUJ2RixLQUFLLENBQUNTLE9BQU8sQ0FBQzhFLFNBQVMsRUFBRXpGLFdBQVcsQ0FBQ3lGLFNBQVMsQ0FBQzs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOUUsT0FBTyxDQUFDOEUsU0FBUyxDQUFDQyxJQUFJLEdBQUcsVUFBVUEsSUFBSSxFQUFFO0VBQ3ZDLElBQUksQ0FBQ2tCLEdBQUcsQ0FBQyxjQUFjLEVBQUU3RixPQUFPLENBQUNpQyxLQUFLLENBQUMwQyxJQUFJLENBQUMsSUFBSUEsSUFBSSxDQUFDO0VBQ3JELE9BQU8sSUFBSTtBQUNiLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEvRSxPQUFPLENBQUM4RSxTQUFTLENBQUNvQixNQUFNLEdBQUcsVUFBVW5CLElBQUksRUFBRTtFQUN6QyxJQUFJLENBQUNrQixHQUFHLENBQUMsUUFBUSxFQUFFN0YsT0FBTyxDQUFDaUMsS0FBSyxDQUFDMEMsSUFBSSxDQUFDLElBQUlBLElBQUksQ0FBQztFQUMvQyxPQUFPLElBQUk7QUFDYixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQS9FLE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQ3FCLElBQUksR0FBRyxVQUFVQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFO0VBQ3RELElBQUlwRyxTQUFTLENBQUNDLE1BQU0sS0FBSyxDQUFDLEVBQUVrRyxJQUFJLEdBQUcsRUFBRTtFQUNyQyxJQUFJLE9BQU9BLElBQUksS0FBSyxRQUFRLElBQUlBLElBQUksS0FBSyxJQUFJLEVBQUU7SUFDN0M7SUFDQUMsT0FBTyxHQUFHRCxJQUFJO0lBQ2RBLElBQUksR0FBRyxFQUFFO0VBQ1g7RUFFQSxJQUFJLENBQUNDLE9BQU8sRUFBRTtJQUNaQSxPQUFPLEdBQUc7TUFDUnZCLElBQUksRUFBRSxPQUFPd0IsSUFBSSxLQUFLLFVBQVUsR0FBRyxPQUFPLEdBQUc7SUFDL0MsQ0FBQztFQUNIO0VBRUEsTUFBTUMsT0FBTyxHQUFHRixPQUFPLENBQUNFLE9BQU8sR0FDM0JGLE9BQU8sQ0FBQ0UsT0FBTyxHQUNkQyxNQUFNLElBQUs7SUFDVixJQUFJLE9BQU9GLElBQUksS0FBSyxVQUFVLEVBQUU7TUFDOUIsT0FBT0EsSUFBSSxDQUFDRSxNQUFNLENBQUM7SUFDckI7SUFFQSxNQUFNLElBQUlsRyxLQUFLLENBQUMsK0NBQStDLENBQUM7RUFDbEUsQ0FBQztFQUVMLE9BQU8sSUFBSSxDQUFDbUcsS0FBSyxDQUFDTixJQUFJLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFRSxPQUFPLENBQUM7QUFDakQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQXhHLE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQzZCLEtBQUssR0FBRyxVQUFVMUYsS0FBSyxFQUFFO0VBQ3pDLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRUEsS0FBSyxHQUFHTixTQUFTLENBQUNNLEtBQUssQ0FBQztFQUN2RCxJQUFJQSxLQUFLLEVBQUUsSUFBSSxDQUFDb0UsTUFBTSxDQUFDbEUsSUFBSSxDQUFDRixLQUFLLENBQUM7RUFDbEMsT0FBTyxJQUFJO0FBQ2IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQWpCLE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQzhCLE1BQU0sR0FBRyxVQUFVdEQsS0FBSyxFQUFFdUQsSUFBSSxFQUFFUCxPQUFPLEVBQUU7RUFDekQsSUFBSU8sSUFBSSxFQUFFO0lBQ1IsSUFBSSxJQUFJLENBQUNDLEtBQUssRUFBRTtNQUNkLE1BQU0sSUFBSXZHLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQztJQUMvRDtJQUVBLElBQUksQ0FBQ3dHLFlBQVksQ0FBQyxDQUFDLENBQUNDLE1BQU0sQ0FBQzFELEtBQUssRUFBRXVELElBQUksRUFBRVAsT0FBTyxJQUFJTyxJQUFJLENBQUNJLElBQUksQ0FBQztFQUMvRDtFQUVBLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRGpILE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQ2lDLFlBQVksR0FBRyxZQUFZO0VBQzNDLElBQUksQ0FBQyxJQUFJLENBQUNHLFNBQVMsRUFBRTtJQUNuQixJQUFJLENBQUNBLFNBQVMsR0FBRyxJQUFJdEksSUFBSSxDQUFDdUksUUFBUSxDQUFDLENBQUM7RUFDdEM7RUFFQSxPQUFPLElBQUksQ0FBQ0QsU0FBUztBQUN2QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFsSCxPQUFPLENBQUM4RSxTQUFTLENBQUNlLFFBQVEsR0FBRyxVQUFVVCxLQUFLLEVBQUVJLEdBQUcsRUFBRTtFQUNqRCxJQUFJLElBQUksQ0FBQzRCLFlBQVksQ0FBQ2hDLEtBQUssRUFBRUksR0FBRyxDQUFDLEVBQUU7SUFDakMsT0FBTyxJQUFJLENBQUM2QixNQUFNLENBQUMsQ0FBQztFQUN0QjtFQUVBLE1BQU1DLEVBQUUsR0FBRyxJQUFJLENBQUNDLFNBQVM7RUFDekIsSUFBSSxDQUFDQyxZQUFZLENBQUMsQ0FBQztFQUVuQixJQUFJcEMsS0FBSyxFQUFFO0lBQ1QsSUFBSSxJQUFJLENBQUNxQyxXQUFXLEVBQUVyQyxLQUFLLENBQUNzQyxPQUFPLEdBQUcsSUFBSSxDQUFDQyxRQUFRLEdBQUcsQ0FBQztJQUN2RCxJQUFJLENBQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFVixLQUFLLENBQUM7RUFDM0I7RUFFQWtDLEVBQUUsQ0FBQ2xDLEtBQUssRUFBRUksR0FBRyxDQUFDO0FBQ2hCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQXhGLE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQzhDLGdCQUFnQixHQUFHLFlBQVk7RUFDL0MsTUFBTXhDLEtBQUssR0FBRyxJQUFJN0UsS0FBSyxDQUNyQiw4SkFDRixDQUFDO0VBQ0Q2RSxLQUFLLENBQUN5QyxXQUFXLEdBQUcsSUFBSTtFQUV4QnpDLEtBQUssQ0FBQ2pCLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU07RUFDMUJpQixLQUFLLENBQUN0RixNQUFNLEdBQUcsSUFBSSxDQUFDQSxNQUFNO0VBQzFCc0YsS0FBSyxDQUFDckYsR0FBRyxHQUFHLElBQUksQ0FBQ0EsR0FBRztFQUVwQixJQUFJLENBQUM4RixRQUFRLENBQUNULEtBQUssQ0FBQztBQUN0QixDQUFDOztBQUVEO0FBQ0FwRixPQUFPLENBQUM4RSxTQUFTLENBQUNnRCxLQUFLLEdBQUcsWUFBWTtFQUNwQy9JLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHdEQUF3RCxDQUFDO0VBQ3RFLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRGdCLE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQ2lELEVBQUUsR0FBRy9ILE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQ2dELEtBQUs7QUFDOUM5SCxPQUFPLENBQUM4RSxTQUFTLENBQUNrRCxNQUFNLEdBQUdoSSxPQUFPLENBQUM4RSxTQUFTLENBQUNpRCxFQUFFOztBQUUvQztBQUNBL0gsT0FBTyxDQUFDOEUsU0FBUyxDQUFDbUQsS0FBSyxHQUFHLE1BQU07RUFDOUIsTUFBTSxJQUFJMUgsS0FBSyxDQUNiLDZEQUNGLENBQUM7QUFDSCxDQUFDO0FBRURQLE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQ29ELElBQUksR0FBR2xJLE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQ21ELEtBQUs7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQWpJLE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQ3FELE9BQU8sR0FBRyxVQUFVdkgsTUFBTSxFQUFFO0VBQzVDO0VBQ0EsT0FDRUEsTUFBTSxJQUNOLE9BQU9BLE1BQU0sS0FBSyxRQUFRLElBQzFCLENBQUNTLEtBQUssQ0FBQ0MsT0FBTyxDQUFDVixNQUFNLENBQUMsSUFDdEJxRSxNQUFNLENBQUNILFNBQVMsQ0FBQ3NELFFBQVEsQ0FBQ0MsSUFBSSxDQUFDekgsTUFBTSxDQUFDLEtBQUssaUJBQWlCO0FBRWhFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQVosT0FBTyxDQUFDOEUsU0FBUyxDQUFDN0UsR0FBRyxHQUFHLFVBQVVxSCxFQUFFLEVBQUU7RUFDcEMsSUFBSSxJQUFJLENBQUNnQixVQUFVLEVBQUU7SUFDbkJ2SixPQUFPLENBQUNDLElBQUksQ0FDVix1RUFDRixDQUFDO0VBQ0g7RUFFQSxJQUFJLENBQUNzSixVQUFVLEdBQUcsSUFBSTs7RUFFdEI7RUFDQSxJQUFJLENBQUNmLFNBQVMsR0FBR0QsRUFBRSxJQUFJM0gsSUFBSTs7RUFFM0I7RUFDQSxJQUFJLENBQUM0SSxvQkFBb0IsQ0FBQyxDQUFDO0VBRTNCLElBQUksQ0FBQ0MsSUFBSSxDQUFDLENBQUM7QUFDYixDQUFDO0FBRUR4SSxPQUFPLENBQUM4RSxTQUFTLENBQUMyRCxpQkFBaUIsR0FBRyxZQUFZO0VBQ2hELE1BQU0zSixJQUFJLEdBQUcsSUFBSTs7RUFFakI7RUFDQSxJQUFJLElBQUksQ0FBQzRKLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQ0MsbUJBQW1CLEVBQUU7SUFDcEQsSUFBSSxDQUFDQSxtQkFBbUIsR0FBR0MsVUFBVSxDQUFDLE1BQU07TUFDMUM5SixJQUFJLENBQUMrSixhQUFhLENBQ2hCLG9CQUFvQixFQUNwQi9KLElBQUksQ0FBQzRKLGNBQWMsRUFDbkIsV0FDRixDQUFDO0lBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQ0EsY0FBYyxDQUFDO0VBQ3pCO0FBQ0YsQ0FBQzs7QUFFRDtBQUNBMUksT0FBTyxDQUFDOEUsU0FBUyxDQUFDMEQsSUFBSSxHQUFHLFlBQVk7RUFDbkMsSUFBSSxJQUFJLENBQUNNLFFBQVEsRUFDZixPQUFPLElBQUksQ0FBQ2pELFFBQVEsQ0FDbEIsSUFBSXRGLEtBQUssQ0FBQyw0REFBNEQsQ0FDeEUsQ0FBQztFQUVILE1BQU16QixJQUFJLEdBQUcsSUFBSTtFQUNqQixJQUFJLENBQUNnRixHQUFHLEdBQUcxRCxPQUFPLENBQUNDLE1BQU0sQ0FBQyxDQUFDO0VBQzNCLE1BQU07SUFBRXlEO0VBQUksQ0FBQyxHQUFHLElBQUk7RUFDcEIsSUFBSWlGLElBQUksR0FBRyxJQUFJLENBQUM3QixTQUFTLElBQUksSUFBSSxDQUFDSixLQUFLO0VBRXZDLElBQUksQ0FBQ2tDLFlBQVksQ0FBQyxDQUFDOztFQUVuQjtFQUNBbEYsR0FBRyxDQUFDbUYsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsTUFBTTtJQUM3QyxNQUFNO01BQUVDO0lBQVcsQ0FBQyxHQUFHcEYsR0FBRztJQUMxQixJQUFJb0YsVUFBVSxJQUFJLENBQUMsSUFBSXBLLElBQUksQ0FBQ3FLLHFCQUFxQixFQUFFO01BQ2pEM0IsWUFBWSxDQUFDMUksSUFBSSxDQUFDcUsscUJBQXFCLENBQUM7SUFDMUM7SUFFQSxJQUFJRCxVQUFVLEtBQUssQ0FBQyxFQUFFO01BQ3BCO0lBQ0Y7O0lBRUE7SUFDQTtJQUNBLElBQUkvRSxNQUFNO0lBQ1YsSUFBSTtNQUNGQSxNQUFNLEdBQUdMLEdBQUcsQ0FBQ0ssTUFBTTtJQUNyQixDQUFDLENBQUMsT0FBT3NCLEdBQUcsRUFBRTtNQUNadEIsTUFBTSxHQUFHLENBQUM7SUFDWjtJQUVBLElBQUksQ0FBQ0EsTUFBTSxFQUFFO01BQ1gsSUFBSXJGLElBQUksQ0FBQ3NLLFFBQVEsSUFBSXRLLElBQUksQ0FBQ2dLLFFBQVEsRUFBRTtNQUNwQyxPQUFPaEssSUFBSSxDQUFDOEksZ0JBQWdCLENBQUMsQ0FBQztJQUNoQztJQUVBOUksSUFBSSxDQUFDZ0gsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNsQixDQUFDLENBQUM7O0VBRUY7RUFDQSxNQUFNdUQsY0FBYyxHQUFHQSxDQUFDQyxTQUFTLEVBQUVDLENBQUMsS0FBSztJQUN2QyxJQUFJQSxDQUFDLENBQUNDLEtBQUssR0FBRyxDQUFDLEVBQUU7TUFDZkQsQ0FBQyxDQUFDRSxPQUFPLEdBQUlGLENBQUMsQ0FBQ0csTUFBTSxHQUFHSCxDQUFDLENBQUNDLEtBQUssR0FBSSxHQUFHO01BRXRDLElBQUlELENBQUMsQ0FBQ0UsT0FBTyxLQUFLLEdBQUcsRUFBRTtRQUNyQmpDLFlBQVksQ0FBQzFJLElBQUksQ0FBQzZKLG1CQUFtQixDQUFDO01BQ3hDO0lBQ0Y7SUFFQVksQ0FBQyxDQUFDRCxTQUFTLEdBQUdBLFNBQVM7SUFDdkJ4SyxJQUFJLENBQUNnSCxJQUFJLENBQUMsVUFBVSxFQUFFeUQsQ0FBQyxDQUFDO0VBQzFCLENBQUM7RUFFRCxJQUFJLElBQUksQ0FBQ0ksWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ2pDLElBQUk7TUFDRjdGLEdBQUcsQ0FBQ21GLGdCQUFnQixDQUFDLFVBQVUsRUFBRUksY0FBYyxDQUFDTyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ3ZFLElBQUk5RixHQUFHLENBQUMrRixNQUFNLEVBQUU7UUFDZC9GLEdBQUcsQ0FBQytGLE1BQU0sQ0FBQ1osZ0JBQWdCLENBQ3pCLFVBQVUsRUFDVkksY0FBYyxDQUFDTyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FDcEMsQ0FBQztNQUNIO0lBQ0YsQ0FBQyxDQUFDLE9BQU9uRSxHQUFHLEVBQUU7TUFDWjtNQUNBO01BQ0E7SUFBQTtFQUVKO0VBRUEsSUFBSTNCLEdBQUcsQ0FBQytGLE1BQU0sRUFBRTtJQUNkLElBQUksQ0FBQ3BCLGlCQUFpQixDQUFDLENBQUM7RUFDMUI7O0VBRUE7RUFDQSxJQUFJO0lBQ0YsSUFBSSxJQUFJLENBQUNxQixRQUFRLElBQUksSUFBSSxDQUFDQyxRQUFRLEVBQUU7TUFDbENqRyxHQUFHLENBQUNrRyxJQUFJLENBQUMsSUFBSSxDQUFDbEssTUFBTSxFQUFFLElBQUksQ0FBQ0MsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMrSixRQUFRLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUM7SUFDckUsQ0FBQyxNQUFNO01BQ0xqRyxHQUFHLENBQUNrRyxJQUFJLENBQUMsSUFBSSxDQUFDbEssTUFBTSxFQUFFLElBQUksQ0FBQ0MsR0FBRyxFQUFFLElBQUksQ0FBQztJQUN2QztFQUNGLENBQUMsQ0FBQyxPQUFPMEYsR0FBRyxFQUFFO0lBQ1o7SUFDQSxPQUFPLElBQUksQ0FBQ0ksUUFBUSxDQUFDSixHQUFHLENBQUM7RUFDM0I7O0VBRUE7RUFDQSxJQUFJLElBQUksQ0FBQ3dFLGdCQUFnQixFQUFFbkcsR0FBRyxDQUFDb0csZUFBZSxHQUFHLElBQUk7O0VBRXJEO0VBQ0EsSUFDRSxDQUFDLElBQUksQ0FBQ2hELFNBQVMsSUFDZixJQUFJLENBQUNwSCxNQUFNLEtBQUssS0FBSyxJQUNyQixJQUFJLENBQUNBLE1BQU0sS0FBSyxNQUFNLElBQ3RCLE9BQU9pSixJQUFJLEtBQUssUUFBUSxJQUN4QixDQUFDLElBQUksQ0FBQ1osT0FBTyxDQUFDWSxJQUFJLENBQUMsRUFDbkI7SUFDQTtJQUNBLE1BQU1vQixXQUFXLEdBQUcsSUFBSSxDQUFDN0UsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUNoRCxJQUFJM0UsU0FBUyxHQUNYLElBQUksQ0FBQ3lKLFdBQVcsSUFDaEJoSyxPQUFPLENBQUNPLFNBQVMsQ0FBQ3dKLFdBQVcsR0FBR0EsV0FBVyxDQUFDdEksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqRSxJQUFJLENBQUNsQixTQUFTLElBQUk2QyxNQUFNLENBQUMyRyxXQUFXLENBQUMsRUFBRTtNQUNyQ3hKLFNBQVMsR0FBR1AsT0FBTyxDQUFDTyxTQUFTLENBQUMsa0JBQWtCLENBQUM7SUFDbkQ7SUFFQSxJQUFJQSxTQUFTLEVBQUVvSSxJQUFJLEdBQUdwSSxTQUFTLENBQUNvSSxJQUFJLENBQUM7RUFDdkM7O0VBRUE7RUFDQSxLQUFLLE1BQU16RixLQUFLLElBQUksSUFBSSxDQUFDaUIsTUFBTSxFQUFFO0lBQy9CLElBQUksSUFBSSxDQUFDQSxNQUFNLENBQUNqQixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFFakMsSUFBSTlELE1BQU0sQ0FBQyxJQUFJLENBQUMrRSxNQUFNLEVBQUVqQixLQUFLLENBQUMsRUFDNUJRLEdBQUcsQ0FBQ3VHLGdCQUFnQixDQUFDL0csS0FBSyxFQUFFLElBQUksQ0FBQ2lCLE1BQU0sQ0FBQ2pCLEtBQUssQ0FBQyxDQUFDO0VBQ25EO0VBRUEsSUFBSSxJQUFJLENBQUNvQixhQUFhLEVBQUU7SUFDdEJaLEdBQUcsQ0FBQ0UsWUFBWSxHQUFHLElBQUksQ0FBQ1UsYUFBYTtFQUN2Qzs7RUFFQTtFQUNBLElBQUksQ0FBQ29CLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDOztFQUUxQjtFQUNBO0VBQ0FoQyxHQUFHLENBQUN3RyxJQUFJLENBQUMsT0FBT3ZCLElBQUksS0FBSyxXQUFXLEdBQUcsSUFBSSxHQUFHQSxJQUFJLENBQUM7QUFDckQsQ0FBQztBQUVEM0ksT0FBTyxDQUFDMEgsS0FBSyxHQUFHLE1BQU0sSUFBSXBJLEtBQUssQ0FBQyxDQUFDO0FBRWpDLEtBQUssTUFBTUksTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtFQUN6RUosS0FBSyxDQUFDb0YsU0FBUyxDQUFDaEYsTUFBTSxDQUFDeUQsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVV4RCxHQUFHLEVBQUV1SCxFQUFFLEVBQUU7SUFDekQsTUFBTTFELFFBQVEsR0FBRyxJQUFJeEQsT0FBTyxDQUFDSixPQUFPLENBQUNGLE1BQU0sRUFBRUMsR0FBRyxDQUFDO0lBQ2pELElBQUksQ0FBQ3dLLFlBQVksQ0FBQzNHLFFBQVEsQ0FBQztJQUMzQixJQUFJMEQsRUFBRSxFQUFFO01BQ04xRCxRQUFRLENBQUMzRCxHQUFHLENBQUNxSCxFQUFFLENBQUM7SUFDbEI7SUFFQSxPQUFPMUQsUUFBUTtFQUNqQixDQUFDO0FBQ0g7QUFFQWxFLEtBQUssQ0FBQ29GLFNBQVMsQ0FBQzBGLEdBQUcsR0FBRzlLLEtBQUssQ0FBQ29GLFNBQVMsQ0FBQzJGLE1BQU07O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQXJLLE9BQU8sQ0FBQ3NLLEdBQUcsR0FBRyxDQUFDM0ssR0FBRyxFQUFFZ0osSUFBSSxFQUFFekIsRUFBRSxLQUFLO0VBQy9CLE1BQU0xRCxRQUFRLEdBQUd4RCxPQUFPLENBQUMsS0FBSyxFQUFFTCxHQUFHLENBQUM7RUFDcEMsSUFBSSxPQUFPZ0osSUFBSSxLQUFLLFVBQVUsRUFBRTtJQUM5QnpCLEVBQUUsR0FBR3lCLElBQUk7SUFDVEEsSUFBSSxHQUFHLElBQUk7RUFDYjtFQUVBLElBQUlBLElBQUksRUFBRW5GLFFBQVEsQ0FBQytDLEtBQUssQ0FBQ29DLElBQUksQ0FBQztFQUM5QixJQUFJekIsRUFBRSxFQUFFMUQsUUFBUSxDQUFDM0QsR0FBRyxDQUFDcUgsRUFBRSxDQUFDO0VBQ3hCLE9BQU8xRCxRQUFRO0FBQ2pCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBeEQsT0FBTyxDQUFDdUssSUFBSSxHQUFHLENBQUM1SyxHQUFHLEVBQUVnSixJQUFJLEVBQUV6QixFQUFFLEtBQUs7RUFDaEMsTUFBTTFELFFBQVEsR0FBR3hELE9BQU8sQ0FBQyxNQUFNLEVBQUVMLEdBQUcsQ0FBQztFQUNyQyxJQUFJLE9BQU9nSixJQUFJLEtBQUssVUFBVSxFQUFFO0lBQzlCekIsRUFBRSxHQUFHeUIsSUFBSTtJQUNUQSxJQUFJLEdBQUcsSUFBSTtFQUNiO0VBRUEsSUFBSUEsSUFBSSxFQUFFbkYsUUFBUSxDQUFDK0MsS0FBSyxDQUFDb0MsSUFBSSxDQUFDO0VBQzlCLElBQUl6QixFQUFFLEVBQUUxRCxRQUFRLENBQUMzRCxHQUFHLENBQUNxSCxFQUFFLENBQUM7RUFDeEIsT0FBTzFELFFBQVE7QUFDakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUF4RCxPQUFPLENBQUNrRyxPQUFPLEdBQUcsQ0FBQ3ZHLEdBQUcsRUFBRWdKLElBQUksRUFBRXpCLEVBQUUsS0FBSztFQUNuQyxNQUFNMUQsUUFBUSxHQUFHeEQsT0FBTyxDQUFDLFNBQVMsRUFBRUwsR0FBRyxDQUFDO0VBQ3hDLElBQUksT0FBT2dKLElBQUksS0FBSyxVQUFVLEVBQUU7SUFDOUJ6QixFQUFFLEdBQUd5QixJQUFJO0lBQ1RBLElBQUksR0FBRyxJQUFJO0VBQ2I7RUFFQSxJQUFJQSxJQUFJLEVBQUVuRixRQUFRLENBQUMwRyxJQUFJLENBQUN2QixJQUFJLENBQUM7RUFDN0IsSUFBSXpCLEVBQUUsRUFBRTFELFFBQVEsQ0FBQzNELEdBQUcsQ0FBQ3FILEVBQUUsQ0FBQztFQUN4QixPQUFPMUQsUUFBUTtBQUNqQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTNEcsR0FBR0EsQ0FBQ3pLLEdBQUcsRUFBRWdKLElBQUksRUFBRXpCLEVBQUUsRUFBRTtFQUMxQixNQUFNMUQsUUFBUSxHQUFHeEQsT0FBTyxDQUFDLFFBQVEsRUFBRUwsR0FBRyxDQUFDO0VBQ3ZDLElBQUksT0FBT2dKLElBQUksS0FBSyxVQUFVLEVBQUU7SUFDOUJ6QixFQUFFLEdBQUd5QixJQUFJO0lBQ1RBLElBQUksR0FBRyxJQUFJO0VBQ2I7RUFFQSxJQUFJQSxJQUFJLEVBQUVuRixRQUFRLENBQUMwRyxJQUFJLENBQUN2QixJQUFJLENBQUM7RUFDN0IsSUFBSXpCLEVBQUUsRUFBRTFELFFBQVEsQ0FBQzNELEdBQUcsQ0FBQ3FILEVBQUUsQ0FBQztFQUN4QixPQUFPMUQsUUFBUTtBQUNqQjtBQUVBeEQsT0FBTyxDQUFDb0ssR0FBRyxHQUFHQSxHQUFHO0FBQ2pCcEssT0FBTyxDQUFDcUssTUFBTSxHQUFHRCxHQUFHOztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFwSyxPQUFPLENBQUN3SyxLQUFLLEdBQUcsQ0FBQzdLLEdBQUcsRUFBRWdKLElBQUksRUFBRXpCLEVBQUUsS0FBSztFQUNqQyxNQUFNMUQsUUFBUSxHQUFHeEQsT0FBTyxDQUFDLE9BQU8sRUFBRUwsR0FBRyxDQUFDO0VBQ3RDLElBQUksT0FBT2dKLElBQUksS0FBSyxVQUFVLEVBQUU7SUFDOUJ6QixFQUFFLEdBQUd5QixJQUFJO0lBQ1RBLElBQUksR0FBRyxJQUFJO0VBQ2I7RUFFQSxJQUFJQSxJQUFJLEVBQUVuRixRQUFRLENBQUMwRyxJQUFJLENBQUN2QixJQUFJLENBQUM7RUFDN0IsSUFBSXpCLEVBQUUsRUFBRTFELFFBQVEsQ0FBQzNELEdBQUcsQ0FBQ3FILEVBQUUsQ0FBQztFQUN4QixPQUFPMUQsUUFBUTtBQUNqQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQXhELE9BQU8sQ0FBQ3lLLElBQUksR0FBRyxDQUFDOUssR0FBRyxFQUFFZ0osSUFBSSxFQUFFekIsRUFBRSxLQUFLO0VBQ2hDLE1BQU0xRCxRQUFRLEdBQUd4RCxPQUFPLENBQUMsTUFBTSxFQUFFTCxHQUFHLENBQUM7RUFDckMsSUFBSSxPQUFPZ0osSUFBSSxLQUFLLFVBQVUsRUFBRTtJQUM5QnpCLEVBQUUsR0FBR3lCLElBQUk7SUFDVEEsSUFBSSxHQUFHLElBQUk7RUFDYjtFQUVBLElBQUlBLElBQUksRUFBRW5GLFFBQVEsQ0FBQzBHLElBQUksQ0FBQ3ZCLElBQUksQ0FBQztFQUM3QixJQUFJekIsRUFBRSxFQUFFMUQsUUFBUSxDQUFDM0QsR0FBRyxDQUFDcUgsRUFBRSxDQUFDO0VBQ3hCLE9BQU8xRCxRQUFRO0FBQ2pCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBeEQsT0FBTyxDQUFDMEssR0FBRyxHQUFHLENBQUMvSyxHQUFHLEVBQUVnSixJQUFJLEVBQUV6QixFQUFFLEtBQUs7RUFDL0IsTUFBTTFELFFBQVEsR0FBR3hELE9BQU8sQ0FBQyxLQUFLLEVBQUVMLEdBQUcsQ0FBQztFQUNwQyxJQUFJLE9BQU9nSixJQUFJLEtBQUssVUFBVSxFQUFFO0lBQzlCekIsRUFBRSxHQUFHeUIsSUFBSTtJQUNUQSxJQUFJLEdBQUcsSUFBSTtFQUNiO0VBRUEsSUFBSUEsSUFBSSxFQUFFbkYsUUFBUSxDQUFDMEcsSUFBSSxDQUFDdkIsSUFBSSxDQUFDO0VBQzdCLElBQUl6QixFQUFFLEVBQUUxRCxRQUFRLENBQUMzRCxHQUFHLENBQUNxSCxFQUFFLENBQUM7RUFDeEIsT0FBTzFELFFBQVE7QUFDakIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {(thisArg: Map, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {(thisArg: Map, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {(thisArg: Map, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {(thisArg: Map, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {(thisArg: Map) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude} */ function getSideChannelMap() {\n\t/** @typedef {ReturnType} Channel */\n\t/** @typedef {Parameters[0]} K */\n\t/** @typedef {Parameters[1]} V */\n\n\t/** @type {Map | undefined} */ var $m;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tif ($m) {\n\t\t\t\tvar result = $mapDelete($m, key);\n\t\t\t\tif ($mapSize($m) === 0) {\n\t\t\t\t\t$m = void undefined;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($m) {\n\t\t\t\treturn $mapGet($m, key);\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($m) {\n\t\t\t\treturn $mapHas($m, key);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$m) {\n\t\t\t\t// @ts-expect-error TS can't handle narrowing a variable inside a closure\n\t\t\t\t$m = new $Map();\n\t\t\t}\n\t\t\t$mapSet($m, key, value);\n\t\t}\n\t};\n\n\t// @ts-expect-error TODO: figure out why TS is erroring here\n\treturn channel;\n};\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n","'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n","'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n","'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {import('.')} */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n","'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t// eslint-disable-next-line no-extra-parens\n\tvar intrinsic = /** @type {Parameters[0][0]} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic([intrinsic]);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? { __proto__: null } : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object' && typeof source !== 'function') {\n if (isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if (\n (options && (options.plainObjects || options.allowPrototypes))\n || !has.call(Object.prototype, source)\n ) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, defaultDecoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var j = 0; j < string.length; j += limit) {\n var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n var arr = [];\n\n for (var i = 0; i < segment.length; ++i) {\n var c = segment.charCodeAt(i);\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n arr[arr.length] = hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n arr[arr.length] = hexTable[0xC0 | (c >> 6)]\n + hexTable[0x80 | (c & 0x3F)];\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n arr[arr.length] = hexTable[0xE0 | (c >> 12)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));\n\n arr[arr.length] = hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n out += arr.join('');\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n maybeMap: maybeMap,\n merge: merge\n};\n","\n/**\n * Expose `Emitter`.\n */\n\nif (typeof module !== 'undefined') {\n module.exports = Emitter;\n}\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","module.exports = stringify\nstringify.default = stringify\nstringify.stable = deterministicStringify\nstringify.stableStringify = deterministicStringify\n\nvar LIMIT_REPLACE_NODE = '[...]'\nvar CIRCULAR_REPLACE_NODE = '[Circular]'\n\nvar arr = []\nvar replacerStack = []\n\nfunction defaultOptions () {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER\n }\n}\n\n// Regular stringify\nfunction stringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n decirc(obj, '', 0, [], undefined, 0, options)\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(obj, replacer, spacer)\n } else {\n res = JSON.stringify(obj, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction setReplace (replace, val, k, parent) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k)\n if (propertyDescriptor.get !== undefined) {\n if (propertyDescriptor.configurable) {\n Object.defineProperty(parent, k, { value: replace })\n arr.push([parent, k, val, propertyDescriptor])\n } else {\n replacerStack.push([val, k, replace])\n }\n } else {\n parent[k] = replace\n arr.push([parent, k, val])\n }\n}\n\nfunction decirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n decirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n var keys = Object.keys(val)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n decirc(val[key], key, i, stack, val, depth, options)\n }\n }\n stack.pop()\n }\n}\n\n// Stable-stringify\nfunction compareFunction (a, b) {\n if (a < b) {\n return -1\n }\n if (a > b) {\n return 1\n }\n return 0\n}\n\nfunction deterministicStringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(tmp, replacer, spacer)\n } else {\n res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n // Ensure that we restore the object as it was.\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction deterministicDecirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n try {\n if (typeof val.toJSON === 'function') {\n return\n }\n } catch (_) {\n return\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n deterministicDecirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n // Create a temporary object in the required way\n var tmp = {}\n var keys = Object.keys(val).sort(compareFunction)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n deterministicDecirc(val[key], key, i, stack, val, depth, options)\n tmp[key] = val[key]\n }\n if (typeof parent !== 'undefined') {\n arr.push([parent, k, val])\n parent[k] = tmp\n } else {\n return tmp\n }\n }\n stack.pop()\n }\n}\n\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues (replacer) {\n replacer =\n typeof replacer !== 'undefined'\n ? replacer\n : function (k, v) {\n return v\n }\n return function (key, val) {\n if (replacerStack.length > 0) {\n for (var i = 0; i < replacerStack.length; i++) {\n var part = replacerStack[i]\n if (part[1] === key && part[0] === val) {\n val = part[2]\n replacerStack.splice(i, 1)\n break\n }\n }\n }\n return replacer.call(this, key, val)\n }\n}\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n commaRoundTrip: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: utils.encode,\n encodeValuesOnly: false,\n filter: void undefined,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel\n) {\n var obj = object;\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n obj = utils.maybeMap(obj, encoder);\n }\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n\n var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjustedPrefix + '[]';\n }\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && key && typeof key.value !== 'undefined'\n ? key.value\n : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var encodedKey = allowDots && encodeDotInKeys ? String(key).replace(/\\./g, '%2E') : String(key);\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n var arrayFormat;\n if (opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = defaults.arrayFormat;\n }\n\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n\n var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n var value = obj[key];\n\n if (options.skipNulls && value === null) {\n continue;\n }\n pushToArray(keys, stringify(\n value,\n key,\n generateArrayPrefix,\n commaRoundTrip,\n options.allowEmptyArrays,\n options.strictNullHandling,\n options.skipNulls,\n options.encodeDotInKeys,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\n\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @typedef {ReturnType} Channel */\n\n\t/** @type {Channel | undefined} */ var $channelData;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\treturn !!$channelData && $channelData['delete'](key);\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn $channelData && $channelData.get(key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn !!$channelData && $channelData.has(key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$channelData) {\n\t\t\t\t$channelData = makeChannel();\n\t\t\t}\n\n\t\t\t$channelData.set(key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n","'use strict';\n\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\t// eslint-disable-next-line eqeqeq\n\tfor (; (curr = prev.next) != null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tif (!isDelete) {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tcurr.next = /** @type {NonNullable} */ (list.next);\n\t\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\t}\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n\tif (!objects) {\n\t\treturn void undefined;\n\t}\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('./list.d.ts').ListNode} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n\tif (!objects) {\n\t\treturn false;\n\t}\n\treturn !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n\tif (objects) {\n\t\treturn listGetNode(objects, key, true);\n\t}\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n\t/** @typedef {ReturnType} Channel */\n\t/** @typedef {Parameters[0]} K */\n\t/** @typedef {Parameters[1]} V */\n\n\t/** @type {import('./list.d.ts').RootNode | undefined} */ var $o;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tvar root = $o && $o.next;\n\t\t\tvar deletedNode = listDelete($o, key);\n\t\t\tif (deletedNode && root && root === deletedNode) {\n\t\t\t\t$o = void undefined;\n\t\t\t}\n\t\t\treturn !!deletedNode;\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn listGet($o, key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn listHas($o, key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$o) {\n\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t$o = {\n\t\t\t\t\tnext: void undefined\n\t\t\t\t};\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tlistSet(/** @type {NonNullable} */ ($o), key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n","'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n","'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n","'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n","'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n","'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n","'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n","'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n","'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n","'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n","'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {(thisArg: WeakMap, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {(thisArg: WeakMap, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {(thisArg: WeakMap, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {(thisArg: WeakMap, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap\n\t? /** @type {Exclude} */ function getSideChannelWeakMap() {\n\t\t/** @typedef {ReturnType} Channel */\n\t\t/** @typedef {Parameters[0]} K */\n\t\t/** @typedef {Parameters[1]} V */\n\n\t\t/** @type {WeakMap | undefined} */ var $wm;\n\t\t/** @type {Channel | undefined} */ var $m;\n\n\t\t/** @type {Channel} */\n\t\tvar channel = {\n\t\t\tassert: function (key) {\n\t\t\t\tif (!channel.has(key)) {\n\t\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapDelete($wm, key);\n\t\t\t\t\t}\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif ($m) {\n\t\t\t\t\t\treturn $m['delete'](key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tget: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $m && $m.get(key);\n\t\t\t},\n\t\t\thas: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!$m && $m.has(key);\n\t\t\t},\n\t\t\tset: function (key, value) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif (!$wm) {\n\t\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t\t}\n\t\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif (!$m) {\n\t\t\t\t\t\t$m = getSideChannelMap();\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\t\t/** @type {NonNullable} */ ($m).set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// @ts-expect-error TODO: figure out why this is erroring\n\t\treturn channel;\n\t}\n\t: getSideChannelMap;\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowEmptyArrays: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decodeDotInKeys: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n duplicates: 'combine',\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictDepth: false,\n strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = { __proto__: null };\n\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n cleanStr = cleanStr.replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key;\n var val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n val = utils.maybeMap(\n parseArrayValue(part.slice(pos + 1), options),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(String(val));\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n var existing = has.call(obj, key);\n if (existing && options.duplicates === 'combine') {\n obj[key] = utils.combine(obj[key], val);\n } else if (!existing || options.duplicates === 'last') {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n obj = options.allowEmptyArrays && (leaf === '' || (options.strictNullHandling && leaf === null))\n ? []\n : [].concat(leaf);\n } else {\n obj = options.plainObjects ? { __proto__: null } : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n var index = parseInt(decodedRoot, 10);\n if (!options.parseArrays && decodedRoot === '') {\n obj = { 0: leaf };\n } else if (\n !isNaN(index)\n && root !== decodedRoot\n && String(index) === decodedRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)\n ) {\n obj = [];\n obj[index] = leaf;\n } else if (decodedRoot !== '__proto__') {\n obj[decodedRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n // The regex chunks\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n // Get the parent\n\n var segment = options.depth > 0 && brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n // Stash the parent if it exists\n\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys.push(parent);\n }\n\n // Loop through children appending to the array until we hit depth\n\n var i = 0;\n while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n\n // If there's a remainder, check strictDepth option for throw, else just add whatever is left\n\n if (segment) {\n if (options.strictDepth === true) {\n throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');\n }\n keys.push('[' + key.slice(segment.index) + ']');\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n\n if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n\n if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n\n if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n throw new TypeError('The duplicates option must be either combine, first, or last');\n }\n\n var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n return {\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n duplicates: duplicates,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? { __proto__: null } : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? { __proto__: null } : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\n","\"use strict\";\n\n/**\n * Module of mixed-in functions shared between node and client code\n */\nconst {\n isObject,\n hasOwn\n} = require('./utils');\n\n/**\n * Expose `RequestBase`.\n */\n\nmodule.exports = RequestBase;\n\n/**\n * Initialize a new `RequestBase`.\n *\n * @api public\n */\n\nfunction RequestBase() {}\n\n/**\n * Clear previous timeout.\n *\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.clearTimeout = function () {\n clearTimeout(this._timer);\n clearTimeout(this._responseTimeoutTimer);\n clearTimeout(this._uploadTimeoutTimer);\n delete this._timer;\n delete this._responseTimeoutTimer;\n delete this._uploadTimeoutTimer;\n return this;\n};\n\n/**\n * Override default response body parser\n *\n * This function will be called to convert incoming data into request.body\n *\n * @param {Function}\n * @api public\n */\n\nRequestBase.prototype.parse = function (fn) {\n this._parser = fn;\n return this;\n};\n\n/**\n * Set format of binary response body.\n * In browser valid formats are 'blob' and 'arraybuffer',\n * which return Blob and ArrayBuffer, respectively.\n *\n * In Node all values result in Buffer.\n *\n * Examples:\n *\n * req.get('/')\n * .responseType('blob')\n * .end(callback);\n *\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.responseType = function (value) {\n this._responseType = value;\n return this;\n};\n\n/**\n * Override default request body serializer\n *\n * This function will be called to convert data set via .send or .attach into payload to send\n *\n * @param {Function}\n * @api public\n */\n\nRequestBase.prototype.serialize = function (fn) {\n this._serializer = fn;\n return this;\n};\n\n/**\n * Set timeouts.\n *\n * - response timeout is time between sending request and receiving the first byte of the response. Includes DNS and connection time.\n * - deadline is the time from start of the request to receiving response body in full. If the deadline is too short large files may not load at all on slow connections.\n * - upload is the time since last bit of data was sent or received. This timeout works only if deadline timeout is off\n *\n * Value of 0 or false means no timeout.\n *\n * @param {Number|Object} ms or {response, deadline}\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.timeout = function (options) {\n if (!options || typeof options !== 'object') {\n this._timeout = options;\n this._responseTimeout = 0;\n this._uploadTimeout = 0;\n return this;\n }\n for (const option in options) {\n if (hasOwn(options, option)) {\n switch (option) {\n case 'deadline':\n this._timeout = options.deadline;\n break;\n case 'response':\n this._responseTimeout = options.response;\n break;\n case 'upload':\n this._uploadTimeout = options.upload;\n break;\n default:\n console.warn('Unknown timeout option', option);\n }\n }\n }\n return this;\n};\n\n/**\n * Set number of retry attempts on error.\n *\n * Failed requests will be retried 'count' times if timeout or err.code >= 500.\n *\n * @param {Number} count\n * @param {Function} [fn]\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.retry = function (count, fn) {\n // Default to 1 if no count passed or true\n if (arguments.length === 0 || count === true) count = 1;\n if (count <= 0) count = 0;\n this._maxRetries = count;\n this._retries = 0;\n this._retryCallback = fn;\n return this;\n};\n\n//\n// NOTE: we do not include ESOCKETTIMEDOUT because that is from `request` package\n// \n//\n// NOTE: we do not include EADDRINFO because it was removed from libuv in 2014\n// \n// \n//\n//\n// TODO: expose these as configurable defaults\n//\nconst ERROR_CODES = new Set(['ETIMEDOUT', 'ECONNRESET', 'EADDRINUSE', 'ECONNREFUSED', 'EPIPE', 'ENOTFOUND', 'ENETUNREACH', 'EAI_AGAIN']);\nconst STATUS_CODES = new Set([408, 413, 429, 500, 502, 503, 504, 521, 522, 524]);\n\n// TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST)\n// const METHODS = new Set(['GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE']);\n\n/**\n * Determine if a request should be retried.\n * (Inspired by https://github.com/sindresorhus/got#retry)\n *\n * @param {Error} err an error\n * @param {Response} [res] response\n * @returns {Boolean} if segment should be retried\n */\nRequestBase.prototype._shouldRetry = function (error, res) {\n if (!this._maxRetries || this._retries++ >= this._maxRetries) {\n return false;\n }\n if (this._retryCallback) {\n try {\n const override = this._retryCallback(error, res);\n if (override === true) return true;\n if (override === false) return false;\n // undefined falls back to defaults\n } catch (err) {\n console.error(err);\n }\n }\n\n // TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST)\n /*\n if (\n this.req &&\n this.req.method &&\n !METHODS.has(this.req.method.toUpperCase())\n )\n return false;\n */\n if (res && res.status && STATUS_CODES.has(res.status)) return true;\n if (error) {\n if (error.code && ERROR_CODES.has(error.code)) return true;\n // Superagent timeout\n if (error.timeout && error.code === 'ECONNABORTED') return true;\n if (error.crossDomain) return true;\n }\n return false;\n};\n\n/**\n * Retry request\n *\n * @return {Request} for chaining\n * @api private\n */\n\nRequestBase.prototype._retry = function () {\n this.clearTimeout();\n\n // node\n if (this.req) {\n this.req = null;\n this.req = this.request();\n }\n this._aborted = false;\n this.timedout = false;\n this.timedoutError = null;\n return this._end();\n};\n\n/**\n * Promise support\n *\n * @param {Function} resolve\n * @param {Function} [reject]\n * @return {Request}\n */\n\nRequestBase.prototype.then = function (resolve, reject) {\n if (!this._fullfilledPromise) {\n const self = this;\n if (this._endCalled) {\n console.warn('Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises');\n }\n this._fullfilledPromise = new Promise((resolve, reject) => {\n self.on('abort', () => {\n if (this._maxRetries && this._maxRetries > this._retries) {\n return;\n }\n if (this.timedout && this.timedoutError) {\n reject(this.timedoutError);\n return;\n }\n const error = new Error('Aborted');\n error.code = 'ABORTED';\n error.status = this.status;\n error.method = this.method;\n error.url = this.url;\n reject(error);\n });\n self.end((error, res) => {\n if (error) reject(error);else resolve(res);\n });\n });\n }\n return this._fullfilledPromise.then(resolve, reject);\n};\nRequestBase.prototype.catch = function (callback) {\n return this.then(undefined, callback);\n};\n\n/**\n * Allow for extension\n */\n\nRequestBase.prototype.use = function (fn) {\n fn(this);\n return this;\n};\nRequestBase.prototype.ok = function (callback) {\n if (typeof callback !== 'function') throw new Error('Callback required');\n this._okCallback = callback;\n return this;\n};\nRequestBase.prototype._isResponseOK = function (res) {\n if (!res) {\n return false;\n }\n if (this._okCallback) {\n return this._okCallback(res);\n }\n return res.status >= 200 && res.status < 300;\n};\n\n/**\n * Get request header `field`.\n * Case-insensitive.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nRequestBase.prototype.get = function (field) {\n return this._header[field.toLowerCase()];\n};\n\n/**\n * Get case-insensitive header `field` value.\n * This is a deprecated internal API. Use `.get(field)` instead.\n *\n * (getHeader is no longer used internally by the superagent code base)\n *\n * @param {String} field\n * @return {String}\n * @api private\n * @deprecated\n */\n\nRequestBase.prototype.getHeader = RequestBase.prototype.get;\n\n/**\n * Set header `field` to `val`, or multiple fields with one object.\n * Case-insensitive.\n *\n * Examples:\n *\n * req.get('/')\n * .set('Accept', 'application/json')\n * .set('X-API-Key', 'foobar')\n * .end(callback);\n *\n * req.get('/')\n * .set({ Accept: 'application/json', 'X-API-Key': 'foobar' })\n * .end(callback);\n *\n * @param {String|Object} field\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.set = function (field, value) {\n if (isObject(field)) {\n for (const key in field) {\n if (hasOwn(field, key)) this.set(key, field[key]);\n }\n return this;\n }\n this._header[field.toLowerCase()] = value;\n this.header[field] = value;\n return this;\n};\n\n/**\n * Remove header `field`.\n * Case-insensitive.\n *\n * Example:\n *\n * req.get('/')\n * .unset('User-Agent')\n * .end(callback);\n *\n * @param {String} field field name\n */\nRequestBase.prototype.unset = function (field) {\n delete this._header[field.toLowerCase()];\n delete this.header[field];\n return this;\n};\n\n/**\n * Write the field `name` and `val`, or multiple fields with one object\n * for \"multipart/form-data\" request bodies.\n *\n * ``` js\n * request.post('/upload')\n * .field('foo', 'bar')\n * .end(callback);\n *\n * request.post('/upload')\n * .field({ foo: 'bar', baz: 'qux' })\n * .end(callback);\n * ```\n *\n * @param {String|Object} name name of field\n * @param {String|Blob|File|Buffer|fs.ReadStream} val value of field\n * @param {String} options extra options, e.g. 'blob'\n * @return {Request} for chaining\n * @api public\n */\nRequestBase.prototype.field = function (name, value, options) {\n // name should be either a string or an object.\n if (name === null || undefined === name) {\n throw new Error('.field(name, val) name can not be empty');\n }\n if (this._data) {\n throw new Error(\".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()\");\n }\n if (isObject(name)) {\n for (const key in name) {\n if (hasOwn(name, key)) this.field(key, name[key]);\n }\n return this;\n }\n if (Array.isArray(value)) {\n for (const i in value) {\n if (hasOwn(value, i)) this.field(name, value[i]);\n }\n return this;\n }\n\n // val should be defined now\n if (value === null || undefined === value) {\n throw new Error('.field(name, val) val can not be empty');\n }\n if (typeof value === 'boolean') {\n value = String(value);\n }\n\n // fix https://github.com/ladjs/superagent/issues/1680\n if (options) this._getFormData().append(name, value, options);else this._getFormData().append(name, value);\n return this;\n};\n\n/**\n * Abort the request, and clear potential timeout.\n *\n * @return {Request} request\n * @api public\n */\nRequestBase.prototype.abort = function () {\n if (this._aborted) {\n return this;\n }\n this._aborted = true;\n if (this.xhr) this.xhr.abort(); // browser\n if (this.req) {\n this.req.abort(); // node\n }\n this.clearTimeout();\n this.emit('abort');\n return this;\n};\nRequestBase.prototype._auth = function (user, pass, options, base64Encoder) {\n switch (options.type) {\n case 'basic':\n this.set('Authorization', `Basic ${base64Encoder(`${user}:${pass}`)}`);\n break;\n case 'auto':\n this.username = user;\n this.password = pass;\n break;\n case 'bearer':\n // usage would be .auth(accessToken, { type: 'bearer' })\n this.set('Authorization', `Bearer ${user}`);\n break;\n default:\n break;\n }\n return this;\n};\n\n/**\n * Enable transmission of cookies with x-domain requests.\n *\n * Note that for this to work the origin must not be\n * using \"Access-Control-Allow-Origin\" with a wildcard,\n * and also must set \"Access-Control-Allow-Credentials\"\n * to \"true\".\n * @param {Boolean} [on=true] - Set 'withCredentials' state\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.withCredentials = function (on) {\n // This is browser-only functionality. Node side is no-op.\n if (on === undefined) on = true;\n this._withCredentials = on;\n return this;\n};\n\n/**\n * Set the max redirects to `n`. Does nothing in browser XHR implementation.\n *\n * @param {Number} n\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.redirects = function (n) {\n this._maxRedirects = n;\n return this;\n};\n\n/**\n * Maximum size of buffered response body, in bytes. Counts uncompressed size.\n * Default 200MB.\n *\n * @param {Number} n number of bytes\n * @return {Request} for chaining\n */\nRequestBase.prototype.maxResponseSize = function (n) {\n if (typeof n !== 'number') {\n throw new TypeError('Invalid argument');\n }\n this._maxResponseSize = n;\n return this;\n};\n\n/**\n * Convert to a plain javascript object (not JSON string) of scalar properties.\n * Note as this method is designed to return a useful non-this value,\n * it cannot be chained.\n *\n * @return {Object} describing method, url, and data of this request\n * @api public\n */\n\nRequestBase.prototype.toJSON = function () {\n return {\n method: this.method,\n url: this.url,\n data: this._data,\n headers: this._header\n };\n};\n\n/**\n * Send `data` as the request body, defaulting the `.type()` to \"json\" when\n * an object is given.\n *\n * Examples:\n *\n * // manual json\n * request.post('/user')\n * .type('json')\n * .send('{\"name\":\"tj\"}')\n * .end(callback)\n *\n * // auto json\n * request.post('/user')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // manual x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send('name=tj')\n * .end(callback)\n *\n * // auto x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // defaults to x-www-form-urlencoded\n * request.post('/user')\n * .send('name=tobi')\n * .send('species=ferret')\n * .end(callback)\n *\n * @param {String|Object} data\n * @return {Request} for chaining\n * @api public\n */\n\n// eslint-disable-next-line complexity\nRequestBase.prototype.send = function (data) {\n const isObject_ = isObject(data);\n let type = this._header['content-type'];\n if (this._formData) {\n throw new Error(\".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()\");\n }\n if (isObject_ && !this._data) {\n if (Array.isArray(data)) {\n this._data = [];\n } else if (!this._isHost(data)) {\n this._data = {};\n }\n } else if (data && this._data && this._isHost(this._data)) {\n throw new Error(\"Can't merge these send calls\");\n }\n\n // merge\n if (isObject_ && isObject(this._data)) {\n for (const key in data) {\n if (typeof data[key] == 'bigint' && !data[key].toJSON) throw new Error('Cannot serialize BigInt value to json');\n if (hasOwn(data, key)) this._data[key] = data[key];\n }\n } else if (typeof data === 'bigint') throw new Error(\"Cannot send value of type BigInt\");else if (typeof data === 'string') {\n // default to x-www-form-urlencoded\n if (!type) this.type('form');\n type = this._header['content-type'];\n if (type) type = type.toLowerCase().trim();\n if (type === 'application/x-www-form-urlencoded') {\n this._data = this._data ? `${this._data}&${data}` : data;\n } else {\n this._data = (this._data || '') + data;\n }\n } else {\n this._data = data;\n }\n if (!isObject_ || this._isHost(data)) {\n return this;\n }\n\n // default to json\n if (!type) this.type('json');\n return this;\n};\n\n/**\n * Sort `querystring` by the sort function\n *\n *\n * Examples:\n *\n * // default order\n * request.get('/user')\n * .query('name=Nick')\n * .query('search=Manny')\n * .sortQuery()\n * .end(callback)\n *\n * // customized sort function\n * request.get('/user')\n * .query('name=Nick')\n * .query('search=Manny')\n * .sortQuery(function(a, b){\n * return a.length - b.length;\n * })\n * .end(callback)\n *\n *\n * @param {Function} sort\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.sortQuery = function (sort) {\n // _sort default to true but otherwise can be a function or boolean\n this._sort = typeof sort === 'undefined' ? true : sort;\n return this;\n};\n\n/**\n * Compose querystring to append to req.url\n *\n * @api private\n */\nRequestBase.prototype._finalizeQueryString = function () {\n const query = this._query.join('&');\n if (query) {\n this.url += (this.url.includes('?') ? '&' : '?') + query;\n }\n this._query.length = 0; // Makes the call idempotent\n\n if (this._sort) {\n const index = this.url.indexOf('?');\n if (index >= 0) {\n const queryArray = this.url.slice(index + 1).split('&');\n if (typeof this._sort === 'function') {\n queryArray.sort(this._sort);\n } else {\n queryArray.sort();\n }\n this.url = this.url.slice(0, index) + '?' + queryArray.join('&');\n }\n }\n};\n\n// For backwards compat only\nRequestBase.prototype._appendQueryString = () => {\n console.warn('Unsupported');\n};\n\n/**\n * Invoke callback with timeout error.\n *\n * @api private\n */\n\nRequestBase.prototype._timeoutError = function (reason, timeout, errno) {\n if (this._aborted) {\n return;\n }\n const error = new Error(`${reason + timeout}ms exceeded`);\n error.timeout = timeout;\n error.code = 'ECONNABORTED';\n error.errno = errno;\n this.timedout = true;\n this.timedoutError = error;\n this.abort();\n this.callback(error);\n};\nRequestBase.prototype._setTimeouts = function () {\n const self = this;\n\n // deadline\n if (this._timeout && !this._timer) {\n this._timer = setTimeout(() => {\n self._timeoutError('Timeout of ', self._timeout, 'ETIME');\n }, this._timeout);\n }\n\n // response timeout\n if (this._responseTimeout && !this._responseTimeoutTimer) {\n this._responseTimeoutTimer = setTimeout(() => {\n self._timeoutError('Response timeout of ', self._responseTimeout, 'ETIMEDOUT');\n }, this._responseTimeout);\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc09iamVjdCIsImhhc093biIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiUmVxdWVzdEJhc2UiLCJwcm90b3R5cGUiLCJjbGVhclRpbWVvdXQiLCJfdGltZXIiLCJfcmVzcG9uc2VUaW1lb3V0VGltZXIiLCJfdXBsb2FkVGltZW91dFRpbWVyIiwicGFyc2UiLCJmbiIsIl9wYXJzZXIiLCJyZXNwb25zZVR5cGUiLCJ2YWx1ZSIsIl9yZXNwb25zZVR5cGUiLCJzZXJpYWxpemUiLCJfc2VyaWFsaXplciIsInRpbWVvdXQiLCJvcHRpb25zIiwiX3RpbWVvdXQiLCJfcmVzcG9uc2VUaW1lb3V0IiwiX3VwbG9hZFRpbWVvdXQiLCJvcHRpb24iLCJkZWFkbGluZSIsInJlc3BvbnNlIiwidXBsb2FkIiwiY29uc29sZSIsIndhcm4iLCJyZXRyeSIsImNvdW50IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiX21heFJldHJpZXMiLCJfcmV0cmllcyIsIl9yZXRyeUNhbGxiYWNrIiwiRVJST1JfQ09ERVMiLCJTZXQiLCJTVEFUVVNfQ09ERVMiLCJfc2hvdWxkUmV0cnkiLCJlcnJvciIsInJlcyIsIm92ZXJyaWRlIiwiZXJyIiwic3RhdHVzIiwiaGFzIiwiY29kZSIsImNyb3NzRG9tYWluIiwiX3JldHJ5IiwicmVxIiwicmVxdWVzdCIsIl9hYm9ydGVkIiwidGltZWRvdXQiLCJ0aW1lZG91dEVycm9yIiwiX2VuZCIsInRoZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwiX2Z1bGxmaWxsZWRQcm9taXNlIiwic2VsZiIsIl9lbmRDYWxsZWQiLCJQcm9taXNlIiwib24iLCJFcnJvciIsIm1ldGhvZCIsInVybCIsImVuZCIsImNhdGNoIiwiY2FsbGJhY2siLCJ1bmRlZmluZWQiLCJ1c2UiLCJvayIsIl9va0NhbGxiYWNrIiwiX2lzUmVzcG9uc2VPSyIsImdldCIsImZpZWxkIiwiX2hlYWRlciIsInRvTG93ZXJDYXNlIiwiZ2V0SGVhZGVyIiwic2V0Iiwia2V5IiwiaGVhZGVyIiwidW5zZXQiLCJuYW1lIiwiX2RhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJpIiwiU3RyaW5nIiwiX2dldEZvcm1EYXRhIiwiYXBwZW5kIiwiYWJvcnQiLCJ4aHIiLCJlbWl0IiwiX2F1dGgiLCJ1c2VyIiwicGFzcyIsImJhc2U2NEVuY29kZXIiLCJ0eXBlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIndpdGhDcmVkZW50aWFscyIsIl93aXRoQ3JlZGVudGlhbHMiLCJyZWRpcmVjdHMiLCJuIiwiX21heFJlZGlyZWN0cyIsIm1heFJlc3BvbnNlU2l6ZSIsIlR5cGVFcnJvciIsIl9tYXhSZXNwb25zZVNpemUiLCJ0b0pTT04iLCJkYXRhIiwiaGVhZGVycyIsInNlbmQiLCJpc09iamVjdF8iLCJfZm9ybURhdGEiLCJfaXNIb3N0IiwidHJpbSIsInNvcnRRdWVyeSIsInNvcnQiLCJfc29ydCIsIl9maW5hbGl6ZVF1ZXJ5U3RyaW5nIiwicXVlcnkiLCJfcXVlcnkiLCJqb2luIiwiaW5jbHVkZXMiLCJpbmRleCIsImluZGV4T2YiLCJxdWVyeUFycmF5Iiwic2xpY2UiLCJzcGxpdCIsIl9hcHBlbmRRdWVyeVN0cmluZyIsIl90aW1lb3V0RXJyb3IiLCJyZWFzb24iLCJlcnJubyIsIl9zZXRUaW1lb3V0cyIsInNldFRpbWVvdXQiXSwic291cmNlcyI6WyIuLi9zcmMvcmVxdWVzdC1iYXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIG9mIG1peGVkLWluIGZ1bmN0aW9ucyBzaGFyZWQgYmV0d2VlbiBub2RlIGFuZCBjbGllbnQgY29kZVxuICovXG5jb25zdCB7IGlzT2JqZWN0LCBoYXNPd24gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlcXVlc3RCYXNlYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RCYXNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlcXVlc3RCYXNlYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3RCYXNlKCkge31cblxuLyoqXG4gKiBDbGVhciBwcmV2aW91cyB0aW1lb3V0LlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICBjbGVhclRpbWVvdXQodGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIpO1xuICBjbGVhclRpbWVvdXQodGhpcy5fdXBsb2FkVGltZW91dFRpbWVyKTtcbiAgZGVsZXRlIHRoaXMuX3RpbWVyO1xuICBkZWxldGUgdGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXI7XG4gIGRlbGV0ZSB0aGlzLl91cGxvYWRUaW1lb3V0VGltZXI7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBPdmVycmlkZSBkZWZhdWx0IHJlc3BvbnNlIGJvZHkgcGFyc2VyXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IGluY29taW5nIGRhdGEgaW50byByZXF1ZXN0LmJvZHlcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgdGhpcy5fcGFyc2VyID0gZm47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgZm9ybWF0IG9mIGJpbmFyeSByZXNwb25zZSBib2R5LlxuICogSW4gYnJvd3NlciB2YWxpZCBmb3JtYXRzIGFyZSAnYmxvYicgYW5kICdhcnJheWJ1ZmZlcicsXG4gKiB3aGljaCByZXR1cm4gQmxvYiBhbmQgQXJyYXlCdWZmZXIsIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBJbiBOb2RlIGFsbCB2YWx1ZXMgcmVzdWx0IGluIEJ1ZmZlci5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5yZXNwb25zZVR5cGUoJ2Jsb2InKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUucmVzcG9uc2VUeXBlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHRoaXMuX3Jlc3BvbnNlVHlwZSA9IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogT3ZlcnJpZGUgZGVmYXVsdCByZXF1ZXN0IGJvZHkgc2VyaWFsaXplclxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBkYXRhIHNldCB2aWEgLnNlbmQgb3IgLmF0dGFjaCBpbnRvIHBheWxvYWQgdG8gc2VuZFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgdGhpcy5fc2VyaWFsaXplciA9IGZuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRpbWVvdXRzLlxuICpcbiAqIC0gcmVzcG9uc2UgdGltZW91dCBpcyB0aW1lIGJldHdlZW4gc2VuZGluZyByZXF1ZXN0IGFuZCByZWNlaXZpbmcgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlLiBJbmNsdWRlcyBETlMgYW5kIGNvbm5lY3Rpb24gdGltZS5cbiAqIC0gZGVhZGxpbmUgaXMgdGhlIHRpbWUgZnJvbSBzdGFydCBvZiB0aGUgcmVxdWVzdCB0byByZWNlaXZpbmcgcmVzcG9uc2UgYm9keSBpbiBmdWxsLiBJZiB0aGUgZGVhZGxpbmUgaXMgdG9vIHNob3J0IGxhcmdlIGZpbGVzIG1heSBub3QgbG9hZCBhdCBhbGwgb24gc2xvdyBjb25uZWN0aW9ucy5cbiAqIC0gdXBsb2FkIGlzIHRoZSB0aW1lICBzaW5jZSBsYXN0IGJpdCBvZiBkYXRhIHdhcyBzZW50IG9yIHJlY2VpdmVkLiBUaGlzIHRpbWVvdXQgd29ya3Mgb25seSBpZiBkZWFkbGluZSB0aW1lb3V0IGlzIG9mZlxuICpcbiAqIFZhbHVlIG9mIDAgb3IgZmFsc2UgbWVhbnMgbm8gdGltZW91dC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcnxPYmplY3R9IG1zIG9yIHtyZXNwb25zZSwgZGVhZGxpbmV9XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhpcy5fdGltZW91dCA9IG9wdGlvbnM7XG4gICAgdGhpcy5fcmVzcG9uc2VUaW1lb3V0ID0gMDtcbiAgICB0aGlzLl91cGxvYWRUaW1lb3V0ID0gMDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZvciAoY29uc3Qgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBpZiAoaGFzT3duKG9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgIHN3aXRjaCAob3B0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2RlYWRsaW5lJzpcbiAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gb3B0aW9ucy5kZWFkbGluZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVzcG9uc2UnOlxuICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlVGltZW91dCA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgICAgdGhpcy5fdXBsb2FkVGltZW91dCA9IG9wdGlvbnMudXBsb2FkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biB0aW1lb3V0IG9wdGlvbicsIG9wdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgb24gZXJyb3IuXG4gKlxuICogRmFpbGVkIHJlcXVlc3RzIHdpbGwgYmUgcmV0cmllZCAnY291bnQnIHRpbWVzIGlmIHRpbWVvdXQgb3IgZXJyLmNvZGUgPj0gNTAwLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZXRyeSA9IGZ1bmN0aW9uIChjb3VudCwgZm4pIHtcbiAgLy8gRGVmYXVsdCB0byAxIGlmIG5vIGNvdW50IHBhc3NlZCBvciB0cnVlXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IGNvdW50ID09PSB0cnVlKSBjb3VudCA9IDE7XG4gIGlmIChjb3VudCA8PSAwKSBjb3VudCA9IDA7XG4gIHRoaXMuX21heFJldHJpZXMgPSBjb3VudDtcbiAgdGhpcy5fcmV0cmllcyA9IDA7XG4gIHRoaXMuX3JldHJ5Q2FsbGJhY2sgPSBmbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gTk9URTogd2UgZG8gbm90IGluY2x1ZGUgRVNPQ0tFVFRJTUVET1VUIGJlY2F1c2UgdGhhdCBpcyBmcm9tIGByZXF1ZXN0YCBwYWNrYWdlXG4vLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9nb3QvcHVsbC81Mzc+XG4vL1xuLy8gTk9URTogd2UgZG8gbm90IGluY2x1ZGUgRUFERFJJTkZPIGJlY2F1c2UgaXQgd2FzIHJlbW92ZWQgZnJvbSBsaWJ1diBpbiAyMDE0XG4vLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL2xpYnV2L2xpYnV2L2NvbW1pdC8wMmUxZWJkNDBiODA3YmU1YWY0NjM0M2VhODczMzMxYjJlZTRlOWMxPlxuLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1ZXN0L3JlcXVlc3Qvc2VhcmNoP3E9RVNPQ0tFVFRJTUVET1VUJnVuc2NvcGVkX3E9RVNPQ0tFVFRJTUVET1VUPlxuLy9cbi8vXG4vLyBUT0RPOiBleHBvc2UgdGhlc2UgYXMgY29uZmlndXJhYmxlIGRlZmF1bHRzXG4vL1xuY29uc3QgRVJST1JfQ09ERVMgPSBuZXcgU2V0KFtcbiAgJ0VUSU1FRE9VVCcsXG4gICdFQ09OTlJFU0VUJyxcbiAgJ0VBRERSSU5VU0UnLFxuICAnRUNPTk5SRUZVU0VEJyxcbiAgJ0VQSVBFJyxcbiAgJ0VOT1RGT1VORCcsXG4gICdFTkVUVU5SRUFDSCcsXG4gICdFQUlfQUdBSU4nXG5dKTtcblxuY29uc3QgU1RBVFVTX0NPREVTID0gbmV3IFNldChbXG4gIDQwOCwgNDEzLCA0MjksIDUwMCwgNTAyLCA1MDMsIDUwNCwgNTIxLCA1MjIsIDUyNFxuXSk7XG5cbi8vIFRPRE86IHdlIHdvdWxkIG5lZWQgdG8gbWFrZSB0aGlzIGVhc2lseSBjb25maWd1cmFibGUgYmVmb3JlIGFkZGluZyBpdCBpbiAoZS5nLiBzb21lIG1pZ2h0IHdhbnQgdG8gYWRkIFBPU1QpXG4vLyBjb25zdCBNRVRIT0RTID0gbmV3IFNldChbJ0dFVCcsICdQVVQnLCAnSEVBRCcsICdERUxFVEUnLCAnT1BUSU9OUycsICdUUkFDRSddKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSByZXF1ZXN0IHNob3VsZCBiZSByZXRyaWVkLlxuICogKEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ290I3JldHJ5KVxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyciBhbiBlcnJvclxuICogQHBhcmFtIHtSZXNwb25zZX0gW3Jlc10gcmVzcG9uc2VcbiAqIEByZXR1cm5zIHtCb29sZWFufSBpZiBzZWdtZW50IHNob3VsZCBiZSByZXRyaWVkXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fc2hvdWxkUmV0cnkgPSBmdW5jdGlvbiAoZXJyb3IsIHJlcykge1xuICBpZiAoIXRoaXMuX21heFJldHJpZXMgfHwgdGhpcy5fcmV0cmllcysrID49IHRoaXMuX21heFJldHJpZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fcmV0cnlDYWxsYmFjaykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuX3JldHJ5Q2FsbGJhY2soZXJyb3IsIHJlcyk7XG4gICAgICBpZiAob3ZlcnJpZGUgPT09IHRydWUpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKG92ZXJyaWRlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gdW5kZWZpbmVkIGZhbGxzIGJhY2sgdG8gZGVmYXVsdHNcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiB3ZSB3b3VsZCBuZWVkIHRvIG1ha2UgdGhpcyBlYXNpbHkgY29uZmlndXJhYmxlIGJlZm9yZSBhZGRpbmcgaXQgaW4gKGUuZy4gc29tZSBtaWdodCB3YW50IHRvIGFkZCBQT1NUKVxuICAvKlxuICBpZiAoXG4gICAgdGhpcy5yZXEgJiZcbiAgICB0aGlzLnJlcS5tZXRob2QgJiZcbiAgICAhTUVUSE9EUy5oYXModGhpcy5yZXEubWV0aG9kLnRvVXBwZXJDYXNlKCkpXG4gIClcbiAgICByZXR1cm4gZmFsc2U7XG4gICovXG4gIGlmIChyZXMgJiYgcmVzLnN0YXR1cyAmJiBTVEFUVVNfQ09ERVMuaGFzKHJlcy5zdGF0dXMpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgJiYgRVJST1JfQ09ERVMuaGFzKGVycm9yLmNvZGUpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTdXBlcmFnZW50IHRpbWVvdXRcbiAgICBpZiAoZXJyb3IudGltZW91dCAmJiBlcnJvci5jb2RlID09PSAnRUNPTk5BQk9SVEVEJykgcmV0dXJuIHRydWU7XG4gICAgaWYgKGVycm9yLmNyb3NzRG9tYWluKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0cnkgcmVxdWVzdFxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9yZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcblxuICAvLyBub2RlXG4gIGlmICh0aGlzLnJlcSkge1xuICAgIHRoaXMucmVxID0gbnVsbDtcbiAgICB0aGlzLnJlcSA9IHRoaXMucmVxdWVzdCgpO1xuICB9XG5cbiAgdGhpcy5fYWJvcnRlZCA9IGZhbHNlO1xuICB0aGlzLnRpbWVkb3V0ID0gZmFsc2U7XG4gIHRoaXMudGltZWRvdXRFcnJvciA9IG51bGw7XG5cbiAgcmV0dXJuIHRoaXMuX2VuZCgpO1xufTtcblxuLyoqXG4gKiBQcm9taXNlIHN1cHBvcnRcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVqZWN0XVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgaWYgKCF0aGlzLl9mdWxsZmlsbGVkUHJvbWlzZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLl9lbmRDYWxsZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dhcm5pbmc6IHN1cGVyYWdlbnQgcmVxdWVzdCB3YXMgc2VudCB0d2ljZSwgYmVjYXVzZSBib3RoIC5lbmQoKSBhbmQgLnRoZW4oKSB3ZXJlIGNhbGxlZC4gTmV2ZXIgY2FsbCAuZW5kKCkgaWYgeW91IHVzZSBwcm9taXNlcydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZnVsbGZpbGxlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZWxmLm9uKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21heFJldHJpZXMgJiYgdGhpcy5fbWF4UmV0cmllcyA+IHRoaXMuX3JldHJpZXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aW1lZG91dCAmJiB0aGlzLnRpbWVkb3V0RXJyb3IpIHtcbiAgICAgICAgICByZWplY3QodGhpcy50aW1lZG91dEVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignQWJvcnRlZCcpO1xuICAgICAgICBlcnJvci5jb2RlID0gJ0FCT1JURUQnO1xuICAgICAgICBlcnJvci5zdGF0dXMgPSB0aGlzLnN0YXR1cztcbiAgICAgICAgZXJyb3IubWV0aG9kID0gdGhpcy5tZXRob2Q7XG4gICAgICAgIGVycm9yLnVybCA9IHRoaXMudXJsO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBzZWxmLmVuZCgoZXJyb3IsIHJlcykgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHJlamVjdChlcnJvcik7XG4gICAgICAgIGVsc2UgcmVzb2x2ZShyZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZFByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xufTtcblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmNhdGNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBjYWxsYmFjayk7XG59O1xuXG4vKipcbiAqIEFsbG93IGZvciBleHRlbnNpb25cbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIGZuKHRoaXMpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5vayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxiYWNrIHJlcXVpcmVkJyk7XG4gIHRoaXMuX29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX2lzUmVzcG9uc2VPSyA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgaWYgKCFyZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fb2tDYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLl9va0NhbGxiYWNrKHJlcyk7XG4gIH1cblxuICByZXR1cm4gcmVzLnN0YXR1cyA+PSAyMDAgJiYgcmVzLnN0YXR1cyA8IDMwMDtcbn07XG5cbi8qKlxuICogR2V0IHJlcXVlc3QgaGVhZGVyIGBmaWVsZGAuXG4gKiBDYXNlLWluc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIHJldHVybiB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV07XG59O1xuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBgZmllbGRgIHZhbHVlLlxuICogVGhpcyBpcyBhIGRlcHJlY2F0ZWQgaW50ZXJuYWwgQVBJLiBVc2UgYC5nZXQoZmllbGQpYCBpbnN0ZWFkLlxuICpcbiAqIChnZXRIZWFkZXIgaXMgbm8gbG9uZ2VyIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgc3VwZXJhZ2VudCBjb2RlIGJhc2UpXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqIEBkZXByZWNhdGVkXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmdldEhlYWRlciA9IFJlcXVlc3RCYXNlLnByb3RvdHlwZS5nZXQ7XG5cbi8qKlxuICogU2V0IGhlYWRlciBgZmllbGRgIHRvIGB2YWxgLCBvciBtdWx0aXBsZSBmaWVsZHMgd2l0aCBvbmUgb2JqZWN0LlxuICogQ2FzZS1pbnNlbnNpdGl2ZS5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJylcbiAqICAgICAgICAuc2V0KCdYLUFQSS1LZXknLCAnZm9vYmFyJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJywgJ1gtQVBJLUtleSc6ICdmb29iYXInIH0pXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlKSB7XG4gIGlmIChpc09iamVjdChmaWVsZCkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZCkge1xuICAgICAgaWYgKGhhc093bihmaWVsZCwga2V5KSkgdGhpcy5zZXQoa2V5LCBmaWVsZFtrZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2hlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICB0aGlzLmhlYWRlcltmaWVsZF0gPSB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBoZWFkZXIgYGZpZWxkYC5cbiAqIENhc2UtaW5zZW5zaXRpdmUuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC51bnNldCgnVXNlci1BZ2VudCcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkIGZpZWxkIG5hbWVcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLnVuc2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIGRlbGV0ZSB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV07XG4gIGRlbGV0ZSB0aGlzLmhlYWRlcltmaWVsZF07XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZSB0aGUgZmllbGQgYG5hbWVgIGFuZCBgdmFsYCwgb3IgbXVsdGlwbGUgZmllbGRzIHdpdGggb25lIG9iamVjdFxuICogZm9yIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHJlcXVlc3QgYm9kaWVzLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmZpZWxkKCdmb28nLCAnYmFyJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmZpZWxkKHsgZm9vOiAnYmFyJywgYmF6OiAncXV4JyB9KVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gbmFtZSBuYW1lIG9mIGZpZWxkXG4gKiBAcGFyYW0ge1N0cmluZ3xCbG9ifEZpbGV8QnVmZmVyfGZzLlJlYWRTdHJlYW19IHZhbCB2YWx1ZSBvZiBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMgZXh0cmEgb3B0aW9ucywgZS5nLiAnYmxvYidcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLmZpZWxkID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gIC8vIG5hbWUgc2hvdWxkIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBvYmplY3QuXG4gIGlmIChuYW1lID09PSBudWxsIHx8IHVuZGVmaW5lZCA9PT0gbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignLmZpZWxkKG5hbWUsIHZhbCkgbmFtZSBjYW4gbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICBpZiAodGhpcy5fZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiLmZpZWxkKCkgY2FuJ3QgYmUgdXNlZCBpZiAuc2VuZCgpIGlzIHVzZWQuIFBsZWFzZSB1c2Ugb25seSAuc2VuZCgpIG9yIG9ubHkgLmZpZWxkKCkgJiAuYXR0YWNoKClcIlxuICAgICk7XG4gIH1cblxuICBpZiAoaXNPYmplY3QobmFtZSkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBuYW1lKSB7XG4gICAgICBpZiAoaGFzT3duKG5hbWUsIGtleSkpIHRoaXMuZmllbGQoa2V5LCBuYW1lW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCBpIGluIHZhbHVlKSB7XG4gICAgICBpZiAoaGFzT3duKHZhbHVlLCBpKSkgdGhpcy5maWVsZChuYW1lLCB2YWx1ZVtpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB2YWwgc2hvdWxkIGJlIGRlZmluZWQgbm93XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB1bmRlZmluZWQgPT09IHZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCcuZmllbGQobmFtZSwgdmFsKSB2YWwgY2FuIG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgLy8gZml4IGh0dHBzOi8vZ2l0aHViLmNvbS9sYWRqcy9zdXBlcmFnZW50L2lzc3Vlcy8xNjgwXG4gIGlmIChvcHRpb25zKSB0aGlzLl9nZXRGb3JtRGF0YSgpLmFwcGVuZChuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIGVsc2UgdGhpcy5fZ2V0Rm9ybURhdGEoKS5hcHBlbmQobmFtZSwgdmFsdWUpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBYm9ydCB0aGUgcmVxdWVzdCwgYW5kIGNsZWFyIHBvdGVudGlhbCB0aW1lb3V0LlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IHJlcXVlc3RcbiAqIEBhcGkgcHVibGljXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Fib3J0ZWQgPSB0cnVlO1xuICBpZiAodGhpcy54aHIpIHRoaXMueGhyLmFib3J0KCk7IC8vIGJyb3dzZXJcbiAgaWYgKHRoaXMucmVxKSB7XG4gICAgdGhpcy5yZXEuYWJvcnQoKTsgLy8gbm9kZVxuICB9XG5cbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgdGhpcy5lbWl0KCdhYm9ydCcpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fYXV0aCA9IGZ1bmN0aW9uICh1c2VyLCBwYXNzLCBvcHRpb25zLCBiYXNlNjRFbmNvZGVyKSB7XG4gIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgY2FzZSAnYmFzaWMnOlxuICAgICAgdGhpcy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmFzaWMgJHtiYXNlNjRFbmNvZGVyKGAke3VzZXJ9OiR7cGFzc31gKX1gKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcjtcbiAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWFyZXInOiAvLyB1c2FnZSB3b3VsZCBiZSAuYXV0aChhY2Nlc3NUb2tlbiwgeyB0eXBlOiAnYmVhcmVyJyB9KVxuICAgICAgdGhpcy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dXNlcn1gKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBFbmFibGUgdHJhbnNtaXNzaW9uIG9mIGNvb2tpZXMgd2l0aCB4LWRvbWFpbiByZXF1ZXN0cy5cbiAqXG4gKiBOb3RlIHRoYXQgZm9yIHRoaXMgdG8gd29yayB0aGUgb3JpZ2luIG11c3Qgbm90IGJlXG4gKiB1c2luZyBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiIHdpdGggYSB3aWxkY2FyZCxcbiAqIGFuZCBhbHNvIG11c3Qgc2V0IFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIlxuICogdG8gXCJ0cnVlXCIuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbj10cnVlXSAtIFNldCAnd2l0aENyZWRlbnRpYWxzJyBzdGF0ZVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS53aXRoQ3JlZGVudGlhbHMgPSBmdW5jdGlvbiAob24pIHtcbiAgLy8gVGhpcyBpcyBicm93c2VyLW9ubHkgZnVuY3Rpb25hbGl0eS4gTm9kZSBzaWRlIGlzIG5vLW9wLlxuICBpZiAob24gPT09IHVuZGVmaW5lZCkgb24gPSB0cnVlO1xuICB0aGlzLl93aXRoQ3JlZGVudGlhbHMgPSBvbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF4IHJlZGlyZWN0cyB0byBgbmAuIERvZXMgbm90aGluZyBpbiBicm93c2VyIFhIUiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gblxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZWRpcmVjdHMgPSBmdW5jdGlvbiAobikge1xuICB0aGlzLl9tYXhSZWRpcmVjdHMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTWF4aW11bSBzaXplIG9mIGJ1ZmZlcmVkIHJlc3BvbnNlIGJvZHksIGluIGJ5dGVzLiBDb3VudHMgdW5jb21wcmVzc2VkIHNpemUuXG4gKiBEZWZhdWx0IDIwME1CLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBuIG51bWJlciBvZiBieXRlc1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5tYXhSZXNwb25zZVNpemUgPSBmdW5jdGlvbiAobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudCcpO1xuICB9XG5cbiAgdGhpcy5fbWF4UmVzcG9uc2VTaXplID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnQgdG8gYSBwbGFpbiBqYXZhc2NyaXB0IG9iamVjdCAobm90IEpTT04gc3RyaW5nKSBvZiBzY2FsYXIgcHJvcGVydGllcy5cbiAqIE5vdGUgYXMgdGhpcyBtZXRob2QgaXMgZGVzaWduZWQgdG8gcmV0dXJuIGEgdXNlZnVsIG5vbi10aGlzIHZhbHVlLFxuICogaXQgY2Fubm90IGJlIGNoYWluZWQuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBkZXNjcmliaW5nIG1ldGhvZCwgdXJsLCBhbmQgZGF0YSBvZiB0aGlzIHJlcXVlc3RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgIHVybDogdGhpcy51cmwsXG4gICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICBoZWFkZXJzOiB0aGlzLl9oZWFkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogU2VuZCBgZGF0YWAgYXMgdGhlIHJlcXVlc3QgYm9keSwgZGVmYXVsdGluZyB0aGUgYC50eXBlKClgIHRvIFwianNvblwiIHdoZW5cbiAqIGFuIG9iamVjdCBpcyBnaXZlbi5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgICAvLyBtYW51YWwganNvblxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC50eXBlKCdqc29uJylcbiAqICAgICAgICAgLnNlbmQoJ3tcIm5hbWVcIjpcInRqXCJ9JylcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBhdXRvIGpzb25cbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAuc2VuZCh7IG5hbWU6ICd0aicgfSlcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBtYW51YWwgeC13d3ctZm9ybS11cmxlbmNvZGVkXG4gKiAgICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAgLnR5cGUoJ2Zvcm0nKVxuICogICAgICAgICAuc2VuZCgnbmFtZT10aicpXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gYXV0byB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAudHlwZSgnZm9ybScpXG4gKiAgICAgICAgIC5zZW5kKHsgbmFtZTogJ3RqJyB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIGRlZmF1bHRzIHRvIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICogICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAuc2VuZCgnbmFtZT10b2JpJylcbiAqICAgICAgICAuc2VuZCgnc3BlY2llcz1mZXJyZXQnKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBkYXRhXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgaXNPYmplY3RfID0gaXNPYmplY3QoZGF0YSk7XG4gIGxldCB0eXBlID0gdGhpcy5faGVhZGVyWydjb250ZW50LXR5cGUnXTtcblxuICBpZiAodGhpcy5fZm9ybURhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIi5zZW5kKCkgY2FuJ3QgYmUgdXNlZCBpZiAuYXR0YWNoKCkgb3IgLmZpZWxkKCkgaXMgdXNlZC4gUGxlYXNlIHVzZSBvbmx5IC5zZW5kKCkgb3Igb25seSAuZmllbGQoKSAmIC5hdHRhY2goKVwiXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc09iamVjdF8gJiYgIXRoaXMuX2RhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IFtdO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzSG9zdChkYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChkYXRhICYmIHRoaXMuX2RhdGEgJiYgdGhpcy5faXNIb3N0KHRoaXMuX2RhdGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgbWVyZ2UgdGhlc2Ugc2VuZCBjYWxsc1wiKTtcbiAgfVxuXG4gIC8vIG1lcmdlXG4gIGlmIChpc09iamVjdF8gJiYgaXNPYmplY3QodGhpcy5fZGF0YSkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFba2V5XSA9PSAnYmlnaW50JyAmJiAhZGF0YVtrZXldLnRvSlNPTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2VyaWFsaXplIEJpZ0ludCB2YWx1ZSB0byBqc29uJyk7XG4gICAgICBpZiAoaGFzT3duKGRhdGEsIGtleSkpIHRoaXMuX2RhdGFba2V5XSA9IGRhdGFba2V5XTtcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdiaWdpbnQnKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2VuZCB2YWx1ZSBvZiB0eXBlIEJpZ0ludFwiKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZGVmYXVsdCB0byB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAgICBpZiAoIXR5cGUpIHRoaXMudHlwZSgnZm9ybScpO1xuICAgIHR5cGUgPSB0aGlzLl9oZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICAgIGlmICh0eXBlKSB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhID8gYCR7dGhpcy5fZGF0YX0mJHtkYXRhfWAgOiBkYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhID0gKHRoaXMuX2RhdGEgfHwgJycpICsgZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0XyB8fCB0aGlzLl9pc0hvc3QoZGF0YSkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdG8ganNvblxuICBpZiAoIXR5cGUpIHRoaXMudHlwZSgnanNvbicpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU29ydCBgcXVlcnlzdHJpbmdgIGJ5IHRoZSBzb3J0IGZ1bmN0aW9uXG4gKlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgIC8vIGRlZmF1bHQgb3JkZXJcbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvdXNlcicpXG4gKiAgICAgICAgIC5xdWVyeSgnbmFtZT1OaWNrJylcbiAqICAgICAgICAgLnF1ZXJ5KCdzZWFyY2g9TWFubnknKVxuICogICAgICAgICAuc29ydFF1ZXJ5KClcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBjdXN0b21pemVkIHNvcnQgZnVuY3Rpb25cbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvdXNlcicpXG4gKiAgICAgICAgIC5xdWVyeSgnbmFtZT1OaWNrJylcbiAqICAgICAgICAgLnF1ZXJ5KCdzZWFyY2g9TWFubnknKVxuICogICAgICAgICAuc29ydFF1ZXJ5KGZ1bmN0aW9uKGEsIGIpe1xuICogICAgICAgICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICogICAgICAgICB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzb3J0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnNvcnRRdWVyeSA9IGZ1bmN0aW9uIChzb3J0KSB7XG4gIC8vIF9zb3J0IGRlZmF1bHQgdG8gdHJ1ZSBidXQgb3RoZXJ3aXNlIGNhbiBiZSBhIGZ1bmN0aW9uIG9yIGJvb2xlYW5cbiAgdGhpcy5fc29ydCA9IHR5cGVvZiBzb3J0ID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBzb3J0O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ29tcG9zZSBxdWVyeXN0cmluZyB0byBhcHBlbmQgdG8gcmVxLnVybFxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX2ZpbmFsaXplUXVlcnlTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fcXVlcnkuam9pbignJicpO1xuICBpZiAocXVlcnkpIHtcbiAgICB0aGlzLnVybCArPSAodGhpcy51cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JykgKyBxdWVyeTtcbiAgfVxuXG4gIHRoaXMuX3F1ZXJ5Lmxlbmd0aCA9IDA7IC8vIE1ha2VzIHRoZSBjYWxsIGlkZW1wb3RlbnRcblxuICBpZiAodGhpcy5fc29ydCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy51cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBxdWVyeUFycmF5ID0gdGhpcy51cmwuc2xpY2UoaW5kZXggKyAxKS5zcGxpdCgnJicpO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHF1ZXJ5QXJyYXkuc29ydCh0aGlzLl9zb3J0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5QXJyYXkuc29ydCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnNsaWNlKDAsIGluZGV4KSArICc/JyArIHF1ZXJ5QXJyYXkuam9pbignJicpO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRm9yIGJhY2t3YXJkcyBjb21wYXQgb25seVxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9hcHBlbmRRdWVyeVN0cmluZyA9ICgpID0+IHtcbiAgY29uc29sZS53YXJuKCdVbnN1cHBvcnRlZCcpO1xufTtcblxuLyoqXG4gKiBJbnZva2UgY2FsbGJhY2sgd2l0aCB0aW1lb3V0IGVycm9yLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fdGltZW91dEVycm9yID0gZnVuY3Rpb24gKHJlYXNvbiwgdGltZW91dCwgZXJybm8pIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgJHtyZWFzb24gKyB0aW1lb3V0fW1zIGV4Y2VlZGVkYCk7XG4gIGVycm9yLnRpbWVvdXQgPSB0aW1lb3V0O1xuICBlcnJvci5jb2RlID0gJ0VDT05OQUJPUlRFRCc7XG4gIGVycm9yLmVycm5vID0gZXJybm87XG4gIHRoaXMudGltZWRvdXQgPSB0cnVlO1xuICB0aGlzLnRpbWVkb3V0RXJyb3IgPSBlcnJvcjtcbiAgdGhpcy5hYm9ydCgpO1xuICB0aGlzLmNhbGxiYWNrKGVycm9yKTtcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fc2V0VGltZW91dHMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIC8vIGRlYWRsaW5lXG4gIGlmICh0aGlzLl90aW1lb3V0ICYmICF0aGlzLl90aW1lcikge1xuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZWxmLl90aW1lb3V0RXJyb3IoJ1RpbWVvdXQgb2YgJywgc2VsZi5fdGltZW91dCwgJ0VUSU1FJyk7XG4gICAgfSwgdGhpcy5fdGltZW91dCk7XG4gIH1cblxuICAvLyByZXNwb25zZSB0aW1lb3V0XG4gIGlmICh0aGlzLl9yZXNwb25zZVRpbWVvdXQgJiYgIXRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyKSB7XG4gICAgdGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNlbGYuX3RpbWVvdXRFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIHRpbWVvdXQgb2YgJyxcbiAgICAgICAgc2VsZi5fcmVzcG9uc2VUaW1lb3V0LFxuICAgICAgICAnRVRJTUVET1VUJ1xuICAgICAgKTtcbiAgICB9LCB0aGlzLl9yZXNwb25z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","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst utils = require('./utils');\n\n/**\n * Expose `ResponseBase`.\n */\n\nmodule.exports = ResponseBase;\n\n/**\n * Initialize a new `ResponseBase`.\n *\n * @api public\n */\n\nfunction ResponseBase() {}\n\n/**\n * Get case-insensitive `field` value.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nResponseBase.prototype.get = function (field) {\n return this.header[field.toLowerCase()];\n};\n\n/**\n * Set header related properties:\n *\n * - `.type` the content type without params\n *\n * A response of \"Content-Type: text/plain; charset=utf-8\"\n * will provide you with a `.type` of \"text/plain\".\n *\n * @param {Object} header\n * @api private\n */\n\nResponseBase.prototype._setHeaderProperties = function (header) {\n // TODO: moar!\n // TODO: make this a util\n\n // content-type\n const ct = header['content-type'] || '';\n this.type = utils.type(ct);\n\n // params\n const parameters = utils.params(ct);\n for (const key in parameters) {\n if (Object.prototype.hasOwnProperty.call(parameters, key)) this[key] = parameters[key];\n }\n this.links = {};\n\n // links\n try {\n if (header.link) {\n this.links = utils.parseLinks(header.link);\n }\n } catch (err) {\n // ignore\n }\n};\n\n/**\n * Set flags such as `.ok` based on `status`.\n *\n * For example a 2xx response will give you a `.ok` of __true__\n * whereas 5xx will be __false__ and `.error` will be __true__. The\n * `.clientError` and `.serverError` are also available to be more\n * specific, and `.statusType` is the class of error ranging from 1..5\n * sometimes useful for mapping respond colors etc.\n *\n * \"sugar\" properties are also defined for common cases. Currently providing:\n *\n * - .noContent\n * - .badRequest\n * - .unauthorized\n * - .notAcceptable\n * - .notFound\n *\n * @param {Number} status\n * @api private\n */\n\nResponseBase.prototype._setStatusProperties = function (status) {\n const type = Math.trunc(status / 100);\n\n // status / class\n this.statusCode = status;\n this.status = this.statusCode;\n this.statusType = type;\n\n // basics\n this.info = type === 1;\n this.ok = type === 2;\n this.redirect = type === 3;\n this.clientError = type === 4;\n this.serverError = type === 5;\n this.error = type === 4 || type === 5 ? this.toError() : false;\n\n // sugar\n this.created = status === 201;\n this.accepted = status === 202;\n this.noContent = status === 204;\n this.badRequest = status === 400;\n this.unauthorized = status === 401;\n this.notAcceptable = status === 406;\n this.forbidden = status === 403;\n this.notFound = status === 404;\n this.unprocessableEntity = status === 422;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlscyIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiUmVzcG9uc2VCYXNlIiwicHJvdG90eXBlIiwiZ2V0IiwiZmllbGQiLCJoZWFkZXIiLCJ0b0xvd2VyQ2FzZSIsIl9zZXRIZWFkZXJQcm9wZXJ0aWVzIiwiY3QiLCJ0eXBlIiwicGFyYW1ldGVycyIsInBhcmFtcyIsImtleSIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImxpbmtzIiwibGluayIsInBhcnNlTGlua3MiLCJlcnIiLCJfc2V0U3RhdHVzUHJvcGVydGllcyIsInN0YXR1cyIsIk1hdGgiLCJ0cnVuYyIsInN0YXR1c0NvZGUiLCJzdGF0dXNUeXBlIiwiaW5mbyIsIm9rIiwicmVkaXJlY3QiLCJjbGllbnRFcnJvciIsInNlcnZlckVycm9yIiwiZXJyb3IiLCJ0b0Vycm9yIiwiY3JlYXRlZCIsImFjY2VwdGVkIiwibm9Db250ZW50IiwiYmFkUmVxdWVzdCIsInVuYXV0aG9yaXplZCIsIm5vdEFjY2VwdGFibGUiLCJmb3JiaWRkZW4iLCJub3RGb3VuZCIsInVucHJvY2Vzc2FibGVFbnRpdHkiXSwic291cmNlcyI6WyIuLi9zcmMvcmVzcG9uc2UtYmFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogRXhwb3NlIGBSZXNwb25zZUJhc2VgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gUmVzcG9uc2VCYXNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlQmFzZWAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXNwb25zZUJhc2UoKSB7fVxuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGBmaWVsZGAgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlQmFzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIHJldHVybiB0aGlzLmhlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbn07XG5cbi8qKlxuICogU2V0IGhlYWRlciByZWxhdGVkIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGAudHlwZWAgdGhlIGNvbnRlbnQgdHlwZSB3aXRob3V0IHBhcmFtc1xuICpcbiAqIEEgcmVzcG9uc2Ugb2YgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIlxuICogd2lsbCBwcm92aWRlIHlvdSB3aXRoIGEgYC50eXBlYCBvZiBcInRleHQvcGxhaW5cIi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZUJhc2UucHJvdG90eXBlLl9zZXRIZWFkZXJQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGhlYWRlcikge1xuICAvLyBUT0RPOiBtb2FyIVxuICAvLyBUT0RPOiBtYWtlIHRoaXMgYSB1dGlsXG5cbiAgLy8gY29udGVudC10eXBlXG4gIGNvbnN0IGN0ID0gaGVhZGVyWydjb250ZW50LXR5cGUnXSB8fCAnJztcbiAgdGhpcy50eXBlID0gdXRpbHMudHlwZShjdCk7XG5cbiAgLy8gcGFyYW1zXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSB1dGlscy5wYXJhbXMoY3QpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbWV0ZXJzLCBrZXkpKVxuICAgICAgdGhpc1trZXldID0gcGFyYW1ldGVyc1trZXldO1xuICB9XG5cbiAgdGhpcy5saW5rcyA9IHt9O1xuXG4gIC8vIGxpbmtzXG4gIHRyeSB7XG4gICAgaWYgKGhlYWRlci5saW5rKSB7XG4gICAgICB0aGlzLmxpbmtzID0gdXRpbHMucGFyc2VMaW5rcyhoZWFkZXIubGluayk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxufTtcblxuLyoqXG4gKiBTZXQgZmxhZ3Mgc3VjaCBhcyBgLm9rYCBiYXNlZCBvbiBgc3RhdHVzYC5cbiAqXG4gKiBGb3IgZXhhbXBsZSBhIDJ4eCByZXNwb25zZSB3aWxsIGdpdmUgeW91IGEgYC5va2Agb2YgX190cnVlX19cbiAqIHdoZXJlYXMgNXh4IHdpbGwgYmUgX19mYWxzZV9fIGFuZCBgLmVycm9yYCB3aWxsIGJlIF9fdHJ1ZV9fLiBUaGVcbiAqIGAuY2xpZW50RXJyb3JgIGFuZCBgLnNlcnZlckVycm9yYCBhcmUgYWxzbyBhdmFpbGFibGUgdG8gYmUgbW9yZVxuICogc3BlY2lmaWMsIGFuZCBgLnN0YXR1c1R5cGVgIGlzIHRoZSBjbGFzcyBvZiBlcnJvciByYW5naW5nIGZyb20gMS4uNVxuICogc29tZXRpbWVzIHVzZWZ1bCBmb3IgbWFwcGluZyByZXNwb25kIGNvbG9ycyBldGMuXG4gKlxuICogXCJzdWdhclwiIHByb3BlcnRpZXMgYXJlIGFsc28gZGVmaW5lZCBmb3IgY29tbW9uIGNhc2VzLiBDdXJyZW50bHkgcHJvdmlkaW5nOlxuICpcbiAqICAgLSAubm9Db250ZW50XG4gKiAgIC0gLmJhZFJlcXVlc3RcbiAqICAgLSAudW5hdXRob3JpemVkXG4gKiAgIC0gLm5vdEFjY2VwdGFibGVcbiAqICAgLSAubm90Rm91bmRcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZUJhc2UucHJvdG90eXBlLl9zZXRTdGF0dXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICBjb25zdCB0eXBlID0gTWF0aC50cnVuYyhzdGF0dXMgLyAxMDApO1xuXG4gIC8vIHN0YXR1cyAvIGNsYXNzXG4gIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgdGhpcy5zdGF0dXMgPSB0aGlzLnN0YXR1c0NvZGU7XG4gIHRoaXMuc3RhdHVzVHlwZSA9IHR5cGU7XG5cbiAgLy8gYmFzaWNzXG4gIHRoaXMuaW5mbyA9IHR5cGUgPT09IDE7XG4gIHRoaXMub2sgPSB0eXBlID09PSAyO1xuICB0aGlzLnJlZGlyZWN0ID0gdHlwZSA9PT0gMztcbiAgdGhpcy5jbGllbnRFcnJvciA9IHR5cGUgPT09IDQ7XG4gIHRoaXMuc2VydmVyRXJyb3IgPSB0eXBlID09PSA1O1xuICB0aGlzLmVycm9yID0gdHlwZSA9PT0gNCB8fCB0eXBlID09PSA1ID8gdGhpcy50b0Vycm9yKCkgOiBmYWxzZTtcblxuICAvLyBzdWdhclxuICB0aGlzLmNyZWF0ZWQgPSBzdGF0dXMgPT09IDIwMTtcbiAgdGhpcy5hY2NlcHRlZCA9IHN0YXR1cyA9PT0gMjAyO1xuICB0aGlzLm5vQ29udGVudCA9IHN0YXR1cyA9PT0gMjA0O1xuICB0aGlzLmJhZFJlcXVlc3QgPSBzdGF0dXMgPT09IDQwMDtcbiAgdGhpcy51bmF1dGhvcml6ZWQgPSBzdGF0dXMgPT09IDQwMTtcbiAgdGhpcy5ub3RBY2NlcHRhYmxlID0gc3RhdHVzID09PSA0MDY7XG4gIHRoaXMuZm9yYmlkZGVuID0gc3RhdHVzID09PSA0MDM7XG4gIHRoaXMubm90Rm91bmQgPSBzdGF0dXMgPT09IDQwNDtcbiAgdGhpcy51bnByb2Nlc3NhYmxlRW50aXR5ID0gc3RhdHVzID09PSA0MjI7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxTQUFTLENBQUM7O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdDLFlBQVk7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU0EsWUFBWUEsQ0FBQSxFQUFHLENBQUM7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBQSxZQUFZLENBQUNDLFNBQVMsQ0FBQ0MsR0FBRyxHQUFHLFVBQVVDLEtBQUssRUFB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","\"use strict\";\n\nconst defaults = ['use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts'];\nclass Agent {\n constructor() {\n this._defaults = [];\n }\n _setDefaults(request) {\n for (const def of this._defaults) {\n request[def.fn](...def.args);\n }\n }\n}\nfor (const fn of defaults) {\n // Default setting for all requests from this agent\n Agent.prototype[fn] = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n this._defaults.push({\n fn,\n args\n });\n return this;\n };\n}\nmodule.exports = Agent;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0cyIsIkFnZW50IiwiY29uc3RydWN0b3IiLCJfZGVmYXVsdHMiLCJfc2V0RGVmYXVsdHMiLCJyZXF1ZXN0IiwiZGVmIiwiZm4iLCJhcmdzIiwicHJvdG90eXBlIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsIkFycmF5IiwiX2tleSIsInB1c2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2FnZW50LWJhc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZGVmYXVsdHMgPSBbXG4gICd1c2UnLFxuICAnb24nLFxuICAnb25jZScsXG4gICdzZXQnLFxuICAncXVlcnknLFxuICAndHlwZScsXG4gICdhY2NlcHQnLFxuICAnYXV0aCcsXG4gICd3aXRoQ3JlZGVudGlhbHMnLFxuICAnc29ydFF1ZXJ5JyxcbiAgJ3JldHJ5JyxcbiAgJ29rJyxcbiAgJ3JlZGlyZWN0cycsXG4gICd0aW1lb3V0JyxcbiAgJ2J1ZmZlcicsXG4gICdzZXJpYWxpemUnLFxuICAncGFyc2UnLFxuICAnY2EnLFxuICAna2V5JyxcbiAgJ3BmeCcsXG4gICdjZXJ0JyxcbiAgJ2Rpc2FibGVUTFNDZXJ0cydcbl1cblxuY2xhc3MgQWdlbnQge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fZGVmYXVsdHMgPSBbXTtcbiAgfVxuXG4gIF9zZXREZWZhdWx0cyAocmVxdWVzdCkge1xuICAgIGZvciAoY29uc3QgZGVmIG9mIHRoaXMuX2RlZmF1bHRzKSB7XG4gICAgICByZXF1ZXN0W2RlZi5mbl0oLi4uZGVmLmFyZ3MpO1xuICAgIH1cbiAgfVxufVxuXG5mb3IgKGNvbnN0IGZuIG9mIGRlZmF1bHRzKSB7XG4gIC8vIERlZmF1bHQgc2V0dGluZyBmb3IgYWxsIHJlcXVlc3RzIGZyb20gdGhpcyBhZ2VudFxuICBBZ2VudC5wcm90b3R5cGVbZm5dID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9kZWZhdWx0cy5wdXNoKHsgZm4sIGFyZ3MgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBBZ2VudDtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxRQUFRLEdBQUcsQ0FDZixLQUFLLEVBQ0wsSUFBSSxFQUNKLE1BQU0sRUFDTixLQUFLLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsT0FBTyxFQUNQLElBQUksRUFDSixXQUFXLEVBQ1gsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLElBQUksRUFDSixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsQ0FDbEI7QUFFRCxNQUFNQyxLQUFLLENBQUM7RUFDVkMsV0FBV0EsQ0FBQSxFQUFJO0lBQ2IsSUFBSSxDQUFDQyxTQUFTLEdBQUcsRUFBRTtFQUNyQjtFQUVBQyxZQUFZQSxDQUFFQyxPQUFPLEVBQUU7SUFDckIsS0FBSyxNQUFNQyxHQUFHLElBQUksSUFBSSxDQUFDSCxTQUFTLEVBQUU7TUFDaENFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxFQUFFLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUNFLElBQUksQ0FBQztJQUM5QjtFQUNGO0FBQ0Y7QUFFQSxLQUFLLE1BQU1ELEVBQUUsSUFBSVAsUUFBUSxFQUFFO0VBQ3pCO0VBQ0FDLEtBQUssQ0FBQ1EsU0FBUyxDQUFDRixFQUFFLENBQUMsR0FBRyxZQUFtQjtJQUFBLFNBQUFHLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQU5KLElBQUksT0FBQUssS0FBQSxDQUFBSCxJQUFBLEdBQUFJLElBQUEsTUFBQUEsSUFBQSxHQUFBSixJQUFBLEVBQUFJLElBQUE7TUFBSk4sSUFBSSxDQUFBTSxJQUFBLElBQUFILFNBQUEsQ0FBQUcsSUFBQTtJQUFBO0lBQ3JDLElBQUksQ0FBQ1gsU0FBUyxDQUFDWSxJQUFJLENBQUM7TUFBRVIsRUFBRTtNQUFFQztJQUFLLENBQUMsQ0FBQztJQUNqQyxPQUFPLElBQUk7RUFDYixDQUFDO0FBQ0g7QUFHQVEsTUFBTSxDQUFDQyxPQUFPLEdBQUdoQixLQUFLIiwiaWdub3JlTGlzdCI6W119","import saveAs from 'file-saver';\nimport domtoimage from 'dom-to-image';\nimport sanitize from 'sanitize-filename';\nimport slugify from 'slugify';\n\nconst utils = {\n // run delayed function such as on resize\n debounce: function(func){\n var timer;\n return function(event){\n if(timer){\n clearTimeout(timer);\n }\n timer = setTimeout(func,100,event);\n };\n },\n // compare states and return percentile scores\n percentile: function(arr, key, val){\n let count = 0;\n arr.forEach(v => {\n if (v[key] < val) {\n count++;\n } else if (v[key] == val) {\n count += 0.5;\n }\n });\n return 100 * count / arr.length;\n },\n // save dom node as image\n domNodeImg: function(selector, title){\n let element = document.querySelector(selector);\n let filename = slugify(sanitize(title)).toLowerCase();\n\n domtoimage.toBlob(element).then(function(blob){\n window.saveAs(blob, `${filename}.png`);\n });\n },\n // fetch PDF\n statePdf: function(url, fn){\n let filename = null;\n fetch(url, {\n method: 'GET'\n })\n .then(res => {\n const disposition = res.headers.get('Content-Disposition');\n filename = disposition.split(/;(.+)/)[1].split(/=(.+)/)[1];\n if(filename.toLowerCase().startsWith(\"utf-8''\")){\n filename = decodeURIComponent(filename.replace(\"utf-8''\", ''));\n } else {\n filename = filename.replace(/['\"]/g, '');\n }\n return res.blob();\n })\n .then(blob => {\n filename = filename.replaceAll(\"_\",\"\");\n filename = filename.replace(/;.*/g, '');\n window.saveAs(blob, `${filename}.pdf`);\n fn();\n });\n }\n};\nexport default utils;\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\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\n return values;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\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) ticks[i] = (start + i) * step;\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) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n 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\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","import transpose from \"./transpose\";\n\nexport default function() {\n return transpose(arguments);\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {customEvent, event, mouse, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant\";\nimport BrushEvent from \"./event\";\nimport noevent, {nopropagation} from \"./noevent\";\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nvar X = {\n name: \"x\",\n handles: [\"e\", \"w\"].map(type),\n input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"].map(type),\n input: function(xy) { return xy; },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n return brush(X);\n}\n\nexport function brushY() {\n return brush(Y);\n}\n\nexport default function() {\n return brush(XY);\n}\n\nfunction brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n listeners = dispatch(brush, \"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\")\n .on(\"mousedown.brush touchstart.brush\", started);\n }\n\n brush.move = function(group, selection) {\n if (group.selection) {\n group\n .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && empty(selection1) ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 && selection1 ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 == null || empty(selection1) ? null : selection1;\n redraw.call(that);\n emit.start().brush().end();\n });\n }\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args) {\n return that.__brush.emitter || new Emitter(that, args);\n }\n\n function Emitter(that, args) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function() {\n if (this.starting) this.starting = false, this.emit(\"start\");\n return this;\n },\n brush: function() {\n this.emit(\"brush\");\n return this;\n },\n end: function() {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n return this;\n },\n emit: function(type) {\n customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function started() {\n if (event.touches) { if (event.changedTouches.length < event.touches.length) return noevent(); }\n else if (touchending) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx,\n dy,\n moving,\n shifting = signX && signY && event.shiftKey,\n lockX,\n lockY,\n point0 = mouse(that),\n point = point0,\n emit = emitter(that, arguments).beforestart();\n\n if (type === \"overlay\") {\n state.selection = selection = [\n [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n ];\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n group\n .on(\"touchmove.brush\", moved, true)\n .on(\"touchend.brush touchcancel.brush\", ended, true);\n } else {\n var view = select(event.view)\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n\n dragDisable(event.view);\n }\n\n nopropagation();\n interrupt(that);\n redraw.call(that);\n emit.start();\n\n function moved() {\n var point1 = mouse(that);\n if (shifting && !lockX && !lockY) {\n if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n else lockX = true;\n }\n point = point1;\n moving = true;\n noevent();\n move();\n }\n\n function move() {\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush();\n }\n }\n\n function ended() {\n nopropagation();\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n group.on(\"touchmove.brush touchend.brush touchcancel.brush\", null);\n } else {\n dragEnable(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end();\n }\n\n function keydowned() {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move();\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n\n function keyupped() {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move();\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move();\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = extent.apply(this, arguments);\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\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\n return values;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\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) ticks[i] = (start + i) * step;\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) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n 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\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min;\n\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\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\n return min;\n}\n","export var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\n","export var slice = Array.prototype.slice;\n","import {range} from \"d3-array\";\nimport {max, tau} from \"./math\";\n\nfunction compareValue(compare) {\n return function(a, b) {\n return compare(\n a.source.value + a.target.value,\n b.source.value + b.target.value\n );\n };\n}\n\nexport default function() {\n var padAngle = 0,\n sortGroups = null,\n sortSubgroups = null,\n sortChords = null;\n\n function chord(matrix) {\n var n = matrix.length,\n groupSums = [],\n groupIndex = range(n),\n subgroupIndex = [],\n chords = [],\n groups = chords.groups = new Array(n),\n subgroups = new Array(n * n),\n k,\n x,\n x0,\n dx,\n i,\n j;\n\n // Compute the sum.\n k = 0, i = -1; while (++i < n) {\n x = 0, j = -1; while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(range(n));\n k += x;\n }\n\n // Sort groups…\n if (sortGroups) groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n\n // Sort subgroups…\n if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n\n // Convert the sum to scaling factor for [0, 2pi].\n // TODO Allow start and end angle to be specified?\n // TODO Allow padding to be specified as percentage?\n k = max(0, tau - padAngle * n) / k;\n dx = k ? padAngle : tau / n;\n\n // Compute the start and end angle for each group and subgroup.\n // Note: Opera has a bug reordering object literal properties!\n x = 0, i = -1; while (++i < n) {\n x0 = x, j = -1; while (++j < n) {\n var di = groupIndex[i],\n dj = subgroupIndex[di][j],\n v = matrix[di][dj],\n a0 = x,\n a1 = x += v * k;\n subgroups[dj * n + di] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += dx;\n }\n\n // Generate chords for each (non-empty) subgroup-subgroup link.\n i = -1; while (++i < n) {\n j = i - 1; while (++j < n) {\n var source = subgroups[j * n + i],\n target = subgroups[i * n + j];\n if (source.value || target.value) {\n chords.push(source.value < target.value\n ? {source: target, target: source}\n : {source: source, target: target});\n }\n }\n }\n\n return sortChords ? chords.sort(sortChords) : chords;\n }\n\n chord.padAngle = function(_) {\n return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n };\n\n chord.sortGroups = function(_) {\n return arguments.length ? (sortGroups = _, chord) : sortGroups;\n };\n\n chord.sortSubgroups = function(_) {\n return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n };\n\n chord.sortChords = function(_) {\n return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n };\n\n return chord;\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.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,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\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\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\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\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\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),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\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\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\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\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\nexport default path;\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.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) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) 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) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.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\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar Kn = 18,\n Xn = 0.950470, // D65 standard referent\n Yn = 1,\n Zn = 1.088830,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var b = rgb2xyz(o.r),\n a = rgb2xyz(o.g),\n l = rgb2xyz(o.b),\n x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Rgb(\n xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2xyz(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\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\n return columns;\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) 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\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n 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\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\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 if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n })).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(text) {\n return text == null ? \"\"\n : reFormat.test(text += \"\") ? \"\\\"\" + text.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : text;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatRows = tsv.formatRows;\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.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) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) 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) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.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\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","import {dispatch} from \"d3-dispatch\";\nimport {map} from \"d3-collection\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\");\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick() {\n var i, n = nodes.length, node;\n\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.each(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDefault from \"./formatDefault\";\nimport formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"\": formatDefault,\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x, p) {\n x = x.toPrecision(p);\n\n out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (x[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n case \"e\": break out;\n default: if (i0 > 0) i0 = 0; break;\n }\n }\n\n return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n}\n","import formatTypes from \"./formatTypes\";\n\n// [[fill]align][sign][symbol][0][width][,][.precision][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n var match,\n fill = match[1] || \" \",\n align = match[2] || \">\",\n sign = match[3] || \"-\",\n symbol = match[4] || \"\",\n zero = !!match[5],\n width = match[6] && +match[6],\n comma = !!match[7],\n precision = match[8] && +match[8].slice(1),\n type = match[9] || \"\";\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // Map invalid types to the default format.\n else if (!formatTypes[type]) type = \"\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n this.fill = fill;\n this.align = align;\n this.sign = sign;\n this.symbol = symbol;\n this.zero = zero;\n this.width = width;\n this.comma = comma;\n this.precision = precision;\n this.type = type;\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + this.type;\n};\n","export default function(x) {\n return x;\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n type = specifier.type;\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = !type || /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? (type ? 6 : 12)\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\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// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.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) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar 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) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar 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) 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) 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) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport 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\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction 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\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport 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\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport 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\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport 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","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar 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) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\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°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\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])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\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) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, degrees, epsilon, epsilon2, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar 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\n// Arithmetic mean of Cartesian vectors.\nfunction 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\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction 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\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n 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\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = 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\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = sqrt(cx * cx + cy * cy + cz * cz),\n 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\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n stream(object, centroidStream);\n\n var x = X2,\n y = Y2,\n z = Z2,\n m = x * x + y * y + z * z;\n\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) 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) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose\";\nimport {asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport 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\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n 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\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n 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\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\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\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) 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\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction 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\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n 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\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop\";\n\nexport default function() {\n var lines = [],\n 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) 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","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction 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\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.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\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) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\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\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) 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) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\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\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n 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","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s 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\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\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer\";\nimport clipRejoin from \"./rejoin\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\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 = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) 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\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction 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","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\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.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n 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 } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) 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\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n 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\nfunction 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 } 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 } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian\";\nimport {circleStream} from \"../circle\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math\";\nimport pointEqual from \"../pointEqual\";\nimport clip from \"./index\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\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],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) 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 } 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 } 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 } 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) 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\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\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),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\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\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,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math\";\nimport clipBuffer from \"./buffer\";\nimport clipLine from \"./line\";\nimport clipRejoin from \"./rejoin\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\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 stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\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\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n 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\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\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) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\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\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = 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\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\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_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) 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 } else {\n if (v && v_) 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_))],\n 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) activeStream.lineEnd();\n clean = false;\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\n return clipStream;\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math\";\n\nexport default function(a, b) {\n var x0 = a[0] * radians,\n y0 = a[1] * radians,\n x1 = b[0] * radians,\n y1 = b[1] * radians,\n cy0 = cos(y0),\n sy0 = sin(y0),\n cy1 = cos(y1),\n sy1 = sin(y1),\n kx0 = cy0 * cos(x0),\n ky0 = cy0 * sin(x0),\n kx1 = cy1 * cos(x1),\n ky1 = cy1 * sin(x1),\n d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n k = sin(d);\n\n var interpolate = d ? function(t) {\n var B = sin(t *= d) / k,\n A = sin(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n 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\n interpolate.distance = d;\n\n return interpolate;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","export default function(x) {\n return x;\n}\n","import noop from \"../noop\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar 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\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\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.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math\";\nimport noop from \"../noop\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.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) 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","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) 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) 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) this._circle = circle(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 } else {\n return null;\n }\n }\n};\n\nfunction circle(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","import identity from \"../identity\";\nimport stream from \"../stream\";\nimport pathArea from \"./area\";\nimport pathBounds from \"./bounds\";\nimport pathCentroid from \"./centroid\";\nimport PathContext from \"./context\";\nimport pathMeasure from \"./measure\";\nimport PathString from \"./string\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.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","import {default as geoStream} from \"../stream\";\nimport boundsStream from \"../path/bounds\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n 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\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction 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\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n 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\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\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\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\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\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\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\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport clipRectangle from \"../clip/rectangle\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {degrees, radians, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction 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\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n 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,\n cacheStream;\n\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\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\n function projectTransform(x, y) {\n return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\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\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\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\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\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\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math\";\nimport {projectionMutator} from \"./index\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\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\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\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import {epsilon} from \"../math\";\nimport albers from \"./albers\";\nimport conicEqualArea from \"./conicEqualArea\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\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\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n 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\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\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n 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\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\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\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\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\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\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import conicEqualArea from \"./conicEqualArea\";\n\nexport default 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","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math\";\nimport rotation from \"../rotation\";\nimport projection from \"./index\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\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\n function reclip() {\n var k = pi * scale(),\n 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\n return reclip();\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import projection from \"./index\";\nimport {abs, epsilon} from \"../math\";\n\nexport 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\nnaturalEarth1Raw.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\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport 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\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math\";\nimport {mercatorProjection} from \"./mercator\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count\";\nimport node_each from \"./each\";\nimport node_eachBefore from \"./eachBefore\";\nimport node_eachAfter from \"./eachAfter\";\nimport node_sum from \"./sum\";\nimport node_sort from \"./sort\";\nimport node_path from \"./path\";\nimport node_ancestors from \"./ancestors\";\nimport node_descendants from \"./descendants\";\nimport node_leaves from \"./leaves\";\nimport node_links from \"./links\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) 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\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.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","export default function(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) 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","export default function(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) 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","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n 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\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n 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","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","export default function(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","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\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","import {Node} from \"./hierarchy/index\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\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.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction 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\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-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n 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\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction 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\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\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\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\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,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n 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\n return root;\n }\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,\n siblings = v.parent.children,\n 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 } else {\n v.z = midpoint;\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\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\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,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n 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\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\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\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\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","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; 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\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) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\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) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\nimport {phi, squarifyRatio} from \"./squarify\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n}));\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.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,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\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\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\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\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\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;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\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\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\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\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\nexport default path;\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, inherit the existing extent.\n if (x1 < x0) x0 = this._x0, x1 = this._x1;\n if (y1 < y0) y0 = this._y0, y1 = this._y1;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else if (x0 > x || x > x1 || y0 > y || y > y1) {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {\n case 0: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);\n break;\n }\n case 1: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);\n break;\n }\n case 2: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);\n break;\n }\n case 3: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);\n break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n // If the quadtree covers the point already, just return.\n else return this;\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\nimport tree_y, {defaultY} from \"./y\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export var slice = [].slice;\n","import {slice} from \"./array\";\n\nvar noabort = {};\n\nfunction Queue(size) {\n this._size = size;\n this._call =\n this._error = null;\n this._tasks = [];\n this._data = [];\n this._waiting =\n this._active =\n this._ended =\n this._start = 0; // inside a synchronous task callback?\n}\n\nQueue.prototype = queue.prototype = {\n constructor: Queue,\n defer: function(callback) {\n if (typeof callback !== \"function\") throw new Error(\"invalid callback\");\n if (this._call) throw new Error(\"defer after await\");\n if (this._error != null) return this;\n var t = slice.call(arguments, 1);\n t.push(callback);\n ++this._waiting, this._tasks.push(t);\n poke(this);\n return this;\n },\n abort: function() {\n if (this._error == null) abort(this, new Error(\"abort\"));\n return this;\n },\n await: function(callback) {\n if (typeof callback !== \"function\") throw new Error(\"invalid callback\");\n if (this._call) throw new Error(\"multiple await\");\n this._call = function(error, results) { callback.apply(null, [error].concat(results)); };\n maybeNotify(this);\n return this;\n },\n awaitAll: function(callback) {\n if (typeof callback !== \"function\") throw new Error(\"invalid callback\");\n if (this._call) throw new Error(\"multiple await\");\n this._call = callback;\n maybeNotify(this);\n return this;\n }\n};\n\nfunction poke(q) {\n if (!q._start) {\n try { start(q); } // let the current task complete\n catch (e) {\n if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously\n else if (!q._data) throw e; // await callback errored synchronously\n }\n }\n}\n\nfunction start(q) {\n while (q._start = q._waiting && q._active < q._size) {\n var i = q._ended + q._active,\n t = q._tasks[i],\n j = t.length - 1,\n c = t[j];\n t[j] = end(q, i);\n --q._waiting, ++q._active;\n t = c.apply(null, t);\n if (!q._tasks[i]) continue; // task finished synchronously\n q._tasks[i] = t || noabort;\n }\n}\n\nfunction end(q, i) {\n return function(e, r) {\n if (!q._tasks[i]) return; // ignore multiple callbacks\n --q._active, ++q._ended;\n q._tasks[i] = null;\n if (q._error != null) return; // ignore secondary errors\n if (e != null) {\n abort(q, e);\n } else {\n q._data[i] = r;\n if (q._waiting) poke(q);\n else maybeNotify(q);\n }\n };\n}\n\nfunction abort(q, e) {\n var i = q._tasks.length, t;\n q._error = e; // ignore active callbacks\n q._data = undefined; // allow gc\n q._waiting = NaN; // prevent starting\n\n while (--i >= 0) {\n if (t = q._tasks[i]) {\n q._tasks[i] = null;\n if (t.abort) {\n try { t.abort(); }\n catch (e) { /* ignore */ }\n }\n }\n }\n\n q._active = NaN; // allow notification\n maybeNotify(q);\n}\n\nfunction maybeNotify(q) {\n if (!q._active && q._call) {\n var d = q._data;\n q._data = undefined; // allow gc\n q._call(q._error, d);\n }\n}\n\nexport default function queue(concurrency) {\n if (concurrency == null) concurrency = Infinity;\n else if (!((concurrency = +concurrency) >= 1)) throw new Error(\"invalid concurrency\");\n return new Queue(concurrency);\n}\n","export default function() {\n return Math.random();\n}\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomNormal(source) {\n function randomNormal(mu, sigma) {\n var x, r;\n mu = mu == null ? 0 : +mu;\n sigma = sigma == null ? 1 : +sigma;\n return function() {\n var y;\n\n // If available, use the second previously-generated uniform random.\n if (x != null) y = x, x = null;\n\n // Otherwise, generate a new x and y.\n else do {\n x = source() * 2 - 1;\n y = source() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n }\n\n randomNormal.source = sourceRandomNormal;\n\n return randomNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomUniform(source) {\n function randomUniform(min, max) {\n min = min == null ? 0 : +min;\n max = max == null ? 1 : +max;\n if (arguments.length === 1) max = min, min = 0;\n else max -= min;\n return function() {\n return source() * max + min;\n };\n }\n\n randomUniform.source = sourceRandomUniform;\n\n return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomIrwinHall(source) {\n function randomIrwinHall(n) {\n return function() {\n for (var sum = 0, i = 0; i < n; ++i) sum += source();\n return sum;\n };\n }\n\n randomIrwinHall.source = sourceRandomIrwinHall;\n\n return randomIrwinHall;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport normal from \"./normal\";\n\nexport default (function sourceRandomLogNormal(source) {\n function randomLogNormal() {\n var randomNormal = normal.source(source).apply(this, arguments);\n return function() {\n return Math.exp(randomNormal());\n };\n }\n\n randomLogNormal.source = sourceRandomLogNormal;\n\n return randomLogNormal;\n})(defaultSource);\n","import {map} from \"d3-collection\";\nimport {dispatch} from \"d3-dispatch\";\n\nexport default function(url, callback) {\n var request,\n event = dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n mimeType,\n headers = map(),\n xhr = new XMLHttpRequest,\n user = null,\n password = null,\n response,\n responseType,\n timeout = 0;\n\n // If IE does not support CORS, use XDomainRequest.\n if (typeof XDomainRequest !== \"undefined\"\n && !(\"withCredentials\" in xhr)\n && /^(http(s)?:)?\\/\\//.test(url)) xhr = new XDomainRequest;\n\n \"onload\" in xhr\n ? xhr.onload = xhr.onerror = xhr.ontimeout = respond\n : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };\n\n function respond(o) {\n var status = xhr.status, result;\n if (!status && hasResponse(xhr)\n || status >= 200 && status < 300\n || status === 304) {\n if (response) {\n try {\n result = response.call(request, xhr);\n } catch (e) {\n event.call(\"error\", request, e);\n return;\n }\n } else {\n result = xhr;\n }\n event.call(\"load\", request, result);\n } else {\n event.call(\"error\", request, o);\n }\n }\n\n xhr.onprogress = function(e) {\n event.call(\"progress\", request, e);\n };\n\n request = {\n header: function(name, value) {\n name = (name + \"\").toLowerCase();\n if (arguments.length < 2) return headers.get(name);\n if (value == null) headers.remove(name);\n else headers.set(name, value + \"\");\n return request;\n },\n\n // If mimeType is non-null and no Accept header is set, a default is used.\n mimeType: function(value) {\n if (!arguments.length) return mimeType;\n mimeType = value == null ? null : value + \"\";\n return request;\n },\n\n // Specifies what type the response value should take;\n // for instance, arraybuffer, blob, document, or text.\n responseType: function(value) {\n if (!arguments.length) return responseType;\n responseType = value;\n return request;\n },\n\n timeout: function(value) {\n if (!arguments.length) return timeout;\n timeout = +value;\n return request;\n },\n\n user: function(value) {\n return arguments.length < 1 ? user : (user = value == null ? null : value + \"\", request);\n },\n\n password: function(value) {\n return arguments.length < 1 ? password : (password = value == null ? null : value + \"\", request);\n },\n\n // Specify how to convert the response content to a specific type;\n // changes the callback value on \"load\" events.\n response: function(value) {\n response = value;\n return request;\n },\n\n // Alias for send(\"GET\", …).\n get: function(data, callback) {\n return request.send(\"GET\", data, callback);\n },\n\n // Alias for send(\"POST\", …).\n post: function(data, callback) {\n return request.send(\"POST\", data, callback);\n },\n\n // If callback is non-null, it will be used for error and load events.\n send: function(method, data, callback) {\n xhr.open(method, url, true, user, password);\n if (mimeType != null && !headers.has(\"accept\")) headers.set(\"accept\", mimeType + \",*/*\");\n if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });\n if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);\n if (responseType != null) xhr.responseType = responseType;\n if (timeout > 0) xhr.timeout = timeout;\n if (callback == null && typeof data === \"function\") callback = data, data = null;\n if (callback != null && callback.length === 1) callback = fixCallback(callback);\n if (callback != null) request.on(\"error\", callback).on(\"load\", function(xhr) { callback(null, xhr); });\n event.call(\"beforesend\", request, xhr);\n xhr.send(data == null ? null : data);\n return request;\n },\n\n abort: function() {\n xhr.abort();\n return request;\n },\n\n on: function() {\n var value = event.on.apply(event, arguments);\n return value === event ? request : value;\n }\n };\n\n if (callback != null) {\n if (typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n return request.get(callback);\n }\n\n return request;\n}\n\nfunction fixCallback(callback) {\n return function(error, xhr) {\n callback(error == null ? xhr : null);\n };\n}\n\nfunction hasResponse(xhr) {\n var type = xhr.responseType;\n return type && type !== \"text\"\n ? xhr.response // null on error\n : xhr.responseText; // \"\" on error\n}\n","import defaultSource from \"./defaultSource\";\nimport irwinHall from \"./irwinHall\";\n\nexport default (function sourceRandomBates(source) {\n function randomBates(n) {\n var randomIrwinHall = irwinHall.source(source)(n);\n return function() {\n return randomIrwinHall() / n;\n };\n }\n\n randomBates.source = sourceRandomBates;\n\n return randomBates;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomExponential(source) {\n function randomExponential(lambda) {\n return function() {\n return -Math.log(1 - source()) / lambda;\n };\n }\n\n randomExponential.source = sourceRandomExponential;\n\n return randomExponential;\n})(defaultSource);\n","import request from \"./request\";\n\nexport default function(defaultMimeType, response) {\n return function(url, callback) {\n var r = request(url).mimeType(defaultMimeType).response(response);\n if (callback != null) {\n if (typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n return r.get(callback);\n }\n return r;\n };\n}\n","import type from \"./type\";\n\nexport default type(\"application/json\", function(xhr) {\n return JSON.parse(xhr.responseText);\n});\n","import type from \"./type\";\n\nexport default type(\"text/html\", function(xhr) {\n return document.createRange().createContextualFragment(xhr.responseText);\n});\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\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\n return columns;\n}\n\nfunction 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\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + 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\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) 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\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n 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\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\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 if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\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\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\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\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","import type from \"./type\";\n\nexport default type(\"text/plain\", function(xhr) {\n return xhr.responseText;\n});\n","import type from \"./type\";\n\nexport default type(\"application/xml\", function(xhr) {\n var xml = xhr.responseXML;\n if (!xml) throw new Error(\"parse error\");\n return xml;\n});\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","import request from \"./request\";\n\nexport default function(defaultMimeType, parse) {\n return function(url, row, callback) {\n if (arguments.length < 3) callback = row, row = null;\n var r = request(url).mimeType(defaultMimeType);\n r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };\n r.row(row);\n return callback ? r.get(callback) : r;\n };\n}\n\nfunction responseOf(parse, row) {\n return function(request) {\n return parse(request.responseText, row);\n };\n}\n","import {csvParse} from \"d3-dsv\";\nimport dsv from \"./dsv\";\n\nexport default dsv(\"text/csv\", csvParse);\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {tsvParse} from \"d3-dsv\";\nimport dsv from \"./dsv\";\n\nexport default dsv(\"text/tab-separated-values\", tsvParse);\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": formatDecimal,\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.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)) 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: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.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\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","export var slice = Array.prototype.slice;\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n 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","import {pi, tau} from \"../math\";\n\nexport default {\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","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n 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,\n c = Math.cos(a),\n 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","export default function() {}\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\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,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n 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","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.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: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) 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: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.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: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.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)) 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: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\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\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.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: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) 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: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); 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\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.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: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); 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\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.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)) 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: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); 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\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n 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\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n 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\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.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: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\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\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.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\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\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\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.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)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\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\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\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.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n 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\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\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\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.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: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.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\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.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,\n y = this._y,\n n = x.length;\n\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 } else {\n var px = controlPoints(x),\n 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\n if (this._line || (this._line !== 0 && n === 1)) 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\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\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) 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) 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) 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) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.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) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) 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: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); 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 } 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\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport 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\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\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 } 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\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 } 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 } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\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\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\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 } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) 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 } 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\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport 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 } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\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) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\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","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport 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),\n array = new Array(m);\n for (j = 0; j < m; ++j) 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) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\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\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\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,\n 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\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\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) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\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","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\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\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\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\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\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\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n 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\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; 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 } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\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\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\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\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\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 } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\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\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\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\n return triangles;\n },\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\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\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)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n return node.__zoom || identity;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant\";\nimport ZoomEvent from \"./event\";\nimport {Transform, identity} from \"./transform\";\nimport noevent, {nopropagation} from \"./noevent\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultExtent() {\n var e = this, w, h;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n w = e.width.baseVal.value;\n h = e.height.baseVal.value;\n } else {\n w = e.clientWidth;\n h = e.clientHeight;\n }\n return [[0, 0], [w, h]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta() {\n return -event.deltaY * (event.deltaMode ? 120 : 1) / 500;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n gestures = [],\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled)\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n });\n };\n\n zoom.scaleTo = function(selection, k) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = centroid(e),\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n });\n };\n\n zoom.translateBy = function(selection, x, y) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n });\n };\n\n zoom.translateTo = function(selection, x, y) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p = centroid(e);\n return constrain(identity.translate(p[0], p[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n });\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, center) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args),\n e = extent.apply(that, args),\n p = center || centroid(e),\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args) {\n for (var i = 0, n = gestures.length, g; i < n; ++i) {\n if ((g = gestures[i]).that === that) {\n return g;\n }\n }\n return new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.index = -1;\n this.active = 0;\n this.extent = extent.apply(that, args);\n }\n\n Gesture.prototype = {\n start: function() {\n if (++this.active === 1) {\n this.index = gestures.push(this) - 1;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n gestures.splice(this.index, 1);\n this.index = -1;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function wheeled() {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = mouse(this);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent();\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = mouse(this),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation();\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved() {\n noevent();\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped() {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent();\n g.end();\n }\n }\n\n function dblclicked() {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = mouse(this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);\n\n noevent();\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);\n else select(this).call(zoom.transform, t1);\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n started,\n n = touches.length, i, t, p;\n\n nopropagation();\n for (i = 0; i < n; ++i) {\n t = touches[i], p = touch(this, touches, t.identifier);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true;\n else if (!g.touch1) g.touch1 = p;\n }\n\n // If this is a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (touchstarting) {\n touchstarting = clearTimeout(touchstarting);\n if (!g.touch1) {\n g.end();\n p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n return;\n }\n }\n\n if (started) {\n touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved() {\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent();\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = touch(this, touches, t.identifier);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended() {\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation();\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else g.end();\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n return zoom;\n}\n","import superagent from 'superagent';\n\nconst api = {\n // get manifest as flat array, or pass \"/metrics\" to return hierarchical array\n getManifest: async function(manifest = '/metrics'){\n var url = '/wp-json/wp/v2/manifests'+manifest;\n async function fetchManifest(){\n return superagent.get(url);\n }\n return await fetchManifest();\n },\n // returns state data based on passed args\n getStateData: async function(args){\n async function fetchData(url){\n return superagent.get(url);\n }\n var url = new URL(window.location.origin + '/wp-json/wp/v2/states');\n Object\n .keys(args)\n .forEach(key => url.searchParams.append(key, args[key]));\n return await fetchData(url);\n }\n};\n\nexport default api;\n","import * as d3 from 'd3';\n// import d3 from './d3-import.js';\nimport Handlebars from 'handlebars';\nimport api from './api';\nimport utils from './utils';\n\nconst map = {\n manifest: null,\n stateCount: 0,\n mapEl: null,\n statePopup: null,\n\n // get manifest data and attach listeners\n init: function(){\n api.getManifest().then(res => {\n this.manifest = res.body;\n });\n this.mapEl = document.getElementById('map');\n this.renderMap(this.mapEl);\n document.body.addEventListener('click', function(e){\n if(e.target.classList.value == 'close-card' || (e.target.closest('.profile-card') == null && e.target.closest('path') == null && e.target.closest('circle') == null)){\n if(document.querySelector('.state-popup.open')){\n document.querySelector('.state-popup.open').classList.remove('open');\n let mapSvg = document.querySelector('.state-index-map');\n mapSvg.classList.remove('state-selected');\n mapSvg.querySelector('.selected').classList.remove('selected');\n }\n }\n });\n window.addEventListener(\"resize\",utils.debounce(function(e){\n let mapEl = document.getElementById('map');\n let mapWidth = mapEl.getBoundingClientRect().width;\n let mapHeight = mapWidth * 0.5625;\n d3.select(\"#map svg.state-index-map\").transition().attr(\"height\", mapHeight).attr(\"width\", mapWidth);\n d3.select(\"#map svg.legend\").transition().attr(\"height\", 24).attr(\"width\", (mapWidth));\n }));\n },\n\n // get map json data and draw map based on saved geojson' file containing state shapes\n renderMap: function(mapEl){\n if(!mapEl){\n return false;\n }\n let stateMetricsDataUrl = \"/wp-json/wp/v2/states?fields=dcwsi_ind_i,wsp_ind_i,dcwe_ind_i\";\n\n let mapWidth = mapEl.getBoundingClientRect().width;\n mapWidth = (mapWidth == 0) ? 790 : mapWidth;\n let mapHeight = mapWidth * 0.5625;\n\n let projection = d3.geoAlbersUsa()\n .translate([mapWidth/2, mapHeight/2])\n .scale([(mapWidth < 1050 ? mapWidth : (mapWidth*1.2))]);\n\n let path = d3.geoPath()\n .projection(projection);\n\n let color = d3.scaleQuantize()\n .domain([1, 51])\n .range([\"#1d9ad6\",\"#00b0ab\",\"#dcab27\",\"#d48028\"]);\n\n let legendText = Object.values(JSON.parse(statePercentiles));\n\n let svg = d3.select(mapEl)\n .append(\"svg\")\n .attr(\"class\", \"state-index-map\")\n .attr(\"preserveAspectRatio\",\"xMinYMin\")\n .attr(\"width\", mapWidth)\n .attr(\"height\", mapHeight)\n .attr(\"viewBox\", \"0 0 \" + mapWidth + \" \" + mapHeight);\n\n d3.json(stateMetricsDataUrl, (data) => {\n let states = data.data;\n this.stateCount = states.length;\n let geoJson = assetPath+'/us-states.json';\n let mapInsetDC = {\n name: 'District of Columbia',\n coords: projection([-77.03637,38.89511]),\n dcwsi_ind_i: null,\n wsp_ind_i: null,\n dcwe_ind_i: null,\n score_color: null,\n score_tier: null\n };\n d3.json(geoJson, (json) => {\n states.forEach(function(state){\n for(var i = 0; i < json.features.length; i++){\n let jsonState = json.features[i].properties.name;\n if(state.name == jsonState){\n json.features[i].properties.state_url = state.url;\n json.features[i].properties.dcwsi_ind_i = state.dcwsi_ind_i;\n json.features[i].properties.wsp_ind_i = state.wsp_ind_i;\n json.features[i].properties.dcwe_ind_i = state.dcwe_ind_i;\n if(jsonState == 'District of Columbia'){\n mapInsetDC.state_url = state.url;\n mapInsetDC.dcwsi_ind_i = state.dcwsi_ind_i;\n mapInsetDC.wsp_ind_i = state.wsp_ind_i;\n mapInsetDC.dcwe_ind_i = state.dcwe_ind_i;\n }\n break;\n }\n }\n });\n\n svg.selectAll(\"path\")\n .data(json.features)\n .enter().append(\"path\")\n .attr(\"d\", path)\n .style(\"stroke\", \"rgba(255,255,255,0.75)\")\n .style(\"stroke-width\", \"1\")\n .style(\"fill\", (d,i) => {\n let score = d.properties.dcwsi_ind_i;\n if(score){\n let scoreColor = color(score);\n let legendIndex = Math.abs(Math.ceil((4*(score/this.stateCount))-(1/this.stateCount)-1));\n json.features[i].properties.score_color = scoreColor;\n json.features[i].properties.score_tier = legendText[legendIndex];\n if(d.properties.name == 'District of Columbia'){\n mapInsetDC.score_color = scoreColor;\n mapInsetDC.score_tier = legendText[legendIndex];\n }\n\n return scoreColor;\n } else {\n return '#5D6367';\n }\n })\n .on('mouseup', function(d){\n map.stateClick(this,d.properties);\n });\n\n this.statePopup = d3.select(mapEl)\n .append(\"div\")\n .attr(\"class\", \"state-popup\");\n\n //draw the DC circle to right of map\n // let dcInset = d3.select('.state-index-map')\n // .append(\"circle\")\n // .attr(\"class\", \"dc-inset\")\n // .attr(\"cx\", mapInsetDC.coords[0])\n // .attr(\"cy\", mapInsetDC.coords[1])\n // .attr(\"r\", 12)\n // .style(\"fill\", mapInsetDC.score_color)\n // .style(\"transform\", \"translate(65px,0)\")\n // .on('mouseup', function(d){\n // map.stateClick(this,mapInsetDC);\n // });\n\n let dcStar = d3.select('.state-index-map')\n .append(\"path\")\n .attr(\"class\", \"dc-star\")\n .attr(\"d\", \"M12,0 L14.58,6.17 L21.12,6.79 L16.47,11.24 L17.68,17.65 L12,14 L6.32,17.65 L7.53,11.24 L2.88,6.79 L9.42,6.17 L12,0\")\n .attr(\"transform\", \"translate(\" + (mapInsetDC.coords[0] + 65) + \",\" + (mapInsetDC.coords[1] - 10) + \")\")\n .attr(\"fill\", mapInsetDC.score_color)\n .style(\"cursor\", \"pointer\")\n .on('mouseup', function(d) {\n console.log('Clicked on the star element');\n map.stateClick(this, mapInsetDC);\n });\n\n d3.select('.state-index-map')\n .append(\"text\")\n .data([\"Washington D.C.\"])\n .attr(\"x\", mapInsetDC.coords[0])\n .attr(\"y\", mapInsetDC.coords[1])\n .attr(\"dy\", \".4em\")\n .attr(\"font-size\", \"11px\")\n .style(\"transform\", \"translate(88px,0)\")\n .text(function(d){\n return d;\n });\n\n //draw color legend\n let legend = d3.select(mapEl)\n .append(\"div\")\n .append(\"div\")\n .attr(\"class\", \"legend\")\n .attr(\"width\", (mapWidth*.3))\n .selectAll(\".legend div\")\n .data([13,25,38,51])\n .enter().append(\"div\");\n\n legend.append(\"span\")\n .attr(\"class\", \"square\")\n .style(\"background-color\", color);\n\n legend.append(\"span\")\n .data(legendText)\n .text(function(d){\n return d;\n });\n });\n });\n },\n\n //handle state click and display profile popup and position\n stateClick: function(path,data){\n let [clickX, clickY] = d3.mouse(path);\n let pathRect = path.getBoundingClientRect();\n let cardWidth = parseInt(window.getComputedStyle(this.statePopup.node()).getPropertyValue(\"width\").replace(\"px\",\"\"));\n let cardHeight = parseInt(window.getComputedStyle(document.querySelector('.state-popup')).getPropertyValue('min-height').replace(\"px\",\"\"));\n let x = 0;\n if(clickX > (this.mapEl.getBoundingClientRect().width/2)){\n x = parseInt(pathRect.x - this.mapEl.getBoundingClientRect().x - cardWidth - 40);\n } else {\n x = parseInt((pathRect.x - this.mapEl.getBoundingClientRect().x + pathRect.width) + 40);\n }\n\n let barOffset = document.querySelector('.subscribe-bar') ? document.querySelector('.subscribe-bar').scrollHeight : 0;\n\n let y = clickY;\n if(this.mapEl.getBoundingClientRect().y > barOffset){\n // map is scrolled within view, calculate to center of state\n if(pathRect.y + (pathRect.height/2) > (cardHeight/2)){\n y = parseInt(pathRect.y + (pathRect.height/2) - ((cardHeight/2) - barOffset));\n } else {\n // upper states just use card height/2\n y = parseInt(cardHeight/2);\n }\n } else if(this.mapEl.getBoundingClientRect().y > 0){\n // map is behind newsletter bar, need to handle offset to keep card visible\n if(pathRect.y + (pathRect.height/2) - (barOffset - this.mapEl.getBoundingClientRect().y) > (cardHeight/2)){\n y = parseInt(pathRect.y + (pathRect.height/2) - (barOffset - this.mapEl.getBoundingClientRect().y));\n } else {\n y = parseInt((cardHeight/2) + barOffset);\n }\n } else {\n // map is only partially visible, try to keep card visible and as close to aligned with state center as is reasonable\n if(pathRect.y + (pathRect.height/2) - (barOffset + this.mapEl.getBoundingClientRect().y) > (cardHeight/2)){\n y = parseInt((barOffset - this.mapEl.getBoundingClientRect().y) + pathRect.y + (pathRect.height/2));\n } else {\n y = parseInt((barOffset - this.mapEl.getBoundingClientRect().y) + (cardHeight/2) + ((pathRect.y > barOffset) ? (pathRect.y - (pathRect.height/2)) : (pathRect.y - (pathRect.height/2) + (barOffset - pathRect.y))));\n }\n }\n\n let mapSvg = document.querySelector('.state-index-map');\n mapSvg.classList.add('state-selected');\n if(mapSvg.querySelector('.selected')){\n mapSvg.querySelector('.selected').classList.remove('selected');\n }\n path.classList.add('selected');\n let stateProfileData = this.stateProfileData(data);\n let profileCard = this.stateProfileCard(stateProfileData);\n this.statePopup.html(profileCard)\n .style('left', `${x}px`)\n .style('top', `${y}px`)\n .attr(\"class\", \"state-popup open\");\n },\n\n //gets each statedate formatted for profile from passed click event\n stateProfileData: function(data){\n let parentKey = Object.keys(this.manifest)[0];\n let metrics = this.manifest[parentKey].children;\n let profileData = {\n stateName: data.name,\n stateRank: data[parentKey],\n stateCount: this.stateCount,\n statePercentileColor: data.score_color,\n statePercentileName: data.score_tier,\n metrics: [],\n stateLink: data.state_url\n };\n for(var key in metrics){\n profileData.metrics.push({\n metricName: metrics[key].name,\n metricRank: data[key],\n metricCount: this.stateCount\n });\n }\n\n return profileData;\n },\n\n // rendered prfoile card with handlebars\n stateProfileCard: function(stateData){\n let template = document.getElementById('stateProfileCard').innerHTML;\n let card = Handlebars.compile(template);\n\n return card(stateData);\n },\n};\n\nexport default map;\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import Handlebars from 'handlebars';\nimport api from './api';\n\nconst table = {\n manifest: null,\n template: null,\n page: 1,\n offset: 0,\n limit: 10,\n sort: typeof stateKey == 'undefined' ? 'state_s' : stateKey,\n order: 'asc',\n stateData: [],\n tableEl: null,\n end: false,\n\n // initialize drawing table by getting maniefest data, in callback retrieve state data, and then format data for table\n init: function(){\n api.getManifest().then(res => {\n this.manifest = res.body;\n this.getStateData(\"initialize\");\n });\n this.tableEl = document.getElementById('table');\n },\n\n getStateData: function(option, callbackFn = (()=>{})){\n api.getStateData({fields: 'dcwsi_ind_i,wsp_ind_i,dcwe_ind_i', limit: this.limit, page: this.page, offset: this.offset, sortBy: this.sort, order: this.order}).then(res => {\n //clicking header row will replace data ordered by column\n if(option == 'replace'){\n this.stateData = res.body.data;\n } else {\n // clicking pagination will append fecthed data\n this.stateData = [...this.stateData, ...res.body.data];\n }\n // initial setup and listeners\n if(option == 'initialize'){\n this.page = this.page + 1;\n this.tableEl.innerHTML = this.renderTable();\n this.attachClickListener();\n } else {\n // we're reached end\n if(!(this.stateData.length < res.body.meta.count)){\n this.end = true;\n }\n callbackFn();\n }\n });\n },\n\n attachClickListener: function(){\n document.body.addEventListener('click', (e) => {\n let el = e.target;\n if(el.classList.contains('.load-next') || el.closest('.load-next')){\n let btn = el.classList.contains('.load-next') ? el : el.closest('.load-next');\n this.loadStatesClickHandler(btn);\n }\n if(el.classList.contains('.sort-table') || el.closest('.sort-table')){\n let btn = el.classList.contains('.sort-table') ? el : el.closest('.sort-table');\n this.tableHeadingClickHandler(btn);\n }\n if(el.classList.contains('.state-dropdown-trigger') || el.closest('.state-dropdown-trigger')){\n let btn = el.classList.contains('.state-dropdown-trigger') ? el : el.closest('.state-dropdown-trigger');\n let btnWrapper = btn.closest('.mobile-wrapper');\n let stateInfo = btnWrapper.querySelector('.state-dropdown');\n btnWrapper.classList.toggle('open');\n document.querySelectorAll('.mobile-wrapper.open').forEach((wrapper) => {\n if(btnWrapper !== wrapper){\n wrapper.classList.remove('open');\n }\n });\n stateInfo.style.maxHeight = `${stateInfo.scrollHeight}px`;\n }\n });\n },\n\n //sort by header value\n tableHeadingClickHandler: function(btn){\n this.order = (this.order == 'asc' && this.sort == btn.dataset.sort) ? 'desc' : 'asc';\n this.sort = btn.dataset.sort;\n let initialPage = this.page;\n let initialLimit = this.limit;\n this.limit = this.stateData.length;\n this.page = 1;\n this.getStateData('replace', () => {\n this.page = initialPage;\n this.limit = initialLimit;\n let tableHtml = this.renderTable();\n this.tableEl.innerHTML = tableHtml;\n });\n },\n\n //get next set of states\n loadStatesClickHandler: function(btn){\n if(!this.end){\n this.getStateData('append', () => {\n this.page = this.page + 1;\n let tableHtml = this.renderTable();\n this.tableEl.innerHTML = tableHtml;\n });\n } else {\n let opacity = parseFloat(window.getComputedStyle(btn).getPropertyValue('opacity'));\n btn.style.opacity = opacity * 0.666;\n }\n },\n\n //combine manieft and state to table rendered in handlebars\n renderTable: function(){\n if(!this.template){\n this.template = document.getElementById('statesTable').innerHTML;\n }\n let table = Handlebars.compile(this.template);\n let tableData = {states: []};\n let rankKey = Object.keys(this.manifest)[0];\n tableData.heading = this.manifest[rankKey].name + ' Rankings';\n let children = this.manifest[rankKey].children;\n tableData.columns = [\n {label: 'Rank', sort: rankKey, order: this.sort == rankKey ? this.order : null},\n {label: 'State', sort: stateKey, order: this.sort == stateKey ? this.order : null},\n ];\n for(var key in children){\n tableData.columns.push({label: children[key].name, sort: key, suffix: (this.manifest[rankKey].unit_position == 'After' ? this.manifest[rankKey].unit : ''), order: this.sort == key ? this.order : null});\n }\n this.stateData.forEach((state) => {\n let stateObj = {};\n tableData.columns.forEach((column) => {\n stateObj[column.sort] = state[column.sort];\n stateObj.order = [column.order];\n\n });\n stateObj[stateKey] = {url: state.url, title: state.name};\n tableData.states.push(stateObj);\n });\n tableData.query = {\n page: this.page,\n offset: this.offset,\n limit: this.limit,\n sort: this.sort,\n order: this.order\n };\n\n return table(tableData);\n },\n}\n\nexport default table;\n","import { select, selection, selectAll, mouse, style } from \"d3-selection\";\nimport { min, max, range, domain } from \"d3-array\";\nimport { geoAlbersUsa, geoPath } from \"d3-geo\";\nimport { axisBottom, axisLeft, axisTop } from 'd3-axis';\nimport { scale, scaleQuantize, scaleLinear, scaleBand } from \"d3-scale\";\nimport { json } from \"d3-request\";\nimport { transition } from \"d3-transition\";\n\nexport default {\n select: select,\n selection: selection,\n selectAll: selectAll,\n mouse: mouse,\n style: style,\n min: min,\n max: max,\n range: range,\n domain: domain,\n geoAlbersUsa: geoAlbersUsa,\n geoPath: geoPath,\n axisBottom: axisBottom,\n axisLeft: axisLeft,\n axisTop: axisTop,\n scale: scale,\n scaleQuantize: scaleQuantize,\n scaleLinear: scaleLinear,\n scaleBand: scaleBand,\n json: json,\n transition: transition\n};\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([selector == null ? [] : selector], root);\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n max;\n\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\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\n return max;\n}\n","// import * as d3 from 'd3';\nimport d3 from './d3-import.js';\nimport api from './api';\nimport utils from './utils';\n\nconst graph = {\n manifest: null,\n stateCount: null,\n\n //gets and store manifest and attaches event listeners to compare buttons\n init: function(){\n api.getManifest(\"/\").then(res => {\n this.manifest = res.body;\n });\n document.querySelectorAll('button.tooltip').forEach((btn) => {\n btn.addEventListener('click', (e) => {\n if(btn.classList.contains('open')){\n btn.classList.remove('open');\n } else {\n btn.classList.add('open');\n }\n });\n });\n document.querySelectorAll('.tier4 li button').forEach((btn) => {\n btn.addEventListener('click', (e) => {\n if(btn.classList && btn.classList.contains('save-image')){\n utils.domNodeImg('.tier4.data-tier li.compare', btn.dataset.title);\n } else {\n let row = btn.closest('li');\n if(row.classList.contains('compare')){\n row.querySelector('.graph-row').style.maxHeight = '0px';\n row.classList.remove('compare');\n btn.setAttribute('aria-expanded', false);\n } else {\n let open = document.querySelector('li.compare');\n if(open){\n open.querySelector('.graph-row').style.maxHeight = '0px';\n open.classList.remove('compare');\n open.querySelector('button').setAttribute('aria-expanded', false);\n }\n\n btn.setAttribute('aria-expanded', true);\n row.classList.add('compare');\n let graphContainer = row.querySelector('.graph-row');\n let height = graphContainer.scrollHeight;\n graphContainer.style.maxHeight = `${height*2}px`;\n\n let stateAbbr = btn.dataset.state;\n let metricKey = btn.dataset.metric;\n let metricValue = btn.dataset.value;\n let graphEl = document.getElementById(`graph_${stateAbbr}_${metricKey}`);\n if(graphEl.classList.contains('loading')){\n this.renderGraph(graphEl,{\n 'stateAbbr': stateAbbr,\n 'metricKey': metricKey,\n 'metricValue': metricValue\n });\n }\n }\n }\n });\n });\n\n window.addEventListener(\"resize\",utils.debounce(function(e){\n document.querySelectorAll('.graph').forEach((graph) => {\n graph.innerHTML = '';\n graph.classList.add('loading');\n graph.closest('li').classList ? graph.closest('li').classList.remove('compare') : null;\n });\n }));\n },\n\n //rendered boolean data\n renderBoolViz: function(viz){\n let legendOffset = viz.size.width > 894 ? 225 : (viz.size.width > 590 ? 175 : 0);\n d3.json(viz.url+`&sortBy=${viz.metricKey}&order=desc`, (data) => {\n let circles = [];\n let states = [];\n let rowCount = viz.size.width > 894 ? 4 : (viz.size.width > 590 ? 6 : 13);\n let colCount = viz.size.width > 894 ? 13 : (viz.size.width > 590 ? 9 : 4);\n let gapRatio = viz.size.width > 894 ? .2 : (viz.size.width > 590 ? .1 : .2);\n let width = viz.size.width - legendOffset;\n let gapDist = (width / colCount) * gapRatio;\n let radii = (width / colCount)-gapDist;\n let vizHeight = viz.size.width > 590 ? width * (rowCount/colCount) : (rowCount+1) * (gapDist + radii) + 64;\n // console.log(viz.size.width,vizHeight,width,gapDist,radii);\n\n let color = d3.scaleLinear()\n .domain([0,1])\n .range([\"#d48028\",\"#1d9ad6\"]);\n\n let legendText = [\"No\",\"Yes\"];\n\n let svg = d3.select(viz.graphEl)\n .append(\"svg\")\n .attr(\"class\", \"state-metric-bool\")\n .attr(\"preserveAspectRatio\",\"xMinYMin\")\n .attr(\"width\", viz.size.width)\n .attr(\"height\", vizHeight)\n .attr(\"viewBox\", \"0 0 \" + viz.size.width + \" \" + vizHeight);\n\n let legend = d3.select(viz.graphEl).append(\"div\")\n .attr(\"transform\", 'translate(20,0)')\n .attr(\"class\", \"bool-legend\")\n .selectAll('.bool-legend div')\n .data([1,0])\n .enter().append(\"div\");\n\n legend.append('span')\n .attr(\"class\", \"circle\")\n .style(\"background-color\", color);\n\n legend.append('span')\n .attr(\"class\", \"bool-legend-text\")\n .text(function(d){\n return legendText[d];\n });\n\n\n while(data.data.length > 0){\n let groups = data.data.splice(0,colCount);\n circles.push({states: groups});\n }\n\n circles.forEach((group,ix) => {\n (Object.values(group)[0]).forEach((item,i) => {\n item.x = i * ((width/colCount)+(gapDist/colCount)) + (viz.size.width > 590 ? 0 : 5);\n states.push(item);\n });\n })\n\n let dataCircles = svg.append(\"g\")\n .attr(\"transform\", `translate(${viz.size.width > 894 ? legendOffset : legendOffset - 5},${(legendOffset == 0 ? '64' : '0')})`)\n .attr(\"class\", \"boolean-states\");\n\n let bools = dataCircles.selectAll('rect')\n .data(states)\n .enter().append(\"rect\")\n .attr(\"class\", (d) => {\n return (d.abbr == viz.stateAbbr ? 'circle current' : 'circle');\n })\n .attr(\"rx\",radii)\n .attr(\"ry\",radii)\n .attr(\"x\", (d) => {\n return d.x;\n })\n .attr(\"y\", (d, i) => {\n return (parseInt(i/colCount) * (width / colCount))+5;\n })\n .attr(\"width\", (d,i) => {\n return d.abbr == viz.stateAbbr ? (radii - 5) : radii;\n })\n .attr(\"height\", (d,i) => {\n return d.abbr == viz.stateAbbr ? (radii - 5) : radii;\n })\n .style(\"fill\", (d,i) => {\n let val = d[viz.metricKey];\n if(val){\n if(d.abbr == viz.stateAbbr){\n return '#fff';\n } else {\n return color(1);\n }\n } else {\n if(d.abbr == viz.stateAbbr){\n return '#fff';\n } else {\n return color(0);\n }\n }\n })\n .style(\"stroke\", (d,i) => {\n let val = d[viz.metricKey];\n if(val){\n if(d.abbr == viz.stateAbbr){\n return color(1);\n } else {\n return 'transparent';\n }\n } else {\n if(d.abbr == viz.stateAbbr){\n return color(0);\n } else {\n return 'transparent';\n }\n }\n }).exit()\n .data(states)\n .enter().append('text')\n .attr(\"class\", (d) => {\n return (d.abbr == viz.stateAbbr ? 'current state-circle-text' : 'state-circle-text');\n })\n .attr(\"x\", (d) => {\n return (d.abbr == viz.stateAbbr ? d.x + ((radii - 5)/2) : d.x + (radii/2));\n })\n .attr(\"y\", (d, i) => {\n return (d.abbr == viz.stateAbbr ? ((parseInt(i/colCount) * (width / colCount)) + 5)+((radii - 5)/2) : ((parseInt(i/colCount) * (width / colCount)) + 5)+(radii/2));\n })\n .attr(\"dy\", \".4em\")\n .style(\"text-anchor\", \"middle\")\n .text(function(d){\n return d.abbr;\n });\n\n\n viz.graphEl.classList.remove('loading');\n\n setTimeout(() => {\n if(viz.graphEl.getBoundingClientRect().top < 138){\n window.scrollTo({\n top: viz.graphEl.offsetTop,\n left: 0,\n behavior: 'smooth'\n });\n }\n }, 250);\n });\n },\n\n // gets all states values for clicked on row to create bar chart\n renderGraph: function(graphEl,row){\n let stateMetricsDataUrl = `/wp-json/wp/v2/states?fields=${row.metricKey}`;\n let graphWidth = graphEl.getBoundingClientRect().width;\n let graphHeight = graphWidth > 894 ? graphWidth * 0.3125 : 999;\n\n if(row.metricKey.substr(-1) == \"b\"){\n this.renderBoolViz({\n 'url': stateMetricsDataUrl,\n 'graphEl': graphEl,\n 'size': {\n 'width': graphWidth\n },\n ...row\n });\n } else {\n let color = d3.scaleQuantize()\n .domain([1, 100])\n .range([\"#d48028\",\"#dcab27\",\"#00b0ab\",\"#1d9ad6\"]);\n\n let legendText = Object.values(JSON.parse(statePercentiles));\n\n let svg = d3.select(graphEl)\n .append(\"svg\")\n .attr(\"class\", \"state-metric-graph\")\n .attr(\"preserveAspectRatio\",\"xMinYMin\")\n .attr(\"width\", graphWidth)\n .attr(\"height\", graphHeight)\n .attr(\"viewBox\", \"0 0 \" + graphWidth + \" \" + graphHeight);\n\n let formatter = {\n format: function(input){\n return input;\n }\n };\n let metric = this.manifest.find(metric => metric.key === row.metricKey);\n if(metric.unit == \"$\"){\n formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n });\n } else if(metric.unit == \"%\"){\n formatter.format = (input) => {\n return `${input}%`;\n };\n }\n\n let yScaleOffset = (((formatter.format(Math.ceil(row.metricValue))).toString().length+1) * 6) + 12;\n let xScale = d3.scaleBand().range([0, (graphWidth > 894 ? (graphWidth-yScaleOffset) : graphHeight-32)]).padding(.5);\n let yScale = d3.scaleLinear().range([(graphWidth > 894 ? graphHeight-30 : 0), (graphWidth > 894 ? 0 : graphWidth-(yScaleOffset*1.5))]);\n let g = svg.append(\"g\").attr(\"transform\", `translate(${(graphWidth > 894 ? yScaleOffset : yScaleOffset)},${(graphWidth > 894 ? '6' : '16')})`);\n\n d3.json(stateMetricsDataUrl, (data) => {\n let states = data.data;\n this.stateCount = states.length;\n\n xScale.domain(states.map(function(d){\n return d.abbr;\n }));\n\n let yMin = d3.min(states, function(d){\n return d[row.metricKey];\n });\n let yMax = d3.max(states, function(d){\n return d[row.metricKey];\n })\n let scaleMinY = yMin > 0 ? 0 : Math.floor(yMin);\n let scaleMaxY = yMax < 0 ? 0 : Math.ceil(yMax);\n let tickCount = (graphWidth > 300) ? 10 : 5;\n\n yScale.domain([scaleMinY,scaleMaxY]);\n\n if(graphWidth > 894){\n g.append(\"g\")\n .attr(\"transform\", \"translate(0,\" + (graphHeight-30) + \")\")\n .call(d3.axisBottom(xScale));\n\n g.append(\"g\")\n .call(d3.axisLeft(yScale).tickFormat(function(d){\n return formatter.format(d);\n }).ticks(tickCount))\n .append(\"text\")\n .attr(\"y\", 6)\n .attr(\"dy\", \"0.71em\")\n .attr(\"text-anchor\", \"end\")\n .text(\"value\");\n } else {\n g.append(\"g\")\n .attr(\"transform\", \"translate(0,0)\")\n .call(d3.axisLeft(xScale));\n\n g.append(\"g\")\n .attr(\"transform\", \"translate(0,0)\")\n .call(d3.axisTop(yScale).tickFormat(function(d){\n return formatter.format(d);\n }).ticks(tickCount))\n .append(\"text\")\n .attr(\"y\", 6)\n .attr(\"dy\", \"0.71em\")\n .attr(\"text-anchor\", \"end\")\n .text(\"value\");\n }\n\n g.selectAll(\".bar\")\n .data(states)\n .enter().append(\"g\")\n .attr(\"class\", (d) => {\n return (d.abbr == row.stateAbbr ? 'bar current' : 'bar');\n })\n .append((d,i) => {\n let score = d[row.metricKey];\n let fill = '#5D6367';\n if(score){\n let percentile = utils.percentile(states, row.metricKey, score);\n fill = color(Math.ceil(percentile));\n }\n let fragment = document.createDocumentFragment();\n let rectWidth = graphWidth > 894 ? (graphWidth-yScaleOffset)/103 : (graphHeight)/103;\n if(d.abbr == row.stateAbbr){\n let wrapper = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n if(graphWidth > 894){\n wrapper.setAttribute('x', xScale(d.abbr) - (rectWidth/2));\n wrapper.setAttribute('y', 0);\n wrapper.setAttribute('width', rectWidth*2);\n wrapper.setAttribute('height', graphHeight);\n } else {\n wrapper.setAttribute('y', xScale(d.abbr) - (rectWidth/2));\n wrapper.setAttribute('x', -30);\n wrapper.setAttribute('height', rectWidth*2);\n wrapper.setAttribute('width', graphWidth);\n }\n wrapper.setAttribute('fill', fill);\n wrapper.setAttribute('class', 'wrapper');\n fragment.appendChild(wrapper);\n }\n let rect = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n if(graphWidth > 894){\n rect.setAttribute('x', xScale(d.abbr));\n rect.setAttribute('y', yScale(d[row.metricKey]));\n rect.setAttribute('width', xScale.bandwidth());\n rect.setAttribute('height', (graphHeight-30) - yScale(d[row.metricKey]));\n } else {\n rect.setAttribute('y', xScale(d.abbr));\n rect.setAttribute('x', 0);\n rect.setAttribute('height', xScale.bandwidth());\n rect.setAttribute('width', yScale(d[row.metricKey]));\n }\n\n rect.setAttribute('fill', fill);\n fragment.appendChild(rect);\n\n return fragment;\n });\n\n let legend = d3.select(graphEl)\n .append(\"div\")\n .attr(\"class\", \"legend\")\n .attr(\"width\", (graphWidth*.7))\n .selectAll(\".legend div\")\n .data([100,75,50,25])\n .enter().append(\"div\");\n\n legend.append(\"span\")\n .attr(\"class\", \"circle\")\n .style(\"background-color\", color);\n\n legend.append(\"span\")\n .data(legendText)\n .text(function(d){\n return d;\n });\n\n graphEl.classList.remove('loading');\n\n setTimeout(() => {\n if(graphEl.getBoundingClientRect().top < 138){\n window.scrollTo({\n top: graphEl.offsetTop,\n left: 0,\n behavior: 'smooth'\n });\n }\n }, 250);\n });\n }\n },\n};\n\nexport default graph;\n","// Main js to state index\nimport utils from \"./utils\";\nimport map from \"./map\";\nimport table from \"./table\";\nimport graph from \"./graph\";\n\nconst stateIndex = {\n // wp_add_inline_script current queryied object\n stateIndexObject:\n typeof stateIndexObject == \"undefined\" ? null : stateIndexObject,\n\n // main init function for state-index and single state pages\n init: function () {\n if (!this.stateIndexObject) {\n return false;\n }\n\n if (this.stateIndexObject.post_type == \"state\") {\n // on single state, initialize compare listeners and ready to draw graphs\n graph.init();\n\n document.querySelectorAll(\".pdf-download\").forEach((pdfBtn) => {\n pdfBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n pdfBtn.classList.add(\"loading\");\n utils.statePdf(window.location.href + \"pdf\", function () {\n pdfBtn.classList.remove(\"loading\");\n });\n });\n });\n } else {\n // index tool page draw map and table\n map.init();\n table.init();\n }\n },\n};\n\nconst stateIndexer = stateIndex.init;\nconst stateIndexTool = stateIndexer.bind(stateIndex);\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n stateIndexTool();\n});\n"],"sourceRoot":""}